diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..6862d2d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+SOURCES/glibc-2.17-c758a686-releng.tar.gz
+SOURCES/glibc-2.17-c758a686.tar.gz
diff --git a/.glibc.metadata b/.glibc.metadata
new file mode 100644
index 0000000..5ca6e2b
--- /dev/null
+++ b/.glibc.metadata
@@ -0,0 +1,2 @@
+3dd002978c064e6e318eefef5534467fe548603e SOURCES/glibc-2.17-c758a686-releng.tar.gz
+4fba0f86423c135f33a82cf8b58664aacf72f628 SOURCES/glibc-2.17-c758a686.tar.gz
diff --git a/SOURCES/glibc-aa64-commonpagesize-64k.patch b/SOURCES/glibc-aa64-commonpagesize-64k.patch
new file mode 100644
index 0000000..a18a0e3
--- /dev/null
+++ b/SOURCES/glibc-aa64-commonpagesize-64k.patch
@@ -0,0 +1,11 @@
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/preconfigure	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/preconfigure	2014-05-12 14:29:52.007239252 -0400
+@@ -8,7 +8,7 @@
+ case "$machine" in
+ aarch64*)
+ 	# Parameters to allow auto-detection of -z relro.
+-	libc_commonpagesize=0x1000
++	libc_commonpagesize=0x10000
+ 	libc_relro_required=yes
+ 	;;
+ esac
diff --git a/SOURCES/glibc-aa64-setcontext.patch b/SOURCES/glibc-aa64-setcontext.patch
new file mode 100644
index 0000000..60fc6a5
--- /dev/null
+++ b/SOURCES/glibc-aa64-setcontext.patch
@@ -0,0 +1,220 @@
+Backport
+
+37d350073888887637aa67dddf988d9c4b226032 \
+  aarch64: Re-implement setcontext without rt_sigreturn syscall
+03ea4d9b6916857e3c2a021f55d2a853cb837398 \
+  [AArch64] Simplify getcontext pstate initialization.
+6e445a3d2bdf152ebf57d1c92bfea1828e070743 \
+  [AArch64] Ensure getcontext() initializes PSTATE.
+
+
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S
+index aff2e32..70b2e32 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/getcontext.S
+@@ -1,6 +1,6 @@
+ /* Save current context.
+ 
+-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
++   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ 
+    This file is part of the GNU C Library.
+ 
+@@ -53,6 +53,9 @@ ENTRY(__getcontext)
+ 	mov	x2, sp
+ 	str     x2, [x0, oSP]
+ 
++	/* Initialize the pstate.  */
++	str	xzr, [x0, oPSTATE]
++
+ 	/* Figure out where to place the first context extension
+ 	   block.  */
+ 	add     x2, x0, #oEXTENSION
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
+index a98f67f..f45a655 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/setcontext.S
+@@ -1,6 +1,6 @@
+ /* Set current context.
+ 
+-   Copyright (C) 2009-2012 Free Software Foundation, Inc.
++   Copyright (C) 2009-2014 Free Software Foundation, Inc.
+ 
+    This file is part of the GNU C Library.
+ 
+@@ -22,68 +22,108 @@
+ #include "ucontext_i.h"
+ #include "ucontext-internal.h"
+ 
+-/* int setcontext (const ucontext_t *ucp) */
++/*  int __setcontext (const ucontext_t *ucp)
+ 
+-	.text
+-
+-ENTRY(__setcontext)
+-
+-	/* Create a signal frame on the stack:
+-
+-		fp
+-		lr
+-		...
+-	   sp-> rt_sigframe
+-	 */
+-
+-	stp     x29, x30, [sp, -16]!
+-	cfi_adjust_cfa_offset (16)
+-	cfi_rel_offset (x29, 0)
+-	cfi_rel_offset (x30, 8)
+-
+-        mov     x29, sp
+-	cfi_def_cfa_register (x29)
+-
+-	/* Allocate space for the sigcontext.  */
+-	mov	w3, #((RT_SIGFRAME_SIZE + SP_ALIGN_SIZE) & SP_ALIGN_MASK)
+-	sub	sp, sp,	x3
++  Restores the machine context in UCP and thereby resumes execution
++  in that context.
+ 
+-	/* Compute the base address of the ucontext structure.  */
+-	add	x1, sp, #RT_SIGFRAME_UCONTEXT
++  This implementation is intended to be used for *synchronous* context
++  switches only.  Therefore, it does not have to restore anything
++  other than the PRESERVED state.  */
+ 
+-	/* Only ucontext is required in the frame, *copy* it in.  */
+-
+-#if UCONTEXT_SIZE % 16
+-#error The implementation of setcontext.S assumes sizeof(ucontext_t) % 16 == 0
+-#endif
+-
+-	mov	x2, #UCONTEXT_SIZE / 16
+-0:
+-	ldp	x3, x4, [x0], #16
+-	stp	x3, x4, [x1], #16
+-	sub	x2, x2, 1
+-	cbnz	x2, 0b
++	.text
+ 
+-	/* rt_sigreturn () -- no arguments, sp points to struct rt_sigframe.  */
+-	mov	x8, SYS_ify (rt_sigreturn)
++ENTRY (__setcontext)
++	/* Save a copy of UCP.  */
++	mov	x9, x0
++
++	/* Set the signal mask with
++	   rt_sigprocmask (SIG_SETMASK, mask, NULL, _NSIG/8).  */
++	mov	x0, #SIG_SETMASK
++	add	x1, x9, #UCONTEXT_SIGMASK
++	mov	x2, #0
++	mov	x3, #_NSIG8
++	mov	x8, SYS_ify (rt_sigprocmask)
+ 	svc	0
+-
+-	/* Ooops we failed.  Recover the stack */
+-
+-	mov	sp, x29
+-	cfi_def_cfa_register (sp)
+-
+-        ldp     x29, x30, [sp], 16
+-	cfi_adjust_cfa_offset (16)
+-	cfi_restore (x29)
+-	cfi_restore (x30)
+-	b	C_SYMBOL_NAME(__syscall_error)
+-
++	cbz	x0, 1f
++	b	C_SYMBOL_NAME (__syscall_error)
++1:
++	/* Restore the general purpose registers.  */
++	mov	x0, x9
++	cfi_def_cfa (x0, 0)
++	cfi_offset (x18, oX0 + 18 * SZREG)
++	cfi_offset (x19, oX0 + 19 * SZREG)
++	cfi_offset (x20, oX0 + 20 * SZREG)
++	cfi_offset (x21, oX0 + 21 * SZREG)
++	cfi_offset (x22, oX0 + 22 * SZREG)
++	cfi_offset (x23, oX0 + 23 * SZREG)
++	cfi_offset (x24, oX0 + 24 * SZREG)
++	cfi_offset (x25, oX0 + 25 * SZREG)
++	cfi_offset (x26, oX0 + 26 * SZREG)
++	cfi_offset (x27, oX0 + 27 * SZREG)
++	cfi_offset (x28, oX0 + 28 * SZREG)
++	cfi_offset (x29, oX0 + 29 * SZREG)
++	cfi_offset (x30, oX0 + 30 * SZREG)
++
++	cfi_offset ( d8, oV0 + 8 * SZVREG)
++	cfi_offset ( d9, oV0 + 9 * SZVREG)
++	cfi_offset (d10, oV0 + 10 * SZVREG)
++	cfi_offset (d11, oV0 + 11 * SZVREG)
++	cfi_offset (d12, oV0 + 12 * SZVREG)
++	cfi_offset (d13, oV0 + 13 * SZVREG)
++	cfi_offset (d14, oV0 + 14 * SZVREG)
++	cfi_offset (d15, oV0 + 15 * SZVREG)
++	ldp	x18, x19, [x0, oX0 + 18 * SZREG]
++	ldp	x20, x21, [x0, oX0 + 20 * SZREG]
++	ldp	x22, x23, [x0, oX0 + 22 * SZREG]
++	ldp	x24, x25, [x0, oX0 + 24 * SZREG]
++	ldp	x26, x27, [x0, oX0 + 26 * SZREG]
++	ldp	x28, x29, [x0, oX0 + 28 * SZREG]
++	ldr     x30,      [x0, oX0 + 30 * SZREG]
++	ldr     x2, [x0, oSP]
++	mov	sp, x2
++
++	/* Check for FP SIMD context.  We don't support restoring
++	   contexts created by the kernel, so this context must have
++	   been created by getcontext.  Hence we can rely on the
++	   first extension block being the FP SIMD context.  */
++	add     x2, x0, #oEXTENSION
++
++	mov	w3, #(FPSIMD_MAGIC & 0xffff)
++	movk	w3, #(FPSIMD_MAGIC >> 16), lsl #16
++	ldr	w1, [x2, #oHEAD + oMAGIC]
++	cmp	w1, w3
++	b.ne	2f
++
++	/* Restore the FP SIMD context.  */
++	add	x3, x2, #oV0 + 8 * SZVREG
++	ldp	 d8,  d9, [x3], #2 * SZVREG
++	ldp	d10, d11, [x3], #2 * SZVREG
++	ldp	d12, d13, [x3], #2 * SZVREG
++	ldp	d14, d15, [x3], #2 * SZVREG
++
++	add	x3, x2, oFPSR
++
++	ldr	w4, [x3]
++	msr	fpsr, x4
++
++	ldr	w4, [x3, oFPCR - oFPSR]
++	msr	fpcr, x4
++
++2:
++	ldr     x16, [x0, oPC]
++	/* Restore arg registers.  */
++	ldp	x2, x3, [x0, oX0 + 2 * SZREG]
++	ldp	x4, x5, [x0, oX0 + 4 * SZREG]
++	ldp	x6, x7, [x0, oX0 + 6 * SZREG]
++	ldp	x0, x1, [x0, oX0 + 0 * SZREG]
++	/* Jump to the new pc value.  */
++	br	x16
+ PSEUDO_END (__setcontext)
+ weak_alias (__setcontext, setcontext)
+ 
+-ENTRY(__startcontext)
++ENTRY (__startcontext)
+ 	mov	x0, x19
+ 	cbnz	x0, __setcontext
+-1:	b       HIDDEN_JUMPTARGET(_exit)
+-END(__startcontext)
++1:	b       HIDDEN_JUMPTARGET (_exit)
++END (__startcontext)
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym
+index 1afff78..ab3930c 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ucontext_i.sym
+@@ -37,6 +37,7 @@ STACK_FLAGS			stack (ss_flags)
+ oX0				mcontext (regs)
+ oSP				mcontext (sp)
+ oPC				mcontext (pc)
++oPSTATE				mcontext (pstate)
+ oEXTENSION                      mcontext (__reserved)
+ 
+ #define fpsimd_context(member)  offsetof (struct fpsimd_context, member)
diff --git a/SOURCES/glibc-aarch64-add-ptr_mangle-support.patch b/SOURCES/glibc-aarch64-add-ptr_mangle-support.patch
new file mode 100644
index 0000000..dbdc551
--- /dev/null
+++ b/SOURCES/glibc-aarch64-add-ptr_mangle-support.patch
@@ -0,0 +1,233 @@
+commit 9188b6818a3d1a6e6d89bf10fa4aea27a591494c
+Author: Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
+Date:   Wed Jan 1 17:47:14 2014 +0000
+
+    [AArch64] Pointer mangling support for AArch64.
+
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/__longjmp.S glibc-2.17-c758a686/ports/sysdeps/aarch64/__longjmp.S
+index 250f2af..2d38bbf 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/__longjmp.S
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/__longjmp.S
+@@ -50,8 +50,12 @@ ENTRY (__longjmp)
+ 	ldp	x23, x24, [x0, #JB_X23<<3]
+ 	ldp	x25, x26, [x0, #JB_X25<<3]
+ 	ldp	x27, x28, [x0, #JB_X27<<3]
++#ifdef PTR_DEMANGLE
++	ldp	x29,  x4, [x0, #JB_X29<<3]
++	PTR_DEMANGLE (x30, x4, x3, x2)
++#else
+ 	ldp	x29, x30, [x0, #JB_X29<<3]
+-
++#endif
+ 	ldp	 d8,  d9, [x0, #JB_D8<<3]
+ 	ldp	d10, d11, [x0, #JB_D10<<3]
+ 	ldp	d12, d13, [x0, #JB_D12<<3]
+@@ -87,8 +91,12 @@ ENTRY (__longjmp)
+ 	cfi_same_value(d13)
+ 	cfi_same_value(d14)
+ 	cfi_same_value(d15)
+-
+-	ldr	x5,  [x0, #JB_SP<<3]
++#ifdef PTR_DEMANGLE
++	ldr	x4, [x0, #JB_SP<<3]
++	PTR_DEMANGLE (x5, x4, x3, x2)
++#else
++	ldr	x5, [x0, #JB_SP<<3]
++#endif
+ 	mov	sp, x5
+ 	cmp	x1, #0
+ 	mov	x0, #1
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-offsets.h glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-offsets.h
+index 84c2ccc..bcf2afa 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-offsets.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-offsets.h
+@@ -39,6 +39,22 @@
+ #define JB_D14		 20
+ #define JB_D15		 21
+ 
++#ifndef  __ASSEMBLER__
++#include <setjmp.h>
++#include <stdint.h>
++#include <sysdep.h>
++
++static inline uintptr_t __attribute__ ((unused))
++_jmpbuf_sp (__jmp_buf jmpbuf)
++{
++  uintptr_t sp = jmpbuf[JB_SP];
++#ifdef PTR_DEMANGLE
++  PTR_DEMANGLE (sp);
++#endif
++  return sp;
++}
++#endif
++
+ /* Helper for generic ____longjmp_chk(). */
+ #define JB_FRAME_ADDRESS(buf) \
+-  ((void *) (buf[JB_SP]))
++  ((void *) _jmpbuf_sp (buf))
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-unwind.h glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-unwind.h
+index 22c6c2b..39a5dc2 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-unwind.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/jmpbuf-unwind.h
+@@ -29,16 +29,6 @@
+ #define _JMPBUF_CFA_UNWINDS_ADJ(jmpbuf, context, adj) \
+   _JMPBUF_UNWINDS_ADJ (jmpbuf, (void *) _Unwind_GetCFA (context), adj)
+ 
+-static inline uintptr_t __attribute__ ((unused))
+-_jmpbuf_sp (__jmp_buf jmpbuf)
+-{
+-  uintptr_t sp = jmpbuf[JB_SP];
+-#ifdef PTR_DEMANGLE
+-  PTR_DEMANGLE (sp);
+-#endif
+-  return sp;
+-}
+-
+ #define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \
+   ((uintptr_t) (_address) - (_adj) < _jmpbuf_sp (_jmpbuf) - (_adj))
+ 
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S
+index cb94e01..5822abd 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S
+@@ -39,13 +39,25 @@ ENTRY (__sigsetjmp)
+ 	stp	x23, x24, [x0, #JB_X23<<3]
+ 	stp	x25, x26, [x0, #JB_X25<<3]
+ 	stp	x27, x28, [x0, #JB_X27<<3]
++
++#ifdef PTR_MANGLE
++	PTR_MANGLE (x4, x30, x3, x2)
++	stp	x29,  x4, [x0, #JB_X29<<3]
++#else
+ 	stp	x29, x30, [x0, #JB_X29<<3]
++#endif
+ 	stp	 d8,  d9, [x0, #JB_D8<<3]
+ 	stp	d10, d11, [x0, #JB_D10<<3]
+ 	stp	d12, d13, [x0, #JB_D12<<3]
+ 	stp	d14, d15, [x0, #JB_D14<<3]
++#ifdef PTR_MANGLE
++	mov	x4, sp
++	PTR_MANGLE (x5, x4, x3, x2)
++	str	x5, [x0, #JB_SP<<3]
++#else
+ 	mov	x2,  sp
+ 	str	x2,  [x0, #JB_SP<<3]
++#endif
+ #if defined NOT_IN_libc && defined IS_IN_rtld
+ 	/* In ld.so we never save the signal mask */
+ 	mov	w0, #0
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/sysdep.h glibc-2.17-c758a686/ports/sysdeps/aarch64/sysdep.h
+index 0dd597a..7169ba7 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/sysdep.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/sysdep.h
+@@ -78,6 +78,17 @@
+ # define L(name)         .L##name
+ #endif
+ 
++/* Load or store to/from a pc-relative EXPR into/from R, using T.  */
++#define LDST_PCREL(OP, R, T, EXPR)  \
++	adrp	T, EXPR;	    \
++	OP	R, [T, #:lo12:EXPR];\
++
++/* Load or store to/from a got-relative EXPR into/from R, using T.  */
++#define LDST_GLOBAL(OP, R, T, EXPR)     \
++	adrp	T, :got:EXPR;		\
++	ldr	T, [T, #:got_lo12:EXPR];\
++	OP	R, [T];
++
+ /* Since C identifiers are not normally prefixed with an underscore
+    on this system, the asm identifier `syscall_error' intrudes on the
+    C name space.  Make sure we use an innocuous name.  */
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h
+index f3f0ada..5ccf1da 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h
+@@ -371,8 +371,44 @@ __local_syscall_error:						\
+ 
+ #endif	/* __ASSEMBLER__ */
+ 
+-/* Pointer mangling is not yet supported for AArch64.  */
+-#define PTR_MANGLE(var) (void) (var)
+-#define PTR_DEMANGLE(var) (void) (var)
++/* Pointer mangling is supported for AArch64.  */
++#if (defined NOT_IN_libc && defined IS_IN_rtld) || \
++  (!defined SHARED && (!defined NOT_IN_libc || defined IS_IN_libpthread))
++# ifdef __ASSEMBLER__
++#  define PTR_MANGLE(dst, src, guard, tmp)                                \
++  LDST_PCREL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard_local)); \
++  PTR_MANGLE2 (dst, src, guard)
++/* Use PTR_MANGLE2 for efficiency if guard is already loaded.  */
++#  define PTR_MANGLE2(dst, src, guard)\
++  eor dst, src, guard
++#  define PTR_DEMANGLE(dst, src, guard, tmp)\
++  PTR_MANGLE (dst, src, guard, tmp)
++#  define PTR_DEMANGLE2(dst, src, guard)\
++  PTR_MANGLE2 (dst, src, guard)
++# else
++extern uintptr_t __pointer_chk_guard_local attribute_relro attribute_hidden;
++#  define PTR_MANGLE(var) \
++  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard_local)
++#  define PTR_DEMANGLE(var)     PTR_MANGLE (var)
++# endif
++#else
++# ifdef __ASSEMBLER__
++#  define PTR_MANGLE(dst, src, guard, tmp)                             \
++  LDST_GLOBAL (ldr, guard, tmp, C_SYMBOL_NAME(__pointer_chk_guard));   \
++  PTR_MANGLE2 (dst, src, guard)
++/* Use PTR_MANGLE2 for efficiency if guard is already loaded.  */
++#  define PTR_MANGLE2(dst, src, guard)\
++  eor dst, src, guard
++#  define PTR_DEMANGLE(dst, src, guard, tmp)\
++  PTR_MANGLE (dst, src, guard, tmp)
++#  define PTR_DEMANGLE2(dst, src, guard)\
++  PTR_MANGLE2 (dst, src, guard)
++# else
++extern uintptr_t __pointer_chk_guard attribute_relro;
++#  define PTR_MANGLE(var) \
++  (var) = (__typeof (var)) ((uintptr_t) (var) ^ __pointer_chk_guard)
++#  define PTR_DEMANGLE(var) PTR_MANGLE (var)
++# endif
++#endif
+ 
+ #endif /* linux/aarch64/sysdep.h */
+commit 0b1f8e35640f5b3f7af11764ade3ff060211c309
+Author: Carlos O'Donell <carlos@redhat.com>
+Date:   Mon Sep 23 01:44:38 2013 -0400
+
+    BZ #15754: Fix test case for ARM.
+    
+    Statically built binaries use __pointer_chk_guard_local,
+    while dynamically built binaries use __pointer_chk_guard.
+    Provide the right definition depending on the test case
+    we are building.
+
+diff --git glibc-2.17-c758a686/elf/Makefile glibc-2.17-c758a686/elf/Makefile
+index cb8da93..27d249b 100644
+--- glibc-2.17-c758a686/elf/Makefile
++++ glibc-2.17-c758a686/elf/Makefile
+@@ -1019,6 +1019,9 @@ tst-stackguard1-ARGS = --command "$(host-test-program-cmd) --child"
+ tst-stackguard1-static-ARGS = --command "$(objpfx)tst-stackguard1-static --child"
+ 
+ tst-ptrguard1-ARGS = --command "$(host-built-program-cmd) --child"
++# When built statically, the pointer guard interface uses
++# __pointer_chk_guard_local.
++CFLAGS-tst-ptrguard1-static.c = -DPTRGUARD_LOCAL
+ tst-ptrguard1-static-ARGS = --command "$(objpfx)tst-ptrguard1-static --child"
+ 
+ $(objpfx)tst-leaks1: $(libdl)
+diff --git glibc-2.17-c758a686/sysdeps/generic/stackguard-macros.h glibc-2.17-c758a686/sysdeps/generic/stackguard-macros.h
+index 4fa3d96..b4a6b23 100644
+--- glibc-2.17-c758a686/sysdeps/generic/stackguard-macros.h
++++ glibc-2.17-c758a686/sysdeps/generic/stackguard-macros.h
+@@ -3,5 +3,10 @@
+ extern uintptr_t __stack_chk_guard;
+ #define STACK_CHK_GUARD __stack_chk_guard
+ 
++#ifdef PTRGUARD_LOCAL
+ extern uintptr_t __pointer_chk_guard_local;
+-#define POINTER_CHK_GUARD __pointer_chk_guard_local
++# define POINTER_CHK_GUARD __pointer_chk_guard_local
++#else
++extern uintptr_t __pointer_chk_guard;
++# define POINTER_CHK_GUARD __pointer_chk_guard
++#endif
diff --git a/SOURCES/glibc-aarch64-fpu-optional-trapping-exceptions.patch b/SOURCES/glibc-aarch64-fpu-optional-trapping-exceptions.patch
new file mode 100644
index 0000000..0afa504
--- /dev/null
+++ b/SOURCES/glibc-aarch64-fpu-optional-trapping-exceptions.patch
@@ -0,0 +1,122 @@
+commit 302949e2940a9da3f6364a1574619e621b7e1e71
+Author: Marcus Shawcroft <marcus.shawcroft@arm.com>
+Date:   Fri Mar 7 14:05:20 2014 +0000
+
+    [PATCH] [AArch64] Optional trapping exceptions support.
+    
+    Trapping exceptions in AArch64 are optional.  The relevant exception
+    control bits in FPCR are are defined as RES0 hence the absence of
+    support can be detected by reading back the FPCR and comparing with
+    the desired value.
+
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/fpu/feenablxcpt.c
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/fpu/feenablxcpt.c
+@@ -35,5 +35,18 @@ feenableexcept (int excepts)
+ 
+   _FPU_SETCW (fpcr);
+ 
++  /* Trapping exceptions are optional in AArch64 the relevant enable
++     bits in FPCR are RES0 hence the absence of support can be
++     detected by reading back the FPCR and comparing with the required
++     value.  */
++  if (excepts)
++    {
++      fpu_control_t updated_fpcr;
++
++      _FPU_GETCW (updated_fpcr);
++      if (((updated_fpcr >> FE_EXCEPT_SHIFT) & excepts) != excepts)
++	return -1;
++    }
++
+   return original_excepts;
+ }
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/fpu/fesetenv.c
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/fpu/fesetenv.c
+@@ -24,6 +24,7 @@ fesetenv (const fenv_t *envp)
+ {
+   fpu_control_t fpcr;
+   fpu_fpsr_t fpsr;
++  fpu_control_t updated_fpcr;
+ 
+   _FPU_GETCW (fpcr);
+   _FPU_GETFPSR (fpsr);
+@@ -51,6 +52,15 @@ fesetenv (const fenv_t *envp)
+ 
+   _FPU_SETCW (fpcr);
+ 
++  /* Trapping exceptions are optional in AArch64 the relevant enable
++     bits in FPCR are RES0 hence the absence of support can be
++     detected by reading back the FPCR and comparing with the required
++     value.  */
++
++  _FPU_GETCW (updated_fpcr);
++  if ((updated_fpcr & fpcr) != fpcr)
++    return 1;
++
+   return 0;
+ }
+ 
+commit 423a7160af7fcffc61aac5e2e36d0b6b5b083214
+Author: Wilco <wdijkstr@arm.com>
+Date:   Thu Apr 17 09:39:27 2014 +0100
+
+    Add fenv test support for targets which don't have FP traps.
+
+(removed unnecessary code to limit it to test-fenv.c --kyle)
+
+--- glibc-2.17-c758a686/math/test-fenv.c
++++ glibc-2.17-c758a686/math/test-fenv.c
+@@ -233,14 +234,9 @@ feenv_nomask_test (const char *flag_name, int fe_exc)
+ #if defined FE_NOMASK_ENV
+   int status;
+   pid_t pid;
+-  fenv_t saved;
+ 
+-  fegetenv (&saved);
+-  errno = 0;
+-  fesetenv (FE_NOMASK_ENV);
+-  status = errno;
+-  fesetenv (&saved);
+-  if (status == ENOSYS)
++  if (1
++      && fesetenv (FE_NOMASK_ENV) != 0)
+     {
+       printf ("Test: not testing FE_NOMASK_ENV, it isn't implemented.\n");
+       return;
+@@ -349,7 +345,13 @@ feexcp_nomask_test (const char *flag_name, int fe_exc)
+   int status;
+   pid_t pid;
+ 
+-  printf ("Test: after fedisableexcept (%s) processes will abort\n",
++  if (1 && feenableexcept (fe_exc) == -1)
++    {
++      printf ("Test: not testing feenableexcept, it isn't implemented.\n");
++      return;
++    }
++
++  printf ("Test: after feenableexcept (%s) processes will abort\n",
+ 	  flag_name);
+   printf ("      when feraiseexcept (%s) is called.\n", flag_name);
+   pid = fork ();
+@@ -470,7 +472,6 @@ feenable_test (const char *flag_name, int fe_exc)
+ {
+   int excepts;
+ 
+-
+   printf ("Tests for feenableexcepts etc. with flag %s\n", flag_name);
+ 
+   /* First disable all exceptions.  */
+@@ -488,8 +489,12 @@ feenable_test (const char *flag_name, int fe_exc)
+ 	      flag_name, excepts);
+       ++count_errors;
+     }
+-
+   excepts = feenableexcept (fe_exc);
++  if (1 && excepts == -1)
++    {
++      printf ("Test: not testing feenableexcept, it isn't implemented.\n");
++      return;
++    }
+   if (excepts == -1)
+     {
+       printf ("Test: feenableexcept (%s) failed\n", flag_name);
diff --git a/SOURCES/glibc-aarch64-ifunc.patch b/SOURCES/glibc-aarch64-ifunc.patch
new file mode 100644
index 0000000..7ee9f1f
--- /dev/null
+++ b/SOURCES/glibc-aarch64-ifunc.patch
@@ -0,0 +1,216 @@
+diff --git glibc-2.17-c758a686/elf/elf.h glibc-2.17-c758a686/elf/elf.h
+index 8686fd5..2b10581 100644
+--- glibc-2.17-c758a686/elf/elf.h
++++ glibc-2.17-c758a686/elf/elf.h
+@@ -2327,6 +2327,117 @@ typedef Elf32_Addr Elf32_Conflict;
+ #define R_AARCH64_NONE            0	/* No relocation.  */
+ #define R_AARCH64_ABS64         257	/* Direct 64 bit. */
+ #define R_AARCH64_ABS32         258	/* Direct 32 bit.  */
++#define R_AARCH64_ABS16         259	/* Direct 16-bit.  */
++#define R_AARCH64_PREL64        260	/* PC-relative 64-bit.  */
++#define R_AARCH64_PREL32        261	/* PC-relative 32-bit.  */
++#define R_AARCH64_PREL16        262	/* PC-relative 16-bit.  */
++#define R_AARCH64_MOVW_UABS_G0  263	/* Dir. MOVZ imm. from bits 15:0.  */
++#define R_AARCH64_MOVW_UABS_G0_NC 264	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_UABS_G1  265	/* Dir. MOVZ imm. from bits 31:16.  */
++#define R_AARCH64_MOVW_UABS_G1_NC 266	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_UABS_G2  267	/* Dir. MOVZ imm. from bits 47:32.  */
++#define R_AARCH64_MOVW_UABS_G2_NC 268	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_UABS_G3  269	/* Dir. MOV{K,Z} imm. from 63:48.  */
++#define R_AARCH64_MOVW_SABS_G0  270	/* Dir. MOV{N,Z} imm. from 15:0.  */
++#define R_AARCH64_MOVW_SABS_G1  271	/* Dir. MOV{N,Z} imm. from 31:16.  */
++#define R_AARCH64_MOVW_SABS_G2  272	/* Dir. MOV{N,Z} imm. from 47:32.  */
++#define R_AARCH64_LD_PREL_LO19  273	/* PC-rel. LD imm. from bits 20:2.  */
++#define R_AARCH64_ADR_PREL_LO21 274	/* PC-rel. ADR imm. from bits 20:0.  */
++#define R_AARCH64_ADR_PREL_PG_HI21 275	/* Page-rel. ADRP imm. from 32:12.  */
++#define R_AARCH64_ADR_PREL_PG_HI21_NC 276 /* Likewise; no overflow check.  */
++#define R_AARCH64_ADD_ABS_LO12_NC 277	/* Dir. ADD imm. from bits 11:0.  */
++#define R_AARCH64_LDST8_ABS_LO12_NC 278	/* Likewise for LD/ST; no check. */
++#define R_AARCH64_TSTBR14       279	/* PC-rel. TBZ/TBNZ imm. from 15:2.  */
++#define R_AARCH64_CONDBR19      280	/* PC-rel. cond. br. imm. from 20:2. */
++#define R_AARCH64_JUMP26        282	/* PC-rel. B imm. from bits 27:2.  */
++#define R_AARCH64_CALL26        283	/* Likewise for CALL.  */
++#define R_AARCH64_LDST16_ABS_LO12_NC 284 /* Dir. ADD imm. from bits 11:1.  */
++#define R_AARCH64_LDST32_ABS_LO12_NC 285 /* Likewise for bits 11:2.  */
++#define R_AARCH64_LDST64_ABS_LO12_NC 286 /* Likewise for bits 11:3.  */
++#define R_AARCH64_MOVW_PREL_G0  287	/* PC-rel. MOV{N,Z} imm. from 15:0.  */
++#define R_AARCH64_MOVW_PREL_G0_NC 288	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_PREL_G1  289	/* PC-rel. MOV{N,Z} imm. from 31:16. */
++#define R_AARCH64_MOVW_PREL_G1_NC 290	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_PREL_G2  291	/* PC-rel. MOV{N,Z} imm. from 47:32. */
++#define R_AARCH64_MOVW_PREL_G2_NC 292	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_PREL_G3  293	/* PC-rel. MOV{N,Z} imm. from 63:48. */
++#define R_AARCH64_LDST128_ABS_LO12_NC 299 /* Dir. ADD imm. from bits 11:4.  */
++#define R_AARCH64_MOVW_GOTOFF_G0 300	/* GOT-rel. off. MOV{N,Z} imm. 15:0. */
++#define R_AARCH64_MOVW_GOTOFF_G0_NC 301	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_GOTOFF_G1 302	/* GOT-rel. o. MOV{N,Z} imm. 31:16.  */
++#define R_AARCH64_MOVW_GOTOFF_G1_NC 303	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_GOTOFF_G2 304	/* GOT-rel. o. MOV{N,Z} imm. 47:32.  */
++#define R_AARCH64_MOVW_GOTOFF_G2_NC 305	/* Likewise for MOVK; no check.  */
++#define R_AARCH64_MOVW_GOTOFF_G3 306	/* GOT-rel. o. MOV{N,Z} imm. 63:48.  */
++#define R_AARCH64_GOTREL64      307	/* GOT-relative 64-bit.  */
++#define R_AARCH64_GOTREL32      308	/* GOT-relative 32-bit.  */
++#define R_AARCH64_GOT_LD_PREL19 309	/* PC-rel. GOT off. load imm. 20:2.  */
++#define R_AARCH64_LD64_GOTOFF_LO15 310	/* GOT-rel. off. LD/ST imm. 14:3.  */
++#define R_AARCH64_ADR_GOT_PAGE  311	/* P-page-rel. GOT off. ADRP 32:12.  */
++#define R_AARCH64_LD64_GOT_LO12_NC 312	/* Dir. GOT off. LD/ST imm. 11:3.  */
++#define R_AARCH64_LD64_GOTPAGE_LO15 313	/* GOT-page-rel. GOT off. LD/ST 14:3 */
++#define R_AARCH64_TLSGD_ADR_PREL21 512	/* PC-relative ADR imm. 20:0.  */
++#define R_AARCH64_TLSGD_ADR_PAGE21 513	/* page-rel. ADRP imm. 32:12.  */
++#define R_AARCH64_TLSGD_ADD_LO12_NC 514	/* direct ADD imm. from 11:0.  */
++#define R_AARCH64_TLSGD_MOVW_G1 515	/* GOT-rel. MOV{N,Z} 31:16.  */
++#define R_AARCH64_TLSGD_MOVW_G0_NC 516	/* GOT-rel. MOVK imm. 15:0.  */
++#define R_AARCH64_TLSLD_ADR_PREL21 517	/* Like 512; local dynamic model.  */
++#define R_AARCH64_TLSLD_ADR_PAGE21 518	/* Like 513; local dynamic model.  */
++#define R_AARCH64_TLSLD_ADD_LO12_NC 519	/* Like 514; local dynamic model.  */
++#define R_AARCH64_TLSLD_MOVW_G1 520	/* Like 515; local dynamic model.  */
++#define R_AARCH64_TLSLD_MOVW_G0_NC 521	/* Like 516; local dynamic model.  */
++#define R_AARCH64_TLSLD_LD_PREL19 522	/* TLS PC-rel. load imm. 20:2.  */
++#define R_AARCH64_TLSLD_MOVW_DTPREL_G2 523 /* TLS DTP-rel. MOV{N,Z} 47:32.  */
++#define R_AARCH64_TLSLD_MOVW_DTPREL_G1 524 /* TLS DTP-rel. MOV{N,Z} 31:16.  */
++#define R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC 525 /* Likewise; MOVK; no check.  */
++#define R_AARCH64_TLSLD_MOVW_DTPREL_G0 526 /* TLS DTP-rel. MOV{N,Z} 15:0.  */
++#define R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC 527 /* Likewise; MOVK; no check.  */
++#define R_AARCH64_TLSLD_ADD_DTPREL_HI12 528 /* DTP-rel. ADD imm. from 23:12. */
++#define R_AARCH64_TLSLD_ADD_DTPREL_LO12 529 /* DTP-rel. ADD imm. from 11:0.  */
++#define R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC 530 /* Likewise; no ovfl. check.  */
++#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12 531 /* DTP-rel. LD/ST imm. 11:0.  */
++#define R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC 532 /* Likewise; no check.  */
++#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12 533 /* DTP-rel. LD/ST imm. 11:1.  */
++#define R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC 534 /* Likewise; no check.  */
++#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12 535 /* DTP-rel. LD/ST imm. 11:2.  */
++#define R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC 536 /* Likewise; no check.  */
++#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12 537 /* DTP-rel. LD/ST imm. 11:3.  */
++#define R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC 538 /* Likewise; no check.  */
++#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G1 539 /* GOT-rel. MOV{N,Z} 31:16.  */
++#define R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC 540 /* GOT-rel. MOVK 15:0.  */
++#define R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21 541 /* Page-rel. ADRP 32:12.  */
++#define R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC 542 /* Direct LD off. 11:3.  */
++#define R_AARCH64_TLSIE_LD_GOTTPREL_PREL19 543 /* PC-rel. load imm. 20:2.  */
++#define R_AARCH64_TLSLE_MOVW_TPREL_G2 544 /* TLS TP-rel. MOV{N,Z} 47:32.  */
++#define R_AARCH64_TLSLE_MOVW_TPREL_G1 545 /* TLS TP-rel. MOV{N,Z} 31:16.  */
++#define R_AARCH64_TLSLE_MOVW_TPREL_G1_NC 546 /* Likewise; MOVK; no check.  */
++#define R_AARCH64_TLSLE_MOVW_TPREL_G0 547 /* TLS TP-rel. MOV{N,Z} 15:0.  */
++#define R_AARCH64_TLSLE_MOVW_TPREL_G0_NC 548 /* Likewise; MOVK; no check.  */
++#define R_AARCH64_TLSLE_ADD_TPREL_HI12 549 /* TP-rel. ADD imm. 23:12.  */
++#define R_AARCH64_TLSLE_ADD_TPREL_LO12 550 /* TP-rel. ADD imm. 11:0.  */
++#define R_AARCH64_TLSLE_ADD_TPREL_LO12_NC 551 /* Likewise; no ovfl. check.  */
++#define R_AARCH64_TLSLE_LDST8_TPREL_LO12 552 /* TP-rel. LD/ST off. 11:0.  */
++#define R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC 553 /* Likewise; no ovfl. check. */
++#define R_AARCH64_TLSLE_LDST16_TPREL_LO12 554 /* TP-rel. LD/ST off. 11:1.  */
++#define R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC 555 /* Likewise; no check.  */
++#define R_AARCH64_TLSLE_LDST32_TPREL_LO12 556 /* TP-rel. LD/ST off. 11:2.  */
++#define R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC 557 /* Likewise; no check.  */
++#define R_AARCH64_TLSLE_LDST64_TPREL_LO12 558 /* TP-rel. LD/ST off. 11:3.  */
++#define R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC 559 /* Likewise; no check.  */
++#define R_AARCH64_TLSDESC_LD_PREL19 560	/* PC-rel. load immediate 20:2.  */
++#define R_AARCH64_TLSDESC_ADR_PREL21 561 /* PC-rel. ADR immediate 20:0.  */
++#define R_AARCH64_TLSDESC_ADR_PAGE21 562 /* Page-rel. ADRP imm. 32:12.  */
++#define R_AARCH64_TLSDESC_LD64_LO12 563	/* Direct LD off. from 11:3.  */
++#define R_AARCH64_TLSDESC_ADD_LO12 564	/* Direct ADD imm. from 11:0.  */
++#define R_AARCH64_TLSDESC_OFF_G1 565	/* GOT-rel. MOV{N,Z} imm. 31:16.  */
++#define R_AARCH64_TLSDESC_OFF_G0_NC 566	/* GOT-rel. MOVK imm. 15:0; no ck.  */
++#define R_AARCH64_TLSDESC_LDR   567	/* Relax LDR.  */
++#define R_AARCH64_TLSDESC_ADD   568	/* Relax ADD.  */
++#define R_AARCH64_TLSDESC_CALL  569	/* Relax BLR.  */
++#define R_AARCH64_TLSLE_LDST128_TPREL_LO12 570 /* TP-rel. LD/ST off. 11:4.  */
++#define R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC 571 /* Likewise; no check.  */
++#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12 572 /* DTP-rel. LD/ST imm. 11:4. */
++#define R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC 573 /* Likewise; no check.  */
+ #define R_AARCH64_COPY         1024	/* Copy symbol at runtime.  */
+ #define R_AARCH64_GLOB_DAT     1025	/* Create GOT entry.  */
+ #define R_AARCH64_JUMP_SLOT    1026	/* Create PLT entry.  */
+@@ -2335,6 +2446,7 @@ typedef Elf32_Addr Elf32_Conflict;
+ #define R_AARCH64_TLS_DTPREL64 1029	/* Module-relative offset, 64 bit.  */
+ #define R_AARCH64_TLS_TPREL64  1030	/* TP-relative offset, 64 bit.  */
+ #define R_AARCH64_TLSDESC      1031	/* TLS Descriptor.  */
++#define R_AARCH64_IRELATIVE    1032	/* STT_GNU_IFUNC relocation.  */
+ 
+ /* ARM relocs.  */
+ 
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-irel.h glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-irel.h
+index 32dee0f..9a48dc2 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-irel.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-irel.h
+@@ -1,6 +1,6 @@
+ /* Machine-dependent ELF indirect relocation inline functions.
+    AArch64 version.
+-   Copyright (C) 2012 Free Software Foundation, Inc.
++   Copyright (C) 2012-2014 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
+@@ -22,15 +22,31 @@
+ 
+ #include <stdio.h>
+ #include <unistd.h>
++#include <ldsodefs.h>
+ 
+-/* AArch64 does not yet implement IFUNC support.  However since
+-   2011-06-20 provision of a elf_ifunc_invoke has been mandatory.  */
++#define ELF_MACHINE_IRELA       1
+ 
+ static inline ElfW(Addr)
+ __attribute ((always_inline))
+ elf_ifunc_invoke (ElfW(Addr) addr)
+ {
+-  return ((ElfW(Addr) (*) (void)) (addr)) ();
++  return ((ElfW(Addr) (*) (unsigned long int)) (addr)) (GLRO(dl_hwcap));
++}
++
++static inline void
++__attribute ((always_inline))
++elf_irela (const ElfW(Rela) *reloc)
++{
++  ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset;
++  const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info);
++
++  if (__glibc_likely (r_type == R_AARCH64_IRELATIVE))
++    {
++      ElfW(Addr) value = elf_ifunc_invoke (reloc->r_addend);
++      *reloc_addr = value;
++    }
++  else
++    __libc_fatal ("unexpected reloc type in static binary");
+ }
+ 
+ #endif
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-machine.h glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-machine.h
+index b1878a7..1db5a5b 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-machine.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/dl-machine.h
+@@ -23,6 +23,7 @@
+ 
+ #include <tls.h>
+ #include <dl-tlsdesc.h>
++#include <dl-irel.h>
+ 
+ /* Return nonzero iff ELF header is compatible with the running host.  */
+ static inline int __attribute__ ((unused))
+@@ -336,6 +337,12 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
+ 	    }
+ 	  break;
+ 
++	case R_AARCH64_IRELATIVE:
++	  value = map->l_addr + reloc->r_addend;
++	  value = elf_ifunc_invoke (value);
++	  *reloc_addr = value;
++	  break;
++
+ 	default:
+ 	  _dl_reloc_bad_type (map, r_type, 0);
+ 	  break;
+@@ -379,6 +386,13 @@ elf_machine_lazy_rel (struct link_map *map,
+       td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)])
+ 			  + map->l_addr);
+     }
++  else if (__glibc_unlikely (r_type == R_AARCH64_IRELATIVE))
++    {
++      ElfW(Addr) value = map->l_addr + reloc->r_addend;
++      if (__glibc_likely (!skip_ifunc))
++	value = elf_ifunc_invoke (value);
++      *reloc_addr = value;
++    }
+   else
+     _dl_reloc_bad_type (map, r_type, 1);
+ }
diff --git a/SOURCES/glibc-aarch64-rh1076760.patch b/SOURCES/glibc-aarch64-rh1076760.patch
new file mode 100644
index 0000000..801bfd6
--- /dev/null
+++ b/SOURCES/glibc-aarch64-rh1076760.patch
@@ -0,0 +1,20 @@
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/nptl/tls.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/nptl/tls.h
+@@ -63,7 +63,7 @@ typedef struct
+ # define TLS_INIT_TCB_SIZE	sizeof (tcbhead_t)
+ 
+ /* Alignment requirements for the initial TCB.  */
+-# define TLS_INIT_TCB_ALIGN	__alignof__ (tcbhead_t)
++# define TLS_INIT_TCB_ALIGN	__alignof__ (struct pthread)
+ 
+ /* This is the size of the TCB.  */
+ # define TLS_TCB_SIZE		sizeof (tcbhead_t)
+@@ -72,7 +72,7 @@ typedef struct
+ # define TLS_PRE_TCB_SIZE	sizeof (struct pthread)
+ 
+ /* Alignment requirements for the TCB.  */
+-# define TLS_TCB_ALIGN		__alignof__ (tcbhead_t)
++# define TLS_TCB_ALIGN		__alignof__ (struct pthread)
+ 
+ /* Install the dtv pointer.  The pointer passed is to the element with
+    index -1 which contain the length.  */
diff --git a/SOURCES/glibc-aarch64-syscall-rewrite.patch b/SOURCES/glibc-aarch64-syscall-rewrite.patch
new file mode 100644
index 0000000..ad4ab32
--- /dev/null
+++ b/SOURCES/glibc-aarch64-syscall-rewrite.patch
@@ -0,0 +1,540 @@
+From 9a7cb556eef7cb75b31d0bc05f73c6338dfd8e49 Mon Sep 17 00:00:00 2001
+From: Richard Henderson <rth@redhat.com>
+Date: Fri, 30 May 2014 13:57:04 -0400
+Subject: [PATCH] aarch64: Backport syscall rewrite
+
+From commits:
+a60339aaff82beadea6f580e587d64052cb5e3b8 Fix handling of nocancel syscall...
+3612eb8f25d978e7e4ac536a34098091f737161c Merge rtld_errno offset w/ mem ref
+a6b3657be6bc5067aeec98d990f60765361c6557 Merge __local_multiple_threads ofs...
+c69abcee726a6f63d9e5e8f0d9dcc79374ee3ef8 Fix DO_CALL block comment
+6e6c2d01ebb1ef839675c7151d2a114f53663386 Remove DOARGS/UNDOARGS macros
+ca3cfa40c16ef34c74951a07a57cfcbcd58898b1 Tidy syscall error check
+af4e8ef9443e258ebeb0ddf3c5c9579f24dfacd5 Tabify sysdep-cancel.h
+a8b4f04ad7dff4f39797a7ab7f8babda54266026 Share code in sysdep-cancel.h
+645d44abe3ca6253a9d4762f092e4a1b9d294b11 Pass regno parameter to SINGLE_THREAD_P
+b5be4597716eff94149f5529c8eb2cd3b4296188 Improve syscall-cancel stack frame
+74f31c18593111725478a991b395ae45661985a3 Fix error return from __ioctl
+f0712b543eaddeca8fc6d7a8eb6b5b8d24105ce2 Remove PSEUDO_RET
+
+And a not-yet-committed cleanup to clone.S.
+---
+ ports/sysdeps/unix/sysv/linux/aarch64/clone.S      |  51 +++---
+ ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S      |  13 +-
+ .../unix/sysv/linux/aarch64/nptl/localplt.data     |   1 -
+ .../unix/sysv/linux/aarch64/nptl/sysdep-cancel.h   | 189 +++++++--------------
+ ports/sysdeps/unix/sysv/linux/aarch64/syscall.S    |   4 +-
+ ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h     |  84 ++-------
+ ports/sysdeps/unix/sysv/linux/aarch64/vfork.S      |   4 +-
+ 7 files changed, 108 insertions(+), 238 deletions(-)
+
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S
+index 8be1464..d5c31f3 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S
+@@ -39,46 +39,43 @@
+  */
+         .text
+ ENTRY(__clone)
++	/* Save args for the child.  */
++	mov	x10, x0
++	mov	x11, x2
++	mov	x12, x3
++	
+ 	/* Sanity check args.  */
+-	cbz	x0, 1f
+-	cbz	x1, 1f
+-	/* Insert the args onto the new stack.  */
+-	stp	x0, x3, [x1, #-16]!	/* Fn, arg.  */
++	mov	x0, #-EINVAL
++	cbz	x10, .Lsyscall_error
++	cbz	x1, .Lsyscall_error
+ 
+ 	/* Do the system call.  */
++	/* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid.  */
+ 	mov	x0, x2                  /* flags  */
+-
+ 	/* New sp is already in x1.  */
+ 	mov	x2, x4			/* ptid  */
+ 	mov	x3, x5			/* tls  */
+ 	mov	x4, x6			/* ctid  */
+ 
+-#ifdef RESET_PID
+-	/* We rely on the kernel preserving the argument regsiters across a
+-	   each system call so that we can inspect the flags against after
+-	   the clone call.  */
+-	mov	x5, x0
+-#endif
+-
+ 	mov	x8, #SYS_ify(clone)
+-	/* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid.  */
+ 	svc	0x0
+-	cfi_endproc
+ 	cmp	x0, #0
+-	beq	2f
+-	blt	C_SYMBOL_NAME(__syscall_error)
++	beq	thread_start
++	blt	.Lsyscall_error
+ 	RET
+-1:	mov	x0, #-EINVAL
+-	b	syscall_error
++PSEUDO_END (__clone)
+ 
+-2:
++	.align	4
++	.type	thread_start, %function
++thread_start:
+ 	cfi_startproc
+ 	cfi_undefined (x30)
+ 	mov	x29, 0
++
+ #ifdef RESET_PID
+-	tbnz	x5, #CLONE_THREAD_BIT, 3f
++	tbnz	x11, #CLONE_THREAD_BIT, 3f
+ 	mov	x0, #-1
+-	tbnz	x5, #CLONE_VM_BIT, 2f
++	tbnz	x11, #CLONE_VM_BIT, 2f
+ 	mov	x8, #SYS_ify(getpid)
+ 	svc	0x0
+ 2:
+@@ -86,18 +83,16 @@ ENTRY(__clone)
+ 	sub	x1, x1, #PTHREAD_SIZEOF
+ 	str	w0, [x1, #PTHREAD_PID_OFFSET]
+ 	str	w0, [x1, #PTHREAD_TID_OFFSET]
+-
+ 3:
+ #endif
+-	/* Pick the function arg and call address from the stack and
+-	   execute.  */
+-	ldp	x1, x0, [sp], #16
+-	blr	x1
++
++	/* Pick the function arg execute.  */
++	mov	x0, x12
++	blr	x10
+ 
+ 	/* We are done, pass the return value through x0.  */
+ 	b	HIDDEN_JUMPTARGET(_exit)
+ 	cfi_endproc
+-	cfi_startproc
+-PSEUDO_END (__clone)
++	.size	thread_start, .-thread_start
+ 
+ weak_alias (__clone, clone)
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S
+index f01fb84..be6c026 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/ioctl.S
+@@ -20,13 +20,12 @@
+ 
+ 	.text
+ ENTRY(__ioctl)
+-	movz	x8, #__NR_ioctl
+-        sxtw	x0, w0
+-        svc	#0x0
+-	cmn	x0, #0x1, lsl #12
+-	b.hi	C_SYMBOL_NAME(__syscall_error)
++	mov	x8, #__NR_ioctl
++	sxtw	x0, w0
++	svc	#0x0
++	cmn	x0, #4095
++	b.cs	.Lsyscall_error
+ 	ret
+-
+-	PSEUDO_END (__ioctl)
++PSEUDO_END (__ioctl)
+ 
+ weak_alias (__ioctl, ioctl)
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data
+index 84af95d..dfca9a7 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/localplt.data
+@@ -12,4 +12,3 @@ libm.so: matherr
+ libm.so: __signbit
+ libm.so: __signbitf
+ libm.so: __signbitl
+-libpthread.so: __errno_location
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
+index e0e5cc0..a3b9284 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
+@@ -26,119 +26,60 @@
+ 
+ # undef PSEUDO
+ # define PSEUDO(name, syscall_name, args)				\
+-  .section ".text";							\
+-  .type __##syscall_name##_nocancel,%function;				\
+-  .globl __##syscall_name##_nocancel;					\
+-  __##syscall_name##_nocancel:						\
+-    cfi_startproc;							\
+-    DO_CALL (syscall_name, args);					\
+-    PSEUDO_RET;								\
+-    cfi_endproc;							\
+-    .size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel;	\
+-  ENTRY (name);								\
+-    SINGLE_THREAD_P;							\
+-    DOARGS_##args;							\
+-    bne .Lpseudo_cancel;						\
+-    DO_CALL (syscall_name, 0);						\
+-    UNDOARGS_##args;							\
+-    cmn x0, 4095;							\
+-    PSEUDO_RET;								\
+-  .Lpseudo_cancel:							\
+-    DOCARGS_##args;	/* save syscall args etc. around CENABLE.  */	\
+-    CENABLE;								\
+-    mov x16, x0;	/* put mask in safe place.  */			\
+-    UNDOCARGS_##args;	/* restore syscall args.  */			\
+-    mov x8, SYS_ify (syscall_name);	/* do the call.  */		\
+-    svc	0;								\
+-    str x0, [sp, -16]!;	/* save syscall return value.  */		\
+-    cfi_adjust_cfa_offset (16);						\
+-    mov x0, x16;	 /* get mask back.  */				\
+-    CDISABLE;								\
+-    ldr x0, [sp], 16;							\
+-    cfi_adjust_cfa_offset (-16);					\
+-    ldr x30, [sp], 16;							\
+-    cfi_adjust_cfa_offset (-16);					\
+-    cfi_restore (x30);							\
+-    UNDOARGS_##args;							\
+-    cmn x0, 4095;
+-
+-# define DOCARGS_0							\
+-	str x30, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x30, 0)
++	.section ".text";						\
++ENTRY (__##syscall_name##_nocancel);					\
++.Lpseudo_nocancel:							\
++	DO_CALL (syscall_name, args);					\
++.Lpseudo_finish:							\
++	cmn	x0, 4095;						\
++	b.cs	.Lsyscall_error;					\
++	.subsection 2;							\
++	.size __##syscall_name##_nocancel,.-__##syscall_name##_nocancel; \
++ENTRY (name);								\
++	SINGLE_THREAD_P(16);						\
++	cbz	w16, .Lpseudo_nocancel;					\
++	/* Setup common stack frame no matter the number of args.	\
++	   Also save the first arg, since it's basically free.  */	\
++	stp	x30, x0, [sp, -64]!;					\
++	cfi_adjust_cfa_offset (64);					\
++	cfi_rel_offset (x30, 0);					\
++	DOCARGS_##args;		/* save syscall args around CENABLE.  */ \
++	CENABLE;							\
++	mov	x16, x0;	/* save mask around syscall.  */	\
++	UNDOCARGS_##args;	/* restore syscall args.  */		\
++	DO_CALL (syscall_name, args);					\
++	str	x0, [sp, 8];	/* save result around CDISABLE.  */	\
++	mov	x0, x16;	/* restore mask for CDISABLE.  */	\
++	CDISABLE;							\
++	/* Break down the stack frame, restoring result at once.  */	\
++	ldp	x30, x0, [sp], 64;					\
++	cfi_adjust_cfa_offset (-64);					\
++	cfi_restore (x30);						\
++	b	.Lpseudo_finish;					\
++	cfi_endproc;							\
++	.size	name, .-name;						\
++	.previous
++
++# undef PSEUDO_END
++# define PSEUDO_END(name)						\
++	SYSCALL_ERROR_HANDLER;						\
++	cfi_endproc
++
++# define DOCARGS_0
++# define DOCARGS_1
++# define DOCARGS_2	str x1, [sp, 16]
++# define DOCARGS_3	stp x1, x2, [sp, 16]
++# define DOCARGS_4	DOCARGS_3; str x3, [sp, 32]
++# define DOCARGS_5	DOCARGS_3; stp x3, x4, [sp, 32]
++# define DOCARGS_6	DOCARGS_5; str x5, [sp, 48]
+ 
+ # define UNDOCARGS_0
+-
+-# define DOCARGS_1							\
+-	DOCARGS_0;							\
+-	str x0, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x0, 0)
+-
+-# define UNDOCARGS_1							\
+-	ldr x0, [sp], 16;						\
+-	cfi_restore (x0);						\
+-	cfi_adjust_cfa_offset (-16);					\
+-
+-# define DOCARGS_2							\
+-	DOCARGS_1;							\
+-	str x1, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x1, 0)
+-
+-# define UNDOCARGS_2							\
+-	ldr x1, [sp], 16;						\
+-	cfi_restore (x1);						\
+-	cfi_adjust_cfa_offset (-16);					\
+-	UNDOCARGS_1
+-
+-# define DOCARGS_3							\
+-	DOCARGS_2;							\
+-	str x2, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x2, 0)
+-
+-# define UNDOCARGS_3							\
+-	ldr x2, [sp], 16;						\
+-	cfi_restore (x2);						\
+-	cfi_adjust_cfa_offset (-16);					\
+-	UNDOCARGS_2
+-
+-# define DOCARGS_4							\
+-	DOCARGS_3;							\
+-	str x3, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x3, 0)
+-
+-# define UNDOCARGS_4							\
+-	ldr x3, [sp], 16;						\
+-	cfi_restore (x3);						\
+-	cfi_adjust_cfa_offset (-16);					\
+-	UNDOCARGS_3
+-
+-# define DOCARGS_5							\
+-	DOCARGS_4;							\
+-	str x4, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x4, 0)
+-
+-# define UNDOCARGS_5							\
+-	ldr x4, [sp], 16;						\
+-	cfi_restore (x4);						\
+-	cfi_adjust_cfa_offset (-16);					\
+-	UNDOCARGS_4
+-
+-# define DOCARGS_6							\
+-	DOCARGS_5;							\
+-	str x5, [sp, -16]!;						\
+-	cfi_adjust_cfa_offset (16);					\
+-	cfi_rel_offset (x5, 0)
+-
+-# define UNDOCARGS_6							\
+-	ldr x5, [sp], 16;						\
+-	cfi_restore (x5);						\
+-	cfi_adjust_cfa_offset (-16);					\
+-	UNDOCARGS_5
++# define UNDOCARGS_1	ldr x0, [sp, 8]
++# define UNDOCARGS_2	ldp x0, x1, [sp, 8]
++# define UNDOCARGS_3	UNDOCARGS_1; ldp x1, x2, [sp, 16]
++# define UNDOCARGS_4	UNDOCARGS_2; ldp x2, x3, [sp, 24]
++# define UNDOCARGS_5	UNDOCARGS_3; ldp x3, x4, [sp, 32]
++# define UNDOCARGS_6	UNDOCARGS_4; ldp x4, x5, [sp, 40]
+ 
+ # ifdef IS_IN_libpthread
+ #  define CENABLE	bl __pthread_enable_asynccancel
+@@ -160,11 +101,9 @@
+ extern int __local_multiple_threads attribute_hidden;
+ #   define SINGLE_THREAD_P __builtin_expect (__local_multiple_threads == 0, 1)
+ #  else
+-#   define SINGLE_THREAD_P						\
+-  adrp	x16, __local_multiple_threads;					\
+-  add	x16, x16, #:lo12:__local_multiple_threads;			\
+-  ldr	x16, [x16];							\
+-  cmp	x16, 0;
++#   define SINGLE_THREAD_P(R)						\
++	adrp	x##R, __local_multiple_threads;				\
++	ldr	w##R, [x##R, :lo12:__local_multiple_threads]
+ #  endif
+ # else
+ /*  There is no __local_multiple_threads for librt, so use the TCB.  */
+@@ -173,20 +112,10 @@ extern int __local_multiple_threads attribute_hidden;
+   __builtin_expect (THREAD_GETMEM (THREAD_SELF,				\
+ 				   header.multiple_threads) == 0, 1)
+ #  else
+-#   define SINGLE_THREAD_P						\
+-  stp	x0, x30, [sp, -16]!;						\
+-  cfi_adjust_cfa_offset (16);						\
+-  cfi_rel_offset (x0, 0);						\
+-  cfi_rel_offset (x30, 8);						\
+-  bl	__read_tp;							\
+-  sub	x0, x0, PTHREAD_SIZEOF;						\
+-  ldr	x16, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET];			\
+-  ldp	x0, x30, [sp], 16;						\
+-  cfi_restore (x0);							\
+-  cfi_restore (x30);							\
+-  cfi_adjust_cfa_offset (-16);						\
+-  cmp	x16, 0
+-#   define SINGLE_THREAD_P_PIC(x) SINGLE_THREAD_P
++#   define SINGLE_THREAD_P(R)						\
++	mrs	x##R, tpidr_el0;					\
++	sub	x##R, x##R, PTHREAD_SIZEOF;				\
++	ldr	w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]
+ #  endif
+ # endif
+ 
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S
+index 574fdf1..fac6416 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/syscall.S
+@@ -37,8 +37,6 @@ ENTRY (syscall)
+ 	mov	x6, x7
+ 	svc	0x0
+ 	cmn	x0, #4095
+-	b.cs	1f
++	b.cs	.Lsyscall_error
+ 	RET
+-1:
+-	b	SYSCALL_ERROR
+ PSEUDO_END (syscall)
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h
+index 713bf7d..9961c03 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/sysdep.h
+@@ -58,19 +58,8 @@
+   .text;								      \
+   ENTRY (name);								      \
+     DO_CALL (syscall_name, args);					      \
+-    cmn x0, #4095;
+-
+-/* Notice the use of 'RET' instead of 'ret' the assembler is case
+-   insensitive and eglibc already uses the preprocessor symbol 'ret'
+-   so we use the upper case 'RET' to force through a ret instruction
+-   to the assembler */
+-# define PSEUDO_RET							      \
+-    b.cs 1f;								      \
+-    RET;								      \
+-    1:                                                                        \
+-    b SYSCALL_ERROR
+-# undef ret
+-# define ret PSEUDO_RET
++    cmn x0, #4095;							      \
++    b.cs .Lsyscall_error
+ 
+ # undef	PSEUDO_END
+ # define PSEUDO_END(name)						      \
+@@ -83,15 +72,7 @@
+   ENTRY (name);								      \
+     DO_CALL (syscall_name, args);
+ 
+-/* Notice the use of 'RET' instead of 'ret' the assembler is case
+-   insensitive and eglibc already uses the preprocessor symbol 'ret'
+-   so we use the upper case 'RET' to force through a ret instruction
+-   to the assembler */
+-# define PSEUDO_RET_NOERRNO						      \
+-    RET;
+-
+-# undef ret_NOERRNO
+-# define ret_NOERRNO PSEUDO_RET_NOERRNO
++# define ret_NOERRNO ret
+ 
+ # undef	PSEUDO_END_NOERRNO
+ # define PSEUDO_END_NOERRNO(name)					      \
+@@ -109,47 +90,38 @@
+ # define PSEUDO_END_ERRVAL(name) \
+   END (name)
+ 
+-# define ret_ERRVAL PSEUDO_RET_NOERRNO
++# define ret_ERRVAL ret
+ 
++# define SYSCALL_ERROR  .Lsyscall_error
+ # if NOT_IN_libc
+-#  define SYSCALL_ERROR __local_syscall_error
+ #  if RTLD_PRIVATE_ERRNO
+ #   define SYSCALL_ERROR_HANDLER				\
+-__local_syscall_error:						\
++.Lsyscall_error:						\
+ 	adrp	x1, C_SYMBOL_NAME(rtld_errno);			\
+-	add	x1, x1, #:lo12:C_SYMBOL_NAME(rtld_errno);	\
+ 	neg     w0, w0;						\
+-	str     w0, [x1];					\
++	str     w0, [x1, :lo12:C_SYMBOL_NAME(rtld_errno)];	\
+ 	mov	x0, -1;						\
+ 	RET;
+ #  else
+ 
+ #   define SYSCALL_ERROR_HANDLER				\
+-__local_syscall_error:						\
+-	stp     x29, x30, [sp, -32]!;				\
+-	cfi_adjust_cfa_offset (32);				\
+-	cfi_rel_offset (x29, 0);				\
+-	cfi_rel_offset (x30, 8);				\
+-        add     x29, sp, 0;					\
+-        str     x19, [sp,16];					\
+-	neg	x19, x0;					\
+-	bl	C_SYMBOL_NAME(__errno_location);		\
+-	str	x19, [x0];					\
++.Lsyscall_error:						\
++	adrp	x1, :gottprel:errno;				\
++	neg	w2, w0;						\
++	ldr	x1, [x1, :gottprel_lo12:errno];			\
++	mrs	x3, tpidr_el0;					\
+ 	mov	x0, -1;						\
+-        ldr     x19, [sp,16];					\
+-        ldp     x29, x30, [sp], 32;				\
+-	cfi_adjust_cfa_offset (-32);				\
+-	cfi_restore (x29);					\
+-	cfi_restore (x30);					\
++	str	w2, [x1, x3];					\
+ 	RET;
+ #  endif
+ # else
+-#  define SYSCALL_ERROR_HANDLER	/* Nothing here; code in sysdep.S is used.  */
+-#  define SYSCALL_ERROR __syscall_error
++#  define SYSCALL_ERROR_HANDLER					\
++.Lsyscall_error:						\
++	b	__syscall_error;
+ # endif
+ 
+ /* Linux takes system call args in registers:
+-	syscall number	in the SVC instruction
++	syscall number	x8
+ 	arg 1		x0
+ 	arg 2		x1
+ 	arg 3		x2
+@@ -177,28 +149,8 @@ __local_syscall_error:						\
+ 
+ # undef	DO_CALL
+ # define DO_CALL(syscall_name, args)		\
+-    DOARGS_##args				\
+     mov x8, SYS_ify (syscall_name);		\
+-    svc 0;					\
+-    UNDOARGS_##args
+-
+-# define DOARGS_0 /* nothing */
+-# define DOARGS_1 /* nothing */
+-# define DOARGS_2 /* nothing */
+-# define DOARGS_3 /* nothing */
+-# define DOARGS_4 /* nothing */
+-# define DOARGS_5 /* nothing */
+-# define DOARGS_6 /* nothing */
+-# define DOARGS_7 /* nothing */
+-
+-# define UNDOARGS_0 /* nothing */
+-# define UNDOARGS_1 /* nothing */
+-# define UNDOARGS_2 /* nothing */
+-# define UNDOARGS_3 /* nothing */
+-# define UNDOARGS_4 /* nothing */
+-# define UNDOARGS_5 /* nothing */
+-# define UNDOARGS_6 /* nothing */
+-# define UNDOARGS_7 /* nothing */
++    svc 0
+ 
+ #else /* not __ASSEMBLER__ */
+ 
+diff --git glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S
+index f2dc49b..3fb68b9 100644
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/vfork.S
+@@ -38,10 +38,8 @@ ENTRY (__vfork)
+ 	RESTORE_PID
+ #endif
+ 	cmn	x0, #4095
+-	b.cs    1f
++	b.cs    .Lsyscall_error
+ 	RET
+-1:
+-	b	SYSCALL_ERROR
+ 
+ PSEUDO_END (__vfork)
+ libc_hidden_def (__vfork)
+-- 
+1.8.3.1
+
diff --git a/SOURCES/glibc-arm-hardfloat-3.patch b/SOURCES/glibc-arm-hardfloat-3.patch
new file mode 100644
index 0000000..d9bebf3
--- /dev/null
+++ b/SOURCES/glibc-arm-hardfloat-3.patch
@@ -0,0 +1,22 @@
+(Not needed anymore.)
+
+diff -Nru glibc-2.17-c758a686/elf/dl-load.c glibc-2.17-c758a686/elf/dl-load.c
+--- glibc-2.17-c758a686/elf/dl-load.c	2012-06-06 13:07:41.727524312 -0600
++++ glibc-2.17-c758a686/elf/dl-load.c	2012-06-06 13:11:19.308681002 -0600
+@@ -2093,10 +2093,14 @@ _dl_map_object (struct link_map *loader,
+ 	  soname = ((const char *) D_PTR (l, l_info[DT_STRTAB])
+ 		    + l->l_info[DT_SONAME]->d_un.d_val);
+ 	  if (strcmp (name, soname) != 0)
+-	    continue;
++#ifdef __arm__
++	    if (strcmp (name, "ld-linux.so.3")
++		|| strcmp (soname, "ld-linux-armhf.so.3"))
++#endif
++	      continue;
+ 
+ 	  /* We have a match on a new name -- cache it.  */
+-	  add_name_to_object (l, soname);
++	  add_name_to_object (l, name);
+ 	  l->l_soname_added = 1;
+ 	}
+ 
diff --git a/SOURCES/glibc-cs-path.patch b/SOURCES/glibc-cs-path.patch
new file mode 100644
index 0000000..c94a49a
--- /dev/null
+++ b/SOURCES/glibc-cs-path.patch
@@ -0,0 +1,6 @@
+diff -pruN glibc-2.17-c758a686/sysdeps/unix/confstr.h glibc-2.17-c758a686/sysdeps/unix/confstr.h
+--- glibc-2.17-c758a686/sysdeps/unix/confstr.h	2012-12-25 08:32:13.000000000 +0530
++++ glibc-2.17-c758a686/sysdeps/unix/confstr.h	2014-09-05 20:02:55.698275219 +0530
+@@ -1 +1 @@
+-#define	CS_PATH	"/bin:/usr/bin"
++#define	CS_PATH	"/usr/bin"
diff --git a/SOURCES/glibc-fedora-__libc_multiple_libcs.patch b/SOURCES/glibc-fedora-__libc_multiple_libcs.patch
new file mode 100644
index 0000000..54c6d42
--- /dev/null
+++ b/SOURCES/glibc-fedora-__libc_multiple_libcs.patch
@@ -0,0 +1,83 @@
+From 16552c01a66633c9e412984d9d92616bd4e5303c Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@redhat.com>
+Date: Fri, 11 Jun 2010 11:04:11 +0200
+Subject: [PATCH] Properly set __libc_multiple_libcs
+
+* elf/rtld.c (_dl_starting_up): Always define.
+(dl_main): Always set _dl_starting_up.
+* elf/dl-support.c (_dl_starting_up): Always define.
+* elf/dl-init.c (_dl_init): Always clear _dl_starting_up.
+
+---
+ ChangeLog        |    7 +++++++
+ elf/dl-init.c    |    4 ----
+ elf/dl-support.c |    2 --
+ elf/rtld.c       |    4 ----
+ 4 files changed, 7 insertions(+), 10 deletions(-)
+
+--- glibc-2.17-c758a686/elf/dl-init.c
++++ glibc-2.17-c758a686/elf/dl-init.c
+@@ -23,11 +23,9 @@
+ /* Type of the initializer.  */
+ typedef void (*init_t) (int, char **, char **);
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+ /* Flag, nonzero during startup phase.  */
+ extern int _dl_starting_up;
+ extern int _dl_starting_up_internal attribute_hidden;
+-#endif
+ 
+ 
+ static void
+@@ -132,9 +130,7 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
+   while (i-- > 0)
+     call_init (main_map->l_initfini[i], argc, argv, env);
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+   /* Finished starting up.  */
+   INTUSE(_dl_starting_up) = 0;
+-#endif
+ }
+ INTDEF (_dl_init)
+--- glibc-2.17-c758a686/elf/dl-support.c
++++ glibc-2.17-c758a686/elf/dl-support.c
+@@ -81,10 +81,8 @@ unsigned long long _dl_load_adds;
+    create a fake scope containing nothing.  */
+ struct r_scope_elem _dl_initial_searchlist;
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+ /* Nonzero during startup.  */
+ int _dl_starting_up = 1;
+-#endif
+ 
+ /* Random data provided by the kernel.  */
+ void *_dl_random;
+--- glibc-2.17-c758a686/elf/rtld.c
++++ glibc-2.17-c758a686/elf/rtld.c
+@@ -106,7 +106,6 @@ static struct audit_list
+   struct audit_list *next;
+ } *audit_list;
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+ /* Set nonzero during loading and initialization of executable and
+    libraries, cleared before the executable's entry point runs.  This
+    must not be initialized to nonzero, because the unused dynamic
+@@ -116,7 +115,6 @@ static struct audit_list
+    never be called.  */
+ int _dl_starting_up = 0;
+ INTVARDEF(_dl_starting_up)
+-#endif
+ 
+ /* This is the structure which defines all variables global to ld.so
+    (except those which cannot be added for some reason).  */
+@@ -929,10 +927,8 @@ dl_main (const ElfW(Phdr) *phdr,
+   /* Process the environment variable which control the behaviour.  */
+   process_envvars (&mode);
+ 
+-#ifndef HAVE_INLINED_SYSCALLS
+   /* Set up a flag which tells we are just starting.  */
+   INTUSE(_dl_starting_up) = 1;
+-#endif
+ 
+   if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
+     {
diff --git a/SOURCES/glibc-fedora-elf-init-hidden_undef.patch b/SOURCES/glibc-fedora-elf-init-hidden_undef.patch
new file mode 100644
index 0000000..df667ec
--- /dev/null
+++ b/SOURCES/glibc-fedora-elf-init-hidden_undef.patch
@@ -0,0 +1,30 @@
+* Fri May 29 2003 Jakub Jelinek <jakub@redhat.com> 2.3.2-44
+- make __init_array_start etc. symbols in elf-init.oS hidden undefined
+
+diff -Nru glibc-2.17-c758a686/csu/elf-init.c glibc-2.17-c758a686/csu/elf-init.c
+--- glibc-2.17-c758a686/csu/elf-init.c	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/csu/elf-init.c	2012-06-07 12:15:21.570319597 -0600
+@@ -63,6 +63,23 @@ extern void (*__init_array_end []) (int,
+ extern void (*__fini_array_start []) (void) attribute_hidden;
+ extern void (*__fini_array_end []) (void) attribute_hidden;
+ 
++#if defined HAVE_VISIBILITY_ATTRIBUTE \
++    && (defined SHARED || defined LIBC_NONSHARED)
++# define hidden_undef_2(x) #x
++# define hidden_undef_1(x) hidden_undef_2 (x)
++# define hidden_undef(x) \
++  __asm (hidden_undef_1 (ASM_GLOBAL_DIRECTIVE) " " #x); \
++  __asm (".hidden " #x);
++#else
++# define hidden_undef(x)
++#endif
++
++hidden_undef (__preinit_array_start)
++hidden_undef (__preinit_array_end)
++hidden_undef (__init_array_start)
++hidden_undef (__init_array_end)
++hidden_undef (__fini_array_start)
++hidden_undef (__fini_array_end)
+ 
+ /* These function symbols are provided for the .init/.fini section entry
+    points automagically by the linker.  */
diff --git a/SOURCES/glibc-fedora-elf-rh737223.patch b/SOURCES/glibc-fedora-elf-rh737223.patch
new file mode 100644
index 0000000..376f687
--- /dev/null
+++ b/SOURCES/glibc-fedora-elf-rh737223.patch
@@ -0,0 +1,15 @@
+Binary filesglibc-2.17-c758a686/elf/.rtld.c.rej.swp andglibc-2.17-c758a686/elf/.rtld.c.rej.swp differ
+diff -Nru glibc-2.17-c758a686/elf/setup-vdso.h glibc-2.17-c758a686/elf/setup-vdso.h
+--- glibc-2.17-c758a686/elf/setup-vdso.h	2012-10-10 21:34:38.000000000 -0600
++++ glibc-2.17-c758a686/elf/setup-vdso.h	2012-10-11 09:43:14.152958832 -0600
+@@ -93,7 +93,9 @@ setup_vdso (struct link_map *main_map __
+ 	  char *copy = malloc (len);
+ 	  if (copy == NULL)
+ 	    _dl_fatal_printf ("out of memory\n");
+-	  l->l_libname->name = l->l_name = memcpy (copy, dsoname, len);
++	  l->l_libname->name = memcpy (copy, dsoname, len);
++	  if (GLRO(dl_debug_mask))
++	    l->l_name = copy;
+ 	}
+ 
+       /* Add the vDSO to the object list.  */
diff --git a/SOURCES/glibc-fedora-gai-canonical.patch b/SOURCES/glibc-fedora-gai-canonical.patch
new file mode 100644
index 0000000..7f767ae
--- /dev/null
+++ b/SOURCES/glibc-fedora-gai-canonical.patch
@@ -0,0 +1,124 @@
+Upstream commit, fixing [BZ #15218]:
+
+commit b957ced8890a4438c8efe2c15e5abf4e327f25cf
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Tue Oct 15 10:21:13 2013 +0200
+
+    Don't use gethostbyaddr to determine canonical name
+
+
+--- glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
++++ glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
+@@ -565,8 +565,8 @@ gaih_inet (const char *name, const struct gaih_service *service,
+ 
+ 	  /* If we do not have to look for IPv6 addresses, use
+ 	     the simple, old functions, which do not support
+-	     IPv6 scope ids. */
+-	  if (req->ai_family == AF_INET)
++	     IPv6 scope ids, nor retrieving the canonical name.  */
++	  if (req->ai_family == AF_INET && (req->ai_flags & AI_CANONNAME) == 0)
+ 	    {
+ 	      /* Allocate additional room for struct host_data.  */
+ 	      size_t tmpbuflen = (512 + MAX_NR_ALIASES * sizeof(char*)
+@@ -1107,70 +1107,10 @@ gaih_inet (const char *name, const struct gaih_service *service,
+ 	/* Only the first entry gets the canonical name.  */
+ 	if (at2 == at && (req->ai_flags & AI_CANONNAME) != 0)
+ 	  {
+-	    char *tmpbuf2 = NULL;
+-	    bool malloc_tmpbuf2 = false;
+-
+ 	    if (canon == NULL)
+-	      {
+-		struct hostent *h = NULL;
+-		int herrno;
+-		struct hostent th;
+-		/* Add room for struct host_data.  */
+-		size_t tmpbuf2len = (512 + (MAX_NR_ALIASES+MAX_NR_ADDRS+1)
+-				     * sizeof(char*) + 16 * sizeof(char));
+-
+-		do
+-		  {
+-		    if (__libc_use_alloca (alloca_used + 2 * tmpbuf2len))
+-		      tmpbuf2 = extend_alloca_account (tmpbuf2, tmpbuf2len,
+-						       tmpbuf2len * 2,
+-						       alloca_used);
+-		    else
+-		      {
+-			char *newp = realloc (malloc_tmpbuf2 ? tmpbuf2 : NULL,
+-					      2 * tmpbuf2len);
+-			if (newp == NULL)
+-			  {
+-			    if (malloc_tmpbuf2)
+-			      free (tmpbuf2);
+-			    result = -EAI_MEMORY;
+-			    goto free_and_return;
+-			  }
+-
+-			tmpbuf2 = newp;
+-			tmpbuf2len = 2 * tmpbuf2len;
+-			malloc_tmpbuf2 = true;
+-		      }
+-
+-		    rc = __gethostbyaddr_r (at2->addr,
+-					    ((at2->family == AF_INET6)
+-					     ? sizeof (struct in6_addr)
+-					     : sizeof (struct in_addr)),
+-					    at2->family, &th, tmpbuf2,
+-					    tmpbuf2len, &h, &herrno);
+-		  }
+-		while (rc == ERANGE && herrno == NETDB_INTERNAL);
+-
+-		if (rc != 0 && herrno == NETDB_INTERNAL)
+-		  {
+-		    if (malloc_tmpbuf2)
+-		      free (tmpbuf2);
+-
+-		    __set_h_errno (herrno);
+-		    result = -EAI_SYSTEM;
+-		    goto free_and_return;
+-		  }
+-
+-		if (h != NULL)
+-		  canon = h->h_name;
+-		else
+-		  {
+-		    assert (orig_name != NULL);
+-		    /* If the canonical name cannot be determined, use
+-		       the passed in string.  */
+-		    canon = orig_name;
+-		  }
+-	      }
++	      /* If the canonical name cannot be determined, use
++		 the passed in string.  */
++	      canon = orig_name;
+ 
+ #ifdef HAVE_LIBIDN
+ 	    if (req->ai_flags & AI_CANONIDN)
+@@ -1185,9 +1125,6 @@ gaih_inet (const char *name, const struct gaih_service *service,
+ 		int rc = __idna_to_unicode_lzlz (canon, &out, idn_flags);
+ 		if (rc != IDNA_SUCCESS)
+ 		  {
+-		    if (malloc_tmpbuf2)
+-		      free (tmpbuf2);
+-
+ 		    if (rc == IDNA_MALLOC_ERROR)
+ 		      result = -EAI_MEMORY;
+ 		    else if (rc == IDNA_DLOPEN_ERROR)
+@@ -1217,17 +1154,11 @@ gaih_inet (const char *name, const struct gaih_service *service,
+ 		    canon = strdup (canon);
+ 		    if (canon == NULL)
+ 		      {
+-			if (malloc_tmpbuf2)
+-			  free (tmpbuf2);
+-
+ 			result = -EAI_MEMORY;
+ 			goto free_and_return;
+ 		      }
+ 		  }
+ 	      }
+-
+-	    if (malloc_tmpbuf2)
+-	      free (tmpbuf2);
+ 	  }
+ 
+ 	family = at2->family;
diff --git a/SOURCES/glibc-fedora-getrlimit-PLT.patch b/SOURCES/glibc-fedora-getrlimit-PLT.patch
new file mode 100644
index 0000000..43cabea
--- /dev/null
+++ b/SOURCES/glibc-fedora-getrlimit-PLT.patch
@@ -0,0 +1,35 @@
+Related upstream commit:
+
+commit c5c2b7c3fd823fc5c4a52506292a90eba60b0c62
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Sat Dec 6 23:40:48 2014 +0000
+
+    Fix pthreads getrlimit, gettimeofday namespace (bug 17682).
+
+--- glibc-2.17-c758a686/include/sys/resource.h
++++ glibc-2.17-c758a686/include/sys/resource.h
+@@ -14,5 +14,6 @@ extern int __getrusage (enum __rusage_who __who, struct rusage *__usage)
+ 
+ extern int __setrlimit (enum __rlimit_resource __resource,
+ 			const struct rlimit *__rlimits);
++libc_hidden_proto (__getrlimit)
+ #endif
+ #endif
+--- glibc-2.17-c758a686/resource/getrlimit.c
++++ glibc-2.17-c758a686/resource/getrlimit.c
+@@ -27,6 +27,7 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
+   __set_errno (ENOSYS);
+   return -1;
+ }
++libc_hidden_def (__getrlimit)
+ weak_alias (__getrlimit, getrlimit)
+ 
+ stub_warning (getrlimit)
+--- glibc-2.17-c758a686/sysdeps/mach/hurd/getrlimit.c
++++ glibc-2.17-c758a686/sysdeps/mach/hurd/getrlimit.c
+@@ -43,4 +43,5 @@ __getrlimit (enum __rlimit_resource resource, struct rlimit *rlimits)
+ 
+   return 0;
+ }
++libc_hidden_def (__getrlimit)
+ weak_alias (__getrlimit, getrlimit)
diff --git a/SOURCES/glibc-fedora-i386-tls-direct-seg-refs.patch b/SOURCES/glibc-fedora-i386-tls-direct-seg-refs.patch
new file mode 100644
index 0000000..451ebf9
--- /dev/null
+++ b/SOURCES/glibc-fedora-i386-tls-direct-seg-refs.patch
@@ -0,0 +1,18 @@
+diff -Nru glibc-2.17-c758a686/sysdeps/i386/Makefile glibc-2.17-c758a686/sysdeps/i386/Makefile
+--- glibc-2.17-c758a686/sysdeps/i386/Makefile	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/sysdeps/i386/Makefile	2012-06-07 12:15:21.826318641 -0600
+@@ -62,6 +64,14 @@ endif
+ 
+ ifneq (,$(filter -mno-tls-direct-seg-refs,$(CFLAGS)))
+ defines += -DNO_TLS_DIRECT_SEG_REFS
++else
++# .a libraries are not performance critical and so we
++# build them without direct TLS segment references
++# always.
++CPPFLAGS-.o += -DNO_TLS_DIRECT_SEG_REFS
++CFLAGS-.o += -mno-tls-direct-seg-refs
++CPPFLAGS-.oS += -DNO_TLS_DIRECT_SEG_REFS
++CFLAGS-.oS += -mno-tls-direct-seg-refs
+ endif
+ 
+ ifeq ($(subdir),elf)
diff --git a/SOURCES/glibc-fedora-include-bits-ldbl.patch b/SOURCES/glibc-fedora-include-bits-ldbl.patch
new file mode 100644
index 0000000..0aa3c0f
--- /dev/null
+++ b/SOURCES/glibc-fedora-include-bits-ldbl.patch
@@ -0,0 +1,36 @@
+Only needed for glibc builds with -mlong-double-64:
+
+  https://sourceware.org/ml/libc-alpha/2017-08/msg01139.html
+
+This means the patch is no longer needed.
+
+From 5eb4509a6651d19c7a28c4506d6aa582c9ee095a Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Wed, 1 Feb 2006 09:30:43 +0000
+Subject: [PATCH] 128-bit long double fixes
+
+* include/bits/stdlib-ldbl.h: New file.
+* include/bits/wchar-ldbl.h: New file.
+
+---
+ ChangeLog                  |    5 +++++
+ include/bits/stdlib-ldbl.h |    1 +
+ include/bits/wchar-ldbl.h  |    1 +
+ 3 files changed, 7 insertions(+), 0 deletions(-)
+ create mode 100644 include/bits/stdlib-ldbl.h
+ create mode 100644 include/bits/wchar-ldbl.h
+
+diff --git glibc-2.17-c758a686/include/bits/stdlib-ldbl.h glibc-2.17-c758a686/include/bits/stdlib-ldbl.h
+new file mode 100644
+index 0000000..6250949
+--- /dev/null
++++ glibc-2.17-c758a686/include/bits/stdlib-ldbl.h
+@@ -0,0 +1 @@
++#include <stdlib/bits/stdlib-ldbl.h>
+diff --git glibc-2.17-c758a686/include/bits/wchar-ldbl.h glibc-2.17-c758a686/include/bits/wchar-ldbl.h
+new file mode 100644
+index 0000000..29baa2f
+--- /dev/null
++++ glibc-2.17-c758a686/include/bits/wchar-ldbl.h
+@@ -0,0 +1 @@
++#include <wcsmbs/bits/wchar-ldbl.h>
diff --git a/SOURCES/glibc-fedora-ldd.patch b/SOURCES/glibc-fedora-ldd.patch
new file mode 100644
index 0000000..28f18d3
--- /dev/null
+++ b/SOURCES/glibc-fedora-ldd.patch
@@ -0,0 +1,38 @@
+Upstream commit:
+
+commit eedca9772e99c72ab4c3c34e43cc764250aa3e3c (HEAD -> master)
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Wed Aug 16 15:59:55 2017 +0200
+
+    ldd: never run file directly
+
+--- glibc-2.17-c758a686/elf/ldd.bash.in
++++ glibc-2.17-c758a686/elf/ldd.bash.in
+@@ -166,18 +166,6 @@ warning: you do not have execution permission for" "\`$file'" >&2
+       fi
+     done
+     case $ret in
+-    0)
+-      # If the program exits with exit code 5, it means the process has been
+-      # invoked with __libc_enable_secure.  Fall back to running it through
+-      # the dynamic linker.
+-      try_trace "$file"
+-      rc=$?
+-      if [ $rc = 5 ]; then
+-	try_trace "$RTLD" "$file"
+-	rc=$?
+-      fi
+-      [ $rc = 0 ] || result=1
+-      ;;
+     1)
+       # This can be a non-ELF binary or no binary at all.
+       nonelf "$file" || {
+@@ -185,7 +173,7 @@ warning: you do not have execution permission for" "\`$file'" >&2
+ 	result=1
+       }
+       ;;
+-    2)
++    0|2)
+       try_trace "$RTLD" "$file" || result=1
+       ;;
+     *)
diff --git a/SOURCES/glibc-fedora-linux-tcsetattr.patch b/SOURCES/glibc-fedora-linux-tcsetattr.patch
new file mode 100644
index 0000000..e47d5ec
--- /dev/null
+++ b/SOURCES/glibc-fedora-linux-tcsetattr.patch
@@ -0,0 +1,48 @@
+diff -Nru glibc-2.17-c758a686/sysdeps/unix/sysv/linux/tcsetattr.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/tcsetattr.c
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/tcsetattr.c	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/tcsetattr.c	2012-06-07 12:15:21.831318623 -0600
+@@ -48,6 +48,7 @@ tcsetattr (fd, optional_actions, termios
+ {
+   struct __kernel_termios k_termios;
+   unsigned long int cmd;
++  int retval;
+ 
+   switch (optional_actions)
+     {
+@@ -79,6 +80,35 @@ tcsetattr (fd, optional_actions, termios
+   memcpy (&k_termios.c_cc[0], &termios_p->c_cc[0],
+ 	  __KERNEL_NCCS * sizeof (cc_t));
+ 
+-  return INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
++  retval = INLINE_SYSCALL (ioctl, 3, fd, cmd, &k_termios);
++
++  if (retval == 0 && cmd == TCSETS)
++    {
++      /* The Linux kernel has a bug which silently ignore the invalid
++        c_cflag on pty. We have to check it here. */
++      int save = errno;
++      retval = INLINE_SYSCALL (ioctl, 3, fd, TCGETS, &k_termios);
++      if (retval)
++       {
++         /* We cannot verify if the setting is ok. We don't return
++            an error (?). */
++         __set_errno (save);
++         retval = 0;
++       }
++      else if ((termios_p->c_cflag & (PARENB | CREAD))
++              != (k_termios.c_cflag & (PARENB | CREAD))
++              || ((termios_p->c_cflag & CSIZE)
++                  && ((termios_p->c_cflag & CSIZE)
++                      != (k_termios.c_cflag & CSIZE))))
++       {
++         /* It looks like the Linux kernel silently changed the
++            PARENB/CREAD/CSIZE bits in c_cflag. Report it as an
++            error. */
++         __set_errno (EINVAL);
++         retval = -1;
++       }
++    }
++
++  return retval;
+ }
+ libc_hidden_def (tcsetattr)
diff --git a/SOURCES/glibc-fedora-localedata-rh61908.patch b/SOURCES/glibc-fedora-localedata-rh61908.patch
new file mode 100644
index 0000000..0cdd09f
--- /dev/null
+++ b/SOURCES/glibc-fedora-localedata-rh61908.patch
@@ -0,0 +1,38 @@
+* Tue Mar 26 2002 Jakub Jelinek <jakub@redhat.com> 2.2.5-28
+- add a couple of .ISO-8859-15 locales (#61908)
+
+diff -Nru glibc-2.17-c758a686/localedata/SUPPORTED glibc-2.17-c758a686/localedata/SUPPORTED
+--- glibc-2.17-c758a686/localedata/SUPPORTED	2012-11-25 12:59:31.000000000 -0700
++++ glibc-2.17-c758a686/localedata/SUPPORTED	2012-11-26 12:58:43.298223018 -0700
+@@ -89,6 +89,7 @@ cy_GB.UTF-8/UTF-8 \
+ cy_GB/ISO-8859-14 \
+ da_DK.UTF-8/UTF-8 \
+ da_DK/ISO-8859-1 \
++da_DK.ISO-8859-15/ISO-8859-15 \
+ de_AT.UTF-8/UTF-8 \
+ de_AT/ISO-8859-1 \
+ de_AT@euro/ISO-8859-15 \
+@@ -121,6 +122,7 @@ en_DK.UTF-8/UTF-8 \
+ en_DK/ISO-8859-1 \
+ en_GB.UTF-8/UTF-8 \
+ en_GB/ISO-8859-1 \
++en_GB.ISO-8859-15/ISO-8859-15 \
+ en_HK.UTF-8/UTF-8 \
+ en_HK/ISO-8859-1 \
+ en_IE.UTF-8/UTF-8 \
+@@ -136,6 +138,7 @@ en_SG.UTF-8/UTF-8 \
+ en_SG/ISO-8859-1 \
+ en_US.UTF-8/UTF-8 \
+ en_US/ISO-8859-1 \
++en_US.ISO-8859-15/ISO-8859-15 \
+ en_ZA.UTF-8/UTF-8 \
+ en_ZA/ISO-8859-1 \
+ en_ZM/UTF-8 \
+@@ -385,6 +388,7 @@ sv_FI/ISO-8859-1 \
+ sv_FI@euro/ISO-8859-15 \
+ sv_SE.UTF-8/UTF-8 \
+ sv_SE/ISO-8859-1 \
++sv_SE.ISO-8859-15/ISO-8859-15 \
+ sw_KE/UTF-8 \
+ sw_TZ/UTF-8 \
+ szl_PL/UTF-8 \
diff --git a/SOURCES/glibc-fedora-localedef.patch b/SOURCES/glibc-fedora-localedef.patch
new file mode 100644
index 0000000..41deb0a
--- /dev/null
+++ b/SOURCES/glibc-fedora-localedef.patch
@@ -0,0 +1,11 @@
+diff -Nru glibc-2.17-c758a686/localedata/Makefile glibc-2.17-c758a686/localedata/Makefile
+--- glibc-2.17-c758a686/localedata/Makefile	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/localedata/Makefile	2012-06-07 12:15:21.776318827 -0600
+@@ -211,6 +211,7 @@ $(INSTALL-SUPPORTED-LOCALES): install-lo
+ 	echo -n '...'; \
+ 	input=`echo $$locale | sed 's/\([^.]*\)[^@]*\(.*\)/\1\2/'`; \
+ 	$(LOCALEDEF) --alias-file=../intl/locale.alias \
++		     --no-archive \
+ 		     -i locales/$$input -c -f charmaps/$$charset \
+ 		     $(addprefix --prefix=,$(install_root)) $$locale; \
+ 	echo ' done'; \
diff --git a/SOURCES/glibc-fedora-locarchive.patch b/SOURCES/glibc-fedora-locarchive.patch
new file mode 100644
index 0000000..245850a
--- /dev/null
+++ b/SOURCES/glibc-fedora-locarchive.patch
@@ -0,0 +1,51 @@
+This is a part of commit glibc-2.3.3-1492-ga891c7b,
+needed for fedora/build-locale-archive.c only.
+
+diff -Nru glibc-2.17-c758a686/ChangeLog.17 glibc-2.17-c758a686/ChangeLog.17
+--- glibc-2.17-c758a686/ChangeLog.17	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/ChangeLog.17	2012-06-07 12:15:21.564319619 -0600
+@@ -11818,6 +11829,10 @@ d2009-10-30  Ulrich Drepper  <drepper@re
+ 	[BZ #4368]
+ 	* stdlib/stdlib.h: Remove obsolete part of comment for realpath.
+
++2007-04-16  Jakub Jelinek  <jakub@redhat.com>
++
++	* locale/programs/locarchive.c (add_alias, insert_name): Remove static.
++
+ 2007-04-16  Ulrich Drepper  <drepper@redhat.com>
+ 
+ 	[BZ #4364]
+diff -Nru glibc-2.17-c758a686/locale/programs/locarchive.c glibc-2.17-c758a686/locale/programs/locarchive.c
+--- glibc-2.17-c758a686/locale/programs/locarchive.c	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/locale/programs/locarchive.c	2012-06-07 12:15:21.585319540 -0600
+@@ -252,9 +252,9 @@ oldlocrecentcmp (const void *a, const vo
+ /* forward decls for below */
+ static uint32_t add_locale (struct locarhandle *ah, const char *name,
+ 			    locale_data_t data, bool replace);
+-static void add_alias (struct locarhandle *ah, const char *alias,
+-		       bool replace, const char *oldname,
+-		       uint32_t *locrec_offset_p);
++void add_alias (struct locarhandle *ah, const char *alias,
++		bool replace, const char *oldname,
++		uint32_t *locrec_offset_p);
+ 
+ 
+ static bool
+@@ -635,7 +635,7 @@ close_archive (struct locarhandle *ah)
+ #include "../../intl/explodename.c"
+ #include "../../intl/l10nflist.c"
+ 
+-static struct namehashent *
++struct namehashent *
+ insert_name (struct locarhandle *ah,
+ 	     const char *name, size_t name_len, bool replace)
+ {
+@@ -693,7 +693,7 @@ insert_name (struct locarhandle *ah,
+   return &namehashtab[idx];
+ }
+ 
+-static void
++void
+ add_alias (struct locarhandle *ah, const char *alias, bool replace,
+ 	   const char *oldname, uint32_t *locrec_offset_p)
+ {
diff --git a/SOURCES/glibc-fedora-manual-dircategory.patch b/SOURCES/glibc-fedora-manual-dircategory.patch
new file mode 100644
index 0000000..9dce832
--- /dev/null
+++ b/SOURCES/glibc-fedora-manual-dircategory.patch
@@ -0,0 +1,20 @@
+From 4820b9175535e13df79ce816106016040014916e Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Fri, 3 Nov 2006 16:31:21 +0000
+Subject: [PATCH] Change @dircategory.
+
+---
+ manual/libc.texinfo |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+--- glibc-2.17-c758a686/manual/libc.texinfo
++++ glibc-2.17-c758a686/manual/libc.texinfo
+@@ -7,7 +7,7 @@
+ @include macros.texi
+ 
+ @comment Tell install-info what to do.
+-@dircategory Software libraries
++@dircategory Libraries
+ @direntry
+ * Libc: (libc).                 C library.
+ @end direntry
diff --git a/SOURCES/glibc-fedora-nis-rh188246.patch b/SOURCES/glibc-fedora-nis-rh188246.patch
new file mode 100644
index 0000000..f266774
--- /dev/null
+++ b/SOURCES/glibc-fedora-nis-rh188246.patch
@@ -0,0 +1,21 @@
+From baba5d9461d4e8a581ac26fe4412ad783ffc73e7 Mon Sep 17 00:00:00 2001
+From: Jakub Jelinek <jakub@redhat.com>
+Date: Mon, 1 May 2006 08:02:53 +0000
+Subject: [PATCH] Enable SETENT_BATCH_READ nis/nss option by default
+
+* Mon May  1 2006 Jakub Jelinek <jakub@redhat.com> 2.4.90-4
+- SETENT_BATCH_READ /etc/default/nss option for speeding up
+  some usages of NIS+ (#188246)
+
+diff --git glibc-2.17-c758a686/nis/nss glibc-2.17-c758a686/nis/nss
+--- glibc-2.17-c758a686/nis/nss
++++ glibc-2.17-c758a686/nis/nss
+@@ -25,7 +25,7 @@
+ #  memory with every getXXent() call.  Otherwise each getXXent() call
+ #  might result into a network communication with the server to get
+ #  the next entry.
+-#SETENT_BATCH_READ=TRUE
++SETENT_BATCH_READ=TRUE
+ #
+ # ADJUNCT_AS_SHADOW
+ #  If set to TRUE, the passwd routines in the NIS NSS module will not
diff --git a/SOURCES/glibc-fedora-nptl-linklibc.patch b/SOURCES/glibc-fedora-nptl-linklibc.patch
new file mode 100644
index 0000000..e6866ee
--- /dev/null
+++ b/SOURCES/glibc-fedora-nptl-linklibc.patch
@@ -0,0 +1,25 @@
+diff -Nru glibc-2.17-c758a686/nptl/Makefile glibc-2.17-c758a686/nptl/Makefile
+--- glibc-2.17-c758a686/nptl/Makefile	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/nptl/Makefile	2012-06-07 12:15:21.816318678 -0600
+@@ -529,15 +529,19 @@ $(addprefix $(objpfx), \
+     $(tests) $(xtests) $(test-srcs))): $(objpfx)libpthread.so \
+ 				       $(objpfx)libpthread_nonshared.a
+ $(objpfx)tst-unload: $(common-objpfx)dlfcn/libdl.so
+-# $(objpfx)../libc.so is used instead of $(common-objpfx)libc.so,
++# $(objpfx)linklibc.so is used instead of $(common-objpfx)libc.so,
+ # since otherwise libpthread.so comes before libc.so when linking.
+ $(addprefix $(objpfx), $(tests-reverse)): \
+-  $(objpfx)../libc.so $(objpfx)libpthread.so \
++  $(objpfx)linklibc.so $(objpfx)libpthread.so \
+   $(objpfx)libpthread_nonshared.a
+ $(objpfx)../libc.so: $(common-objpfx)libc.so ;
+ $(addprefix $(objpfx),$(tests-static) $(xtests-static)): $(objpfx)libpthread.a
+ 
+ $(objpfx)tst-atfork2.out: $(objpfx)tst-atfork2mod.so
++
++$(objpfx)linklibc.so: $(common-objpfx)libc.so
++	ln -s ../libc.so $@
++generated += libclink.so
+ else
+ $(addprefix $(objpfx),$(tests) $(test-srcs)): $(objpfx)libpthread.a
+ endif
diff --git a/SOURCES/glibc-fedora-nscd.patch b/SOURCES/glibc-fedora-nscd.patch
new file mode 100644
index 0000000..b236ecc
--- /dev/null
+++ b/SOURCES/glibc-fedora-nscd.patch
@@ -0,0 +1,12 @@
+diff -Nru glibc-2.17-c758a686/nscd/nscd.conf glibc-2.17-c758a686/nscd/nscd.conf
+--- glibc-2.17-c758a686/nscd/nscd.conf	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/nscd/nscd.conf	2012-06-07 12:15:21.818318670 -0600
+@@ -33,7 +33,7 @@
+ #	logfile			/var/log/nscd.log
+ #	threads			4
+ #	max-threads		32
+-#	server-user		nobody
++	server-user		nscd
+ #	stat-user		somebody
+ 	debug-level		0
+ #	reload-count		5
diff --git a/SOURCES/glibc-fedora-ppc-unwind.patch b/SOURCES/glibc-fedora-ppc-unwind.patch
new file mode 100644
index 0000000..28a1e58
--- /dev/null
+++ b/SOURCES/glibc-fedora-ppc-unwind.patch
@@ -0,0 +1,23 @@
+(This patch is no longer needed because we currently build all of
+glibc with -fno-asynchronous-unwind-tables.)
+
+glibc-2.3.3-1478-g37582bc
+
+* Thu Nov 30 2006 Jakub Jelinek <jakub@redhat.com> 2.5.90-9
+- on ppc64 build __libc_start_main without unwind info,
+  as it breaks MD_FROB_UPDATE_CONTEXT (#217729, #217775; in the
+  future that could be fixable just by providing .cfi_undefined r2
+  in __libc_start_main instead)
+
+diff -Nru glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile	2012-06-07 12:15:21.828318633 -0600
+@@ -35,6 +35,8 @@ CFLAGS-rtld-memmove.os = $(no-special-re
+ CFLAGS-rtld-memchr.os = $(no-special-regs)
+ CFLAGS-rtld-strnlen.os = $(no-special-regs)
+ 
++CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
++
+ ifeq ($(subdir),csu)
+ sysdep_routines += hp-timing
+ elide-routines.os += hp-timing
diff --git a/SOURCES/glibc-fedora-regcomp-sw11561.patch b/SOURCES/glibc-fedora-regcomp-sw11561.patch
new file mode 100644
index 0000000..3366dd9
--- /dev/null
+++ b/SOURCES/glibc-fedora-regcomp-sw11561.patch
@@ -0,0 +1,155 @@
+Upstream commit:
+
+commit 7e2f0d2d77e4bc273fe00f99d970605d8e38d4d6
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon Feb 4 10:16:33 2013 +0100
+
+    Fix handling of collating symbols in regexps
+
+From c1b97d6d896b1f22fdf5d28471ef7859ec840a57 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@redhat.com>
+Date: Wed, 1 Sep 2010 17:26:15 +0200
+Subject: [PATCH] Fix handling of collating symbols in regexps
+
+[BZ #11561]
+* posix/regcomp.c (parse_bracket_exp): When looking up collating
+elements compare against the byte sequence of it, not its name.
+
+---
+ ChangeLog       |    4 +++
+ posix/regcomp.c |   72 ++++++++++++++++++++----------------------------------
+ 2 files changed, 31 insertions(+), 45 deletions(-)
+
+--- glibc-2.17-c758a686/posix/regcomp.c
++++ glibc-2.17-c758a686/posix/regcomp.c
+@@ -2772,40 +2772,29 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ 
+   /* Local function for parse_bracket_exp used in _LIBC environement.
+      Seek the collating symbol entry correspondings to NAME.
+-     Return the index of the symbol in the SYMB_TABLE.  */
++     Return the index of the symbol in the SYMB_TABLE,
++     or -1 if not found.  */
+ 
+   auto inline int32_t
+   __attribute ((always_inline))
+-  seek_collating_symbol_entry (name, name_len)
+-	 const unsigned char *name;
+-	 size_t name_len;
++  seek_collating_symbol_entry (const unsigned char *name, size_t name_len)
+     {
+-      int32_t hash = elem_hash ((const char *) name, name_len);
+-      int32_t elem = hash % table_size;
+-      if (symb_table[2 * elem] != 0)
+-	{
+-	  int32_t second = hash % (table_size - 2) + 1;
+-
+-	  do
+-	    {
+-	      /* First compare the hashing value.  */
+-	      if (symb_table[2 * elem] == hash
+-		  /* Compare the length of the name.  */
+-		  && name_len == extra[symb_table[2 * elem + 1]]
+-		  /* Compare the name.  */
+-		  && memcmp (name, &extra[symb_table[2 * elem + 1] + 1],
+-			     name_len) == 0)
+-		{
+-		  /* Yep, this is the entry.  */
+-		  break;
+-		}
++      int32_t elem;
+ 
+-	      /* Next entry.  */
+-	      elem += second;
+-	    }
+-	  while (symb_table[2 * elem] != 0);
+-	}
+-      return elem;
++      for (elem = 0; elem < table_size; elem++)
++	if (symb_table[2 * elem] != 0)
++	  {
++	    int32_t idx = symb_table[2 * elem + 1];
++	    /* Skip the name of collating element name.  */
++	    idx += 1 + extra[idx];
++	    if (/* Compare the length of the name.  */
++		name_len == extra[idx]
++		/* Compare the name.  */
++		&& memcmp (name, &extra[idx + 1], name_len) == 0)
++	      /* Yep, this is the entry.  */
++	      return elem;
++	  }
++      return -1;
+     }
+ 
+   /* Local function for parse_bracket_exp used in _LIBC environment.
+@@ -2814,8 +2803,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ 
+   auto inline unsigned int
+   __attribute ((always_inline))
+-  lookup_collation_sequence_value (br_elem)
+-	 bracket_elem_t *br_elem;
++  lookup_collation_sequence_value (bracket_elem_t *br_elem)
+     {
+       if (br_elem->type == SB_CHAR)
+ 	{
+@@ -2843,7 +2831,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ 	      int32_t elem, idx;
+ 	      elem = seek_collating_symbol_entry (br_elem->opr.name,
+ 						  sym_name_len);
+-	      if (symb_table[2 * elem] != 0)
++	      if (elem != -1)
+ 		{
+ 		  /* We found the entry.  */
+ 		  idx = symb_table[2 * elem + 1];
+@@ -2861,7 +2849,7 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ 		  /* Return the collation sequence value.  */
+ 		  return *(unsigned int *) (extra + idx);
+ 		}
+-	      else if (symb_table[2 * elem] == 0 && sym_name_len == 1)
++	      else if (sym_name_len == 1)
+ 		{
+ 		  /* No valid character.  Match it as a single byte
+ 		     character.  */
+@@ -2883,11 +2871,8 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ 
+   auto inline reg_errcode_t
+   __attribute ((always_inline))
+-  build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem)
+-	 re_charset_t *mbcset;
+-	 int *range_alloc;
+-	 bitset_t sbcset;
+-	 bracket_elem_t *start_elem, *end_elem;
++  build_range_exp (bitset_t sbcset, re_charset_t *mbcset, int *range_alloc,
++		   bracket_elem_t *start_elem, bracket_elem_t *end_elem)
+     {
+       unsigned int ch;
+       uint32_t start_collseq;
+@@ -2966,25 +2951,22 @@ parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token,
+ 
+   auto inline reg_errcode_t
+   __attribute ((always_inline))
+-  build_collating_symbol (sbcset, mbcset, coll_sym_alloc, name)
+-	 re_charset_t *mbcset;
+-	 int *coll_sym_alloc;
+-	 bitset_t sbcset;
+-	 const unsigned char *name;
++  build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset,
++			  int *coll_sym_alloc, const unsigned char *name)
+     {
+       int32_t elem, idx;
+       size_t name_len = strlen ((const char *) name);
+       if (nrules != 0)
+ 	{
+ 	  elem = seek_collating_symbol_entry (name, name_len);
+-	  if (symb_table[2 * elem] != 0)
++	  if (elem != -1)
+ 	    {
+ 	      /* We found the entry.  */
+ 	      idx = symb_table[2 * elem + 1];
+ 	      /* Skip the name of collating element name.  */
+ 	      idx += 1 + extra[idx];
+ 	    }
+-	  else if (symb_table[2 * elem] == 0 && name_len == 1)
++	  else if (name_len == 1)
+ 	    {
+ 	      /* No valid character, treat it as a normal
+ 		 character.  */
diff --git a/SOURCES/glibc-fedora-streams-rh436349.patch b/SOURCES/glibc-fedora-streams-rh436349.patch
new file mode 100644
index 0000000..6b862db
--- /dev/null
+++ b/SOURCES/glibc-fedora-streams-rh436349.patch
@@ -0,0 +1,28 @@
+This is part of commit glibc-2.3.3-1564-gd0b6ac6
+
+* Fri Mar 14 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-11
+- remove <stropts.h>, define _XOPEN_STREAMS -1 (#436349)
+
+diff -Nru glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h	2012-06-07 12:15:21.817318674 -0600
+@@ -188,4 +188,7 @@
+ /* Typed memory objects are not available.  */
+ #define _POSIX_TYPED_MEMORY_OBJECTS	-1
+ 
++/* Streams are not available.  */
++#define _XOPEN_STREAMS	-1
++
+ #endif /* bits/posix_opt.h */
+diff -Nru glibc-2.17-c758a686/streams/Makefile glibc-2.17-c758a686/streams/Makefile
+--- glibc-2.17-c758a686/streams/Makefile	2012-06-05 07:42:49.000000000 -0600
++++ glibc-2.17-c758a686/streams/Makefile	2012-06-07 12:15:21.824318649 -0600
+@@ -20,7 +20,7 @@
+ #
+ subdir	:= streams
+ 
+-headers		= stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
++#headers		= stropts.h sys/stropts.h bits/stropts.h bits/xtitypes.h
+ routines	= isastream getmsg getpmsg putmsg putpmsg fattach fdetach
+ 
+ include ../Rules
diff --git a/SOURCES/glibc-fedora-uname-getrlimit.patch b/SOURCES/glibc-fedora-uname-getrlimit.patch
new file mode 100644
index 0000000..3529d0c
--- /dev/null
+++ b/SOURCES/glibc-fedora-uname-getrlimit.patch
@@ -0,0 +1,52 @@
+Related upstream commit:
+
+commit c5c2b7c3fd823fc5c4a52506292a90eba60b0c62
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Sat Dec 6 23:40:48 2014 +0000
+
+    Fix pthreads getrlimit, gettimeofday namespace (bug 17682).
+
+The uname call is again present in Fedora because UTS namespaces can
+be used nowadays to change the uname result.
+
+--- glibc-2.17-c758a686/nptl/Version
++++ glibc-2.17-c758a686/nptl/Versions
+@@ -30,6 +30,7 @@ libc {
+     __libc_alloca_cutoff;
+     # Internal libc interface to libpthread
+     __libc_dl_error_tsd;
++    __getrlimit;
+   }
+ }
+ 
+--- glibc-2.17-c758a686/nptl/nptl-init.c
++++ glibc-2.17-c758a686/nptl/nptl-init.c
+@@ -414,7 +414,7 @@ __pthread_initialize_minimal_internal (void)
+   /* Determine the default allowed stack size.  This is the size used
+      in case the user does not specify one.  */
+   struct rlimit limit;
+-  if (getrlimit (RLIMIT_STACK, &limit) != 0
++  if (__getrlimit (RLIMIT_STACK, &limit) != 0
+       || limit.rlim_cur == RLIM_INFINITY)
+     /* The system limit is not usable.  Use an architecture-specific
+        default.  */
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/Versions
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/Versions
+@@ -0,0 +1,6 @@
++libc {
++  GLIBC_PRIVATE {
++    # Internal libc interface to libpthread
++    __uname;
++  }
++}
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/smp.h
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/smp.h
+@@ -36,7 +36,7 @@ is_smp_system (void)
+   char *cp;
+ 
+   /* Try reading the number using `sysctl' first.  */
+-  if (uname (&u.uts) == 0)
++  if (__uname (&u.uts) == 0)
+     cp = u.uts.version;
+   else
+     {
diff --git a/SOURCES/glibc-fix-test-write-buf-size.patch b/SOURCES/glibc-fix-test-write-buf-size.patch
new file mode 100644
index 0000000..104b97b
--- /dev/null
+++ b/SOURCES/glibc-fix-test-write-buf-size.patch
@@ -0,0 +1,54 @@
+# This patch fixes tst-cancel4, tst-cancel5, tst-cancelx4 and tst-cancelx5
+# failures on newer kernels where the write buffers are larger. 
+#
+# commit e7074e4c5edb0acaa979ea08e533736f906a9d68
+# Author: David S. Miller <davem@davemloft.net>
+# Date:   Tue Jul 23 02:31:37 2013 -0700
+# 
+#     Increase nptl test case buffer size so we really block on current Linux kernels.
+#     
+#         * tst-cancel4.c (WRITE_BUFFER_SIZE): Increase to 16384.
+# 
+# commit 135529b443631f840cc66d0cc395f79c416434d9
+# Author: David S. Miller <davem@davemloft.net>
+# Date:   Tue Jul 23 11:31:39 2013 -0700
+# 
+#     Remove Linux kernel version ambiguity in comment added by previous commit.
+#     
+#         * tst-cancel4.c (WRITE_BUFFER_SIZE): Adjust comment.
+# 
+diff -urN glibc-2.17-c758a686/nptl/tst-cancel4.c glibc-2.17-c758a686/nptl/tst-cancel4.c
+--- glibc-2.17-c758a686/nptl/tst-cancel4.c	2014-07-25 22:07:09.130021164 -0400
++++ glibc-2.17-c758a686/nptl/tst-cancel4.c	2014-07-25 22:12:07.580022919 -0400
+@@ -83,7 +83,30 @@
+ # define IPC_ADDVAL 0
+ #endif
+ 
+-#define WRITE_BUFFER_SIZE 4096
++/* The WRITE_BUFFER_SIZE value needs to be choosen such that if we set
++   the socket send buffer size to '1', a write of this size on that
++   socket will block.
++
++   The Linux kernel imposes a minimum send socket buffer size which
++   has changed over the years.  As of Linux 3.10 the value is:
++
++     2 * (2048 + SKB_DATA_ALIGN(sizeof(struct sk_buff)))
++
++   which is attempting to make sure that with standard MTUs,
++   TCP can always queue up at least 2 full sized packets.
++
++   Furthermore, there is logic in the socket send paths that
++   will allow one more packet (of any size) to be queued up as
++   long as some socket buffer space remains.   Blocking only
++   occurs when we try to queue up a new packet and the send
++   buffer space has already been fully consumed.
++
++   Therefore we must set this value to the largest possible value of
++   the formula above (and since it depends upon the size of "struct
++   sk_buff", it is dependent upon machine word size etc.) plus some
++   slack space.  */
++
++#define WRITE_BUFFER_SIZE 16384
+ 
+ /* Cleanup handling test.  */
+ static int cl_called;
diff --git a/SOURCES/glibc-gmake.patch b/SOURCES/glibc-gmake.patch
new file mode 100644
index 0000000..8431c0e
--- /dev/null
+++ b/SOURCES/glibc-gmake.patch
@@ -0,0 +1,37 @@
+#
+# BZ #16037
+#
+# Allow building glibc with make version 4.0 or greater.
+# This facilitates testing and QE on non-RHEL environments during
+# patch development.
+#
+# commit 28d708c44bc47b56f6551ff285f78edcf61c208a
+# Author: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
+# Date:   Thu Oct 31 12:37:50 2013 +1000
+#
+#    Accept make versions 4.0 and greater
+#
+diff -urN glibc-2.17-c758a686/configure glibc-2.17-c758a686/configure
+--- glibc-2.17-c758a686/configure	2015-01-15 16:32:14.983435268 -0500
++++ glibc-2.17-c758a686/configure	2015-01-15 16:32:45.396495266 -0500
+@@ -4991,7 +4991,7 @@
+   ac_prog_version=`$MAKE --version 2>&1 | sed -n 's/^.*GNU Make[^0-9]*\([0-9][0-9.]*\).*$/\1/p'`
+   case $ac_prog_version in
+     '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+-    3.79* | 3.[89]*)
++    3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*)
+        ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+     *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+ 
+diff -urN glibc-2.17-c758a686/configure.in glibc-2.17-c758a686/configure.in
+--- glibc-2.17-c758a686/configure.in	2015-01-15 16:32:14.781441511 -0500
++++ glibc-2.17-c758a686/configure.in	2015-01-15 16:32:34.970817501 -0500
+@@ -945,7 +945,7 @@
+   critic_missing="$critic_missing gcc")
+ AC_CHECK_PROG_VER(MAKE, gnumake gmake make, --version,
+   [GNU Make[^0-9]*\([0-9][0-9.]*\)],
+-  [3.79* | 3.[89]*], critic_missing="$critic_missing make")
++  [3.79* | 3.[89]* | [4-9].* | [1-9][0-9]*], critic_missing="$critic_missing make")
+ 
+ AC_CHECK_PROG_VER(MSGFMT, gnumsgfmt gmsgfmt msgfmt, --version,
+   [GNU gettext.* \([0-9]*\.[0-9.]*\)],
diff --git a/SOURCES/glibc-manual-update.patch b/SOURCES/glibc-manual-update.patch
new file mode 100644
index 0000000..bed496b
--- /dev/null
+++ b/SOURCES/glibc-manual-update.patch
@@ -0,0 +1,19408 @@
+#
+# Synchronize RHEL 7.1 manual with upstream manual.
+#
+# Include updates that don't impact material differences
+# between the upstream master and 2.17-based RHEL implemenation.
+#
+diff -urN glibc-2.17-c758a686/manual/argp.texi glibc-2.17-c758a686/manual/argp.texi
+--- glibc-2.17-c758a686/manual/argp.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/argp.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -36,6 +36,35 @@
+ @comment argp.h
+ @comment GNU
+ @deftypefun {error_t} argp_parse (const struct argp *@var{argp}, int @var{argc}, char **@var{argv}, unsigned @var{flags}, int *@var{arg_index}, void *@var{input})
++@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtslocale{} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c Optionally alloca()tes standard help options, initializes the parser,
++@c then parses individual args in a loop, and then finalizes.
++@c  parser_init
++@c   calc_sizes ok
++@c    option_is_end ok
++@c   malloc @ascuheap @acsmem
++@c   parser_convert @mtslocale
++@c    convert_options @mtslocale
++@c     option_is_end ok
++@c     option_is_short ok
++@c      isprint, but locale may change within the loop
++@c     find_long_option ok
++@c   group_parse
++@c    group->parser (from argp->parser)
++@c  parser_parse_next
++@c   getopt_long(_only)_r many issues, same as non_r minus @mtasurace
++@c   parser_parse_arg
++@c    group_parse dup
++@c   parser_parse_opt
++@c    group_parse dup
++@c    argp_error dup @mtasurace:argpbuf @mtsenv @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c    dgettext (bad key error) dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c  parser_finalize
++@c   group_parse
++@c   fprintf dup @mtslocale @asucorrupt @aculock @acucorrupt [no @ascuheap @acsmem]
++@c   dgettext dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c   arg_state_help
++@c   free dup @ascuhelp @acsmem
+ The @code{argp_parse} function parses the arguments in @var{argv}, of
+ length @var{argc}, using the argp parser @var{argp}.  @xref{Argp
+ Parsers}.  Passing a null pointer for @var{argp} is the same as using
+@@ -660,6 +689,8 @@
+ @comment argp.h
+ @comment GNU
+ @deftypefun void argp_usage (const struct argp_state *@var{state})
++@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
++@c Just calls argp_state_help with stderr and ARGP_HELP_STD_USAGE.
+ Outputs the standard usage message for the argp parser referred to by
+ @var{state} to @code{@var{state}->err_stream} and terminate the program
+ with @code{exit (argp_err_exit_status)}.  @xref{Argp Global Variables}.
+@@ -669,6 +700,13 @@
+ @comment argp.h
+ @comment GNU
+ @deftypefun void argp_error (const struct argp_state *@var{state}, const char *@var{fmt}, @dots{})
++@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
++@c Lock stream, vasprintf the formatted message into a buffer, print the
++@c buffer prefixed by the short program name (in libc,
++@c argp_short_program_name is a macro that expands to
++@c program_invocation_short_name), releases the buffer, then call
++@c argp_state_help with stream and ARGP_HELP_STD_ERR, unlocking the
++@c stream at the end.
+ Prints the printf format string @var{fmt} and following args, preceded
+ by the program name and @samp{:}, and followed by a @w{@samp{Try @dots{}
+ --help}} message, and terminates the program with an exit status of
+@@ -679,6 +717,12 @@
+ @comment argp.h
+ @comment GNU
+ @deftypefun void argp_failure (const struct argp_state *@var{state}, int @var{status}, int @var{errnum}, const char *@var{fmt}, @dots{})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
++@c Lock stream, write out the short program name, vasprintf the optional
++@c formatted message to a buffer, print the buffer prefixed by colon and
++@c blank, release the buffer, call strerror_r with an automatic buffer,
++@c print it out after colon and blank, put[w]c a line break, unlock the
++@c stream, then exit unless ARGP_NO_EXIT.
+ Similar to the standard gnu error-reporting function @code{error}, this
+ prints the program name and @samp{:}, the printf format string
+ @var{fmt}, and the appropriate following args.  If it is non-zero, the
+@@ -695,6 +739,142 @@
+ @comment argp.h
+ @comment GNU
+ @deftypefun void argp_state_help (const struct argp_state *@var{state}, FILE *@var{stream}, unsigned @var{flags})
++@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
++@c Just calls _help with the short program name and optionally exit.
++@c The main problems in _help, besides the usual issues with stream I/O
++@c and translation, are the use of a static buffer (uparams, thus
++@c @mtasurace:argpbuf) that makes the whole thing thread-unsafe, reading
++@c from the environment for ARGP_HELP_FMT, accessing the locale object
++@c multiple times.
++
++@c _help @mtsenv @mtasurace:argpbuf @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c  dgettext @ascuintl
++@c  flockfile @aculock
++@c  funlockfile @aculock
++@c  fill_in_uparams @mtsenv @mtasurace:argpbuf @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c   argp_failure dup (status = errnum = 0)
++@c   atoi dup @mtslocale
++@c  argp_hol @ascuheap @acsmem
++@c   make_hol @ascuheap @acsmem
++@c   hol_add_cluster @ascuheap @acsmem
++@c   hol_append @ascuheap @acsmem
++@c  hol_set_group ok
++@c   hol_find_entry ok
++@c  hol_sort @mtslocale @acucorrupt
++@c   qsort dup @acucorrupt
++@c    hol_entry_qcmp @mtslocale
++@c     hol_entry_cmp @mtslocale
++@c      group_cmp ok
++@c      hol_cluster_cmp ok
++@c       group_cmp ok
++@c      hol_entry_first_short @mtslocale
++@c       hol_entry_short_iterate [@mtslocale]
++@c        until_short ok
++@c         oshort ok
++@c          isprint ok
++@c      odoc ok
++@c      hol_entry_first_long ok
++@c      canon_doc_option @mtslocale
++@c      tolower dup
++@c  hol_usage @mtslocale @ascuintl @ascuheap @acsmem
++@c   hol_entry_short_iterate ok
++@c    add_argless_short_opt ok
++@c   argp_fmtstream_printf dup
++@c   hol_entry_short_iterate @mtslocale @ascuintl @ascuheap @acsmem
++@c    usage_argful_short_opt @mtslocale @ascuintl @ascuheap @acsmem
++@c     dgettext dup
++@c     argp_fmtstream_printf dup
++@c   hol_entry_long_iterate @mtslocale @ascuintl @ascuheap @acsmem
++@c    usage_long_opt @mtslocale @ascuintl @ascuheap @acsmem
++@c     dgettext dup
++@c     argp_fmtstream_printf dup
++@c  hol_help @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c   hol_entry_help @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c    argp_fmtstream_set_lmargin dup
++@c    argp_fmtstream_wmargin dup
++@c    argp_fmtstream_set_wmargin dup
++@c    comma @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c     argp_fmtstream_putc dup
++@c     hol_cluster_is_child ok
++@c     argp_fmtstream_wmargin dup
++@c     print_header dup
++@c     argp_fmtstream_set_wmargin dup
++@c     argp_fmtstream_puts dup
++@c     indent_to dup
++@c    argp_fmtstream_putc dup
++@c    arg @mtslocale @ascuheap @acsmem
++@c     argp_fmtstream_printf dup
++@c    odoc dup
++@c    argp_fmtstream_puts dup
++@c    argp_fmtstream_printf dup
++@c    print_header @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c     dgettext dup
++@c     filter_doc dup
++@c     argp_fmtstream_putc dup
++@c     indent_to dup
++@c     argp_fmtstream_set_lmargin dup
++@c     argp_fmtstream_set_wmargin dup
++@c     argp_fmtstream_puts dup
++@c     free dup
++@c    filter_doc dup
++@c    argp_fmtstream_point dup
++@c    indent_to @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c     argp_fmtstream_point dup
++@c     argp_fmtstream_putc dup
++@c   dgettext dup
++@c   filter_doc dup
++@c   argp_fmtstream_putc dup
++@c   argp_fmtstream_puts dup
++@c   free dup
++@c  hol_free @ascuheap @acsmem
++@c   free dup
++@c  argp_args_levels ok
++@c  argp_args_usage @mtslocale @ascuintl @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c   dgettext dup
++@c   filter_doc ok
++@c    argp_input ok
++@c    argp->help_filter
++@c   space @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c    argp_fmtstream_point dup
++@c    argp_fmtstream_rmargin @mtslocale @asucorrupt @acucorrupt @aculock
++@c     argp_fmtstream_update dup
++@c    argp_fmtstream_putc dup
++@c   argp_fmtstream_write dup
++@c   free dup
++@c  argp_doc @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock
++@c   dgettext @ascuintl
++@c   strndup @ascuheap @acsmem
++@c   argp_input dup
++@c   argp->help_filter
++@c   argp_fmtstream_putc @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c    argp_fmtstream_ensure dup
++@c   argp_fmtstream_write dup
++@c   argp_fmtstream_puts dup
++@c   argp_fmtstream_point @mtslocale @asucorrupt @acucorrupt @aculock
++@c    argp_fmtstream_update dup
++@c   argp_fmtstream_lmargin dup
++@c   free dup
++@c  argp_make_fmtstream @ascuheap @acsmem
++@c  argp_fmtstream_free @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c   argp_fmtstream_update @mtslocale @asucorrupt @acucorrupt @aculock
++@c    put[w]c_unlocked dup
++@c    isblank in loop @mtslocale
++@c    fxprintf @aculock
++@c   fxprintf @aculock
++@c   free dup
++@c  argp_fmtstream_set_wmargin @mtslocale @asucorrupt @acucorrupt @aculock
++@c   argp_fmtstream_update dup
++@c  argp_fmtstream_printf @mtslocale @ascuheap @acsmem
++@c   argp_fmtstream_ensure dup
++@c   vsnprintf dup
++@c  argp_fmtstream_set_lmargin @mtslocale @asucorrupt @acucorrupt @aculock
++@c   argp_fmtstream_update dup
++@c  argp_fmtstream_puts @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c   argp_fmtstream_write @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c    argp_fmtstream_ensure @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock
++@c     argp_fmtstream_update dup
++@c     fxprintf @aculock
++@c     realloc @ascuheap @acsmem
+ Outputs a help message for the argp parser referred to by @var{state},
+ to @var{stream}.  The @var{flags} argument determines what sort of help
+ message is produced.  @xref{Argp Help Flags}.
+@@ -928,6 +1108,8 @@
+ @comment argp.h
+ @comment GNU
+ @deftypefun void argp_help (const struct argp *@var{argp}, FILE *@var{stream}, unsigned @var{flags}, char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}}
++@c Just calls _help.
+ This outputs a help message for the argp parser @var{argp} to
+ @var{stream}.  The type of messages printed will be determined by
+ @var{flags}.
+diff -urN glibc-2.17-c758a686/manual/arith.texi glibc-2.17-c758a686/manual/arith.texi
+--- glibc-2.17-c758a686/manual/arith.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/arith.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -160,6 +160,8 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun div_t div (int @var{numerator}, int @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Functions in this section are pure, and thus safe.
+ This function @code{div} computes the quotient and remainder from
+ the division of @var{numerator} by @var{denominator}, returning the
+ result in a structure of type @code{div_t}.
+@@ -199,6 +201,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun ldiv_t ldiv (long int @var{numerator}, long int @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{ldiv} function is similar to @code{div}, except that the
+ arguments are of type @code{long int} and the result is returned as a
+ structure of type @code{ldiv_t}.
+@@ -225,6 +228,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun lldiv_t lldiv (long long int @var{numerator}, long long int @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{lldiv} function is like the @code{div} function, but the
+ arguments are of type @code{long long int} and the result is returned as
+ a structure of type @code{lldiv_t}.
+@@ -256,6 +260,7 @@
+ @comment inttypes.h
+ @comment ISO
+ @deftypefun imaxdiv_t imaxdiv (intmax_t @var{numerator}, intmax_t @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{imaxdiv} function is like the @code{div} function, but the
+ arguments are of type @code{intmax_t} and the result is returned as
+ a structure of type @code{imaxdiv_t}.
+@@ -318,6 +323,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn {Macro} int fpclassify (@emph{float-type} @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is a generic macro which works on all floating-point types and
+ which returns a value of type @code{int}.  The possible values are:
+ 
+@@ -354,6 +360,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn {Macro} int isfinite (@emph{float-type} @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if @var{x} is finite: not plus or
+ minus infinity, and not NaN.  It is equivalent to
+ 
+@@ -368,6 +375,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn {Macro} int isnormal (@emph{float-type} @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if @var{x} is finite and normalized.
+ It is equivalent to
+ 
+@@ -379,6 +387,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn {Macro} int isnan (@emph{float-type} @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if @var{x} is NaN.  It is equivalent
+ to
+ 
+@@ -387,6 +396,15 @@
+ @end smallexample
+ @end deftypefn
+ 
++@comment math.h
++@comment GNU
++@deftypefn {Macro} int issignaling (@emph{float-type} @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++This macro returns a nonzero value if @var{x} is a signaling NaN
++(sNaN).  It is based on draft TS 18661 and currently enabled as a GNU
++extension.
++@end deftypefn
++
+ Another set of floating-point classification functions was provided by
+ BSD.  @Theglibc{} also supports these functions; however, we
+ recommend that you use the ISO C99 macros in new code.  Those are standard
+@@ -402,6 +420,7 @@
+ @comment math.h
+ @comment BSD
+ @deftypefunx int isinfl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns @code{-1} if @var{x} represents negative infinity,
+ @code{1} if @var{x} represents positive infinity, and @code{0} otherwise.
+ @end deftypefun
+@@ -415,6 +434,7 @@
+ @comment math.h
+ @comment BSD
+ @deftypefunx int isnanl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns a nonzero value if @var{x} is a ``not a number''
+ value, and zero otherwise.
+ 
+@@ -437,6 +457,7 @@
+ @comment math.h
+ @comment BSD
+ @deftypefunx int finitel (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns a nonzero value if @var{x} is finite or a ``not a
+ number'' value, and zero otherwise.
+ @end deftypefun
+@@ -489,7 +510,8 @@
+ is called when certain exceptions occur inside math library functions.
+ However, the Unix98 standard deprecates this interface.  We support it
+ for historical compatibility, but recommend that you do not use it in
+-new programs.
++new programs.  When this interface is used, exceptions may not be
++raised.
+ 
+ @noindent
+ The exceptions defined in @w{IEEE 754} are:
+@@ -705,6 +727,14 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int feclearexcept (int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{@assposix{}}@acsafe{@acsposix{}}}
++@c The other functions in this section that modify FP status register
++@c mostly do so with non-atomic load-modify-store sequences, but since
++@c the register is thread-specific, this should be fine, and safe for
++@c cancellation.  As long as the FP environment is restored before the
++@c signal handler returns control to the interrupted thread (like any
++@c kernel should do), the functions are also safe for use in signal
++@c handlers.
+ This function clears all of the supported exception flags indicated by
+ @var{excepts}.
+ 
+@@ -715,6 +745,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int feraiseexcept (int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function raises the supported exceptions indicated by
+ @var{excepts}.  If more than one exception bit in @var{excepts} is set
+ the order in which the exceptions are raised is undefined except that
+@@ -730,6 +761,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fetestexcept (int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Test whether the exception flags indicated by the parameter @var{except}
+ are currently set.  If any of them are, a nonzero value is returned
+ which specifies which exceptions are set.  Otherwise the result is zero.
+@@ -766,6 +798,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fegetexceptflag (fexcept_t *@var{flagp}, int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function stores in the variable pointed to by @var{flagp} an
+ implementation-defined value representing the current setting of the
+ exception flags indicated by @var{excepts}.
+@@ -777,6 +810,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fesetexceptflag (const fexcept_t *@var{flagp}, int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function restores the flags for the exceptions indicated by
+ @var{excepts} to the values stored in the variable pointed to by
+ @var{flagp}.
+@@ -798,7 +832,8 @@
+ Many of the math functions are defined only over a subset of the real or
+ complex numbers.  Even if they are mathematically defined, their result
+ may be larger or smaller than the range representable by their return
+-type.  These are known as @dfn{domain errors}, @dfn{overflows}, and
++type without loss of accuracy.  These are known as @dfn{domain errors},
++@dfn{overflows}, and
+ @dfn{underflows}, respectively.  Math functions do several things when
+ one of these errors occurs.  In this manual we will refer to the
+ complete response as @dfn{signalling} a domain error, overflow, or
+@@ -808,11 +843,20 @@
+ exception and returns NaN.  It also sets @var{errno} to @code{EDOM};
+ this is for compatibility with old systems that do not support @w{IEEE
+ 754} exception handling.  Likewise, when overflow occurs, math
+-functions raise the overflow exception and return @math{@infinity{}} or
+-@math{-@infinity{}} as appropriate.  They also set @var{errno} to
+-@code{ERANGE}.  When underflow occurs, the underflow exception is
+-raised, and zero (appropriately signed) is returned.  @var{errno} may be
+-set to @code{ERANGE}, but this is not guaranteed.
++functions raise the overflow exception and, in the default rounding
++mode, return @math{@infinity{}} or @math{-@infinity{}} as appropriate
++(in other rounding modes, the largest finite value of the appropriate
++sign is returned when appropriate for that rounding mode).  They also
++set @var{errno} to @code{ERANGE} if returning @math{@infinity{}} or
++@math{-@infinity{}}; @var{errno} may or may not be set to
++@code{ERANGE} when a finite value is returned on overflow.  When
++underflow occurs, the underflow exception is raised, and zero
++(appropriately signed) or a subnormal value, as appropriate for the
++mathematical result of the function and the rounding mode, is
++returned.  @var{errno} may be set to @code{ERANGE}, but this is not
++guaranteed; it is intended that @theglibc{} should set it when the
++underflow is to an appropriately signed zero, but not necessarily for
++other underflows.
+ 
+ Some of the math functions are defined mathematically to result in a
+ complex value over parts of their domains.  The most familiar example of
+@@ -932,6 +976,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fegetround (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns the currently selected rounding mode, represented by one of the
+ values of the defined rounding mode macros.
+ @end deftypefun
+@@ -942,6 +987,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fesetround (int @var{round})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Changes the currently selected rounding mode to @var{round}.  If
+ @var{round} does not correspond to one of the supported rounding modes
+ nothing is changed.  @code{fesetround} returns zero if it changed the
+@@ -986,6 +1032,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fegetenv (fenv_t *@var{envp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Store the floating-point environment in the variable pointed to by
+ @var{envp}.
+ 
+@@ -996,6 +1043,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int feholdexcept (fenv_t *@var{envp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Store the current floating-point environment in the object pointed to by
+ @var{envp}.  Then clear all exception flags, and set the FPU to trap no
+ exceptions.  Not all FPUs support trapping no exceptions; if
+@@ -1034,6 +1082,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int fesetenv (const fenv_t *@var{envp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Set the floating-point environment to that described by @var{envp}.
+ 
+ The function returns zero in case the operation was successful, a
+@@ -1043,6 +1092,7 @@
+ @comment fenv.h
+ @comment ISO
+ @deftypefun int feupdateenv (const fenv_t *@var{envp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Like @code{fesetenv}, this function sets the floating-point environment
+ to that described by @var{envp}.  However, if any exceptions were
+ flagged in the status word before @code{feupdateenv} was called, they
+@@ -1063,6 +1113,7 @@
+ @comment fenv.h
+ @comment GNU
+ @deftypefun int feenableexcept (int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This functions enables traps for each of the exceptions as indicated by
+ the parameter @var{except}.  The individual exceptions are described in
+ @ref{Status bit operations}.  Only the specified exceptions are
+@@ -1075,6 +1126,7 @@
+ @comment fenv.h
+ @comment GNU
+ @deftypefun int fedisableexcept (int @var{excepts})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This functions disables traps for each of the exceptions as indicated by
+ the parameter @var{except}.  The individual exceptions are described in
+ @ref{Status bit operations}.  Only the specified exceptions are
+@@ -1086,7 +1138,8 @@
+ 
+ @comment fenv.h
+ @comment GNU
+-@deftypefun int fegetexcept (int @var{excepts})
++@deftypefun int fegetexcept (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function returns a bitmask of all currently enabled exceptions.  It
+ returns @code{-1} in case of failure.
+ @end deftypefun
+@@ -1138,6 +1191,7 @@
+ @comment inttypes.h
+ @comment ISO
+ @deftypefunx intmax_t imaxabs (intmax_t @var{number})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the absolute value of @var{number}.
+ 
+ Most computers use a two's complement integer representation, in which
+@@ -1159,6 +1213,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} fabsl (long double @var{number})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns the absolute value of the floating-point number
+ @var{number}.
+ @end deftypefun
+@@ -1172,6 +1227,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {long double} cabsl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the absolute  value of the complex number @var{z}
+ (@pxref{Complex Numbers}).  The absolute value of a complex number is:
+ 
+@@ -1181,7 +1237,7 @@
+ 
+ This function should always be used instead of the direct formula
+ because it takes special care to avoid losing precision.  It may also
+-take advantage of hardware support for this operation. See @code{hypot}
++take advantage of hardware support for this operation.  See @code{hypot}
+ in @ref{Exponents and Logarithms}.
+ @end deftypefun
+ 
+@@ -1209,12 +1265,13 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} frexpl (long double @var{value}, int *@var{exponent})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are used to split the number @var{value}
+ into a normalized fraction and an exponent.
+ 
+ If the argument @var{value} is not zero, the return value is @var{value}
+-times a power of two, and is always in the range 1/2 (inclusive) to 1
+-(exclusive).  The corresponding exponent is stored in
++times a power of two, and its magnitude is always in the range 1/2
++(inclusive) to 1 (exclusive).  The corresponding exponent is stored in
+ @code{*@var{exponent}}; the return value multiplied by 2 raised to this
+ exponent equals the original number @var{value}.
+ 
+@@ -1234,6 +1291,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} ldexpl (long double @var{value}, int @var{exponent})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the result of multiplying the floating-point
+ number @var{value} by 2 raised to the power @var{exponent}.  (It can
+ be used to reassemble floating-point numbers that were taken apart
+@@ -1248,51 +1306,55 @@
+ 
+ @comment math.h
+ @comment BSD
+-@deftypefun double scalb (double @var{value}, int @var{exponent})
++@deftypefun double scalb (double @var{value}, double @var{exponent})
+ @comment math.h
+ @comment BSD
+-@deftypefunx float scalbf (float @var{value}, int @var{exponent})
++@deftypefunx float scalbf (float @var{value}, float @var{exponent})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long double} scalbl (long double @var{value}, int @var{exponent})
++@deftypefunx {long double} scalbl (long double @var{value}, long double @var{exponent})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{scalb} function is the BSD name for @code{ldexp}.
+ @end deftypefun
+ 
+ @comment math.h
+ @comment BSD
+-@deftypefun {long long int} scalbn (double @var{x}, int @var{n})
++@deftypefun double scalbn (double @var{x}, int @var{n})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long long int} scalbnf (float @var{x}, int @var{n})
++@deftypefunx float scalbnf (float @var{x}, int @var{n})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long long int} scalbnl (long double @var{x}, int @var{n})
++@deftypefunx {long double} scalbnl (long double @var{x}, int @var{n})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{scalbn} is identical to @code{scalb}, except that the exponent
+ @var{n} is an @code{int} instead of a floating-point number.
+ @end deftypefun
+ 
+ @comment math.h
+ @comment BSD
+-@deftypefun {long long int} scalbln (double @var{x}, long int @var{n})
++@deftypefun double scalbln (double @var{x}, long int @var{n})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long long int} scalblnf (float @var{x}, long int @var{n})
++@deftypefunx float scalblnf (float @var{x}, long int @var{n})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long long int} scalblnl (long double @var{x}, long int @var{n})
++@deftypefunx {long double} scalblnl (long double @var{x}, long int @var{n})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{scalbln} is identical to @code{scalb}, except that the exponent
+ @var{n} is a @code{long int} instead of a floating-point number.
+ @end deftypefun
+ 
+ @comment math.h
+ @comment BSD
+-@deftypefun {long long int} significand (double @var{x})
++@deftypefun double significand (double @var{x})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long long int} significandf (float @var{x})
++@deftypefunx float significandf (float @var{x})
+ @comment math.h
+ @comment BSD
+-@deftypefunx {long long int} significandl (long double @var{x})
++@deftypefunx {long double} significandl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{significand} returns the mantissa of @var{x} scaled to the range
+ @math{[1, 2)}.
+ It is equivalent to @w{@code{scalb (@var{x}, (double) -ilogb (@var{x}))}}.
+@@ -1307,7 +1369,7 @@
+ 
+ @pindex math.h
+ The functions listed here perform operations such as rounding and
+-truncation of floating-point values. Some of these functions convert
++truncation of floating-point values.  Some of these functions convert
+ floating point numbers to integer values.  They are all declared in
+ @file{math.h}.
+ 
+@@ -1327,6 +1389,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} ceill (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions round @var{x} upwards to the nearest integer,
+ returning that value as a @code{double}.  Thus, @code{ceil (1.5)}
+ is @code{2.0}.
+@@ -1341,6 +1404,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} floorl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions round @var{x} downwards to the nearest
+ integer, returning that value as a @code{double}.  Thus, @code{floor
+ (1.5)} is @code{1.0} and @code{floor (-1.5)} is @code{-2.0}.
+@@ -1355,6 +1419,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} truncl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{trunc} functions round @var{x} towards zero to the nearest
+ integer (returned in floating-point format).  Thus, @code{trunc (1.5)}
+ is @code{1.0} and @code{trunc (-1.5)} is @code{-1.0}.
+@@ -1369,6 +1434,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} rintl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions round @var{x} to an integer value according to the
+ current rounding mode.  @xref{Floating Point Parameters}, for
+ information about the various rounding modes.  The default
+@@ -1389,6 +1455,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} nearbyintl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the same value as the @code{rint} functions, but
+ do not raise the inexact exception if @var{x} is not an integer.
+ @end deftypefun
+@@ -1402,6 +1469,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} roundl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are similar to @code{rint}, but they round halfway
+ cases away from zero instead of to the nearest integer (or other
+ current rounding mode).
+@@ -1416,6 +1484,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long int} lrintl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are just like @code{rint}, but they return a
+ @code{long int} instead of a floating-point number.
+ @end deftypefun
+@@ -1429,6 +1498,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long long int} llrintl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are just like @code{rint}, but they return a
+ @code{long long int} instead of a floating-point number.
+ @end deftypefun
+@@ -1442,6 +1512,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long int} lroundl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are just like @code{round}, but they return a
+ @code{long int} instead of a floating-point number.
+ @end deftypefun
+@@ -1455,6 +1526,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long long int} llroundl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are just like @code{round}, but they return a
+ @code{long long int} instead of a floating-point number.
+ @end deftypefun
+@@ -1469,6 +1541,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} modfl (long double @var{value}, long double *@var{integer-part})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions break the argument @var{value} into an integer part and a
+ fractional part (between @code{-1} and @code{1}, exclusive).  Their sum
+ equals @var{value}.  Each of the parts has the same sign as @var{value},
+@@ -1495,6 +1568,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} fmodl (long double @var{numerator}, long double @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the remainder from the division of
+ @var{numerator} by @var{denominator}.  Specifically, the return value is
+ @code{@var{numerator} - @w{@var{n} * @var{denominator}}}, where @var{n}
+@@ -1517,6 +1591,7 @@
+ @comment math.h
+ @comment BSD
+ @deftypefunx {long double} dreml (long double @var{numerator}, long double @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are like @code{fmod} except that they round the
+ internal quotient @var{n} to the nearest integer instead of towards zero
+ to an integer.  For example, @code{drem (6.5, 2.3)} returns @code{-0.4},
+@@ -1540,6 +1615,7 @@
+ @comment math.h
+ @comment BSD
+ @deftypefunx {long double} remainderl (long double @var{numerator}, long double @var{denominator})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is another name for @code{drem}.
+ @end deftypefun
+ 
+@@ -1561,6 +1637,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} copysignl (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return @var{x} but with the sign of @var{y}.  They work
+ even if @var{x} or @var{y} are NaN or zero.  Both of these can carry a
+ sign (although not all implementations support it) and this is one of
+@@ -1576,6 +1653,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefun int signbit (@emph{float-type} @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{signbit} is a generic macro which can work on all floating-point
+ types.  It returns a nonzero value if the value of @var{x} has its sign
+ bit set.
+@@ -1594,6 +1672,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} nextafterl (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{nextafter} function returns the next representable neighbor of
+ @var{x} in the direction towards @var{y}.  The size of the step between
+ @var{x} and the result depends on the type of the result.  If
+@@ -1617,6 +1696,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} nexttowardl (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are identical to the corresponding versions of
+ @code{nextafter} except that their second argument is a @code{long
+ double}.
+@@ -1632,6 +1712,8 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} nanl (const char *@var{tagp})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c The unsafe-but-ruled-safe locale use comes from strtod.
+ The @code{nan} function returns a representation of NaN, provided that
+ NaN is supported by the target platform.
+ @code{nan ("@var{n-char-sequence}")} is equivalent to
+@@ -1666,6 +1748,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn Macro int isgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro determines whether the argument @var{x} is greater than
+ @var{y}.  It is equivalent to @code{(@var{x}) > (@var{y})}, but no
+ exception is raised if @var{x} or @var{y} are NaN.
+@@ -1674,6 +1757,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn Macro int isgreaterequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro determines whether the argument @var{x} is greater than or
+ equal to @var{y}.  It is equivalent to @code{(@var{x}) >= (@var{y})}, but no
+ exception is raised if @var{x} or @var{y} are NaN.
+@@ -1682,6 +1766,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn Macro int isless (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro determines whether the argument @var{x} is less than @var{y}.
+ It is equivalent to @code{(@var{x}) < (@var{y})}, but no exception is
+ raised if @var{x} or @var{y} are NaN.
+@@ -1690,6 +1775,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn Macro int islessequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro determines whether the argument @var{x} is less than or equal
+ to @var{y}.  It is equivalent to @code{(@var{x}) <= (@var{y})}, but no
+ exception is raised if @var{x} or @var{y} are NaN.
+@@ -1698,6 +1784,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn Macro int islessgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro determines whether the argument @var{x} is less or greater
+ than @var{y}.  It is equivalent to @code{(@var{x}) < (@var{y}) ||
+ (@var{x}) > (@var{y})} (although it only evaluates @var{x} and @var{y}
+@@ -1710,6 +1797,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefn Macro int isunordered (@emph{real-floating} @var{x}, @emph{real-floating} @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro determines whether its arguments are unordered.  In other
+ words, it is true if @var{x} or @var{y} are NaN, and false otherwise.
+ @end deftypefn
+@@ -1743,6 +1831,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} fminl (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fmin} function returns the lesser of the two values @var{x}
+ and @var{y}.  It is similar to the expression
+ @smallexample
+@@ -1763,6 +1852,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} fmaxl (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fmax} function returns the greater of the two values @var{x}
+ and @var{y}.
+ 
+@@ -1779,6 +1869,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} fdiml (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fdim} function returns the positive difference between
+ @var{x} and @var{y}.  The positive difference is @math{@var{x} -
+ @var{y}} if @var{x} is greater than @var{y}, and @math{0} otherwise.
+@@ -1796,6 +1887,7 @@
+ @comment ISO
+ @deftypefunx {long double} fmal (long double @var{x}, long double @var{y}, long double @var{z})
+ @cindex butterfly
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fma} function performs floating-point multiply-add.  This is
+ the operation @math{(@var{x} @mul{} @var{y}) + @var{z}}, but the
+ intermediate result is not rounded to the destination type.  This can
+@@ -1925,6 +2017,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {long double} creall (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the real part of the complex number @var{z}.
+ @end deftypefun
+ 
+@@ -1937,6 +2030,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {long double} cimagl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the imaginary part of the complex number @var{z}.
+ @end deftypefun
+ 
+@@ -1949,6 +2043,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} conjl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the conjugate value of the complex number
+ @var{z}.  The conjugate of a complex number has the same real part and a
+ negated imaginary part.  In other words, @samp{conj(a + bi) = a + -bi}.
+@@ -1963,6 +2058,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {long double} cargl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the argument of the complex number @var{z}.
+ The argument of a complex number is the angle in the complex plane
+ between the positive real axis and a line passing through zero and the
+@@ -1981,8 +2077,9 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} cprojl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the projection of the complex value @var{z} onto
+-the Riemann sphere.  Values with a infinite imaginary part are projected
++the Riemann sphere.  Values with an infinite imaginary part are projected
+ to positive infinity on the real axis, even if the real part is NaN.  If
+ the real part is infinite, the result is equivalent to
+ 
+@@ -2026,6 +2123,15 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {long int} strtol (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c strtol uses the thread-local pointer to the locale in effect, and
++@c strtol_l loads the LC_NUMERIC locale data from it early on and once,
++@c but if the locale is the global locale, and another thread calls
++@c setlocale in a way that modifies the pointer to the LC_CTYPE locale
++@c category, the behavior of e.g. IS*, TOUPPER will vary throughout the
++@c execution of the function, because they re-read the locale data from
++@c the given locale pointer.  We solved this by documenting setlocale as
++@c MT-Unsafe.
+ The @code{strtol} (``string-to-long'') function converts the initial
+ part of @var{string} to a signed integer, which is returned as a value
+ of type @code{long int}.
+@@ -2089,6 +2195,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {long int} wcstol (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstol} function is equivalent to the @code{strtol} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2098,6 +2205,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {unsigned long int} strtoul (const char *retrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{strtoul} (``string-to-unsigned-long'') function is like
+ @code{strtol} except it converts to an @code{unsigned long int} value.
+ The syntax is the same as described above for @code{strtol}.  The value
+@@ -2116,6 +2224,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {unsigned long int} wcstoul (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstoul} function is equivalent to the @code{strtoul} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2125,6 +2234,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {long long int} strtoll (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{strtoll} function is like @code{strtol} except that it returns
+ a @code{long long int} value, and accepts numbers with a correspondingly
+ larger range.
+@@ -2141,6 +2251,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {long long int} wcstoll (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstoll} function is equivalent to the @code{strtoll} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2150,12 +2261,14 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun {long long int} strtoq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ @code{strtoq} (``string-to-quad-word'') is the BSD name for @code{strtoll}.
+ @end deftypefun
+ 
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {long long int} wcstoq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstoq} function is equivalent to the @code{strtoq} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2165,6 +2278,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {unsigned long long int} strtoull (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{strtoull} function is related to @code{strtoll} the same way
+ @code{strtoul} is related to @code{strtol}.
+ 
+@@ -2174,6 +2288,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {unsigned long long int} wcstoull (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstoull} function is equivalent to the @code{strtoull} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2183,12 +2298,14 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun {unsigned long long int} strtouq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ @code{strtouq} is the BSD name for @code{strtoull}.
+ @end deftypefun
+ 
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {unsigned long long int} wcstouq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstouq} function is equivalent to the @code{strtouq} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2198,6 +2315,7 @@
+ @comment inttypes.h
+ @comment ISO
+ @deftypefun intmax_t strtoimax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{strtoimax} function is like @code{strtol} except that it returns
+ a @code{intmax_t} value, and accepts numbers of a corresponding range.
+ 
+@@ -2214,6 +2332,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun intmax_t wcstoimax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstoimax} function is equivalent to the @code{strtoimax} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2223,6 +2342,7 @@
+ @comment inttypes.h
+ @comment ISO
+ @deftypefun uintmax_t strtoumax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{strtoumax} function is related to @code{strtoimax}
+ the same way that @code{strtoul} is related to @code{strtol}.
+ 
+@@ -2233,6 +2353,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun uintmax_t wcstoumax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstoumax} function is equivalent to the @code{strtoumax} function
+ in nearly all aspects but handles wide character strings.
+ 
+@@ -2242,6 +2363,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {long int} atol (const char *@var{string})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function is similar to the @code{strtol} function with a @var{base}
+ argument of @code{10}, except that it need not detect overflow errors.
+ The @code{atol} function is provided mostly for compatibility with
+@@ -2251,6 +2373,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun int atoi (const char *@var{string})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function is like @code{atol}, except that it returns an @code{int}.
+ The @code{atoi} function is also considered obsolete; use @code{strtol}
+ instead.
+@@ -2259,6 +2382,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {long long int} atoll (const char *@var{string})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function is similar to @code{atol}, except it returns a @code{long
+ long int}.
+ 
+@@ -2323,6 +2447,35 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun double strtod (const char *restrict @var{string}, char **restrict @var{tailptr})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Besides the unsafe-but-ruled-safe locale uses, this uses a lot of
++@c mpn, but it's all safe.
++@c
++@c round_and_return
++@c   get_rounding_mode ok
++@c   mpn_add_1 ok
++@c   mpn_rshift ok
++@c   MPN_ZERO ok
++@c   MPN2FLOAT -> mpn_construct_(float|double|long_double) ok
++@c str_to_mpn
++@c   mpn_mul_1 -> umul_ppmm ok
++@c   mpn_add_1 ok
++@c mpn_lshift_1 -> mpn_lshift ok
++@c STRTOF_INTERNAL
++@c   MPN_VAR ok
++@c   SET_MANTISSA ok
++@c   STRNCASECMP ok, wide and narrow
++@c   round_and_return ok
++@c   mpn_mul ok
++@c     mpn_addmul_1 ok
++@c     ... mpn_sub
++@c   mpn_lshift ok
++@c   udiv_qrnnd ok
++@c   count_leading_zeros ok
++@c   add_ssaaaa ok
++@c   sub_ddmmss ok
++@c   umul_ppmm ok
++@c   mpn_submul_1 ok
+ The @code{strtod} (``string-to-double'') function converts the initial
+ part of @var{string} to a floating-point number, which is returned as a
+ value of type @code{double}.
+@@ -2408,6 +2561,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefunx {long double} strtold (const char *@var{string}, char **@var{tailptr})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ These functions are analogous to @code{strtod}, but return @code{float}
+ and @code{long double} values respectively.  They report errors in the
+ same way as @code{strtod}.  @code{strtof} can be substantially faster
+@@ -2427,6 +2581,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefunx {long double} wcstold (const wchar_t *@var{string}, wchar_t **@var{tailptr})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ The @code{wcstod}, @code{wcstof}, and @code{wcstol} functions are
+ equivalent in nearly all aspect to the @code{strtod}, @code{strtof}, and
+ @code{strtold} functions but it handles wide character string.
+@@ -2439,6 +2594,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun double atof (const char *@var{string})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function is similar to the @code{strtod} function, except that it
+ need not detect overflow and underflow errors.  The @code{atof} function
+ is provided mostly for compatibility with existing code; using
+@@ -2447,7 +2603,8 @@
+ 
+ @Theglibc{} also provides @samp{_l} versions of these functions,
+ which take an additional argument, the locale to use in conversion.
+-@xref{Parsing of Integers}.
++
++See also @ref{Parsing of Integers}.
+ 
+ @node System V Number Conversion
+ @section Old-fashioned System V number-to-string functions
+@@ -2465,9 +2622,10 @@
+ @comment stdlib.h
+ @comment SVID, Unix98
+ @deftypefun {char *} ecvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
++@safety{@prelim{}@mtunsafe{@mtasurace{:ecvt}}@asunsafe{}@acsafe{}}
+ The function @code{ecvt} converts the floating-point number @var{value}
+ to a string with at most @var{ndigit} decimal digits.  The
+-returned string contains no decimal point or sign. The first digit of
++returned string contains no decimal point or sign.  The first digit of
+ the string is non-zero (unless @var{value} is actually zero) and the
+ last digit is rounded to nearest.  @code{*@var{decpt}} is set to the
+ index in the string of the first digit after the decimal point.
+@@ -2490,6 +2648,7 @@
+ @comment stdlib.h
+ @comment SVID, Unix98
+ @deftypefun {char *} fcvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
++@safety{@prelim{}@mtunsafe{@mtasurace{:fcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The function @code{fcvt} is like @code{ecvt}, but @var{ndigit} specifies
+ the number of digits after the decimal point.  If @var{ndigit} is less
+ than zero, @var{value} is rounded to the @math{@var{ndigit}+1}'th place to the
+@@ -2508,6 +2667,9 @@
+ @comment stdlib.h
+ @comment SVID, Unix98
+ @deftypefun {char *} gcvt (double @var{value}, int @var{ndigit}, char *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c gcvt calls sprintf, that ultimately calls vfprintf, which malloc()s
++@c args_value if it's too large, but gcvt never exercises this path.
+ @code{gcvt} is functionally equivalent to @samp{sprintf(buf, "%*g",
+ ndigit, value}.  It is provided only for compatibility's sake.  It
+ returns @var{buf}.
+@@ -2522,6 +2684,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun {char *} qecvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
++@safety{@prelim{}@mtunsafe{@mtasurace{:qecvt}}@asunsafe{}@acsafe{}}
+ This function is equivalent to @code{ecvt} except that it takes a
+ @code{long double} for the first parameter and that @var{ndigit} is
+ restricted by the precision of a @code{long double}.
+@@ -2530,6 +2693,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun {char *} qfcvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg})
++@safety{@prelim{}@mtunsafe{@mtasurace{:qfcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function is equivalent to @code{fcvt} except that it
+ takes a @code{long double} for the first parameter and that @var{ndigit} is
+ restricted by the precision of a @code{long double}.
+@@ -2538,6 +2702,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun {char *} qgcvt (long double @var{value}, int @var{ndigit}, char *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is equivalent to @code{gcvt} except that it takes a
+ @code{long double} for the first parameter and that @var{ndigit} is
+ restricted by the precision of a @code{long double}.
+@@ -2558,6 +2723,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int ecvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{ecvt_r} function is the same as @code{ecvt}, except
+ that it places its result into the user-specified buffer pointed to by
+ @var{buf}, with length @var{len}.  The return value is @code{-1} in
+@@ -2569,6 +2735,7 @@
+ @comment stdlib.h
+ @comment SVID, Unix98
+ @deftypefun int fcvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fcvt_r} function is the same as @code{fcvt}, except that it
+ places its result into the user-specified buffer pointed to by
+ @var{buf}, with length @var{len}.  The return value is @code{-1} in
+@@ -2580,6 +2747,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int qecvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{qecvt_r} function is the same as @code{qecvt}, except
+ that it places its result into the user-specified buffer pointed to by
+ @var{buf}, with length @var{len}.  The return value is @code{-1} in
+@@ -2591,6 +2759,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int qfcvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{qfcvt_r} function is the same as @code{qfcvt}, except
+ that it places its result into the user-specified buffer pointed to by
+ @var{buf}, with length @var{len}.  The return value is @code{-1} in
+diff -urN glibc-2.17-c758a686/manual/charset.texi glibc-2.17-c758a686/manual/charset.texi
+--- glibc-2.17-c758a686/manual/charset.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/charset.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -504,6 +504,14 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int mbsinit (const mbstate_t *@var{ps})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c ps is dereferenced once, unguarded.  This would call for @mtsrace:ps,
++@c but since a single word-sized field is (atomically) accessed, any
++@c race here would be harmless.  Other functions that take an optional
++@c mbstate_t* argument named ps are marked with @mtasurace:<func>/!ps,
++@c to indicate that the function uses a static buffer if ps is NULL.
++@c These could also have been marked with @mtsrace:ps, but we'll omit
++@c that for brevity, for it's somewhat redundant with the @mtasurace.
+ The @code{mbsinit} function determines whether the state object pointed
+ to by @var{ps} is in the initial state.  If @var{ps} is a null pointer or
+ the object is in the initial state the return value is nonzero.  Otherwise
+@@ -559,6 +567,14 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t btowc (int @var{c})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c Calls btowc_fct or __fct; reads from locale, and from the
++@c get_gconv_fcts result multiple times.  get_gconv_fcts calls
++@c __wcsmbs_load_conv to initialize the ctype if it's null.
++@c wcsmbs_load_conv takes a non-recursive wrlock before allocating
++@c memory for the fcts structure, initializing it, and then storing it
++@c in the locale object.  The initialization involves dlopening and a
++@c lot more.
+ The @code{btowc} function (``byte to wide character'') converts a valid
+ single byte character @var{c} in the initial shift state into the wide
+ character equivalent using the conversion rules from the currently
+@@ -615,6 +631,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int wctob (wint_t @var{c})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{wctob} function (``wide character to byte'') takes as the
+ parameter a valid wide character.  If the multibyte representation for
+ this character in the initial state is exactly one byte long, the return
+@@ -634,6 +651,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t mbrtowc (wchar_t *restrict @var{pwc}, const char *restrict @var{s}, size_t @var{n}, mbstate_t *restrict @var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:mbrtowc/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ @cindex stateful
+ The @code{mbrtowc} function (``multibyte restartable to wide
+ character'') converts the next multibyte character in the string pointed
+@@ -728,6 +746,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t mbrlen (const char *restrict @var{s}, size_t @var{n}, mbstate_t *@var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:mbrlen/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{mbrlen} function (``multibyte restartable length'') computes
+ the number of at most @var{n} bytes starting at @var{s}, which form the
+ next valid and complete multibyte character.
+@@ -786,7 +805,7 @@
+ This function simply calls @code{mbrlen} for each multibyte character
+ in the string and counts the number of function calls.  Please note that
+ we here use @code{MB_LEN_MAX} as the size argument in the @code{mbrlen}
+-call.  This is acceptable since a) this value is larger then the length of
++call.  This is acceptable since a) this value is larger than the length of
+ the longest multibyte character sequence and b) we know that the string
+ @var{s} ends with a NUL byte, which cannot be part of any other multibyte
+ character sequence but the one representing the NUL wide character.
+@@ -811,6 +830,50 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t wcrtomb (char *restrict @var{s}, wchar_t @var{wc}, mbstate_t *restrict @var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:wcrtomb/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c wcrtomb uses a static, non-thread-local unguarded state variable when
++@c PS is NULL.  When a state is passed in, and it's not used
++@c concurrently in other threads, this function behaves safely as long
++@c as gconv modules don't bring MT safety issues of their own.
++@c Attempting to load gconv modules or to build conversion chains in
++@c signal handlers may encounter gconv databases or caches in a
++@c partially-updated state, and asynchronous cancellation may leave them
++@c in such states, besides leaking the lock that guards them.
++@c get_gconv_fcts ok
++@c    wcsmbs_load_conv ok
++@c      norm_add_slashes ok
++@c      wcsmbs_getfct ok
++@c        gconv_find_transform ok
++@c          gconv_read_conf (libc_once)
++@c          gconv_lookup_cache ok
++@c            find_module_idx ok
++@c            find_module ok
++@c              gconv_find_shlib (ok)
++@c              ->init_fct (assumed ok)
++@c            gconv_get_builtin_trans ok
++@c            gconv_release_step ok
++@c          do_lookup_alias ok
++@c          find_derivation ok
++@c            derivation_lookup ok
++@c            increment_counter ok
++@c              gconv_find_shlib ok
++@c              step->init_fct (assumed ok)
++@c            gen_steps ok
++@c              gconv_find_shlib ok
++@c                dlopen (presumed ok)
++@c                dlsym (presumed ok)
++@c              step->init_fct (assumed ok)
++@c              step->end_fct (assumed ok)
++@c              gconv_get_builtin_trans ok
++@c              gconv_release_step ok
++@c            add_derivation ok
++@c      gconv_close_transform ok
++@c        gconv_release_step ok
++@c          step->end_fct (assumed ok)
++@c          gconv_release_shlib ok
++@c            dlclose (presumed ok)
++@c        gconv_release_cache ok
++@c  ->tomb->__fct (assumed ok)
+ The @code{wcrtomb} function (``wide character restartable to
+ multibyte'') converts a single wide character into a multibyte string
+ corresponding to that wide character.
+@@ -955,8 +1018,9 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t mbsrtowcs (wchar_t *restrict @var{dst}, const char **restrict @var{src}, size_t @var{len}, mbstate_t *restrict @var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:mbsrtowcs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{mbsrtowcs} function (``multibyte string restartable to wide
+-character string'') converts an NUL-terminated multibyte character
++character string'') converts a NUL-terminated multibyte character
+ string at @code{*@var{src}} into an equivalent wide character string,
+ including the NUL wide character at the end.  The conversion is started
+ using the state information from the object pointed to by @var{ps} or
+@@ -1039,6 +1103,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t wcsrtombs (char *restrict @var{dst}, const wchar_t **restrict @var{src}, size_t @var{len}, mbstate_t *restrict @var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:wcsrtombs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{wcsrtombs} function (``wide character string restartable to
+ multibyte string'') converts the NUL-terminated wide character string at
+ @code{*@var{src}} into an equivalent multibyte character string and
+@@ -1084,6 +1149,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun size_t mbsnrtowcs (wchar_t *restrict @var{dst}, const char **restrict @var{src}, size_t @var{nmc}, size_t @var{len}, mbstate_t *restrict @var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:mbsnrtowcs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{mbsnrtowcs} function is very similar to the @code{mbsrtowcs}
+ function.  All the parameters are the same except for @var{nmc}, which is
+ new.  The return value is the same as for @code{mbsrtowcs}.
+@@ -1136,6 +1202,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun size_t wcsnrtombs (char *restrict @var{dst}, const wchar_t **restrict @var{src}, size_t @var{nwc}, size_t @var{len}, mbstate_t *restrict @var{ps})
++@safety{@prelim{}@mtunsafe{@mtasurace{:wcsnrtombs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{wcsnrtombs} function implements the conversion from wide
+ character strings to multibyte character strings.  It is similar to
+ @code{wcsrtombs} but, just like @code{mbsnrtowcs}, it takes an extra
+@@ -1280,6 +1347,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun int mbtowc (wchar_t *restrict @var{result}, const char *restrict @var{string}, size_t @var{size})
++@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{mbtowc} (``multibyte to wide character'') function when called
+ with non-null @var{string} converts the first multibyte character
+ beginning at @var{string} to its corresponding wide character code.  It
+@@ -1314,6 +1382,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun int wctomb (char *@var{string}, wchar_t @var{wchar})
++@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{wctomb} (``wide character to multibyte'') function converts
+ the wide character code @var{wchar} to its corresponding multibyte
+ character sequence, and stores the result in bytes starting at
+@@ -1353,6 +1422,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun int mblen (const char *@var{string}, size_t @var{size})
++@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{mblen} function with a non-null @var{string} argument returns
+ the number of bytes that make up the multibyte character beginning at
+ @var{string}, never examining more than @var{size} bytes.  (The idea is
+@@ -1391,6 +1461,9 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun size_t mbstowcs (wchar_t *@var{wstring}, const char *@var{string}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c Odd...  Although this was supposed to be non-reentrant, the internal
++@c state is not a static buffer, but an automatic variable.
+ The @code{mbstowcs} (``multibyte string to wide character string'')
+ function converts the null-terminated string of multibyte characters
+ @var{string} to an array of wide character codes, storing not more than
+@@ -1431,6 +1504,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun size_t wcstombs (char *@var{string}, const wchar_t *@var{wstring}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
+ The @code{wcstombs} (``wide character string to multibyte string'')
+ function converts the null-terminated wide character array @var{wstring}
+ into a string containing multibyte characters, storing not more than
+@@ -1618,6 +1692,16 @@
+ @comment iconv.h
+ @comment XPG2
+ @deftypefun iconv_t iconv_open (const char *@var{tocode}, const char *@var{fromcode})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c Calls malloc if tocode and/or fromcode are too big for alloca.  Calls
++@c strip and upstr on both, then gconv_open.  strip and upstr call
++@c isalnum_l and toupper_l with the C locale.  gconv_open may MT-safely
++@c tokenize toset, replace unspecified codesets with the current locale
++@c (possibly two different accesses), and finally it calls
++@c gconv_find_transform and initializes the gconv_t result with all the
++@c steps in the conversion sequence, running each one's initializer,
++@c destructing and releasing them all if anything fails.
++
+ The @code{iconv_open} function has to be used before starting a
+ conversion.  The two parameters this function takes determine the
+ source and destination character set for the conversion, and if the
+@@ -1625,7 +1709,7 @@
+ function returns a handle.
+ 
+ If the wanted conversion is not available, the @code{iconv_open} function
+-returns @code{(iconv_t) -1}. In this case the global variable
++returns @code{(iconv_t) -1}.  In this case the global variable
+ @code{errno} can have the following values:
+ 
+ @table @code
+@@ -1682,6 +1766,12 @@
+ @comment iconv.h
+ @comment XPG2
+ @deftypefun int iconv_close (iconv_t @var{cd})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Calls gconv_close to destruct and release each of the conversion
++@c steps, release the gconv_t object, then call gconv_close_transform.
++@c Access to the gconv_t object is not guarded, but calling iconv_close
++@c concurrently with any other use is undefined.
++
+ The @code{iconv_close} function frees all resources associated with the
+ handle @var{cd}, which must have been returned by a successful call to
+ the @code{iconv_open} function.
+@@ -1708,6 +1798,10 @@
+ @comment iconv.h
+ @comment XPG2
+ @deftypefun size_t iconv (iconv_t @var{cd}, char **@var{inbuf}, size_t *@var{inbytesleft}, char **@var{outbuf}, size_t *@var{outbytesleft})
++@safety{@prelim{}@mtsafe{@mtsrace{:cd}}@assafe{}@acunsafe{@acucorrupt{}}}
++@c Without guarding access to the iconv_t object pointed to by cd, call
++@c the conversion function to convert inbuf or flush the internal
++@c conversion state.
+ @cindex stateful
+ The @code{iconv} function converts the text in the input buffer
+ according to the rules associated with the descriptor @var{cd} and
+@@ -1744,7 +1838,7 @@
+ Therefore an @code{iconv} call to reset the state should always be
+ performed if some protocol requires this for the output text.
+ 
+-The conversion stops for one of three reasons. The first is that all
++The conversion stops for one of three reasons.  The first is that all
+ characters from the input buffer are converted.  This actually can mean
+ two things: either all bytes from the input buffer are consumed or
+ there are some bytes at the end of the buffer that possibly can form a
+@@ -2039,7 +2133,7 @@
+ 
+ Unfortunately, the answer is: there is no general solution.  On some
+ systems guessing might help.  On those systems most character sets can
+-convert to and from UTF-8 encoded @w{ISO 10646} or Unicode text. Beside
++convert to and from UTF-8 encoded @w{ISO 10646} or Unicode text.  Beside
+ this only some very system-specific methods can help.  Since the
+ conversion functions come from loadable modules and these modules must
+ be stored somewhere in the filesystem, one @emph{could} try to find them
+@@ -2239,7 +2333,7 @@
+ 
+ So far this section has described how modules are located and considered
+ to be used.  What remains to be described is the interface of the modules
+-so that one can write new ones. This section describes the interface as
++so that one can write new ones.  This section describes the interface as
+ it is in use in January 1999.  The interface will change a bit in the
+ future but, with luck, only in an upwardly compatible way.
+ 
+@@ -2485,7 +2579,7 @@
+ same size, the minimum and maximum values are the same.
+ 
+ @item __stateful
+-This element must be initialized to an nonzero value if the source
++This element must be initialized to a nonzero value if the source
+ character set is stateful.  Otherwise it must be zero.
+ @end table
+ 
+@@ -2824,7 +2918,7 @@
+           /* @r{Run the conversion loop.  @code{status} is set}
+              @r{appropriately afterwards.}  */
+ 
+-          /* @r{If this is the last step, leave the loop. There is}
++          /* @r{If this is the last step, leave the loop.  There is}
+              @r{nothing we can do.}  */
+           if (data->__is_last)
+             @{
+diff -urN glibc-2.17-c758a686/manual/check-safety.sh glibc-2.17-c758a686/manual/check-safety.sh
+--- glibc-2.17-c758a686/manual/check-safety.sh	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/manual/check-safety.sh	2014-09-12 16:10:06.044792719 -0400
+@@ -0,0 +1,119 @@
++#! /bin/sh
++
++# Copyright 2014 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/>.
++
++
++# Check that the @safety notes are self-consistent, i.e., that they're
++# in proper order (mt then as then ac), that remarks appear within
++# corresponding sections (mt within mt, etc), that unsafety always has
++# an explicit reason and when there's a reason for unsafety it's not
++# safe, and that there aren't duplicates remarks.
++
++
++success=:
++
++# If no arguments are given, take all *.texi files in the current directory.
++test $# != 0 || set *.texi
++
++# Check that all safety remarks have entries for all of MT, AS and AC,
++# in this order, with an optional prelim note before them.
++grep -n '^@safety' "$@" |
++grep -v ':@safety{\(@prelim{}\)\?@mt\(un\)\?safe{.*}'\
++'@as\(un\)\?safe{.*}@ac\(un\)\?safe{.*}}' &&
++success=false
++
++# Check that @mt-started notes appear within @mtsafe or @mtunsafe,
++# that @as-started notes appear within @assafe or @asunsafe, and that
++# @ac-started notes appear within @acsafe or @acunsafe.  Also check
++# that @mt, @as and @ac are followed by an s (for safe) or u (for
++# unsafe), but let @mt have as, ac or asc before [su], and let @as
++# have a c (for cancel) before [su].  Also make sure blanks separate
++# each of the annotations.
++grep -n '^@safety' "$@" |
++grep -v ':@safety{\(@prelim{}\)\?'\
++'@mt\(un\)\?safe{\(@mt\(asc\?\|ac\)\?[su][^ ]*}\)\?'\
++'\( @mt\(asc\?\|ac\)\?[su][^ ]*}\)*}'\
++'@as\(un\)\?safe{\(@asc\?[su][^ ]*}\)\?'\
++'\( @asc\?[su][^ ]*}\)*}'\
++'@ac\(un\)\?safe{\(@ac[su][^ ]*}\)\?'\
++'\( @ac[su][^ ]*}\)*}}' &&
++success=false
++
++# Make sure safety lines marked as @mtsafe do not contain any
++# MT-Unsafe remark; that would be @mtu, but there could be as, ac or
++# asc between mt and u.
++grep -n '^@safety.*@mtsafe' "$@" |
++grep '@mt\(asc\?\|ac\)?u' "$@" &&
++success=false
++
++# Make sure @mtunsafe lines contain at least one @mtu remark (with
++# optional as, ac or asc between mt and u).
++grep -n '^@safety.*@mtunsafe' "$@" |
++grep -v '@mtunsafe{.*@mt\(asc\?\|ac\)\?u' &&
++success=false
++
++# Make sure safety lines marked as @assafe do not contain any AS-Unsafe
++# remark, which could be @asu or @mtasu note (with an optional c
++# between as and u in both cases).
++grep -n '^@safety.*@assafe' "$@" |
++grep '@\(mt\)\?asc\?u' &&
++success=false
++
++# Make sure @asunsafe lines contain at least one @asu remark (which
++# could be @ascu, or @mtasu or even @mtascu).
++grep -n '^@safety.*@asunsafe' "$@" |
++grep -v '@mtasc\?u.*@asunsafe\|@asunsafe{.*@asc\?u' &&
++success=false
++
++# Make sure safety lines marked as @acsafe do not contain any
++# AC-Unsafe remark, which could be @acu, @ascu or even @mtacu or
++# @mtascu.
++grep -n '^@safety.*@acsafe' "$@" |
++grep '@\(mt\)\?as\?cu' &&
++success=false
++
++# Make sure @acunsafe lines contain at least one @acu remark (possibly
++# implied by @ascu, @mtacu or @mtascu).
++grep -n '^@safety.*@acunsafe' "$@" |
++grep -v '@\(mtas\?\|as\)cu.*@acunsafe\|@acunsafe{.*@acu' &&
++success=false
++
++# Make sure there aren't duplicate remarks in the same safety note.
++grep -n '^@safety' "$@" |
++grep '[^:]\(@\(mt\|a[sc]\)[^ {]*{[^ ]*}\).*[^:]\1' &&
++success=false
++
++# Check that comments containing safety remarks do not contain {}s,
++# that all @mt remarks appear before @as remarks, that in turn appear
++# before @ac remarks, all properly blank-separated, and that an
++# optional comment about exclusions is between []s at the end of the
++# line.
++grep -n '^@c \+[^@ ]\+\( dup\)\?'\
++'\( @\(mt\|a[sc]\)[^ ]*\)*\( \[.*\]\)\?$' "$@" |
++grep -v ':@c *[^@{}]*\( @mt[^ {}]*\)*'\
++'\( @as[^ {}]*\)*\( @ac[^ {}]*\)*\( \[.*\]\)\?$' &&
++success=false
++
++# Check that comments containing safety remarks do not contain
++# duplicate remarks.
++grep -n '^@c \+[^@ ]\+\( dup\)\?'\
++'\( @\(mt\|a[sc]\)[^ ]*\)*\( \[.*\]\)\?$' "$@" |
++grep '[^:]\(@\(mt\|a[sc]\)[^ ]*\) \(.*[^:]\)\?\1\($\| \)' &&
++success=false
++
++$success
+diff -urN glibc-2.17-c758a686/manual/conf.texi glibc-2.17-c758a686/manual/conf.texi
+--- glibc-2.17-c758a686/manual/conf.texi	2014-09-12 16:08:17.965070383 -0400
++++ glibc-2.17-c758a686/manual/conf.texi	2014-09-12 16:10:06.047792712 -0400
+@@ -114,7 +114,7 @@
+ 
+ @comment limits.h
+ @comment POSIX.1
+-@deftypevr Macro int SSIZE_MAX
++@deftypevr Macro ssize_t SSIZE_MAX
+ The largest value that can fit in an object of type @code{ssize_t}.
+ Effectively, this is the limit on the number of bytes that can be read
+ or written in a single operation.
+@@ -288,6 +288,17 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {long int} sysconf (int @var{parameter})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c Some parts of the implementation open /proc and /sys files and dirs
++@c to collect system details, using fd and stream I/O depending on the
++@c case.  _SC_TZNAME_MAX calls __tzname_max, that (while holding a lock)
++@c calls tzset_internal, that calls getenv if it's called the first
++@c time; there are free and strdup calls in there too.  The returned max
++@c value may change over time for TZNAME_MAX, depending on selected
++@c timezones; NPROCS, NPROCS_CONF, PHYS_PAGES, AVPHYS_PAGES,
++@c NGROUPS_MAX, SIGQUEUE_MAX, depending on variable values read from
++@c /proc at each call, and from rlimit-obtained values CHILD_MAX,
++@c OPEN_MAX, ARG_MAX, SIGQUEUE_MAX.
+ This function is used to inquire about runtime system parameters.  The
+ @var{parameter} argument should be one of the @samp{_SC_} symbols listed
+ below.
+@@ -1121,7 +1132,7 @@
+ have on @emph{any} POSIX system.  @xref{File Minimums}.
+ 
+ @cindex limits, link count of files
+-@comment limits.h
++@comment limits.h (optional)
+ @comment POSIX.1
+ @deftypevr Macro int LINK_MAX
+ The uniform system limit (if any) for the number of names for a given
+@@ -1348,6 +1359,11 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {long int} pathconf (const char *@var{filename}, int @var{parameter})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c When __statfs_link_max finds an ext* filesystem, it may read
++@c /proc/mounts or similar as a mntent stream.
++@c __statfs_chown_restricted may read from
++@c /proc/sys/fs/xfs/restrict_chown as a file descriptor.
+ This function is used to inquire about the limits that apply to
+ the file named @var{filename}.
+ 
+@@ -1375,6 +1391,8 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {long int} fpathconf (int @var{filedes}, int @var{parameter})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c Same caveats as pathconf.
+ This is just like @code{pathconf} except that an open file descriptor
+ is used to specify the file for which information is requested, instead
+ of a file name.
+@@ -1624,6 +1642,7 @@
+ @comment unistd.h
+ @comment POSIX.2
+ @deftypefun size_t confstr (int @var{parameter}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function reads the value of a string-valued system parameter,
+ storing the string into @var{len} bytes of memory space starting at
+ @var{buf}.  The @var{parameter} argument should be one of the
+diff -urN glibc-2.17-c758a686/manual/crypt.texi glibc-2.17-c758a686/manual/crypt.texi
+--- glibc-2.17-c758a686/manual/crypt.texi	2014-09-12 16:08:18.169069859 -0400
++++ glibc-2.17-c758a686/manual/crypt.texi	2014-09-12 16:10:06.042792724 -0400
+@@ -30,15 +30,15 @@
+ and the other based on the Data Encryption Standard (DES) that is
+ compatible with Unix systems.
+ 
+-@cindex AUTH_DES
++@vindex AUTH_DES
+ @cindex FIPS 140-2
+ It also provides support for Secure RPC, and some library functions that
+-can be used to perform normal DES encryption. The use of DES when
+-using @code{AUTH_DES} in Secure RPC for authentication as provided by
+-@theglibc{} is not FIPS 140-2 compliant nor is any other use of DES
+-within @theglibc{}. It is recommended that Secure RPC should not be used
+-for systems that need to be FIPS 140-2 compliant since all forms of
+-supported authentication use normal DES.
++can be used to perform normal DES encryption.  The @code{AUTH_DES}
++authentication flavor in Secure RPC, as provided by @theglibc{},
++uses DES and does not comply with FIPS 140-2 nor does any other use of DES
++within @theglibc{}.  It is recommended that Secure RPC should not be used
++for systems that need to comply with FIPS 140-2 since all flavors of
++encrypted authentication use normal DES.
+ 
+ @menu
+ * Legal Problems::              This software can get you locked up, or worse.
+@@ -99,6 +99,13 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun {char *} getpass (const char *@var{prompt})
++@safety{@prelim{}@mtunsafe{@mtasuterm{}}@asunsafe{@ascuheap{} @asulock{} @asucorrupt{}}@acunsafe{@acuterm{} @aculock{} @acucorrupt{}}}
++@c This function will attempt to create a stream for terminal I/O, but
++@c will fallback to stdio/stderr.  It attempts to change the terminal
++@c mode in a thread-unsafe way, write out the prompt, read the password,
++@c then restore the terminal mode.  It has a cleanup to close the stream
++@c in case of (synchronous) cancellation, but not to restore the
++@c terminal mode.
+ 
+ @code{getpass} outputs @var{prompt}, then reads a string in from the
+ terminal without echoing it.  It tries to connect to the real terminal,
+@@ -134,6 +141,13 @@
+ @comment crypt.h
+ @comment BSD, SVID
+ @deftypefun {char *} crypt (const char *@var{key}, const char *@var{salt})
++@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
++@c Besides the obvious problem of returning a pointer into static
++@c storage, the DES initializer takes an internal lock with the usual
++@c set of problems for AS- and AC-Safety.  The FIPS mode checker and the
++@c NSS implementations of may leak file descriptors if canceled.  The
++@c The MD5, SHA256 and SHA512 implementations will malloc on long keys,
++@c and NSS relies on dlopening, which brings about another can of worms.
+ 
+ The @code{crypt} function takes a password, @var{key}, as a string, and
+ a @var{salt} character array which is described below, and returns a
+@@ -195,6 +209,9 @@
+ @comment crypt.h
+ @comment GNU
+ @deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}}
++@c Compared with crypt, this function fixes the @mtasurace:crypt
++@c problem, but nothing else.
+ 
+ The @code{crypt_r} function does the same thing as @code{crypt}, but
+ takes an extra parameter which includes space for its result (among
+@@ -241,6 +258,11 @@
+ @comment crypt.h
+ @comment BSD, SVID
+ @deftypefun void setkey (const char *@var{key})
++@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
++@c The static buffer stores the key, making it fundamentally
++@c thread-unsafe.  The locking issues are only in the initialization
++@c path; cancelling the initialization will leave the lock held, it
++@c would otherwise repeat the initialization on the next call.
+ 
+ The @code{setkey} function sets an internal data structure to be an
+ expanded form of @var{key}.  @var{key} is specified as an array of 64
+@@ -252,6 +274,8 @@
+ @comment crypt.h
+ @comment BSD, SVID
+ @deftypefun void encrypt (char *@var{block}, int @var{edflag})
++@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
++@c Same issues as setkey.
+ 
+ The @code{encrypt} function encrypts @var{block} if
+ @var{edflag} is 0, otherwise it decrypts @var{block}, using a key
+@@ -265,9 +289,11 @@
+ @comment crypt.h
+ @comment GNU
+ @deftypefun void setkey_r (const char *@var{key}, {struct crypt_data *} @var{data})
++@c @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
+ @comment crypt.h
+ @comment GNU
+ @deftypefunx void encrypt_r (char *@var{block}, int @var{edflag}, {struct crypt_data *} @var{data})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}}
+ 
+ These are reentrant versions of @code{setkey} and @code{encrypt}.  The
+ only difference is the extra parameter, which stores the expanded
+@@ -282,6 +308,7 @@
+ @comment rpc/des_crypt.h
+ @comment SUNRPC
+ @deftypefun int ecb_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ The function @code{ecb_crypt} encrypts or decrypts one or more blocks
+ using DES.  Each block is encrypted independently.
+@@ -356,6 +383,7 @@
+ @comment rpc/des_crypt.h
+ @comment SUNRPC
+ @deftypefun int DES_FAILED (int @var{err})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns 1 if @var{err} is a `success' result code from
+ @code{ecb_crypt} or @code{cbc_crypt}, and 0 otherwise.
+ @end deftypefun
+@@ -363,6 +391,7 @@
+ @comment rpc/des_crypt.h
+ @comment SUNRPC
+ @deftypefun int cbc_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode}, char *@var{ivec})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ The function @code{cbc_crypt} encrypts or decrypts one or more blocks
+ using DES in Cipher Block Chaining mode.
+@@ -389,6 +418,7 @@
+ @comment rpc/des_crypt.h
+ @comment SUNRPC
+ @deftypefun void des_setparity (char *@var{key})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ The function @code{des_setparity} changes the 64-bit @var{key}, stored
+ packed in 8-bit bytes, to have odd parity by altering the low bits of
+diff -urN glibc-2.17-c758a686/manual/ctype.texi glibc-2.17-c758a686/manual/ctype.texi
+--- glibc-2.17-c758a686/manual/ctype.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/ctype.texi	2014-09-12 16:10:06.042792724 -0400
+@@ -66,6 +66,16 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int islower (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c The is* macros call __ctype_b_loc to get the ctype array from the
++@c current locale, and then index it by c.  __ctype_b_loc reads from
++@c thread-local memory the (indirect) pointer to the ctype array, which
++@c may involve one word access to the global locale object, if that's
++@c the active locale for the thread, and the array, being part of the
++@c locale data, is undeletable, so there's no thread-safety issue.  We
++@c might want to mark these with @mtslocale to flag to callers that
++@c changing locales might affect them, even if not these simpler
++@c functions.
+ Returns true if @var{c} is a lower-case letter.  The letter need not be
+ from the Latin alphabet, any alphabet representable is valid.
+ @end deftypefun
+@@ -74,6 +84,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isupper (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is an upper-case letter.  The letter need not be
+ from the Latin alphabet, any alphabet representable is valid.
+ @end deftypefun
+@@ -82,6 +93,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isalpha (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is an alphabetic character (a letter).  If
+ @code{islower} or @code{isupper} is true of a character, then
+ @code{isalpha} is also true.
+@@ -97,6 +109,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isdigit (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a decimal digit (@samp{0} through @samp{9}).
+ @end deftypefun
+ 
+@@ -104,6 +117,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isalnum (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is an alphanumeric character (a letter or
+ number); in other words, if either @code{isalpha} or @code{isdigit} is
+ true of a character, then @code{isalnum} is also true.
+@@ -113,6 +127,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isxdigit (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a hexadecimal digit.
+ Hexadecimal digits include the normal decimal digits @samp{0} through
+ @samp{9} and the letters @samp{A} through @samp{F} and
+@@ -123,6 +138,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int ispunct (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a punctuation character.
+ This means any printing character that is not alphanumeric or a space
+ character.
+@@ -132,6 +148,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isspace (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a @dfn{whitespace} character.  In the standard
+ @code{"C"} locale, @code{isspace} returns true for only the standard
+ whitespace characters:
+@@ -161,6 +178,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isblank (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a blank character; that is, a space or a tab.
+ This function was originally a GNU extension, but was added in @w{ISO C99}.
+ @end deftypefun
+@@ -169,6 +187,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isgraph (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a graphic character; that is, a character
+ that has a glyph associated with it.  The whitespace characters are not
+ considered graphic.
+@@ -178,6 +197,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int isprint (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a printing character.  Printing characters
+ include all the graphic characters, plus the space (@samp{ }) character.
+ @end deftypefun
+@@ -186,6 +206,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int iscntrl (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a control character (that is, a character that
+ is not a printing character).
+ @end deftypefun
+@@ -194,6 +215,7 @@
+ @comment ctype.h
+ @comment SVID, BSD
+ @deftypefun int isascii (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns true if @var{c} is a 7-bit @code{unsigned char} value that fits
+ into the US/UK ASCII character set.  This function is a BSD extension
+ and is also an SVID extension.
+@@ -227,6 +249,10 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int tolower (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c The to* macros/functions call different functions that use different
++@c arrays than those of__ctype_b_loc, but the access patterns and
++@c thus safety guarantees are the same.
+ If @var{c} is an upper-case letter, @code{tolower} returns the corresponding
+ lower-case letter.  If @var{c} is not an upper-case letter,
+ @var{c} is returned unchanged.
+@@ -235,6 +261,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int toupper (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If @var{c} is a lower-case letter, @code{toupper} returns the corresponding
+ upper-case letter.  Otherwise @var{c} is returned unchanged.
+ @end deftypefun
+@@ -242,6 +269,7 @@
+ @comment ctype.h
+ @comment SVID, BSD
+ @deftypefun int toascii (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function converts @var{c} to a 7-bit @code{unsigned char} value
+ that fits into the US/UK ASCII character set, by clearing the high-order
+ bits.  This function is a BSD extension and is also an SVID extension.
+@@ -250,6 +278,7 @@
+ @comment ctype.h
+ @comment SVID
+ @deftypefun int _tolower (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is identical to @code{tolower}, and is provided for compatibility
+ with the SVID.  @xref{SVID}.@refill
+ @end deftypefun
+@@ -257,6 +286,7 @@
+ @comment ctype.h
+ @comment SVID
+ @deftypefun int _toupper (int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is identical to @code{toupper}, and is provided for compatibility
+ with the SVID.
+ @end deftypefun
+@@ -303,6 +333,18 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun wctype_t wctype (const char *@var{property})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Although the source code of wctype contains multiple references to
++@c the locale, that could each reference different locale_data objects
++@c should the global locale object change while active, the compiler can
++@c and does combine them all into a single dereference that resolves
++@c once to the LCTYPE locale object used throughout the function, so it
++@c is safe in (optimized) practice, if not in theory, even when the
++@c locale changes.  Ideally we'd explicitly save the resolved
++@c locale_data object to make it visibly safe instead of safe only under
++@c compiler optimizations, but given the decision that setlocale is
++@c MT-Unsafe, all this would afford us would be the ability to not mark
++@c this function with @mtslocale.
+ The @code{wctype} returns a value representing a class of wide
+ characters which is identified by the string @var{property}.  Beside
+ some standard properties each locale can define its own ones.  In case
+@@ -331,6 +373,8 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswctype (wint_t @var{wc}, wctype_t @var{desc})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c The compressed lookup table returned by wctype is read-only.
+ This function returns a nonzero value if @var{wc} is in the character
+ class specified by @var{desc}.  @var{desc} must previously be returned
+ by a successful call to @code{wctype}.
+@@ -350,6 +394,16 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswalnum (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c The implicit wctype call in the isw* functions is actually an
++@c optimized version because the category has a known offset, but the
++@c wctype is equally safe when optimized, unsafe with changing locales
++@c if not optimized (thus @mtslocale).  Since it's not a macro, we
++@c always optimize, and the locale can't change in any MT-Safe way, it's
++@c fine.  The test whether wc is ASCII to use the non-wide is*
++@c macro/function doesn't bring any other safety issues: the test does
++@c not depend on the locale, and each path after the decision resolves
++@c the locale object only once.
+ This function returns a nonzero value if @var{wc} is an alphanumeric
+ character (a letter or number); in other words, if either @code{iswalpha}
+ or @code{iswdigit} is true of a character, then @code{iswalnum} is also
+@@ -370,6 +424,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswalpha (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is an alphabetic character (a letter).  If
+ @code{iswlower} or @code{iswupper} is true of a character, then
+ @code{iswalpha} is also true.
+@@ -394,6 +449,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswcntrl (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a control character (that is, a character that
+ is not a printing character).
+ 
+@@ -412,6 +468,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswdigit (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a digit (e.g., @samp{0} through @samp{9}).
+ Please note that this function does not only return a nonzero value for
+ @emph{decimal} digits, but for all kinds of digits.  A consequence is
+@@ -442,6 +499,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswgraph (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a graphic character; that is, a character
+ that has a glyph associated with it.  The whitespace characters are not
+ considered graphic.
+@@ -461,6 +519,7 @@
+ @comment ctype.h
+ @comment ISO
+ @deftypefun int iswlower (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a lower-case letter.  The letter need not be
+ from the Latin alphabet, any alphabet representable is valid.
+ 
+@@ -479,6 +538,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswprint (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a printing character.  Printing characters
+ include all the graphic characters, plus the space (@samp{ }) character.
+ 
+@@ -497,6 +557,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswpunct (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a punctuation character.
+ This means any printing character that is not alphanumeric or a space
+ character.
+@@ -516,6 +577,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswspace (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a @dfn{whitespace} character.  In the standard
+ @code{"C"} locale, @code{iswspace} returns true for only the standard
+ whitespace characters:
+@@ -555,6 +617,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswupper (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is an upper-case letter.  The letter need not be
+ from the Latin alphabet, any alphabet representable is valid.
+ 
+@@ -573,6 +636,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswxdigit (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a hexadecimal digit.
+ Hexadecimal digits include the normal decimal digits @samp{0} through
+ @samp{9} and the letters @samp{A} through @samp{F} and
+@@ -597,6 +661,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun int iswblank (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ Returns true if @var{wc} is a blank character; that is, a space or a tab.
+ This function was originally a GNU extension, but was added in @w{ISO C99}.
+ It is declared in @file{wchar.h}.
+@@ -691,6 +756,8 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun wctrans_t wctrans (const char *@var{property})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Similar implementation, same caveats as wctype.
+ The @code{wctrans} function has to be used to find out whether a named
+ mapping is defined in the current locale selected for the
+ @code{LC_CTYPE} category.  If the returned value is non-zero, you can use
+@@ -713,6 +780,8 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun wint_t towctrans (wint_t @var{wc}, wctrans_t @var{desc})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Same caveats as iswctype.
+ @code{towctrans} maps the input character @var{wc}
+ according to the rules of the mapping for which @var{desc} is a
+ descriptor, and returns the value it finds.  @var{desc} must be
+@@ -730,6 +799,9 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun wint_t towlower (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Same caveats as iswalnum, just using a wctrans rather than a wctype
++@c table.
+ If @var{wc} is an upper-case letter, @code{towlower} returns the corresponding
+ lower-case letter.  If @var{wc} is not an upper-case letter,
+ @var{wc} is returned unchanged.
+@@ -749,6 +821,7 @@
+ @comment wctype.h
+ @comment ISO
+ @deftypefun wint_t towupper (wint_t @var{wc})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ If @var{wc} is a lower-case letter, @code{towupper} returns the corresponding
+ upper-case letter.  Otherwise @var{wc} is returned unchanged.
+ 
+diff -urN glibc-2.17-c758a686/manual/debug.texi glibc-2.17-c758a686/manual/debug.texi
+--- glibc-2.17-c758a686/manual/debug.texi	2014-09-12 16:08:17.824070745 -0400
++++ glibc-2.17-c758a686/manual/debug.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -1,5 +1,5 @@
+ @node Debugging Support
+-@c @node Debugging Support, Internal Probes, Cryptographic Functions, Top
++@c @node Debugging Support, POSIX Threads, Cryptographic Functions, Top
+ @c %MENU% Functions to help debugging applications
+ @chapter Debugging support
+ 
+@@ -36,6 +36,16 @@
+ @comment execinfo.h
+ @comment GNU
+ @deftypefun int backtrace (void **@var{buffer}, int @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{} @ascuheap{} @ascudlopen{} @ascuplugin{} @asulock{}}@acunsafe{@acuinit{} @acsmem{} @aculock{} @acsfd{}}}
++@c The generic implementation just does pointer chasing within the local
++@c stack, without any guarantees that this will handle signal frames
++@c correctly, so it's AS-Unsafe to begin with.  However, most (all?)
++@c arches defer to libgcc_s's _Unwind_* implementation, dlopening
++@c libgcc_s.so to that end except in a static version of libc.
++@c libgcc_s's implementation may in turn defer to libunwind.  We can't
++@c assume those implementations are AS- or AC-safe, but even if we
++@c could, our own initialization path isn't, and libgcc's implementation
++@c calls malloc and performs internal locking, so...
+ The @code{backtrace} function obtains a backtrace for the current
+ thread, as a list of pointers, and places the information into
+ @var{buffer}.  The argument @var{size} should be the number of
+@@ -56,6 +66,17 @@
+ @comment execinfo.h
+ @comment GNU
+ @deftypefun {char **} backtrace_symbols (void *const *@var{buffer}, int @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @aculock{}}}
++@c Collects info returned by _dl_addr in an auto array, allocates memory
++@c for the whole return buffer with malloc then sprintfs into it storing
++@c pointers to the strings into the array entries in the buffer.
++@c _dl_addr takes the recursive dl_load_lock then calls
++@c _dl_find_dso_for_object and determine_info.
++@c _dl_find_dso_for_object calls _dl-addr_inside_object.
++@c All of them are safe as long as the lock is held.
++@c @asucorrupt?  It doesn't look like the dynamic loader's data
++@c structures could be in an inconsistent state that would cause
++@c malfunction here.
+ The @code{backtrace_symbols} function translates the information
+ obtained from the @code{backtrace} function into an array of strings.
+ The argument @var{buffer} should be a pointer to an array of addresses
+@@ -88,6 +109,11 @@
+ @comment execinfo.h
+ @comment GNU
+ @deftypefun void backtrace_symbols_fd (void *const *@var{buffer}, int @var{size}, int @var{fd})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
++@c Single loop of _dl_addr over addresses, collecting info into an iovec
++@c written out with a writev call per iteration.  Addresses and offsets
++@c are converted to hex in auto buffers, so the only potential issue
++@c here is leaking the dl lock in case of cancellation.
+ The @code{backtrace_symbols_fd} function performs the same translation
+ as the function @code{backtrace_symbols} function.  Instead of returning
+ the strings to the caller, it writes the strings to the file descriptor
+diff -urN glibc-2.17-c758a686/manual/errno.texi glibc-2.17-c758a686/manual/errno.texi
+--- glibc-2.17-c758a686/manual/errno.texi	2014-09-12 16:08:17.752070930 -0400
++++ glibc-2.17-c758a686/manual/errno.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -1293,6 +1293,9 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strerror (int @var{errnum})
++@safety{@prelim{}@mtunsafe{@mtasurace{:strerror}}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{}}}
++@c Calls strerror_r with a static buffer allocated with malloc on the
++@c first use.
+ The @code{strerror} function maps the error code (@pxref{Checking for
+ Errors}) specified by the @var{errnum} argument to a descriptive error
+ message string.  The return value is a pointer to this string.
+@@ -1310,10 +1313,11 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuintl{}}@acunsafe{}}
+ The @code{strerror_r} function works like @code{strerror} but instead of
+ returning the error message in a statically allocated buffer shared by
+ all threads in the process, it returns a private copy for the
+-thread. This might be either some permanent global data or a message
++thread.  This might be either some permanent global data or a message
+ string in the user supplied buffer starting at @var{buf} with the
+ length of @var{n} bytes.
+ 
+@@ -1331,6 +1335,10 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun void perror (const char *@var{message})
++@safety{@prelim{}@mtsafe{@mtasurace{:stderr}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c Besides strerror_r's and some of fprintf's issues, if stderr is not
++@c oriented yet, create a new stream with a dup of stderr's fd and write
++@c to that instead of stderr, to avoid orienting it.
+ This function prints an error message to the stream @code{stderr};
+ see @ref{Standard Streams}.  The orientation of @code{stderr} is not
+ changed.
+@@ -1442,6 +1450,13 @@
+ @comment error.h
+ @comment GNU
+ @deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acsafe{}}
++@c Cancellation is disabled throughout the execution.  It flushes stdout
++@c and then holds a lock on stderr while printing the program name and
++@c then running error_tail.  The non-wide case just runs vfprintf; the
++@c wide case converts the message to an alloca/malloc-allocated buffer
++@c with mbsrtowcs, then prints it with vfwprintf.  Afterwards,
++@c print_errno_message calls strerror_r and fxprintf.
+ The @code{error} function can be used to report general problems during
+ program execution.  The @var{format} argument is a format string just
+ like those given to the @code{printf} family of functions.  The
+@@ -1477,6 +1492,15 @@
+ @comment error.h
+ @comment GNU
+ @deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{})
++@safety{@prelim{}@mtunsafe{@mtasurace{:error_at_line/error_one_per_line} @mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acunsafe{@acucorrupt{/error_one_per_line}}}
++@c The error_one_per_line variable is accessed (without any form of
++@c synchronization, but since it's an int used once, it should be safe
++@c enough) and, if this mode is enabled, static variables used to hold
++@c the last printed file name and line number are accessed and modified
++@c without synchronization; the update is not atomic and it occurs
++@c before disabling cancellation, so it can be interrupted after only
++@c one of the two variables is modified.  After that, it's very much
++@c like error.
+ 
+ The @code{error_at_line} function is very similar to the @code{error}
+ function.  The only difference are the additional parameters @var{fname}
+@@ -1508,7 +1532,7 @@
+ 
+ @comment error.h
+ @comment GNU
+-@deftypevar {void (*) error_print_progname } (void)
++@deftypevar {void (*error_print_progname)} (void)
+ If the @code{error_print_progname} variable is defined to a non-zero
+ value the function pointed to is called by @code{error} or
+ @code{error_at_line}.  It is expected to print the program name or do
+@@ -1582,6 +1606,8 @@
+ @comment err.h
+ @comment BSD
+ @deftypefun void warn (const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Just calls vwarn with the va_list.
+ The @code{warn} function is roughly equivalent to a call like
+ @smallexample
+   error (0, errno, format, @r{the parameters})
+@@ -1594,14 +1620,21 @@
+ @comment err.h
+ @comment BSD
+ @deftypefun void vwarn (const char *@var{format}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c While holding stderr's recursive lock, it prints the programname, the
++@c given message, and the error string with fw?printf's %m.  When the
++@c stream is wide, convert_and_print converts the format string to an
++@c alloca/malloc-created buffer using mbsrtowcs and then calls fwprintf.
+ The @code{vwarn} function is just like @code{warn} except that the
+ parameters for the handling of the format string @var{format} are passed
+-in as an value of type @code{va_list}.
++in as a value of type @code{va_list}.
+ @end deftypefun
+ 
+ @comment err.h
+ @comment BSD
+ @deftypefun void warnx (const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Same as warn, but without the strerror translation issues.
+ The @code{warnx} function is roughly equivalent to a call like
+ @smallexample
+   error (0, 0, format, @r{the parameters})
+@@ -1615,14 +1648,18 @@
+ @comment err.h
+ @comment BSD
+ @deftypefun void vwarnx (const char *@var{format}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Same as vwarn, but without the strerror translation issues.
+ The @code{vwarnx} function is just like @code{warnx} except that the
+ parameters for the handling of the format string @var{format} are passed
+-in as an value of type @code{va_list}.
++in as a value of type @code{va_list}.
+ @end deftypefun
+ 
+ @comment err.h
+ @comment BSD
+ @deftypefun void err (int @var{status}, const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Same as warn followed by exit.
+ The @code{err} function is roughly equivalent to a call like
+ @smallexample
+   error (status, errno, format, @r{the parameters})
+@@ -1635,14 +1672,18 @@
+ @comment err.h
+ @comment BSD
+ @deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Same as vwarn followed by exit.
+ The @code{verr} function is just like @code{err} except that the
+ parameters for the handling of the format string @var{format} are passed
+-in as an value of type @code{va_list}.
++in as a value of type @code{va_list}.
+ @end deftypefun
+ 
+ @comment err.h
+ @comment BSD
+ @deftypefun void errx (int @var{status}, const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Same as warnx followed by exit.
+ The @code{errx} function is roughly equivalent to a call like
+ @smallexample
+   error (status, 0, format, @r{the parameters})
+@@ -1657,7 +1698,9 @@
+ @comment err.h
+ @comment BSD
+ @deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c Same as vwarnx followed by exit.
+ The @code{verrx} function is just like @code{errx} except that the
+ parameters for the handling of the format string @var{format} are passed
+-in as an value of type @code{va_list}.
++in as a value of type @code{va_list}.
+ @end deftypefun
+diff -urN glibc-2.17-c758a686/manual/examples/add.c glibc-2.17-c758a686/manual/examples/add.c
+--- glibc-2.17-c758a686/manual/examples/add.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/add.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Example of a Variadic Function
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/argp-ex1.c glibc-2.17-c758a686/manual/examples/argp-ex1.c
+--- glibc-2.17-c758a686/manual/examples/argp-ex1.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/argp-ex1.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Argp example #1 -- a minimal program using argp
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/argp-ex2.c glibc-2.17-c758a686/manual/examples/argp-ex2.c
+--- glibc-2.17-c758a686/manual/examples/argp-ex2.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/argp-ex2.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Argp example #2 -- a pretty minimal program using argp
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/argp-ex3.c glibc-2.17-c758a686/manual/examples/argp-ex3.c
+--- glibc-2.17-c758a686/manual/examples/argp-ex3.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/argp-ex3.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Argp example #3 -- a program with options and arguments using argp
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/argp-ex4.c glibc-2.17-c758a686/manual/examples/argp-ex4.c
+--- glibc-2.17-c758a686/manual/examples/argp-ex4.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/argp-ex4.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Argp example #4 -- a program with somewhat more complicated options
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/atexit.c glibc-2.17-c758a686/manual/examples/atexit.c
+--- glibc-2.17-c758a686/manual/examples/atexit.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/atexit.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Cleanups on Exit
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/db.c glibc-2.17-c758a686/manual/examples/db.c
+--- glibc-2.17-c758a686/manual/examples/db.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/db.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* User and Group Database Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/dir2.c glibc-2.17-c758a686/manual/examples/dir2.c
+--- glibc-2.17-c758a686/manual/examples/dir2.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/dir2.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Simple Program to List a Directory, Mark II
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/dir.c glibc-2.17-c758a686/manual/examples/dir.c
+--- glibc-2.17-c758a686/manual/examples/dir.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/dir.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Simple Program to List a Directory
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/execinfo.c glibc-2.17-c758a686/manual/examples/execinfo.c
+--- glibc-2.17-c758a686/manual/examples/execinfo.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/execinfo.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Obtain a backtrace and print it.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/filecli.c glibc-2.17-c758a686/manual/examples/filecli.c
+--- glibc-2.17-c758a686/manual/examples/filecli.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/filecli.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Example of Reading Datagrams
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/filesrv.c glibc-2.17-c758a686/manual/examples/filesrv.c
+--- glibc-2.17-c758a686/manual/examples/filesrv.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/filesrv.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Datagram Socket Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c
+--- glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* How to use fmtmsg and addseverity.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/genpass.c glibc-2.17-c758a686/manual/examples/genpass.c
+--- glibc-2.17-c758a686/manual/examples/genpass.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/genpass.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Encrypting Passwords
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/inetcli.c glibc-2.17-c758a686/manual/examples/inetcli.c
+--- glibc-2.17-c758a686/manual/examples/inetcli.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/inetcli.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Byte Stream Socket Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/inetsrv.c glibc-2.17-c758a686/manual/examples/inetsrv.c
+--- glibc-2.17-c758a686/manual/examples/inetsrv.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/inetsrv.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Byte Stream Connection Server Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/isockad.c glibc-2.17-c758a686/manual/examples/isockad.c
+--- glibc-2.17-c758a686/manual/examples/isockad.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/isockad.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Internet Socket Example using sockaddr_in.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/longopt.c glibc-2.17-c758a686/manual/examples/longopt.c
+--- glibc-2.17-c758a686/manual/examples/longopt.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/longopt.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Example of Parsing Long Options with getopt_long.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/memopen.c glibc-2.17-c758a686/manual/examples/memopen.c
+--- glibc-2.17-c758a686/manual/examples/memopen.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/memopen.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* String Streams
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/memstrm.c glibc-2.17-c758a686/manual/examples/memstrm.c
+--- glibc-2.17-c758a686/manual/examples/memstrm.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/memstrm.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* open_memstream example.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/mkfsock.c glibc-2.17-c758a686/manual/examples/mkfsock.c
+--- glibc-2.17-c758a686/manual/examples/mkfsock.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/mkfsock.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Example of Local-Namespace Sockets
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+@@ -45,13 +45,12 @@
+ 
+   /* The size of the address is
+      the offset of the start of the filename,
+-     plus its length,
+-     plus one for the terminating null byte.
++     plus its length (not including the terminating null byte).
+      Alternatively you can just do:
+      size = SUN_LEN (&name);
+   */
+   size = (offsetof (struct sockaddr_un, sun_path)
+-	  + strlen (name.sun_path) + 1);
++	  + strlen (name.sun_path));
+ 
+   if (bind (sock, (struct sockaddr *) &name, size) < 0)
+     {
+diff -urN glibc-2.17-c758a686/manual/examples/mkisock.c glibc-2.17-c758a686/manual/examples/mkisock.c
+--- glibc-2.17-c758a686/manual/examples/mkisock.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/mkisock.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Internet Socket Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/mygetpass.c glibc-2.17-c758a686/manual/examples/mygetpass.c
+--- glibc-2.17-c758a686/manual/examples/mygetpass.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/mygetpass.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Reading Passwords
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/pipe.c glibc-2.17-c758a686/manual/examples/pipe.c
+--- glibc-2.17-c758a686/manual/examples/pipe.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/pipe.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Creating a Pipe
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/popen.c glibc-2.17-c758a686/manual/examples/popen.c
+--- glibc-2.17-c758a686/manual/examples/popen.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/popen.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Pipe to a Subprocess
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/rprintf.c glibc-2.17-c758a686/manual/examples/rprintf.c
+--- glibc-2.17-c758a686/manual/examples/rprintf.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/rprintf.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Printf Extension Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/search.c glibc-2.17-c758a686/manual/examples/search.c
+--- glibc-2.17-c758a686/manual/examples/search.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/search.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Searching and Sorting Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/select.c glibc-2.17-c758a686/manual/examples/select.c
+--- glibc-2.17-c758a686/manual/examples/select.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/select.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Waiting for Input or Output
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/setjmp.c glibc-2.17-c758a686/manual/examples/setjmp.c
+--- glibc-2.17-c758a686/manual/examples/setjmp.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/setjmp.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Introduction to Non-Local Exits
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/sigh1.c glibc-2.17-c758a686/manual/examples/sigh1.c
+--- glibc-2.17-c758a686/manual/examples/sigh1.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/sigh1.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Signal Handlers that Return
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/sigusr.c glibc-2.17-c758a686/manual/examples/sigusr.c
+--- glibc-2.17-c758a686/manual/examples/sigusr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/sigusr.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Using kill for Communication
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/stpcpy.c glibc-2.17-c758a686/manual/examples/stpcpy.c
+--- glibc-2.17-c758a686/manual/examples/stpcpy.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/stpcpy.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* stpcpy example.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/strdupa.c glibc-2.17-c758a686/manual/examples/strdupa.c
+--- glibc-2.17-c758a686/manual/examples/strdupa.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/strdupa.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* strdupa example.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/strftim.c glibc-2.17-c758a686/manual/examples/strftim.c
+--- glibc-2.17-c758a686/manual/examples/strftim.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/strftim.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Time Functions Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/strncat.c glibc-2.17-c758a686/manual/examples/strncat.c
+--- glibc-2.17-c758a686/manual/examples/strncat.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/strncat.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* strncat example.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/subopt.c glibc-2.17-c758a686/manual/examples/subopt.c
+--- glibc-2.17-c758a686/manual/examples/subopt.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/subopt.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Parsing of Suboptions Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/swapcontext.c glibc-2.17-c758a686/manual/examples/swapcontext.c
+--- glibc-2.17-c758a686/manual/examples/swapcontext.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/swapcontext.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Complete Context Control
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/termios.c glibc-2.17-c758a686/manual/examples/termios.c
+--- glibc-2.17-c758a686/manual/examples/termios.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/termios.c	2014-09-12 16:10:06.046792714 -0400
+@@ -1,5 +1,5 @@
+ /* Noncanonical Mode Example
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/testopt.c glibc-2.17-c758a686/manual/examples/testopt.c
+--- glibc-2.17-c758a686/manual/examples/testopt.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/testopt.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Example of Parsing Arguments with getopt.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/testpass.c glibc-2.17-c758a686/manual/examples/testpass.c
+--- glibc-2.17-c758a686/manual/examples/testpass.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/testpass.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* Verify a password.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/examples/timeval_subtract.c glibc-2.17-c758a686/manual/examples/timeval_subtract.c
+--- glibc-2.17-c758a686/manual/examples/timeval_subtract.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/examples/timeval_subtract.c	2014-09-12 16:10:06.047792712 -0400
+@@ -1,5 +1,5 @@
+ /* struct timeval subtraction.
+-   Copyright (C) 1991-2012 Free Software Foundation, Inc.
++   Copyright (C) 1991-2014 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License
+diff -urN glibc-2.17-c758a686/manual/filesys.texi glibc-2.17-c758a686/manual/filesys.texi
+--- glibc-2.17-c758a686/manual/filesys.texi	2014-09-12 16:08:17.966070381 -0400
++++ glibc-2.17-c758a686/manual/filesys.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -58,6 +58,25 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {char *} getcwd (char *@var{buffer}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c If buffer is NULL, this function calls malloc and realloc, and, in
++@c case of error, free.  Linux offers a getcwd syscall that we use on
++@c GNU/Linux systems, but it may fail if the pathname is too long.  As a
++@c fallback, and on other systems, the generic implementation opens each
++@c parent directory with opendir, which allocates memory for the
++@c directory stream with malloc.  If a fstatat64 syscall is not
++@c available, very deep directory trees may also have to malloc to build
++@c longer sequences of ../../../... than those supported by a global
++@c const read-only string.
++
++@c linux/__getcwd
++@c  posix/__getcwd
++@c   malloc/realloc/free if buffer is NULL, or if dir is too deep
++@c   lstat64 -> see its own entry
++@c   fstatat64
++@c     direct syscall if possible, alloca+snprintf+*stat64 otherwise
++@c   openat64_not_cancel_3, close_not_cancel_no_status
++@c   __fdopendir, __opendir, __readdir, rewinddir
+ The @code{getcwd} function returns an absolute file name representing
+ the current working directory, storing it in the character array
+ @var{buffer} that you provide.  The @var{size} argument is how you tell
+@@ -116,6 +135,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefn {Deprecated Function} {char *} getwd (char *@var{buffer})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c Besides the getcwd safety issues, it calls strerror_r on error, which
++@c brings in all of the i18n issues.
+ This is similar to @code{getcwd}, but has no way to specify the size of
+ the buffer.  @Theglibc{} provides @code{getwd} only
+ for backwards compatibility with BSD.
+@@ -130,6 +152,9 @@
+ @comment unistd.h
+ @comment GNU
+ @deftypefun {char *} get_current_dir_name (void)
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c Besides getcwd, which this function calls as a fallback, it calls
++@c getenv, with the potential thread-safety issues that brings about.
+ @vindex PWD
+ This @code{get_current_dir_name} function is basically equivalent to
+ @w{@code{getcwd (NULL, 0)}}.  The only difference is that the value of
+@@ -145,6 +170,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int chdir (const char *@var{filename})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is used to set the process's working directory to
+ @var{filename}.
+ 
+@@ -158,6 +184,7 @@
+ @comment unistd.h
+ @comment XPG
+ @deftypefun int fchdir (int @var{filedes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is used to set the process's working directory to
+ directory associated with the file descriptor @var{filedes}.
+ 
+@@ -294,12 +321,14 @@
+ @comment dirent.h
+ @comment BSD
+ @deftypefun int IFTODT (mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This returns the @code{d_type} value corresponding to @var{mode}.
+ @end deftypefun
+ 
+ @comment dirent.h
+ @comment BSD
+ @deftypefun mode_t DTTOIF (int @var{dtype})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This returns the @code{st_mode} value corresponding to @var{dtype}.
+ @end deftypefun
+ @end table
+@@ -342,6 +371,9 @@
+ @comment dirent.h
+ @comment POSIX.1
+ @deftypefun {DIR *} opendir (const char *@var{dirname})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c Besides the safe syscall, we have to allocate the DIR object with
++@c __alloc_dir, that calls malloc.
+ The @code{opendir} function opens and returns a directory stream for
+ reading the directory whose file name is @var{dirname}.  The stream has
+ type @code{DIR *}.
+@@ -381,6 +413,8 @@
+ @comment dirent.h
+ @comment GNU
+ @deftypefun {DIR *} fdopendir (int @var{fd})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c The DIR object is allocated with __alloc_dir, that calls malloc.
+ The @code{fdopendir} function works just like @code{opendir} but
+ instead of taking a file name and opening a file descriptor for the
+ directory the caller is required to provide a file descriptor.  This
+@@ -425,6 +459,7 @@
+ @comment dirent.h
+ @comment GNU
+ @deftypefun int dirfd (DIR *@var{dirstream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{dirfd} returns the file descriptor associated with
+ the directory stream @var{dirstream}.  This descriptor can be used until
+ the directory is closed with @code{closedir}.  If the directory stream
+@@ -443,6 +478,12 @@
+ @comment dirent.h
+ @comment POSIX.1
+ @deftypefun {struct dirent *} readdir (DIR *@var{dirstream})
++@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c This function holds dirstream's non-recursive lock, which brings
++@c about the usual issues with locks and async signals and cancellation,
++@c but the lock taking is not enough to make the returned value safe to
++@c use, since it points to a stream's internal buffer that can be
++@c overwritten by subsequent calls or even released by closedir.
+ This function reads the next entry from the directory.  It normally
+ returns a pointer to a structure containing information about the
+ file.  This structure is associated with the @var{dirstream} handle
+@@ -478,6 +519,7 @@
+ @comment dirent.h
+ @comment GNU
+ @deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ This function is a version of @code{readdir} which performs internal
+ locking.  Like @code{readdir} it returns the next entry from the
+ directory.  To prevent conflicts between simultaneously running
+@@ -549,6 +591,7 @@
+ @comment dirent.h
+ @comment LFS
+ @deftypefun {struct dirent64 *} readdir64 (DIR *@var{dirstream})
++@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ The @code{readdir64} function is just like the @code{readdir} function
+ except that it returns a pointer to a record of type @code{struct
+ dirent64}.  Some of the members of this data type (notably @code{d_ino})
+@@ -560,6 +603,7 @@
+ @comment dirent.h
+ @comment LFS
+ @deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ The @code{readdir64_r} function is equivalent to the @code{readdir_r}
+ function except that it takes parameters of base type @code{struct
+ dirent64} instead of @code{struct dirent} in the second and third
+@@ -570,6 +614,10 @@
+ @comment dirent.h
+ @comment POSIX.1
+ @deftypefun int closedir (DIR *@var{dirstream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@acsmem{} @acsfd{} @aculock{/hurd}}}
++@c No synchronization in the posix implementation, only in the hurd
++@c one.  This is regarded as safe because it is undefined behavior if
++@c other threads could still be using the dir stream while it's closed.
+ This function closes the directory stream @var{dirstream}.  It returns
+ @code{0} on success and @code{-1} on failure.
+ 
+@@ -609,6 +657,7 @@
+ @comment dirent.h
+ @comment POSIX.1
+ @deftypefun void rewinddir (DIR *@var{dirstream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ The @code{rewinddir} function is used to reinitialize the directory
+ stream @var{dirstream}, so that if you call @code{readdir} it
+ returns information about the first entry in the directory again.  This
+@@ -622,6 +671,10 @@
+ @comment dirent.h
+ @comment BSD
+ @deftypefun {long int} telldir (DIR *@var{dirstream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}}
++@c The implementation is safe on most platforms, but on BSD it uses
++@c cookies, buckets and records, and the global array of pointers to
++@c dynamically allocated records is guarded by a non-recursive lock.
+ The @code{telldir} function returns the file position of the directory
+ stream @var{dirstream}.  You can use this value with @code{seekdir} to
+ restore the directory stream to that position.
+@@ -630,6 +683,10 @@
+ @comment dirent.h
+ @comment BSD
+ @deftypefun void seekdir (DIR *@var{dirstream}, long int @var{pos})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}}
++@c The implementation is safe on most platforms, but on BSD it uses
++@c cookies, buckets and records, and the global array of pointers to
++@c dynamically allocated records is guarded by a non-recursive lock.
+ The @code{seekdir} function sets the file position of the directory
+ stream @var{dirstream} to @var{pos}.  The value @var{pos} must be the
+ result of a previous call to @code{telldir} on this particular stream;
+@@ -648,7 +705,20 @@
+ 
+ @comment dirent.h
+ @comment BSD/SVID
+-@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (const struct dirent *), int (*@var{cmp}) (const void *, const void *))
++@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (const struct dirent *), int (*@var{cmp}) (const struct dirent **, const struct dirent **))
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c The scandir function calls __opendirat, __readdir, and __closedir to
++@c go over the named dir; malloc and realloc to allocate the namelist
++@c and copies of each selected dirent, besides the selector, if given,
++@c and qsort and the cmp functions if the latter is given.  In spite of
++@c the cleanup handler that releases memory and the file descriptor in
++@c case of synchronous cancellation, an asynchronous cancellation may
++@c still leak memory and a file descriptor.  Although readdir is unsafe
++@c in general, the use of an internal dir stream for sequential scanning
++@c of the directory with copying of dirents before subsequent calls
++@c makes the use safe, and the fact that the dir stream is private to
++@c each scandir call does away with the lock issues in readdir and
++@c closedir.
+ 
+ The @code{scandir} function scans the contents of the directory selected
+ by @var{dir}.  The result in *@var{namelist} is an array of pointers to
+@@ -678,7 +748,9 @@
+ 
+ @comment dirent.h
+ @comment BSD/SVID
+-@deftypefun int alphasort (const void *@var{a}, const void *@var{b})
++@deftypefun int alphasort (const struct dirent **@var{a}, const struct dirent **@var{b})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Calls strcoll.
+ The @code{alphasort} function behaves like the @code{strcoll} function
+ (@pxref{String/Array Comparison}).  The difference is that the arguments
+ are not string pointers but instead they are of type
+@@ -690,7 +762,10 @@
+ 
+ @comment dirent.h
+ @comment GNU
+-@deftypefun int versionsort (const void *@var{a}, const void *@var{b})
++@deftypefun int versionsort (const struct dirent **@var{a}, const struct dirent **@var{b})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Calls strverscmp, which will accesses the locale object multiple
++@c times.
+ The @code{versionsort} function is like @code{alphasort} except that it
+ uses the @code{strverscmp} function internally.
+ @end deftypefun
+@@ -702,7 +777,9 @@
+ 
+ @comment dirent.h
+ @comment GNU
+-@deftypefun int scandir64 (const char *@var{dir}, struct dirent64 ***@var{namelist}, int (*@var{selector}) (const struct dirent64 *), int (*@var{cmp}) (const void *, const void *))
++@deftypefun int scandir64 (const char *@var{dir}, struct dirent64 ***@var{namelist}, int (*@var{selector}) (const struct dirent64 *), int (*@var{cmp}) (const struct dirent64 **, const struct dirent64 **))
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c See scandir.
+ The @code{scandir64} function works like the @code{scandir} function
+ except that the directory entries it returns are described by elements
+ of type @w{@code{struct dirent64}}.  The function pointed to by
+@@ -720,7 +797,9 @@
+ 
+ @comment dirent.h
+ @comment GNU
+-@deftypefun int alphasort64 (const void *@var{a}, const void *@var{b})
++@deftypefun int alphasort64 (const struct dirent64 **@var{a}, const struct dirent **@var{b})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c See alphasort.
+ The @code{alphasort64} function behaves like the @code{strcoll} function
+ (@pxref{String/Array Comparison}).  The difference is that the arguments
+ are not string pointers but instead they are of type
+@@ -732,7 +811,9 @@
+ 
+ @comment dirent.h
+ @comment GNU
+-@deftypefun int versionsort64 (const void *@var{a}, const void *@var{b})
++@deftypefun int versionsort64 (const struct dirent64 **@var{a}, const struct dirent64 **@var{b})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c See versionsort.
+ The @code{versionsort64} function is like @code{alphasort64}, excepted that it
+ uses the @code{strverscmp} function internally.
+ @end deftypefun
+@@ -812,7 +893,7 @@
+ file does not exist.  The situation for @code{nftw} is different.
+ 
+ This value is only available if the program is compiled with
+-@code{_BSD_SOURCE} or @code{_XOPEN_EXTENDED} defined before including
++@code{_XOPEN_EXTENDED} defined before including
+ the first header.  The original SVID systems do not have symbolic links.
+ @end vtable
+ 
+@@ -913,6 +994,8 @@
+ @comment ftw.h
+ @comment SVID
+ @deftypefun int ftw (const char *@var{filename}, __ftw_func_t @var{func}, int @var{descriptors})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c see nftw for safety details
+ The @code{ftw} function calls the callback function given in the
+ parameter @var{func} for every item which is found in the directory
+ specified by @var{filename} and all directories below.  The function
+@@ -963,6 +1046,7 @@
+ @comment ftw.h
+ @comment Unix98
+ @deftypefun int ftw64 (const char *@var{filename}, __ftw64_func_t @var{func}, int @var{descriptors})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
+ This function is similar to @code{ftw} but it can work on filesystems
+ with large files.  File information is reported using a variable of type
+ @code{struct stat64} which is passed by reference to the callback
+@@ -976,6 +1060,17 @@
+ @comment ftw.h
+ @comment XPG4.2
+ @deftypefun int nftw (const char *@var{filename}, __nftw_func_t @var{func}, int @var{descriptors}, int @var{flag})
++@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}}
++@c ftw_startup calls alloca, malloc, free, xstat/lxstat, tdestroy, and ftw_dir
++@c  if FTW_CHDIR, call open, and fchdir, or chdir and getcwd
++@c ftw_dir calls open_dir_stream, readdir64, process_entry, closedir
++@c  if FTW_CHDIR, also calls fchdir
++@c open_dir_stream calls malloc, realloc, readdir64, free, closedir,
++@c  then openat64_not_cancel_3 and fdopendir or opendir, then dirfd.
++@c process_entry may cal realloc, fxstatat/lxstat/xstat, ftw_dir, and
++@c  find_object (tsearch) and add_object (tfind).
++@c Since each invocation of *ftw uses its own private search tree, none
++@c  of the search tree concurrency issues apply.
+ The @code{nftw} function works like the @code{ftw} functions.  They call
+ the callback function @var{func} for all items found in the directory
+ @var{filename} and below.  At most @var{descriptors} file descriptors
+@@ -1036,6 +1131,7 @@
+ @comment ftw.h
+ @comment Unix98
+ @deftypefun int nftw64 (const char *@var{filename}, __nftw64_func_t @var{func}, int @var{descriptors}, int @var{flag})
++@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}}
+ This function is similar to @code{nftw} but it can work on filesystems
+ with large files.  File information is reported using a variable of type
+ @code{struct stat64} which is passed by reference to the callback
+@@ -1079,6 +1175,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int link (const char *@var{oldname}, const char *@var{newname})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{link} function makes a new link to the existing file named by
+ @var{oldname}, under the new name @var{newname}.
+ 
+@@ -1186,6 +1283,7 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int symlink (const char *@var{oldname}, const char *@var{newname})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{symlink} function makes a symbolic link to @var{oldname} named
+ @var{newname}.
+ 
+@@ -1222,7 +1320,8 @@
+ 
+ @comment unistd.h
+ @comment BSD
+-@deftypefun int readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size})
++@deftypefun ssize_t readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{readlink} function gets the value of the symbolic link
+ @var{filename}.  The file name that the link points to is copied into
+ @var{buffer}.  This file name string is @emph{not} null-terminated;
+@@ -1282,6 +1381,8 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun {char *} canonicalize_file_name (const char *@var{name})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c Calls realpath.
+ 
+ The @code{canonicalize_file_name} function returns the absolute name of
+ the file named by @var{name} which contains no @code{.}, @code{..}
+@@ -1323,6 +1424,8 @@
+ @comment stdlib.h
+ @comment XPG
+ @deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c Calls malloc, realloc, getcwd, lxstat64, readlink, alloca.
+ 
+ A call to @code{realpath} where the @var{resolved} parameter is
+ @code{NULL} behaves exactly like @code{canonicalize_file_name}.  The
+@@ -1362,6 +1465,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int unlink (const char *@var{filename})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{unlink} function deletes the file name @var{filename}.  If
+ this is a file's sole name, the file itself is also deleted.  (Actually,
+ if any process has the file open when this happens, deletion is
+@@ -1404,6 +1508,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int rmdir (const char *@var{filename})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @cindex directories, deleting
+ @cindex deleting a directory
+ The @code{rmdir} function deletes a directory.  The directory must be
+@@ -1431,6 +1536,8 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int remove (const char *@var{filename})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Calls unlink and rmdir.
+ This is the @w{ISO C} function to remove a file.  It works like
+ @code{unlink} for files and like @code{rmdir} for directories.
+ @code{remove} is declared in @file{stdio.h}.
+@@ -1446,6 +1553,10 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int rename (const char *@var{oldname}, const char *@var{newname})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c In the absence of a rename syscall, there's an emulation with link
++@c and unlink, but it's racy, even more so if newname exists and is
++@c unlinked first.
+ The @code{rename} function renames the file @var{oldname} to
+ @var{newname}.  The file formerly accessible under the name
+ @var{oldname} is afterwards accessible as @var{newname} instead.  (If
+@@ -1541,6 +1652,7 @@
+ @comment sys/stat.h
+ @comment POSIX.1
+ @deftypefun int mkdir (const char *@var{filename}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{mkdir} function creates a new, empty directory with name
+ @var{filename}.
+ 
+@@ -1882,6 +1994,7 @@
+ @comment sys/stat.h
+ @comment POSIX.1
+ @deftypefun int stat (const char *@var{filename}, struct stat *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{stat} function returns information about the attributes of the
+ file named by @w{@var{filename}} in the structure pointed to by @var{buf}.
+ 
+@@ -1908,8 +2021,9 @@
+ @comment sys/stat.h
+ @comment Unix98
+ @deftypefun int stat64 (const char *@var{filename}, struct stat64 *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{stat} but it is also able to work on
+-files larger then @math{2^31} bytes on 32-bit systems.  To be able to do
++files larger than @math{2^31} bytes on 32-bit systems.  To be able to do
+ this the result is stored in a variable of type @code{struct stat64} to
+ which @var{buf} must point.
+ 
+@@ -1921,6 +2035,7 @@
+ @comment sys/stat.h
+ @comment POSIX.1
+ @deftypefun int fstat (int @var{filedes}, struct stat *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fstat} function is like @code{stat}, except that it takes an
+ open file descriptor as an argument instead of a file name.
+ @xref{Low-Level I/O}.
+@@ -1942,6 +2057,7 @@
+ @comment sys/stat.h
+ @comment Unix98
+ @deftypefun int fstat64 (int @var{filedes}, struct stat64 *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{fstat} but is able to work on large
+ files on 32-bit platforms.  For large files the file descriptor
+ @var{filedes} should be obtained by @code{open64} or @code{creat64}.
+@@ -1953,9 +2069,16 @@
+ replaces the interface for small files on 32-bit machines.
+ @end deftypefun
+ 
++@c fstatat will call alloca and snprintf if the syscall is not
++@c available.
++@c @safety{@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++
+ @comment sys/stat.h
+ @comment BSD
+ @deftypefun int lstat (const char *@var{filename}, struct stat *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct system call through lxstat, sometimes with an xstat conv call
++@c afterwards.
+ The @code{lstat} function is like @code{stat}, except that it does not
+ follow symbolic links.  If @var{filename} is the name of a symbolic
+ link, @code{lstat} returns information about the link itself; otherwise
+@@ -1969,8 +2092,11 @@
+ @comment sys/stat.h
+ @comment Unix98
+ @deftypefun int lstat64 (const char *@var{filename}, struct stat64 *@var{buf})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct system call through lxstat64, sometimes with an xstat conv
++@c call afterwards.
+ This function is similar to @code{lstat} but it is also able to work on
+-files larger then @math{2^31} bytes on 32-bit systems.  To be able to do
++files larger than @math{2^31} bytes on 32-bit systems.  To be able to do
+ this the result is stored in a variable of type @code{struct stat64} to
+ which @var{buf} must point.
+ 
+@@ -2007,12 +2133,14 @@
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_ISDIR (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a directory.
+ @end deftypefn
+ 
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_ISCHR (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a character special file (a
+ device like a terminal).
+ @end deftypefn
+@@ -2020,6 +2148,7 @@
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_ISBLK (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a block special file (a device
+ like a disk).
+ @end deftypefn
+@@ -2027,12 +2156,14 @@
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_ISREG (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a regular file.
+ @end deftypefn
+ 
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_ISFIFO (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a FIFO special file, or a
+ pipe.  @xref{Pipes and FIFOs}.
+ @end deftypefn
+@@ -2040,6 +2171,7 @@
+ @comment sys/stat.h
+ @comment GNU
+ @deftypefn Macro int S_ISLNK (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a symbolic link.
+ @xref{Symbolic Links}.
+ @end deftypefn
+@@ -2047,6 +2179,7 @@
+ @comment sys/stat.h
+ @comment GNU
+ @deftypefn Macro int S_ISSOCK (mode_t @var{m})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns non-zero if the file is a socket.  @xref{Sockets}.
+ @end deftypefn
+ 
+@@ -2129,6 +2262,7 @@
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_TYPEISMQ (struct stat *@var{s})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If the system implement POSIX message queues as distinct objects and the
+ file is a message queue object, this macro returns a non-zero value.
+ In all other cases the result is zero.
+@@ -2137,6 +2271,7 @@
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_TYPEISSEM (struct stat *@var{s})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If the system implement POSIX semaphores as distinct objects and the
+ file is a semaphore object, this macro returns a non-zero value.
+ In all other cases the result is zero.
+@@ -2145,8 +2280,9 @@
+ @comment sys/stat.h
+ @comment POSIX
+ @deftypefn Macro int S_TYPEISSHM (struct stat *@var{s})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If the system implement POSIX shared memory objects as distinct objects
+-and the file is an shared memory object, this macro returns a non-zero
++and the file is a shared memory object, this macro returns a non-zero
+ value.  In all other cases the result is zero.
+ @end deftypefn
+ 
+@@ -2189,6 +2325,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int chown (const char *@var{filename}, uid_t @var{owner}, gid_t @var{group})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{chown} function changes the owner of the file @var{filename} to
+ @var{owner}, and its group owner to @var{group}.
+ 
+@@ -2222,7 +2359,8 @@
+ 
+ @comment unistd.h
+ @comment BSD
+-@deftypefun int fchown (int @var{filedes}, int @var{owner}, int @var{group})
++@deftypefun int fchown (int @var{filedes}, uid_t @var{owner}, gid_t @var{group})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is like @code{chown}, except that it changes the owner of the open
+ file with descriptor @var{filedes}.
+ 
+@@ -2502,6 +2641,7 @@
+ @comment sys/stat.h
+ @comment POSIX.1
+ @deftypefun mode_t umask (mode_t @var{mask})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{umask} function sets the file creation mask of the current
+ process to @var{mask}, and returns the previous value of the file
+ creation mask.
+@@ -2527,6 +2667,7 @@
+ @comment sys/stat.h
+ @comment GNU
+ @deftypefun mode_t getumask (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Return the current value of the file creation mask for the current
+ process.  This function is a GNU extension and is only available on
+ @gnuhurdsystems{}.
+@@ -2535,6 +2676,7 @@
+ @comment sys/stat.h
+ @comment POSIX.1
+ @deftypefun int chmod (const char *@var{filename}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{chmod} function sets the access permission bits for the file
+ named by @var{filename} to @var{mode}.
+ 
+@@ -2574,7 +2716,8 @@
+ 
+ @comment sys/stat.h
+ @comment BSD
+-@deftypefun int fchmod (int @var{filedes}, int @var{mode})
++@deftypefun int fchmod (int @var{filedes}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is like @code{chmod}, except that it changes the permissions of the
+ currently open file given by @var{filedes}.
+ 
+@@ -2645,6 +2788,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int access (const char *@var{filename}, int @var{how})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{access} function checks to see whether the file named by
+ @var{filename} can be accessed in the way specified by the @var{how}
+ argument.  The @var{how} argument either can be the bitwise OR of the
+@@ -2746,7 +2890,7 @@
+ need to include the header file @file{utime.h} to use this facility.
+ @pindex utime.h
+ 
+-@comment time.h
++@comment utime.h
+ @comment POSIX.1
+ @deftp {Data Type} {struct utimbuf}
+ The @code{utimbuf} structure is used with the @code{utime} function to
+@@ -2762,9 +2906,12 @@
+ @end table
+ @end deftp
+ 
+-@comment time.h
++@comment utime.h
+ @comment POSIX.1
+ @deftypefun int utime (const char *@var{filename}, const struct utimbuf *@var{times})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c In the absence of a utime syscall, it non-atomically converts times
++@c to a struct timeval and calls utimes.
+ This function is used to modify the file times associated with the file
+ named @var{filename}.
+ 
+@@ -2815,7 +2962,11 @@
+ 
+ @comment sys/time.h
+ @comment BSD
+-@deftypefun int utimes (const char *@var{filename}, struct timeval @var{tvp}@t{[2]})
++@deftypefun int utimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c In the absence of a utimes syscall, it non-atomically converts tvp
++@c to struct timespec array and issues a utimensat syscall, or to
++@c struct utimbuf and calls utime.
+ This function sets the file access and modification times of the file
+ @var{filename}.  The new file access time is specified by
+ @code{@var{tvp}[0]}, and the new modification time by
+@@ -2829,7 +2980,10 @@
+ 
+ @comment sys/time.h
+ @comment BSD
+-@deftypefun int lutimes (const char *@var{filename}, struct timeval @var{tvp}@t{[2]})
++@deftypefun int lutimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Since there's no lutimes syscall, it non-atomically converts tvp
++@c to struct timespec array and issues a utimensat syscall.
+ This function is like @code{utimes}, except that it does not follow
+ symbolic links.  If @var{filename} is the name of a symbolic link,
+ @code{lutimes} sets the file access and modification times of the
+@@ -2845,7 +2999,11 @@
+ 
+ @comment sys/time.h
+ @comment BSD
+-@deftypefun int futimes (int @var{fd}, struct timeval @var{tvp}@t{[2]})
++@deftypefun int futimes (int @var{fd}, const struct timeval @var{tvp}@t{[2]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Since there's no futimes syscall, it non-atomically converts tvp
++@c to struct timespec array and issues a utimensat syscall, falling back
++@c to utimes on a /proc/self/fd symlink.
+ This function is like @code{utimes}, except that it takes an open file
+ descriptor as an argument instead of a file name.  @xref{Low-Level
+ I/O}.  This function comes from FreeBSD, and is not available on all
+@@ -2900,6 +3058,8 @@
+ @comment unistd.h
+ @comment X/Open
+ @deftypefun int truncate (const char *@var{filename}, off_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c In the absence of a truncate syscall, we use open and ftruncate.
+ 
+ The @code{truncate} function changes the size of @var{filename} to
+ @var{length}.  If @var{length} is shorter than the previous length, data
+@@ -2944,6 +3104,8 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun int truncate64 (const char *@var{name}, off64_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c In the absence of a syscall, try truncate if length fits.
+ This function is similar to the @code{truncate} function.  The
+ difference is that the @var{length} argument is 64 bits wide even on 32
+ bits machines, which allows the handling of files with sizes up to
+@@ -2957,6 +3119,7 @@
+ @comment unistd.h
+ @comment POSIX
+ @deftypefun int ftruncate (int @var{fd}, off_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ This is like @code{truncate}, but it works on a file descriptor @var{fd}
+ for an opened file instead of a file name to identify the object.  The
+@@ -3021,6 +3184,8 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun int ftruncate64 (int @var{id}, off64_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c In the absence of a syscall, try ftruncate if length fits.
+ This function is similar to the @code{ftruncate} function.  The
+ difference is that the @var{length} argument is 64 bits wide even on 32
+ bits machines which allows the handling of files with sizes up to
+@@ -3082,7 +3247,11 @@
+ 
+ @comment sys/stat.h
+ @comment BSD
+-@deftypefun int mknod (const char *@var{filename}, int @var{mode}, int @var{dev})
++@deftypefun int mknod (const char *@var{filename}, mode_t @var{mode}, dev_t @var{dev})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Instead of issuing the syscall directly, we go through xmknod.
++@c Although the internal xmknod takes a dev_t*, that could lead to
++@c @mtsrace races, it's passed a pointer to mknod's dev.
+ The @code{mknod} function makes a special file with name @var{filename}.
+ The @var{mode} specifies the mode of the file, and may include the various
+ special file bits, such as @code{S_IFCHR} (for a character special file)
+@@ -3134,6 +3303,20 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun {FILE *} tmpfile (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
++@c The unsafety issues are those of fdopen, plus @acsfd because of the
++@c open.
++@c __path_search (internal buf, !dir, const pfx, !try_tmpdir) ok
++@c  libc_secure_genenv only if try_tmpdir
++@c  xstat64, strlen, strcmp, sprintf
++@c __gen_tempname (internal tmpl, __GT_FILE) ok
++@c  strlen, memcmp, getpid, open/mkdir/lxstat64 ok
++@c  HP_TIMING_NOW if available ok
++@c  gettimeofday (!tz) first time, or every time if no HP_TIMING_NOW ok
++@c  static value is used and modified without synchronization ok
++@c   but the use is as a source of non-cryptographic randomness
++@c   with retries in case of collision, so it should be safe
++@c unlink, fdopen
+ This function creates a temporary binary file for update mode, as if by
+ calling @code{fopen} with mode @code{"wb+"}.  The file is deleted
+ automatically when it is closed or when the program terminates.  (On
+@@ -3150,9 +3333,10 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun {FILE *} tmpfile64 (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
+ This function is similar to @code{tmpfile}, but the stream it returns a
+ pointer to was opened using @code{tmpfile64}.  Therefore this stream can
+-be used for files larger then @math{2^31} bytes on 32-bit machines.
++be used for files larger than @math{2^31} bytes on 32-bit machines.
+ 
+ Please note that the return type is still @code{FILE *}.  There is no
+ special @code{FILE} type for the LFS interface.
+@@ -3165,6 +3349,11 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun {char *} tmpnam (char *@var{result})
++@safety{@prelim{}@mtunsafe{@mtasurace{:tmpnam/!result}}@asunsafe{}@acsafe{}}
++@c The passed-in buffer should not be modified concurrently with the
++@c call.
++@c __path_search (static or passed-in buf, !dir, !pfx, !try_tmpdir) ok
++@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok
+ This function constructs and returns a valid file name that does not
+ refer to any existing file.  If the @var{result} argument is a null
+ pointer, the return value is a pointer to an internal static string,
+@@ -3189,6 +3378,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun {char *} tmpnam_r (char *@var{result})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is nearly identical to the @code{tmpnam} function, except
+ that if @var{result} is a null pointer it returns a null pointer.
+ 
+@@ -3225,6 +3415,13 @@
+ @comment stdio.h
+ @comment SVID
+ @deftypefun {char *} tempnam (const char *@var{dir}, const char *@var{prefix})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c There's no way (short of being setuid) to avoid getenv("TMPDIR"),
++@c even with a non-NULL dir.
++@c
++@c __path_search (internal buf, dir, pfx, try_tmpdir) unsafe getenv
++@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok
++@c strdup
+ This function generates a unique temporary file name.  If @var{prefix}
+ is not a null pointer, up to five characters of this string are used as
+ a prefix for the file name.  The return value is a string newly
+@@ -3288,6 +3485,8 @@
+ @comment stdlib.h
+ @comment Unix
+ @deftypefun {char *} mktemp (char *@var{template})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c __gen_tempname (caller tmpl, __GT_NOCREATE) ok
+ The @code{mktemp} function generates a unique file name by modifying
+ @var{template} as described above.  If successful, it returns
+ @var{template} as modified.  If @code{mktemp} cannot find a unique file
+@@ -3306,6 +3505,8 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun int mkstemp (char *@var{template})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
++@c __gen_tempname (caller tmpl, __GT_FILE) ok
+ The @code{mkstemp} function generates a unique file name just as
+ @code{mktemp} does, but it also opens the file for you with @code{open}
+ (@pxref{Opening and Closing Files}).  If successful, it modifies
+@@ -3328,6 +3529,8 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun {char *} mkdtemp (char *@var{template})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c __gen_tempname (caller tmpl, __GT_DIR) ok
+ The @code{mkdtemp} function creates a directory with a unique name.  If
+ it succeeds, it overwrites @var{template} with the name of the
+ directory, and returns @var{template}.  As with @code{mktemp} and
+@@ -3349,3 +3552,23 @@
+ @xref{Creating Directories}.
+ 
+ The @code{mkdtemp} function comes from OpenBSD.
++
++@c FIXME these are undocumented:
++@c faccessat
++@c fchmodat
++@c fchownat
++@c futimesat
++@c fstatat (there's a commented-out safety assessment for this one)
++@c linkat
++@c mkdirat
++@c mkfifoat
++@c name_to_handle_at
++@c openat
++@c open_by_handle_at
++@c readlinkat
++@c renameat
++@c scandirat
++@c symlinkat
++@c unlinkat
++@c utimensat
++@c mknodat
+diff -urN glibc-2.17-c758a686/manual/freemanuals.texi glibc-2.17-c758a686/manual/freemanuals.texi
+--- glibc-2.17-c758a686/manual/freemanuals.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/freemanuals.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -1,4 +1,7 @@
+-@appendix Free Software Needs Free Documentation
++@c freemanuals.texi - blurb for free documentation.
++@c This file is intended to be included within another document,
++@c hence no sectioning command or @node.
++
+ @cindex free documentation
+ 
+ The biggest deficiency in the free software community today is not in
+diff -urN glibc-2.17-c758a686/manual/getopt.texi glibc-2.17-c758a686/manual/getopt.texi
+--- glibc-2.17-c758a686/manual/getopt.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/getopt.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -59,7 +59,29 @@
+ 
+ @comment unistd.h
+ @comment POSIX.2
+-@deftypefun int getopt (int @var{argc}, char **@var{argv}, const char *@var{options})
++@deftypefun int getopt (int @var{argc}, char *const *@var{argv}, const char *@var{options})
++@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c Swapping elements of passed-in argv may be partial in case of
++@c cancellation.  Gettext brings about a whole lot of AS and AC safety
++@c issues.  The getopt API involves returning values in the
++@c non-thread-specific optarg variable, which adds another thread-safety
++@c issue.  Given print_errors, it may output errors to stderr, which may
++@c self-deadlock, leak locks, or encounter (in a signal handler) or
++@c leave (in case of cancellation) stderr in an inconsistent state.
++@c Various implicit, indirect uses of malloc, in uses of memstream and
++@c asprintf for error-printing, bring about the usual malloc issues.
++@c (The explicit use of malloc in a conditional situation in
++@c _getopt_initialize is never exercised in glibc.)
++@c
++@c _getopt_internal
++@c  _getopt_internal_r
++@c   gettext
++@c   _getopt_initialize
++@c    getenv
++@c    malloc if USE_NONOPTION_FLAGS, never defined in libc
++@c   open_memstream
++@c   lockfile, unlockfile, __fxprintf -> stderr
++@c   asprintf
+ The @code{getopt} function gets the next option argument from the
+ argument list specified by the @var{argv} and @var{argc} arguments.
+ Normally these values come directly from the arguments received by
+@@ -225,6 +247,8 @@
+ @comment getopt.h
+ @comment GNU
+ @deftypefun int getopt_long (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
++@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c Same issues as getopt.
+ Decode options from the vector @var{argv} (whose length is @var{argc}).
+ The argument @var{shortopts} describes the short options to accept, just as
+ it does in @code{getopt}.  The argument @var{longopts} describes the long
+@@ -278,6 +302,8 @@
+ @comment getopt.h
+ @comment GNU
+ @deftypefun int getopt_long_only (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr})
++@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c Same issues as getopt.
+ 
+ The @code{getopt_long_only} function is equivalent to the
+ @code{getopt_long} function but it allows to specify the user of the
+diff -urN glibc-2.17-c758a686/manual/install-plain.texi glibc-2.17-c758a686/manual/install-plain.texi
+--- glibc-2.17-c758a686/manual/install-plain.texi	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/manual/install-plain.texi	2014-09-12 16:10:06.046792714 -0400
+@@ -0,0 +1,5 @@
++@c This is for making the `INSTALL' file for the distribution.
++@c Makeinfo ignores it when processing the file from the include.
++@setfilename INSTALL
++@set plain
++@include install.texi
+diff -urN glibc-2.17-c758a686/manual/install.texi glibc-2.17-c758a686/manual/install.texi
+--- glibc-2.17-c758a686/manual/install.texi	2014-09-12 16:08:17.783070851 -0400
++++ glibc-2.17-c758a686/manual/install.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -1,10 +1,10 @@
+-@c This is for making the `INSTALL' file for the distribution.
+-@c Makeinfo ignores it when processing the file from the include.
+-@setfilename INSTALL
+ @include macros.texi
+ @include pkgvers.texi
+ 
++@ifclear plain
+ @node Installation, Maintenance, Library Summary, Top
++@end ifclear
++
+ @c %MENU% How to install the GNU C Library
+ @appendix Installing @theglibc{}
+ 
+@@ -21,6 +21,7 @@
+ You will need recent versions of several GNU tools: definitely GCC and
+ GNU Make, and possibly others.  @xref{Tools for Compilation}, below.
+ 
++@ifclear plain
+ @menu
+ * Configuring and compiling::   How to compile and test GNU libc.
+ * Running make install::        How to install it once you've got it
+@@ -29,6 +30,7 @@
+ * Linux::                       Specific advice for GNU/Linux systems.
+ * Reporting Bugs::              So they'll get fixed.
+ @end menu
++@end ifclear
+ 
+ @node Configuring and compiling
+ @appendixsec Configuring and compiling @theglibc{}
+@@ -138,11 +140,6 @@
+ Don't build libraries with profiling information.  You may want to use
+ this option if you don't plan to do profiling.
+ 
+-@item --disable-versioning
+-Don't compile the shared libraries with symbol version information.
+-Doing this will make the resulting library incompatible with old
+-binaries, so it's not recommended.
+-
+ @item --enable-static-nss
+ Compile static versions of the NSS (Name Service Switch) libraries.
+ This is not recommended because it defeats the purpose of NSS; a program
+@@ -155,6 +152,14 @@
+ prevented though there generally is no reason since it creates
+ compatibility problems.
+ 
++@item --enable-hardcoded-path-in-tests
++By default, dynamic tests are linked to run with the installed C library.
++This option hardcodes the newly built C library path in dynamic tests
++so that they can be invoked directly.
++
++@item --enable-lock-elision=yes
++Enable lock elision for pthread mutexes by default.
++
+ @pindex pt_chown
+ @findex grantpt
+ @item --enable-pt_chown
+@@ -180,11 +185,11 @@
+ 
+ If you only specify @samp{--host}, @code{configure} will prepare for a
+ native compile but use what you specify instead of guessing what your
+-system is. This is most useful to change the CPU submodel.  For example,
+-if @code{configure} guesses your machine as @code{i586-pc-linux-gnu} but
+-you want to compile a library for 386es, give
+-@samp{--host=i386-pc-linux-gnu} or just @samp{--host=i386-linux} and add
+-the appropriate compiler flags (@samp{-mcpu=i386} will do the trick) to
++system is.  This is most useful to change the CPU submodel.  For example,
++if @code{configure} guesses your machine as @code{i686-pc-linux-gnu} but
++you want to compile a library for 586es, give
++@samp{--host=i586-pc-linux-gnu} or just @samp{--host=i586-linux} and add
++the appropriate compiler flags (@samp{-mcpu=i586} will do the trick) to
+ @var{CFLAGS}.
+ 
+ If you specify just @samp{--build}, @code{configure} will get confused.
+@@ -230,6 +235,12 @@
+ system such as @file{/etc/passwd}, @file{/etc/nsswitch.conf} and others.
+ These files must all contain correct and sensible content.
+ 
++Normally, @code{make check} will run all the tests before reporting
++all problems found and exiting with error status if any problems
++occurred.  You can specify @samp{stop-on-test-failure=y} when running
++@code{make check} to make the test run stop and exit with an error
++status immediately when a failure occurs.
++
+ To format the @cite{GNU C Library Reference Manual} for printing, type
+ @w{@code{make dvi}}.  You need a working @TeX{} installation to do
+ this.  The distribution builds the on-line formatted version of the
+@@ -264,13 +275,15 @@
+ In general, when testing @theglibc{}, @samp{test-wrapper} may be set
+ to the name and arguments of any program to run newly built binaries.
+ This program must preserve the arguments to the binary being run, its
+-working directory, all environment variables set as part of testing
+-and the standard input, output and error file descriptors.  If
++working directory and the standard input, output and error file
++descriptors.  If
+ @samp{@var{test-wrapper} env} will not work to run a program with
+ environment variables set, then @samp{test-wrapper-env} must be set to
+ a program that runs a newly built program with environment variable
+ assignments in effect, those assignments being specified as
+-@samp{@var{var}=@var{value}} before the name of the program to be run.
++@samp{@var{var}=@var{value}} before the name of the program to be
++run.  If multiple assignments to the same variable are specified,
++the last assignment specified must take precedence.
+ 
+ 
+ @node Running make install
+@@ -278,7 +291,7 @@
+ @cindex installing
+ 
+ To install the library and its header files, and the Info files of the
+-manual, type @code{env LANGUAGE=C LC_ALL=C make install}.  This will
++manual, type @code{make install}.  This will
+ build things, if necessary, before installing them; however, you should
+ still compile everything first.  If you are installing @theglibc{} as your
+ primary C library, we recommend that you shut the system down to
+@@ -317,14 +330,11 @@
+ well.
+ 
+ One auxiliary program, @file{/usr/libexec/pt_chown}, is installed setuid
+-@code{root}.  This program is invoked by the @code{grantpt} function; it
+-sets the permissions on a pseudoterminal so it can be used by the
+-calling process.  This means programs like @code{xterm} and
+-@code{screen} do not have to be setuid to get a pty.  (There may be
+-other reasons why they need privileges.)  If you are using a
+-Linux kernel with the @code{devptsfs} or @code{devfs} filesystems
+-providing pty slaves, you don't need this program; otherwise you do.
+-The source for @file{pt_chown} is in @file{login/programs/pt_chown.c}.
++@code{root} if the @samp{--enable-pt_chown} configuration option is used.
++This program is invoked by the @code{grantpt} function; it sets the
++permissions on a pseudoterminal so it can be used by the calling process.
++If you are using a Linux kernel with the @code{devpts} filesystem enabled
++and mounted at @file{/dev/pts}, you don't need this program.
+ 
+ After installation you might want to configure the timezone and locale
+ installation of your system.  @Theglibc{} comes with a locale
+@@ -362,9 +372,9 @@
+ bugs or lack features.
+ 
+ @item
+-GCC 4.3 or newer, GCC 4.6 recommended
++GCC 4.4 or newer, GCC 4.6 recommended
+ 
+-GCC 4.3 or higher is required; as of this writing, GCC 4.6 is the
++GCC 4.4 or higher is required; as of this writing, GCC 4.6 is the
+ compiler we advise to use to build @theglibc{}.
+ 
+ You can use whatever compiler you like to compile programs that use
+@@ -388,10 +398,11 @@
+ mechanism for the info files is not present or works differently.
+ 
+ @item
+-GNU @code{awk} 3.0, or higher
++GNU @code{awk} 3.1.2, or higher
+ 
+-@code{Awk} is used in several places to generate files.
+-@code{gawk} 3.0 is known to work.
++@code{awk} is used in several places to generate files.
++Some @code{gawk} extensions are used, including the @code{asorti}
++function, which was introduced in version 3.1.2 of @code{gawk}.
+ 
+ @item
+ Perl 5
+@@ -412,7 +423,7 @@
+ @end itemize
+ 
+ @noindent
+-If you change any of the @file{configure.in} files you will also need
++If you change any of the @file{configure.ac} files you will also need
+ 
+ @itemize @bullet
+ @item
+@@ -436,7 +447,7 @@
+ @cindex kernel header files
+ 
+ If you are installing @theglibc{} on @gnulinuxsystems{}, you need to have
+-the header files from a 2.6.19.1 or newer kernel around for reference.
++the header files from a 2.6.32 or newer kernel around for reference.
+ These headers must be installed using @samp{make headers_install}; the
+ headers present in the kernel source directory are not suitable for
+ direct use by @theglibc{}.  You do not need to use that kernel, just have
+diff -urN glibc-2.17-c758a686/manual/intro.texi glibc-2.17-c758a686/manual/intro.texi
+--- glibc-2.17-c758a686/manual/intro.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/intro.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -159,6 +159,14 @@
+ These include utilities for dealing with regular expressions and other
+ pattern matching facilities (@pxref{Pattern Matching}).
+ 
++@menu
++* POSIX Safety Concepts::       Safety concepts from POSIX.
++* Unsafe Features::             Features that make functions unsafe.
++* Conditionally Safe Features:: Features that make functions unsafe
++                                 in the absence of workarounds.
++* Other Safety Remarks::        Additional safety features and remarks.
++@end menu
++
+ @comment Roland sez:
+ @comment The GNU C library as it stands conforms to 1003.2 draft 11, which
+ @comment specifies:
+@@ -172,6 +180,725 @@
+ @comment <wordexp.h> (not yet implemented)
+ @comment confstr
+ 
++@node POSIX Safety Concepts, Unsafe Features, , POSIX
++@subsubsection POSIX Safety Concepts
++@cindex POSIX Safety Concepts
++
++This manual documents various safety properties of @glibcadj{}
++functions, in lines that follow their prototypes and look like:
++
++@sampsafety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++
++The properties are assessed according to the criteria set forth in the
++POSIX standard for such safety contexts as Thread-, Async-Signal- and
++Async-Cancel- -Safety.  Intuitive definitions of these properties,
++attempting to capture the meaning of the standard definitions, follow.
++
++@itemize @bullet
++
++@item
++@cindex MT-Safe
++@cindex Thread-Safe
++@code{MT-Safe} or Thread-Safe functions are safe to call in the presence
++of other threads.  MT, in MT-Safe, stands for Multi Thread.
++
++Being MT-Safe does not imply a function is atomic, nor that it uses any
++of the memory synchronization mechanisms POSIX exposes to users.  It is
++even possible that calling MT-Safe functions in sequence does not yield
++an MT-Safe combination.  For example, having a thread call two MT-Safe
++functions one right after the other does not guarantee behavior
++equivalent to atomic execution of a combination of both functions, since
++concurrent calls in other threads may interfere in a destructive way.
++
++Whole-program optimizations that could inline functions across library
++interfaces may expose unsafe reordering, and so performing inlining
++across the @glibcadj{} interface is not recommended.  The documented
++MT-Safety status is not guaranteed under whole-program optimization.
++However, functions defined in user-visible headers are designed to be
++safe for inlining.
++
++
++@item
++@cindex AS-Safe
++@cindex Async-Signal-Safe
++@code{AS-Safe} or Async-Signal-Safe functions are safe to call from
++asynchronous signal handlers.  AS, in AS-Safe, stands for Asynchronous
++Signal.
++
++Many functions that are AS-Safe may set @code{errno}, or modify the
++floating-point environment, because their doing so does not make them
++unsuitable for use in signal handlers.  However, programs could
++misbehave should asynchronous signal handlers modify this thread-local
++state, and the signal handling machinery cannot be counted on to
++preserve it.  Therefore, signal handlers that call functions that may
++set @code{errno} or modify the floating-point environment @emph{must}
++save their original values, and restore them before returning.
++
++
++@item
++@cindex AC-Safe
++@cindex Async-Cancel-Safe
++@code{AC-Safe} or Async-Cancel-Safe functions are safe to call when
++asynchronous cancellation is enabled.  AC in AC-Safe stands for
++Asynchronous Cancellation.
++
++The POSIX standard defines only three functions to be AC-Safe, namely
++@code{pthread_cancel}, @code{pthread_setcancelstate}, and
++@code{pthread_setcanceltype}.  At present @theglibc{} provides no
++guarantees beyond these three functions, but does document which
++functions are presently AC-Safe.  This documentation is provided for use
++by @theglibc{} developers.
++
++Just like signal handlers, cancellation cleanup routines must configure
++the floating point environment they require.  The routines cannot assume
++a floating point environment, particularly when asynchronous
++cancellation is enabled.  If the configuration of the floating point
++environment cannot be performed atomically then it is also possible that
++the environment encountered is internally inconsistent.
++
++
++@item
++@cindex MT-Unsafe
++@cindex Thread-Unsafe
++@cindex AS-Unsafe
++@cindex Async-Signal-Unsafe
++@cindex AC-Unsafe
++@cindex Async-Cancel-Unsafe
++@code{MT-Unsafe}, @code{AS-Unsafe}, @code{AC-Unsafe} functions are not
++safe to call within the safety contexts described above.  Calling them
++within such contexts invokes undefined behavior.
++
++Functions not explicitly documented as safe in a safety context should
++be regarded as Unsafe.
++
++
++@item
++@cindex Preliminary
++@code{Preliminary} safety properties are documented, indicating these
++properties may @emph{not} be counted on in future releases of
++@theglibc{}.
++
++Such preliminary properties are the result of an assessment of the
++properties of our current implementation, rather than of what is
++mandated and permitted by current and future standards.
++
++Although we strive to abide by the standards, in some cases our
++implementation is safe even when the standard does not demand safety,
++and in other cases our implementation does not meet the standard safety
++requirements.  The latter are most likely bugs; the former, when marked
++as @code{Preliminary}, should not be counted on: future standards may
++require changes that are not compatible with the additional safety
++properties afforded by the current implementation.
++
++Furthermore, the POSIX standard does not offer a detailed definition of
++safety.  We assume that, by ``safe to call'', POSIX means that, as long
++as the program does not invoke undefined behavior, the ``safe to call''
++function behaves as specified, and does not cause other functions to
++deviate from their specified behavior.  We have chosen to use its loose
++definitions of safety, not because they are the best definitions to use,
++but because choosing them harmonizes this manual with POSIX.
++
++Please keep in mind that these are preliminary definitions and
++annotations, and certain aspects of the definitions are still under
++discussion and might be subject to clarification or change.
++
++Over time, we envision evolving the preliminary safety notes into stable
++commitments, as stable as those of our interfaces.  As we do, we will
++remove the @code{Preliminary} keyword from safety notes.  As long as the
++keyword remains, however, they are not to be regarded as a promise of
++future behavior.
++
++
++@end itemize
++
++Other keywords that appear in safety notes are defined in subsequent
++sections.
++
++
++@node Unsafe Features, Conditionally Safe Features, POSIX Safety Concepts, POSIX
++@subsubsection Unsafe Features
++@cindex Unsafe Features
++
++Functions that are unsafe to call in certain contexts are annotated with
++keywords that document their features that make them unsafe to call.
++AS-Unsafe features in this section indicate the functions are never safe
++to call when asynchronous signals are enabled.  AC-Unsafe features
++indicate they are never safe to call when asynchronous cancellation is
++enabled.  There are no MT-Unsafe marks in this section.
++
++@itemize @bullet
++
++@item @code{lock}
++@cindex lock
++
++Functions marked with @code{lock} as an AS-Unsafe feature may be
++interrupted by a signal while holding a non-recursive lock.  If the
++signal handler calls another such function that takes the same lock, the
++result is a deadlock.
++
++Functions annotated with @code{lock} as an AC-Unsafe feature may, if
++cancelled asynchronously, fail to release a lock that would have been
++released if their execution had not been interrupted by asynchronous
++thread cancellation.  Once a lock is left taken, attempts to take that
++lock will block indefinitely.
++
++
++@item @code{corrupt}
++@cindex corrupt
++
++Functions marked with @code{corrupt} as an AS-Unsafe feature may corrupt
++data structures and misbehave when they interrupt, or are interrupted
++by, another such function.  Unlike functions marked with @code{lock},
++these take recursive locks to avoid MT-Safety problems, but this is not
++enough to stop a signal handler from observing a partially-updated data
++structure.  Further corruption may arise from the interrupted function's
++failure to notice updates made by signal handlers.
++
++Functions marked with @code{corrupt} as an AC-Unsafe feature may leave
++data structures in a corrupt, partially updated state.  Subsequent uses
++of the data structure may misbehave.
++
++@c A special case, probably not worth documenting separately, involves
++@c reallocing, or even freeing pointers.  Any case involving free could
++@c be easily turned into an ac-safe leak by resetting the pointer before
++@c releasing it; I don't think we have any case that calls for this sort
++@c of fixing.  Fixing the realloc cases would require a new interface:
++@c instead of @code{ptr=realloc(ptr,size)} we'd have to introduce
++@c @code{acsafe_realloc(&ptr,size)} that would modify ptr before
++@c releasing the old memory.  The ac-unsafe realloc could be implemented
++@c in terms of an internal interface with this semantics (say
++@c __acsafe_realloc), but since realloc can be overridden, the function
++@c we call to implement realloc should not be this internal interface,
++@c but another internal interface that calls __acsafe_realloc if realloc
++@c was not overridden, and calls the overridden realloc with async
++@c cancel disabled.  --lxoliva
++
++
++@item @code{heap}
++@cindex heap
++
++Functions marked with @code{heap} may call heap memory management
++functions from the @code{malloc}/@code{free} family of functions and are
++only as safe as those functions.  This note is thus equivalent to:
++
++@sampsafety{@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++
++
++@c Check for cases that should have used plugin instead of or in
++@c addition to this.  Then, after rechecking gettext, adjust i18n if
++@c needed.
++@item @code{dlopen}
++@cindex dlopen
++
++Functions marked with @code{dlopen} use the dynamic loader to load
++shared libraries into the current execution image.  This involves
++opening files, mapping them into memory, allocating additional memory,
++resolving symbols, applying relocations and more, all of this while
++holding internal dynamic loader locks.
++
++The locks are enough for these functions to be AS- and AC-Unsafe, but
++other issues may arise.  At present this is a placeholder for all
++potential safety issues raised by @code{dlopen}.
++
++@c dlopen runs init and fini sections of the module; does this mean
++@c dlopen always implies plugin?
++
++
++@item @code{plugin}
++@cindex plugin
++
++Functions annotated with @code{plugin} may run code from plugins that
++may be external to @theglibc{}.  Such plugin functions are assumed to be
++MT-Safe, AS-Unsafe and AC-Unsafe.  Examples of such plugins are stack
++@cindex NSS
++unwinding libraries, name service switch (NSS) and character set
++@cindex iconv
++conversion (iconv) back-ends.
++
++Although the plugins mentioned as examples are all brought in by means
++of dlopen, the @code{plugin} keyword does not imply any direct
++involvement of the dynamic loader or the @code{libdl} interfaces, those
++are covered by @code{dlopen}.  For example, if one function loads a
++module and finds the addresses of some of its functions, while another
++just calls those already-resolved functions, the former will be marked
++with @code{dlopen}, whereas the latter will get the @code{plugin}.  When
++a single function takes all of these actions, then it gets both marks.
++
++
++@item @code{i18n}
++@cindex i18n
++
++Functions marked with @code{i18n} may call internationalization
++functions of the @code{gettext} family and will be only as safe as those
++functions.  This note is thus equivalent to:
++
++@sampsafety{@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascudlopen{}}@acunsafe{@acucorrupt{}}}
++
++
++@item @code{timer}
++@cindex timer
++
++Functions marked with @code{timer} use the @code{alarm} function or
++similar to set a time-out for a system call or a long-running operation.
++In a multi-threaded program, there is a risk that the time-out signal
++will be delivered to a different thread, thus failing to interrupt the
++intended thread.  Besides being MT-Unsafe, such functions are always
++AS-Unsafe, because calling them in signal handlers may interfere with
++timers set in the interrupted code, and AC-Unsafe, because there is no
++safe way to guarantee an earlier timer will be reset in case of
++asynchronous cancellation.
++
++@end itemize
++
++
++@node Conditionally Safe Features, Other Safety Remarks, Unsafe Features, POSIX
++@subsubsection Conditionally Safe Features
++@cindex Conditionally Safe Features
++
++For some features that make functions unsafe to call in certain
++contexts, there are known ways to avoid the safety problem other than
++refraining from calling the function altogether.  The keywords that
++follow refer to such features, and each of their definitions indicate
++how the whole program needs to be constrained in order to remove the
++safety problem indicated by the keyword.  Only when all the reasons that
++make a function unsafe are observed and addressed, by applying the
++documented constraints, does the function become safe to call in a
++context.
++
++@itemize @bullet
++
++@item @code{init}
++@cindex init
++
++Functions marked with @code{init} as an MT-Unsafe feature perform
++MT-Unsafe initialization when they are first called.
++
++Calling such a function at least once in single-threaded mode removes
++this specific cause for the function to be regarded as MT-Unsafe.  If no
++other cause for that remains, the function can then be safely called
++after other threads are started.
++
++Functions marked with @code{init} as an AS- or AC-Unsafe feature use the
++internal @code{libc_once} machinery or similar to initialize internal
++data structures.
++
++If a signal handler interrupts such an initializer, and calls any
++function that also performs @code{libc_once} initialization, it will
++deadlock if the thread library has been loaded.
++
++Furthermore, if an initializer is partially complete before it is
++canceled or interrupted by a signal whose handler requires the same
++initialization, some or all of the initialization may be performed more
++than once, leaking resources or even resulting in corrupt internal data.
++
++Applications that need to call functions marked with @code{init} as an
++AS- or AC-Unsafe feature should ensure the initialization is performed
++before configuring signal handlers or enabling cancellation, so that the
++AS- and AC-Safety issues related with @code{libc_once} do not arise.
++
++@c We may have to extend the annotations to cover conditions in which
++@c initialization may or may not occur, since an initial call in a safe
++@c context is no use if the initialization doesn't take place at that
++@c time: it doesn't remove the risk for later calls.
++
++
++@item @code{race}
++@cindex race
++
++Functions annotated with @code{race} as an MT-Safety issue operate on
++objects in ways that may cause data races or similar forms of
++destructive interference out of concurrent execution.  In some cases,
++the objects are passed to the functions by users; in others, they are
++used by the functions to return values to users; in others, they are not
++even exposed to users.
++
++We consider access to objects passed as (indirect) arguments to
++functions to be data race free.  The assurance of data race free objects
++is the caller's responsibility.  We will not mark a function as
++MT-Unsafe or AS-Unsafe if it misbehaves when users fail to take the
++measures required by POSIX to avoid data races when dealing with such
++objects.  As a general rule, if a function is documented as reading from
++an object passed (by reference) to it, or modifying it, users ought to
++use memory synchronization primitives to avoid data races just as they
++would should they perform the accesses themselves rather than by calling
++the library function.  @code{FILE} streams are the exception to the
++general rule, in that POSIX mandates the library to guard against data
++races in many functions that manipulate objects of this specific opaque
++type.  We regard this as a convenience provided to users, rather than as
++a general requirement whose expectations should extend to other types.
++
++In order to remind users that guarding certain arguments is their
++responsibility, we will annotate functions that take objects of certain
++types as arguments.  We draw the line for objects passed by users as
++follows: objects whose types are exposed to users, and that users are
++expected to access directly, such as memory buffers, strings, and
++various user-visible @code{struct} types, do @emph{not} give reason for
++functions to be annotated with @code{race}.  It would be noisy and
++redundant with the general requirement, and not many would be surprised
++by the library's lack of internal guards when accessing objects that can
++be accessed directly by users.
++
++As for objects that are opaque or opaque-like, in that they are to be
++manipulated only by passing them to library functions (e.g.,
++@code{FILE}, @code{DIR}, @code{obstack}, @code{iconv_t}), there might be
++additional expectations as to internal coordination of access by the
++library.  We will annotate, with @code{race} followed by a colon and the
++argument name, functions that take such objects but that do not take
++care of synchronizing access to them by default.  For example,
++@code{FILE} stream @code{unlocked} functions will be annotated, but
++those that perform implicit locking on @code{FILE} streams by default
++will not, even though the implicit locking may be disabled on a
++per-stream basis.
++
++In either case, we will not regard as MT-Unsafe functions that may
++access user-supplied objects in unsafe ways should users fail to ensure
++the accesses are well defined.  The notion prevails that users are
++expected to safeguard against data races any user-supplied objects that
++the library accesses on their behalf.
++
++@c The above describes @mtsrace; @mtasurace is described below.
++
++This user responsibility does not apply, however, to objects controlled
++by the library itself, such as internal objects and static buffers used
++to return values from certain calls.  When the library doesn't guard
++them against concurrent uses, these cases are regarded as MT-Unsafe and
++AS-Unsafe (although the @code{race} mark under AS-Unsafe will be omitted
++as redundant with the one under MT-Unsafe).  As in the case of
++user-exposed objects, the mark may be followed by a colon and an
++identifier.  The identifier groups all functions that operate on a
++certain unguarded object; users may avoid the MT-Safety issues related
++with unguarded concurrent access to such internal objects by creating a
++non-recursive mutex related with the identifier, and always holding the
++mutex when calling any function marked as racy on that identifier, as
++they would have to should the identifier be an object under user
++control.  The non-recursive mutex avoids the MT-Safety issue, but it
++trades one AS-Safety issue for another, so use in asynchronous signals
++remains undefined.
++
++When the identifier relates to a static buffer used to hold return
++values, the mutex must be held for as long as the buffer remains in use
++by the caller.  Many functions that return pointers to static buffers
++offer reentrant variants that store return values in caller-supplied
++buffers instead.  In some cases, such as @code{tmpname}, the variant is
++chosen not by calling an alternate entry point, but by passing a
++non-@code{NULL} pointer to the buffer in which the returned values are
++to be stored.  These variants are generally preferable in multi-threaded
++programs, although some of them are not MT-Safe because of other
++internal buffers, also documented with @code{race} notes.
++
++
++@item @code{const}
++@cindex const
++
++Functions marked with @code{const} as an MT-Safety issue non-atomically
++modify internal objects that are better regarded as constant, because a
++substantial portion of @theglibc{} accesses them without
++synchronization.  Unlike @code{race}, that causes both readers and
++writers of internal objects to be regarded as MT-Unsafe and AS-Unsafe,
++this mark is applied to writers only.  Writers remain equally MT- and
++AS-Unsafe to call, but the then-mandatory constness of objects they
++modify enables readers to be regarded as MT-Safe and AS-Safe (as long as
++no other reasons for them to be unsafe remain), since the lack of
++synchronization is not a problem when the objects are effectively
++constant.
++
++The identifier that follows the @code{const} mark will appear by itself
++as a safety note in readers.  Programs that wish to work around this
++safety issue, so as to call writers, may use a non-recursve
++@code{rwlock} associated with the identifier, and guard @emph{all} calls
++to functions marked with @code{const} followed by the identifier with a
++write lock, and @emph{all} calls to functions marked with the identifier
++by itself with a read lock.  The non-recursive locking removes the
++MT-Safety problem, but it trades one AS-Safety problem for another, so
++use in asynchronous signals remains undefined.
++
++@c But what if, instead of marking modifiers with const:id and readers
++@c with just id, we marked writers with race:id and readers with ro:id?
++@c Instead of having to define each instance of “id”, we'd have a
++@c general pattern governing all such “id”s, wherein race:id would
++@c suggest the need for an exclusive/write lock to make the function
++@c safe, whereas ro:id would indicate “id” is expected to be read-only,
++@c but if any modifiers are called (while holding an exclusive lock),
++@c then ro:id-marked functions ought to be guarded with a read lock for
++@c safe operation.  ro:env or ro:locale, for example, seems to convey
++@c more clearly the expectations and the meaning, than just env or
++@c locale.
++
++
++@item @code{sig}
++@cindex sig
++
++Functions marked with @code{sig} as a MT-Safety issue (that implies an
++identical AS-Safety issue, omitted for brevity) may temporarily install
++a signal handler for internal purposes, which may interfere with other
++uses of the signal, identified after a colon.
++
++This safety problem can be worked around by ensuring that no other uses
++of the signal will take place for the duration of the call.  Holding a
++non-recursive mutex while calling all functions that use the same
++temporary signal; blocking that signal before the call and resetting its
++handler afterwards is recommended.
++
++There is no safe way to guarantee the original signal handler is
++restored in case of asynchronous cancellation, therefore so-marked
++functions are also AC-Unsafe.
++
++@c fixme: at least deferred cancellation should get it right, and would
++@c obviate the restoring bit below, and the qualifier above.
++
++Besides the measures recommended to work around the MT- and AS-Safety
++problem, in order to avert the cancellation problem, disabling
++asynchronous cancellation @emph{and} installing a cleanup handler to
++restore the signal to the desired state and to release the mutex are
++recommended.
++
++
++@item @code{term}
++@cindex term
++
++Functions marked with @code{term} as an MT-Safety issue may change the
++terminal settings in the recommended way, namely: call @code{tcgetattr},
++modify some flags, and then call @code{tcsetattr}; this creates a window
++in which changes made by other threads are lost.  Thus, functions marked
++with @code{term} are MT-Unsafe.  The same window enables changes made by
++asynchronous signals to be lost.  These functions are also AS-Unsafe,
++but the corresponding mark is omitted as redundant.
++
++It is thus advisable for applications using the terminal to avoid
++concurrent and reentrant interactions with it, by not using it in signal
++handlers or blocking signals that might use it, and holding a lock while
++calling these functions and interacting with the terminal.  This lock
++should also be used for mutual exclusion with functions marked with
++@code{@mtasurace{:tcattr(fd)}}, where @var{fd} is a file descriptor for
++the controlling terminal.  The caller may use a single mutex for
++simplicity, or use one mutex per terminal, even if referenced by
++different file descriptors.
++
++Functions marked with @code{term} as an AC-Safety issue are supposed to
++restore terminal settings to their original state, after temporarily
++changing them, but they may fail to do so if cancelled.
++
++@c fixme: at least deferred cancellation should get it right, and would
++@c obviate the restoring bit below, and the qualifier above.
++
++Besides the measures recommended to work around the MT- and AS-Safety
++problem, in order to avert the cancellation problem, disabling
++asynchronous cancellation @emph{and} installing a cleanup handler to
++restore the terminal settings to the original state and to release the
++mutex are recommended.
++
++
++@end itemize
++
++
++@node Other Safety Remarks, , Conditionally Safe Features, POSIX
++@subsubsection Other Safety Remarks
++@cindex Other Safety Remarks
++
++Additional keywords may be attached to functions, indicating features
++that do not make a function unsafe to call, but that may need to be
++taken into account in certain classes of programs:
++
++@itemize @bullet
++
++@item @code{locale}
++@cindex locale
++
++Functions annotated with @code{locale} as an MT-Safety issue read from
++the locale object without any form of synchronization.  Functions
++annotated with @code{locale} called concurrently with locale changes may
++behave in ways that do not correspond to any of the locales active
++during their execution, but an unpredictable mix thereof.
++
++We do not mark these functions as MT- or AS-Unsafe, however, because
++functions that modify the locale object are marked with
++@code{const:locale} and regarded as unsafe.  Being unsafe, the latter
++are not to be called when multiple threads are running or asynchronous
++signals are enabled, and so the locale can be considered effectively
++constant in these contexts, which makes the former safe.
++
++@c Should the locking strategy suggested under @code{const} be used,
++@c failure to guard locale uses is not as fatal as data races in
++@c general: unguarded uses will @emph{not} follow dangling pointers or
++@c access uninitialized, unmapped or recycled memory.  Each access will
++@c read from a consistent locale object that is or was active at some
++@c point during its execution.  Without synchronization, however, it
++@c cannot even be assumed that, after a change in locale, earlier
++@c locales will no longer be used, even after the newly-chosen one is
++@c used in the thread.  Nevertheless, even though unguarded reads from
++@c the locale will not violate type safety, functions that access the
++@c locale multiple times may invoke all sorts of undefined behavior
++@c because of the unexpected locale changes.
++
++
++@item @code{env}
++@cindex env
++
++Functions marked with @code{env} as an MT-Safety issue access the
++environment with @code{getenv} or similar, without any guards to ensure
++safety in the presence of concurrent modifications.
++
++We do not mark these functions as MT- or AS-Unsafe, however, because
++functions that modify the environment are all marked with
++@code{const:env} and regarded as unsafe.  Being unsafe, the latter are
++not to be called when multiple threads are running or asynchronous
++signals are enabled, and so the environment can be considered
++effectively constant in these contexts, which makes the former safe.
++
++
++@item @code{hostid}
++@cindex hostid
++
++The function marked with @code{hostid} as an MT-Safety issue reads from
++the system-wide data structures that hold the ``host ID'' of the
++machine.  These data structures cannot generally be modified atomically.
++Since it is expected that the ``host ID'' will not normally change, the
++function that reads from it (@code{gethostid}) is regarded as safe,
++whereas the function that modifies it (@code{sethostid}) is marked with
++@code{@mtasuconst{:@mtshostid{}}}, indicating it may require special
++care if it is to be called.  In this specific case, the special care
++amounts to system-wide (not merely intra-process) coordination.
++
++
++@item @code{sigintr}
++@cindex sigintr
++
++Functions marked with @code{sigintr} as an MT-Safety issue access the
++@code{_sigintr} internal data structure without any guards to ensure
++safety in the presence of concurrent modifications.
++
++We do not mark these functions as MT- or AS-Unsafe, however, because
++functions that modify the this data structure are all marked with
++@code{const:sigintr} and regarded as unsafe.  Being unsafe, the latter
++are not to be called when multiple threads are running or asynchronous
++signals are enabled, and so the data structure can be considered
++effectively constant in these contexts, which makes the former safe.
++
++
++@item @code{fd}
++@cindex fd
++
++Functions annotated with @code{fd} as an AC-Safety issue may leak file
++descriptors if asynchronous thread cancellation interrupts their
++execution.
++
++Functions that allocate or deallocate file descriptors will generally be
++marked as such.  Even if they attempted to protect the file descriptor
++allocation and deallocation with cleanup regions, allocating a new
++descriptor and storing its number where the cleanup region could release
++it cannot be performed as a single atomic operation.  Similarly,
++releasing the descriptor and taking it out of the data structure
++normally responsible for releasing it cannot be performed atomically.
++There will always be a window in which the descriptor cannot be released
++because it was not stored in the cleanup handler argument yet, or it was
++already taken out before releasing it.  It cannot be taken out after
++release: an open descriptor could mean either that the descriptor still
++has to be closed, or that it already did so but the descriptor was
++reallocated by another thread or signal handler.
++
++Such leaks could be internally avoided, with some performance penalty,
++by temporarily disabling asynchronous thread cancellation.  However,
++since callers of allocation or deallocation functions would have to do
++this themselves, to avoid the same sort of leak in their own layer, it
++makes more sense for the library to assume they are taking care of it
++than to impose a performance penalty that is redundant when the problem
++is solved in upper layers, and insufficient when it is not.
++
++This remark by itself does not cause a function to be regarded as
++AC-Unsafe.  However, cumulative effects of such leaks may pose a
++problem for some programs.  If this is the case, suspending asynchronous
++cancellation for the duration of calls to such functions is recommended.
++
++
++@item @code{mem}
++@cindex mem
++
++Functions annotated with @code{mem} as an AC-Safety issue may leak
++memory if asynchronous thread cancellation interrupts their execution.
++
++The problem is similar to that of file descriptors: there is no atomic
++interface to allocate memory and store its address in the argument to a
++cleanup handler, or to release it and remove its address from that
++argument, without at least temporarily disabling asynchronous
++cancellation, which these functions do not do.
++
++This remark does not by itself cause a function to be regarded as
++generally AC-Unsafe.  However, cumulative effects of such leaks may be
++severe enough for some programs that disabling asynchronous cancellation
++for the duration of calls to such functions may be required.
++
++
++@item @code{cwd}
++@cindex cwd
++
++Functions marked with @code{cwd} as an MT-Safety issue may temporarily
++change the current working directory during their execution, which may
++cause relative pathnames to be resolved in unexpected ways in other
++threads or within asynchronous signal or cancellation handlers.
++
++This is not enough of a reason to mark so-marked functions as MT- or
++AS-Unsafe, but when this behavior is optional (e.g., @code{nftw} with
++@code{FTW_CHDIR}), avoiding the option may be a good alternative to
++using full pathnames or file descriptor-relative (e.g. @code{openat})
++system calls.
++
++
++@item @code{!posix}
++@cindex !posix
++
++This remark, as an MT-, AS- or AC-Safety note to a function, indicates
++the safety status of the function is known to differ from the specified
++status in the POSIX standard.  For example, POSIX does not require a
++function to be Safe, but our implementation is, or vice-versa.
++
++For the time being, the absence of this remark does not imply the safety
++properties we documented are identical to those mandated by POSIX for
++the corresponding functions.
++
++
++@item @code{:identifier}
++@cindex :identifier
++
++Annotations may sometimes be followed by identifiers, intended to group
++several functions that e.g. access the data structures in an unsafe way,
++as in @code{race} and @code{const}, or to provide more specific
++information, such as naming a signal in a function marked with
++@code{sig}.  It is envisioned that it may be applied to @code{lock} and
++@code{corrupt} as well in the future.
++
++In most cases, the identifier will name a set of functions, but it may
++name global objects or function arguments, or identifiable properties or
++logical components associated with them, with a notation such as
++e.g. @code{:buf(arg)} to denote a buffer associated with the argument
++@var{arg}, or @code{:tcattr(fd)} to denote the terminal attributes of a
++file descriptor @var{fd}.
++
++The most common use for identifiers is to provide logical groups of
++functions and arguments that need to be protected by the same
++synchronization primitive in order to ensure safe operation in a given
++context.
++
++
++@item @code{/condition}
++@cindex /condition
++
++Some safety annotations may be conditional, in that they only apply if a
++boolean expression involving arguments, global variables or even the
++underlying kernel evaluates evaluates to true.  Such conditions as
++@code{/hurd} or @code{/!linux!bsd} indicate the preceding marker only
++applies when the underlying kernel is the HURD, or when it is neither
++Linux nor a BSD kernel, respectively.  @code{/!ps} and
++@code{/one_per_line} indicate the preceding marker only applies when
++argument @var{ps} is NULL, or global variable @var{one_per_line} is
++nonzero.
++
++When all marks that render a function unsafe are adorned with such
++conditions, and none of the named conditions hold, then the function can
++be regarded as safe.
++
++
++@end itemize
++
+ 
+ @node Berkeley Unix, SVID, POSIX, Standards and Portability
+ @subsection Berkeley Unix
+@@ -556,19 +1283,59 @@
+ Here is an overview of the contents of the remaining chapters of
+ this manual.
+ 
++@c The chapter overview ordering is:
++@c Error Reporting (2)
++@c Virtual Memory Allocation and Paging (3)
++@c Character Handling (4)
++@c Strings and Array Utilities (5)
++@c Character Set Handling (6)
++@c Locales and Internationalization (7)
++@c Searching and Sorting (9)
++@c Pattern Matching (10)
++@c Input/Output Overview (11)
++@c Input/Output on Streams (12)
++@c Low-level Input/Ooutput (13)
++@c File System Interface (14)
++@c Pipes and FIFOs (15)
++@c Sockets (16)
++@c Low-Level Terminal Interface (17)
++@c Syslog (18)
++@c Mathematics (19)
++@c Aritmetic Functions (20)
++@c Date and Time (21)
++@c Non-Local Exist (23)
++@c Signal Handling (24)
++@c The Basic Program/System Interface (25)
++@c Processes (26)
++@c Job Control (28)
++@c System Databases and Name Service Switch (29)
++@c Users and Groups (30) -- References `User Database' and `Group Database'
++@c System Management (31)
++@c System Configuration Parameters (32)
++@c C Language Facilities in the Library (AA)
++@c Summary of Library Facilities (AB)
++@c Installing (AC)
++@c Library Maintenance (AD)
++
++@c The following chapters need overview text to be added:
++@c Message Translation (8)
++@c Resource Usage And Limitations (22)
++@c Inter-Process Communication (27)
++@c DES Encryption and Password Handling (33)
++@c Debugging support (34)
++@c POSIX Threads (35)
++@c Internal Probes (36)
++@c Platform-specific facilities (AE)
++@c Contributors to (AF)
++@c Free Software Needs Free Documentation (AG)
++@c GNU Lesser General Public License (AH)
++@c GNU Free Documentation License (AI)
++
+ @itemize @bullet
+ @item
+ @ref{Error Reporting}, describes how errors detected by the library
+ are reported.
+ 
+-@item
+-@ref{Language Features}, contains information about library support for
+-standard parts of the C language, including things like the @code{sizeof}
+-operator and the symbolic constant @code{NULL}, how to write functions
+-accepting variable numbers of arguments, and constants describing the
+-ranges and other properties of the numerical types.  There is also a simple
+-debugging mechanism which allows you to put assertions in your code, and
+-have diagnostic messages printed if the tests fail.
+ 
+ @item
+ @ref{Memory}, describes @theglibc{}'s facilities for managing and
+@@ -588,6 +1355,26 @@
+ byte arrays, including operations such as copying and comparison.
+ 
+ @item
++@ref{Character Set Handling}, contains information about manipulating
++characters and strings using character sets larger than will fit in
++the usual @code{char} data type.
++
++@item
++@ref{Locales}, describes how selecting a particular country
++or language affects the behavior of the library.  For example, the locale
++affects collation sequences for strings and how monetary values are
++formatted.
++
++@item
++@ref{Searching and Sorting}, contains information about functions
++for searching and sorting arrays.  You can use these functions on any
++kind of array by providing an appropriate comparison function.
++
++@item
++@ref{Pattern Matching}, presents functions for matching regular expressions
++and shell file name patterns, and for expanding words as the shell does.
++
++@item
+ @ref{I/O Overview}, gives an overall look at the input and output
+ facilities in the library, and contains information about basic concepts
+ such as file names.
+@@ -639,30 +1426,10 @@
+ numbers from strings.
+ 
+ @item
+-@ref{Searching and Sorting}, contains information about functions
+-for searching and sorting arrays.  You can use these functions on any
+-kind of array by providing an appropriate comparison function.
+-
+-@item
+-@ref{Pattern Matching}, presents functions for matching regular expressions
+-and shell file name patterns, and for expanding words as the shell does.
+-
+-@item
+ @ref{Date and Time}, describes functions for measuring both calendar time
+ and CPU time, as well as functions for setting alarms and timers.
+ 
+ @item
+-@ref{Character Set Handling}, contains information about manipulating
+-characters and strings using character sets larger than will fit in
+-the usual @code{char} data type.
+-
+-@item
+-@ref{Locales}, describes how selecting a particular country
+-or language affects the behavior of the library.  For example, the locale
+-affects collation sequences for strings and how monetary values are
+-formatted.
+-
+-@item
+ @ref{Non-Local Exits}, contains descriptions of the @code{setjmp} and
+ @code{longjmp} functions.  These functions provide a facility for
+ @code{goto}-like jumps which can jump from one function to another.
+@@ -708,6 +1475,15 @@
+ compatibility with POSIX.
+ 
+ @item
++@ref{Language Features}, contains information about library support for
++standard parts of the C language, including things like the @code{sizeof}
++operator and the symbolic constant @code{NULL}, how to write functions
++accepting variable numbers of arguments, and constants describing the
++ranges and other properties of the numerical types.  There is also a simple
++debugging mechanism which allows you to put assertions in your code, and
++have diagnostic messages printed if the tests fail.
++
++@item
+ @ref{Library Summary}, gives a summary of all the functions, variables, and
+ macros in the library, with complete data types and function prototypes,
+ and says what standard or system each is derived from.
+diff -urN glibc-2.17-c758a686/manual/ipc.texi glibc-2.17-c758a686/manual/ipc.texi
+--- glibc-2.17-c758a686/manual/ipc.texi	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/manual/ipc.texi	2014-09-12 16:10:06.047792712 -0400
+@@ -0,0 +1,116 @@
++@node Inter-Process Communication, Job Control, Processes, Top
++@c %MENU% All about inter-process communication
++@chapter Inter-Process Communication
++@cindex ipc
++
++This chapter describes the @glibcadj{} inter-process communication primitives.
++
++@menu
++* Semaphores::	Support for creating and managing semaphores
++@end menu
++
++@node Semaphores
++@section Semaphores
++
++@Theglibc{} implements the semaphore APIs as defined in POSIX and
++System V.  Semaphores can be used by multiple processes to coordinate shared
++resources.  The following is a complete list of the semaphore functions provided
++by @theglibc{}.
++
++@c Need descriptions for all of these functions.
++
++@subsection System V Semaphores
++@deftypefun int semctl (int @var{semid}, int @var{semnum}, int @var{cmd});
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{/linux}}}
++@c syscall(ipc) ok
++@c
++@c AC-unsafe because we need to translate the new kernel
++@c semid_ds buf into the userspace layout.  Cancellation
++@c at that point results in an inconsistent userspace
++@c semid_ds.
++@end deftypefun
++
++@deftypefun int semget (key_t @var{key}, int @var{nsems}, int @var{semflg});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c syscall(ipc) ok
++@end deftypefun
++
++@deftypefun int semop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c syscall(ipc) ok
++@end deftypefun
++
++@deftypefun int semtimedop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}, const struct timespec *@var{timeout});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c syscall(ipc) ok
++@end deftypefun
++
++@subsection POSIX Semaphores
++
++@deftypefun int sem_init (sem_t *@var{sem}, int @var{pshared}, unsigned int @var{value});
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}}
++@c Does not atomically update sem_t therefore AC-unsafe
++@c because it can leave sem_t partially initialized.
++@end deftypefun
++
++@deftypefun int sem_destroy (sem_t *@var{sem});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Function does nothing and is therefore always safe.
++@end deftypefun
++
++@deftypefun sem_t *sem_open (const char *@var{name}, int @var{oflag}, ...);
++@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{}}@acunsafe{@acuinit{}}}
++@c pthread_once asuinit
++@c
++@c We are AC-Unsafe becuase we use pthread_once to initialize
++@c a global variable that holds the location of the mounted
++@c shmfs on Linux.
++@end deftypefun
++
++@deftypefun int sem_close (sem_t *@var{sem});
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c lll_lock asulock aculock
++@c twalk mtsrace{:root}
++@c
++@c We are AS-unsafe because we take a non-recursive lock.
++@c We are AC-unsafe because several internal data structures
++@c are not updated atomically.
++@end deftypefun
++
++@deftypefun int sem_unlink (const char *@var{name});
++@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{}}@acunsafe{@acucorrupt{}}}
++@c pthread_once asuinit acucorrupt aculock
++@c mempcpy acucorrupt
++@end deftypefun
++
++@deftypefun int sem_wait (sem_t *@var{sem});
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}}
++@c atomic_increment (nwaiters) acucorrupt
++@c
++@c Given the use atomic operations this function seems
++@c to be AS-safe.  It is AC-unsafe because there is still
++@c a window between atomic_decrement and the pthread_push
++@c of the handler that undoes that operation.  A cancellation
++@c at that point would fail to remove the process from the
++@c waiters count.
++@end deftypefun
++
++@deftypefun int sem_timedwait (sem_t *@var{sem}, const struct timespec *@var{abstime});
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}}
++@c Same safety issues as sem_wait.
++@end deftypefun
++
++@deftypefun int sem_trywait (sem_t *@var{sem});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c All atomic operations are safe in all contexts.
++@end deftypefun
++
++@deftypefun int sem_post (sem_t *@var{sem});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Same safety as sem_trywait.
++@end deftypefun
++
++@deftypefun int sem_getvalue (sem_t *@var{sem}, int *@var{sval});
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Atomic write of a value is safe in all contexts.
++@end deftypefun
+diff -urN glibc-2.17-c758a686/manual/job.texi glibc-2.17-c758a686/manual/job.texi
+--- glibc-2.17-c758a686/manual/job.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/job.texi	2014-09-12 16:10:06.048792709 -0400
+@@ -1,4 +1,4 @@
+-@node Job Control, Name Service Switch, Processes, Top
++@node Job Control, Name Service Switch, Inter-Process Communication, Top
+ @c %MENU% All about process groups and sessions
+ @chapter Job Control
+ 
+@@ -1039,6 +1039,10 @@
+ @comment stdio.h
+ @comment POSIX.1
+ @deftypefun {char *} ctermid (char *@var{string})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This function is a stub by default; the actual implementation, for
++@c posix systems, returns an internal buffer if passed a NULL string,
++@c but the internal buffer is always set to /dev/tty.
+ The @code{ctermid} function returns a string containing the file name of
+ the controlling terminal for the current process.  If @var{string} is
+ not a null pointer, it should be an array that can hold at least
+@@ -1075,6 +1079,12 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun pid_t setsid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is usually a direct syscall, but if a syscall is not available,
++@c we use a stub, or Hurd- and BSD-specific implementations.  The former
++@c uses a mutex and a hurd critical section, and the latter issues a few
++@c syscalls, so both seem safe, the locking on Hurd is safe because of
++@c the critical section.
+ The @code{setsid} function creates a new session.  The calling process
+ becomes the session leader, and is put in a new process group whose
+ process group ID is the same as the process ID of that process.  There
+@@ -1098,6 +1108,8 @@
+ @comment unistd.h
+ @comment SVID
+ @deftypefun pid_t getsid (pid_t @var{pid})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Stub or direct syscall, except on hurd, where it is equally safe.
+ 
+ The @code{getsid} function returns the process group ID of the session
+ leader of the specified process.  If a @var{pid} is @code{0}, the
+@@ -1118,39 +1130,21 @@
+ @end table
+ @end deftypefun
+ 
+-The @code{getpgrp} function has two definitions: one derived from BSD
+-Unix, and one from the POSIX.1 standard.  The feature test macros you
+-have selected (@pxref{Feature Test Macros}) determine which definition
+-you get.  Specifically, you get the BSD version if you define
+-@code{_BSD_SOURCE}; otherwise, you get the POSIX version if you define
+-@code{_POSIX_SOURCE} or @code{_GNU_SOURCE}.  Programs written for old
+-BSD systems will not include @file{unistd.h}, which defines
+-@code{getpgrp} specially under @code{_BSD_SOURCE}.  You must link such
+-programs with the @code{-lbsd-compat} option to get the BSD definition.@refill
+-@pindex -lbsd-compat
+-@pindex bsd-compat
+-@cindex BSD compatibility library
+-
+ @comment unistd.h
+ @comment POSIX.1
+-@deftypefn {POSIX.1 Function} pid_t getpgrp (void)
+-The POSIX.1 definition of @code{getpgrp} returns the process group ID of
++@deftypefun pid_t getpgrp (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++The @code{getpgrp} function returns the process group ID of
+ the calling process.
+-@end deftypefn
+-
+-@comment unistd.h
+-@comment BSD
+-@deftypefn {BSD Function} pid_t getpgrp (pid_t @var{pid})
+-The BSD definition of @code{getpgrp} returns the process group ID of the
+-process @var{pid}.  You can supply a value of @code{0} for the @var{pid}
+-argument to get information about the calling process.
+-@end deftypefn
++@end deftypefun
+ 
+ @comment unistd.h
+-@comment SVID
+-@deftypefn {System V Function} int getpgid (pid_t @var{pid})
++@comment POSIX.1
++@deftypefun int getpgid (pid_t @var{pid})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Stub or direct syscall, except on hurd, where it is equally safe.
+ 
+-@code{getpgid} is the same as the BSD function @code{getpgrp}.  It
++The @code{getpgid} function
+ returns the process group ID of the process @var{pid}.  You can supply a
+ value of @code{0} for the @var{pid} argument to get information about
+ the calling process.
+@@ -1166,11 +1160,13 @@
+ process group ID of the process with ID @var{pid} from the calling
+ process.
+ @end table
+-@end deftypefn
++@end deftypefun
+ 
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int setpgid (pid_t @var{pid}, pid_t @var{pgid})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Stub or direct syscall, except on hurd, where it is equally safe.
+ The @code{setpgid} function puts the process @var{pid} into the process
+ group @var{pgid}.  As a special case, either @var{pid} or @var{pgid} can
+ be zero to indicate the process ID of the calling process.
+@@ -1208,6 +1204,8 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int setpgrp (pid_t @var{pid}, pid_t @var{pgid})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall or setpgid wrapper.
+ This is the BSD Unix name for @code{setpgid}.  Both functions do exactly
+ the same thing.
+ @end deftypefun
+@@ -1230,6 +1228,8 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun pid_t tcgetpgrp (int @var{filedes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Stub, or ioctl on BSD and GNU/Linux.
+ This function returns the process group ID of the foreground process
+ group associated with the terminal open on descriptor @var{filedes}.
+ 
+@@ -1258,6 +1258,8 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int tcsetpgrp (int @var{filedes}, pid_t @var{pgid})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Stub, or ioctl on BSD and GNU/Linux.
+ This function is used to set a terminal's foreground process group ID.
+ The argument @var{filedes} is a descriptor which specifies the terminal;
+ @var{pgid} specifies the process group.  The calling process must be a
+@@ -1297,6 +1299,8 @@
+ @comment termios.h
+ @comment Unix98
+ @deftypefun pid_t tcgetsid (int @var{fildes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Ioctl call, if available, or tcgetpgrp followed by getsid.
+ This function is used to obtain the process group ID of the session
+ for which the terminal specified by @var{fildes} is the controlling terminal.
+ If the call is successful the group ID is returned.  Otherwise the
+diff -urN glibc-2.17-c758a686/manual/lang.texi glibc-2.17-c758a686/manual/lang.texi
+--- glibc-2.17-c758a686/manual/lang.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/lang.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -51,6 +51,8 @@
+ @comment assert.h
+ @comment ISO
+ @deftypefn Macro void assert (int @var{expression})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c assert_fail_base calls asprintf, and fflushes stderr.
+ Verify the programmer's belief that @var{expression} is nonzero at
+ this point in the program.
+ 
+@@ -91,6 +93,8 @@
+ @comment assert.h
+ @comment GNU
+ @deftypefn Macro void assert_perror (int @var{errnum})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c assert_fail_base calls asprintf, and fflushes stderr.
+ Similar to @code{assert}, but verifies that @var{errnum} is zero.
+ 
+ If @code{NDEBUG} is not defined, @code{assert_perror} tests the value of
+@@ -423,6 +427,8 @@
+ @comment stdarg.h
+ @comment ISO
+ @deftypefn {Macro} void va_start (va_list @var{ap}, @var{last-required})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is no longer provided by glibc, but rather by the compiler.
+ This macro initializes the argument pointer variable @var{ap} to point
+ to the first of the optional arguments of the current function;
+ @var{last-required} must be the last required argument to the function.
+@@ -431,6 +437,11 @@
+ @comment stdarg.h
+ @comment ISO
+ @deftypefn {Macro} @var{type} va_arg (va_list @var{ap}, @var{type})
++@safety{@prelim{}@mtsafe{@mtsrace{:ap}}@assafe{}@acunsafe{@acucorrupt{}}}
++@c This is no longer provided by glibc, but rather by the compiler.
++@c Unlike the other va_ macros, that either start/end the lifetime of
++@c the va_list object or don't modify it, this one modifies ap, and it
++@c may leave it in a partially updated state.
+ The @code{va_arg} macro returns the value of the next optional argument,
+ and modifies the value of @var{ap} to point to the subsequent argument.
+ Thus, successive uses of @code{va_arg} return successive optional
+@@ -445,6 +456,8 @@
+ @comment stdarg.h
+ @comment ISO
+ @deftypefn {Macro} void va_end (va_list @var{ap})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is no longer provided by glibc, but rather by the compiler.
+ This ends the use of @var{ap}.  After a @code{va_end} call, further
+ @code{va_arg} calls with the same @var{ap} may not work.  You should invoke
+ @code{va_end} before returning from the function in which @code{va_start}
+@@ -466,6 +479,8 @@
+ @comment ISO
+ @deftypefn {Macro} void va_copy (va_list @var{dest}, va_list @var{src})
+ @deftypefnx {Macro} void __va_copy (va_list @var{dest}, va_list @var{src})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is no longer provided by glibc, but rather by the compiler.
+ The @code{va_copy} macro allows copying of objects of type
+ @code{va_list} even if this is not an integral type.  The argument pointer
+ in @var{dest} is initialized to point to the same argument as the
+@@ -1212,7 +1227,9 @@
+ @comment stddef.h
+ @comment ISO
+ @deftypefn {Macro} size_t offsetof (@var{type}, @var{member})
+-This expands to a integer constant expression that is the offset of the
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is no longer provided by glibc, but rather by the compiler.
++This expands to an integer constant expression that is the offset of the
+ structure member named @var{member} in the structure type @var{type}.
+ For example, @code{offsetof (struct s, elem)} is the offset, in bytes,
+ of the member @code{elem} in a @code{struct s}.
+diff -urN glibc-2.17-c758a686/manual/libc.texinfo glibc-2.17-c758a686/manual/libc.texinfo
+--- glibc-2.17-c758a686/manual/libc.texinfo	2014-09-12 16:08:17.677071123 -0400
++++ glibc-2.17-c758a686/manual/libc.texinfo	2014-09-12 16:10:25.996741462 -0400
+@@ -7,7 +7,7 @@
+ @include macros.texi
+ 
+ @comment Tell install-info what to do.
+-@dircategory Libraries
++@dircategory Software libraries
+ @direntry
+ * Libc: (libc).                 C library.
+ @end direntry
+@@ -46,7 +46,7 @@
+ @value{VERSION} @value{PKGVERSION}.
+ @end ifclear
+ 
+-Copyright @copyright{} 1993--2012 Free Software Foundation, Inc.
++Copyright @copyright{} 1993--2014 Free Software Foundation, Inc.
+ 
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version
+@@ -118,6 +118,7 @@
+ @include chapters.texi
+ 
+ @node Free Manuals, Copying, Contributors, Top
++@appendix Free Software Needs Free Documentation
+ @include freemanuals.texi
+ 
+ @node Copying, Documentation License, Free Manuals, Top
+diff -urN glibc-2.17-c758a686/manual/libc-texinfo.sh glibc-2.17-c758a686/manual/libc-texinfo.sh
+--- glibc-2.17-c758a686/manual/libc-texinfo.sh	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/libc-texinfo.sh	2014-09-12 16:10:06.042792724 -0400
+@@ -91,9 +91,11 @@
+ * Variable Index::               Index of variables and variable-like macros.
+ * File Index::                   Index of programs and files.
+ 
++ @detailmenu
+  --- The Detailed Node Listing ---
+ EOF
+  cat ${OUTDIR}lmenu.$$
++ echo '@end detailmenu'
+  echo '@end menu'; } >${OUTDIR}top-menu.texi.$$
+ mv -f ${OUTDIR}top-menu.texi.$$ ${OUTDIR}top-menu.texi
+ 
+diff -urN glibc-2.17-c758a686/manual/libdl.texi glibc-2.17-c758a686/manual/libdl.texi
+--- glibc-2.17-c758a686/manual/libdl.texi	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/manual/libdl.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -0,0 +1,10 @@
++@c FIXME these are undocumented:
++@c dladdr
++@c dladdr1
++@c dlclose
++@c dlerror
++@c dlinfo
++@c dlmopen
++@c dlopen
++@c dlsym
++@c dlvsym
+diff -urN glibc-2.17-c758a686/manual/llio.texi glibc-2.17-c758a686/manual/llio.texi
+--- glibc-2.17-c758a686/manual/llio.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/llio.texi	2014-09-12 16:10:06.047792712 -0400
+@@ -78,6 +82,7 @@
+ @comment fcntl.h
+ @comment POSIX.1
+ @deftypefun int open (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}])
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ The @code{open} function creates and returns a new file descriptor for
+ the file named by @var{filename}.  Initially, the file position
+ indicator for the file is at the beginning of the file.  The argument
+@@ -164,6 +169,7 @@
+ @comment fcntl.h
+ @comment Unix98
+ @deftypefun int open64 (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}])
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ This function is similar to @code{open}.  It returns a file descriptor
+ which can be used to access the file named by @var{filename}.  The only
+ difference is that on 32 bit systems the file is opened in the
+@@ -178,6 +184,7 @@
+ @comment fcntl.h
+ @comment POSIX.1
+ @deftypefn {Obsolete function} int creat (const char *@var{filename}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ This function is obsolete.  The call:
+ 
+ @smallexample
+@@ -202,6 +209,7 @@
+ @comment fcntl.h
+ @comment Unix98
+ @deftypefn {Obsolete function} int creat64 (const char *@var{filename}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ This function is similar to @code{creat}.  It returns a file descriptor
+ which can be used to access the file named by @var{filename}.  The only
+ the difference is that on 32 bit systems the file is opened in the
+@@ -219,6 +227,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int close (int @var{filedes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ The function @code{close} closes the file descriptor @var{filedes}.
+ Closing a file has the following consequences:
+ 
+@@ -300,6 +309,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun ssize_t read (int @var{filedes}, void *@var{buffer}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{read} function reads up to @var{size} bytes from the file
+ with descriptor @var{filedes}, storing the results in the @var{buffer}.
+ (This is not necessarily a character string, and no terminating null
+@@ -395,6 +405,10 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun ssize_t pread (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is usually a safe syscall.  The sysdeps/posix fallback emulation
++@c is not MT-Safe because it uses lseek, read and lseek back, but is it
++@c used anywhere?
+ The @code{pread} function is similar to the @code{read} function.  The
+ first three arguments are identical, and the return values and error
+ codes also correspond.
+@@ -430,6 +444,10 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun ssize_t pread64 (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off64_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is usually a safe syscall.  The sysdeps/posix fallback emulation
++@c is not MT-Safe because it uses lseek64, read and lseek64 back, but is
++@c it used anywhere?
+ This function is similar to the @code{pread} function.  The difference
+ is that the @var{offset} parameter is of type @code{off64_t} instead of
+ @code{off_t} which makes it possible on 32 bit machines to address
+@@ -447,6 +465,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun ssize_t write (int @var{filedes}, const void *@var{buffer}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{write} function writes up to @var{size} bytes from
+ @var{buffer} to the file with descriptor @var{filedes}.  The data in
+ @var{buffer} is not necessarily a character string and a null character is
+@@ -557,6 +576,10 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun ssize_t pwrite (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is usually a safe syscall.  The sysdeps/posix fallback emulation
++@c is not MT-Safe because it uses lseek, write and lseek back, but is it
++@c used anywhere?
+ The @code{pwrite} function is similar to the @code{write} function.  The
+ first three arguments are identical, and the return values and error codes
+ also correspond.
+@@ -592,6 +615,10 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun ssize_t pwrite64 (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off64_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is usually a safe syscall.  The sysdeps/posix fallback emulation
++@c is not MT-Safe because it uses lseek64, write and lseek64 back, but
++@c is it used anywhere?
+ This function is similar to the @code{pwrite} function.  The difference
+ is that the @var{offset} parameter is of type @code{off64_t} instead of
+ @code{off_t} which makes it possible on 32 bit machines to address
+@@ -624,6 +651,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun off_t lseek (int @var{filedes}, off_t @var{offset}, int @var{whence})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{lseek} function is used to change the file position of the
+ file with descriptor @var{filedes}.
+ 
+@@ -713,6 +741,7 @@
+ @comment unistd.h
+ @comment Unix98
+ @deftypefun off64_t lseek64 (int @var{filedes}, off64_t @var{offset}, int @var{whence})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to the @code{lseek} function.  The difference
+ is that the @var{offset} parameter is of type @code{off64_t} instead of
+ @code{off_t} which makes it possible on 32 bit machines to address
+@@ -825,6 +854,7 @@
+ @comment stdio.h
+ @comment POSIX.1
+ @deftypefun {FILE *} fdopen (int @var{filedes}, const char *@var{opentype})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
+ The @code{fdopen} function returns a new stream for the file descriptor
+ @var{filedes}.
+ 
+@@ -853,6 +883,7 @@
+ @comment stdio.h
+ @comment POSIX.1
+ @deftypefun int fileno (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns the file descriptor associated with the stream
+ @var{stream}.  If an error is detected (for example, if the @var{stream}
+ is not valid) or if @var{stream} does not do I/O to a file,
+@@ -862,6 +893,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int fileno_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fileno_unlocked} function is equivalent to the @code{fileno}
+ function except that it does not implicitly lock the stream if the state
+ is @code{FSETLOCKING_INTERNAL}.
+@@ -1055,7 +1087,7 @@
+ @comment BSD
+ @deftp {Data Type} {struct iovec}
+ 
+-The @code{iovec} structure describes a buffer. It contains two fields:
++The @code{iovec} structure describes a buffer.  It contains two fields:
+ 
+ @table @code
+ 
+@@ -1071,6 +1103,11 @@
+ @comment sys/uio.h
+ @comment BSD
+ @deftypefun ssize_t readv (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c The fallback sysdeps/posix implementation, used even on GNU/Linux
++@c with old kernels that lack a full readv/writev implementation, may
++@c malloc the buffer into which data is read, if the total read size is
++@c too large for alloca.
+ 
+ The @code{readv} function reads data from @var{filedes} and scatters it
+ into the buffers described in @var{vector}, which is taken to be
+@@ -1089,6 +1126,11 @@
+ @comment sys/uio.h
+ @comment BSD
+ @deftypefun ssize_t writev (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c The fallback sysdeps/posix implementation, used even on GNU/Linux
++@c with old kernels that lack a full readv/writev implementation, may
++@c malloc the buffer from which data is written, if the total write size
++@c is too large for alloca.
+ 
+ The @code{writev} function gathers data from the buffers described in
+ @var{vector}, which is taken to be @var{count} structures long, and writes
+@@ -1103,8 +1145,8 @@
+ 
+ @end deftypefun
+ 
+-@c Note - I haven't read this anywhere. I surmised it from my knowledge
+-@c of computer science. Thus, there could be subtleties I'm missing.
++@c Note - I haven't read this anywhere.  I surmised it from my knowledge
++@c of computer science.  Thus, there could be subtleties I'm missing.
+ 
+ Note that if the buffers are small (under about 1kB), high-level streams
+ may be easier to use than these functions.  However, @code{readv} and
+@@ -1149,6 +1191,7 @@
+ @comment sys/mman.h
+ @comment POSIX
+ @deftypefun {void *} mmap (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ The @code{mmap} function creates a new mapping, connected to bytes
+ (@var{offset}) to (@var{offset} + @var{length} - 1) in the file open on
+@@ -1156,8 +1199,8 @@
+ is created, which is not removed by closing the file.
+ 
+ @var{address} gives a preferred starting address for the mapping.
+-@code{NULL} expresses no preference. Any previous mapping at that
+-address is automatically removed. The address you give may still be
++@code{NULL} expresses no preference.  Any previous mapping at that
++address is automatically removed.  The address you give may still be
+ changed, unless you use the @code{MAP_FIXED} flag.
+ 
+ @vindex PROT_READ
+@@ -1221,13 +1264,13 @@
+ 
+ @c Linux has some other MAP_ options, which I have not discussed here.
+ @c MAP_DENYWRITE, MAP_EXECUTABLE and MAP_GROWSDOWN don't seem applicable to
+-@c user programs (and I don't understand the last two). MAP_LOCKED does
++@c user programs (and I don't understand the last two).  MAP_LOCKED does
+ @c not appear to be implemented.
+ 
+ @end vtable
+ 
+-@code{mmap} returns the address of the new mapping, or @math{-1} for an
+-error.
++@code{mmap} returns the address of the new mapping, or
++@code{MAP_FAILED} for an error.
+ 
+ Possible errors include:
+ 
+@@ -1268,6 +1311,9 @@
+ @comment sys/mman.h
+ @comment LFS
+ @deftypefun {void *} mmap64 (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off64_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c The page_shift auto detection when MMAP2_PAGE_SHIFT is -1 (it never
++@c is) would be thread-unsafe.
+ The @code{mmap64} function is equivalent to the @code{mmap} function but
+ the @var{offset} parameter is of type @code{off64_t}.  On 32-bit systems
+ this allows the file associated with the @var{filedes} descriptor to be
+@@ -1284,6 +1330,7 @@
+ @comment sys/mman.h
+ @comment POSIX
+ @deftypefun int munmap (void *@var{addr}, size_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{munmap} removes any memory maps from (@var{addr}) to (@var{addr} +
+ @var{length}).  @var{length} should be the length of the mapping.
+@@ -1310,6 +1357,7 @@
+ @comment sys/mman.h
+ @comment POSIX
+ @deftypefun int msync (void *@var{address}, size_t @var{length}, int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ When using shared mappings, the kernel can write the file at any time
+ before the mapping is removed.  To be certain data has actually been
+@@ -1357,17 +1405,18 @@
+ @comment sys/mman.h
+ @comment GNU
+ @deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ This function can be used to change the size of an existing memory
+ area. @var{address} and @var{length} must cover a region entirely mapped
+-in the same @code{mmap} statement. A new mapping with the same
++in the same @code{mmap} statement.  A new mapping with the same
+ characteristics will be returned with the length @var{new_length}.
+ 
+-One option is possible, @code{MREMAP_MAYMOVE}. If it is given in
++One option is possible, @code{MREMAP_MAYMOVE}.  If it is given in
+ @var{flags}, the system may remove the existing mapping and create a new
+ one of the desired length in another location.
+ 
+-The address of the resulting mapping is returned, or @math{-1}. Possible
++The address of the resulting mapping is returned, or @math{-1}.  Possible
+ error codes include:
+ 
+ @table @code
+@@ -1405,6 +1454,7 @@
+ @comment sys/mman.h
+ @comment POSIX
+ @deftypefun int madvise (void *@var{addr}, size_t @var{length}, int @var{advice})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ This function can be used to provide the system with @var{advice} about
+ the intended usage patterns of the memory region starting at @var{addr}
+@@ -1418,11 +1468,11 @@
+ The region should receive no further special treatment.
+ 
+ @item MADV_RANDOM
+-The region will be accessed via random page references. The kernel
++The region will be accessed via random page references.  The kernel
+ should page-in the minimal number of pages for each page fault.
+ 
+ @item MADV_SEQUENTIAL
+-The region will be accessed via sequential page references. This
++The region will be accessed via sequential page references.  This
+ may cause the kernel to aggressively read-ahead, expecting further
+ sequential references after any page fault within this region.
+ 
+@@ -1471,6 +1521,58 @@
+ @end table
+ @end deftypefun
+ 
++@comment sys/mman.h
++@comment POSIX
++@deftypefn Function int shm_open (const char *@var{name}, int @var{oflag}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c shm_open @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_once(where_is_shmfs) @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
++@c   where_is_shmfs @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    statfs dup ok
++@c    setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c    getmntent_r dup @mtslocale @ascuheap @aculock @acsmem [no @asucorrupt @acucorrupt; exclusive stream]
++@c    strcmp dup ok
++@c    strlen dup ok
++@c    malloc dup @ascuheap @acsmem
++@c    mempcpy dup ok
++@c    endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  strlen dup ok
++@c  strchr dup ok
++@c  mempcpy dup ok
++@c  open dup @acsfd
++@c  fcntl dup ok
++@c  close dup @acsfd
++
++This function returns a file descriptor that can be used to allocate shared
++memory via mmap.  Unrelated processes can use same @var{name} to create or
++open existing shared memory objects.
++
++A @var{name} argument specifies the shared memory object to be opened.
++In @theglibc{} it must be a string smaller than @code{NAME_MAX} bytes starting
++with an optional slash but containing no other slashes.
++
++The semantics of @var{oflag} and @var{mode} arguments is same as in @code{open}.
++
++@code{shm_open} returns the file descriptor on success or @math{-1} on error.
++On failure @code{errno} is set.
++@end deftypefn
++
++@deftypefn Function int shm_unlink (const char *@var{name})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c shm_unlink @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_once(where_is_shmfs) dup @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
++@c  strlen dup ok
++@c  strchr dup ok
++@c  mempcpy dup ok
++@c  unlink dup ok
++
++This function is inverse of @code{shm_open} and removes the object with
++the given @var{name} previously created by @code{shm_open}.
++
++@code{shm_unlink} returns @math{0} on success or @math{-1} on error.
++On failure @code{errno} is set.
++@end deftypefn
++
+ @node Waiting for I/O
+ @section Waiting for Input or Output
+ @cindex waiting for input or output
+@@ -1531,6 +1633,7 @@
+ @comment sys/types.h
+ @comment BSD
+ @deftypefn Macro void FD_ZERO (fd_set *@var{set})
++@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
+ This macro initializes the file descriptor set @var{set} to be the
+ empty set.
+ @end deftypefn
+@@ -1538,6 +1641,9 @@
+ @comment sys/types.h
+ @comment BSD
+ @deftypefn Macro void FD_SET (int @var{filedes}, fd_set *@var{set})
++@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
++@c Setting a bit isn't necessarily atomic, so there's a potential race
++@c here if set is not used exclusively.
+ This macro adds @var{filedes} to the file descriptor set @var{set}.
+ 
+ The @var{filedes} parameter must not have side effects since it is
+@@ -1547,6 +1653,9 @@
+ @comment sys/types.h
+ @comment BSD
+ @deftypefn Macro void FD_CLR (int @var{filedes}, fd_set *@var{set})
++@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
++@c Setting a bit isn't necessarily atomic, so there's a potential race
++@c here if set is not used exclusively.
+ This macro removes @var{filedes} from the file descriptor set @var{set}.
+ 
+ The @var{filedes} parameter must not have side effects since it is
+@@ -1556,6 +1665,7 @@
+ @comment sys/types.h
+ @comment BSD
+ @deftypefn Macro int FD_ISSET (int @var{filedes}, const fd_set *@var{set})
++@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
+ This macro returns a nonzero value (true) if @var{filedes} is a member
+ of the file descriptor set @var{set}, and zero (false) otherwise.
+ 
+@@ -1568,6 +1678,10 @@
+ @comment sys/types.h
+ @comment BSD
+ @deftypefun int select (int @var{nfds}, fd_set *@var{read-fds}, fd_set *@var{write-fds}, fd_set *@var{except-fds}, struct timeval *@var{timeout})
++@safety{@prelim{}@mtsafe{@mtsrace{:read-fds} @mtsrace{:write-fds} @mtsrace{:except-fds}}@assafe{}@acsafe{}}
++@c The select syscall is preferred, but pselect6 may be used instead,
++@c which requires converting timeout to a timespec and back.  The
++@c conversions are not atomic.
+ The @code{select} function blocks the calling process until there is
+ activity on any of the specified sets of file descriptors, or until the
+ timeout period has expired.
+@@ -1669,15 +1783,14 @@
+ 
+ @comment unistd.h
+ @comment X/Open
+-@deftypefun int sync (void)
++@deftypefun void sync (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ A call to this function will not return as long as there is data which
+ has not been written to the device.  All dirty buffers in the kernel will
+ be written and so an overall consistent system can be achieved (if no
+ other process in parallel writes data).
+ 
+ A prototype for @code{sync} can be found in @file{unistd.h}.
+-
+-The return value is zero to indicate no error.
+ @end deftypefun
+ 
+ Programs more often want to ensure that data written to a given file is
+@@ -1687,6 +1800,7 @@
+ @comment unistd.h
+ @comment POSIX
+ @deftypefun int fsync (int @var{fildes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fsync} function can be used to make sure all data associated with
+ the open file @var{fildes} is written to the device associated with the
+ descriptor.  The function call does not return unless all actions have
+@@ -1724,6 +1838,7 @@
+ @comment unistd.h
+ @comment POSIX
+ @deftypefun int fdatasync (int @var{fildes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ When a call to the @code{fdatasync} function returns, it is ensured
+ that all of the file data is written to the device.  For all pending I/O
+ operations, the parts guaranteeing data integrity finished.
+@@ -1925,6 +2040,158 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int aio_read (struct aiocb *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
++@c Calls aio_enqueue_request.
++@c aio_enqueue_request @asulock @ascuheap @aculock @acsmem
++@c  pthread_self ok
++@c  pthread_getschedparam @asulock @aculock
++@c   lll_lock (pthread descriptor's lock) @asulock @aculock
++@c   sched_getparam ok
++@c   sched_getscheduler ok
++@c   lll_unlock @aculock
++@c  pthread_mutex_lock (aio_requests_mutex) @asulock @aculock
++@c  get_elem @ascuheap @acsmem [@asucorrupt @acucorrupt]
++@c   realloc @ascuheap @acsmem
++@c   calloc @ascuheap @acsmem
++@c  aio_create_helper_thread @asulock @ascuheap @aculock @acsmem
++@c   pthread_attr_init ok
++@c   pthread_attr_setdetachstate ok
++@c   pthread_get_minstack ok
++@c   pthread_attr_setstacksize ok
++@c   sigfillset ok
++@c    memset ok
++@c    sigdelset ok
++@c   SYSCALL rt_sigprocmask ok
++@c   pthread_create @asulock @ascuheap @aculock @acsmem
++@c    lll_lock (default_pthread_attr_lock) @asulock @aculock
++@c    alloca/malloc @ascuheap @acsmem
++@c    lll_unlock @aculock
++@c    allocate_stack @asulock @ascuheap @aculock @acsmem
++@c     getpagesize dup
++@c     lll_lock (default_pthread_attr_lock) @asulock @aculock
++@c     lll_unlock @aculock
++@c     _dl_allocate_tls @ascuheap @acsmem
++@c      _dl_allocate_tls_storage @ascuheap @acsmem
++@c       memalign @ascuheap @acsmem
++@c       memset ok
++@c       allocate_dtv dup
++@c       free @ascuheap @acsmem
++@c      allocate_dtv @ascuheap @acsmem
++@c       calloc @ascuheap @acsmem
++@c       INSTALL_DTV ok
++@c     list_add dup
++@c     get_cached_stack
++@c      lll_lock (stack_cache_lock) @asulock @aculock
++@c      list_for_each ok
++@c      list_entry dup
++@c      FREE_P dup
++@c      stack_list_del dup
++@c      stack_list_add dup
++@c      lll_unlock @aculock
++@c      _dl_allocate_tls_init ok
++@c       GET_DTV ok
++@c     mmap ok
++@c     atomic_increment_val ok
++@c     munmap ok
++@c     change_stack_perm ok
++@c      mprotect ok
++@c     mprotect ok
++@c     stack_list_del dup
++@c     _dl_deallocate_tls dup
++@c     munmap ok
++@c    THREAD_COPY_STACK_GUARD ok
++@c    THREAD_COPY_POINTER_GUARD ok
++@c    atomic_exchange_acq ok
++@c    lll_futex_wake ok
++@c    deallocate_stack @asulock @ascuheap @aculock @acsmem
++@c     lll_lock (state_cache_lock) @asulock @aculock
++@c     stack_list_del ok
++@c      atomic_write_barrier ok
++@c      list_del ok
++@c      atomic_write_barrier ok
++@c     queue_stack @ascuheap @acsmem
++@c      stack_list_add ok
++@c       atomic_write_barrier ok
++@c       list_add ok
++@c       atomic_write_barrier ok
++@c      free_stacks @ascuheap @acsmem
++@c       list_for_each_prev_safe ok
++@c       list_entry ok
++@c       FREE_P ok
++@c       stack_list_del dup
++@c       _dl_deallocate_tls dup
++@c       munmap ok
++@c     _dl_deallocate_tls @ascuheap @acsmem
++@c      free @ascuheap @acsmem
++@c     lll_unlock @aculock
++@c    create_thread @asulock @ascuheap @aculock @acsmem
++@c     td_eventword
++@c     td_eventmask
++@c     do_clone @asulock @ascuheap @aculock @acsmem
++@c      PREPARE_CREATE ok
++@c      lll_lock (pd->lock) @asulock @aculock
++@c      atomic_increment ok
++@c      clone ok
++@c      atomic_decrement ok
++@c      atomic_exchange_acq ok
++@c      lll_futex_wake ok
++@c      deallocate_stack dup
++@c      sched_setaffinity ok
++@c      tgkill ok
++@c      sched_setscheduler ok
++@c     atomic_compare_and_exchange_bool_acq ok
++@c     nptl_create_event ok
++@c     lll_unlock (pd->lock) @aculock
++@c    free @ascuheap @acsmem
++@c   pthread_attr_destroy ok (cpuset won't be set, so free isn't called)
++@c  add_request_to_runlist ok
++@c  pthread_cond_signal ok
++@c  aio_free_request ok
++@c  pthread_mutex_unlock @aculock
++
++@c (in the new thread, initiated with clone)
++@c    start_thread ok
++@c     HP_TIMING_NOW ok
++@c     ctype_init @mtslocale
++@c     atomic_exchange_acq ok
++@c     lll_futex_wake ok
++@c     sigemptyset ok
++@c     sigaddset ok
++@c     setjmp ok
++@c     CANCEL_ASYNC -> pthread_enable_asynccancel ok
++@c      do_cancel ok
++@c       pthread_unwind ok
++@c        Unwind_ForcedUnwind or longjmp ok [@ascuheap @acsmem?]
++@c     lll_lock @asulock @aculock
++@c     lll_unlock @asulock @aculock
++@c     CANCEL_RESET -> pthread_disable_asynccancel ok
++@c      lll_futex_wait ok
++@c     ->start_routine ok -----
++@c     call_tls_dtors @asulock @ascuheap @aculock @acsmem
++@c      user-supplied dtor
++@c      rtld_lock_lock_recursive (dl_load_lock) @asulock @aculock
++@c      rtld_lock_unlock_recursive @aculock
++@c      free @ascuheap @acsmem
++@c     nptl_deallocate_tsd @ascuheap @acsmem
++@c      tsd user-supplied dtors ok
++@c      free @ascuheap @acsmem
++@c     libc_thread_freeres
++@c      libc_thread_subfreeres ok
++@c     atomic_decrement_and_test ok
++@c     td_eventword ok
++@c     td_eventmask ok
++@c     atomic_compare_exchange_bool_acq ok
++@c     nptl_death_event ok
++@c     lll_robust_dead ok
++@c     getpagesize ok
++@c     madvise ok
++@c     free_tcb @asulock @ascuheap @aculock @acsmem
++@c      free @ascuheap @acsmem
++@c      deallocate_stack @asulock @ascuheap @aculock @acsmem
++@c     lll_futex_wait ok
++@c     exit_thread_inline ok
++@c      syscall(exit) ok
++
+ This function initiates an asynchronous read operation.  It
+ immediately returns after the operation was enqueued or when an
+ error was encountered.
+@@ -1989,7 +2256,8 @@
+ 
+ @comment aio.h
+ @comment Unix98
+-@deftypefun int aio_read64 (struct aiocb *@var{aiocbp})
++@deftypefun int aio_read64 (struct aiocb64 *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function is similar to the @code{aio_read} function.  The only
+ difference is that on @w{32 bit} machines, the file descriptor should
+ be opened in the large file mode.  Internally, @code{aio_read64} uses
+@@ -2008,13 +2276,14 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int aio_write (struct aiocb *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function initiates an asynchronous write operation.  The function
+ call immediately returns after the operation was enqueued or if before
+ this happens an error was encountered.
+ 
+ The first @code{aiocbp->aio_nbytes} bytes from the buffer starting at
+ @code{aiocbp->aio_buf} are written to the file for which
+-@code{aiocbp->aio_fildes} is an descriptor, starting at the absolute
++@code{aiocbp->aio_fildes} is a descriptor, starting at the absolute
+ position @code{aiocbp->aio_offset} in the file.
+ 
+ If prioritized I/O is supported by the platform, the
+@@ -2073,7 +2342,8 @@
+ 
+ @comment aio.h
+ @comment Unix98
+-@deftypefun int aio_write64 (struct aiocb *@var{aiocbp})
++@deftypefun int aio_write64 (struct aiocb64 *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function is similar to the @code{aio_write} function.  The only
+ difference is that on @w{32 bit} machines the file descriptor should
+ be opened in the large file mode.  Internally @code{aio_write64} uses
+@@ -2095,6 +2365,12 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int lio_listio (int @var{mode}, struct aiocb *const @var{list}[], int @var{nent}, struct sigevent *@var{sig})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
++@c Call lio_listio_internal, that takes the aio_requests_mutex lock and
++@c enqueues each request.  Then, it waits for notification or prepares
++@c for it before releasing the lock.  Even though it performs memory
++@c allocation and locking of its own, it doesn't add any classes of
++@c safety issues that aren't already covered by aio_enqueue_request.
+ The @code{lio_listio} function can be used to enqueue an arbitrary
+ number of read and write requests at one time.  The requests can all be
+ meant for the same file, all for different files or every solution in
+@@ -2177,7 +2453,8 @@
+ 
+ @comment aio.h
+ @comment Unix98
+-@deftypefun int lio_listio64 (int @var{mode}, struct aiocb *const @var{list}, int @var{nent}, struct sigevent *@var{sig})
++@deftypefun int lio_listio64 (int @var{mode}, struct aiocb64 *const @var{list}[], int @var{nent}, struct sigevent *@var{sig})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function is similar to the @code{lio_listio} function.  The only
+ difference is that on @w{32 bit} machines, the file descriptor should
+ be opened in the large file mode.  Internally, @code{lio_listio64} uses
+@@ -2206,6 +2483,7 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int aio_error (const struct aiocb *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function determines the error state of the request described by the
+ @code{struct aiocb} variable pointed to by @var{aiocbp}.  If the
+ request has not yet terminated the value returned is always
+@@ -2227,6 +2505,7 @@
+ @comment aio.h
+ @comment Unix98
+ @deftypefun int aio_error64 (const struct aiocb64 *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{aio_error} with the only difference
+ that the argument is a reference to a variable of type @code{struct
+ aiocb64}.
+@@ -2239,7 +2518,8 @@
+ 
+ @comment aio.h
+ @comment POSIX.1b
+-@deftypefun ssize_t aio_return (const struct aiocb *@var{aiocbp})
++@deftypefun ssize_t aio_return (struct aiocb *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function can be used to retrieve the return status of the operation
+ carried out by the request described in the variable pointed to by
+ @var{aiocbp}.  As long as the error status of this request as returned
+@@ -2262,7 +2542,8 @@
+ 
+ @comment aio.h
+ @comment Unix98
+-@deftypefun int aio_return64 (const struct aiocb64 *@var{aiocbp})
++@deftypefun ssize_t aio_return64 (struct aiocb64 *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{aio_return} with the only difference
+ that the argument is a reference to a variable of type @code{struct
+ aiocb64}.
+@@ -2291,6 +2572,9 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int aio_fsync (int @var{op}, struct aiocb *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
++@c After fcntl to check that the FD is open, it calls
++@c aio_enqueue_request.
+ Calling this function forces all I/O operations operating queued at the
+ time of the function call operating on the file descriptor
+ @code{aiocbp->aio_fildes} into the synchronized I/O completion state
+@@ -2322,8 +2606,7 @@
+ @item EAGAIN
+ The request could not be enqueued due to temporary lack of resources.
+ @item EBADF
+-The file descriptor @code{aiocbp->aio_fildes} is not valid or not open
+-for writing.
++The file descriptor @code{@var{aiocbp}->aio_fildes} is not valid.
+ @item EINVAL
+ The implementation does not support I/O synchronization or the @var{op}
+ parameter is other than @code{O_DSYNC} and @code{O_SYNC}.
+@@ -2339,6 +2622,7 @@
+ @comment aio.h
+ @comment Unix98
+ @deftypefun int aio_fsync64 (int @var{op}, struct aiocb64 *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function is similar to @code{aio_fsync} with the only difference
+ that the argument is a reference to a variable of type @code{struct
+ aiocb64}.
+@@ -2365,6 +2649,9 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int aio_suspend (const struct aiocb *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c Take aio_requests_mutex, set up waitlist and requestlist, wait
++@c for completion or timeout, and release the mutex.
+ When calling this function, the calling thread is suspended until at
+ least one of the requests pointed to by the @var{nent} elements of the
+ array @var{list} has completed.  If any of the requests has already
+@@ -2403,6 +2690,7 @@
+ @comment aio.h
+ @comment Unix98
+ @deftypefun int aio_suspend64 (const struct aiocb64 *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ This function is similar to @code{aio_suspend} with the only difference
+ that the argument is a reference to a variable of type @code{struct
+ aiocb64}.
+@@ -2430,6 +2718,16 @@
+ @comment aio.h
+ @comment POSIX.1b
+ @deftypefun int aio_cancel (int @var{fildes}, struct aiocb *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
++@c After fcntl to check the fd is open, hold aio_requests_mutex, call
++@c aio_find_req_fd, aio_remove_request, then aio_notify and
++@c aio_free_request each request before releasing the lock.
++@c aio_notify calls aio_notify_only and free, besides cond signal or
++@c similar.  aio_notify_only calls pthread_attr_init,
++@c pthread_attr_setdetachstate, malloc, pthread_create,
++@c notify_func_wrapper, aio_sigqueue, getpid, raise.
++@c notify_func_wraper calls aio_start_notify_thread, free and then the
++@c notifier function.
+ The @code{aio_cancel} function can be used to cancel one or more
+ outstanding requests.  If the @var{aiocbp} parameter is @code{NULL}, the
+ function tries to cancel all of the outstanding requests which would process
+@@ -2477,6 +2775,7 @@
+ @comment aio.h
+ @comment Unix98
+ @deftypefun int aio_cancel64 (int @var{fildes}, struct aiocb64 *@var{aiocbp})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function is similar to @code{aio_cancel} with the only difference
+ that the argument is a reference to a variable of type @code{struct
+ aiocb64}.
+@@ -2532,6 +2831,8 @@
+ @comment aio.h
+ @comment GNU
+ @deftypefun void aio_init (const struct aioinit *@var{init})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c All changes to global objects are guarded by aio_requests_mutex.
+ This function must be called before any other AIO function.  Calling it
+ is completely voluntary, as it is only meant to help the AIO
+ implementation perform better.
+@@ -2566,6 +2867,7 @@
+ @comment fcntl.h
+ @comment POSIX.1
+ @deftypefun int fcntl (int @var{filedes}, int @var{command}, @dots{})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{fcntl} function performs the operation specified by
+ @var{command} on the file descriptor @var{filedes}.  Some commands
+ require additional arguments to be supplied.  These additional arguments
+@@ -2592,7 +2894,7 @@
+ Set flags associated with the open file.  @xref{File Status Flags}.
+ 
+ @item F_GETLK
+-Get a file lock.  @xref{File Locks}.
++Test a file lock.  @xref{File Locks}.
+ 
+ @item F_SETLK
+ Set or clear a file lock.  @xref{File Locks}.
+@@ -2648,6 +2962,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int dup (int @var{old})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function copies descriptor @var{old} to the first available
+ descriptor number (the first number not currently open).  It is
+ equivalent to @code{fcntl (@var{old}, F_DUPFD, 0)}.
+@@ -2656,6 +2971,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int dup2 (int @var{old}, int @var{new})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function copies the descriptor @var{old} to descriptor number
+ @var{new}.
+ 
+@@ -2929,19 +3245,19 @@
+ But most programs will want to be portable to other POSIX.1 systems and
+ should use the POSIX.1 names above instead.
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment GNU
+ @deftypevr Macro int O_READ
+ Open the file for reading.  Same as @code{O_RDONLY}; only defined on GNU.
+ @end deftypevr
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment GNU
+ @deftypevr Macro int O_WRITE
+ Open the file for writing.  Same as @code{O_WRONLY}; only defined on GNU.
+ @end deftypevr
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment GNU
+ @deftypevr Macro int O_EXEC
+ Open the file for executing.  Only defined on GNU.
+@@ -3045,7 +3361,7 @@
+ The following three file name translation flags exist only on
+ @gnuhurdsystems{}.
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment GNU
+ @deftypevr Macro int O_IGNORE_CTTY
+ Do not recognize the named file as the controlling terminal, even if it
+@@ -3054,7 +3370,7 @@
+ @xref{Job Control}.
+ @end deftypevr
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment GNU
+ @deftypevr Macro int O_NOLINK
+ If the named file is a symbolic link, open the link itself instead of
+@@ -3063,7 +3379,7 @@
+ @cindex symbolic link, opening
+ @end deftypevr
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment GNU
+ @deftypevr Macro int O_NOTRANS
+ If the named file is specially translated, do not invoke the translator.
+@@ -3095,7 +3411,7 @@
+ The remaining operating modes are BSD extensions.  They exist only
+ on some systems.  On other systems, these macros are not defined.
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment BSD
+ @deftypevr Macro int O_SHLOCK
+ Acquire a shared lock on the file, as with @code{flock}.
+@@ -3106,7 +3422,7 @@
+ the lock on the new file first.
+ @end deftypevr
+ 
+-@comment fcntl.h
++@comment fcntl.h (optional)
+ @comment BSD
+ @deftypevr Macro int O_EXLOCK
+ Acquire an exclusive lock on the file, as with @code{flock}.
+@@ -3599,7 +4134,7 @@
+ @gnusystems{} can handle most input/output operations on many different
+ devices and objects in terms of a few file primitives - @code{read},
+ @code{write} and @code{lseek}.  However, most devices also have a few
+-peculiar operations which do not fit into this model. Such as:
++peculiar operations which do not fit into this model.  Such as:
+ 
+ @itemize @bullet
+ 
+@@ -3634,6 +4169,7 @@
+ @comment sys/ioctl.h
+ @comment BSD
+ @deftypefun int ioctl (int @var{filedes}, int @var{command}, @dots{})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ The @code{ioctl} function performs the generic I/O operation
+ @var{command} on @var{filedes}.
+@@ -3653,3 +4189,6 @@
+ Most IOCTLs are OS-specific and/or only used in special system utilities,
+ and are thus beyond the scope of this document.  For an example of the use
+ of an IOCTL, see @ref{Out-of-Band Data}.
++
++@c FIXME this is undocumented:
++@c dup3
+diff -urN glibc-2.17-c758a686/manual/locale.texi glibc-2.17-c758a686/manual/locale.texi
+--- glibc-2.17-c758a686/manual/locale.texi	2014-09-12 16:08:18.266069610 -0400
++++ glibc-2.17-c758a686/manual/locale.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -231,6 +231,136 @@
+ @comment locale.h
+ @comment ISO
+ @deftypefun {char *} setlocale (int @var{category}, const char *@var{locale})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtslocale{}} @mtsenv{}}@asunsafe{@asuinit{} @asulock{} @ascuheap{} @asucorrupt{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c Uses of the global locale object are unguarded in functions that
++@c ought to be MT-Safe, so we're ruling out the use of this function
++@c once threads are started.  It takes a write lock itself, but it may
++@c return a pointer loaded from the global locale object after releasing
++@c the lock, or before taking it.
++@c setlocale @mtasuconst:@mtslocale @mtsenv @asuinit @ascuheap @asulock @asucorrupt @acucorrupt @acsmem @acsfd @aculock
++@c  libc_rwlock_wrlock @asulock @aculock
++@c  libc_rwlock_unlock @aculock
++@c  getenv LOCPATH @mtsenv
++@c  malloc @ascuheap @acsmem
++@c  free @ascuheap @acsmem
++@c  new_composite_name ok
++@c  setdata ok
++@c  setname ok
++@c  _nl_find_locale @mtsenv @asuinit @ascuheap @asulock @asucorrupt @acucorrupt @acsmem @acsfd @aculock
++@c   getenv LC_ALL and LANG @mtsenv
++@c   _nl_load_locale_from_archive @ascuheap @acucorrupt @acsmem @acsfd
++@c    sysconf _SC_PAGE_SIZE ok
++@c    _nl_normalize_codeset @ascuheap @acsmem
++@c     isalnum_l ok (C locale)
++@c     isdigit_l ok (C locale)
++@c     malloc @ascuheap @acsmem
++@c     tolower_l ok (C locale)
++@c    open_not_cancel_2 @acsfd
++@c    fxstat64 ok
++@c    close_not_cancel_no_status ok
++@c    __mmap64 @acsmem
++@c    calculate_head_size ok
++@c    __munmap ok
++@c    compute_hashval ok
++@c    qsort dup @acucorrupt
++@c     rangecmp ok
++@c    malloc @ascuheap @acsmem
++@c    strdup @ascuheap @acsmem
++@c    _nl_intern_locale_data @ascuheap @acsmem
++@c     malloc @ascuheap @acsmem
++@c     free @ascuheap @acsmem
++@c   _nl_expand_alias @ascuheap @asulock @acsmem @acsfd @aculock
++@c    libc_lock_lock @asulock @aculock
++@c    bsearch ok
++@c     alias_compare ok
++@c      strcasecmp ok
++@c    read_alias_file @ascuheap @asulock @acsmem @acsfd @aculock
++@c     fopen @ascuheap @asulock @acsmem @acsfd @aculock
++@c     fsetlocking ok
++@c     feof_unlocked ok
++@c     fgets_unlocked ok
++@c     isspace ok (locale mutex is locked)
++@c     extend_alias_table @ascuheap @acsmem
++@c      realloc @ascuheap @acsmem
++@c     realloc @ascuheap @acsmem
++@c     fclose @ascuheap @asulock @acsmem @acsfd @aculock
++@c     qsort @ascuheap @acsmem
++@c      alias_compare dup
++@c    libc_lock_unlock @aculock
++@c   _nl_explode_name @ascuheap @acsmem
++@c    _nl_find_language ok
++@c    _nl_normalize_codeset dup @ascuheap @acsmem
++@c   _nl_make_l10nflist @ascuheap @acsmem
++@c    malloc @ascuheap @acsmem
++@c    free @ascuheap @acsmem
++@c    __argz_stringify ok
++@c    __argz_count ok
++@c    __argz_next ok
++@c   _nl_load_locale @ascuheap @acsmem @acsfd
++@c    open_not_cancel_2 @acsfd
++@c    __fxstat64 ok
++@c    close_not_cancel_no_status ok
++@c    mmap @acsmem
++@c    malloc @ascuheap @acsmem
++@c    read_not_cancel ok
++@c    free @ascuheap @acsmem
++@c    _nl_intern_locale_data dup @ascuheap @acsmem
++@c    munmap ok
++@c   __gconv_compare_alias @asuinit @ascuheap @asucorrupt @asulock @acsmem@acucorrupt @acsfd @aculock
++@c    __gconv_read_conf @asuinit @ascuheap @asucorrupt @asulock @acsmem@acucorrupt @acsfd @aculock
++@c     (libc_once-initializes gconv_cache and gconv_path_envvar; they're
++@c      never modified afterwards)
++@c     __gconv_load_cache @ascuheap @acsmem @acsfd
++@c      getenv GCONV_PATH @mtsenv
++@c      open_not_cancel @acsfd
++@c      __fxstat64 ok
++@c      close_not_cancel_no_status ok
++@c      mmap @acsmem
++@c      malloc @ascuheap @acsmem
++@c      __read ok
++@c      free @ascuheap @acsmem
++@c      munmap ok
++@c     __gconv_get_path @asulock @ascuheap @aculock @acsmem @acsfd
++@c      getcwd @ascuheap @acsmem @acsfd
++@c      libc_lock_lock @asulock @aculock
++@c      malloc @ascuheap @acsmem
++@c      strtok_r ok
++@c      libc_lock_unlock @aculock
++@c     read_conf_file @ascuheap @asucorrupt @asulock @acsmem @acucorrupt @acsfd @aculock
++@c      fopen @ascuheap @asulock @acsmem @acsfd @aculock
++@c      fsetlocking ok
++@c      feof_unlocked ok
++@c      getdelim @ascuheap @asucorrupt @acsmem @acucorrupt
++@c      isspace_l ok (C locale)
++@c      add_alias
++@c       isspace_l ok (C locale)
++@c       toupper_l ok (C locale)
++@c       add_alias2 dup @ascuheap @acucorrupt @acsmem
++@c      add_module @ascuheap @acsmem
++@c       isspace_l ok (C locale)
++@c       toupper_l ok (C locale)
++@c       strtol ok (@mtslocale but we hold the locale lock)
++@c       tfind __gconv_alias_db ok
++@c        __gconv_alias_compare dup ok
++@c       calloc @ascuheap @acsmem
++@c       insert_module dup @ascuheap
++@c     __tfind ok (because the tree is read only by then)
++@c      __gconv_alias_compare dup ok
++@c     insert_module @ascuheap
++@c      free @ascuheap
++@c     add_alias2 @ascuheap @acucorrupt @acsmem
++@c      detect_conflict ok, reads __gconv_modules_db
++@c      malloc @ascuheap @acsmem
++@c      tsearch __gconv_alias_db @ascuheap @acucorrupt @acsmem [exclusive tree, no @mtsrace]
++@c       __gconv_alias_compare ok
++@c      free @ascuheap
++@c    __gconv_compare_alias_cache ok
++@c     find_module_idx ok
++@c    do_lookup_alias ok
++@c     __tfind ok (because the tree is read only by then)
++@c      __gconv_alias_compare ok
++@c   strndup @ascuheap @acsmem
++@c   strcasecmp_l ok (C locale)
+ The function @code{setlocale} sets the current locale for category
+ @var{category} to @var{locale}.
+ 
+@@ -496,6 +626,10 @@
+ @comment locale.h
+ @comment ISO
+ @deftypefun {struct lconv *} localeconv (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:localeconv} @mtslocale{}}@asunsafe{}@acsafe{}}
++@c This function reads from multiple components of the locale object,
++@c without synchronization, while writing to the static buffer it uses
++@c as the return value.
+ The @code{localeconv} function returns a pointer to a structure whose
+ components contain information about how numeric and monetary values
+ should be formatted in the current locale.
+@@ -762,6 +896,9 @@
+ @comment langinfo.h
+ @comment XOPEN
+ @deftypefun {char *} nl_langinfo (nl_item @var{item})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c It calls _nl_langinfo_l with the current locale, which returns a
++@c pointer into constant strings defined in locale data structures.
+ The @code{nl_langinfo} function can be used to access individual
+ elements of the locale categories.  Unlike the @code{localeconv}
+ function, which returns all the information, @code{nl_langinfo}
+@@ -1056,6 +1193,11 @@
+ numbers according to these rules.
+ 
+ @deftypefun ssize_t strfmon (char *@var{s}, size_t @var{maxsize}, const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c It (and strfmon_l) both call vstrfmon_l, which, besides accessing the
++@c locale object passed to it, accesses the active locale through
++@c isdigit (but to_digit assumes ASCII digits only).  It may call
++@c __printf_fp (@mtslocale @ascuheap @acsmem) and guess_grouping (safe).
+ The @code{strfmon} function is similar to the @code{strftime} function
+ in that it takes a buffer, its size, a format string,
+ and values to write into the buffer as text in a form specified
+@@ -1267,6 +1409,10 @@
+ @comment GNU
+ @comment stdlib.h
+ @deftypefun int rpmatch (const char *@var{response})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c Calls nl_langinfo with YESEXPR and NOEXPR, triggering @mtslocale but
++@c it's regcomp and regexec that bring in all of the safety issues.
++@c regfree is also called, but it doesn't introduce any further issues.
+ The function @code{rpmatch} checks the string in @var{response} whether
+ or not it is a correct yes-or-no answer and if yes, which one.  The
+ check uses the @code{YESEXPR} and @code{NOEXPR} data in the
+@@ -1318,5 +1464,5 @@
+   free (line);
+ @end smallexample
+ 
+-Note that the loop continues until an read error is detected or until a
++Note that the loop continues until a read error is detected or until a
+ definitive (positive or negative) answer is read.
+diff -urN glibc-2.17-c758a686/manual/macros.texi glibc-2.17-c758a686/manual/macros.texi
+--- glibc-2.17-c758a686/manual/macros.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/macros.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -35,16 +35,225 @@
+ GNU/Linux and GNU/Hurd systems
+ @end macro
+ 
+-@c Descrption applying to GNU/Hurd systems; that is, systems using the
++@c Description applying to GNU/Hurd systems; that is, systems using the
+ @c GNU Hurd with the GNU C Library.
+ @macro gnuhurdsystems
+ GNU/Hurd systems
+ @end macro
+ 
+-@c Descrption applying to GNU/Linux systems; that is, systems using
++@c Description applying to GNU/Linux systems; that is, systems using
+ @c the Linux kernel with the GNU C Library.
+ @macro gnulinuxsystems
+ GNU/Linux systems
+ @end macro
+ 
++@c Document the safety functions as preliminary.  It does NOT expand its
++@c comments.
++@macro prelim {comments}
++Preliminary:
++
++@end macro
++@c Document a function as thread safe.
++@macro mtsafe {comments}
++| MT-Safe \comments\
++
++@end macro
++@c Document a function as thread unsafe.
++@macro mtunsafe {comments}
++| MT-Unsafe \comments\
++
++@end macro
++@c Document a function as safe for use in asynchronous signal handlers.
++@macro assafe {comments}
++| AS-Safe \comments\
++
++@end macro
++@c Document a function as unsafe for use in asynchronous signal
++@c handlers.  This distinguishes unmarked functions, for which this
++@c property has not been assessed, from those that have been analyzed.
++@macro asunsafe {comments}
++| AS-Unsafe \comments\
++
++@end macro
++@c Document a function as safe for use when asynchronous cancellation is
++@c enabled.
++@macro acsafe {comments}
++| AC-Safe \comments\
++
++@end macro
++@c Document a function as unsafe for use when asynchronous cancellation
++@c is enabled.  This distinguishes unmarked functions, for which this
++@c property has not been assessed, from those that have been analyzed.
++@macro acunsafe {comments}
++| AC-Unsafe \comments\
++
++@end macro
++@c Format safety properties without referencing the section of the
++@c definitions.  To be used in the definitions of the properties
++@c themselves.
++@macro sampsafety {notes}
++@noindent
++\notes\|
++
++
++@end macro
++@c Format the safety properties of a function.
++@macro safety {notes}
++\notes\| @xref{POSIX Safety Concepts}.
++
++
++@end macro
++@c Function is MT- and AS-Unsafe due to an internal race.
++@macro mtasurace {comments}
++race\comments\
++@end macro
++@c Function is AS-Unsafe due to an internal race.
++@macro asurace {comments}
++race\comments\
++@end macro
++@c Function is MT-Safe, but with potential race on user-supplied object
++@c of opaque type.
++@macro mtsrace {comments}
++race\comments\
++@end macro
++@c Function is MT- and AS-Unsafe for modifying an object that is decreed
++@c MT-constant due to MT-Unsafe accesses elsewhere.
++@macro mtasuconst {comments}
++const\comments\
++@end macro
++@c Function accesses the assumed-constant locale object.
++@macro mtslocale {comments}
++locale\comments\
++@end macro
++@c Function accesses the assumed-constant environment.
++@macro mtsenv {comments}
++env\comments\
++@end macro
++@c Function accesses the assumed-constant hostid.
++@macro mtshostid {comments}
++hostid\comments\
++@end macro
++@c Function accesses the assumed-constant _sigintr variable.
++@macro mtssigintr {comments}
++sigintr\comments\
++@end macro
++@c Function performs MT-Unsafe initialization at the first call.
++@macro mtuinit {comments}
++init\comments\
++@end macro
++@c Function performs libc_once AS-Unsafe initialization.
++@macro asuinit {comments}
++init\comments\
++@end macro
++@c Function performs libc_once AC-Unsafe initialization.
++@macro acuinit {comments}
++init\comments\
++@end macro
++@c Function is AS-Unsafe because it takes a non-recursive mutex that may
++@c already be held by the function interrupted by the signal.
++@macro asulock {comments}
++lock\comments\
++@end macro
++@c Function is AC-Unsafe because it may fail to release a mutex.
++@macro aculock {comments}
++lock\comments\
++@end macro
++@c Function is AS-Unsafe because some data structure may be inconsistent
++@c due to an ongoing updated interrupted by a signal.
++@macro asucorrupt {comments}
++corrupt\comments\
++@end macro
++@c Function is AC-Unsafe because some data structure may be left
++@c inconsistent when cancelled.
++@macro acucorrupt {comments}
++corrupt\comments\
++@end macro
++@c Function is AS- and AC-Unsafe because of malloc/free.
++@macro ascuheap {comments}
++heap\comments\
++@end macro
++@c Function is AS-Unsafe because of malloc/free.
++@macro asuheap {comments}
++heap\comments\
++@end macro
++@c Function is AS- and AC-Unsafe because of dlopen/dlclose.
++@macro ascudlopen {comments}
++dlopen\comments\
++@end macro
++@c Function is AS- and AC-Unsafe because of unknown plugins.
++@macro ascuplugin {comments}
++plugin\comments\
++@end macro
++@c Function is AS- and AC-Unsafe because of i18n.
++@macro ascuintl {comments}
++i18n\comments\
++@end macro
++@c Function is AS--Unsafe because of i18n.
++@macro asuintl {comments}
++i18n\comments\
++@end macro
++@c Function may leak file descriptors if async-cancelled.
++@macro acsfd {comments}
++fd\comments\
++@end macro
++@c Function may leak memory if async-cancelled.
++@macro acsmem {comments}
++mem\comments\
++@end macro
++@c Function is unsafe due to temporary overriding a signal handler.
++@macro mtascusig {comments}
++sig\comments\
++@end macro
++@c Function is MT- and AS-Unsafe due to temporarily changing attributes
++@c of the controlling terminal.
++@macro mtasuterm {comments}
++term\comments\
++@end macro
++@c Function is AC-Unsafe for failing to restore attributes of the
++@c controlling terminal.
++@macro acuterm {comments}
++term\comments\
++@end macro
++@c Function sets timers atomically.
++@macro mtstimer {comments}
++timer\comments\
++@end macro
++@c Function sets and restores timers.
++@macro mtascutimer {comments}
++timer\comments\
++@end macro
++@c Function temporarily changes the current working directory.
++@macro mtasscwd {comments}
++cwd\comments\
++@end macro
++@c Function may fail to restore to the original current working
++@c directory after temporarily changing it.
++@macro acscwd {comments}
++cwd\comments\
++@end macro
++@c Function is MT-Safe while POSIX says it needn't be MT-Safe.
++@macro mtsposix {comments}
++!posix\comments\
++@end macro
++@c Function is MT-Unsafe while POSIX says it should be MT-Safe.
++@macro mtuposix {comments}
++!posix\comments\
++@end macro
++@c Function is AS-Safe while POSIX says it needn't be AS-Safe.
++@macro assposix {comments}
++!posix\comments\
++@end macro
++@c Function is AS-Unsafe while POSIX says it should be AS-Safe.
++@macro asuposix {comments}
++!posix\comments\
++@end macro
++@c Function is AC-Safe while POSIX says it needn't be AC-Safe.
++@macro acsposix {comments}
++!posix\comments\
++@end macro
++@c Function is AC-Unsafe while POSIX says it should be AC-Safe.
++@macro acuposix {comments}
++!posix\comments\
++@end macro
++
+ @end ifclear
+diff -urN glibc-2.17-c758a686/manual/maint.texi glibc-2.17-c758a686/manual/maint.texi
+--- glibc-2.17-c758a686/manual/maint.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/maint.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -316,7 +316,7 @@
+ The top-level @file{configure} script uses the shell @code{.} command to
+ read the @file{configure} file in each system-dependent directory
+ chosen, in order.  The @file{configure} files are often generated from
+-@file{configure.in} files using Autoconf.
++@file{configure.ac} files using Autoconf.
+ 
+ A system-dependent @file{configure} script will usually add things to
+ the shell variables @samp{DEFS} and @samp{config_vars}; see the
+@@ -329,14 +329,14 @@
+ just @w{@samp{--with-@var{package}}} (no argument), then it sets
+ @w{@samp{with_@var{package}}} to @samp{yes}.
+ 
+-@item configure.in
++@item configure.ac
+ 
+ This file is an Autoconf input fragment to be processed into the file
+ @file{configure} in this subdirectory.  @xref{Introduction,,,
+ autoconf.info, Autoconf: Generating Automatic Configuration Scripts},
+ for a description of Autoconf.  You should write either @file{configure}
+-or @file{configure.in}, but not both.  The first line of
+-@file{configure.in} should invoke the @code{m4} macro
++or @file{configure.ac}, but not both.  The first line of
++@file{configure.ac} should invoke the @code{m4} macro
+ @samp{GLIBC_PROVIDES}.  This macro does several @code{AC_PROVIDE} calls
+ for Autoconf macros which are used by the top-level @file{configure}
+ script; without this, those macros might be invoked again unnecessarily
+@@ -424,7 +424,7 @@
+ files specific to those machine architectures, but not specific to any
+ particular operating system.  There might be subdirectories for
+ specializations of those architectures, such as
+-@w{@file{sysdeps/m68k/68020}}. Code which is specific to the
++@w{@file{sysdeps/m68k/68020}}.  Code which is specific to the
+ floating-point coprocessor used with a particular machine should go in
+ @w{@file{sysdeps/@var{machine}/fpu}}.
+ 
+diff -urN glibc-2.17-c758a686/manual/Makefile glibc-2.17-c758a686/manual/Makefile
+--- glibc-2.17-c758a686/manual/Makefile	2014-09-12 16:08:17.823070748 -0400
++++ glibc-2.17-c758a686/manual/Makefile	2014-09-12 16:10:06.045792717 -0400
+@@ -1,5 +1,4 @@
+-# Copyright (C) 1992-2012
+-#	Free Software Foundation, Inc.
++# Copyright (C) 1992-2014 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
+@@ -20,14 +19,10 @@
+ 
+ subdir := manual
+ 
+-# Allow override
+-INSTALL_INFO = install-info
++include ../Makeconfig
+ 
+ .PHONY: dvi pdf info html
+ 
+-# Get glibc's configuration info.
+-include ../Makeconfig
+-
+ dvi: $(objpfx)libc.dvi
+ pdf: $(objpfx)libc.pdf
+ 
+@@ -42,8 +37,8 @@
+ 		       intro errno memory ctype string charset locale	\
+ 		       message search pattern io stdio llio filesys	\
+ 		       pipe socket terminal syslog math arith time	\
+-		       resource setjmp signal startup process job nss	\
+-		       users sysinfo conf crypt debug probes)
++		       resource setjmp signal startup process ipc job	\
++		       nss users sysinfo conf crypt debug threads probes)
+ add-chapters = $(wildcard $(foreach d, $(add-ons), ../$d/$d.texi))
+ appendices = lang.texi header.texi install.texi maint.texi platform.texi \
+ 	     contrib.texi
+@@ -89,6 +84,7 @@
+ $(objpfx)summary.texi: $(objpfx)stamp-summary ;
+ $(objpfx)stamp-summary: summary.awk $(filter-out $(objpfx)summary.texi, \
+ 					$(texis-path))
++	-$(SHELL) ./check-safety.sh $(filter-out $(objpfx)%, $(texis-path))
+ 	$(AWK) -f $^ | sort -t'' -df -k 1,1 | tr '\014' '\012' \
+ 		> $(objpfx)summary-tmp
+ 	$(move-if-change) $(objpfx)summary-tmp $(objpfx)summary.texi
+@@ -145,8 +141,7 @@
+ 	mv -f $@.new $@
+ 
+ $(objpfx)%.info: %.texinfo
+-	LANGUAGE=C LC_ALL=C $(MAKEINFO) -P $(objpfx) --output=`basename $@` $<
+-	mv `basename $@`* $(objpfx)
++	LANGUAGE=C LC_ALL=C $(MAKEINFO) -P $(objpfx) --output=$@ $<
+ 
+ $(objpfx)%.dvi: %.texinfo
+ 	cd $(objpfx);$(TEXI2DVI) -I $(shell cd $(<D) && pwd) --output=$@ \
+@@ -159,19 +154,19 @@
+ 
+ # Distribution.
+ minimal-dist = summary.awk texis.awk tsort.awk libc-texinfo.sh libc.texinfo \
+-	       libm-err.texi stamp-libm-err				    \
++	       libm-err.texi stamp-libm-err check-safety.sh		    \
+ 	       $(filter-out summary.texi, $(nonexamples))		    \
+ 	       $(patsubst %.c.texi,examples/%.c, $(examples))
+ 
+ indices = cp fn pg tp vr ky
+-generated-dirs := libc
+-generated = libc.dvi libc.pdf libc.tmp libc.info*			    \
+-	stubs								    \
+-	texis summary.texi stamp-summary *.c.texi			    \
+-	$(foreach index,$(indices),libc.$(index) libc.$(index)s)	    \
+-	libc.log libc.aux libc.toc					    \
+-	$(libc-texi-generated)						    \
+-	stamp-libm-err stamp-version
++generated-dirs += libc
++generated += libc.dvi libc.pdf libc.tmp libc.info*			      \
++	     stubs							      \
++	     texis summary.texi stamp-summary *.c.texi			      \
++	     $(foreach index,$(indices),libc.$(index) libc.$(index)s)	      \
++	     libc.log libc.aux libc.toc					      \
++	     $(libc-texi-generated)					      \
++	     stamp-libm-err stamp-version
+ 
+ include ../Rules
+ 
+diff -urN glibc-2.17-c758a686/manual/math.texi glibc-2.17-c758a686/manual/math.texi
+--- glibc-2.17-c758a686/manual/math.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/math.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -157,6 +157,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} sinl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the sine of @var{x}, where @var{x} is given in
+ radians.  The return value is in the range @code{-1} to @code{1}.
+ @end deftypefun
+@@ -170,6 +171,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} cosl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the cosine of @var{x}, where @var{x} is given in
+ radians.  The return value is in the range @code{-1} to @code{1}.
+ @end deftypefun
+@@ -183,6 +185,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} tanl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the tangent of @var{x}, where @var{x} is given in
+ radians.
+ 
+@@ -205,6 +208,7 @@
+ @comment math.h
+ @comment GNU
+ @deftypefunx void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the sine of @var{x} in @code{*@var{sinx}} and the
+ cosine of @var{x} in @code{*@var{cos}}, where @var{x} is given in
+ radians.  Both values, @code{*@var{sinx}} and @code{*@var{cosx}}, are in
+@@ -233,6 +237,9 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} csinl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c There are calls to nan* that could trigger @mtslocale if they didn't get
++@c empty strings.
+ These functions return the complex sine of @var{z}.
+ The mathematical definition of the complex sine is
+ 
+@@ -253,6 +260,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} ccosl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the complex cosine of @var{z}.
+ The mathematical definition of the complex cosine is
+ 
+@@ -273,6 +281,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} ctanl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the complex tangent of @var{z}.
+ The mathematical definition of the complex tangent is
+ 
+@@ -307,6 +316,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} asinl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the arc sine of @var{x}---that is, the value whose
+ sine is @var{x}.  The value is in units of radians.  Mathematically,
+ there are infinitely many such values; the one actually returned is the
+@@ -326,6 +336,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} acosl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the arc cosine of @var{x}---that is, the value
+ whose cosine is @var{x}.  The value is in units of radians.
+ Mathematically, there are infinitely many such values; the one actually
+@@ -345,6 +356,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} atanl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the arc tangent of @var{x}---that is, the value
+ whose tangent is @var{x}.  The value is in units of radians.
+ Mathematically, there are infinitely many such values; the one actually
+@@ -360,6 +372,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} atan2l (long double @var{y}, long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function computes the arc tangent of @var{y}/@var{x}, but the signs
+ of both arguments are used to determine the quadrant of the result, and
+ @var{x} is permitted to be zero.  The return value is given in radians
+@@ -388,6 +401,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} casinl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the complex arc sine of @var{z}---that is, the
+ value whose sine is @var{z}.  The value returned is in radians.
+ 
+@@ -404,6 +418,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} cacosl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the complex arc cosine of @var{z}---that is, the
+ value whose cosine is @var{z}.  The value returned is in radians.
+ 
+@@ -421,6 +436,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} catanl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the complex arc tangent of @var{z}---that is,
+ the value whose tangent is @var{z}.  The value is in units of radians.
+ @end deftypefun
+@@ -441,6 +457,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} expl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute @code{e} (the base of natural logarithms) raised
+ to the power @var{x}.
+ 
+@@ -457,6 +474,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} exp2l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute @code{2} raised to the power @var{x}.
+ Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}.
+ @end deftypefun
+@@ -479,6 +497,7 @@
+ @comment math.h
+ @comment GNU
+ @deftypefunx {long double} pow10l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute @code{10} raised to the power @var{x}.
+ Mathematically, @code{exp10 (x)} is the same as @code{exp (x * log (10))}.
+ 
+@@ -496,6 +515,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} logl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions compute the natural logarithm of @var{x}.  @code{exp (log
+ (@var{x}))} equals @var{x}, exactly in mathematics and approximately in
+ C.
+@@ -514,6 +534,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} log10l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the base-10 logarithm of @var{x}.
+ @code{log10 (@var{x})} equals @code{log (@var{x}) / log (10)}.
+ 
+@@ -528,6 +549,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} log2l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the base-2 logarithm of @var{x}.
+ @code{log2 (@var{x})} equals @code{log (@var{x}) / log (2)}.
+ @end deftypefun
+@@ -541,6 +563,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} logbl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions extract the exponent of @var{x} and return it as a
+ floating-point value.  If @code{FLT_RADIX} is two, @code{logb} is equal
+ to @code{floor (log2 (x))}, except it's probably faster.
+@@ -560,6 +583,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx int ilogbl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions are equivalent to the corresponding @code{logb}
+ functions except that they return signed integer values.
+ @end deftypefun
+@@ -619,6 +643,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} powl (long double @var{base}, long double @var{power})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These are general exponentiation functions, returning @var{base} raised
+ to @var{power}.
+ 
+@@ -638,6 +663,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} sqrtl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the nonnegative square root of @var{x}.
+ 
+ If @var{x} is negative, @code{sqrt} signals a domain error.
+@@ -654,6 +680,7 @@
+ @comment math.h
+ @comment BSD
+ @deftypefunx {long double} cbrtl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the cube root of @var{x}.  They cannot
+ fail; every representable real value has a representable real cube root.
+ @end deftypefun
+@@ -667,6 +694,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} hypotl (long double @var{x}, long double @var{y})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return @code{sqrt (@var{x}*@var{x} +
+ @var{y}*@var{y})}.  This is the length of the hypotenuse of a right
+ triangle with sides of length @var{x} and @var{y}, or the distance
+@@ -684,6 +712,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} expm1l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return a value equivalent to @code{exp (@var{x}) - 1}.
+ They are computed in a way that is accurate even if @var{x} is
+ near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing
+@@ -699,6 +728,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} log1pl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions returns a value equivalent to @w{@code{log (1 + @var{x})}}.
+ They are computed in a way that is accurate even if @var{x} is
+ near zero.
+@@ -719,6 +749,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} cexpl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return @code{e} (the base of natural
+ logarithms) raised to the power of @var{z}.
+ Mathematically, this corresponds to the value
+@@ -740,6 +771,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} clogl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the natural logarithm of @var{z}.
+ Mathematically, this corresponds to the value
+ 
+@@ -766,8 +798,9 @@
+ @comment complex.h
+ @comment GNU
+ @deftypefunx {complex long double} clog10l (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the base 10 logarithm of the complex value
+-@var{z}. Mathematically, this corresponds to the value
++@var{z}.  Mathematically, this corresponds to the value
+ 
+ @ifnottex
+ @math{log (z) = log10 (cabs (z)) + I * carg (z)}
+@@ -788,6 +821,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} csqrtl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the complex square root of the argument @var{z}.  Unlike
+ the real-valued functions, they are defined for all values of @var{z}.
+ @end deftypefun
+@@ -801,6 +835,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return @var{base} raised to the power of
+ @var{power}.  This is equivalent to @w{@code{cexp (y * clog (x))}}
+ @end deftypefun
+@@ -821,6 +856,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} sinhl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the hyperbolic sine of @var{x}, defined
+ mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}.  They
+ may signal overflow if @var{x} is too large.
+@@ -835,6 +871,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} coshl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These function return the hyperbolic cosine of @var{x},
+ defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}.
+ They may signal overflow if @var{x} is too large.
+@@ -849,6 +886,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} tanhl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the hyperbolic tangent of @var{x},
+ defined mathematically as @w{@code{sinh (@var{x}) / cosh (@var{x})}}.
+ They may signal overflow if @var{x} is too large.
+@@ -868,6 +906,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} csinhl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the complex hyperbolic sine of @var{z}, defined
+ mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}.
+ @end deftypefun
+@@ -881,6 +920,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} ccoshl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the complex hyperbolic cosine of @var{z}, defined
+ mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}.
+ @end deftypefun
+@@ -894,6 +934,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} ctanhl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the complex hyperbolic tangent of @var{z},
+ defined mathematically as @w{@code{csinh (@var{z}) / ccosh (@var{z})}}.
+ @end deftypefun
+@@ -910,6 +951,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} asinhl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the inverse hyperbolic sine of @var{x}---the
+ value whose hyperbolic sine is @var{x}.
+ @end deftypefun
+@@ -923,6 +965,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} acoshl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the inverse hyperbolic cosine of @var{x}---the
+ value whose hyperbolic cosine is @var{x}.  If @var{x} is less than
+ @code{1}, @code{acosh} signals a domain error.
+@@ -937,6 +980,7 @@
+ @comment math.h
+ @comment ISO
+ @deftypefunx {long double} atanhl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the inverse hyperbolic tangent of @var{x}---the
+ value whose hyperbolic tangent is @var{x}.  If the absolute value of
+ @var{x} is greater than @code{1}, @code{atanh} signals a domain error;
+@@ -954,6 +998,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} casinhl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the inverse complex hyperbolic sine of
+ @var{z}---the value whose complex hyperbolic sine is @var{z}.
+ @end deftypefun
+@@ -967,6 +1012,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} cacoshl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the inverse complex hyperbolic cosine of
+ @var{z}---the value whose complex hyperbolic cosine is @var{z}.  Unlike
+ the real-valued functions, there are no restrictions on the value of @var{z}.
+@@ -981,6 +1027,7 @@
+ @comment complex.h
+ @comment ISO
+ @deftypefunx {complex long double} catanhl (complex long double @var{z})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ These functions return the inverse complex hyperbolic tangent of
+ @var{z}---the value whose complex hyperbolic tangent is @var{z}.  Unlike
+ the real-valued functions, there are no restrictions on the value of
+@@ -1005,6 +1052,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} erfl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{erf} returns the error function of @var{x}.  The error
+ function is defined as
+ @tex
+@@ -1026,6 +1074,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} erfcl (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{erfc} returns @code{1.0 - erf(@var{x})}, but computed in a
+ fashion that avoids round-off error when @var{x} is large.
+ @end deftypefun
+@@ -1039,6 +1088,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} lgammal (long double @var{x})
++@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}}
+ @code{lgamma} returns the natural logarithm of the absolute value of
+ the gamma function of @var{x}.  The gamma function is defined as
+ @tex
+@@ -1077,6 +1127,7 @@
+ @comment math.h
+ @comment XPG
+ @deftypefunx {long double} lgammal_r (long double @var{x}, int *@var{signp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{lgamma_r} is just like @code{lgamma}, but it stores the sign of
+ the intermediate result in the variable pointed to by @var{signp}
+ instead of in the @var{signgam} global.  This means it is reentrant.
+@@ -1091,6 +1142,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} gammal (long double @var{x})
++@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}}
+ These functions exist for compatibility reasons.  They are equivalent to
+ @code{lgamma} etc.  It is better to use @code{lgamma} since for one the
+ name reflects better the actual computation, moreover @code{lgamma} is
+@@ -1106,6 +1158,7 @@
+ @comment math.h
+ @comment XPG, ISO
+ @deftypefunx {long double} tgammal (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{tgamma} applies the gamma function to @var{x}.  The gamma
+ function is defined as
+ @tex
+@@ -1129,6 +1182,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} j0l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{j0} returns the Bessel function of the first kind of order 0 of
+ @var{x}.  It may signal underflow if @var{x} is too large.
+ @end deftypefun
+@@ -1142,6 +1196,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} j1l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{j1} returns the Bessel function of the first kind of order 1 of
+ @var{x}.  It may signal underflow if @var{x} is too large.
+ @end deftypefun
+@@ -1155,6 +1210,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} jnl (int @var{n}, long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{jn} returns the Bessel function of the first kind of order
+ @var{n} of @var{x}.  It may signal underflow if @var{x} is too large.
+ @end deftypefun
+@@ -1168,6 +1224,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} y0l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{y0} returns the Bessel function of the second kind of order 0 of
+ @var{x}.  It may signal underflow if @var{x} is too large.  If @var{x}
+ is negative, @code{y0} signals a domain error; if it is zero,
+@@ -1183,6 +1240,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} y1l (long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{y1} returns the Bessel function of the second kind of order 1 of
+ @var{x}.  It may signal underflow if @var{x} is too large.  If @var{x}
+ is negative, @code{y1} signals a domain error; if it is zero,
+@@ -1198,6 +1256,7 @@
+ @comment math.h
+ @comment SVID
+ @deftypefunx {long double} ynl (int @var{n}, long double @var{x})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{yn} returns the Bessel function of the second kind of order @var{n} of
+ @var{x}.  It may signal underflow if @var{x} is too large.  If @var{x}
+ is negative, @code{yn} signals a domain error; if it is zero,
+@@ -1227,10 +1286,80 @@
+ @noindent
+ where @math{p} is the number of bits in the mantissa of the
+ floating-point number representation.  Ideally the error for all
+-functions is always less than 0.5ulps.  Using rounding bits this is also
+-possible and normally implemented for the basic operations.  To achieve
+-the same for the complex math functions requires a lot more work and
+-this has not yet been done.
++functions is always less than 0.5ulps in round-to-nearest mode.  Using
++rounding bits this is also
++possible and normally implemented for the basic operations.  Except
++for certain functions such as @code{sqrt}, @code{fma} and @code{rint}
++whose results are fully specified by reference to corresponding IEEE
++754 floating-point operations, and conversions between strings and
++floating point, @theglibc{} does not aim for correctly rounded results
++for functions in the math library, and does not aim for correctness in
++whether ``inexact'' exceptions are raised.  Instead, the goals for
++accuracy of functions without fully specified results are as follows;
++some functions have bugs meaning they do not meet these goals in all
++cases.  In future, @theglibc{} may provide some other correctly
++rounding functions under the names such as @code{crsin} proposed for
++an extension to ISO C.
++
++@itemize @bullet
++
++@item
++Each function with a floating-point result behaves as if it computes
++an infinite-precision result that is within a few ulp (in both real
++and complex parts, for functions with complex results) of the
++mathematically correct value of the function (interpreted together
++with ISO C or POSIX semantics for the function in question) at the
++exact value passed as the input.  Exceptions are raised appropriately
++for this value and in accordance with IEEE 754 / ISO C / POSIX
++semantics, and it is then rounded according to the current rounding
++direction to the result that is returned to the user.  @code{errno}
++may also be set (@pxref{Math Error Reporting}).
++
++@item
++For the IBM @code{long double} format, as used on PowerPC GNU/Linux,
++the accuracy goal is weaker for input values not exactly representable
++in 106 bits of precision; it is as if the input value is some value
++within 0.5ulp of the value actually passed, where ``ulp'' is
++interpreted in terms of a fixed-precision 106-bit mantissa, but not
++necessarily the exact value actually passed with discontiguous
++mantissa bits.
++
++@item
++Functions behave as if the infinite-precision result computed is zero,
++infinity or NaN if and only if that is the mathematically correct
++infinite-precision result.  They behave as if the infinite-precision
++result computed always has the same sign as the mathematically correct
++result.
++
++@item
++If the mathematical result is more than a few ulp above the overflow
++threshold for the current rounding direction, the value returned is
++the appropriate overflow value for the current rounding direction,
++with the overflow exception raised.
++
++@item
++If the mathematical result has magnitude well below half the least
++subnormal magnitude, the returned value is either zero or the least
++subnormal (in each case, with the correct sign), according to the
++current rounding direction and with the underflow exception raised.
++
++@item
++Where the mathematical result underflows and is not exactly
++representable as a floating-point value, the underflow exception is
++raised (so there may be spurious underflow exceptions in cases where
++the underflowing result is exact, but not missing underflow exceptions
++in cases where it is inexact).
++
++@item
++@Theglibc{} does not aim for functions to satisfy other properties of
++the underlying mathematical function, such as monotonicity, where not
++implied by the above goals.
++
++@item
++All the above applies to both real and complex parts, for complex
++functions.
++
++@end itemize
+ 
+ Therefore many of the functions in the math library have errors.  The
+ table lists the maximum error for each function which is exposed by one
+@@ -1314,6 +1443,8 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun int rand (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c Just calls random.
+ The @code{rand} function returns the next pseudo-random number in the
+ series.  The value ranges from @code{0} to @code{RAND_MAX}.
+ @end deftypefun
+@@ -1321,6 +1452,8 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun void srand (unsigned int @var{seed})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c Alias to srandom.
+ This function establishes @var{seed} as the seed for a new series of
+ pseudo-random numbers.  If you call @code{rand} before a seed has been
+ established with @code{srand}, it uses the value @code{1} as a default
+@@ -1337,6 +1470,7 @@
+ @comment stdlib.h
+ @comment POSIX.1
+ @deftypefun int rand_r (unsigned int *@var{seed})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns a random number in the range 0 to @code{RAND_MAX}
+ just as @code{rand} does.  However, all its state is stored in the
+ @var{seed} argument.  This means the RNG's state can only have as many
+@@ -1363,8 +1497,11 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun {long int} random (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c Takes a lock and calls random_r with an automatic variable and the
++@c global state, while holding a lock.
+ This function returns the next pseudo-random number in the sequence.
+-The value returned ranges from @code{0} to @code{RAND_MAX}.
++The value returned ranges from @code{0} to @code{2147483647}.
+ 
+ @strong{NB:} Temporarily this function was defined to return a
+ @code{int32_t} value to indicate that the return value always contains
+@@ -1376,6 +1513,11 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun void srandom (unsigned int @var{seed})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c Takes a lock and calls srandom_r with an automatic variable and a
++@c static buffer.  There's no MT-safety issue because the static buffer
++@c is internally protected by a lock, although other threads may modify
++@c the set state before it is used.
+ The @code{srandom} function sets the state of the random number
+ generator based on the integer @var{seed}.  If you supply a @var{seed} value
+ of @code{1}, this will cause @code{random} to reproduce the default set
+@@ -1387,7 +1529,8 @@
+ 
+ @comment stdlib.h
+ @comment BSD
+-@deftypefun {void *} initstate (unsigned int @var{seed}, void *@var{state}, size_t @var{size})
++@deftypefun {char *} initstate (unsigned int @var{seed}, char *@var{state}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ The @code{initstate} function is used to initialize the random number
+ generator state.  The argument @var{state} is an array of @var{size}
+ bytes, used to hold the state information.  It is initialized based on
+@@ -1401,7 +1544,8 @@
+ 
+ @comment stdlib.h
+ @comment BSD
+-@deftypefun {void *} setstate (void *@var{state})
++@deftypefun {char *} setstate (char *@var{state})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ The @code{setstate} function restores the random number state
+ information @var{state}.  The argument must have been the result of
+ a previous call to @var{initstate} or @var{setstate}.
+@@ -1442,6 +1586,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int random_r (struct random_data *restrict @var{buf}, int32_t *restrict @var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{random_r} function behaves exactly like the @code{random}
+ function except that it uses and modifies the state in the object
+ pointed to by the first parameter instead of the global state.
+@@ -1450,6 +1595,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int srandom_r (unsigned int @var{seed}, struct random_data *@var{buf})
++@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{srandom_r} function behaves exactly like the @code{srandom}
+ function except that it uses and modifies the state in the object
+ pointed to by the second parameter instead of the global state.
+@@ -1458,6 +1604,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int initstate_r (unsigned int @var{seed}, char *restrict @var{statebuf}, size_t @var{statelen}, struct random_data *restrict @var{buf})
++@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{initstate_r} function behaves exactly like the @code{initstate}
+ function except that it uses and modifies the state in the object
+ pointed to by the fourth parameter instead of the global state.
+@@ -1466,6 +1613,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int setstate_r (char *restrict @var{statebuf}, struct random_data *restrict @var{buf})
++@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{setstate_r} function behaves exactly like the @code{setstate}
+ function except that it uses and modifies the state in the object
+ pointed to by the first parameter instead of the global state.
+@@ -1512,6 +1660,12 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun double drand48 (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
++@c Uses of the static state buffer are not guarded by a lock (thus
++@c @mtasurace:drand48), so they may be found or left at a
++@c partially-updated state in case of calls from within signal handlers
++@c or cancellation.  None of this will break safety rules or invoke
++@c undefined behavior, but it may affect randomness.
+ This function returns a @code{double} value in the range of @code{0.0}
+ to @code{1.0} (exclusive).  The random bits are determined by the global
+ state of the random number generator in the C library.
+@@ -1525,6 +1679,9 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun double erand48 (unsigned short int @var{xsubi}[3])
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
++@c The static buffer is just initialized with default parameters, which
++@c are later read to advance the state held in xsubi.
+ This function returns a @code{double} value in the range of @code{0.0}
+ to @code{1.0} (exclusive), similarly to @code{drand48}.  The argument is
+ an array describing the state of the random number generator.
+@@ -1537,6 +1694,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun {long int} lrand48 (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ The @code{lrand48} function returns an integer value in the range of
+ @code{0} to @code{2^31} (exclusive).  Even if the size of the @code{long
+ int} type can take more than 32 bits, no higher numbers are returned.
+@@ -1547,6 +1705,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun {long int} nrand48 (unsigned short int @var{xsubi}[3])
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ This function is similar to the @code{lrand48} function in that it
+ returns a number in the range of @code{0} to @code{2^31} (exclusive) but
+ the state of the random number generator used to produce the random bits
+@@ -1561,6 +1720,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun {long int} mrand48 (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ The @code{mrand48} function is similar to @code{lrand48}.  The only
+ difference is that the numbers returned are in the range @code{-2^31} to
+ @code{2^31} (exclusive).
+@@ -1569,6 +1729,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun {long int} jrand48 (unsigned short int @var{xsubi}[3])
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ The @code{jrand48} function is similar to @code{nrand48}.  The only
+ difference is that the numbers returned are in the range @code{-2^31} to
+ @code{2^31} (exclusive).  For the @code{xsubi} parameter the same
+@@ -1582,6 +1743,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun void srand48 (long int @var{seedval})
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ The @code{srand48} function sets the most significant 32 bits of the
+ internal state of the random number generator to the least
+ significant 32 bits of the @var{seedval} parameter.  The lower 16 bits
+@@ -1601,6 +1763,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun {unsigned short int *} seed48 (unsigned short int @var{seed16v}[3])
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ The @code{seed48} function initializes all 48 bits of the state of the
+ internal random number generator from the contents of the parameter
+ @var{seed16v}.  Here the lower 16 bits of the first element of
+@@ -1628,6 +1791,7 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun void lcong48 (unsigned short int @var{param}[7])
++@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}}
+ The @code{lcong48} function allows the user to change the complete state
+ of the random number generator.  Unlike @code{srand48} and
+ @code{seed48}, this function also changes the constants in the
+@@ -1660,6 +1824,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int drand48_r (struct drand48_data *@var{buffer}, double *@var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ This function is equivalent to the @code{drand48} function with the
+ difference that it does not modify the global random number generator
+ parameters but instead the parameters in the buffer supplied through the
+@@ -1677,6 +1842,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int erand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, double *@var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{erand48_r} function works like @code{erand48}, but in addition
+ it takes an argument @var{buffer} which describes the random number
+ generator.  The state of the random number generator is taken from the
+@@ -1692,7 +1858,8 @@
+ 
+ @comment stdlib.h
+ @comment GNU
+-@deftypefun int lrand48_r (struct drand48_data *@var{buffer}, double *@var{result})
++@deftypefun int lrand48_r (struct drand48_data *@var{buffer}, long int *@var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ This function is similar to @code{lrand48}, but in addition it takes a
+ pointer to a buffer describing the state of the random number generator
+ just like @code{drand48}.
+@@ -1707,6 +1874,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int nrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{nrand48_r} function works like @code{nrand48} in that it
+ produces a random number in the range @code{0} to @code{2^31}.  But instead
+ of using the global parameters for the congruential formula it uses the
+@@ -1722,7 +1890,8 @@
+ 
+ @comment stdlib.h
+ @comment GNU
+-@deftypefun int mrand48_r (struct drand48_data *@var{buffer}, double *@var{result})
++@deftypefun int mrand48_r (struct drand48_data *@var{buffer}, long int *@var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ This function is similar to @code{mrand48} but like the other reentrant
+ functions it uses the random number generator described by the value in
+ the buffer pointed to by @var{buffer}.
+@@ -1737,6 +1906,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int jrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @code{jrand48_r} function is similar to @code{jrand48}.  Like the
+ other reentrant functions of this function family it uses the
+ congruential formula parameters from the buffer pointed to by
+@@ -1771,6 +1941,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int srand48_r (long int @var{seedval}, struct drand48_data *@var{buffer})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ The description of the random number generator represented by the
+ information in @var{buffer} is initialized similarly to what the function
+ @code{srand48} does.  The state is initialized from the parameter
+@@ -1786,6 +1957,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int seed48_r (unsigned short int @var{seed16v}[3], struct drand48_data *@var{buffer})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ This function is similar to @code{srand48_r} but like @code{seed48} it
+ initializes all 48 bits of the state from the parameter @var{seed16v}.
+ 
+@@ -1802,6 +1974,7 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int lcong48_r (unsigned short int @var{param}[7], struct drand48_data *@var{buffer})
++@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}}
+ This function initializes all aspects of the random number generator
+ described in @var{buffer} with the data in @var{param}.  Here it is
+ especially true that the function does more than just copying the
+diff -urN glibc-2.17-c758a686/manual/memory.texi glibc-2.17-c758a686/manual/memory.texi
+--- glibc-2.17-c758a686/manual/memory.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/memory.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -302,6 +302,245 @@
+ @comment malloc.h stdlib.h
+ @comment ISO
+ @deftypefun {void *} malloc (size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c Malloc hooks and __morecore pointers, as well as such parameters as
++@c max_n_mmaps and max_mmapped_mem, are accessed without guards, so they
++@c could pose a thread safety issue; in order to not declare malloc
++@c MT-unsafe, it's modifying the hooks and parameters while multiple
++@c threads are active that is regarded as unsafe.  An arena's next field
++@c is initialized and never changed again, except for main_arena's,
++@c that's protected by list_lock; next_free is only modified while
++@c list_lock is held too.  All other data members of an arena, as well
++@c as the metadata of the memory areas assigned to it, are only modified
++@c while holding the arena's mutex (fastbin pointers use catomic ops
++@c because they may be modified by free without taking the arena's
++@c lock).  Some reassurance was needed for fastbins, for it wasn't clear
++@c how they were initialized.  It turns out they are always
++@c zero-initialized: main_arena's, for being static data, and other
++@c arena's, for being just-mmapped memory.
++
++@c Leaking file descriptors and memory in case of cancellation is
++@c unavoidable without disabling cancellation, but the lock situation is
++@c a bit more complicated: we don't have fallback arenas for malloc to
++@c be safe to call from within signal handlers.  Error-checking mutexes
++@c or trylock could enable us to try and use alternate arenas, even with
++@c -DPER_THREAD (enabled by default), but supporting interruption
++@c (cancellation or signal handling) while holding the arena list mutex
++@c would require more work; maybe blocking signals and disabling async
++@c cancellation while manipulating the arena lists?
++
++@c __libc_malloc @asulock @aculock @acsfd @acsmem
++@c  force_reg ok
++@c  *malloc_hook unguarded
++@c  arena_lookup ok
++@c   tsd_getspecific ok, TLS
++@c  arena_lock @asulock @aculock @acsfd @acsmem
++@c   mutex_lock @asulock @aculock
++@c   arena_get2 @asulock @aculock @acsfd @acsmem
++@c    get_free_list @asulock @aculock
++@c     mutex_lock (list_lock) dup @asulock @aculock
++@c     mutex_unlock (list_lock) dup @aculock
++@c     mutex_lock (arena lock) dup @asulock @aculock [returns locked]
++@c     tsd_setspecific ok, TLS
++@c    __get_nprocs ext ok @acsfd
++@c    NARENAS_FROM_NCORES ok
++@c    catomic_compare_and_exchange_bool_acq ok
++@c    _int_new_arena ok @asulock @aculock @acsmem
++@c     new_heap ok @acsmem
++@c      mmap ok @acsmem
++@c      munmap ok @acsmem
++@c      mprotect ok
++@c     chunk2mem ok
++@c     set_head ok
++@c     tsd_setspecific dup ok
++@c     mutex_init ok
++@c     mutex_lock (just-created mutex) ok, returns locked
++@c     mutex_lock (list_lock) dup @asulock @aculock
++@c     atomic_write_barrier ok
++@c     mutex_unlock (list_lock) @aculock
++@c    catomic_decrement ok
++@c    reused_arena @asulock @aculock
++@c      reads&writes next_to_use and iterates over arena next without guards
++@c      those are harmless as long as we don't drop arenas from the
++@c      NEXT list, and we never do; when a thread terminates,
++@c      arena_thread_freeres prepends the arena to the free_list
++@c      NEXT_FREE list, but NEXT is never modified, so it's safe!
++@c     mutex_trylock (arena lock) @asulock @aculock
++@c     mutex_lock (arena lock) dup @asulock @aculock
++@c     tsd_setspecific dup ok
++@c  _int_malloc @acsfd @acsmem
++@c   checked_request2size ok
++@c    REQUEST_OUT_OF_RANGE ok
++@c    request2size ok
++@c   get_max_fast ok
++@c   fastbin_index ok
++@c   fastbin ok
++@c   catomic_compare_and_exhange_val_acq ok
++@c   malloc_printerr dup @mtsenv
++@c     if we get to it, we're toast already, undefined behavior must have
++@c     been invoked before
++@c    libc_message @mtsenv [no leaks with cancellation disabled]
++@c     FATAL_PREPARE ok
++@c      pthread_setcancelstate disable ok
++@c     libc_secure_getenv @mtsenv
++@c      getenv @mtsenv
++@c     open_not_cancel_2 dup @acsfd
++@c     strchrnul ok
++@c     WRITEV_FOR_FATAL ok
++@c      writev ok
++@c     mmap ok @acsmem
++@c     munmap ok @acsmem
++@c     BEFORE_ABORT @acsfd
++@c      backtrace ok
++@c      write_not_cancel dup ok
++@c      backtrace_symbols_fd @aculock
++@c      open_not_cancel_2 dup @acsfd
++@c      read_not_cancel dup ok
++@c      close_not_cancel_no_status dup @acsfd
++@c     abort ok
++@c    itoa_word ok
++@c    abort ok
++@c   check_remalloced_chunk ok/disabled
++@c   chunk2mem dup ok
++@c   alloc_perturb ok
++@c   in_smallbin_range ok
++@c   smallbin_index ok
++@c   bin_at ok
++@c   last ok
++@c   malloc_consolidate ok
++@c    get_max_fast dup ok
++@c    clear_fastchunks ok
++@c    unsorted_chunks dup ok
++@c    fastbin dup ok
++@c    atomic_exchange_acq ok
++@c    check_inuse_chunk dup ok/disabled
++@c    chunk_at_offset dup ok
++@c    chunksize dup ok
++@c    inuse_bit_at_offset dup ok
++@c    unlink dup ok
++@c    clear_inuse_bit_at_offset dup ok
++@c    in_smallbin_range dup ok
++@c    set_head dup ok
++@c    malloc_init_state ok
++@c     bin_at dup ok
++@c     set_noncontiguous dup ok
++@c     set_max_fast dup ok
++@c     initial_top ok
++@c      unsorted_chunks dup ok
++@c    check_malloc_state ok/disabled
++@c   set_inuse_bit_at_offset ok
++@c   check_malloced_chunk ok/disabled
++@c   largebin_index ok
++@c   have_fastchunks ok
++@c   unsorted_chunks ok
++@c    bin_at ok
++@c   chunksize ok
++@c   chunk_at_offset ok
++@c   set_head ok
++@c   set_foot ok
++@c   mark_bin ok
++@c    idx2bit ok
++@c   first ok
++@c   unlink ok
++@c    malloc_printerr dup ok
++@c    in_smallbin_range dup ok
++@c   idx2block ok
++@c   idx2bit dup ok
++@c   next_bin ok
++@c   sysmalloc @acsfd @acsmem
++@c    MMAP @acsmem
++@c    set_head dup ok
++@c    check_chunk ok/disabled
++@c    chunk2mem dup ok
++@c    chunksize dup ok
++@c    chunk_at_offset dup ok
++@c    heap_for_ptr ok
++@c    grow_heap ok
++@c     mprotect ok
++@c    set_head dup ok
++@c    new_heap @acsmem
++@c     MMAP dup @acsmem
++@c     munmap @acsmem
++@c    top ok
++@c    set_foot dup ok
++@c    contiguous ok
++@c    MORECORE ok
++@c     *__morecore ok unguarded
++@c      __default_morecore
++@c       sbrk ok
++@c    force_reg dup ok
++@c    *__after_morecore_hook unguarded
++@c    set_noncontiguous ok
++@c    malloc_printerr dup ok
++@c    _int_free (have_lock) @acsfd @acsmem [@asulock @aculock]
++@c     chunksize dup ok
++@c     mutex_unlock dup @aculock/!have_lock
++@c     malloc_printerr dup ok
++@c     check_inuse_chunk ok/disabled
++@c     chunk_at_offset dup ok
++@c     mutex_lock dup @asulock @aculock/@have_lock
++@c     chunk2mem dup ok
++@c     free_perturb ok
++@c     set_fastchunks ok
++@c      catomic_and ok
++@c     fastbin_index dup ok
++@c     fastbin dup ok
++@c     catomic_compare_and_exchange_val_rel ok
++@c     chunk_is_mmapped ok
++@c     contiguous dup ok
++@c     prev_inuse ok
++@c     unlink dup ok
++@c     inuse_bit_at_offset dup ok
++@c     clear_inuse_bit_at_offset ok
++@c     unsorted_chunks dup ok
++@c     in_smallbin_range dup ok
++@c     set_head dup ok
++@c     set_foot dup ok
++@c     check_free_chunk ok/disabled
++@c     check_chunk dup ok/disabled
++@c     have_fastchunks dup ok
++@c     malloc_consolidate dup ok
++@c     systrim ok
++@c      MORECORE dup ok
++@c      *__after_morecore_hook dup unguarded
++@c      set_head dup ok
++@c      check_malloc_state ok/disabled
++@c     top dup ok
++@c     heap_for_ptr dup ok
++@c     heap_trim @acsfd @acsmem
++@c      top dup ok
++@c      chunk_at_offset dup ok
++@c      prev_chunk ok
++@c      chunksize dup ok
++@c      prev_inuse dup ok
++@c      delete_heap @acsmem
++@c       munmap dup @acsmem
++@c      unlink dup ok
++@c      set_head dup ok
++@c      shrink_heap @acsfd
++@c       check_may_shrink_heap @acsfd
++@c        open_not_cancel_2 @acsfd
++@c        read_not_cancel ok
++@c        close_not_cancel_no_status @acsfd
++@c       MMAP dup ok
++@c       madvise ok
++@c     munmap_chunk @acsmem
++@c      chunksize dup ok
++@c      chunk_is_mmapped dup ok
++@c      chunk2mem dup ok
++@c      malloc_printerr dup ok
++@c      munmap dup @acsmem
++@c    check_malloc_state ok/disabled
++@c  arena_get_retry @asulock @aculock @acsfd @acsmem
++@c   mutex_unlock dup @aculock
++@c   mutex_lock dup @asulock @aculock
++@c   arena_get2 dup @asulock @aculock @acsfd @acsmem
++@c  mutex_unlock @aculock
++@c  mem2chunk ok
++@c  chunk_is_mmapped ok
++@c  arena_for_chunk ok
++@c   chunk_non_main_arena ok
++@c   heap_for_ptr ok
+ This function returns a pointer to a newly allocated block @var{size}
+ bytes long, or a null pointer if the block could not be allocated.
+ @end deftypefun
+@@ -355,7 +594,7 @@
+ void *
+ xmalloc (size_t size)
+ @{
+-  register void *value = malloc (size);
++  void *value = malloc (size);
+   if (value == 0)
+     fatal ("virtual memory exhausted");
+   return value;
+@@ -371,7 +610,7 @@
+ char *
+ savestring (const char *ptr, size_t len)
+ @{
+-  register char *value = (char *) xmalloc (len + 1);
++  char *value = (char *) xmalloc (len + 1);
+   value[len] = '\0';
+   return (char *) memcpy (value, ptr, len);
+ @}
+@@ -380,10 +619,10 @@
+ 
+ The block that @code{malloc} gives you is guaranteed to be aligned so
+ that it can hold any type of data.  On @gnusystems{}, the address is
+-always a multiple of eight on most systems, and a multiple of 16 on
++always a multiple of eight on 32-bit systems, and a multiple of 16 on
+ 64-bit systems.  Only rarely is any higher boundary (such as a page
+-boundary) necessary; for those cases, use @code{memalign},
+-@code{posix_memalign} or @code{valloc} (@pxref{Aligned Memory Blocks}).
++boundary) necessary; for those cases, use @code{aligned_alloc} or
++@code{posix_memalign} (@pxref{Aligned Memory Blocks}).
+ 
+ Note that the memory located after the end of the block is likely to be
+ in use for something else; perhaps a block already allocated by another
+@@ -407,6 +646,21 @@
+ @comment malloc.h stdlib.h
+ @comment ISO
+ @deftypefun void free (void *@var{ptr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c __libc_free @asulock @aculock @acsfd @acsmem
++@c   releasing memory into fastbins modifies the arena without taking
++@c   its mutex, but catomic operations ensure safety.  If two (or more)
++@c   threads are running malloc and have their own arenas locked when
++@c   each gets a signal whose handler free()s large (non-fastbin-able)
++@c   blocks from each other's arena, we deadlock; this is a more general
++@c   case of @asulock.
++@c  *__free_hook unguarded
++@c  mem2chunk ok
++@c  chunk_is_mmapped ok, chunk bits not modified after allocation
++@c  chunksize ok
++@c  munmap_chunk dup @acsmem
++@c  arena_for_chunk dup ok
++@c  _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem
+ The @code{free} function deallocates the block of memory pointed at
+ by @var{ptr}.
+ @end deftypefun
+@@ -414,6 +668,8 @@
+ @comment stdlib.h
+ @comment Sun
+ @deftypefun void cfree (void *@var{ptr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c alias to free
+ This function does the same thing as @code{free}.  It's provided for
+ backward compatibility with SunOS; you should use @code{free} instead.
+ @end deftypefun
+@@ -471,6 +727,48 @@
+ @comment malloc.h stdlib.h
+ @comment ISO
+ @deftypefun {void *} realloc (void *@var{ptr}, size_t @var{newsize})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c It may call the implementations of malloc and free, so all of their
++@c issues arise, plus the realloc hook, also accessed without guards.
++
++@c __libc_realloc @asulock @aculock @acsfd @acsmem
++@c  *__realloc_hook unguarded
++@c  __libc_free dup @asulock @aculock @acsfd @acsmem
++@c  __libc_malloc dup @asulock @aculock @acsfd @acsmem
++@c  mem2chunk dup ok
++@c  chunksize dup ok
++@c  malloc_printerr dup ok
++@c  checked_request2size dup ok
++@c  chunk_is_mmapped dup ok
++@c  mremap_chunk
++@c   chunksize dup ok
++@c   __mremap ok
++@c   set_head dup ok
++@c  MALLOC_COPY ok
++@c   memcpy ok
++@c  munmap_chunk dup @acsmem
++@c  arena_for_chunk dup ok
++@c  mutex_lock (arena mutex) dup @asulock @aculock
++@c  _int_realloc @acsfd @acsmem
++@c   malloc_printerr dup ok
++@c   check_inuse_chunk dup ok/disabled
++@c   chunk_at_offset dup ok
++@c   chunksize dup ok
++@c   set_head_size dup ok
++@c   chunk_at_offset dup ok
++@c   set_head dup ok
++@c   chunk2mem dup ok
++@c   inuse dup ok
++@c   unlink dup ok
++@c   _int_malloc dup @acsfd @acsmem
++@c   mem2chunk dup ok
++@c   MALLOC_COPY dup ok
++@c   _int_free (have_lock) dup @acsfd @acsmem
++@c   set_inuse_bit_at_offset dup ok
++@c   set_head dup ok
++@c  mutex_unlock (arena mutex) dup @aculock
++@c  _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem
++
+ The @code{realloc} function changes the size of the block whose address is
+ @var{ptr} to be @var{newsize}.
+ 
+@@ -502,7 +800,7 @@
+ void *
+ xrealloc (void *ptr, size_t size)
+ @{
+-  register void *value = realloc (ptr, size);
++  void *value = realloc (ptr, size);
+   if (value == 0)
+     fatal ("Virtual memory exhausted");
+   return value;
+@@ -530,6 +828,25 @@
+ @comment malloc.h stdlib.h
+ @comment ISO
+ @deftypefun {void *} calloc (size_t @var{count}, size_t @var{eltsize})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c Same caveats as malloc.
++
++@c __libc_calloc @asulock @aculock @acsfd @acsmem
++@c  *__malloc_hook dup unguarded
++@c  memset dup ok
++@c  arena_get @asulock @aculock @acsfd @acsmem
++@c   arena_lookup dup ok
++@c   arena_lock dup @asulock @aculock @acsfd @acsmem
++@c  top dup ok
++@c  chunksize dup ok
++@c  heap_for_ptr dup ok
++@c  _int_malloc dup @acsfd @acsmem
++@c  arena_get_retry dup @asulock @aculock @acsfd @acsmem
++@c  mutex_unlock dup @aculock
++@c  mem2chunk dup ok
++@c  chunk_is_mmapped dup ok
++@c  MALLOC_ZERO ok
++@c   memset dup ok
+ This function allocates a block long enough to contain a vector of
+ @var{count} elements, each of size @var{eltsize}.  Its contents are
+ cleared to zero before @code{calloc} returns.
+@@ -616,28 +933,89 @@
+ The address of a block returned by @code{malloc} or @code{realloc} in
+ @gnusystems{} is always a multiple of eight (or sixteen on 64-bit
+ systems).  If you need a block whose address is a multiple of a higher
+-power of two than that, use @code{memalign}, @code{posix_memalign}, or
+-@code{valloc}.  @code{memalign} is declared in @file{malloc.h} and
+-@code{posix_memalign} is declared in @file{stdlib.h}.
+-
+-With @theglibc{}, you can use @code{free} to free the blocks that
+-@code{memalign}, @code{posix_memalign}, and @code{valloc} return.  That
+-does not work in BSD, however---BSD does not provide any way to free
+-such blocks.
++power of two than that, use @code{aligned_alloc} or @code{posix_memalign}.
++@code{aligned_alloc} and @code{posix_memalign} are declared in
++@file{stdlib.h}.
++
++@comment stdlib.h
++@deftypefun {void *} aligned_alloc (size_t @var{alignment}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c Alias to memalign.
++The @code{aligned_alloc} function allocates a block of @var{size} bytes whose
++address is a multiple of @var{alignment}.  The @var{alignment} must be a
++power of two and @var{size} must be a multiple of @var{alignment}.
++
++The @code{aligned_alloc} function returns a null pointer on error and sets
++@code{errno} to one of the following values:
++
++@table @code
++@item ENOMEM
++There was insufficient memory available to satisfy the request.
++
++@item EINVAL
++@var{alignment} is not a power of two.
++
++This function was introduced in @w{ISO C11} and hence may have better
++portability to modern non-POSIX systems than @code{posix_memalign}.
++@end table
++
++@end deftypefun
+ 
+ @comment malloc.h
+ @comment BSD
+ @deftypefun {void *} memalign (size_t @var{boundary}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c Same issues as malloc.  The padding bytes are safely freed in
++@c _int_memalign, with the arena still locked.
++
++@c __libc_memalign @asulock @aculock @acsfd @acsmem
++@c  *__memalign_hook dup unguarded
++@c  __libc_malloc dup @asulock @aculock @acsfd @acsmem
++@c  arena_get dup @asulock @aculock @acsfd @acsmem
++@c  _int_memalign @acsfd @acsmem
++@c   _int_malloc dup @acsfd @acsmem
++@c   checked_request2size dup ok
++@c   mem2chunk dup ok
++@c   chunksize dup ok
++@c   chunk_is_mmapped dup ok
++@c   set_head dup ok
++@c   chunk2mem dup ok
++@c   set_inuse_bit_at_offset dup ok
++@c   set_head_size dup ok
++@c   _int_free (have_lock) dup @acsfd @acsmem
++@c   chunk_at_offset dup ok
++@c   check_inuse_chunk dup ok
++@c  arena_get_retry dup @asulock @aculock @acsfd @acsmem
++@c  mutex_unlock dup @aculock
+ The @code{memalign} function allocates a block of @var{size} bytes whose
+ address is a multiple of @var{boundary}.  The @var{boundary} must be a
+ power of two!  The function @code{memalign} works by allocating a
+ somewhat larger block, and then returning an address within the block
+ that is on the specified boundary.
++
++The @code{memalign} function returns a null pointer on error and sets
++@code{errno} to one of the following values:
++
++@table @code
++@item ENOMEM
++There was insufficient memory available to satisfy the request.
++
++@item EINVAL
++@var{alignment} is not a power of two.
++
++@end table
++
++The @code{memalign} function is obsolete and @code{aligned_alloc} or
++@code{posix_memalign} should be used instead.
+ @end deftypefun
+ 
+ @comment stdlib.h
+ @comment POSIX
+ @deftypefun int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c Calls memalign unless the requirements are not met (powerof2 macro is
++@c safe given an automatic variable as an argument) or there's a
++@c memalign hook (accessed unguarded, but safely).
+ The @code{posix_memalign} function is similar to the @code{memalign}
+ function in that it returns a buffer of @var{size} bytes aligned to a
+ multiple of @var{alignment}.  But it adds one requirement to the
+@@ -647,13 +1025,58 @@
+ If the function succeeds in allocation memory a pointer to the allocated
+ memory is returned in @code{*@var{memptr}} and the return value is zero.
+ Otherwise the function returns an error value indicating the problem.
++The possible error values returned are:
++
++@table @code
++@item ENOMEM
++There was insufficient memory available to satisfy the request.
+ 
+-This function was introduced in POSIX 1003.1d.
++@item EINVAL
++@var{alignment} is not a power of two multiple of @code{sizeof (void *)}.
++
++@end table
++
++This function was introduced in POSIX 1003.1d.  Although this function is
++superseded by @code{aligned_alloc}, it is more portable to older POSIX
++systems that do not support @w{ISO C11}.
+ @end deftypefun
+ 
+ @comment malloc.h stdlib.h
+ @comment BSD
+ @deftypefun {void *} valloc (size_t @var{size})
++@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{} @acsfd{} @acsmem{}}}
++@c __libc_valloc @mtuinit @asuinit @asulock @aculock @acsfd @acsmem
++@c  ptmalloc_init (once) @mtsenv @asulock @aculock @acsfd @acsmem
++@c   _dl_addr @asucorrupt? @aculock
++@c    __rtld_lock_lock_recursive (dl_load_lock) @asucorrupt? @aculock
++@c    _dl_find_dso_for_object ok, iterates over dl_ns and its _ns_loaded objs
++@c      the ok above assumes no partial updates on dl_ns and _ns_loaded
++@c      that could confuse a _dl_addr call in a signal handler
++@c     _dl_addr_inside_object ok
++@c    determine_info ok
++@c    __rtld_lock_unlock_recursive (dl_load_lock) @aculock
++@c   thread_atfork @asulock @aculock @acsfd @acsmem
++@c    __register_atfork @asulock @aculock @acsfd @acsmem
++@c     lll_lock (__fork_lock) @asulock @aculock
++@c     fork_handler_alloc @asulock @aculock @acsfd @acsmem
++@c      calloc dup @asulock @aculock @acsfd @acsmem
++@c     __linkin_atfork ok
++@c      catomic_compare_and_exchange_bool_acq ok
++@c     lll_unlock (__fork_lock) @aculock
++@c   *_environ @mtsenv
++@c   next_env_entry ok
++@c   strcspn dup ok
++@c   __libc_mallopt dup @mtasuconst:mallopt [setting mp_]
++@c   __malloc_check_init @mtasuconst:malloc_hooks [setting hooks]
++@c   *__malloc_initialize_hook unguarded, ok
++@c  *__memalign_hook dup ok, unguarded
++@c  arena_get dup @asulock @aculock @acsfd @acsmem
++@c  _int_valloc @acsfd @acsmem
++@c   malloc_consolidate dup ok
++@c   _int_memalign dup @acsfd @acsmem
++@c  arena_get_retry dup @asulock @aculock @acsfd @acsmem
++@c  _int_memalign dup @acsfd @acsmem
++@c  mutex_unlock dup @aculock
+ Using @code{valloc} is like using @code{memalign} and passing the page size
+ as the value of the second argument.  It is implemented like this:
+ 
+@@ -667,6 +1090,9 @@
+ 
+ @ref{Query Memory Parameters} for more information about the memory
+ subsystem.
++
++The @code{valloc} function is obsolete and @code{aligned_alloc} or
++@code{posix_memalign} should be used instead.
+ @end deftypefun
+ 
+ @node Malloc Tunable Parameters
+@@ -678,30 +1104,34 @@
+ @pindex malloc.h
+ 
+ @deftypefun int mallopt (int @var{param}, int @var{value})
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}}
++@c __libc_mallopt @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock
++@c  ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem
++@c  mutex_lock (main_arena->mutex) @asulock @aculock
++@c  malloc_consolidate dup ok
++@c  set_max_fast ok
++@c  mutex_unlock dup @aculock
++
+ When calling @code{mallopt}, the @var{param} argument specifies the
+ parameter to be set, and @var{value} the new value to be set.  Possible
+ choices for @var{param}, as defined in @file{malloc.h}, are:
+ 
+ @table @code
+-@item M_TRIM_THRESHOLD
+-This is the minimum size (in bytes) of the top-most, releasable chunk
+-that will cause @code{sbrk} to be called with a negative argument in
+-order to return memory to the system.
+-@item M_TOP_PAD
+-This parameter determines the amount of extra memory to obtain from the
+-system when a call to @code{sbrk} is required.  It also specifies the
+-number of bytes to retain when shrinking the heap by calling @code{sbrk}
+-with a negative argument.  This provides the necessary hysteresis in
+-heap size such that excessive amounts of system calls can be avoided.
++@comment TODO: @item M_ARENA_MAX
++@comment       - Document ARENA_MAX env var.
++@comment TODO: @item M_ARENA_TEST
++@comment       - Document ARENA_TEST env var.
++@comment TODO: @item M_CHECK_ACTION
++@item M_MMAP_MAX
++The maximum number of chunks to allocate with @code{mmap}.  Setting this
++to zero disables all use of @code{mmap}.
+ @item M_MMAP_THRESHOLD
+ All chunks larger than this value are allocated outside the normal
+ heap, using the @code{mmap} system call.  This way it is guaranteed
+ that the memory for these chunks can be returned to the system on
+ @code{free}.  Note that requests smaller than this threshold might still
+ be allocated via @code{mmap}.
+-@item M_MMAP_MAX
+-The maximum number of chunks to allocate with @code{mmap}.  Setting this
+-to zero disables all use of @code{mmap}.
++@comment TODO: @item M_MXFAST
+ @item M_PERTURB
+ If non-zero, memory blocks are filled with values depending on some
+ low order bits of this parameter when they are allocated (except when
+@@ -710,6 +1140,16 @@
+ guarantee that the freed block will have any specific values.  It only
+ guarantees that the content the block had before it was freed will be
+ overwritten.
++@item M_TOP_PAD
++This parameter determines the amount of extra memory to obtain from the
++system when a call to @code{sbrk} is required.  It also specifies the
++number of bytes to retain when shrinking the heap by calling @code{sbrk}
++with a negative argument.  This provides the necessary hysteresis in
++heap size such that excessive amounts of system calls can be avoided.
++@item M_TRIM_THRESHOLD
++This is the minimum size (in bytes) of the top-most, releasable chunk
++that will cause @code{sbrk} to be called with a negative argument in
++order to return memory to the system.
+ @end table
+ 
+ @end deftypefun
+@@ -728,6 +1168,17 @@
+ @comment mcheck.h
+ @comment GNU
+ @deftypefun int mcheck (void (*@var{abortfn}) (enum mcheck_status @var{status}))
++@safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
++@c The hooks must be set up before malloc is first used, which sort of
++@c implies @mtuinit/@asuinit but since the function is a no-op if malloc
++@c was already used, that doesn't pose any safety issues.  The actual
++@c problem is with the hooks, designed for single-threaded
++@c fully-synchronous operation: they manage an unguarded linked list of
++@c allocated blocks, and get temporarily overwritten before calling the
++@c allocation functions recursively while holding the old hooks.  There
++@c are no guards for thread safety, and inconsistent hooks may be found
++@c within signal handlers or left behind in case of cancellation.
++
+ Calling @code{mcheck} tells @code{malloc} to perform occasional
+ consistency checks.  These will catch things such as writing
+ past the end of a block that was allocated with @code{malloc}.
+@@ -770,6 +1221,18 @@
+ @end deftypefun
+ 
+ @deftypefun {enum mcheck_status} mprobe (void *@var{pointer})
++@safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
++@c The linked list of headers may be modified concurrently by other
++@c threads, and it may find a partial update if called from a signal
++@c handler.  It's mostly read only, so cancelling it might be safe, but
++@c it will modify global state that, if cancellation hits at just the
++@c right spot, may be left behind inconsistent.  This path is only taken
++@c if checkhdr finds an inconsistency.  If the inconsistency could only
++@c occur because of earlier undefined behavior, that wouldn't be an
++@c additional safety issue problem, but because of the other concurrency
++@c issues in the mcheck hooks, the apparent inconsistency could be the
++@c result of mcheck's own internal data race.  So, AC-Unsafe it is.
++
+ The @code{mprobe} function lets you explicitly check for inconsistencies
+ in a particular allocated block.  You must have already called
+ @code{mcheck} at the beginning of the program, to do its occasional
+@@ -896,16 +1359,18 @@
+ @comment malloc.h
+ @comment GNU
+ @defvar __memalign_hook
+-The value of this variable is a pointer to function that @code{memalign}
+-uses whenever it is called.  You should define this function to look
+-like @code{memalign}; that is, like:
++The value of this variable is a pointer to function that @code{aligned_alloc},
++@code{memalign}, @code{posix_memalign} and @code{valloc} use whenever they
++are called.  You should define this function to look like @code{aligned_alloc};
++that is, like:
+ 
+ @smallexample
+ void *@var{function} (size_t @var{alignment}, size_t @var{size}, const void *@var{caller})
+ @end smallexample
+ 
+ The value of @var{caller} is the return address found on the stack when
+-the @code{memalign} function was called.  This value allows you to trace the
++the @code{aligned_alloc}, @code{memalign}, @code{posix_memalign} or
++@code{valloc} functions are called.  This value allows you to trace the
+ memory consumption of the program.
+ @end defvar
+ 
+@@ -1082,6 +1547,24 @@
+ @comment malloc.h
+ @comment SVID
+ @deftypefun {struct mallinfo} mallinfo (void)
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}}
++@c Accessing mp_.n_mmaps and mp_.max_mmapped_mem, modified with atomics
++@c but non-atomically elsewhere, may get us inconsistent results.  We
++@c mark the statistics as unsafe, rather than the fast-path functions
++@c that collect the possibly inconsistent data.
++
++@c __libc_mallinfo @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock
++@c  ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem
++@c  mutex_lock dup @asulock @aculock
++@c  int_mallinfo @mtasuconst:mallopt [mp_ access on main_arena]
++@c   malloc_consolidate dup ok
++@c   check_malloc_state dup ok/disabled
++@c   chunksize dup ok
++@c   fastbin dupo ok
++@c   bin_at dup ok
++@c   last dup ok
++@c  mutex_unlock @aculock
++
+ This function returns information about the current dynamic memory usage
+ in a structure of type @code{struct mallinfo}.
+ @end deftypefun
+@@ -1112,6 +1595,14 @@
+ Allocate a block of @var{size} bytes, starting on a page boundary.
+ @xref{Aligned Memory Blocks}.
+ 
++@item void *aligned_alloc (size_t @var{size}, size_t @var{alignment})
++Allocate a block of @var{size} bytes, starting on an address that is a
++multiple of @var{alignment}.  @xref{Aligned Memory Blocks}.
++
++@item int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size})
++Allocate a block of @var{size} bytes, starting on an address that is a
++multiple of @var{alignment}.  @xref{Aligned Memory Blocks}.
++
+ @item void *memalign (size_t @var{size}, size_t @var{boundary})
+ Allocate a block of @var{size} bytes, starting on an address that is a
+ multiple of @var{boundary}.  @xref{Aligned Memory Blocks}.
+@@ -1134,7 +1625,8 @@
+ A pointer to a function that @code{free} uses whenever it is called.
+ 
+ @item void (*__memalign_hook) (size_t @var{size}, size_t @var{alignment}, const void *@var{caller})
+-A pointer to a function that @code{memalign} uses whenever it is called.
++A pointer to a function that @code{aligned_alloc}, @code{memalign},
++@code{posix_memalign} and @code{valloc} use whenever they are called.
+ 
+ @item struct mallinfo mallinfo (void)
+ Return information about the current dynamic memory usage.
+@@ -1171,6 +1663,20 @@
+ @comment mcheck.h
+ @comment GNU
+ @deftypefun void mtrace (void)
++@safety{@prelim{}@mtunsafe{@mtsenv{} @mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtuinit{}}@asunsafe{@asuinit{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Like the mcheck hooks, these are not designed with thread safety in
++@c mind, because the hook pointers are temporarily modified without
++@c regard to other threads, signals or cancellation.
++
++@c mtrace @mtuinit @mtasurace:mtrace @mtsenv @asuinit @ascuheap @asucorrupt @acuinit @acucorrupt @aculock @acsfd @acsmem
++@c  __libc_secure_getenv dup @mtsenv
++@c  malloc dup @ascuheap @acsmem
++@c  fopen dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  fcntl dup ok
++@c  setvbuf dup @aculock
++@c  fprintf dup (on newly-created stream) @aculock
++@c  __cxa_atexit (once) dup @asulock @aculock @acsmem
++@c  free dup @ascuheap @acsmem
+ When the @code{mtrace} function is called it looks for an environment
+ variable named @code{MALLOC_TRACE}.  This variable is supposed to
+ contain a valid file name.  The user must have write access.  If the
+@@ -1194,6 +1700,11 @@
+ @comment mcheck.h
+ @comment GNU
+ @deftypefun void muntrace (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{} @aculock{} @acsfd{}}}
++
++@c muntrace @mtasurace:mtrace @mtslocale @asucorrupt @ascuheap @acucorrupt @acsmem @aculock @acsfd
++@c  fprintf (fputs) dup @mtslocale @asucorrupt @ascuheap @acsmem @aculock @acucorrupt
++@c  fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+ The @code{muntrace} function can be called after @code{mtrace} was used
+ to enable tracing the @code{malloc} calls.  If no (successful) call of
+ @code{mtrace} was made @code{muntrace} does nothing.
+@@ -1505,6 +2016,20 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun int obstack_init (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{@acsmem{}}}
++@c obstack_init @mtsrace:obstack-ptr @acsmem
++@c  _obstack_begin @acsmem
++@c    chunkfun = obstack_chunk_alloc (suggested malloc)
++@c    freefun = obstack_chunk_free (suggested free)
++@c   *chunkfun @acsmem
++@c    obstack_chunk_alloc user-supplied
++@c   *obstack_alloc_failed_handler user-supplied
++@c    -> print_and_abort (default)
++@c
++@c print_and_abort
++@c  _ dup @ascuintl
++@c  fxprintf dup @asucorrupt @aculock @acucorrupt
++@c  exit @acucorrupt?
+ Initialize obstack @var{obstack-ptr} for allocation of objects.  This
+ function calls the obstack's @code{obstack_chunk_alloc} function.  If
+ allocation of memory fails, the function pointed to by
+@@ -1560,6 +2085,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_alloc @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_blank dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_finish dup @mtsrace:obstack-ptr @acucorrupt
+ This allocates an uninitialized block of @var{size} bytes in an obstack
+ and returns its address.  Here @var{obstack-ptr} specifies which obstack
+ to allocate the block in; it is the address of the @code{struct obstack}
+@@ -1594,6 +2123,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_copy @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_grow dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_finish dup @mtsrace:obstack-ptr @acucorrupt
+ This allocates a block and initializes it by copying @var{size}
+ bytes of data starting at @var{address}.  It calls
+ @code{obstack_alloc_failed_handler} if allocation of memory by
+@@ -1603,6 +2136,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_copy0 @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_grow0 dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_finish dup @mtsrace:obstack-ptr @acucorrupt
+ Like @code{obstack_copy}, but appends an extra byte containing a null
+ character.  This extra byte is not counted in the argument @var{size}.
+ @end deftypefun
+@@ -1635,6 +2172,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}}
++@c obstack_free @mtsrace:obstack-ptr @acucorrupt
++@c  (obstack_free) @mtsrace:obstack-ptr @acucorrupt
++@c   *freefun dup user-supplied
+ If @var{object} is a null pointer, everything allocated in the obstack
+ is freed.  Otherwise, @var{object} must be the address of an object
+ allocated in the obstack.  Then @var{object} is freed, along with
+@@ -1739,6 +2280,13 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_blank @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  _obstack_newchunk @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c   *chunkfun dup @acsmem
++@c   *obstack_alloc_failed_handler dup user-supplied
++@c   *freefun
++@c  obstack_blank_fast dup @mtsrace:obstack-ptr
+ The most basic function for adding to a growing object is
+ @code{obstack_blank}, which adds space without initializing it.
+ @end deftypefun
+@@ -1746,6 +2294,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  memcpy ok
+ To add a block of initialized space, use @code{obstack_grow}, which is
+ the growing-object analogue of @code{obstack_copy}.  It adds @var{size}
+ bytes of data to the growing object, copying the contents from
+@@ -1755,6 +2307,12 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_grow0 @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c   (no sequence point between storing NUL and incrementing next_free)
++@c   (multiple changes to next_free => @acucorrupt)
++@c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  memcpy ok
+ This is the growing-object analogue of @code{obstack_copy0}.  It adds
+ @var{size} bytes copied from @var{data}, followed by an additional null
+ character.
+@@ -1763,6 +2321,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_1grow @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_1grow_fast dup @mtsrace:obstack-ptr @acucorrupt @acsmem
+ To add one character at a time, use the function @code{obstack_1grow}.
+ It adds a single byte containing @var{c} to the growing object.
+ @end deftypefun
+@@ -1770,6 +2332,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_ptr_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_ptr_grow_fast dup @mtsrace:obstack-ptr
+ Adding the value of a pointer one can use the function
+ @code{obstack_ptr_grow}.  It adds @code{sizeof (void *)} bytes
+ containing the value of @var{data}.
+@@ -1778,6 +2344,10 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_int_grow @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c  obstack_int_grow_fast dup @mtsrace:obstack-ptr
+ A single value of type @code{int} can be added by using the
+ @code{obstack_int_grow} function.  It adds @code{sizeof (int)} bytes to
+ the growing object and initializes them with the value of @var{data}.
+@@ -1786,6 +2356,8 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}}
++@c obstack_finish @mtsrace:obstack-ptr @acucorrupt
+ When you are finished growing the object, use the function
+ @code{obstack_finish} to close it off and return its final address.
+ 
+@@ -1805,6 +2377,7 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
+ This function returns the current size of the growing object, in bytes.
+ Remember to call this function @emph{before} finishing the object.
+ After it is finished, @code{obstack_object_size} will return zero.
+@@ -1848,6 +2421,7 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun int obstack_room (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
+ This returns the number of bytes that can be added safely to the current
+ growing object (or to an object about to be started) in obstack
+ @var{obstack} using the fast growth functions.
+@@ -1859,6 +2433,9 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c obstack_1grow_fast @mtsrace:obstack-ptr @acucorrupt @acsmem
++@c   (no sequence point between copying c and incrementing next_free)
+ The function @code{obstack_1grow_fast} adds one byte containing the
+ character @var{c} to the growing object in obstack @var{obstack-ptr}.
+ @end deftypefun
+@@ -1866,6 +2443,8 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
++@c obstack_ptr_grow_fast @mtsrace:obstack-ptr
+ The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)}
+ bytes containing the value of @var{data} to the growing object in
+ obstack @var{obstack-ptr}.
+@@ -1874,6 +2453,8 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
++@c obstack_int_grow_fast @mtsrace:obstack-ptr
+ The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes
+ containing the value of @var{data} to the growing object in obstack
+ @var{obstack-ptr}.
+@@ -1882,6 +2463,8 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
++@c obstack_blank_fast @mtsrace:obstack-ptr
+ The function @code{obstack_blank_fast} adds @var{size} bytes to the
+ growing object in obstack @var{obstack-ptr} without initializing them.
+ @end deftypefun
+@@ -1909,7 +2492,7 @@
+       int room = obstack_room (obstack);
+       if (room == 0)
+         @{
+-          /* @r{Not enough room. Add one character slowly,}
++          /* @r{Not enough room.  Add one character slowly,}
+              @r{which may copy to a new chunk and make room.}  */
+           obstack_1grow (obstack, *ptr++);
+           len--;
+@@ -1940,6 +2523,7 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}}
+ This function returns the tentative address of the beginning of the
+ currently growing object in @var{obstack-ptr}.  If you finish the object
+ immediately, it will have that address.  If you make it larger first, it
+@@ -1953,6 +2537,7 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}}
+ This function returns the address of the first free byte in the current
+ chunk of obstack @var{obstack-ptr}.  This is the end of the currently
+ growing object.  If no object is growing, @code{obstack_next_free}
+@@ -1962,6 +2547,8 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
++@c dup
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}}
+ This function returns the size in bytes of the currently growing object.
+ This is equivalent to
+ 
+@@ -1986,6 +2573,7 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The value is a bit mask; a bit that is 1 indicates that the corresponding
+ bit in the address of an object should be 0.  The mask value should be one
+ less than a power of 2; the effect is that all object addresses are
+@@ -2053,6 +2641,7 @@
+ @comment obstack.h
+ @comment GNU
+ @deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This returns the chunk size of the given obstack.
+ @end deftypefn
+ 
+@@ -2172,6 +2761,7 @@
+ @comment stdlib.h
+ @comment GNU, BSD
+ @deftypefun {void *} alloca (size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The return value of @code{alloca} is the address of a block of @var{size}
+ bytes of memory, allocated in the stack frame of the calling function.
+ @end deftypefun
+@@ -2354,6 +2944,7 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int brk (void *@var{addr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{brk} sets the high end of the calling process' data segment to
+ @var{addr}.
+@@ -2396,6 +2987,8 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun void *sbrk (ptrdiff_t @var{delta})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++
+ This function is the same as @code{brk} except that you specify the new
+ end of the data segment as an offset @var{delta} from the current end
+ and on success the return value is the address of the resulting end of
+@@ -2535,6 +3128,7 @@
+ @comment sys/mman.h
+ @comment POSIX.1b
+ @deftypefun int mlock (const void *@var{addr}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{mlock} locks a range of the calling process' virtual pages.
+ 
+@@ -2588,6 +3182,7 @@
+ @comment sys/mman.h
+ @comment POSIX.1b
+ @deftypefun int munlock (const void *@var{addr}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{munlock} unlocks a range of the calling process' virtual pages.
+ 
+@@ -2600,6 +3195,7 @@
+ @comment sys/mman.h
+ @comment POSIX.1b
+ @deftypefun int mlockall (int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{mlockall} locks all the pages in a process' virtual memory address
+ space, and/or any that are added to it in the future.  This includes the
+@@ -2676,6 +3272,7 @@
+ @comment sys/mman.h
+ @comment POSIX.1b
+ @deftypefun int munlockall (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{munlockall} unlocks every page in the calling process' virtual
+ address space and turn off @code{MCL_FUTURE} future locking mode.
+diff -urN glibc-2.17-c758a686/manual/message.texi glibc-2.17-c758a686/manual/message.texi
+--- glibc-2.17-c758a686/manual/message.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/message.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -2,9 +2,9 @@
+ @c %MENU% How to make the program speak the user's language
+ @chapter Message Translation
+ 
+-The program's interface with the human should be designed in a way to
+-ease the human the task.  One of the possibilities is to use messages in
+-whatever language the user prefers.
++The program's interface with the user should be designed to ease the user's
++task.  One way to ease the user's task is to use messages in whatever
++language the user prefers.
+ 
+ Printing messages in different languages can be implemented in different
+ ways.  One could add all the different languages in the source code and
+@@ -40,7 +40,7 @@
+ @end itemize
+ 
+ The two approaches mainly differ in the implementation of this last
+-step.  The design decisions made for this influences the whole rest.
++step.  Decisions made in the last step influence the rest of the design.
+ 
+ @menu
+ * Message catalogs a la X/Open::  The @code{catgets} family of functions.
+@@ -86,7 +86,32 @@
+ @comment nl_types.h
+ @comment X/Open
+ @deftypefun nl_catd catopen (const char *@var{cat_name}, int @var{flag})
+-The @code{catgets} function tries to locate the message data file names
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c catopen @mtsenv @ascuheap @acsmem
++@c  strchr ok
++@c  setlocale(,NULL) ok
++@c  getenv @mtsenv
++@c  strlen ok
++@c  alloca ok
++@c  stpcpy ok
++@c  malloc @ascuheap @acsmem
++@c  __open_catalog @ascuheap @acsmem
++@c   strchr ok
++@c   open_not_cancel_2 @acsfd
++@c   strlen ok
++@c   ENOUGH ok
++@c    alloca ok
++@c    memcpy ok
++@c   fxstat64 ok
++@c   __set_errno ok
++@c   mmap @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   read_not_cancel ok
++@c   free dup @ascuheap @acsmem
++@c   munmap ok
++@c   close_not_cancel_no_status ok
++@c  free @ascuheap @acsmem
++The @code{catopen} function tries to locate the message data file names
+ @var{cat_name} and loads it when found.  The return value is of an
+ opaque type and can be used in calls to the other functions to refer to
+ this loaded catalog.
+@@ -243,6 +268,7 @@
+ 
+ 
+ @deftypefun {char *} catgets (nl_catd @var{catalog_desc}, int @var{set}, int @var{message}, const char *@var{string})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{catgets} has to be used to access the massage catalog
+ previously opened using the @code{catopen} function.  The
+ @var{catalog_desc} parameter must be a value previously returned by
+@@ -281,6 +307,11 @@
+ Usage}).
+ 
+ @deftypefun int catclose (nl_catd @var{catalog_desc})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c catclose @ascuheap @acucorrupt @acsmem
++@c  __set_errno ok
++@c  munmap ok
++@c  free @ascuheap @acsmem
+ The @code{catclose} function can be used to free the resources
+ associated with a message catalog which previously was opened by a call
+ to @code{catopen}.  If the resources can be successfully freed the
+@@ -803,12 +834,14 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} gettext (const char *@var{msgid})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Wrapper for dcgettext.
+ The @code{gettext} function searches the currently selected message
+ catalogs for a string which is equal to @var{msgid}.  If there is such a
+ string available it is returned.  Otherwise the argument string
+ @var{msgid} is returned.
+ 
+-Please note that all though the return value is @code{char *} the
++Please note that although the return value is @code{char *} the
+ returned string must not be changed.  This broken type results from the
+ history of the function and does not reflect the way the function should
+ be used.
+@@ -850,6 +883,8 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} dgettext (const char *@var{domainname}, const char *@var{msgid})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Wrapper for dcgettext.
+ The @code{dgettext} functions acts just like the @code{gettext}
+ function.  It only takes an additional first argument @var{domainname}
+ which guides the selection of the message catalogs which are searched
+@@ -864,6 +899,102 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} dcgettext (const char *@var{domainname}, const char *@var{msgid}, int @var{category})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c dcgettext @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c  dcigettext @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c   libc_rwlock_rdlock @asulock @aculock
++@c   current_locale_name ok [protected from @mtslocale]
++@c   tfind ok
++@c   libc_rwlock_unlock ok
++@c   plural_lookup ok
++@c    plural_eval ok
++@c    rawmemchr ok
++@c   DETERMINE_SECURE ok, nothing
++@c   strcmp ok
++@c   strlen ok
++@c   getcwd @ascuheap @acsmem @acsfd
++@c   strchr ok
++@c   stpcpy ok
++@c   category_to_name ok
++@c   guess_category_value @mtsenv
++@c    getenv @mtsenv
++@c    current_locale_name dup ok [protected from @mtslocale by dcigettext]
++@c    strcmp ok
++@c   ENABLE_SECURE ok
++@c   _nl_find_domain @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c    libc_rwlock_rdlock dup @asulock @aculock
++@c    _nl_make_l10nflist dup @ascuheap @acsmem
++@c    libc_rwlock_unlock dup ok
++@c    _nl_load_domain @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c     libc_lock_lock_recursive @aculock
++@c     libc_lock_unlock_recursive @aculock
++@c     open->open_not_cancel_2 @acsfd
++@c     fstat ok
++@c     mmap dup @acsmem
++@c     close->close_not_cancel_no_status @acsfd
++@c     malloc dup @ascuheap @acsmem
++@c     read->read_not_cancel ok
++@c     munmap dup @acsmem
++@c     W dup ok
++@c     strlen dup ok
++@c     get_sysdep_segment_value ok
++@c     memcpy dup ok
++@c     hash_string dup ok
++@c     free dup @ascuheap @acsmem
++@c     libc_rwlock_init ok
++@c     _nl_find_msg dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c     libc_rwlock_fini ok
++@c     EXTRACT_PLURAL_EXPRESSION @ascuheap @acsmem
++@c      strstr dup ok
++@c      isspace ok
++@c      strtoul ok
++@c      PLURAL_PARSE @ascuheap @acsmem
++@c       malloc dup @ascuheap @acsmem
++@c       free dup @ascuheap @acsmem
++@c      INIT_GERMANIC_PLURAL ok, nothing
++@c        the pre-C99 variant is @acucorrupt [protected from @mtuinit by dcigettext]
++@c    _nl_expand_alias dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c    _nl_explode_name dup @ascuheap @acsmem
++@c    libc_rwlock_wrlock dup @asulock @aculock
++@c    free dup @asulock @aculock @acsfd @acsmem
++@c   _nl_find_msg @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c    _nl_load_domain dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem
++@c    strlen ok
++@c    hash_string ok
++@c    W ok
++@c     SWAP ok
++@c      bswap_32 ok
++@c    strcmp ok
++@c    get_output_charset @mtsenv @ascuheap @acsmem
++@c     getenv dup @mtsenv
++@c     strlen dup ok
++@c     malloc dup @ascuheap @acsmem
++@c     memcpy dup ok
++@c    libc_rwlock_rdlock dup @asulock @aculock
++@c    libc_rwlock_unlock dup ok
++@c    libc_rwlock_wrlock dup @asulock @aculock
++@c    realloc @ascuheap @acsmem
++@c    strdup @ascuheap @acsmem
++@c    strstr ok
++@c    strcspn ok
++@c    mempcpy dup ok
++@c    norm_add_slashes dup ok
++@c    gconv_open @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     [protected from @mtslocale by dcigettext locale lock]
++@c    free dup @ascuheap @acsmem
++@c    libc_lock_lock @asulock @aculock
++@c    calloc @ascuheap @acsmem
++@c    gconv dup @acucorrupt [protected from @mtsrace and @asucorrupt by lock]
++@c    libc_lock_unlock ok
++@c   malloc @ascuheap @acsmem
++@c   mempcpy ok
++@c   memcpy ok
++@c   strcpy ok
++@c   libc_rwlock_wrlock @asulock @aculock
++@c   tsearch @ascuheap @acucorrupt @acsmem [protected from @mtsrace and @asucorrupt]
++@c    transcmp ok
++@c     strmp dup ok
++@c   free @ascuheap @acsmem
+ The @code{dcgettext} adds another argument to those which
+ @code{dgettext} takes.  This argument @var{category} specifies the last
+ piece of information needed to localize the message catalog.  I.e., the
+@@ -967,7 +1098,7 @@
+ second best choice to fall back on the language of the developer and
+ simply not translate any message.  Instead a user might be better able
+ to read the messages in another language and so the user of the program
+-should be able to define an precedence order of languages.
++should be able to define a precedence order of languages.
+ @end itemize
+ 
+ We can divide the configuration actions in two parts: the one is
+@@ -988,6 +1119,13 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} textdomain (const char *@var{domainname})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
++@c textdomain @asulock @ascuheap @aculock @acsmem
++@c  libc_rwlock_wrlock @asulock @aculock
++@c  strcmp ok
++@c  strdup @ascuheap @acsmem
++@c  free @ascuheap @acsmem
++@c  libc_rwlock_unlock ok
+ The @code{textdomain} function sets the default domain, which is used in
+ all future @code{gettext} calls, to @var{domainname}.  Please note that
+ @code{dgettext} and @code{dcgettext} calls are not influenced if the
+@@ -1019,6 +1157,14 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} bindtextdomain (const char *@var{domainname}, const char *@var{dirname})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c bindtextdomain @ascuheap @acsmem
++@c  set_binding_values @ascuheap @acsmem
++@c   libc_rwlock_wrlock dup @asulock @aculock
++@c   strcmp dup ok
++@c   strdup dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c   malloc dup @ascuheap @acsmem
+ The @code{bindtextdomain} function can be used to specify the directory
+ which contains the message catalogs for domain @var{domainname} for the
+ different languages.  To be correct, this is the directory where the
+@@ -1114,7 +1260,7 @@
+ extended @code{gettext} interface should be used.
+ 
+ These extra functions are taking instead of the one key string two
+-strings and an numerical argument.  The idea behind this is that using
++strings and a numerical argument.  The idea behind this is that using
+ the numerical argument and the first string as a key, the implementation
+ can select using rules specified by the translator the right plural
+ form.  The two string arguments then will be used to provide a return
+@@ -1134,6 +1280,8 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} ngettext (const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Wrapper for dcngettext.
+ The @code{ngettext} function is similar to the @code{gettext} function
+ as it finds the message catalogs in the same way.  But it takes two
+ extra arguments.  The @var{msgid1} parameter must contain the singular
+@@ -1157,6 +1305,8 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} dngettext (const char *@var{domain}, const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Wrapper for dcngettext.
+ The @code{dngettext} is similar to the @code{dgettext} function in the
+ way the message catalog is selected.  The difference is that it takes
+ two extra parameter to provide the correct plural form.  These two
+@@ -1166,6 +1316,8 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} dcngettext (const char *@var{domain}, const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n}, int @var{category})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Wrapper for dcigettext.
+ The @code{dcngettext} is similar to the @code{dcgettext} function in the
+ way the message catalog is selected.  The difference is that it takes
+ two extra parameter to provide the correct plural form.  These two
+@@ -1422,6 +1574,9 @@
+ @comment libintl.h
+ @comment GNU
+ @deftypefun {char *} bind_textdomain_codeset (const char *@var{domainname}, const char *@var{codeset})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c bind_textdomain_codeset @ascuheap @acsmem
++@c  set_binding_values dup @ascuheap @acsmem
+ The @code{bind_textdomain_codeset} function can be used to specify the
+ output character set for message catalogs for domain @var{domainname}.
+ The @var{codeset} argument must be a valid codeset name which can be used
+@@ -1429,7 +1584,7 @@
+ 
+ If the @var{codeset} parameter is the null pointer,
+ @code{bind_textdomain_codeset} returns the currently selected codeset
+-for the domain with the name @var{domainname}. It returns @code{NULL} if
++for the domain with the name @var{domainname}.  It returns @code{NULL} if
+ no codeset has yet been selected.
+ 
+ The @code{bind_textdomain_codeset} function can be used several times.
+@@ -1441,7 +1596,8 @@
+ allocated internally in the function and must not be changed by the
+ user.  If the system went out of core during the execution of
+ @code{bind_textdomain_codeset}, the return value is @code{NULL} and the
+-global variable @var{errno} is set accordingly.  @end deftypefun
++global variable @var{errno} is set accordingly.
++@end deftypefun
+ 
+ 
+ @node GUI program problems
+diff -urN glibc-2.17-c758a686/manual/nss.texi glibc-2.17-c758a686/manual/nss.texi
+--- glibc-2.17-c758a686/manual/nss.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/nss.texi	2014-09-12 16:10:25.996741462 -0400
+@@ -10,7 +10,7 @@
+ using files (e.g., @file{/etc/passwd}), but other nameservices (like the
+ Network Information Service (NIS) and the Domain Name Service (DNS))
+ became popular, and were hacked into the C library, usually with a fixed
+-search order (@pxref{frobnicate, , ,jargon, The Jargon File}).
++search order.
+ 
+ @Theglibc{} contains a cleaner solution of this problem.  It is
+ designed after a method used by Sun Microsystems in the C library of
+diff -urN glibc-2.17-c758a686/manual/pattern.texi glibc-2.17-c758a686/manual/pattern.texi
+--- glibc-2.17-c758a686/manual/pattern.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/pattern.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -28,6 +28,38 @@
+ @comment fnmatch.h
+ @comment POSIX.2
+ @deftypefun int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c fnmatch @mtsenv @mtslocale @ascuheap @acsmem
++@c  strnlen dup ok
++@c  mbsrtowcs
++@c  memset dup ok
++@c  malloc dup @ascuheap @acsmem
++@c  mbsinit dup ok
++@c  free dup @ascuheap @acsmem
++@c  FCT = internal_fnwmatch @mtsenv @mtslocale @ascuheap @acsmem
++@c   FOLD @mtslocale
++@c    towlower @mtslocale
++@c   EXT @mtsenv @mtslocale @ascuheap @acsmem
++@c    STRLEN = wcslen dup ok
++@c    getenv @mtsenv
++@c    malloc dup @ascuheap @acsmem
++@c    MEMPCPY = wmempcpy dup ok
++@c    FCT dup @mtsenv @mtslocale @ascuheap @acsmem
++@c    STRCAT = wcscat dup ok
++@c    free dup @ascuheap @acsmem
++@c   END @mtsenv
++@c    getenv @mtsenv
++@c   MEMCHR = wmemchr dup ok
++@c   getenv @mtsenv
++@c   IS_CHAR_CLASS = is_char_class @mtslocale
++@c    wctype @mtslocale
++@c   BTOWC ok
++@c   ISWCTYPE ok
++@c   auto findidx dup ok
++@c   elem_hash dup ok
++@c   memcmp dup ok
++@c   collseq_table_lookup dup ok
++@c   NO_LEADING_PERIOD ok
+ This function tests whether the string @var{string} matches the pattern
+ @var{pattern}.  It returns @code{0} if they do match; otherwise, it
+ returns the nonzero value @code{FNM_NOMATCH}.  The arguments
+@@ -36,11 +68,8 @@
+ The argument @var{flags} is a combination of flag bits that alter the
+ details of matching.  See below for a list of the defined flags.
+ 
+-In @theglibc{}, @code{fnmatch} cannot experience an ``error''---it
+-always returns an answer for whether the match succeeds.  However, other
+-implementations of @code{fnmatch} might sometimes report ``errors''.
+-They would do so by returning nonzero values that are not equal to
+-@code{FNM_NOMATCH}.
++In @theglibc{}, @code{fnmatch} might sometimes report ``errors'' by
++returning nonzero values that are not equal to @code{FNM_NOMATCH}.
+ @end deftypefun
+ 
+ These are the available flags for the @var{flags} argument:
+@@ -234,6 +263,12 @@
+ (*) (const char *,} @w{struct stat *)}}.
+ 
+ This is a GNU extension.
++
++@item gl_flags
++The flags used when @code{glob} was called.  In addition, @code{GLOB_MAGCHAR}
++might be set.  See @ref{Flags for Globbing} for more details.
++
++This is a GNU extension.
+ @end table
+ @end deftp
+ 
+@@ -312,12 +347,75 @@
+ (*) (const char *,} @w{struct stat64 *)}}.
+ 
+ This is a GNU extension.
++
++@item gl_flags
++The flags used when @code{glob} was called.  In addition, @code{GLOB_MAGCHAR}
++might be set.  See @ref{Flags for Globbing} for more details.
++
++This is a GNU extension.
+ @end table
+ @end deftp
+ 
+ @comment glob.h
+ @comment POSIX.2
+ @deftypefun int glob (const char *@var{pattern}, int @var{flags}, int (*@var{errfunc}) (const char *@var{filename}, int @var{error-code}), glob_t *@var{vector-ptr})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c glob @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  strlen dup ok
++@c  strchr dup ok
++@c  malloc dup @ascuheap @acsmem
++@c  mempcpy dup ok
++@c  next_brace_sub ok
++@c  free dup @ascuheap @acsmem
++@c  globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c  glob_pattern_p ok
++@c   glob_pattern_type dup ok
++@c  getenv dup @mtsenv
++@c  GET_LOGIN_NAME_MAX ok
++@c  getlogin_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  GETPW_R_SIZE_MAX ok
++@c  getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  memcpy dup ok
++@c  memchr dup ok
++@c  *pglob->gl_stat user-supplied
++@c  stat64 dup ok
++@c  S_ISDIR dup ok
++@c  strdup dup @ascuheap @acsmem
++@c  glob_pattern_type ok
++@c  glob_in_dir @mtsenv @mtslocale @asucorrupt @ascuheap @acucorrupt @acsfd @acsmem
++@c   strlen dup ok
++@c   glob_pattern_type dup ok
++@c   malloc dup @ascuheap @acsmem
++@c   mempcpy dup ok
++@c   *pglob->gl_stat user-supplied
++@c   stat64 dup ok
++@c   free dup @ascuheap @acsmem
++@c   *pglob->gl_opendir user-supplied
++@c   opendir dup @ascuheap @acsmem @acsfd
++@c   dirfd dup ok
++@c   *pglob->gl_readdir user-supplied
++@c   CONVERT_DIRENT_DIRENT64 ok
++@c   readdir64 ok [protected by exclusive use of the stream]
++@c   REAL_DIR_ENTRY ok
++@c   DIRENT_MIGHT_BE_DIR ok
++@c   fnmatch dup @mtsenv @mtslocale @ascuheap @acsmem
++@c   DIRENT_MIGHT_BE_SYMLINK ok
++@c   link_exists_p ok
++@c    link_exists2_p ok
++@c     strlen dup ok
++@c     mempcpy dup ok
++@c     *pglob->gl_stat user-supplied
++@c    fxstatat64 dup ok
++@c   realloc dup @ascuheap @acsmem
++@c   pglob->gl_closedir user-supplied
++@c   closedir @ascuheap @acsmem @acsfd
++@c  prefix_array dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c   strlen dup ok
++@c   malloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c   mempcpy dup ok
++@c  strcpy dup ok
+ The function @code{glob} does globbing using the pattern @var{pattern}
+ in the current directory.  It puts the result in a newly allocated
+ vector, and stores the size and address of this vector into
+@@ -389,6 +487,8 @@
+ @comment glob.h
+ @comment GNU
+ @deftypefun int glob64 (const char *@var{pattern}, int @var{flags}, int (*@var{errfunc}) (const char *@var{filename}, int @var{error-code}), glob64_t *@var{vector-ptr})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Same code as glob, but with glob64_t #defined as glob_t.
+ The @code{glob64} function was added as part of the Large File Summit
+ extensions but is not part of the original LFS proposal.  The reason for
+ this is simple: it is not necessary.  The necessity for a @code{glob64}
+@@ -408,10 +508,12 @@
+ @node Flags for Globbing
+ @subsection Flags for Globbing
+ 
+-This section describes the flags that you can specify in the
++This section describes the standard flags that you can specify in the
+ @var{flags} argument to @code{glob}.  Choose the flags you want,
+ and combine them with the C bitwise OR operator @code{|}.
+ 
++Note that there are @ref{More Flags for Globbing} available as GNU extensions.
++
+ @vtable @code
+ @comment glob.h
+ @comment POSIX.2
+@@ -481,13 +583,6 @@
+ 
+ @comment glob.h
+ @comment POSIX.2
+-@item GLOB_NOSORT
+-Don't sort the file names; return them in no particular order.
+-(In practice, the order will depend on the order of the entries in
+-the directory.)  The only reason @emph{not} to sort is to save time.
+-
+-@comment glob.h
+-@comment POSIX.2
+ @item GLOB_NOESCAPE
+ Don't treat the @samp{\} character specially in patterns.  Normally,
+ @samp{\} quotes the following character, turning off its special meaning
+@@ -500,6 +595,13 @@
+ @code{glob} does its work by calling the function @code{fnmatch}
+ repeatedly.  It handles the flag @code{GLOB_NOESCAPE} by turning on the
+ @code{FNM_NOESCAPE} flag in calls to @code{fnmatch}.
++
++@comment glob.h
++@comment POSIX.2
++@item GLOB_NOSORT
++Don't sort the file names; return them in no particular order.
++(In practice, the order will depend on the order of the entries in
++the directory.)  The only reason @emph{not} to sort is to save time.
+ @end vtable
+ 
+ @node More Flags for Globbing
+@@ -651,6 +753,9 @@
+ @comment glob.h
+ @comment POSIX.2
+ @deftypefun void globfree (glob_t *@var{pglob})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c  free dup @ascuheap @acsmem
+ The @code{globfree} function frees all resources allocated by previous
+ calls to @code{glob} associated with the object pointed to by
+ @var{pglob}.  This function should be called whenever the currently used
+@@ -660,6 +765,7 @@
+ @comment glob.h
+ @comment GNU
+ @deftypefun void globfree64 (glob64_t *@var{pglob})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
+ This function is equivalent to @code{globfree} but it frees records of
+ type @code{glob64_t} which were allocated by @code{glob64}.
+ @end deftypefun
+@@ -722,6 +828,250 @@
+ @comment regex.h
+ @comment POSIX.2
+ @deftypefun int regcomp (regex_t *restrict @var{compiled}, const char *restrict @var{pattern}, int @var{cflags})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c All of the issues have to do with memory allocation and multi-byte
++@c character handling present in the input string, or implied by ranges
++@c or inverted character classes.
++@c (re_)malloc @ascuheap @acsmem
++@c re_compile_internal @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  (re_)realloc @ascuheap @acsmem [no @asucorrupt @acucorrupt for we zero the buffer]
++@c  init_dfa @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   (re_)malloc @ascuheap @acsmem
++@c   calloc @ascuheap @acsmem
++@c   _NL_CURRENT ok
++@c   _NL_CURRENT_WORD ok
++@c   btowc @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  libc_lock_init ok
++@c  re_string_construct @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   re_string_construct_common ok
++@c   re_string_realloc_buffers @ascuheap @acsmem
++@c    (re_)realloc dup @ascuheap @acsmem
++@c   build_wcs_upper_buffer @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    isascii ok
++@c    mbsinit ok
++@c    toupper ok
++@c    mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    iswlower @mtslocale
++@c    towupper @mtslocale
++@c    wcrtomb dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    (re_)malloc dup @ascuheap @acsmem
++@c   build_upper_buffer ok (@mtslocale but optimized)
++@c    islower ok
++@c    toupper ok
++@c   build_wcs_buffer @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   re_string_translate_buffer ok
++@c  parse @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   fetch_token @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    peek_token @mtslocale
++@c     re_string_eoi ok
++@c     re_string_peek_byte ok
++@c     re_string_cur_idx ok
++@c     re_string_length ok
++@c     re_string_peek_byte_case @mtslocale
++@c      re_string_peek_byte dup ok
++@c      re_string_is_single_byte_char ok
++@c      isascii ok
++@c      re_string_peek_byte dup ok
++@c     re_string_wchar_at ok
++@c     re_string_skip_bytes ok
++@c    re_string_skip_bytes dup ok
++@c   parse_reg_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    parse_branch @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     parse_expression @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c      create_token_tree dup @ascuheap @acsmem
++@c      re_string_eoi dup ok
++@c      re_string_first_byte ok
++@c      fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c      create_tree dup @ascuheap @acsmem
++@c      parse_sub_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       parse_reg_exp dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       postorder() @ascuheap @acsmem
++@c        free_tree @ascuheap @acsmem
++@c         free_token dup @ascuheap @acsmem
++@c       create_tree dup @ascuheap @acsmem
++@c      parse_bracket_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       _NL_CURRENT dup ok
++@c       _NL_CURRENT_WORD dup ok
++@c       calloc dup @ascuheap @acsmem
++@c       (re_)free dup @ascuheap @acsmem
++@c       peek_token_bracket ok
++@c        re_string_eoi dup ok
++@c        re_string_peek_byte dup ok
++@c        re_string_first_byte dup ok
++@c        re_string_cur_idx dup ok
++@c        re_string_length dup ok
++@c        re_string_skip_bytes dup ok
++@c       bitset_set ok
++@c       re_string_skip_bytes ok
++@c       parse_bracket_element @mtslocale
++@c        re_string_char_size_at ok
++@c        re_string_wchar_at dup ok
++@c        re_string_skip_bytes dup ok
++@c        parse_bracket_symbol @mtslocale
++@c         re_string_eoi dup ok
++@c         re_string_fetch_byte_case @mtslocale
++@c          re_string_fetch_byte ok
++@c          re_string_first_byte dup ok
++@c          isascii ok
++@c          re_string_char_size_at dup ok
++@c          re_string_skip_bytes dup ok
++@c         re_string_fetch_byte dup ok
++@c         re_string_peek_byte dup ok
++@c         re_string_skip_bytes dup ok
++@c        peek_token_bracket dup ok
++@c       auto build_range_exp @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c        auto lookup_collation_sequence_value @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c         btowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c         collseq_table_lookup ok
++@c         auto seek_collating_symbol_entry dup ok
++@c        (re_)realloc dup @ascuheap @acsmem
++@c        collseq_table_lookup dup ok
++@c       bitset_set dup ok
++@c       (re_)realloc dup @ascuheap @acsmem
++@c       build_equiv_class @mtslocale @ascuheap @acsmem
++@c        _NL_CURRENT ok
++@c        auto findidx ok
++@c        bitset_set dup ok
++@c        (re_)realloc dup @ascuheap @acsmem
++@c       auto build_collating_symbol @ascuheap @acsmem
++@c        auto seek_collating_symbol_entry ok
++@c        bitset_set dup ok
++@c        (re_)realloc dup @ascuheap @acsmem
++@c       build_charclass @mtslocale @ascuheap @acsmem
++@c        (re_)realloc dup @ascuheap @acsmem
++@c        bitset_set dup ok
++@c        isalnum ok
++@c        iscntrl ok
++@c        isspace ok
++@c        isalpha ok
++@c        isdigit ok
++@c        isprint ok
++@c        isupper ok
++@c        isblank ok
++@c        isgraph ok
++@c        ispunct ok
++@c        isxdigit ok
++@c       bitset_not ok
++@c       bitset_mask ok
++@c       create_token_tree dup @ascuheap @acsmem
++@c       create_tree dup @ascuheap @acsmem
++@c       free_charset dup @ascuheap @acsmem
++@c      init_word_char @mtslocale
++@c       isalnum ok
++@c      build_charclass_op @mtslocale @ascuheap @acsmem
++@c       calloc dup @ascuheap @acsmem
++@c       build_charclass dup @mtslocale @ascuheap @acsmem
++@c       (re_)free dup @ascuheap @acsmem
++@c       free_charset dup @ascuheap @acsmem
++@c       bitset_set dup ok
++@c       bitset_not dup ok
++@c       bitset_mask dup ok
++@c       create_token_tree dup @ascuheap @acsmem
++@c       create_tree dup @ascuheap @acsmem
++@c      parse_dup_op @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       re_string_cur_idx dup ok
++@c       fetch_number @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c        fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       re_string_set_index ok
++@c       postorder() @ascuheap @acsmem
++@c        free_tree dup @ascuheap @acsmem
++@c        mark_opt_subexp ok
++@c       duplicate_tree @ascuheap @acsmem
++@c        create_token_tree dup @ascuheap @acsmem
++@c       create_tree dup @ascuheap @acsmem
++@c     postorder() @ascuheap @acsmem
++@c      free_tree dup @ascuheap @acsmem
++@c    fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    parse_branch dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    create_tree dup @ascuheap @acsmem
++@c   create_tree @ascuheap @acsmem
++@c    create_token_tree @ascuheap @acsmem
++@c     (re_)malloc dup @ascuheap @acsmem
++@c  analyze @ascuheap @acsmem
++@c   (re_)malloc dup @ascuheap @acsmem
++@c   preorder() @ascuheap @acsmem
++@c    optimize_subexps ok
++@c    calc_next ok
++@c    link_nfa_nodes @ascuheap @acsmem
++@c     re_node_set_init_1 @ascuheap @acsmem
++@c      (re_)malloc dup @ascuheap @acsmem
++@c     re_node_set_init_2 @ascuheap @acsmem
++@c      (re_)malloc dup @ascuheap @acsmem
++@c   postorder() @ascuheap @acsmem
++@c    lower_subexps @ascuheap @acsmem
++@c     lower_subexp @ascuheap @acsmem
++@c      create_tree dup @ascuheap @acsmem
++@c    calc_first @ascuheap @acsmem
++@c     re_dfa_add_node @ascuheap @acsmem
++@c      (re_)realloc dup @ascuheap @acsmem
++@c      re_node_set_init_empty ok
++@c   calc_eclosure @ascuheap @acsmem
++@c    calc_eclosure_iter @ascuheap @acsmem
++@c     re_node_set_alloc @ascuheap @acsmem
++@c      (re_)malloc dup @ascuheap @acsmem
++@c     duplicate_node_closure @ascuheap @acsmem
++@c      re_node_set_empty ok
++@c      duplicate_node @ascuheap @acsmem
++@c       re_dfa_add_node dup @ascuheap @acsmem
++@c      re_node_set_insert @ascuheap @acsmem
++@c       (re_)realloc dup @ascuheap @acsmem
++@c      search_duplicated_node ok
++@c     re_node_set_merge @ascuheap @acsmem
++@c      (re_)realloc dup @ascuheap @acsmem
++@c     re_node_set_free @ascuheap @acsmem
++@c      (re_)free dup @ascuheap @acsmem
++@c     re_node_set_insert dup @ascuheap @acsmem
++@c    re_node_set_free dup @ascuheap @acsmem
++@c   calc_inveclosure @ascuheap @acsmem
++@c    re_node_set_init_empty dup ok
++@c    re_node_set_insert_last @ascuheap @acsmem
++@c     (re_)realloc dup @ascuheap @acsmem
++@c  optimize_utf8 ok
++@c  create_initial_state @ascuheap @acsmem
++@c   re_node_set_init_copy @ascuheap @acsmem
++@c    (re_)malloc dup @ascuheap @acsmem
++@c    re_node_set_init_empty dup ok
++@c   re_node_set_contains ok
++@c   re_node_set_merge dup @ascuheap @acsmem
++@c   re_acquire_state_context @ascuheap @acsmem
++@c    calc_state_hash ok
++@c    re_node_set_compare ok
++@c    create_cd_newstate @ascuheap @acsmem
++@c     calloc dup @ascuheap @acsmem
++@c     re_node_set_init_copy dup @ascuheap @acsmem
++@c     (re_)free dup @ascuheap @acsmem
++@c     free_state @ascuheap @acsmem
++@c      re_node_set_free dup @ascuheap @acsmem
++@c      (re_)free dup @ascuheap @acsmem
++@c     NOT_SATISFY_PREV_CONSTRAINT ok
++@c     re_node_set_remove_at ok
++@c     register_state @ascuheap @acsmem
++@c      re_node_set_alloc dup @ascuheap @acsmem
++@c      re_node_set_insert_last dup @ascuheap @acsmem
++@c      (re_)realloc dup @ascuheap @acsmem
++@c   re_node_set_free dup @ascuheap @acsmem
++@c  free_workarea_compile @ascuheap @acsmem
++@c   (re_)free dup @ascuheap @acsmem
++@c  re_string_destruct @ascuheap @acsmem
++@c   (re_)free dup @ascuheap @acsmem
++@c  free_dfa_content @ascuheap @acsmem
++@c   free_token @ascuheap @acsmem
++@c    free_charset @ascuheap @acsmem
++@c     (re_)free dup @ascuheap @acsmem
++@c    (re_)free dup @ascuheap @acsmem
++@c   (re_)free dup @ascuheap @acsmem
++@c   re_node_set_free dup @ascuheap @acsmem
++@c re_compile_fastmap @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  re_compile_fastmap_iter @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   re_set_fastmap ok
++@c    tolower ok
++@c   mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   wcrtomb dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   towlower @mtslocale
++@c   _NL_CURRENT ok
++@c (re_)free @ascuheap @acsmem
+ The function @code{regcomp} ``compiles'' a regular expression into a
+ data structure that you can use with @code{regexec} to match against a
+ string.  The compiled regular expression format is designed for
+@@ -871,6 +1221,247 @@
+ @comment regex.h
+ @comment POSIX.2
+ @deftypefun int regexec (const regex_t *restrict @var{compiled}, const char *restrict @var{string}, size_t @var{nmatch}, regmatch_t @var{matchptr}[restrict], int @var{eflags})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c libc_lock_lock @asulock @aculock
++@c re_search_internal @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  re_string_allocate @ascuheap @acsmem
++@c   re_string_construct_common dup ok
++@c   re_string_realloc_buffers dup @ascuheap @acsmem
++@c  match_ctx_init @ascuheap @acsmem
++@c   (re_)malloc dup @ascuheap @acsmem
++@c  re_string_byte_at ok
++@c  re_string_first_byte dup ok
++@c  check_matching @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   re_string_cur_idx dup ok
++@c   acquire_init_state_context dup @ascuheap @acsmem
++@c    re_string_context_at ok
++@c     re_string_byte_at dup ok
++@c     bitset_contain ok
++@c    re_acquire_state_context dup @ascuheap @acsmem
++@c   check_subexp_matching_top @ascuheap @acsmem
++@c    match_ctx_add_subtop @ascuheap @acsmem
++@c     (re_)realloc dup @ascuheap @acsmem
++@c     calloc dup @ascuheap @acsmem
++@c   transit_state_bkref @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    re_string_cur_idx dup ok
++@c    re_string_context_at dup ok
++@c    NOT_SATISFY_NEXT_CONSTRAINT ok
++@c    get_subexp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     re_string_get_buffer ok
++@c     search_cur_bkref_entry ok
++@c     clean_state_log_if_needed @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c      extend_buffers @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       re_string_realloc_buffers dup @ascuheap @acsmem
++@c       (re_)realloc dup @ascuheap @acsmem
++@c       build_wcs_upper_buffer dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       build_upper_buffer dup ok (@mtslocale but optimized)
++@c       build_wcs_buffer dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       re_string_translate_buffer dup ok
++@c     get_subexp_sub @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c      check_arrival @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c       (re_)realloc dup @ascuheap @acsmem
++@c       re_string_context_at dup ok
++@c       re_node_set_init_1 dup @ascuheap @acsmem
++@c       check_arrival_expand_ecl @ascuheap @acsmem
++@c        re_node_set_alloc dup @ascuheap @acsmem
++@c        find_subexp_node ok
++@c        re_node_set_merge dup @ascuheap @acsmem
++@c        re_node_set_free dup @ascuheap @acsmem
++@c        check_arrival_expand_ecl_sub @ascuheap @acsmem
++@c         re_node_set_contains dup ok
++@c         re_node_set_insert dup @ascuheap @acsmem
++@c       re_node_set_free dup @ascuheap @acsmem
++@c       re_node_set_init_copy dup @ascuheap @acsmem
++@c       re_node_set_init_empty dup ok
++@c       expand_bkref_cache @ascuheap @acsmem
++@c        search_cur_bkref_entry dup ok
++@c        re_node_set_contains dup ok
++@c        re_node_set_init_1 dup @ascuheap @acsmem
++@c        check_arrival_expand_ecl dup @ascuheap @acsmem
++@c        re_node_set_merge dup @ascuheap @acsmem
++@c        re_node_set_init_copy dup @ascuheap @acsmem
++@c        re_node_set_insert dup @ascuheap @acsmem
++@c        re_node_set_free dup @ascuheap @acsmem
++@c        re_acquire_state @ascuheap @acsmem
++@c         calc_state_hash dup ok
++@c         re_node_set_compare dup ok
++@c         create_ci_newstate @ascuheap @acsmem
++@c          calloc dup @ascuheap @acsmem
++@c          re_node_set_init_copy dup @ascuheap @acsmem
++@c          (re_)free dup @ascuheap @acsmem
++@c          register_state dup @ascuheap @acsmem
++@c          free_state dup @ascuheap @acsmem
++@c       re_acquire_state_context dup @ascuheap @acsmem
++@c       re_node_set_merge dup @ascuheap @acsmem
++@c       check_arrival_add_next_nodes @mtslocale @ascuheap @acsmem
++@c        re_node_set_init_empty dup ok
++@c        check_node_accept_bytes @mtslocale @ascuheap @acsmem
++@c         re_string_byte_at dup ok
++@c         re_string_char_size_at dup ok
++@c         re_string_elem_size_at @mtslocale
++@c          _NL_CURRENT_WORD dup ok
++@c          _NL_CURRENT dup ok
++@c          auto findidx dup ok
++@c         _NL_CURRENT_WORD dup ok
++@c         _NL_CURRENT dup ok
++@c         collseq_table_lookup dup ok
++@c         find_collation_sequence_value @mtslocale
++@c          _NL_CURRENT_WORD dup ok
++@c          _NL_CURRENT dup ok
++@c         auto findidx dup ok
++@c         wcscoll @mtslocale @ascuheap @acsmem
++@c        re_node_set_empty dup ok
++@c        re_node_set_merge dup @ascuheap @acsmem
++@c        re_node_set_free dup @ascuheap @acsmem
++@c        re_node_set_insert dup @ascuheap @acsmem
++@c        re_acquire_state dup @ascuheap @acsmem
++@c        check_node_accept ok
++@c         re_string_byte_at dup ok
++@c         bitset_contain dup ok
++@c         re_string_context_at dup ok
++@c         NOT_SATISFY_NEXT_CONSTRAINT dup ok
++@c      match_ctx_add_entry @ascuheap @acsmem
++@c       (re_)realloc dup @ascuheap @acsmem
++@c       (re_)free dup @ascuheap @acsmem
++@c      clean_state_log_if_needed dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     extend_buffers dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     find_subexp_node dup ok
++@c     calloc dup @ascuheap @acsmem
++@c     check_arrival dup ***
++@c     match_ctx_add_sublast @ascuheap @acsmem
++@c      (re_)realloc dup @ascuheap @acsmem
++@c    re_acquire_state_context dup @ascuheap @acsmem
++@c    re_node_set_init_union @ascuheap @acsmem
++@c     (re_)malloc dup @ascuheap @acsmem
++@c     re_node_set_init_copy dup @ascuheap @acsmem
++@c     re_node_set_init_empty dup ok
++@c    re_node_set_free dup @ascuheap @acsmem
++@c    check_subexp_matching_top dup @ascuheap @acsmem
++@c   check_halt_state_context ok
++@c    re_string_context_at dup ok
++@c    check_halt_node_context ok
++@c     NOT_SATISFY_NEXT_CONSTRAINT dup ok
++@c   re_string_eoi dup ok
++@c   extend_buffers dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   transit_state @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    transit_state_mb @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     re_string_context_at dup ok
++@c     NOT_SATISFY_NEXT_CONSTRAINT dup ok
++@c     check_node_accept_bytes dup @mtslocale @ascuheap @acsmem
++@c     re_string_cur_idx dup ok
++@c     clean_state_log_if_needed @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     re_node_set_init_union dup @ascuheap @acsmem
++@c     re_acquire_state_context dup @ascuheap @acsmem
++@c    re_string_fetch_byte dup ok
++@c    re_string_context_at dup ok
++@c    build_trtable @ascuheap @acsmem
++@c     (re_)malloc dup @ascuheap @acsmem
++@c     group_nodes_into_DFAstates @ascuheap @acsmem
++@c      bitset_empty dup ok
++@c      bitset_set dup ok
++@c      bitset_merge dup ok
++@c      bitset_set_all ok
++@c      bitset_clear ok
++@c      bitset_contain dup ok
++@c      bitset_copy ok
++@c      re_node_set_init_copy dup @ascuheap @acsmem
++@c      re_node_set_insert dup @ascuheap @acsmem
++@c      re_node_set_init_1 dup @ascuheap @acsmem
++@c      re_node_set_free dup @ascuheap @acsmem
++@c     re_node_set_alloc dup @ascuheap @acsmem
++@c     malloc dup @ascuheap @acsmem
++@c     free dup @ascuheap @acsmem
++@c     re_node_set_free dup @ascuheap @acsmem
++@c     bitset_empty ok
++@c     re_node_set_empty dup ok
++@c     re_node_set_merge dup @ascuheap @acsmem
++@c     re_acquire_state_context dup @ascuheap @acsmem
++@c     bitset_merge ok
++@c     calloc dup @ascuheap @acsmem
++@c     bitset_contain dup ok
++@c   merge_state_with_log @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    re_string_cur_idx dup ok
++@c    re_node_set_init_union dup @ascuheap @acsmem
++@c    re_string_context_at dup ok
++@c    re_node_set_free dup @ascuheap @acsmem
++@c    check_subexp_matching_top @ascuheap @acsmem
++@c     match_ctx_add_subtop dup @ascuheap @acsmem
++@c    transit_state_bkref dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   find_recover_state
++@c    re_string_cur_idx dup ok
++@c    re_string_skip_bytes dup ok
++@c    merge_state_with_log dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  check_halt_state_context dup ok
++@c  prune_impossible_nodes @mtslocale @ascuheap @acsmem
++@c   (re_)malloc dup @ascuheap @acsmem
++@c   sift_ctx_init ok
++@c    re_node_set_init_empty dup ok
++@c   sift_states_backward @mtslocale @ascuheap @acsmem
++@c    re_node_set_init_1 dup @ascuheap @acsmem
++@c    update_cur_sifted_state @mtslocale @ascuheap @acsmem
++@c     add_epsilon_src_nodes @ascuheap @acsmem
++@c      re_acquire_state dup @ascuheap @acsmem
++@c      re_node_set_alloc dup @ascuheap @acsmem
++@c      re_node_set_merge dup @ascuheap @acsmem
++@c      re_node_set_add_intersect @ascuheap @acsmem
++@c       (re_)realloc dup @ascuheap @acsmem
++@c     check_subexp_limits @ascuheap @acsmem
++@c      sub_epsilon_src_nodes @ascuheap @acsmem
++@c       re_node_set_init_empty dup ok
++@c       re_node_set_contains dup ok
++@c       re_node_set_add_intersect dup @ascuheap @acsmem
++@c       re_node_set_free dup @ascuheap @acsmem
++@c       re_node_set_remove_at dup ok
++@c      re_node_set_contains dup ok
++@c     re_acquire_state dup @ascuheap @acsmem
++@c     sift_states_bkref @mtslocale @ascuheap @acsmem
++@c      search_cur_bkref_entry dup ok
++@c      check_dst_limits ok
++@c       search_cur_bkref_entry dup ok
++@c       check_dst_limits_calc_pos ok
++@c        check_dst_limits_calc_pos_1 ok
++@c      re_node_set_init_copy dup @ascuheap @acsmem
++@c      re_node_set_insert dup @ascuheap @acsmem
++@c      sift_states_backward dup @mtslocale @ascuheap @acsmem
++@c      merge_state_array dup @ascuheap @acsmem
++@c      re_node_set_remove ok
++@c       re_node_set_contains dup ok
++@c       re_node_set_remove_at dup ok
++@c      re_node_set_free dup @ascuheap @acsmem
++@c    re_node_set_free dup @ascuheap @acsmem
++@c    re_node_set_empty dup ok
++@c    build_sifted_states @mtslocale @ascuheap @acsmem
++@c     sift_states_iter_mb @mtslocale @ascuheap @acsmem
++@c      check_node_accept_bytes dup @mtslocale @ascuheap @acsmem
++@c     check_node_accept dup ok
++@c     check_dst_limits dup ok
++@c     re_node_set_insert dup @ascuheap @acsmem
++@c   re_node_set_free dup @ascuheap @acsmem
++@c   check_halt_state_context dup ok
++@c   merge_state_array @ascuheap @acsmem
++@c    re_node_set_init_union dup @ascuheap @acsmem
++@c    re_acquire_state dup @ascuheap @acsmem
++@c    re_node_set_free dup @ascuheap @acsmem
++@c   (re_)free dup @ascuheap @acsmem
++@c  set_regs @ascuheap @acsmem
++@c   (re_)malloc dup @ascuheap @acsmem
++@c   re_node_set_init_empty dup ok
++@c   free_fail_stack_return @ascuheap @acsmem
++@c    re_node_set_free dup @ascuheap @acsmem
++@c    (re_)free dup @ascuheap @acsmem
++@c   update_regs ok
++@c   re_node_set_free dup @ascuheap @acsmem
++@c   pop_fail_stack @ascuheap @acsmem
++@c    re_node_set_free dup @ascuheap @acsmem
++@c    (re_)free dup @ascuheap @acsmem
++@c   (re_)free dup @ascuheap @acsmem
++@c  (re_)free dup @ascuheap @acsmem
++@c  match_ctx_free @ascuheap @acsmem
++@c   match_ctx_clean @ascuheap @acsmem
++@c    (re_)free dup @ascuheap @acsmem
++@c   (re_)free dup @ascuheap @acsmem
++@c  re_string_destruct dup @ascuheap @acsmem
++@c libc_lock_unlock @aculock
+ This function tries to match the compiled regular expression
+ @code{*@var{compiled}} against @var{string}.
+ 
+@@ -1033,6 +1624,9 @@
+ @comment regex.h
+ @comment POSIX.2
+ @deftypefun void regfree (regex_t *@var{compiled})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c (re_)free dup @ascuheap @acsmem
++@c free_dfa_content dup @ascuheap @acsmem
+ Calling @code{regfree} frees all the storage that @code{*@var{compiled}}
+ points to.  This includes various internal fields of the @code{regex_t}
+ structure that aren't documented in this manual.
+@@ -1050,6 +1644,8 @@
+ @comment regex.h
+ @comment POSIX.2
+ @deftypefun size_t regerror (int @var{errcode}, const regex_t *restrict @var{compiled}, char *restrict @var{buffer}, size_t @var{length})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c regerror calls gettext, strcmp and mempcpy or memcpy.
+ This function produces an error message string for the error code
+ @var{errcode}, and stores the string in @var{length} bytes of memory
+ starting at @var{buffer}.  For the @var{compiled} argument, supply the
+@@ -1215,6 +1811,145 @@
+ @comment wordexp.h
+ @comment POSIX.2
+ @deftypefun int wordexp (const char *@var{words}, wordexp_t *@var{word-vector-ptr}, int @var{flags})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtasuconst{:@mtsenv{}} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuintl{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c wordexp @mtasurace:utent @mtasuconst:@mtsenv @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuintl @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  w_newword ok
++@c  wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c  calloc dup @ascuheap @acsmem
++@c  getenv dup @mtsenv
++@c  strcpy dup ok
++@c  parse_backslash @ascuheap @acsmem
++@c   w_addchar dup @ascuheap @acsmem
++@c  parse_dollars @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   w_addchar dup @ascuheap @acsmem
++@c   parse_arith @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    w_newword dup ok
++@c    parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    parse_backtick dup @ascuplugin @ascuheap @aculock @acsfd @acsmem
++@c    parse_qtd_backslash dup @ascuheap @acsmem
++@c    eval_expr @mtslocale
++@c     eval_expr_multidiv @mtslocale
++@c      eval_expr_val @mtslocale
++@c       isspace dup @mtslocale
++@c       eval_expr dup @mtslocale
++@c      isspace dup @mtslocale
++@c     isspace dup @mtslocale
++@c    free dup @ascuheap @acsmem
++@c    w_addchar dup @ascuheap @acsmem
++@c    w_addstr dup @ascuheap @acsmem
++@c    itoa_word dup ok
++@c   parse_comm @ascuplugin @ascuheap @aculock @acsfd @acsmem
++@c    w_newword dup ok
++@c    pthread_setcancelstate @ascuplugin @ascuheap @acsmem
++@c      (disable cancellation around exec_comm; it may do_cancel the
++@c       second time, if async cancel is enabled)
++@c     THREAD_ATOMIC_CMPXCHG_VAL dup ok
++@c     CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS dup ok
++@c     do_cancel @ascuplugin @ascuheap @acsmem
++@c      THREAD_ATOMIC_BIT_SET dup ok
++@c      pthread_unwind @ascuplugin @ascuheap @acsmem
++@c       Unwind_ForcedUnwind if available @ascuplugin @ascuheap @acsmem
++@c       libc_unwind_longjmp otherwise
++@c       cleanups
++@c    exec_comm @ascuplugin @ascuheap @aculock @acsfd @acsmem
++@c     pipe2 dup ok
++@c     pipe dup ok
++@c     fork dup @ascuplugin @aculock
++@c     close dup @acsfd
++@c     on child: exec_comm_child -> exec or abort
++@c     waitpid dup ok
++@c     read dup ok
++@c     w_addmem dup @ascuheap @acsmem
++@c     strchr dup ok
++@c     w_addword dup @ascuheap @acsmem
++@c     w_newword dup ok
++@c     w_addchar dup @ascuheap @acsmem
++@c     free dup @ascuheap @acsmem
++@c     kill dup ok
++@c    free dup @ascuheap @acsmem
++@c   parse_param @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c     reads from __libc_argc and __libc_argv without guards
++@c    w_newword dup ok
++@c    isalpha dup @mtslocale^^
++@c    w_addchar dup @ascuheap @acsmem
++@c    isalnum dup @mtslocale^^
++@c    isdigit dup @mtslocale^^
++@c    strchr dup ok
++@c    itoa_word dup ok
++@c    atoi dup @mtslocale
++@c    getpid dup ok
++@c    w_addstr dup @ascuheap @acsmem
++@c    free dup @ascuheap @acsmem
++@c    strlen dup ok
++@c    malloc dup @ascuheap @acsmem
++@c    stpcpy dup ok
++@c    w_addword dup @ascuheap @acsmem
++@c    strdup dup @ascuheap @acsmem
++@c    getenv dup @mtsenv
++@c    parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    parse_tilde dup @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    fnmatch dup @mtsenv @mtslocale @ascuheap @acsmem
++@c    mempcpy dup ok
++@c    _ dup @ascuintl
++@c    fxprintf dup @aculock
++@c    setenv dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c    strspn dup ok
++@c    strcspn dup ok
++@c  parse_backtick @ascuplugin @ascuheap @aculock @acsfd @acsmem
++@c   w_newword dup ok
++@c   exec_comm dup @ascuplugin @ascuheap @aculock @acsfd @acsmem
++@c   free dup @ascuheap @acsmem
++@c   parse_qtd_backslash dup @ascuheap @acsmem
++@c   parse_backslash dup @ascuheap @acsmem
++@c   w_addchar dup @ascuheap @acsmem
++@c  parse_dquote @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   parse_backtick dup @ascuplugin @ascuheap @aculock @acsfd @acsmem
++@c   parse_qtd_backslash dup @ascuheap @acsmem
++@c   w_addchar dup @ascuheap @acsmem
++@c  w_addword dup @ascuheap @acsmem
++@c   strdup dup @ascuheap @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  parse_squote dup @ascuheap @acsmem
++@c   w_addchar dup @ascuheap @acsmem
++@c  parse_tilde @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   strchr dup ok
++@c   w_addchar dup @ascuheap @acsmem
++@c   getenv dup @mtsenv
++@c   w_addstr dup @ascuheap @acsmem
++@c    strlen dup ok
++@c    w_addmem dup @ascuheap @acsmem
++@c     realloc dup @ascuheap @acsmem
++@c     free dup @ascuheap @acsmem
++@c     mempcpy dup ok
++@c   getuid dup ok
++@c   getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  parse_glob @mtasurace:utent @mtasuconst:@mtsenv @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   strchr dup ok
++@c   parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   parse_qtd_backslash @ascuheap @acsmem
++@c    w_addchar dup @ascuheap @acsmem
++@c   parse_backslash dup @ascuheap @acsmem
++@c   w_addchar dup @ascuheap @acsmem
++@c   w_addword dup @ascuheap @acsmem
++@c   w_newword dup ok
++@c   do_parse_glob @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem
++@c    glob dup @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem [auto glob_t avoids @asucorrupt @acucorrupt]
++@c    w_addstr dup @ascuheap @acsmem
++@c    w_addchar dup @ascuheap @acsmem
++@c    globfree dup @ascuheap @acsmem [auto glob_t avoids @asucorrupt @acucorrupt]
++@c    free dup @ascuheap @acsmem
++@c    w_newword dup ok
++@c    strdup dup @ascuheap @acsmem
++@c    w_addword dup @ascuheap @acsmem
++@c   wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c  strchr dup ok
++@c  w_addchar dup @ascuheap @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
+ Perform word expansion on the string @var{words}, putting the result in
+ a newly allocated vector, and store the size and address of this vector
+ into @code{*@var{word-vector-ptr}}.  The argument @var{flags} is a
+@@ -1278,6 +2013,9 @@
+ @comment wordexp.h
+ @comment POSIX.2
+ @deftypefun void wordfree (wordexp_t *@var{word-vector-ptr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c  free dup @ascuheap @acsmem
+ Free the storage used for the word-strings and vector that
+ @code{*@var{word-vector-ptr}} points to.  This does not free the
+ structure @code{*@var{word-vector-ptr}} itself---only the other
+diff -urN glibc-2.17-c758a686/manual/pipe.texi glibc-2.17-c758a686/manual/pipe.texi
+--- glibc-2.17-c758a686/manual/pipe.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/pipe.texi	2014-09-12 16:10:06.048792709 -0400
+@@ -56,6 +56,8 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int pipe (int @var{filedes}@t{[2]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
++@c On Linux, syscall pipe2.  On HURD, call socketpair.
+ The @code{pipe} function creates a pipe and puts the file descriptors
+ for the reading and writing ends of the pipe (respectively) into
+ @code{@var{filedes}[0]} and @code{@var{filedes}[1]}.
+@@ -108,6 +110,41 @@
+ @comment stdio.h
+ @comment POSIX.2, SVID, BSD
+ @deftypefun {FILE *} popen (const char *@var{command}, const char *@var{mode})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c popen @ascuheap @asucorrupt @acucorrupt @aculock @acsfd @acsmem
++@c  malloc dup @ascuheap @acsmem
++@c  _IO_init ok
++@c   _IO_no_init ok
++@c    _IO_old_init ok
++@c     _IO_lock_init ok
++@c  _IO_new_file_init @asucorrupt @acucorrupt @aculock @acsfd
++@c   _IO_link_in @asucorrupt @acucorrupt @aculock @acsfd
++@c     the linked list is guarded by a recursive lock;
++@c     it may get corrupted with async signals and cancellation
++@c    _IO_lock_lock dup @aculock
++@c    _IO_flockfile dup @aculock
++@c    _IO_funlockfile dup @aculock
++@c    _IO_lock_unlock dup @aculock
++@c  _IO_new_proc_open @asucorrupt @acucorrupt @aculock @acsfd
++@c    the linked list is guarded by a recursive lock;
++ @c   it may get corrupted with async signals and cancellation
++@c   _IO_file_is_open ok
++@c   pipe2 dup @acsfd
++@c   pipe dup @acsfd
++@c   _IO_fork=fork @aculock
++@c   _IO_close=close_not_cancel dup @acsfd
++@c   fcntl dup ok
++@c   _IO_lock_lock @aculock
++@c   _IO_lock_unlock @aculock
++@c   _IO_mask_flags ok [no @mtasurace:stream, nearly but sufficiently exclusive access]
++@c  _IO_un_link @asucorrupt @acucorrupt @aculock @acsfd
++@c    the linked list is guarded by a recursive lock;
++@c    it may get corrupted with async signals and cancellation
++@c   _IO_lock_lock dup @aculock
++@c   _IO_flockfile dup @aculock
++@c   _IO_funlockfile dup @aculock
++@c   _IO_lock_unlock dup @aculock
++@c  free dup @ascuheap @acsmem
+ The @code{popen} function is closely related to the @code{system}
+ function; see @ref{Running a Command}.  It executes the shell command
+ @var{command} as a subprocess.  However, instead of waiting for the
+@@ -131,6 +168,77 @@
+ @comment stdio.h
+ @comment POSIX.2, SVID, BSD
+ @deftypefun int pclose (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuplugin{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c Although the stream cannot be used after the call, even in case of
++@c async cancellation, because the stream must not be used after pclose
++@c is called, other stdio linked lists and their locks may be left in
++@c corrupt states; that's where the corrupt and lock annotations come
++@c from.
++@c
++@c pclose @ascuheap @ascuplugin @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  _IO_new_fclose @ascuheap @ascuplugin @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd
++@c   _IO_acquire_lock dup @aculock
++@c    _IO_flockfile dup @aculock
++@c   _IO_file_close_it @ascuheap @ascuplugin @asucorrupt @aculock @acucorrupt @acsfd @acsmem
++@c    _IO_file_is_open dup ok
++@c    _IO_do_flush @asucorrupt @ascuplugin @acucorrupt
++@c     _IO_do_write @asucorrupt @acucorrupt
++@c      new_do_write @asucorrupt @acucorrupt
++@c       _IO_SYSSEEK ok
++@c        lseek64 dup ok
++@c       _IO_SYSWRITE ok
++@c        write_not_cancel dup ok
++@c        write dup ok
++@c       _IO_adjust_column ok
++@c       _IO_setg dup @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c     _IO_wdo_write @asucorrupt @ascuplugin @acucorrupt
++@c      _IO_new_do_write=_IO_do_write dup @asucorrupt @acucorrupt
++@c      *cc->__codecvt_do_out @ascuplugin
++@c      _IO_wsetg dup @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_unsave_markers @ascuheap @asucorrupt @acucorrupt @acsmem
++@c     _IO_have_backup dup ok
++@c     _IO_free_backup_area dup @ascuheap @asucorrupt @acucorrupt @acsmem
++@c    _IO_SYSCLOSE @aculock @acucorrupt @acsfd
++@c     _IO_lock_lock dup @aculock
++@c     _IO_close=close_not_cancel dup @acsfd
++@c     _IO_lock_unlock dup @aculock
++@c     _IO_waitpid=waitpid_not_cancel dup ok
++@c    _IO_have_wbackup ok
++@c    _IO_free_wbackup_area @ascuheap @asucorrupt @acucorrupt @acsmem
++@c     _IO_in_backup dup ok
++@c     _IO_switch_to_main_wget_area @asucorrupt @acucorrupt
++@c     free dup @ascuheap @acsmem
++@c    _IO_wsetb @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_wsetg @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_wsetp @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_setb @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_setg @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_setp @asucorrupt @acucorrupt [no @mtasurace:stream, locked]
++@c    _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd
++@c   _IO_release_lock dup @aculock
++@c    _IO_funlockfile dup @aculock
++@c   _IO_FINISH @ascuheap @ascuplugin @asucorrupt @acucorrupt @aculock @acsfd @acsmem
++@c    _IO_new_file_finish @ascuheap @ascuplugin @asucorrupt @acucorrupt @aculock @acsfd @acsmem
++@c     _IO_file_is_open dup ok
++@c     _IO_do_flush dup @ascuplugin @asucorrupt @acucorrupt
++@c     _IO_SYSCLOSE dup @aculock @acucorrupt @acsfd
++@c     _IO_default_finish @ascuheap @asucorrupt @acucorrupt @aculock @acsfd @acsmem
++@c      FREE_BUF @acsmem
++@c       munmap dup @acsmem
++@c      free dup @ascuheap @acsmem
++@c      _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd
++@c      _IO_lock_fini ok
++@c       libc_lock_fini_recursive ok
++@c   libc_lock_lock dup @asulock @aculock
++@c   gconv_release_step ok
++@c   libc_lock_unlock dup @asulock @aculock
++@c   _IO_have_backup ok
++@c   _IO_free_backup_area @ascuheap @asucorrupt @acucorrupt @acsmem
++@c    _IO_in_backup ok
++@c    _IO_switch_to_main_get_area @asucorrupt @acucorrupt
++@c    free dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
+ The @code{pclose} function is used to close a stream created by @code{popen}.
+ It waits for the child process to terminate and returns its status value,
+ as for the @code{system} function.
+@@ -168,6 +276,8 @@
+ @comment sys/stat.h
+ @comment POSIX.1
+ @deftypefun int mkfifo (const char *@var{filename}, mode_t @var{mode})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On generic Posix, calls xmknod.
+ The @code{mkfifo} function makes a FIFO special file with name
+ @var{filename}.  The @var{mode} argument is used to set the file's
+ permissions; see @ref{Setting Permissions}.
+diff -urN glibc-2.17-c758a686/manual/platform.texi glibc-2.17-c758a686/manual/platform.texi
+--- glibc-2.17-c758a686/manual/platform.texi	2014-09-12 16:08:17.865070640 -0400
++++ glibc-2.17-c758a686/manual/platform.texi	2014-09-12 16:10:06.046792714 -0400
+@@ -15,6 +15,7 @@
+ operating system are declared in @file{sys/platform/ppc.h}.
+ 
+ @deftypefun {uint64_t} __ppc_get_timebase (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Read the current value of the Time Base Register.
+ 
+ The @dfn{Time Base Register} is a 64-bit register that stores a monotonically
+@@ -28,6 +29,17 @@
+ @end deftypefun
+ 
+ @deftypefun {uint64_t} __ppc_get_timebase_freq (void)
++@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}}
++@c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd
++@c  __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd
++@c    the initialization of the static timebase_freq is not exactly
++@c    safe, because hp_timing_t cannot be atomically set up.
++@c   syscall:get_tbfreq ok
++@c   open dup @acsfd
++@c   read dup ok
++@c   memcpy dup ok
++@c   memmem dup ok
++@c   close dup @acsfd
+ Read the current frequency at which the Time Base Register is updated.
+ 
+ This frequency is not related to the processor clock or the bus clock.
+@@ -42,17 +54,20 @@
+ Section 3.2}.
+ 
+ @deftypefun {void} __ppc_yield (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Provide a hint that performance will probably be improved if shared resources
+ dedicated to the executing processor are released for use by other processors.
+ @end deftypefun
+ 
+ @deftypefun {void} __ppc_mdoio (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Provide a hint that performance will probably be improved if shared resources
+ dedicated to the executing processor are released until all outstanding storage
+ accesses to caching-inhibited storage have been completed.
+ @end deftypefun
+ 
+ @deftypefun {void} __ppc_mdoom (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Provide a hint that performance will probably be improved if shared resources
+ dedicated to the executing processor are released until all outstanding storage
+ accesses to cacheable storage for which the data is not in the cache have been
+@@ -60,6 +75,7 @@
+ @end deftypefun
+ 
+ @deftypefun {void} __ppc_set_ppr_med (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Set the Program Priority Register to medium value (default).
+ 
+ The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls
+@@ -73,9 +89,11 @@
+ @end deftypefun
+ 
+ @deftypefun {void} __ppc_set_ppr_low (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Set the Program Priority Register to low value.
+ @end deftypefun
+ 
+ @deftypefun {void} __ppc_set_ppr_med_low (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Set the Program Priority Register to medium low value.
+ @end deftypefun
+diff -urN glibc-2.17-c758a686/manual/process.texi glibc-2.17-c758a686/manual/process.texi
+--- glibc-2.17-c758a686/manual/process.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/process.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -1,4 +1,4 @@
+-@node Processes, Job Control, Program Basics, Top
++@node Processes, Inter-Process Communication, Program Basics, Top
+ @c %MENU% How to create processes and run other programs
+ @chapter Processes
+ 
+@@ -55,6 +55,43 @@
+ @comment ISO
+ @deftypefun int system (const char *@var{command})
+ @pindex sh
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
++@c system @ascuplugin @ascuheap @asulock @aculock @acsmem
++@c  do_system @ascuplugin @ascuheap @asulock @aculock @acsmem
++@c   sigemptyset dup ok
++@c   libc_lock_lock @asulock @aculock
++@c   ADD_REF ok
++@c   sigaction dup ok
++@c   SUB_REF ok
++@c   libc_lock_unlock @aculock
++@c   sigaddset dup ok
++@c   sigprocmask dup ok
++@c   CLEANUP_HANDLER @ascuplugin @ascuheap @acsmem
++@c    libc_cleanup_region_start @ascuplugin @ascuheap @acsmem
++@c     pthread_cleanup_push_defer @ascuplugin @ascuheap @acsmem
++@c      CANCELLATION_P @ascuplugin @ascuheap @acsmem
++@c       CANCEL_ENABLED_AND_CANCELED ok
++@c       do_cancel @ascuplugin @ascuheap @acsmem
++@c    cancel_handler ok
++@c     kill syscall ok
++@c     waitpid dup ok
++@c     libc_lock_lock ok
++@c     sigaction dup ok
++@c     libc_lock_unlock ok
++@c   FORK ok
++@c    clone syscall ok
++@c   waitpid dup ok
++@c   CLEANUP_RESET ok
++@c    libc_cleanup_region_end ok
++@c     pthread_cleanup_pop_restore ok
++@c  SINGLE_THREAD_P ok
++@c  LIBC_CANCEL_ASYNC @ascuplugin @ascuheap @acsmem
++@c   libc_enable_asynccancel @ascuplugin @ascuheap @acsmem
++@c    CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS dup ok
++@c    do_cancel dup @ascuplugin @ascuheap @acsmem
++@c  LIBC_CANCEL_RESET ok
++@c   libc_disable_asynccancel ok
++@c    lll_futex_wait dup ok
+ This function executes @var{command} as a shell command.  In @theglibc{},
+ it always uses the default shell @code{sh} to run the command.
+ In particular, it searches the directories in @code{PATH} to find
+@@ -157,12 +194,14 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun pid_t getpid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getpid} function returns the process ID of the current process.
+ @end deftypefun
+ 
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun pid_t getppid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getppid} function returns the process ID of the parent of the
+ current process.
+ @end deftypefun
+@@ -177,6 +216,19 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun pid_t fork (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}}
++@c The nptl/.../linux implementation safely collects fork_handlers into
++@c an alloca()ed linked list and increments ref counters; it uses atomic
++@c ops and retries, avoiding locking altogether.  It then takes the
++@c IO_list lock, resets the thread-local pid, and runs fork.  The parent
++@c restores the thread-local pid, releases the lock, and runs parent
++@c handlers, decrementing the ref count and signaling futex wait if
++@c requested by unregister_atfork.  The child bumps the fork generation,
++@c sets the thread-local pid, resets cpu clocks, initializes the robust
++@c mutex list, the stream locks, the IO_list lock, the dynamic loader
++@c lock, runs the child handlers, reseting ref counters to 1, and
++@c initializes the fork lock.  These are all safe, unless atfork
++@c handlers themselves are unsafe.
+ The @code{fork} function creates a new process.
+ 
+ If the operation is successful, there are then both parent and child
+@@ -242,6 +294,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun pid_t vfork (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}}
++@c The vfork implementation proper is a safe syscall, but it may fall
++@c back to fork if the vfork syscall is not available.
+ The @code{vfork} function is similar to @code{fork} but on some systems
+ it is more efficient; however, there are restrictions you must follow to
+ use it safely.
+@@ -287,6 +342,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int execv (const char *@var{filename}, char *const @var{argv}@t{[]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{execv} function executes the file named by @var{filename} as a
+ new process image.
+ 
+@@ -305,6 +361,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int execl (const char *@var{filename}, const char *@var{arg0}, @dots{})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is similar to @code{execv}, but the @var{argv} strings are
+ specified individually instead of as an array.  A null pointer must be
+ passed as the last such argument.
+@@ -313,6 +370,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int execve (const char *@var{filename}, char *const @var{argv}@t{[]}, char *const @var{env}@t{[]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is similar to @code{execv}, but permits you to specify the environment
+ for the new program explicitly as the @var{env} argument.  This should
+ be an array of strings in the same format as for the @code{environ}
+@@ -322,6 +380,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int execle (const char *@var{filename}, const char *@var{arg0}, @dots{}, char *const @var{env}@t{[]})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is similar to @code{execl}, but permits you to specify the
+ environment for the new program explicitly.  The environment argument is
+ passed following the null pointer that marks the last @var{argv}
+@@ -332,6 +391,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int execvp (const char *@var{filename}, char *const @var{argv}@t{[]})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{execvp} function is similar to @code{execv}, except that it
+ searches the directories listed in the @code{PATH} environment variable
+ (@pxref{Standard Environment}) to find the full file name of a
+@@ -345,6 +405,7 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int execlp (const char *@var{filename}, const char *@var{arg0}, @dots{})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function is like @code{execl}, except that it performs the same
+ file name searching as the @code{execvp} function.
+ @end deftypefun
+@@ -462,6 +523,7 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefun pid_t waitpid (pid_t @var{pid}, int *@var{status-ptr}, int @var{options})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{waitpid} function is used to request status information from a
+ child process whose process ID is @var{pid}.  Normally, the calling
+ process is suspended until the child process makes status information
+@@ -565,6 +627,7 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefun pid_t wait (int *@var{status-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is a simplified version of @code{waitpid}, and is used to wait
+ until any one child process terminates.  The call:
+ 
+@@ -591,6 +654,7 @@
+ @comment sys/wait.h
+ @comment BSD
+ @deftypefun pid_t wait4 (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}, struct rusage *@var{usage})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If @var{usage} is a null pointer, @code{wait4} is equivalent to
+ @code{waitpid (@var{pid}, @var{status-ptr}, @var{options})}.
+ 
+@@ -643,6 +707,7 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefn Macro int WIFEXITED (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if the child process terminated
+ normally with @code{exit} or @code{_exit}.
+ @end deftypefn
+@@ -650,6 +715,7 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefn Macro int WEXITSTATUS (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If @code{WIFEXITED} is true of @var{status}, this macro returns the
+ low-order 8 bits of the exit status value from the child process.
+ @xref{Exit Status}.
+@@ -658,6 +724,7 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefn Macro int WIFSIGNALED (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if the child process terminated
+ because it received a signal that was not handled.
+ @xref{Signal Handling}.
+@@ -666,6 +733,7 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefn Macro int WTERMSIG (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If @code{WIFSIGNALED} is true of @var{status}, this macro returns the
+ signal number of the signal that terminated the child process.
+ @end deftypefn
+@@ -673,6 +741,7 @@
+ @comment sys/wait.h
+ @comment BSD
+ @deftypefn Macro int WCOREDUMP (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if the child process terminated
+ and produced a core dump.
+ @end deftypefn
+@@ -680,12 +749,14 @@
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefn Macro int WIFSTOPPED (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro returns a nonzero value if the child process is stopped.
+ @end deftypefn
+ 
+ @comment sys/wait.h
+ @comment POSIX.1
+ @deftypefn Macro int WSTOPSIG (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If @code{WIFSTOPPED} is true of @var{status}, this macro returns the
+ signal number of the signal that caused the child process to stop.
+ @end deftypefn
+@@ -739,6 +810,7 @@
+ @comment sys/wait.h
+ @comment BSD
+ @deftypefun pid_t wait3 (union wait *@var{status-ptr}, int @var{options}, struct rusage *@var{usage})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ If @var{usage} is a null pointer, @code{wait3} is equivalent to
+ @code{waitpid (-1, @var{status-ptr}, @var{options})}.
+ 
+diff -urN glibc-2.17-c758a686/manual/resource.texi glibc-2.17-c758a686/manual/resource.texi
+--- glibc-2.17-c758a686/manual/resource.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/resource.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -25,6 +25,8 @@
+ @comment sys/resource.h
+ @comment BSD
+ @deftypefun int getrusage (int @var{processes}, struct rusage *@var{rusage})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On HURD, this calls task_info 3 times.  On UNIX, it's a syscall.
+ This function reports resource usage totals for processes specified by
+ @var{processes}, storing the information in @code{*@var{rusage}}.
+ 
+@@ -129,9 +131,11 @@
+ @code{vtimes} and its @code{vtimes} data structure are declared in
+ @file{sys/vtimes.h}.
+ @pindex sys/vtimes.h
+-@comment vtimes.h
+ 
+-@deftypefun int vtimes (struct vtimes @var{current}, struct vtimes @var{child})
++@comment sys/vtimes.h
++@deftypefun int vtimes (struct vtimes *@var{current}, struct vtimes *@var{child})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Calls getrusage twice.
+ 
+ @code{vtimes} reports resource usage totals for a process.
+ 
+@@ -223,6 +227,8 @@
+ @comment sys/resource.h
+ @comment BSD
+ @deftypefun int getrlimit (int @var{resource}, struct rlimit *@var{rlp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on most systems.
+ Read the current and maximum limits for the resource @var{resource}
+ and store them in @code{*@var{rlp}}.
+ 
+@@ -237,6 +243,8 @@
+ @comment sys/resource.h
+ @comment Unix98
+ @deftypefun int getrlimit64 (int @var{resource}, struct rlimit64 *@var{rlp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on most systems, wrapper to getrlimit otherwise.
+ This function is similar to @code{getrlimit} but its second parameter is
+ a pointer to a variable of type @code{struct rlimit64}, which allows it
+ to read values which wouldn't fit in the member of a @code{struct
+@@ -250,6 +258,8 @@
+ @comment sys/resource.h
+ @comment BSD
+ @deftypefun int setrlimit (int @var{resource}, const struct rlimit *@var{rlp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on most systems; lock-taking critical section on HURD.
+ Store the current and maximum limits for the resource @var{resource}
+ in @code{*@var{rlp}}.
+ 
+@@ -275,6 +285,8 @@
+ @comment sys/resource.h
+ @comment Unix98
+ @deftypefun int setrlimit64 (int @var{resource}, const struct rlimit64 *@var{rlp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Wrapper for setrlimit or direct syscall.
+ This function is similar to @code{setrlimit} but its second parameter is
+ a pointer to a variable of type @code{struct rlimit64} which allows it
+ to set values which wouldn't fit in the member of a @code{struct
+@@ -419,7 +431,7 @@
+ 
+ @comment sys/resource.h
+ @comment BSD
+-@deftypevr Constant int RLIM_INFINITY
++@deftypevr Constant rlim_t RLIM_INFINITY
+ This constant stands for a value of ``infinity'' when supplied as
+ the limit value in @code{setrlimit}.
+ @end deftypevr
+@@ -433,7 +445,10 @@
+ 
+ @comment ulimit.h
+ @comment BSD
+-@deftypefun int ulimit (int @var{cmd}, @dots{})
++@deftypefun {long int} ulimit (int @var{cmd}, @dots{})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Wrapper for getrlimit, setrlimit or
++@c sysconf(_SC_OPEN_MAX)->getdtablesize->getrlimit.
+ 
+ @code{ulimit} gets the current limit or sets the current and maximum
+ limit for a particular resource for the calling process according to the
+@@ -480,6 +495,10 @@
+ @comment sys/vlimit.h
+ @comment BSD
+ @deftypefun int vlimit (int @var{resource}, int @var{limit})
++@safety{@prelim{}@mtunsafe{@mtasurace{:setrlimit}}@asunsafe{}@acsafe{}}
++@c It calls getrlimit and modifies the rlim_cur field before calling
++@c setrlimit.  There's a window for a concurrent call to setrlimit that
++@c modifies e.g. rlim_max, which will be lost if running as super-user.
+ 
+ @code{vlimit} sets the current limit for a resource for a process.
+ 
+@@ -778,6 +797,8 @@
+ @comment sched.h
+ @comment POSIX
+ @deftypefun int sched_setscheduler (pid_t @var{pid}, int @var{policy}, const struct sched_param *@var{param})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function sets both the absolute priority and the scheduling policy
+ for a process.
+@@ -848,6 +869,8 @@
+ @comment sched.h
+ @comment POSIX
+ @deftypefun int sched_getscheduler (pid_t @var{pid})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function returns the scheduling policy assigned to the process with
+ Process ID (pid) @var{pid}, or the calling process if @var{pid} is zero.
+@@ -881,6 +904,8 @@
+ @comment sched.h
+ @comment POSIX
+ @deftypefun int sched_setparam (pid_t @var{pid}, const struct sched_param *@var{param})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function sets a process' absolute priority.
+ 
+@@ -893,7 +918,9 @@
+ 
+ @comment sched.h
+ @comment POSIX
+-@deftypefun int sched_getparam (pid_t @var{pid}, const struct sched_param *@var{param})
++@deftypefun int sched_getparam (pid_t @var{pid}, struct sched_param *@var{param})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function returns a process' absolute priority.
+ 
+@@ -922,7 +949,9 @@
+ 
+ @comment sched.h
+ @comment POSIX
+-@deftypefun int sched_get_priority_min (int *@var{policy})
++@deftypefun int sched_get_priority_min (int @var{policy})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function returns the lowest absolute priority value that is
+ allowable for a process with scheduling policy @var{policy}.
+@@ -942,7 +971,9 @@
+ 
+ @comment sched.h
+ @comment POSIX
+-@deftypefun int sched_get_priority_max (int *@var{policy})
++@deftypefun int sched_get_priority_max (int @var{policy})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function returns the highest absolute priority value that is
+ allowable for a process that with scheduling policy @var{policy}.
+@@ -963,6 +994,8 @@
+ @comment sched.h
+ @comment POSIX
+ @deftypefun int sched_rr_get_interval (pid_t @var{pid}, struct timespec *@var{interval})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ This function returns the length of the quantum (time slice) used with
+ the Round Robin scheduling policy, if it is used, for the process with
+@@ -987,6 +1020,8 @@
+ @comment sched.h
+ @comment POSIX
+ @deftypefun int sched_yield (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on Linux; alias to swtch on HURD.
+ 
+ This function voluntarily gives up the process' claim on the CPU.
+ 
+@@ -1045,7 +1080,7 @@
+ about.
+ 
+ But just to be clear about the scope of this scheduling: Any time a
+-process with a absolute priority of 0 and a process with an absolute
++process with an absolute priority of 0 and a process with an absolute
+ priority higher than 0 are ready to run at the same time, the one with
+ absolute priority 0 does not run.  If it's already running when the
+ higher priority ready-to-run process comes into existence, it stops
+@@ -1138,6 +1173,8 @@
+ @comment sys/resource.h
+ @comment BSD,POSIX
+ @deftypefun int getpriority (int @var{class}, int @var{id})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on UNIX.  On HURD, calls _hurd_priority_which_map.
+ Return the nice value of a set of processes; @var{class} and @var{id}
+ specify which ones (see below).  If the processes specified do not all
+ have the same nice value, this returns the lowest value that any of them
+@@ -1165,6 +1202,8 @@
+ @comment sys/resource.h
+ @comment BSD,POSIX
+ @deftypefun int setpriority (int @var{class}, int @var{id}, int @var{niceval})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on UNIX.  On HURD, calls _hurd_priority_which_map.
+ Set the nice value of a set of processes to @var{niceval}; @var{class}
+ and @var{id} specify which ones (see below).
+ 
+@@ -1222,6 +1261,11 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int nice (int @var{increment})
++@safety{@prelim{}@mtunsafe{@mtasurace{:setpriority}}@asunsafe{}@acsafe{}}
++@c Calls getpriority before and after setpriority, using the result of
++@c the first call to compute the argument for setpriority.  This creates
++@c a window for a concurrent setpriority (or nice) call to be lost or
++@c exhibit surprising behavior.
+ Increment the nice value of the calling process by @var{increment}.
+ The return value is the new nice value on success, and @code{-1} on
+ failure.  In the case of failure, @code{errno} will be set to the
+@@ -1319,6 +1363,10 @@
+ @comment sched.h
+ @comment GNU
+ @deftypefn Macro void CPU_ZERO (cpu_set_t *@var{set})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c CPU_ZERO ok
++@c  __CPU_ZERO_S ok
++@c   memset dup ok
+ This macro initializes the CPU set @var{set} to be the empty set.
+ 
+ This macro is a GNU extension and is defined in @file{sched.h}.
+@@ -1327,6 +1375,11 @@
+ @comment sched.h
+ @comment GNU
+ @deftypefn Macro void CPU_SET (int @var{cpu}, cpu_set_t *@var{set})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c CPU_SET ok
++@c  __CPU_SET_S ok
++@c   __CPUELT ok
++@c   __CPUMASK ok
+ This macro adds @var{cpu} to the CPU set @var{set}.
+ 
+ The @var{cpu} parameter must not have side effects since it is
+@@ -1338,6 +1391,11 @@
+ @comment sched.h
+ @comment GNU
+ @deftypefn Macro void CPU_CLR (int @var{cpu}, cpu_set_t *@var{set})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c CPU_CLR ok
++@c  __CPU_CLR_S ok
++@c   __CPUELT dup ok
++@c   __CPUMASK dup ok
+ This macro removes @var{cpu} from the CPU set @var{set}.
+ 
+ The @var{cpu} parameter must not have side effects since it is
+@@ -1349,6 +1407,11 @@
+ @comment sched.h
+ @comment GNU
+ @deftypefn Macro int CPU_ISSET (int @var{cpu}, const cpu_set_t *@var{set})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c CPU_ISSET ok
++@c  __CPU_ISSET_S ok
++@c   __CPUELT dup ok
++@c   __CPUMASK dup ok
+ This macro returns a nonzero value (true) if @var{cpu} is a member
+ of the CPU set @var{set}, and zero (false) otherwise.
+ 
+@@ -1365,6 +1428,9 @@
+ @comment sched.h
+ @comment GNU
+ @deftypefun int sched_getaffinity (pid_t @var{pid}, size_t @var{cpusetsize}, cpu_set_t *@var{cpuset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Wrapped syscall to zero out past the kernel cpu set size; Linux
++@c only.
+ 
+ This functions stores the CPU affinity mask for the process or thread
+ with the ID @var{pid} in the @var{cpusetsize} bytes long bitmap
+@@ -1393,6 +1459,9 @@
+ @comment sched.h
+ @comment GNU
+ @deftypefun int sched_setaffinity (pid_t @var{pid}, size_t @var{cpusetsize}, const cpu_set_t *@var{cpuset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Wrapped syscall to detect attempts to set bits past the kernel cpu
++@c set size; Linux only.
+ 
+ This function installs the @var{cpusetsize} bytes long affinity mask
+ pointed to by @var{cpuset} for the process or thread with the ID @var{pid}.
+@@ -1516,6 +1585,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int getpagesize (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Obtained from the aux vec at program startup time.  GNU/Linux/m68k is
++@c the exception, with the possibility of a syscall.
+ The @code{getpagesize} function returns the page size of the process.
+ This value is fixed for the runtime of the process but can vary in
+ different runs of the application.
+@@ -1559,6 +1631,8 @@
+ @comment sys/sysinfo.h
+ @comment GNU
+ @deftypefun {long int} get_phys_pages (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c This fopens a /proc file and scans it for the requested information.
+ The @code{get_phys_pages} function returns the total number of pages of
+ physical the system has.  To get the amount of memory this number has to
+ be multiplied by the page size.
+@@ -1569,7 +1643,8 @@
+ @comment sys/sysinfo.h
+ @comment GNU
+ @deftypefun {long int} get_avphys_pages (void)
+-The @code{get_phys_pages} function returns the number of available pages of
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++The @code{get_avphys_pages} function returns the number of available pages of
+ physical the system has.  To get the amount of memory this number has to
+ be multiplied by the page size.
+ 
+@@ -1614,6 +1689,9 @@
+ @comment sys/sysinfo.h
+ @comment GNU
+ @deftypefun int get_nprocs_conf (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c This function reads from from /sys using dir streams (single user, so
++@c no @mtasurace issue), and on some arches, from /proc using streams.
+ The @code{get_nprocs_conf} function returns the number of processors the
+ operating system configured.
+ 
+@@ -1623,6 +1701,8 @@
+ @comment sys/sysinfo.h
+ @comment GNU
+ @deftypefun int get_nprocs (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
++@c This function reads from /proc using file descriptor I/O.
+ The @code{get_nprocs} function returns the number of available processors.
+ 
+ This function is a GNU extension.
+@@ -1638,8 +1718,12 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun int getloadavg (double @var{loadavg}[], int @var{nelem})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
++@c Calls host_info on HURD; on Linux, opens /proc/loadavg, reads from
++@c it, closes it, without cancellation point, and calls strtod_l with
++@c the C locale to convert the strings to doubles.
+ This function gets the 1, 5 and 15 minute load averages of the
+-system. The values are placed in @var{loadavg}.  @code{getloadavg} will
++system.  The values are placed in @var{loadavg}.  @code{getloadavg} will
+ place at most @var{nelem} elements into the array but never more than
+ three elements.  The return value is the number of elements written to
+ @var{loadavg}, or -1 on error.
+diff -urN glibc-2.17-c758a686/manual/search.texi glibc-2.17-c758a686/manual/search.texi
+--- glibc-2.17-c758a686/manual/search.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/search.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -71,7 +71,8 @@
+ 
+ @comment search.h
+ @comment SVID
+-@deftypefun {void *} lfind (const void *@var{key}, void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar})
++@deftypefun {void *} lfind (const void *@var{key}, const void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{lfind} function searches in the array with @code{*@var{nmemb}}
+ elements of @var{size} bytes pointed to by @var{base} for an element
+ which matches the one pointed to by @var{key}.  The function pointed to
+@@ -90,6 +91,21 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun {void *} lsearch (const void *@var{key}, void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c A signal handler that interrupted an insertion and performed an
++@c insertion itself would leave the array in a corrupt state (e.g. one
++@c new element initialized twice, with parts of both initializations
++@c prevailing, and another uninitialized element), but this is just a
++@c special case of races on user-controlled objects, that have to be
++@c avoided by users.
++
++@c In case of cancellation, we know the array won't be left in a corrupt
++@c state; the new element is initialized before the element count is
++@c incremented, and the compiler can't reorder these operations because
++@c it can't know that they don't alias.  So, we'll either cancel after
++@c the increment and the initialization are both complete, or the
++@c increment won't have taken place, and so how far the initialization
++@c got doesn't matter.
+ The @code{lsearch} function is similar to the @code{lfind} function.  It
+ searches the given array for an element and returns it if found.  The
+ difference is that if no matching element is found the @code{lsearch}
+@@ -113,6 +129,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {void *} bsearch (const void *@var{key}, const void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{bsearch} function searches the sorted array @var{array} for an object
+ that is equivalent to @var{key}.  The array contains @var{count} elements,
+ each of which is of size @var{size} bytes.
+@@ -146,6 +163,7 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun void qsort (void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}}
+ The @var{qsort} function sorts the array @var{array}.  The array contains
+ @var{count} elements, each of which is of size @var{size}.
+ 
+@@ -256,6 +274,9 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun int hcreate (size_t @var{nel})
++@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c hcreate @mtasurace:hsearch @ascuheap @acucorrupt @acsmem
++@c  hcreate_r dup @mtsrace:htab @ascuheap @acucorrupt @acsmem
+ The @code{hcreate} function creates a hashing table which can contain at
+ least @var{nel} elements.  There is no possibility to grow this table so
+ it is necessary to choose the value for @var{nel} wisely.  The method
+@@ -270,7 +291,7 @@
+ The weakest aspect of this function is that there can be at most one
+ hashing table used through the whole program.  The table is allocated
+ in local memory out of control of the programmer.  As an extension @theglibc{}
+-provides an additional set of functions with an reentrant
++provides an additional set of functions with a reentrant
+ interface which provide a similar interface but which allow to keep
+ arbitrarily many hashing tables.
+ 
+@@ -285,6 +306,9 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun void hdestroy (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c hdestroy @mtasurace:hsearch @ascuheap @acucorrupt @acsmem
++@c  hdestroy_r dup @mtsrace:htab @ascuheap @acucorrupt @acsmem
+ The @code{hdestroy} function can be used to free all the resources
+ allocated in a previous call of @code{hcreate}.  After a call to this
+ function it is again possible to call @code{hcreate} and allocate a new
+@@ -328,6 +352,9 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun {ENTRY *} hsearch (ENTRY @var{item}, ACTION @var{action})
++@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{}@acunsafe{@acucorrupt{/action==ENTER}}}
++@c hsearch @mtasurace:hsearch @acucorrupt/action==ENTER
++@c  hsearch_r dup @mtsrace:htab @acucorrupt/action==ENTER
+ To search in a hashing table created using @code{hcreate} the
+ @code{hsearch} function must be used.  This function can perform simple
+ search for an element (if @var{action} has the @code{FIND}) or it can
+@@ -358,6 +385,24 @@
+ @comment search.h
+ @comment GNU
+ @deftypefun int hcreate_r (size_t @var{nel}, struct hsearch_data *@var{htab})
++@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c Unlike the lsearch array, the htab is (at least in part) opaque, so
++@c let's make it absolutely clear that ensuring exclusive access is a
++@c caller responsibility.
++
++@c Cancellation is unlikely to leave the htab in a corrupt state: the
++@c last field to be initialized is the one that tells whether the entire
++@c data structure was initialized, and there's a function call (calloc)
++@c in between that will often ensure all other fields are written before
++@c the table.  However, should this call be inlined (say with LTO), this
++@c assumption may not hold.  The calloc call doesn't cross our library
++@c interface barrier, so let's consider this could happen and mark this
++@c with @acucorrupt.  It's no safety loss, since we already have
++@c @ascuheap anyway...
++
++@c hcreate_r @mtsrace:htab @ascuheap @acucorrupt @acsmem
++@c  isprime ok
++@c  calloc dup @ascuheap @acsmem
+ The @code{hcreate_r} function initializes the object pointed to by
+ @var{htab} to contain a hashing table with at least @var{nel} elements.
+ So this function is equivalent to the @code{hcreate} function except
+@@ -376,6 +421,16 @@
+ @comment search.h
+ @comment GNU
+ @deftypefun void hdestroy_r (struct hsearch_data *@var{htab})
++@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c The table is released while the table pointer still points to it.
++@c Async cancellation is thus unsafe, but it already was because we call
++@c free().  Using the table in a handler while it's being released would
++@c also be dangerous, but calling free() already makes it unsafe, and
++@c the requirement on the caller to ensure exclusive access already
++@c guarantees this doesn't happen, so we don't get @asucorrupt.
++
++@c hdestroy_r @mtsrace:htab @ascuheap @acucorrupt @acsmem
++@c  free dup @ascuheap @acsmem
+ The @code{hdestroy_r} function frees all resources allocated by the
+ @code{hcreate_r} function for this very same object @var{htab}.  As for
+ @code{hdestroy} it is the programs responsibility to free the strings
+@@ -385,6 +440,13 @@
+ @comment search.h
+ @comment GNU
+ @deftypefun int hsearch_r (ENTRY @var{item}, ACTION @var{action}, ENTRY **@var{retval}, struct hsearch_data *@var{htab})
++@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@assafe{}@acunsafe{@acucorrupt{/action==ENTER}}}
++@c Callers have to ensure mutual exclusion; insertion, if cancelled,
++@c leaves the table in a corrupt state.
++
++@c hsearch_r @mtsrace:htab @acucorrupt/action==ENTER
++@c  strlen dup ok
++@c  strcmp dup ok
+ The @code{hsearch_r} function is equivalent to @code{hsearch}.  The
+ meaning of the first two arguments is identical.  But instead of
+ operating on a single global hashing table the function works on the
+@@ -401,7 +463,7 @@
+ 
+ @table @code
+ @item ENOMEM
+-The table is filled and @code{hsearch_r} was called with an so far
++The table is filled and @code{hsearch_r} was called with a so far
+ unknown key and @var{action} set to @code{ENTER}.
+ @item ESRCH
+ The @var{action} parameter is @code{FIND} and no corresponding element
+@@ -436,6 +498,12 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun {void *} tsearch (const void *@var{key}, void **@var{rootp}, comparison_fn_t @var{compar})
++@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c The tree is not modified in a thread-safe manner, and rotations may
++@c leave the tree in an inconsistent state that could be observed in an
++@c asynchronous signal handler (except for the caller-synchronization
++@c requirement) or after asynchronous cancellation of the thread
++@c performing the rotation or the insertion.
+ The @code{tsearch} function searches in the tree pointed to by
+ @code{*@var{rootp}} for an element matching @var{key}.  The function
+ pointed to by @var{compar} is used to determine whether two elements
+@@ -465,6 +533,7 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun {void *} tfind (const void *@var{key}, void *const *@var{rootp}, comparison_fn_t @var{compar})
++@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@assafe{}@acsafe{}}
+ The @code{tfind} function is similar to the @code{tsearch} function.  It
+ locates an element matching the one pointed to by @var{key} and returns
+ a pointer to this element.  But if no matching element is available no
+@@ -479,6 +548,7 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun {void *} tdelete (const void *@var{key}, void **@var{rootp}, comparison_fn_t @var{compar})
++@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+ To remove a specific element matching @var{key} from the tree
+ @code{tdelete} can be used.  It locates the matching element using the
+ same method as @code{tfind}.  The corresponding element is then removed
+@@ -492,6 +562,7 @@
+ @comment search.h
+ @comment GNU
+ @deftypefun void tdestroy (void *@var{vroot}, __free_fn_t @var{freefct})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ If the complete search tree has to be removed one can use
+ @code{tdestroy}.  It frees all resources allocated by the @code{tsearch}
+ function to generate the tree pointed to by @var{vroot}.
+@@ -546,6 +617,7 @@
+ @comment search.h
+ @comment SVID
+ @deftypefun void twalk (const void *@var{root}, __action_fn_t @var{action})
++@safety{@prelim{}@mtsafe{@mtsrace{:root}}@assafe{}@acsafe{}}
+ For each node in the tree with a node pointed to by @var{root}, the
+ @code{twalk} function calls the function provided by the parameter
+ @var{action}.  For leaf nodes the function is called exactly once with
+diff -urN glibc-2.17-c758a686/manual/setjmp.texi glibc-2.17-c758a686/manual/setjmp.texi
+--- glibc-2.17-c758a686/manual/setjmp.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/setjmp.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -107,6 +107,10 @@
+ @comment setjmp.h
+ @comment ISO
+ @deftypefn Macro int setjmp (jmp_buf @var{state})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c _setjmp ok
++@c  __sigsetjmp(!savemask) ok
++@c   __sigjmp_save(!savemask) ok, does not call sigprocmask
+ When called normally, @code{setjmp} stores information about the
+ execution state of the program in @var{state} and returns zero.  If
+ @code{longjmp} is later used to perform a non-local exit to this
+@@ -116,6 +120,20 @@
+ @comment setjmp.h
+ @comment ISO
+ @deftypefun void longjmp (jmp_buf @var{state}, int @var{value})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @asucorrupt{} @asulock{/hurd}}@acunsafe{@acucorrupt{} @aculock{/hurd}}}
++@c __libc_siglongjmp @ascuplugin @asucorrupt @asulock/hurd @acucorrupt @aculock/hurd
++@c  _longjmp_unwind @ascuplugin @asucorrupt @acucorrupt
++@c   __pthread_cleanup_upto @ascuplugin @asucorrupt @acucorrupt
++@c     plugins may be unsafe themselves, but even if they weren't, this
++@c     function isn't robust WRT async signals and cancellation:
++@c     cleanups aren't taken off the stack right away, only after all
++@c     cleanups have been run.  This means that async-cancelling
++@c     longjmp, or interrupting longjmp with an async signal handler
++@c     that calls longjmp may run the same cleanups multiple times.
++@c    _JMPBUF_UNWINDS_ADJ ok
++@c    *cleanup_buf->__routine @ascuplugin
++@c  sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd
++@c  __longjmp ok
+ This function restores current execution to the state saved in
+ @var{state}, and continues execution from the call to @code{setjmp} that
+ established that return point.  Returning from @code{setjmp} by means of
+@@ -141,7 +159,7 @@
+ statement (such as @samp{if}, @samp{switch}, or @samp{while}).
+ 
+ @item
+-As one operand of a equality or comparison operator that appears as the
++As one operand of an equality or comparison operator that appears as the
+ test expression of a selection or iteration statement.  The other
+ operand must be an integer constant expression.
+ 
+@@ -199,6 +217,11 @@
+ @comment setjmp.h
+ @comment POSIX.1
+ @deftypefun int sigsetjmp (sigjmp_buf @var{state}, int @var{savesigs})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c sigsetjmp @asulock/hurd @aculock/hurd
++@c  __sigsetjmp(savemask) @asulock/hurd @aculock/hurd
++@c   __sigjmp_save(savemask) @asulock/hurd @aculock/hurd
++@c    sigprocmask(SIG_BLOCK probe) dup @asulock/hurd @aculock/hurd
+ This is similar to @code{setjmp}.  If @var{savesigs} is nonzero, the set
+ of blocked signals is saved in @var{state} and will be restored if a
+ @code{siglongjmp} is later performed with this @var{state}.
+@@ -207,6 +230,8 @@
+ @comment setjmp.h
+ @comment POSIX.1
+ @deftypefun void siglongjmp (sigjmp_buf @var{state}, int @var{value})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @asucorrupt{} @asulock{/hurd}}@acunsafe{@acucorrupt{} @aculock{/hurd}}}
++@c Alias to longjmp.
+ This is similar to @code{longjmp} except for the type of its @var{state}
+ argument.  If the @code{sigsetjmp} call that set this @var{state} used a
+ nonzero @var{savesigs} flag, @code{siglongjmp} also restores the set of
+@@ -237,7 +262,7 @@
+ @comment SVID
+ @deftp {Data Type} ucontext_t
+ 
+-The @code{ucontext_t} type is defined as a structure with as least the
++The @code{ucontext_t} type is defined as a structure with at least the
+ following elements:
+ 
+ @table @code
+@@ -267,6 +292,10 @@
+ @comment ucontext.h
+ @comment SVID
+ @deftypefun int getcontext (ucontext_t *@var{ucp})
++@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@assafe{}@acsafe{}}
++@c Linux-only implementations in assembly, including sigprocmask
++@c syscall.  A few cases call the sigprocmask function, but that's safe
++@c too.  The ppc case is implemented in terms of a swapcontext syscall.
+ The @code{getcontext} function initializes the variable pointed to by
+ @var{ucp} with the context of the calling thread.  The context contains
+ the content of the registers, the signal mask, and the current stack.
+@@ -278,25 +307,26 @@
+ @end deftypefun
+ 
+ The @code{getcontext} function is similar to @code{setjmp} but it does
+-not provide an indication of whether the function returns for the first
+-time or whether the initialized context was used and the execution is
+-resumed at just that point.  If this is necessary the user has to take
+-determine this herself.  This must be done carefully since the context
+-contains registers which might contain register variables.  This is a
+-good situation to define variables with @code{volatile}.
++not provide an indication of whether @code{getcontext} is returning for
++the first time or whether an initialized context has just been restored.
++If this is necessary the user has to determine this herself.  This must
++be done carefully since the context contains registers which might contain
++register variables.  This is a good situation to define variables with
++@code{volatile}.
+ 
+ Once the context variable is initialized it can be used as is or it can
+-be modified.  The latter is normally done to implement co-routines or
+-similar constructs.  The @code{makecontext} function is what has to be
+-used to do that.
++be modified using the @code{makecontext} function.  The latter is normally
++done when implementing co-routines or similar constructs.
+ 
+ @comment ucontext.h
+ @comment SVID
+ @deftypefun void makecontext (ucontext_t *@var{ucp}, void (*@var{func}) (void), int @var{argc}, @dots{})
++@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@assafe{}@acsafe{}}
++@c Linux-only implementations mostly in assembly, nothing unsafe.
+ 
+-The @var{ucp} parameter passed to the @code{makecontext} shall be
++The @var{ucp} parameter passed to @code{makecontext} shall be
+ initialized by a call to @code{getcontext}.  The context will be
+-modified to in a way so that if the context is resumed it will start by
++modified in a way such that if the context is resumed it will start by
+ calling the function @code{func} which gets @var{argc} integer arguments
+ passed.  The integer arguments which are to be passed should follow the
+ @var{argc} parameter in the call to @code{makecontext}.
+@@ -316,7 +346,7 @@
+ While allocating the memory for the stack one has to be careful.  Most
+ modern processors keep track of whether a certain memory region is
+ allowed to contain code which is executed or not.  Data segments and
+-heap memory is normally not tagged to allow this.  The result is that
++heap memory are normally not tagged to allow this.  The result is that
+ programs would fail.  Examples for such code include the calling
+ sequences the GNU C compiler generates for calls to nested functions.
+ Safe ways to allocate stacks correctly include using memory on the
+@@ -332,13 +362,22 @@
+ allocated for the stack and the size of the memory region is stored in
+ @code{ss_size}.  There are implements out there which require
+ @code{ss_sp} to be set to the value the stack pointer will have (which
+-can depending on the direction the stack grows be different).  This
++can, depending on the direction the stack grows, be different).  This
+ difference makes the @code{makecontext} function hard to use and it
+ requires detection of the platform at compile time.
+ 
+ @comment ucontext.h
+ @comment SVID
+ @deftypefun int setcontext (const ucontext_t *@var{ucp})
++@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
++@c Linux-only implementations mostly in assembly.  Some ports use
++@c sigreturn or swapcontext syscalls; others restore the signal mask
++@c first and then proceed restore other registers in userland, which
++@c leaves a window for cancellation or async signals with misaligned or
++@c otherwise corrupt stack.  ??? Switching to a different stack, or even
++@c to an earlier state on the same stack, may conflict with pthread
++@c cleanups.  This is not quite MT-Unsafe, it's a different kind of
++@c safety issue.
+ 
+ The @code{setcontext} function restores the context described by
+ @var{ucp}.  The context is not modified and can be reused as often as
+@@ -357,6 +396,9 @@
+ terminates normally with an exit status value of @code{EXIT_SUCCESS}
+ (@pxref{Program Termination}).
+ 
++If the context was created by a call to a signal handler or from any
++other source then the behaviour of @code{setcontext} is unspecified.
++
+ Since the context contains information about the stack no two threads
+ should use the same context at the same time.  The result in most cases
+ would be disastrous.
+@@ -372,6 +414,10 @@
+ @comment ucontext.h
+ @comment SVID
+ @deftypefun int swapcontext (ucontext_t *restrict @var{oucp}, const ucontext_t *restrict @var{ucp})
++@safety{@prelim{}@mtsafe{@mtsrace{:oucp} @mtsrace{:ucp}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
++@c Linux-only implementations mostly in assembly.  Some ports call or
++@c inline getcontext and/or setcontext, adjusting the saved context in
++@c between, so we inherit the potential issues of both.
+ 
+ The @code{swapcontext} function is similar to @code{setcontext} but
+ instead of just replacing the current context the latter is first saved
+@@ -385,15 +431,15 @@
+ If @code{swapcontext} succeeds the function does not return unless the
+ context @var{oucp} is used without prior modification by
+ @code{makecontext}.  The return value in this case is @code{0}.  If the
+-function fails it returns @code{-1} and set @var{errno} accordingly.
++function fails it returns @code{-1} and sets @var{errno} accordingly.
+ @end deftypefun
+ 
+ @heading Example for SVID Context Handling
+ 
+ The easiest way to use the context handling functions is as a
+ replacement for @code{setjmp} and @code{longjmp}.  The context contains
+-on most platforms more information which might lead to less surprises
+-but this also means using these functions is more expensive (beside
++on most platforms more information which may lead to fewer surprises
++but this also means using these functions is more expensive (besides
+ being less portable).
+ 
+ @smallexample
+@@ -440,11 +486,11 @@
+ This an example how the context functions can be used to implement
+ co-routines or cooperative multi-threading.  All that has to be done is
+ to call every once in a while @code{swapcontext} to continue running a
+-different context.  It is not allowed to do the context switching from
+-the signal handler directly since neither @code{setcontext} nor
+-@code{swapcontext} are functions which can be called from a signal
+-handler.  But setting a variable in the signal handler and checking it
+-in the body of the functions which are executed.  Since
+-@code{swapcontext} is saving the current context it is possible to have
+-multiple different scheduling points in the code.  Execution will always
+-resume where it was left.
++different context.  It is not recommended to do the context switching from
++the signal handler directly since leaving the signal handler via
++@code{setcontext} if the signal was delivered during code that was not
++asynchronous signal safe could lead to problems. Setting a variable in
++the signal handler and checking it in the body of the functions which
++are executed is a safer approach.  Since @code{swapcontext} is saving the
++current context it is possible to have multiple different scheduling points
++in the code.  Execution will always resume where it was left.
+diff -urN glibc-2.17-c758a686/manual/signal.texi glibc-2.17-c758a686/manual/signal.texi
+--- glibc-2.17-c758a686/manual/signal.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/signal.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -889,6 +889,20 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} strsignal (int @var{signum})
++@safety{@prelim{}@mtunsafe{@mtasurace{:strsignal} @mtslocale{}}@asunsafe{@asuinit{} @ascuintl{} @asucorrupt{} @ascuheap{}}@acunsafe{@acuinit{} @acucorrupt{} @acsmem{}}}
++@c strsignal @mtasurace:strsignal @mtslocale @asuinit @ascuintl @asucorrupt @ascuheap @acucorrupt @acsmem
++@c   uses a static buffer if tsd key creation fails
++@c  [once] init
++@c   libc_key_create ok
++@c    pthread_key_create dup ok
++@c  getbuffer @asucorrupt @ascuheap @acsmem
++@c   libc_getspecific ok
++@c    pthread_getspecific dup ok
++@c   malloc dup @ascuheap @acsmem
++@c   libc_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem
++@c    pthread_setspecific dup @asucorrupt @ascuheap @acucorrupt @acsmem
++@c  snprintf dup @mtslocale @ascuheap @acsmem
++@c  _ @ascuintl
+ This function returns a pointer to a statically-allocated string
+ containing a message describing the signal @var{signum}.  You
+ should not modify the contents of this string; and, since it can be
+@@ -903,6 +917,12 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun void psignal (int @var{signum}, const char *@var{message})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
++@c psignal @mtslocale @asucorrupt @ascuintl @ascuheap @aculock @acucorrupt @acsmem
++@c  _ @ascuintl
++@c  fxprintf @asucorrupt @aculock @acucorrupt
++@c  asprintf @mtslocale @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
+ This function prints a message describing the signal @var{signum} to the
+ standard error output stream @code{stderr}; see @ref{Standard Streams}.
+ 
+@@ -972,6 +992,12 @@
+ @comment signal.h
+ @comment ISO
+ @deftypefun sighandler_t signal (int @var{signum}, sighandler_t @var{action})
++@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}}
++@c signal ok
++@c  sigemptyset dup ok
++@c  sigaddset dup ok
++@c  sigismember dup ok
++@c  sigaction dup ok
+ The @code{signal} function establishes @var{action} as the action for
+ the signal @var{signum}.
+ 
+@@ -1094,6 +1120,10 @@
+ @comment signal.h
+ @comment GNU
+ @deftypefun sighandler_t sysv_signal (int @var{signum}, sighandler_t @var{action})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c sysv_signal ok
++@c  sigemptyset dup ok
++@c  sigaction dup ok
+ The @code{sysv_signal} implements the behavior of the standard
+ @code{signal} function as found on SVID systems.  The difference to BSD
+ systems is that the handler is deinstalled after a delivery of a signal.
+@@ -1106,6 +1136,8 @@
+ @comment signal.h
+ @comment SVID
+ @deftypefun sighandler_t ssignal (int @var{signum}, sighandler_t @var{action})
++@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}}
++@c Aliases signal and bsd_signal.
+ The @code{ssignal} function does the same thing as @code{signal}; it is
+ provided only for compatibility with SVID.
+ @end deftypefun
+@@ -1172,6 +1204,7 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigaction (int @var{signum}, const struct sigaction *restrict @var{action}, struct sigaction *restrict @var{old-action})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @var{action} argument is used to set up a new action for the signal
+ @var{signum}, while the @var{old-action} argument is used to return
+ information about the action previously associated with this symbol.
+@@ -2168,6 +2194,14 @@
+ @comment signal.h
+ @comment ISO
+ @deftypefun int raise (int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c raise ok
++@c [posix]
++@c  getpid dup ok
++@c  kill dup ok
++@c [linux]
++@c  syscall(gettid) ok
++@c  syscall(tgkill) ok
+ The @code{raise} function sends the signal @var{signum} to the calling
+ process.  It returns zero if successful and a nonzero value if it fails.
+ About the only reason for failure would be if the value of @var{signum}
+@@ -2177,6 +2211,8 @@
+ @comment signal.h
+ @comment SVID
+ @deftypefun int gsignal (int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Aliases raise.
+ The @code{gsignal} function does the same thing as @code{raise}; it is
+ provided only for compatibility with SVID.
+ @end deftypefun
+@@ -2269,6 +2305,11 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int kill (pid_t @var{pid}, int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c The hurd implementation is not a critical section, so it's not
++@c immediately obvious that, in case of cancellation, it won't leak
++@c ports or the memory allocated by proc_getpgrppids when pid <= 0.
++@c Since none of these make it AC-Unsafe, I'm leaving them out.
+ The @code{kill} function sends the signal @var{signum} to the process
+ or process group specified by @var{pid}.  Besides the signals listed in
+ @ref{Standard Signals}, @var{signum} can also have a value of zero to
+@@ -2325,6 +2366,8 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun int killpg (int @var{pgid}, int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Calls kill with -pgid.
+ This is similar to @code{kill}, but sends signal @var{signum} to the
+ process group @var{pgid}.  This function is provided for compatibility
+ with BSD; using @code{kill} to do this is more portable.
+@@ -2497,6 +2540,8 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigemptyset (sigset_t *@var{set})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Just memsets all of set to zero.
+ This function initializes the signal set @var{set} to exclude all of the
+ defined signals.  It always returns @code{0}.
+ @end deftypefun
+@@ -2504,6 +2549,7 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigfillset (sigset_t *@var{set})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function initializes the signal set @var{set} to include
+ all of the defined signals.  Again, the return value is @code{0}.
+ @end deftypefun
+@@ -2511,6 +2557,7 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigaddset (sigset_t *@var{set}, int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function adds the signal @var{signum} to the signal set @var{set}.
+ All @code{sigaddset} does is modify @var{set}; it does not block or
+ unblock any signals.
+@@ -2527,6 +2574,7 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigdelset (sigset_t *@var{set}, int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function removes the signal @var{signum} from the signal set
+ @var{set}.  All @code{sigdelset} does is modify @var{set}; it does not
+ block or unblock any signals.  The return value and error conditions are
+@@ -2538,6 +2586,7 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigismember (const sigset_t *@var{set}, int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{sigismember} function tests whether the signal @var{signum} is
+ a member of the signal set @var{set}.  It returns @code{1} if the signal
+ is in the set, @code{0} if not, and @code{-1} if there is an error.
+@@ -2566,7 +2615,7 @@
+ 
+ Note that you must not use @code{sigprocmask} in multi-threaded processes,
+ because each thread has its own signal mask and there is no single process
+-signal mask. According to POSIX, the behavior of @code{sigprocmask} in a
++signal mask.  According to POSIX, the behavior of @code{sigprocmask} in a
+ multi-threaded process is ``unspecified''.
+ Instead, use @code{pthread_sigmask}.
+ @ifset linuxthreads
+@@ -2576,6 +2625,10 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigprocmask (int @var{how}, const sigset_t *restrict @var{set}, sigset_t *restrict @var{oldset})
++@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/bsd(SIG_UNBLOCK)}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c This takes the hurd_self_sigstate-returned object's lock on HURD.  On
++@c BSD, SIG_UNBLOCK is emulated with two sigblock calls, which
++@c introduces a race window.
+ The @code{sigprocmask} function is used to examine or change the calling
+ process's signal mask.  The @var{how} argument determines how the signal
+ mask is changed, and must be one of the following values:
+@@ -2759,6 +2812,10 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigpending (sigset_t *@var{set})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c Direct rt_sigpending syscall on most systems.  On hurd, calls
++@c hurd_self_sigstate, it copies the sigstate's pending while holding
++@c its lock.
+ The @code{sigpending} function stores information about pending signals
+ in @var{set}.  If there is a pending signal that is blocked from
+ delivery, then that signal is a member of the returned set.  (You can
+@@ -2921,7 +2978,18 @@
+ 
+ @comment unistd.h
+ @comment POSIX.1
+-@deftypefun int pause ()
++@deftypefun int pause (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c  The signal mask read by sigprocmask may be overridden by another
++@c  thread or by a signal handler before we call sigsuspend.  Is this a
++@c  safety issue?  Probably not.
++@c pause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
++@c [ports/linux/generic]
++@c  syscall_pause ok
++@c [posix]
++@c  sigemptyset dup ok
++@c  sigprocmask(SIG_BLOCK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
++@c  sigsuspend dup @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+ The @code{pause} function suspends program execution until a signal
+ arrives whose action is either to execute a handler function, or to
+ terminate the process.
+@@ -3017,6 +3085,18 @@
+ @comment signal.h
+ @comment POSIX.1
+ @deftypefun int sigsuspend (const sigset_t *@var{set})
++@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c sigsuspend @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
++@c [posix] @mtasurace:sigprocmask/!bsd!linux
++@c   saving and restoring the procmask is racy
++@c  sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
++@c  pause @asulock/hurd @aculock/hurd
++@c [bsd]
++@c  sigismember dup ok
++@c  sigmask dup ok
++@c  sigpause dup ok [no @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd]
++@c [linux]
++@c  do_sigsuspend ok
+ This function replaces the process's signal mask with @var{set} and then
+ suspends the process until a signal is delivered whose action is either
+ to terminate the process or invoke a signal handling function.  In other
+@@ -3150,6 +3230,9 @@
+ @comment signal.h
+ @comment XPG
+ @deftypefun int sigaltstack (const stack_t *restrict @var{stack}, stack_t *restrict @var{oldstack})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c Syscall on Linux and BSD; the HURD implementation takes a lock on
++@c the hurd_self_sigstate-returned struct.
+ The @code{sigaltstack} function specifies an alternate stack for use
+ during signal handling.  When a signal is received by the process and
+ its action indicates that the signal stack is used, the system arranges
+@@ -3195,7 +3278,9 @@
+ 
+ @comment signal.h
+ @comment BSD
+-@deftypefun int sigstack (const struct sigstack *@var{stack}, struct sigstack *@var{oldstack})
++@deftypefun int sigstack (struct sigstack *@var{stack}, struct sigstack *@var{oldstack})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c Lossy and dangerous (no size limit) wrapper for sigaltstack.
+ The @code{sigstack} function specifies an alternate stack for use during
+ signal handling.  When a signal is received by the process and its
+ action indicates that the signal stack is used, the system arranges a
+@@ -3301,6 +3386,13 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun int sigvec (int @var{signum}, const struct sigvec *@var{action}, struct sigvec *@var{old-action})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This is mostly a safe wrapper for sigaction.  The exception are
++@c systems that lack SA_RESETHAND, in which a signal handler wrapper is
++@c used that calls sigaction to reset the handler before calling the
++@c user-supplied handler; it's unlikely that this emulation is used
++@c anywhere, for user-supplied flags and mask don't seem to be used
++@c the way one would expect.
+ This function is the equivalent of @code{sigaction} (@pxref{Advanced Signal
+ Handling}); it installs the action @var{action} for the signal @var{signum},
+ returning information about the previous action in effect for that signal
+@@ -3310,6 +3402,14 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun int siginterrupt (int @var{signum}, int @var{failflag})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtssigintr{}}}@asunsafe{}@acunsafe{@acucorrupt{}}}
++@c This calls sigaction twice, once to get the current sigaction for the
++@c specified signal, another to apply the flags change.  This could
++@c override the effects of a concurrent sigaction call.  It also
++@c modifies without any guards the global _sigintr variable, that
++@c bsd_signal reads from, and it may leave _sigintr modified without
++@c overriding the active handler if cancelled between the two
++@c operations.
+ This function specifies which approach to use when certain primitives
+ are interrupted by handling signal @var{signum}.  If @var{failflag} is
+ false, signal @var{signum} restarts primitives.  If @var{failflag} is
+@@ -3323,6 +3423,8 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefn Macro int sigmask (int @var{signum})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c This just shifts signum.
+ This macro returns a signal mask that has the bit for signal @var{signum}
+ set.  You can bitwise-OR the results of several calls to @code{sigmask}
+ together to specify more than one signal.  For example,
+@@ -3339,6 +3441,11 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun int sigblock (int @var{mask})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c On most POSIX systems, this is a wrapper for sigprocmask(SIG_BLOCK).
++@c The exception are BSD systems other than 4.4, where it is a syscall.
++@c sigblock @asulock/hurd @aculock/hurd
++@c  sigprocmask(SIG_BLOCK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
+ This function is equivalent to @code{sigprocmask} (@pxref{Process Signal
+ Mask}) with a @var{how} argument of @code{SIG_BLOCK}: it adds the
+ signals specified by @var{mask} to the calling process's set of blocked
+@@ -3348,6 +3455,11 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun int sigsetmask (int @var{mask})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c On most POSIX systems, this is a wrapper for sigprocmask(SIG_SETMASK).
++@c The exception are BSD systems other than 4.4, where it is a syscall.
++@c sigsetmask @asulock/hurd @aculock/hurd
++@c  sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
+ This function equivalent to @code{sigprocmask} (@pxref{Process
+ Signal Mask}) with a @var{how} argument of @code{SIG_SETMASK}: it sets
+ the calling process's signal mask to @var{mask}.  The return value is
+@@ -3357,6 +3469,15 @@
+ @comment signal.h
+ @comment BSD
+ @deftypefun int sigpause (int @var{mask})
++@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}}
++@c sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
++@c [posix]
++@c  __sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
++@c   do_sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
++@c    sigprocmask(0) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)]
++@c    sigdelset dup ok
++@c    sigset_set_old_mask dup ok
++@c    sigsuspend dup @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd
+ This function is the equivalent of @code{sigsuspend} (@pxref{Waiting
+ for a Signal}):  it sets the calling process's signal mask to @var{mask},
+ and waits for a signal to arrive.  On return the previous set of blocked
+diff -urN glibc-2.17-c758a686/manual/socket.texi glibc-2.17-c758a686/manual/socket.texi
+--- glibc-2.17-c758a686/manual/socket.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/socket.texi	2014-09-12 16:10:06.046792714 -0400
+@@ -394,6 +394,8 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int bind (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, except on Hurd.
+ The @code{bind} function assigns an address to the socket
+ @var{socket}.  The @var{addr} and @var{length} arguments specify the
+ address; the detailed format of the address depends on the namespace.
+@@ -442,6 +444,9 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int getsockname (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsmem{/hurd}}}
++@c Direct syscall, except on Hurd, where it seems like it might leak
++@c VM if cancelled.
+ The @code{getsockname} function returns information about the
+ address of the socket @var{socket} in the locations specified by the
+ @var{addr} and @var{length-ptr} arguments.  Note that the
+@@ -501,6 +506,14 @@
+ @comment net/if.h
+ @comment IPv6 basic API
+ @deftypefun {unsigned int} if_nametoindex (const char *@var{ifname})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c It opens a socket to use ioctl on the fd to get the index.
++@c opensock may call socket and access multiple times until it finds a
++@c socket family that works.  The Linux implementation has a potential
++@c concurrency issue WRT last_type and last_family not being updated
++@c atomically, but it is harmless; the generic implementation, OTOH,
++@c takes a lock, which makes all callers AS- and AC-Unsafe.
++@c  opensock @asulock @aculock @acsfd
+ This function yields the interface index corresponding to a particular
+ name.  If no interface exists with the name given, it returns 0.
+ @end deftypefun
+@@ -508,6 +521,9 @@
+ @comment net/if.h
+ @comment IPv6 basic API
+ @deftypefun {char *} if_indextoname (unsigned int @var{ifindex}, char *@var{ifname})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c It opens a socket with opensock to use ioctl on the fd to get the
++@c name from the index.
+ This function maps an interface index to its corresponding name.  The
+ returned name is placed in the buffer pointed to by @code{ifname}, which
+ must be at least @code{IFNAMSIZ} bytes in length.  If the index was
+@@ -534,6 +550,39 @@
+ @comment net/if.h
+ @comment IPv6 basic API
+ @deftypefun {struct if_nameindex *} if_nameindex (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@aculock{/hurd} @acsfd{} @acsmem{}}}
++@c if_nameindex @ascuheap @asulock/hurd @aculock/hurd @acsfd @acsmem
++@c  [linux]
++@c   netlink_open @acsfd @acsmem/hurd
++@c    socket dup @acsfd
++@c    memset dup ok
++@c    bind dup ok
++@c    netlink_close dup @acsfd
++@c    getsockname dup @acsmem/hurd
++@c   netlink_request @ascuheap @acsmem
++@c    getpagesize dup ok
++@c    malloc dup @ascuheap @acsmem
++@c    netlink_sendreq ok
++@c     memset dup ok
++@c     sendto dup ok
++@c    recvmsg dup ok
++@c    memcpy dup ok
++@c    free dup @ascuheap @acsmem
++@c   netlink_free_handle @ascuheap @acsmem
++@c    free dup @ascuheap @acsmem
++@c   netlink_close @acsfd
++@c    close dup @acsfd
++@c   malloc dup @asuheap @acsmem
++@c   strndup @ascuheap @acsmem
++@c   if_freenameindex @ascuheap @acsmem
++@c  [hurd]
++@c   opensock dup @asulock @aculock @acsfd
++@c   hurd_socket_server ok
++@c   pfinet_siocgifconf ok
++@c   malloc @ascuheap @acsmem
++@c   strdup @ascuheap @acsmem
++@c   ioctl dup ok
++@c   free @ascuheap @acsmem
+ This function returns an array of @code{if_nameindex} structures, one
+ for every interface that is present.  The end of the list is indicated
+ by a structure with an interface of 0 and a null name pointer.  If an
+@@ -546,6 +595,9 @@
+ @comment net/if.h
+ @comment IPv6 basic API
+ @deftypefun void if_freenameindex (struct if_nameindex *@var{ptr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c if_freenameindex @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
+ This function frees the structure returned by an earlier call to
+ @code{if_nameindex}.
+ @end deftypefun
+@@ -660,6 +712,7 @@
+ @comment sys/un.h
+ @comment BSD
+ @deftypefn {Macro} int SUN_LEN (@emph{struct sockaddr_un *} @var{ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The macro computes the length of socket address in the local namespace.
+ @end deftypefn
+ 
+@@ -689,7 +742,7 @@
+ To create a socket in the IPv4 Internet namespace, use the symbolic name
+ @code{PF_INET} of this namespace as the @var{namespace} argument to
+ @code{socket} or @code{socketpair}.  For IPv6 addresses you need the
+-macro @code{PF_INET6}. These macros are defined in @file{sys/socket.h}.
++macro @code{PF_INET6}.  These macros are defined in @file{sys/socket.h}.
+ @pindex sys/socket.h
+ 
+ @comment sys/socket.h
+@@ -726,12 +779,12 @@
+ * Internet Address Formats::    How socket addresses are specified in the
+                                  Internet namespace.
+ * Host Addresses::	        All about host addresses of Internet host.
+-* Protocols Database::		Referring to protocols by name.
+ * Ports::			Internet port numbers.
+ * Services Database::           Ports may have symbolic names.
+ * Byte Order::		        Different hosts may use different byte
+                                  ordering conventions; you need to
+                                  canonicalize host address and port number.
++* Protocols Database::		Referring to protocols by name.
+ * Inet Example::	        Putting it all together.
+ @end menu
+ 
+@@ -1035,6 +1088,13 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun int inet_aton (const char *@var{name}, struct in_addr *@var{addr})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c inet_aton @mtslocale
++@c  isdigit dup @mtslocale
++@c  strtoul dup @mtslocale
++@c  isascii dup @mtslocale
++@c  isspace dup @mtslocale
++@c  htonl dup ok
+ This function converts the IPv4 Internet host address @var{name}
+ from the standard numbers-and-dots notation into binary data and stores
+ it in the @code{struct in_addr} that @var{addr} points to.
+@@ -1044,10 +1104,13 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun {uint32_t} inet_addr (const char *@var{name})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c inet_addr @mtslocale
++@c  inet_aton dup @mtslocale
+ This function converts the IPv4 Internet host address @var{name} from the
+ standard numbers-and-dots notation into binary data.  If the input is
+ not valid, @code{inet_addr} returns @code{INADDR_NONE}.  This is an
+-obsolete interface to @code{inet_aton}, described immediately above. It
++obsolete interface to @code{inet_aton}, described immediately above.  It
+ is obsolete because @code{INADDR_NONE} is a valid address
+ (255.255.255.255), and @code{inet_aton} provides a cleaner way to
+ indicate error return.
+@@ -1056,9 +1119,15 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun {uint32_t} inet_network (const char *@var{name})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c inet_network @mtslocale
++@c  isdigit dup @mtslocale
++@c  isxdigit dup @mtslocale
++@c  tolower dup @mtslocale
++@c  isspace dup @mtslocale
+ This function extracts the network number from the address @var{name},
+-given in the standard numbers-and-dots notation. The returned address is
+-in host order. If the input is not valid, @code{inet_network} returns
++given in the standard numbers-and-dots notation.  The returned address is
++in host order.  If the input is not valid, @code{inet_network} returns
+ @code{-1}.
+ 
+ The function works only with traditional IPv4 class A, B and C network
+@@ -1069,6 +1138,10 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun {char *} inet_ntoa (struct in_addr @var{addr})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asurace{}}@acsafe{}}
++@c inet_ntoa @mtslocale @asurace
++@c   writes to a thread-local static buffer
++@c  snprintf @mtslocale [no @ascuheap or @acsmem]
+ This function converts the IPv4 Internet host address @var{addr} to a
+ string in the standard numbers-and-dots notation.  The return value is
+ a pointer into a statically-allocated buffer.  Subsequent calls will
+@@ -1087,6 +1160,9 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun {struct in_addr} inet_makeaddr (uint32_t @var{net}, uint32_t @var{local})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c inet_makeaddr ok
++@c  htonl dup ok
+ This function makes an IPv4 Internet host address by combining the network
+ number @var{net} with the local-address-within-network number
+ @var{local}.
+@@ -1095,6 +1171,11 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun uint32_t inet_lnaof (struct in_addr @var{addr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c inet_lnaof ok
++@c  ntohl dup ok
++@c  IN_CLASSA ok
++@c  IN_CLASSB ok
+ This function returns the local-address-within-network part of the
+ Internet host address @var{addr}.
+ 
+@@ -1106,6 +1187,11 @@
+ @comment arpa/inet.h
+ @comment BSD
+ @deftypefun uint32_t inet_netof (struct in_addr @var{addr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c inet_netof ok
++@c  ntohl dup ok
++@c  IN_CLASSA ok
++@c  IN_CLASSB ok
+ This function returns the network number part of the Internet host
+ address @var{addr}.
+ 
+@@ -1117,6 +1203,16 @@
+ @comment arpa/inet.h
+ @comment IPv6 basic API
+ @deftypefun int inet_pton (int @var{af}, const char *@var{cp}, void *@var{buf})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c inet_pton @mtslocale
++@c  inet_pton4 ok
++@c   memcpy dup ok
++@c  inet_pton6 @mtslocale
++@c   memset dup ok
++@c   tolower dup @mtslocale
++@c   strchr dup ok
++@c   inet_pton4 dup ok
++@c   memcpy dup ok
+ This function converts an Internet address (either IPv4 or IPv6) from
+ presentation (textual) to network (binary) format.  @var{af} should be
+ either @code{AF_INET} or @code{AF_INET6}, as appropriate for the type of
+@@ -1127,7 +1223,17 @@
+ 
+ @comment arpa/inet.h
+ @comment IPv6 basic API
+-@deftypefun {const char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, size_t @var{len})
++@deftypefun {const char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, socklen_t @var{len})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c inet_ntop @mtslocale
++@c  inet_ntop4 @mtslocale
++@c   sprintf dup @mtslocale [no @ascuheap or @acsmem]
++@c   strcpy dup ok
++@c  inet_ntop6 @mtslocale
++@c   memset dup ok
++@c   inet_ntop4 dup @mtslocale
++@c   sprintf dup @mtslocale [no @ascuheap or @acsmem]
++@c   strcpy dup ok
+ This function converts an Internet address (either IPv4 or IPv6) from
+ network (binary) to presentation (textual) form.  @var{af} should be
+ either @code{AF_INET} or @code{AF_INET6}, as appropriate.  @var{cp} is a
+@@ -1211,6 +1317,71 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct hostent *} gethostbyname (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c gethostbyname @mtasurace:hostbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  nss_hostname_digits_dots @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   res_maybe_init(!preinit) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    res_iclose @acsuheap @acsmem @acsfd
++@c     close_not_cancel_no_status dup @acsfd
++@c     free dup @acsuheap @acsmem
++@c    res_vinit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c     res_randomid ok
++@c      getpid dup ok
++@c     getenv dup @mtsenv
++@c     strncpy dup ok
++@c     fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c     fsetlocking dup ok [no concurrent uses]
++@c     fgets_unlocked dup ok [no concurrent uses]
++@c     MATCH ok
++@c      strncmp dup ok
++@c     strpbrk dup ok
++@c     strchr dup ok
++@c     inet_aton dup @mtslocale
++@c     htons dup
++@c     inet_pton dup @mtslocale
++@c     malloc dup @ascuheap @acsmem
++@c     IN6_IS_ADDR_LINKLOCAL ok
++@c      htonl dup ok
++@c     IN6_IS_ADDR_MC_LINKLOCAL ok
++@c     if_nametoindex dup @asulock @aculock @acsfd
++@c     strtoul dup @mtslocale
++@c     ISSORTMASK ok
++@c      strchr dup ok
++@c     isascii dup @mtslocale
++@c     isspace dup @mtslocale
++@c     net_mask ok
++@c      ntohl dup ok
++@c      IN_CLASSA dup ok
++@c      htonl dup ok
++@c      IN_CLASSB dup ok
++@c     res_setoptions @mtslocale
++@c      strncmp dup ok
++@c      atoi dup @mtslocale
++@c     fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c     inet_makeaddr dup ok
++@c     gethostname dup ok
++@c     strcpy dup ok
++@c     rawmemchr dup ok
++@c    res_ninit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c     res_vinit dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   isdigit dup @mtslocale
++@c   isxdigit dup @mtslocale
++@c   strlen dup ok
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c   memset dup ok
++@c   inet_aton dup @mtslocale
++@c   inet_pton dup @mtslocale
++@c   strcpy dup ok
++@c   memcpy dup ok
++@c   strchr dup ok
++@c  gethostbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c  set_h_errno ok
+ The @code{gethostbyname} function returns information about the host
+ named @var{name}.  If the lookup fails, it returns a null pointer.
+ @end deftypefun
+@@ -1218,6 +1389,16 @@
+ @comment netdb.h
+ @comment IPv6 Basic API
+ @deftypefun {struct hostent *} gethostbyname2 (const char *@var{name}, int @var{af})
++@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname2} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c gethostbyname2 @mtasurace:hostbyname2 @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  gethostbyname2_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c  set_h_errno dup ok
+ The @code{gethostbyname2} function is like @code{gethostbyname}, but
+ allows the caller to specify the desired address family (e.g.@:
+ @code{AF_INET} or @code{AF_INET6}) of the result.
+@@ -1225,11 +1406,20 @@
+ 
+ @comment netdb.h
+ @comment BSD
+-@deftypefun {struct hostent *} gethostbyaddr (const char *@var{addr}, size_t @var{length}, int @var{format})
++@deftypefun {struct hostent *} gethostbyaddr (const void *@var{addr}, socklen_t @var{length}, int @var{format})
++@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyaddr} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c gethostbyaddr @mtasurace:hostbyaddr @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  gethostbyaddr_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c  set_h_errno dup ok
+ The @code{gethostbyaddr} function returns information about the host
+ with Internet address @var{addr}.  The parameter @var{addr} is not
+ really a pointer to char - it can be a pointer to an IPv4 or an IPv6
+-address. The @var{length} argument is the size (in bytes) of the address
++address.  The @var{length} argument is the size (in bytes) of the address
+ at @var{addr}.  @var{format} specifies the address format; for an IPv4
+ Internet address, specify a value of @code{AF_INET}; for an IPv6
+ Internet address, use @code{AF_INET6}.
+@@ -1282,6 +1472,76 @@
+ @comment netdb.h
+ @comment GNU
+ @deftypefun int gethostbyname_r (const char *restrict @var{name}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c gethostbyname_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  nscd_gethostbyname_r @mtsenv @ascuheap @acsfd @acsmem
++@c   nscd_gethst_r @mtsenv @ascuheap @acsfd @acsmem
++@c    getenv dup @mtsenv
++@c    nscd_get_map_ref dup @ascuheap @acsfd @acsmem
++@c    nscd_cache_search dup ok
++@c    memcpy dup ok
++@c    nscd_open_socket dup @acsfd
++@c    readvall dup ok
++@c    readall dup ok
++@c    close_not_cancel_no_status dup @acsfd
++@c    nscd_drop_map_ref dup @ascuheap @acsmem
++@c    nscd_unmap dup @ascuheap @acsmem
++@c  res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  res_hconf_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
++@c   res_hconf.c:do_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c    memset dup ok
++@c    getenv dup @mtsenv
++@c    fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c    fsetlocking dup ok [no concurrent uses]
++@c    fgets_unlocked dup ok [no concurrent uses]
++@c    strchrnul dup ok
++@c    res_hconf.c:parse_line @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c     skip_ws dup @mtslocale
++@c     skip_string dup @mtslocale
++@c     strncasecmp dup @mtslocale
++@c     strlen dup ok
++@c     asprintf dup @mtslocale @ascuheap @acsmem
++@c     fxprintf dup @asucorrupt @aculock @acucorrupt
++@c     free dup @ascuheap @acsmem
++@c     arg_trimdomain_list dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c     arg_spoof dup @mtslocale
++@c     arg_bool dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c     isspace dup @mtslocale
++@c    fclose dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c    arg_spoof @mtslocale
++@c     skip_string @mtslocale
++@c      isspace dup @mtslocale
++@c     strncasecmp dup @mtslocale
++@c    arg_bool @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c     strncasecmp dup @mtslocale
++@c     asprintf dup @mtslocale @ascuheap @acsmem
++@c     fxprintf dup @asucorrupt @aculock @acucorrupt
++@c     free dup @ascuheap @acsmem
++@c    arg_trimdomain_list @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem
++@c     skip_string dup @mtslocale
++@c     asprintf dup @mtslocale @ascuheap @acsmem
++@c     fxprintf dup @asucorrupt @aculock @acucorrupt
++@c     free dup @ascuheap @acsmem
++@c     strndup dup @ascuheap @acsmem
++@c     skip_ws @mtslocale
++@c      isspace dup @mtslocale
++@c  nss_hosts_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
++@c   nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_gethostbyname_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  res_hconf_reorder_addrs @asulock @ascuheap @aculock @acsmem @acsfd
++@c   socket dup @acsfd
++@c   libc_lock_lock dup @asulock @aculock
++@c   ifreq @ascuheap @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   if_nextreq dup ok
++@c   ioctl dup ok
++@c   realloc dup @ascuheap @acsmem
++@c   if_freereq dup @acsmem
++@c   libc_lock_unlock dup @aculock
++@c   close dup @acsfd
+ The @code{gethostbyname_r} function returns information about the host
+ named @var{name}.  The caller must pass a pointer to an object of type
+ @code{struct hostent} in the @var{result_buf} parameter.  In addition
+@@ -1290,37 +1550,42 @@
+ parameters.
+ 
+ A pointer to the buffer, in which the result is stored, is available in
+-@code{*@var{result}} after the function call successfully returned.  If
+-an error occurs or if no entry is found, the pointer @code{*@var{result}}
+-is a null pointer.  Success is signalled by a zero return value.  If the
+-function failed the return value is an error number.  In addition to the
+-errors defined for @code{gethostbyname} it can also be @code{ERANGE}.
+-In this case the call should be repeated with a larger buffer.
+-Additional error information is not stored in the global variable
+-@code{h_errno} but instead in the object pointed to by @var{h_errnop}.
++@code{*@var{result}} after the function call successfully returned.  The
++buffer passed as the @var{buf} parameter can be freed only once the caller
++has finished with the result hostent struct, or has copied it including all
++the other memory that it points to.  If an error occurs or if no entry is
++found, the pointer @code{*@var{result}} is a null pointer.  Success is
++signalled by a zero return value.  If the function failed the return value
++is an error number.  In addition to the errors defined for
++@code{gethostbyname} it can also be @code{ERANGE}.  In this case the call
++should be repeated with a larger buffer.  Additional error information is
++not stored in the global variable @code{h_errno} but instead in the object
++pointed to by @var{h_errnop}.
+ 
+ Here's a small example:
+ @smallexample
+ struct hostent *
+ gethostname (char *host)
+ @{
+-  struct hostent hostbuf, *hp;
++  struct hostent *hostbuf, *hp;
+   size_t hstbuflen;
+   char *tmphstbuf;
+   int res;
+   int herr;
+ 
++  hostbuf = malloc (sizeof (struct hostent));
+   hstbuflen = 1024;
+-  /* Allocate buffer, remember to free it to avoid memory leakage.  */
+   tmphstbuf = malloc (hstbuflen);
+ 
+-  while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen,
++  while ((res = gethostbyname_r (host, hostbuf, tmphstbuf, hstbuflen,
+                                  &hp, &herr)) == ERANGE)
+     @{
+       /* Enlarge the buffer.  */
+       hstbuflen *= 2;
+       tmphstbuf = realloc (tmphstbuf, hstbuflen);
+     @}
++
++  free (tmphstbuf);
+   /*  Check for errors.  */
+   if (res || hp == NULL)
+     return NULL;
+@@ -1332,6 +1597,17 @@
+ @comment netdb.h
+ @comment GNU
+ @deftypefun int gethostbyname2_r (const char *@var{name}, int @var{af}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c gethostbyname2_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  nscd_gethostbyname2_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
++@c   nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
++@c  res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
++@c  nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_gethostbyname2_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd
+ The @code{gethostbyname2_r} function is like @code{gethostbyname_r}, but
+ allows the caller to specify the desired address family (e.g.@:
+ @code{AF_INET} or @code{AF_INET6}) for the result.
+@@ -1339,11 +1615,26 @@
+ 
+ @comment netdb.h
+ @comment GNU
+-@deftypefun int gethostbyaddr_r (const char *@var{addr}, size_t @var{length}, int @var{format}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
++@deftypefun int gethostbyaddr_r (const void *@var{addr}, socklen_t @var{length}, int @var{format}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c gethostbyaddr_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd
++@c  memcmp dup ok
++@c  nscd_gethostbyaddr_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
++@c   nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem
++@c  res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called]
++@c  nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_gethostbyaddr_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd
++@c  res_hconf_trim_domains @mtslocale
++@c   res_hconf_trim_domain @mtslocale
++@c    strlen dup ok
++@c    strcasecmp dup @mtslocale
+ The @code{gethostbyaddr_r} function returns information about the host
+ with Internet address @var{addr}.  The parameter @var{addr} is not
+ really a pointer to char - it can be a pointer to an IPv4 or an IPv6
+-address. The @var{length} argument is the size (in bytes) of the address
++address.  The @var{length} argument is the size (in bytes) of the address
+ at @var{addr}.  @var{format} specifies the address format; for an IPv4
+ Internet address, specify a value of @code{AF_INET}; for an IPv6
+ Internet address, use @code{AF_INET6}.
+@@ -1362,6 +1653,18 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void sethostent (int @var{stayopen})
++@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c sethostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_setent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   set_h_errno dup ok
++@c   setup(nss_hosts_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *lookup_fct = nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:hostent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function opens the hosts database to begin scanning it.  You can
+ then call @code{gethostent} to read the entries.
+ 
+@@ -1377,6 +1680,27 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct hostent *} gethostent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtasurace{:hostentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c gethostent @mtasurace:hostent @mtasurace:hostentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent(gethostent_r) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   *func = gethostent_r dup @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c gethostent_r @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent_r(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   setup(nss_hosts_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:hostent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *sfct.f @mtasurace:hostent @ascuplugin
++@c  libc_lock_unlock dup @aculock
++
+ This function returns the next entry in the hosts database.  It
+ returns a null pointer if there are no more entries.
+ @end deftypefun
+@@ -1384,6 +1708,15 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void endhostent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endhostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  nss_endent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:hostent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock @aculock
+ This function closes the hosts database.
+ @end deftypefun
+ 
+@@ -1483,6 +1816,34 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct servent *} getservbyname (const char *@var{name}, const char *@var{proto})
++@safety{@prelim{}@mtunsafe{@mtasurace{:servbyname} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getservbyname =~ getpwuid @mtasurace:servbyname @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getservbyname_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getservbyname_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_getservbyname_r @ascuheap @acsfd @acsmem
++@c   nscd_getserv_r @ascuheap @acsfd @acsmem
++@c    nscd_get_map_ref dup @ascuheap @acsfd @acsmem
++@c    strlen dup ok
++@c    malloc dup @ascuheap @acsmem
++@c    mempcpy dup ok
++@c    memcpy dup ok
++@c    nscd_cache_search dup ok
++@c    nscd_open_socket dup @acsfd
++@c    readvall dup ok
++@c    readall dup ok
++@c    close_not_cancel_no_status dup @acsfd
++@c    nscd_drop_map_ref dup @ascuheap @acsmem
++@c    nscd_unmap dup @ascuheap @acsmem
++@c    free dup @ascuheap @acsmem
++@c  nss_services_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getservbyname_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getservbyname} function returns information about the
+ service named @var{name} using protocol @var{proto}.  If it can't find
+ such a service, it returns a null pointer.
+@@ -1494,6 +1855,21 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct servent *} getservbyport (int @var{port}, const char *@var{proto})
++@safety{@prelim{}@mtunsafe{@mtasurace{:servbyport} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getservbyport =~ getservbyname @mtasurace:servbyport @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getservbyport_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getservbyport_r =~ getservbyname_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_getservbyport_r @ascuheap @acsfd @acsmem
++@c   nscd_getserv_r dup @ascuheap @acsfd @acsmem
++@c  nss_services_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getservbyport_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getservbyport} function returns information about the
+ service at port @var{port} using protocol @var{proto}.  If it can't
+ find such a service, it returns a null pointer.
+@@ -1507,6 +1883,16 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void setservent (int @var{stayopen})
++@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c setservent @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_setent(nss_services_lookup2) @mtasurace:servenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_services_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *lookup_fct = nss_services_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:servent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function opens the services database to begin scanning it.
+ 
+ If the @var{stayopen} argument is nonzero, this sets a flag so that
+@@ -1519,6 +1905,25 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct servent *} getservent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtasurace{:serventbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getservent @mtasurace:servent @mtasurace:serventbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent(getservent_r) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   *func = getservent_r dup @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getservent_r @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent_r(nss_services_lookup2) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_services_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:servent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *sfct.f @mtasurace:servent @ascuplugin
++@c  libc_lock_unlock dup @aculock
+ This function returns the next entry in the services database.  If
+ there are no more entries, it returns a null pointer.
+ @end deftypefun
+@@ -1526,6 +1931,14 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void endservent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endservent @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  nss_endent(nss_services_lookup2) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_services_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:servent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock @aculock
+ This function closes the services database.
+ @end deftypefun
+ 
+@@ -1571,6 +1984,11 @@
+ @comment netinet/in.h
+ @comment BSD
+ @deftypefun {uint16_t} htons (uint16_t @var{hostshort})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c htons ok
++@c  bswap_16 ok
++@c   bswap_constant_16 ok
++
+ This function converts the @code{uint16_t} integer @var{hostshort} from
+ host byte order to network byte order.
+ @end deftypefun
+@@ -1578,6 +1996,8 @@
+ @comment netinet/in.h
+ @comment BSD
+ @deftypefun {uint16_t} ntohs (uint16_t @var{netshort})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Alias to htons.
+ This function converts the @code{uint16_t} integer @var{netshort} from
+ network byte order to host byte order.
+ @end deftypefun
+@@ -1585,6 +2005,9 @@
+ @comment netinet/in.h
+ @comment BSD
+ @deftypefun {uint32_t} htonl (uint32_t @var{hostlong})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c htonl ok
++@c  bswap_32 dup ok
+ This function converts the @code{uint32_t} integer @var{hostlong} from
+ host byte order to network byte order.
+ 
+@@ -1594,6 +2017,8 @@
+ @comment netinet/in.h
+ @comment BSD
+ @deftypefun {uint32_t} ntohl (uint32_t @var{netlong})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Alias to htonl.
+ This function converts the @code{uint32_t} integer @var{netlong} from
+ network byte order to host byte order.
+ 
+@@ -1658,6 +2083,20 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct protoent *} getprotobyname (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:protobyname} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getprotobyname =~ getpwuid @mtasurace:protobyname @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getprotobyname_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getprotobyname_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   no nscd support
++@c  nss_protocols_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getprotobyname_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getprotobyname} function returns information about the
+ network protocol named @var{name}.  If there is no such protocol, it
+ returns a null pointer.
+@@ -1666,6 +2105,20 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct protoent *} getprotobynumber (int @var{protocol})
++@safety{@prelim{}@mtunsafe{@mtasurace{:protobynumber} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getprotobynumber =~ getpwuid @mtasurace:protobynumber @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getprotobynumber_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getprotobynumber_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   no nscd support
++@c  nss_protocols_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getprotobynumber_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getprotobynumber} function returns information about the
+ network protocol with number @var{protocol}.  If there is no such
+ protocol, it returns a null pointer.
+@@ -1678,6 +2131,16 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void setprotoent (int @var{stayopen})
++@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c setprotoent @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_setent(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_protocols_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *lookup_fct = nss_protocols_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:protoent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function opens the protocols database to begin scanning it.
+ 
+ If the @var{stayopen} argument is nonzero, this sets a flag so that
+@@ -1690,6 +2153,25 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct protoent *} getprotoent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtasurace{:protoentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getprotoent @mtasurace:protoent @mtasurace:protoentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent(getprotoent_r) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   *func = getprotoent_r dup @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getprotoent_r @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent_r(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_protocols_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:servent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *sfct.f @mtasurace:protoent @ascuplugin
++@c  libc_lock_unlock dup @aculock
+ This function returns the next entry in the protocols database.  It
+ returns a null pointer if there are no more entries.
+ @end deftypefun
+@@ -1697,6 +2179,14 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void endprotoent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endprotoent @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  nss_endent(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_protocols_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:protoent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock @aculock
+ This function closes the protocols database.
+ @end deftypefun
+ 
+@@ -1766,6 +2256,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int socket (int @var{namespace}, int @var{style}, int @var{protocol})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ This function creates a socket and specifies communication style
+ @var{style}, which should be one of the socket styles listed in
+ @ref{Communication Styles}.  The @var{namespace} argument specifies
+@@ -1828,6 +2319,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int shutdown (int @var{socket}, int @var{how})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{shutdown} function shuts down the connection of socket
+ @var{socket}.  The argument @var{how} specifies what action to
+ perform:
+@@ -1879,6 +2371,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int socketpair (int @var{namespace}, int @var{style}, int @var{protocol}, int @var{filedes}@t{[2]})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ This function creates a socket pair, returning the file descriptors in
+ @code{@var{filedes}[0]} and @code{@var{filedes}[1]}.  The socket pair
+ is a full-duplex communications channel, so that both reading and writing
+@@ -1972,6 +2465,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int connect (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{connect} function initiates a connection from the socket
+ with file descriptor @var{socket} to the socket whose address is
+ specified by the @var{addr} and @var{length} arguments.  (This socket
+@@ -2071,6 +2565,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int listen (int @var{socket}, int @var{n})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ The @code{listen} function enables the socket @var{socket} to accept
+ connections, thus making it a server socket.
+ 
+@@ -2123,6 +2618,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int accept (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length_ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
+ This function is used to accept a connection request on the server
+ socket @var{socket}.
+ 
+@@ -2181,6 +2677,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int getpeername (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getpeername} function returns the address of the socket that
+ @var{socket} is connected to; it stores the address in the memory space
+ specified by @var{addr} and @var{length-ptr}.  It stores the length of
+@@ -2248,7 +2745,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int send (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags})
++@deftypefun ssize_t send (int @var{socket}, const void *@var{buffer}, size_t @var{size}, int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{send} function is like @code{write}, but with the additional
+ flags @var{flags}.  The possible values of @var{flags} are described
+ in @ref{Socket Data Options}.
+@@ -2315,7 +2813,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int recv (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags})
++@deftypefun ssize_t recv (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{recv} function is like @code{read}, but with the additional
+ flags @var{flags}.  The possible values of @var{flags} are described
+ in @ref{Socket Data Options}.
+@@ -2643,7 +3142,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int sendto (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t @var{length})
++@deftypefun ssize_t sendto (int @var{socket}, const void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{sendto} function transmits the data in the @var{buffer}
+ through the socket @var{socket} to the destination address specified
+ by the @var{addr} and @var{length} arguments.  The @var{size} argument
+@@ -2678,7 +3178,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
++@deftypefun ssize_t recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{recvfrom} function reads one packet from the socket
+ @var{socket} into the buffer @var{buffer}.  The @var{size} argument
+ specifies the maximum number of bytes to be read.
+@@ -2725,7 +3226,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags})
++@deftypefun ssize_t sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ This function is defined as a cancellation point in multi-threaded
+ programs, so one has to be prepared for this and make sure that
+@@ -2736,7 +3238,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags})
++@deftypefun ssize_t recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ This function is defined as a cancellation point in multi-threaded
+ programs, so one has to be prepared for this and make sure that
+@@ -2924,6 +3427,7 @@
+ @comment sys/socket.h
+ @comment BSD
+ @deftypefun int getsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t *@var{optlen-ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getsockopt} function gets information about the value of
+ option @var{optname} at level @var{level} for socket @var{socket}.
+ 
+@@ -2953,7 +3457,8 @@
+ 
+ @comment sys/socket.h
+ @comment BSD
+-@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t @var{optlen})
++@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, const void *@var{optval}, socklen_t @var{optlen})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is used to set the socket option @var{optname} at level
+ @var{level} for socket @var{socket}.  The value of the option is passed
+ in the buffer @var{optval} of size @var{optlen}.
+@@ -3150,6 +3655,21 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct netent *} getnetbyname (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getnetbyname =~ getpwuid @mtasurace:netbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getnetbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getnetbyname_r =~ getpwuid_r @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   no nscd support
++@c  res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  nss_networks_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getnetbyname_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getnetbyname} function returns information about the network
+ named @var{name}.  It returns a null pointer if there is no such
+ network.
+@@ -3157,7 +3677,21 @@
+ 
+ @comment netdb.h
+ @comment BSD
+-@deftypefun {struct netent *} getnetbyaddr (unsigned long int @var{net}, int @var{type})
++@deftypefun {struct netent *} getnetbyaddr (uint32_t @var{net}, int @var{type})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netbyaddr} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getnetbyaddr =~ getpwuid @mtasurace:netbyaddr @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getnetbyaddr_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getnetbyaddr_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   no nscd support
++@c  nss_networks_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getnetbyaddr_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getnetbyaddr} function returns information about the network
+ of type @var{type} with number @var{net}.  You should specify a value of
+ @code{AF_INET} for the @var{type} argument for Internet networks.
+@@ -3173,6 +3707,17 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void setnetent (int @var{stayopen})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c setnetent @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_setent(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   setup(nss_networks_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *lookup_fct = nss_networks_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:netent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function opens and rewinds the networks database.
+ 
+ If the @var{stayopen} argument is nonzero, this sets a flag so that
+@@ -3185,6 +3730,26 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun {struct netent *} getnetent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtasurace{:netentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getnetent @mtasurace:netent @mtasurace:netentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent(getnetent_r) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   *func = getnetent_r dup @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
++@c
++@c getnetent_r @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent_r(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   setup(nss_networks_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:servent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *sfct.f @mtasurace:netent @ascuplugin
++@c  libc_lock_unlock dup @aculock
+ This function returns the next entry in the networks database.  It
+ returns a null pointer if there are no more entries.
+ @end deftypefun
+@@ -3192,5 +3757,14 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void endnetent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endnetent @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  nss_endent(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   setup(nss_networks_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:netent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock @aculock
+ This function closes the networks database.
+ @end deftypefun
+diff -urN glibc-2.17-c758a686/manual/startup.texi glibc-2.17-c758a686/manual/startup.texi
+--- glibc-2.17-c758a686/manual/startup.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/startup.texi	2014-09-12 16:10:06.042792724 -0400
+@@ -41,7 +41,7 @@
+ * Program Termination::         Telling the system you're done; return status
+ @end menu
+ 
+-@node Program Arguments
++@node Program Arguments, Environment Variables, , Program Basics
+ @section Program Arguments
+ @cindex program arguments
+ @cindex command line arguments
+@@ -220,7 +220,12 @@
+ available.
+ 
+ @comment stdlib.h
+-@deftypefun int getsubopt (char **@var{optionp}, const char* const *@var{tokens}, char **@var{valuep})
++@deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c getsubopt ok
++@c  strchrnul dup ok
++@c  memchr dup ok
++@c  strncmp dup ok
+ 
+ The @var{optionp} parameter must be a pointer to a variable containing
+ the address of the string to process.  When the function returns the
+@@ -258,7 +263,7 @@
+ @end smallexample
+ 
+ 
+-@node Environment Variables
++@node Environment Variables, Auxiliary Vector, Program Arguments, Program Basics
+ @section Environment Variables
+ 
+ @cindex environment variable
+@@ -322,6 +327,8 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun {char *} getenv (const char *@var{name})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}}
++@c Unguarded access to __environ.
+ This function returns a string that is the value of the environment
+ variable @var{name}.  You must not modify this string.  In some non-Unix
+ systems not using @theglibc{}, it might be overwritten by subsequent
+@@ -333,6 +340,8 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun {char *} secure_getenv (const char *@var{name})
++@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}}
++@c Calls getenv unless secure mode is enabled.
+ This function is similar to @code{getenv}, but it returns a null
+ pointer if the environment is untrusted.  This happens when the
+ program file has SUID or SGID bits set.  General-purpose libraries
+@@ -346,6 +355,13 @@
+ @comment stdlib.h
+ @comment SVID
+ @deftypefun int putenv (char *@var{string})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c putenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c  strchr dup ok
++@c  strndup dup @ascuheap @acsmem
++@c  add_to_environ dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c  free dup @ascuheap @acsmem
++@c  unsetenv dup @mtasuconst:@mtsenv @asulock @aculock
+ The @code{putenv} function adds or removes definitions from the environment.
+ If the @var{string} is of the form @samp{@var{name}=@var{value}}, the
+ definition is added to the environment.  Otherwise, the @var{string} is
+@@ -358,20 +374,37 @@
+ The difference to the @code{setenv} function is that the exact string
+ given as the parameter @var{string} is put into the environment.  If the
+ user should change the string after the @code{putenv} call this will
+-reflect in automatically in the environment.  This also requires that
+-@var{string} is no automatic variable which scope is left before the
++reflect automatically in the environment.  This also requires that
++@var{string} not be an automatic variable whose scope is left before the
+ variable is removed from the environment.  The same applies of course to
+ dynamically allocated variables which are freed later.
+ 
+-This function is part of the extended Unix interface.  Since it was also
+-available in old SVID libraries you should define either
+-@var{_XOPEN_SOURCE} or @var{_SVID_SOURCE} before including any header.
++This function is part of the extended Unix interface.  You should define
++@var{_XOPEN_SOURCE} before including any header.
+ @end deftypefun
+ 
+ 
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c setenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c  add_to_environ @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c   strlen dup ok
++@c   libc_lock_lock @asulock @aculock
++@c   strncmp dup ok
++@c   realloc dup @ascuheap @acsmem
++@c   libc_lock_unlock @aculock
++@c   malloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c   mempcpy dup ok
++@c   memcpy dup ok
++@c   KNOWN_VALUE ok
++@c    tfind(strcmp) [no @mtsrace guarded access]
++@c     strcmp dup ok
++@c   STORE_VALUE @ascuheap @acucorrupt @acsmem
++@c    tsearch(strcmp) @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt guarded access makes for mtsafe and @asulock]
++@c     strcmp dup ok
+ The @code{setenv} function can be used to add a new definition to the
+ environment.  The entry with the name @var{name} is replaced by the
+ value @samp{@var{name}=@var{value}}.  Please note that this is also true
+@@ -395,6 +428,13 @@
+ @comment stdlib.h
+ @comment BSD
+ @deftypefun int unsetenv (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c unsetenv @mtasuconst:@mtsenv @asulock @aculock
++@c  strchr dup ok
++@c  strlen dup ok
++@c  libc_lock_lock @asulock @aculock
++@c  strncmp dup ok
++@c  libc_lock_unlock @aculock
+ Using this function one can remove an entry completely from the
+ environment.  If the environment contains an entry with the key
+ @var{name} this whole entry is removed.  A call to this function is
+@@ -418,6 +458,11 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int clearenv (void)
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
++@c clearenv @mtasuconst:@mtsenv @ascuheap @asulock @aculock @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock @aculock
+ The @code{clearenv} function removes all entries from the environment.
+ Using @code{putenv} and @code{setenv} new entries can be added again
+ later.
+@@ -622,10 +667,13 @@
+ @subsection Definition of @code{getauxval}
+ @comment sys/auxv.h
+ @deftypefun {unsigned long int} getauxval (unsigned long int @var{type})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Reads from hwcap or iterates over constant auxv.
+ This function is used to inquire about the entries in the auxiliary
+ vector.  The @var{type} argument should be one of the @samp{AT_} symbols
+ defined in @file{elf.h}.  If a matching entry is found, the value is
+-returned; if the entry is not found, zero is returned.
++returned; if the entry is not found, zero is returned and @code{errno} is
++set to @code{ENOENT}.
+ @end deftypefun
+ 
+ For some platforms, the key @code{AT_HWCAP} is the easiest way to inquire
+@@ -677,6 +725,7 @@
+ @comment unistd.h
+ @comment ???
+ @deftypefun {long int} syscall (long int @var{sysno}, @dots{})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{syscall} performs a generic system call.
+ 
+@@ -782,6 +831,10 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun void exit (int @var{status})
++@safety{@prelim{}@mtunsafe{@mtasurace{:exit}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
++@c Access to the atexit/on_exit list, the libc_atexit hook and tls dtors
++@c is not guarded.  Streams must be flushed, and that triggers the usual
++@c AS and AC issues with streams.
+ The @code{exit} function tells the system that the program is done, which
+ causes it to terminate the process.
+ 
+@@ -898,6 +951,15 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun int atexit (void (*@var{function}) (void))
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
++@c atexit @ascuheap @asulock @aculock @acsmem
++@c  cxa_atexit @ascuheap @asulock @aculock @acsmem
++@c   __internal_atexit @ascuheap @asulock @aculock @acsmem
++@c    __new_exitfn @ascuheap @asulock @aculock @acsmem
++@c     __libc_lock_lock @asulock @aculock
++@c     calloc dup @ascuheap @acsmem
++@c     __libc_lock_unlock @aculock
++@c    atomic_write_barrier dup ok
+ The @code{atexit} function registers the function @var{function} to be
+ called at normal program termination.  The @var{function} is called with
+ no arguments.
+@@ -909,6 +971,10 @@
+ @comment stdlib.h
+ @comment SunOS
+ @deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
++@c on_exit @ascuheap @asulock @aculock @acsmem
++@c  new_exitfn dup @ascuheap @asulock @aculock @acsmem
++@c  atomic_write_barrier dup ok
+ This function is a somewhat more powerful variant of @code{atexit}.  It
+ accepts two arguments, a function @var{function} and an arbitrary
+ pointer @var{arg}.  At normal program termination, the @var{function} is
+@@ -940,6 +1006,10 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun void abort (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
++@c The implementation takes a recursive lock and attempts to support
++@c calls from signal handlers, but if we're in the middle of flushing or
++@c using streams, we may encounter them in inconsistent states.
+ The @code{abort} function causes abnormal program termination.  This
+ does not execute cleanup functions registered with @code{atexit} or
+ @code{on_exit}.
+@@ -967,6 +1037,9 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun void _exit (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall (exit_group or exit); calls __task_terminate on hurd,
++@c and abort in the generic posix implementation.
+ The @code{_exit} function is the primitive for causing a process to
+ terminate with status @var{status}.  Calling this function does not
+ execute cleanup functions registered with @code{atexit} or
+@@ -976,6 +1049,8 @@
+ @comment stdlib.h
+ @comment ISO
+ @deftypefun void _Exit (int @var{status})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Alias for _exit.
+ The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}.
+ The @w{ISO C} committee members were not sure whether the definitions of
+ @code{_exit} and @code{_Exit} were compatible so they have not used the
+diff -urN glibc-2.17-c758a686/manual/stdio.texi glibc-2.17-c758a686/manual/stdio.texi
+--- glibc-2.17-c758a686/manual/stdio.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/stdio.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -148,6 +148,8 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun {FILE *} fopen (const char *@var{filename}, const char *@var{opentype})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
++@c fopen may leak the list lock if cancelled within _IO_link_in.
+ The @code{fopen} function opens a stream for I/O to the file
+ @var{filename}, and returns a pointer to the stream.
+ 
+@@ -265,9 +267,10 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun {FILE *} fopen64 (const char *@var{filename}, const char *@var{opentype})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
+ This function is similar to @code{fopen} but the stream it returns a
+ pointer for is opened using @code{open64}.  Therefore this stream can be
+-used even on files larger then @math{2^31} bytes on 32 bit machines.
++used even on files larger than @math{2^31} bytes on 32 bit machines.
+ 
+ Please note that the return type is still @code{FILE *}.  There is no
+ special @code{FILE} type for the LFS interface.
+@@ -294,6 +297,16 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun {FILE *} freopen (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}}
++@c Like most I/O operations, this one is guarded by a recursive lock,
++@c released even upon cancellation, but cancellation may leak file
++@c descriptors and leave the stream in an inconsistent state (e.g.,
++@c still bound to the closed descriptor).  Also, if the stream is
++@c part-way through a significant update (say running freopen) when a
++@c signal handler calls freopen again on the same stream, the result is
++@c likely to be an inconsistent stream, and the possibility of closing
++@c twice file descriptor number that the stream used to use, the second
++@c time when it might have already been reused by another thread.
+ This function is like a combination of @code{fclose} and @code{fopen}.
+ It first closes the stream referred to by @var{stream}, ignoring any
+ errors that are detected in the process.  (Because errors are ignored,
+@@ -320,6 +333,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}}
+ This function is similar to @code{freopen}.  The only difference is that
+ on 32 bit machine the stream returned is able to read beyond the
+ @math{2^31} bytes limits imposed by the normal interface.  It should be
+@@ -341,6 +355,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun int __freadable (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{__freadable} function determines whether the stream
+ @var{stream} was opened to allow reading.  In this case the return value
+ is nonzero.  For write-only streams the function returns zero.
+@@ -351,6 +366,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun int __fwritable (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{__fwritable} function determines whether the stream
+ @var{stream} was opened to allow writing.  In this case the return value
+ is nonzero.  For read-only streams the function returns zero.
+@@ -364,6 +380,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun int __freading (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{__freading} function determines whether the stream
+ @var{stream} was last read from or whether it is opened read-only.  In
+ this case the return value is nonzero, otherwise it is zero.
+@@ -377,6 +394,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun int __fwriting (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{__fwriting} function determines whether the stream
+ @var{stream} was last written to or whether it is opened write-only.  In
+ this case the return value is nonzero, otherwise it is zero.
+@@ -396,6 +414,21 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fclose (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c After fclose, it is undefined behavior to use the stream it points
++@c to.  Therefore, one must only call fclose when the stream is
++@c otherwise unused.  Concurrent uses started before will complete
++@c successfully because of the lock, which makes it MT-Safe.  Calling it
++@c from a signal handler is perfectly safe if the stream is known to be
++@c no longer used, which is a precondition for fclose to be safe in the
++@c first place; since this is no further requirement, fclose is safe for
++@c use in async signals too.  After calling fclose, you can no longer
++@c use the stream, not even to fclose it again, so its memory and file
++@c descriptor may leak if fclose is canceled before @c releasing them.
++@c That the stream must be unused and it becomes unused after the call
++@c is what would enable fclose to be AS- and AC-Safe while freopen
++@c isn't.  However, because of the possibility of leaving __gconv_lock
++@c taken upon cancellation, AC-Safety is lost.
+ This function causes @var{stream} to be closed and the connection to
+ the corresponding file to be broken.  Any buffered output is written
+ and any buffered input is discarded.  The @code{fclose} function returns
+@@ -418,6 +451,12 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int fcloseall (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:streams}}@asunsafe{}@acsafe{}}
++@c Like fclose, using any previously-opened streams after fcloseall is
++@c undefined.  However, the implementation of fcloseall isn't equivalent
++@c to calling fclose for all streams: it just flushes and unbuffers all
++@c streams, without any locking.  It's the flushing without locking that
++@c makes it unsafe.
+ This function causes all open streams of the process to be closed and
+ the connection to corresponding files to be broken.  All buffered data
+ is written and any buffered input is discarded.  The @code{fcloseall}
+@@ -474,6 +513,9 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun void flockfile (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
++@c There's no way to tell whether the lock was acquired before or after
++@c cancellation so as to unlock only when appropriate.
+ The @code{flockfile} function acquires the internal locking object
+ associated with the stream @var{stream}.  This ensures that no other
+ thread can explicitly through @code{flockfile}/@code{ftrylockfile} or
+@@ -485,6 +527,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int ftrylockfile (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+ The @code{ftrylockfile} function tries to acquire the internal locking
+ object associated with the stream @var{stream} just like
+ @code{flockfile}.  But unlike @code{flockfile} this function does not
+@@ -496,8 +539,9 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun void funlockfile (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+ The @code{funlockfile} function releases the internal locking object of
+-the stream @var{stream}. The stream must have been locked before by a
++the stream @var{stream}.  The stream must have been locked before by a
+ call to @code{flockfile} or a successful call of @code{ftrylockfile}.
+ The implicit locking performed by the stream operations do not count.
+ The @code{funlockfile} function does not return an error status and the
+@@ -621,6 +665,15 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun int __fsetlocking (FILE *@var{stream}, int @var{type})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asulock{}}@acsafe{}}
++@c Changing the implicit-locking status of a stream while it's in use by
++@c another thread may cause a lock to be implicitly acquired and not
++@c released, or vice-versa.  This function should probably hold the lock
++@c while changing this setting, to make sure we don't change it while
++@c there are any concurrent uses.  Meanwhile, callers should acquire the
++@c lock themselves to be safe, and even concurrent uses with external
++@c locking will be fine, as long as functions that require external
++@c locking are not called without holding locks.
+ 
+ The @code{__fsetlocking} function can be used to select whether the
+ stream operations will implicitly acquire the locking object of the
+@@ -725,6 +778,10 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int fwide (FILE *@var{stream}, int @var{mode})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{}}}
++@c Querying is always safe, but changing the stream when it's in use
++@c upthread may be problematic.  Like most lock-acquiring functions,
++@c this one may leak the lock if canceled.
+ 
+ The @code{fwide} function can be used to set and query the state of the
+ orientation of the stream @var{stream}.  If the @var{mode} parameter has
+@@ -811,6 +868,16 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fputc (int @var{c}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
++@c If the stream is in use when interrupted by a signal, the recursive
++@c lock won't help ensure the stream is consistent; indeed, if fputc
++@c gets a signal precisely before the post-incremented _IO_write_ptr
++@c value is stored, we may overwrite the interrupted write.  Conversely,
++@c depending on compiler optimizations, the incremented _IO_write_ptr
++@c may be stored before the character is stored in the buffer,
++@c corrupting the stream if async cancel hits between the two stores.
++@c There may be other reasons for AS- and AC-unsafety in the overflow
++@c cases.
+ The @code{fputc} function converts the character @var{c} to type
+ @code{unsigned char}, and writes it to the stream @var{stream}.
+ @code{EOF} is returned if a write error occurs; otherwise the
+@@ -820,6 +887,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t fputwc (wchar_t @var{wc}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ The @code{fputwc} function writes the wide character @var{wc} to the
+ stream @var{stream}.  @code{WEOF} is returned if a write error occurs;
+ otherwise the character @var{wc} is returned.
+@@ -828,13 +896,18 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int fputc_unlocked (int @var{c}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
++@c The unlocked functions can't possibly satisfy the MT-Safety
++@c requirements on their own, because they require external locking for
++@c safety.
+ The @code{fputc_unlocked} function is equivalent to the @code{fputc}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+ 
+ @comment wchar.h
+ @comment POSIX
+-@deftypefun wint_t fputwc_unlocked (wint_t @var{wc}, FILE *@var{stream})
++@deftypefun wint_t fputwc_unlocked (wchar_t @var{wc}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fputwc_unlocked} function is equivalent to the @code{fputwc}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -844,6 +917,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int putc (int @var{c}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ This is just like @code{fputc}, except that most systems implement it as
+ a macro, making it faster.  One consequence is that it may evaluate the
+ @var{stream} argument more than once, which is an exception to the
+@@ -854,6 +928,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ This is just like @code{fputwc}, except that it can be implement as
+ a macro, making it faster.  One consequence is that it may evaluate the
+ @var{stream} argument more than once, which is an exception to the
+@@ -864,6 +939,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{putc_unlocked} function is equivalent to the @code{putc}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+@@ -871,6 +947,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun wint_t putwc_unlocked (wchar_t @var{wc}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{putwc_unlocked} function is equivalent to the @code{putwc}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -880,6 +957,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int putchar (int @var{c})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ The @code{putchar} function is equivalent to @code{putc} with
+ @code{stdout} as the value of the @var{stream} argument.
+ @end deftypefun
+@@ -887,6 +965,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t putwchar (wchar_t @var{wc})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ The @code{putwchar} function is equivalent to @code{putwc} with
+ @code{stdout} as the value of the @var{stream} argument.
+ @end deftypefun
+@@ -894,6 +973,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int putchar_unlocked (int @var{c})
++@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{putchar_unlocked} function is equivalent to the @code{putchar}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+@@ -901,6 +981,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun wint_t putwchar_unlocked (wchar_t @var{wc})
++@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{putwchar_unlocked} function is equivalent to the @code{putwchar}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -910,6 +991,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fputs (const char *@var{s}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ The function @code{fputs} writes the string @var{s} to the stream
+ @var{stream}.  The terminating null character is not written.
+ This function does @emph{not} add a newline character, either.
+@@ -933,6 +1015,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int fputws (const wchar_t *@var{ws}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
+ The function @code{fputws} writes the wide character string @var{ws} to
+ the stream @var{stream}.  The terminating null character is not written.
+ This function does @emph{not} add a newline character, either.  It
+@@ -945,6 +1028,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int fputs_unlocked (const char *@var{s}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fputs_unlocked} function is equivalent to the @code{fputs}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -954,6 +1038,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun int fputws_unlocked (const wchar_t *@var{ws}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fputws_unlocked} function is equivalent to the @code{fputws}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -963,6 +1048,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int puts (const char *@var{s})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{puts} function writes the string @var{s} to the stream
+ @code{stdout} followed by a newline.  The terminating null character of
+ the string is not written.  (Note that @code{fputs} does @emph{not}
+@@ -982,6 +1068,7 @@
+ @comment stdio.h
+ @comment SVID
+ @deftypefun int putw (int @var{w}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function writes the word @var{w} (that is, an @code{int}) to
+ @var{stream}.  It is provided for compatibility with SVID, but we
+ recommend you use @code{fwrite} instead (@pxref{Block Input/Output}).
+@@ -1014,6 +1101,11 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fgetc (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
++@c Same caveats as fputc, but instead of losing a write in case of async
++@c signals, we may read the same character more than once, and the
++@c stream may be left in odd states due to cancellation in the underflow
++@c cases.
+ This function reads the next character as an @code{unsigned char} from
+ the stream @var{stream} and returns its value, converted to an
+ @code{int}.  If an end-of-file condition or read error occurs,
+@@ -1023,6 +1115,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t fgetwc (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function reads the next wide character from the stream @var{stream}
+ and returns its value.  If an end-of-file condition or read error
+ occurs, @code{WEOF} is returned instead.
+@@ -1031,6 +1124,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int fgetc_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fgetc_unlocked} function is equivalent to the @code{fgetc}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+@@ -1038,6 +1132,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun wint_t fgetwc_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fgetwc_unlocked} function is equivalent to the @code{fgetwc}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1047,6 +1142,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int getc (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This is just like @code{fgetc}, except that it is permissible (and
+ typical) for it to be implemented as a macro that evaluates the
+ @var{stream} argument more than once.  @code{getc} is often highly
+@@ -1057,6 +1153,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t getwc (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This is just like @code{fgetwc}, except that it is permissible for it to
+ be implemented as a macro that evaluates the @var{stream} argument more
+ than once.  @code{getwc} can be highly optimized, so it is usually the
+@@ -1066,6 +1163,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int getc_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{getc_unlocked} function is equivalent to the @code{getc}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+@@ -1073,6 +1171,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun wint_t getwc_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{getwc_unlocked} function is equivalent to the @code{getwc}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1082,6 +1181,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int getchar (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{getchar} function is equivalent to @code{getc} with @code{stdin}
+ as the value of the @var{stream} argument.
+ @end deftypefun
+@@ -1089,6 +1189,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t getwchar (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{getwchar} function is equivalent to @code{getwc} with @code{stdin}
+ as the value of the @var{stream} argument.
+ @end deftypefun
+@@ -1096,6 +1197,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int getchar_unlocked (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{getchar_unlocked} function is equivalent to the @code{getchar}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+@@ -1103,6 +1205,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun wint_t getwchar_unlocked (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{getwchar_unlocked} function is equivalent to the @code{getwchar}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1145,6 +1248,7 @@
+ @comment stdio.h
+ @comment SVID
+ @deftypefun int getw (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function reads a word (that is, an @code{int}) from @var{stream}.
+ It's provided for compatibility with SVID.  We recommend you use
+ @code{fread} instead (@pxref{Block Input/Output}).  Unlike @code{getc},
+@@ -1173,6 +1277,12 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun ssize_t getline (char **@var{lineptr}, size_t *@var{n}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
++@c Besides the usual possibility of getting an inconsistent stream in a
++@c signal handler or leaving it inconsistent in case of cancellation,
++@c the possibility of leaving a dangling pointer upon cancellation
++@c between reallocing the buffer at *lineptr and updating the pointer
++@c brings about another case of @acucorrupt.
+ This function reads an entire line from @var{stream}, storing the text
+ (including the newline and a terminating null character) in a buffer
+ and storing the buffer address in @code{*@var{lineptr}}.
+@@ -1188,7 +1298,8 @@
+ 
+ If you set @code{*@var{lineptr}} to a null pointer, and @code{*@var{n}}
+ to zero, before the call, then @code{getline} allocates the initial
+-buffer for you by calling @code{malloc}.
++buffer for you by calling @code{malloc}.  This buffer remains allocated
++even if @code{getline} encounters errors and is unable to read any bytes.
+ 
+ In either case, when @code{getline} returns,  @code{*@var{lineptr}} is
+ a @code{char *} which points to the text of the line.
+@@ -1208,6 +1319,8 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun ssize_t getdelim (char **@var{lineptr}, size_t *@var{n}, int @var{delimiter}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
++@c See the getline @acucorrupt note.
+ This function is like @code{getline} except that the character which
+ tells it to stop reading is not necessarily newline.  The argument
+ @var{delimiter} specifies the delimiter character; @code{getdelim} keeps
+@@ -1232,6 +1345,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun {char *} fgets (char *@var{s}, int @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{fgets} function reads characters from the stream @var{stream}
+ up to and including a newline character and stores them in the string
+ @var{s}, adding a null character to mark the end of the string.  You
+@@ -1255,6 +1369,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} fgetws (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{fgetws} function reads wide characters from the stream
+ @var{stream} up to and including a newline character and stores them in
+ the string @var{ws}, adding a null wide character to mark the end of the
+@@ -1280,6 +1395,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun {char *} fgets_unlocked (char *@var{s}, int @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fgets_unlocked} function is equivalent to the @code{fgets}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1289,6 +1405,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {wchar_t *} fgetws_unlocked (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fgetws_unlocked} function is equivalent to the @code{fgetws}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1298,6 +1415,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefn {Deprecated function} {char *} gets (char *@var{s})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The function @code{gets} reads characters from the stream @code{stdin}
+ up to the next newline character, and stores them in the string @var{s}.
+ The newline character is discarded (note that this differs from the
+@@ -1388,6 +1506,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int ungetc (int @var{c}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{ungetc} function pushes back the character @var{c} onto the
+ input stream @var{stream}.  So the next input from @var{stream} will
+ read @var{c} before anything else.
+@@ -1425,6 +1544,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun wint_t ungetwc (wint_t @var{wc}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{ungetwc} function behaves just like @code{ungetc} just that it
+ pushes back a wide character.
+ @end deftypefun
+@@ -1483,6 +1603,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun size_t fread (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function reads up to @var{count} objects of size @var{size} into
+ the array @var{data}, from the stream @var{stream}.  It returns the
+ number of objects actually read, which might be less than @var{count} if
+@@ -1498,6 +1619,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun size_t fread_unlocked (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fread_unlocked} function is equivalent to the @code{fread}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1507,6 +1629,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun size_t fwrite (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function writes up to @var{count} objects of size @var{size} from
+ the array @var{data}, to the stream @var{stream}.  The return value is
+ normally @var{count}, if the call succeeds.  Any other value indicates
+@@ -1516,6 +1639,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun size_t fwrite_unlocked (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fwrite_unlocked} function is equivalent to the @code{fwrite}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -1670,7 +1794,7 @@
+ 
+ @defvr Macro NL_ARGMAX
+ The value of @code{NL_ARGMAX} is the maximum value allowed for the
+-specification of an positional parameter in a @code{printf} call.  The
++specification of a positional parameter in a @code{printf} call.  The
+ actual value in effect at runtime can be retrieved by using
+ @code{sysconf} using the @code{_SC_NL_ARGMAX} parameter @pxref{Sysconf
+ Definition}.
+@@ -2257,6 +2381,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int printf (const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ The @code{printf} function prints the optional arguments under the
+ control of the template string @var{template} to the stream
+ @code{stdout}.  It returns the number of characters printed, or a
+@@ -2266,6 +2391,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int wprintf (const wchar_t *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ The @code{wprintf} function prints the optional arguments under the
+ control of the wide template string @var{template} to the stream
+ @code{stdout}.  It returns the number of wide characters printed, or a
+@@ -2275,6 +2401,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fprintf (FILE *@var{stream}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is just like @code{printf}, except that the output is
+ written to the stream @var{stream} instead of @code{stdout}.
+ @end deftypefun
+@@ -2282,6 +2409,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int fwprintf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is just like @code{wprintf}, except that the output is
+ written to the stream @var{stream} instead of @code{stdout}.
+ @end deftypefun
+@@ -2289,6 +2417,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int sprintf (char *@var{s}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is like @code{printf}, except that the output is stored in the character
+ array @var{s} instead of written to a stream.  A null character is written
+ to mark the end of the string.
+@@ -2313,6 +2442,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun int swprintf (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is like @code{wprintf}, except that the output is stored in the
+ wide character array @var{ws} instead of written to a stream.  A null
+ wide character is written to mark the end of the string.  The @var{size}
+@@ -2330,13 +2460,14 @@
+ parameters.  @code{swprintf} in fact corresponds to the @code{snprintf}
+ function.  Since the @code{sprintf} function can be dangerous and should
+ be avoided the @w{ISO C} committee refused to make the same mistake
+-again and decided to not define an function exactly corresponding to
++again and decided to not define a function exactly corresponding to
+ @code{sprintf}.
+ @end deftypefun
+ 
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int snprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{snprintf} function is similar to @code{sprintf}, except that
+ the @var{size} argument specifies the maximum number of characters to
+ produce.  The trailing null character is counted towards this limit, so
+@@ -2407,6 +2538,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int asprintf (char **@var{ptr}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function is similar to @code{sprintf}, except that it dynamically
+ allocates a string (as with @code{malloc}; @pxref{Unconstrained
+ Allocation}) to hold the output, instead of putting the output in a
+@@ -2416,7 +2548,7 @@
+ location.
+ 
+ The return value is the number of characters allocated for the buffer, or
+-less than zero if an error occurred. Usually this means that the buffer
++less than zero if an error occurred.  Usually this means that the buffer
+ could not be allocated.
+ 
+ Here is how to use @code{asprintf} to get the same result as the
+@@ -2439,6 +2571,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int obstack_printf (struct obstack *@var{obstack}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
+ This function is similar to @code{asprintf}, except that it uses the
+ obstack @var{obstack} to allocate the space.  @xref{Obstacks}.
+ 
+@@ -2509,6 +2642,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int vprintf (const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is similar to @code{printf} except that, instead of taking
+ a variable number of arguments directly, it takes an argument list
+ pointer @var{ap}.
+@@ -2517,6 +2651,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int vwprintf (const wchar_t *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is similar to @code{wprintf} except that, instead of taking
+ a variable number of arguments directly, it takes an argument list
+ pointer @var{ap}.
+@@ -2525,6 +2660,48 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int vfprintf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
++@c Although vfprintf sets up a cleanup region to release the lock on the
++@c output stream, it doesn't use it to release args_value or string in
++@c case of cancellation.  This doesn't make it unsafe, but cancelling it
++@c may leak memory.  The unguarded use of __printf_function_table is
++@c also of concern for all callers.
++@c _itoa ok
++@c   _udiv_qrnnd_preinv ok
++@c group_number ok
++@c _i18n_number_rewrite
++@c   __wctrans ok
++@c   __towctrans @mtslocale
++@c   __wcrtomb ok? dup below
++@c   outdigit_value ok
++@c   outdigitwc_value ok
++@c outchar ok
++@c outstring ok
++@c PAD ok
++@c __printf_fp @mtslocale @ascuheap @acsmem
++@c __printf_fphex @mtslocale
++@c __readonly_area
++@c   [GNU/Linux] fopen, strtoul, free
++@c __strerror_r ok if no translation, check otherwise
++@c __btowc ? gconv-modules
++@c __wcrtomb ok (not using internal state) gconv-modules
++@c ARGCHECK
++@c UNBUFFERED_P (tested before taking the stream lock)
++@c buffered_vfprintf ok
++@c __find_spec(wc|mb)
++@c read_int
++@c __libc_use_alloca
++@c process_arg
++@c process_string_arg
++@c extend_alloca
++@c __parse_one_spec(wc|mb)
++@c *__printf_arginfo_table unguarded
++@c __printf_va_arg_table-> unguarded
++@c *__printf_function_table unguarded
++@c done_add
++@c printf_unknown
++@c   outchar
++@c   _itoa_word
+ This is the equivalent of @code{fprintf} with the variable argument list
+ specified directly as for @code{vprintf}.
+ @end deftypefun
+@@ -2532,6 +2709,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int vfwprintf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This is the equivalent of @code{fwprintf} with the variable argument list
+ specified directly as for @code{vwprintf}.
+ @end deftypefun
+@@ -2539,6 +2717,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int vsprintf (char *@var{s}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is the equivalent of @code{sprintf} with the variable argument list
+ specified directly as for @code{vprintf}.
+ @end deftypefun
+@@ -2546,6 +2725,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun int vswprintf (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is the equivalent of @code{swprintf} with the variable argument list
+ specified directly as for @code{vwprintf}.
+ @end deftypefun
+@@ -2553,6 +2733,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int vsnprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is the equivalent of @code{snprintf} with the variable argument list
+ specified directly as for @code{vprintf}.
+ @end deftypefun
+@@ -2560,6 +2741,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int vasprintf (char **@var{ptr}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{vasprintf} function is the equivalent of @code{asprintf} with the
+ variable argument list specified directly as for @code{vprintf}.
+ @end deftypefun
+@@ -2567,6 +2749,10 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int obstack_vprintf (struct obstack *@var{obstack}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c The obstack is not guarded by mutexes, it might be at an inconsistent
++@c state within a signal handler, and it could be left at an
++@c inconsistent state in case of cancellation.
+ The @code{obstack_vprintf} function is the equivalent of
+ @code{obstack_printf} with the variable argument list specified directly
+ as for @code{vprintf}.@refill
+@@ -2639,6 +2825,7 @@
+ @comment printf.h
+ @comment GNU
+ @deftypefun size_t parse_printf_format (const char *@var{template}, size_t @var{n}, int *@var{argtypes})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function returns information about the number and types of
+ arguments expected by the @code{printf} template string @var{template}.
+ The information is stored in the array @var{argtypes}; each element of
+@@ -2879,6 +3066,12 @@
+ @comment printf.h
+ @comment GNU
+ @deftypefun int register_printf_function (int @var{spec}, printf_function @var{handler-function}, printf_arginfo_function @var{arginfo-function})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:printfext}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
++@c This function is guarded by the global non-recursive libc lock, but
++@c users of the variables it sets aren't, and those should be MT-Safe,
++@c so we're ruling out the use of this extension with threads.  Calling
++@c it from a signal handler may self-deadlock, and cancellation may
++@c leave the lock held, besides leaking allocated memory.
+ This function defines the conversion specifier character @var{spec}.
+ Thus, if @var{spec} is @code{'Y'}, it defines the conversion @samp{%Y}.
+ You can redefine the built-in conversions like @samp{%s}, but flag
+@@ -3125,6 +3318,12 @@
+ @comment printf.h
+ @comment GNU
+ @deftypefun int printf_size (FILE *@var{fp}, const struct printf_info *@var{info}, const void *const *@var{args})
++@safety{@prelim{}@mtsafe{@mtsrace{:fp} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @acucorrupt{}}}
++@c This is meant to be called by vfprintf, that should hold the lock on
++@c the stream, but if this function is called directly, output will be
++@c racy, besides the uses of the global locale object while other
++@c threads may be changing it and the possbility of leaving the stream
++@c object in an inconsistent state in case of cancellation.
+ Print a given floating point number as for the format @code{%f} except
+ that there is a postfix character indicating the divisor for the
+ number to make this less than 1000.  There are two possible divisors:
+@@ -3183,6 +3382,7 @@
+ @comment printf.h
+ @comment GNU
+ @deftypefun int printf_size_info (const struct printf_info *@var{info}, size_t @var{n}, int *@var{argtypes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function will return in @var{argtypes} the information about the
+ used parameters in the way the @code{vfprintf} implementation expects
+ it.  The format always takes one argument.
+@@ -3672,7 +3872,7 @@
+ To read in characters that belong to an arbitrary set of your choice,
+ use the @samp{%[} conversion.  You specify the set between the @samp{[}
+ character and a following @samp{]} character, using the same syntax used
+-in regular expressions.  As special cases:
++in regular expressions for explicit sets of characters.  As special cases:
+ 
+ @itemize @bullet
+ @item
+@@ -3692,6 +3892,10 @@
+ The @samp{%[} conversion does not skip over initial whitespace
+ characters.
+ 
++Note that the @dfn{character class} syntax available in character sets
++that appear inside regular expressions (such as @samp{[:alpha:]}) is
++@emph{not} available in the @samp{%[} conversion.
++
+ Here are some examples of @samp{%[} conversions and what they mean:
+ 
+ @table @samp
+@@ -3799,6 +4003,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int scanf (const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ The @code{scanf} function reads formatted input from the stream
+ @code{stdin} under the control of the template string @var{template}.
+ The optional arguments are pointers to the places which receive the
+@@ -3813,6 +4018,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int wscanf (const wchar_t *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ The @code{wscanf} function reads formatted input from the stream
+ @code{stdin} under the control of the template string @var{template}.
+ The optional arguments are pointers to the places which receive the
+@@ -3827,6 +4033,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fscanf (FILE *@var{stream}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is just like @code{scanf}, except that the input is read
+ from the stream @var{stream} instead of @code{stdin}.
+ @end deftypefun
+@@ -3834,6 +4041,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int fwscanf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is just like @code{wscanf}, except that the input is read
+ from the stream @var{stream} instead of @code{stdin}.
+ @end deftypefun
+@@ -3841,6 +4049,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int sscanf (const char *@var{s}, const char *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is like @code{scanf}, except that the characters are taken from the
+ null-terminated string @var{s} instead of from a stream.  Reaching the
+ end of the string is treated as an end-of-file condition.
+@@ -3853,7 +4062,8 @@
+ 
+ @comment wchar.h
+ @comment ISO
+-@deftypefun int swscanf (const wchar_t *@var{ws}, const char *@var{template}, @dots{})
++@deftypefun int swscanf (const wchar_t *@var{ws}, const wchar_t *@var{template}, @dots{})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is like @code{wscanf}, except that the characters are taken from the
+ null-terminated string @var{ws} instead of from a stream.  Reaching the
+ end of the string is treated as an end-of-file condition.
+@@ -3880,6 +4090,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int vscanf (const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is similar to @code{scanf}, but instead of taking
+ a variable number of arguments directly, it takes an argument list
+ pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
+@@ -3888,6 +4099,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int vwscanf (const wchar_t *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This function is similar to @code{wscanf}, but instead of taking
+ a variable number of arguments directly, it takes an argument list
+ pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
+@@ -3896,6 +4108,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int vfscanf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This is the equivalent of @code{fscanf} with the variable argument list
+ specified directly as for @code{vscanf}.
+ @end deftypefun
+@@ -3903,6 +4116,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int vfwscanf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
+ This is the equivalent of @code{fwscanf} with the variable argument list
+ specified directly as for @code{vwscanf}.
+ @end deftypefun
+@@ -3910,6 +4124,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int vsscanf (const char *@var{s}, const char *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is the equivalent of @code{sscanf} with the variable argument list
+ specified directly as for @code{vscanf}.
+ @end deftypefun
+@@ -3917,6 +4132,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int vswscanf (const wchar_t *@var{s}, const wchar_t *@var{template}, va_list @var{ap})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This is the equivalent of @code{swscanf} with the variable argument list
+ specified directly as for @code{vwscanf}.
+ @end deftypefun
+@@ -3966,6 +4182,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int feof (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+ The @code{feof} function returns nonzero if and only if the end-of-file
+ indicator for the stream @var{stream} is set.
+ 
+@@ -3975,6 +4192,9 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int feof_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c There isn't much of a thread unsafety risk in reading a flag word and
++@c testing a bit in it.
+ The @code{feof_unlocked} function is equivalent to the @code{feof}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -3986,6 +4206,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int ferror (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+ The @code{ferror} function returns nonzero if and only if the error
+ indicator for the stream @var{stream} is set, indicating that an error
+ has occurred on a previous operation on the stream.
+@@ -3996,6 +4217,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun int ferror_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{ferror_unlocked} function is equivalent to the @code{ferror}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -4023,6 +4245,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun void clearerr (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
+ This function clears the end-of-file and error indicators for the
+ stream @var{stream}.
+ 
+@@ -4033,6 +4256,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun void clearerr_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@assafe{}@acsafe{}}
+ The @code{clearerr_unlocked} function is equivalent to the @code{clearerr}
+ function except that it does not implicitly lock the stream.
+ 
+@@ -4146,6 +4370,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun {long int} ftell (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function returns the current file position of the stream
+ @var{stream}.
+ 
+@@ -4158,6 +4383,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun off_t ftello (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{ftello} function is similar to @code{ftell}, except that it
+ returns a value of type @code{off_t}.  Systems which support this type
+ use it to describe all file positions, unlike the POSIX specification
+@@ -4181,6 +4407,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun off64_t ftello64 (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function is similar to @code{ftello} with the only difference that
+ the return value is of type @code{off64_t}.  This also requires that the
+ stream @var{stream} was opened using either @code{fopen64},
+@@ -4196,6 +4423,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fseek (FILE *@var{stream}, long int @var{offset}, int @var{whence})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{fseek} function is used to change the file position of the
+ stream @var{stream}.  The value of @var{whence} must be one of the
+ constants @code{SEEK_SET}, @code{SEEK_CUR}, or @code{SEEK_END}, to
+@@ -4215,6 +4443,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun int fseeko (FILE *@var{stream}, off_t @var{offset}, int @var{whence})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function is similar to @code{fseek} but it corrects a problem with
+ @code{fseek} in a system with POSIX types.  Using a value of type
+ @code{long int} for the offset is not compatible with POSIX.
+@@ -4238,6 +4467,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun int fseeko64 (FILE *@var{stream}, off64_t @var{offset}, int @var{whence})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function is similar to @code{fseeko} with the only difference that
+ the @var{offset} parameter is of type @code{off64_t}.  This also
+ requires that the stream @var{stream} was opened using either
+@@ -4286,6 +4516,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun void rewind (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{rewind} function positions the stream @var{stream} at the
+ beginning of the file.  It is equivalent to calling @code{fseek} or
+ @code{fseeko} on the @var{stream} with an @var{offset} argument of
+@@ -4407,6 +4638,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fgetpos (FILE *@var{stream}, fpos_t *@var{position})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function stores the value of the file position indicator for the
+ stream @var{stream} in the @code{fpos_t} object pointed to by
+ @var{position}.  If successful, @code{fgetpos} returns zero; otherwise
+@@ -4421,6 +4653,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun int fgetpos64 (FILE *@var{stream}, fpos64_t *@var{position})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function is similar to @code{fgetpos} but the file position is
+ returned in a variable of type @code{fpos64_t} to which @var{position}
+ points.
+@@ -4433,6 +4666,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fsetpos (FILE *@var{stream}, const fpos_t *@var{position})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function sets the file position indicator for the stream @var{stream}
+ to the position @var{position}, which must have been set by a previous
+ call to @code{fgetpos} on the same stream.  If successful, @code{fsetpos}
+@@ -4449,6 +4683,7 @@
+ @comment stdio.h
+ @comment Unix98
+ @deftypefun int fsetpos64 (FILE *@var{stream}, const fpos64_t *@var{position})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function is similar to @code{fsetpos} but the file position used
+ for positioning is provided in a variable of type @code{fpos64_t} to
+ which @var{position} points.
+@@ -4560,6 +4795,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int fflush (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function causes any buffered output on @var{stream} to be delivered
+ to the file.  If @var{stream} is a null pointer, then
+ @code{fflush} causes buffered output on @emph{all} open output streams
+@@ -4572,6 +4808,7 @@
+ @comment stdio.h
+ @comment POSIX
+ @deftypefun int fflush_unlocked (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{fflush_unlocked} function is equivalent to the @code{fflush}
+ function except that it does not implicitly lock the stream.
+ @end deftypefun
+@@ -4588,6 +4825,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun void _flushlbf (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ The @code{_flushlbf} function flushes all line buffered streams
+ currently opened.
+ 
+@@ -4609,6 +4847,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun void __fpurge (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
+ The @code{__fpurge} function causes the buffer of the stream
+ @var{stream} to be emptied.  If the stream is currently in read mode all
+ input in the buffer is lost.  If the stream is in output mode the
+@@ -4633,6 +4872,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun int setvbuf (FILE *@var{stream}, char *@var{buf}, int @var{mode}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function is used to specify that the stream @var{stream} should
+ have the buffering mode @var{mode}, which can be either @code{_IOFBF}
+ (for full buffering), @code{_IOLBF} (for line buffering), or
+@@ -4710,6 +4950,7 @@
+ @comment stdio.h
+ @comment ISO
+ @deftypefun void setbuf (FILE *@var{stream}, char *@var{buf})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ If @var{buf} is a null pointer, the effect of this function is
+ equivalent to calling @code{setvbuf} with a @var{mode} argument of
+ @code{_IONBF}.  Otherwise, it is equivalent to calling @code{setvbuf}
+@@ -4723,6 +4964,7 @@
+ @comment stdio.h
+ @comment BSD
+ @deftypefun void setbuffer (FILE *@var{stream}, char *@var{buf}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ If @var{buf} is a null pointer, this function makes @var{stream} unbuffered.
+ Otherwise, it makes @var{stream} fully buffered using @var{buf} as the
+ buffer.  The @var{size} argument specifies the length of @var{buf}.
+@@ -4734,6 +4976,7 @@
+ @comment stdio.h
+ @comment BSD
+ @deftypefun void setlinebuf (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
+ This function makes @var{stream} be line buffered, and allocates the
+ buffer for you.
+ 
+@@ -4748,6 +4991,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun int __flbf (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{__flbf} function will return a nonzero value in case the
+ stream @var{stream} is line buffered.  Otherwise the return value is
+ zero.
+@@ -4761,6 +5005,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun size_t __fbufsize (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
+ The @code{__fbufsize} function return the size of the buffer in the
+ stream @var{stream}.  This value can be used to optimize the use of the
+ stream.
+@@ -4771,6 +5016,7 @@
+ @comment stdio_ext.h
+ @comment GNU
+ @deftypefun size_t __fpending (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
+ The @code{__fpending}
+ function returns the number of bytes currently in the output buffer.
+ For wide-oriented stream the measuring unit is wide characters.  This
+@@ -4818,6 +5064,10 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun {FILE *} fmemopen (void *@var{buf}, size_t @var{size}, const char *@var{opentype})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
++@c Unlike open_memstream, fmemopen does (indirectly) call _IO_link_in,
++@c bringing with it additional potential for async trouble with
++@c list_all_lock.
+ This function opens a stream that allows the access specified by the
+ @var{opentype} argument, that reads from or writes to the buffer specified
+ by the argument @var{buf}.  This array must be at least @var{size} bytes long.
+@@ -4870,6 +5120,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun {FILE *} open_memstream (char **@var{ptr}, size_t *@var{sizeloc})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function opens a stream for writing to a buffer.  The buffer is
+ allocated dynamically and grown as necessary, using @code{malloc}.
+ After you've closed the stream, this buffer is your responsibility to
+@@ -4985,6 +5236,7 @@
+ @comment stdio.h
+ @comment GNU
+ @deftypefun {FILE *} fopencookie (void *@var{cookie}, const char *@var{opentype}, cookie_io_functions_t @var{io-functions})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
+ This function actually creates the stream for communicating with the
+ @var{cookie} using the functions in the @var{io-functions} argument.
+ The @var{opentype} argument is interpreted as for @code{fopen};
+@@ -5053,26 +5305,26 @@
+ 
+ @comment stdio.h
+ @comment GNU
+-@deftp {Data Type} cookie_read_function
++@deftp {Data Type} cookie_read_function_t
+ This is the data type that the read function for a custom stream should have.
+ If you declare the function as shown above, this is the type it will have.
+ @end deftp
+ 
+ @comment stdio.h
+ @comment GNU
+-@deftp {Data Type} cookie_write_function
++@deftp {Data Type} cookie_write_function_t
+ The data type of the write function for a custom stream.
+ @end deftp
+ 
+ @comment stdio.h
+ @comment GNU
+-@deftp {Data Type} cookie_seek_function
++@deftp {Data Type} cookie_seek_function_t
+ The data type of the seek function for a custom stream.
+ @end deftp
+ 
+ @comment stdio.h
+ @comment GNU
+-@deftp {Data Type} cookie_close_function
++@deftp {Data Type} cookie_close_function_t
+ The data type of the close function for a custom stream.
+ @end deftp
+ 
+@@ -5166,6 +5418,7 @@
+ @comment fmtmsg.h
+ @comment XPG
+ @deftypefun int fmtmsg (long int @var{classification}, const char *@var{label}, int @var{severity}, const char *@var{text}, const char *@var{action}, const char *@var{tag})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acsafe{}}
+ Display a message described by its parameters on the device(s) specified
+ in the @var{classification} parameter.  The @var{label} parameter
+ identifies the source of the message.  The string should consist of two
+@@ -5306,6 +5559,7 @@
+ but this is toilsome.
+ 
+ @deftypefun int addseverity (int @var{severity}, const char *@var{string})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
+ This function allows the introduction of new severity classes which can be
+ addressed by the @var{severity} parameter of the @code{fmtmsg} function.
+ The @var{severity} parameter of @code{addseverity} must match the value
+diff -urN glibc-2.17-c758a686/manual/string.texi glibc-2.17-c758a686/manual/string.texi
+--- glibc-2.17-c758a686/manual/string.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/string.texi	2014-09-12 16:10:06.045792717 -0400
+@@ -200,7 +200,7 @@
+ @cindex parameter promotion
+ Some of the memory and string functions take single characters as
+ arguments.  Since a value of type @code{char} is automatically promoted
+-into an value of type @code{int} when used as a parameter, the functions
++into a value of type @code{int} when used as a parameter, the functions
+ are declared with @code{int} as the type of the parameter in question.
+ In case of the wide character function the situation is similarly: the
+ parameter type for a single wide character is @code{wint_t} and not
+@@ -219,6 +219,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun size_t strlen (const char *@var{s})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strlen} function returns the length of the null-terminated
+ string @var{s} in bytes.  (In other words, it returns the offset of the
+ terminating null character within the array.)
+@@ -285,6 +286,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t wcslen (const wchar_t *@var{ws})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wcslen} function is the wide character equivalent to
+ @code{strlen}.  The return value is the number of wide characters in the
+ wide character string pointed to by @var{ws} (this is also the offset of
+@@ -300,6 +302,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun size_t strnlen (const char *@var{s}, size_t @var{maxlen})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strnlen} function returns the length of the string @var{s} in
+ bytes if this length is smaller than @var{maxlen} bytes.  Otherwise it
+ returns @var{maxlen}.  Therefore this function is equivalent to
+@@ -322,6 +325,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun size_t wcsnlen (const wchar_t *@var{ws}, size_t @var{maxlen})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{wcsnlen} is the wide character equivalent to @code{strnlen}.  The
+ @var{maxlen} parameter specifies the maximum number of wide characters.
+ 
+@@ -367,6 +371,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {void *} memcpy (void *restrict @var{to}, const void *restrict @var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{memcpy} function copies @var{size} bytes from the object
+ beginning at @var{from} into the object beginning at @var{to}.  The
+ behavior of this function is undefined if the two arrays @var{to} and
+@@ -388,6 +393,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wmemcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wmemcpy} function copies @var{size} wide characters from the object
+ beginning at @var{wfrom} into the object beginning at @var{wto}.  The
+ behavior of this function is undefined if the two arrays @var{wto} and
+@@ -413,6 +419,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {void *} mempcpy (void *restrict @var{to}, const void *restrict @var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{mempcpy} function is nearly identical to the @code{memcpy}
+ function.  It copies @var{size} bytes from the object beginning at
+ @code{from} into the object pointed to by @var{to}.  But instead of
+@@ -440,6 +447,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {wchar_t *} wmempcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wmempcpy} function is nearly identical to the @code{wmemcpy}
+ function.  It copies @var{size} wide characters from the object
+ beginning at @code{wfrom} into the object pointed to by @var{wto}.  But
+@@ -468,6 +476,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {void *} memmove (void *@var{to}, const void *@var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{memmove} copies the @var{size} bytes at @var{from} into the
+ @var{size} bytes at @var{to}, even if those two blocks of space
+ overlap.  In the case of overlap, @code{memmove} is careful to copy the
+@@ -479,7 +488,8 @@
+ 
+ @comment wchar.h
+ @comment ISO
+-@deftypefun {wchar_t *} wmemmove (wchar *@var{wto}, const wchar_t *@var{wfrom}, size_t @var{size})
++@deftypefun {wchar_t *} wmemmove (wchar_t *@var{wto}, const wchar_t *@var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{wmemmove} copies the @var{size} wide characters at @var{wfrom}
+ into the @var{size} wide characters at @var{wto}, even if those two
+ blocks of space overlap.  In the case of overlap, @code{memmove} is
+@@ -507,6 +517,7 @@
+ @comment string.h
+ @comment SVID
+ @deftypefun {void *} memccpy (void *restrict @var{to}, const void *restrict @var{from}, int @var{c}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function copies no more than @var{size} bytes from @var{from} to
+ @var{to}, stopping if a byte matching @var{c} is found.  The return
+ value is a pointer into @var{to} one byte past where @var{c} was copied,
+@@ -517,6 +528,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {void *} memset (void *@var{block}, int @var{c}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function copies the value of @var{c} (converted to an
+ @code{unsigned char}) into each of the first @var{size} bytes of the
+ object beginning at @var{block}.  It returns the value of @var{block}.
+@@ -525,6 +537,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wmemset (wchar_t *@var{block}, wchar_t @var{wc}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function copies the value of @var{wc} into each of the first
+ @var{size} wide characters of the object beginning at @var{block}.  It
+ returns the value of @var{block}.
+@@ -533,6 +546,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strcpy (char *restrict @var{to}, const char *restrict @var{from})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This copies characters from the string @var{from} (up to and including
+ the terminating null character) into the string @var{to}.  Like
+ @code{memcpy}, this function has undefined results if the strings
+@@ -542,6 +556,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcscpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This copies wide characters from the string @var{wfrom} (up to and
+ including the terminating null wide character) into the string
+ @var{wto}.  Like @code{wmemcpy}, this function has undefined results if
+@@ -551,6 +566,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strncpy (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{strcpy} but always copies exactly
+ @var{size} characters into @var{to}.
+ 
+@@ -576,6 +592,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcsncpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{wcscpy} but always copies exactly
+ @var{size} wide characters into @var{wto}.
+ 
+@@ -602,6 +619,7 @@
+ @comment string.h
+ @comment SVID
+ @deftypefun {char *} strdup (const char *@var{s})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function copies the null-terminated string @var{s} into a newly
+ allocated string.  The string is allocated using @code{malloc}; see
+ @ref{Unconstrained Allocation}.  If @code{malloc} cannot allocate space
+@@ -612,6 +630,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {wchar_t *} wcsdup (const wchar_t *@var{ws})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function copies the null-terminated wide character string @var{ws}
+ into a newly allocated string.  The string is allocated using
+ @code{malloc}; see @ref{Unconstrained Allocation}.  If @code{malloc}
+@@ -625,6 +644,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} strndup (const char *@var{s}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ This function is similar to @code{strdup} but always copies at most
+ @var{size} characters into the newly allocated string.
+ 
+@@ -642,6 +662,7 @@
+ @comment string.h
+ @comment Unknown origin
+ @deftypefun {char *} stpcpy (char *restrict @var{to}, const char *restrict @var{from})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is like @code{strcpy}, except that it returns a pointer to
+ the end of the string @var{to} (that is, the address of the terminating
+ null character @code{to + strlen (from)}) rather than the beginning.
+@@ -664,6 +685,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {wchar_t *} wcpcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is like @code{wcscpy}, except that it returns a pointer to
+ the end of the string @var{wto} (that is, the address of the terminating
+ null character @code{wto + strlen (wfrom)}) rather than the beginning.
+@@ -679,10 +701,11 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} stpncpy (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{stpcpy} but copies always exactly
+ @var{size} characters into @var{to}.
+ 
+-If the length of @var{from} is more then @var{size}, then @code{stpncpy}
++If the length of @var{from} is more than @var{size}, then @code{stpncpy}
+ copies just the first @var{size} characters and returns a pointer to the
+ character directly following the one which was copied last.  Note that in
+ this case there is no null terminator written into @var{to}.
+@@ -704,10 +727,11 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {wchar_t *} wcpncpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{wcpcpy} but copies always exactly
+ @var{wsize} characters into @var{wto}.
+ 
+-If the length of @var{wfrom} is more then @var{size}, then
++If the length of @var{wfrom} is more than @var{size}, then
+ @code{wcpncpy} copies just the first @var{size} wide characters and
+ returns a pointer to the wide character directly following the last
+ non-null wide character which was copied last.  Note that in this case
+@@ -731,6 +755,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefn {Macro} {char *} strdupa (const char *@var{s})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This macro is similar to @code{strdup} but allocates the new string
+ using @code{alloca} instead of @code{malloc} (@pxref{Variable Size
+ Automatic}).  This means of course the returned string has the same
+@@ -757,6 +782,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefn {Macro} {char *} strndupa (const char *@var{s}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is similar to @code{strndup} but like @code{strdupa} it
+ allocates the new string using @code{alloca}
+ @pxref{Variable Size Automatic}.  The same advantages and limitations
+@@ -772,6 +798,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strcat (char *restrict @var{to}, const char *restrict @var{from})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strcat} function is similar to @code{strcpy}, except that the
+ characters from @var{from} are concatenated or appended to the end of
+ @var{to}, instead of overwriting it.  That is, the first character from
+@@ -794,6 +821,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcscat (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wcscat} function is similar to @code{wcscpy}, except that the
+ characters from @var{wfrom} are concatenated or appended to the end of
+ @var{wto}, instead of overwriting it.  That is, the first character from
+@@ -942,6 +970,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strncat (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is like @code{strcat} except that not more than @var{size}
+ characters from @var{from} are appended to the end of @var{to}.  A
+ single null character is also always appended to @var{to}, so the total
+@@ -955,8 +984,8 @@
+ char *
+ strncat (char *to, const char *from, size_t size)
+ @{
+-  to[strlen (to) + size] = '\0';
+-  strncpy (to + strlen (to), from, size);
++  memcpy (to + strlen (to), from, strnlen (from, size));
++  to[strlen (to) + strnlen (from, size)] = '\0';
+   return to;
+ @}
+ @end group
+@@ -968,6 +997,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcsncat (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is like @code{wcscat} except that not more than @var{size}
+ characters from @var{from} are appended to the end of @var{to}.  A
+ single null character is also always appended to @var{to}, so the total
+@@ -982,8 +1012,8 @@
+ wcsncat (wchar_t *restrict wto, const wchar_t *restrict wfrom,
+          size_t size)
+ @{
+-  wto[wcslen (to) + size] = L'\0';
+-  wcsncpy (wto + wcslen (wto), wfrom, size);
++  memcpy (wto + wcslen (wto), wfrom, wcsnlen (wfrom, size) * sizeof (wchar_t));
++  wto[wcslen (to) + wcsnlen (wfrom, size)] = '\0';
+   return wto;
+ @}
+ @end group
+@@ -1012,6 +1042,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun void bcopy (const void *@var{from}, void *@var{to}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is a partially obsolete alternative for @code{memmove}, derived from
+ BSD.  Note that it is not quite equivalent to @code{memmove}, because the
+ arguments are not in the same order and there is no return value.
+@@ -1020,6 +1051,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun void bzero (void *@var{block}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is a partially obsolete alternative for @code{memset}, derived from
+ BSD.  Note that it is not as general as @code{memset}, because the only
+ value it can store is zero.
+@@ -1055,6 +1087,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun int memcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{memcmp} compares the @var{size} bytes of memory
+ beginning at @var{a1} against the @var{size} bytes of memory beginning
+ at @var{a2}.  The value returned has the same sign as the difference
+@@ -1065,9 +1098,10 @@
+ @code{0}.
+ @end deftypefun
+ 
+-@comment wcjar.h
++@comment wchar.h
+ @comment ISO
+ @deftypefun int wmemcmp (const wchar_t *@var{a1}, const wchar_t *@var{a2}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{wmemcmp} compares the @var{size} wide characters
+ beginning at @var{a1} against the @var{size} wide characters beginning
+ at @var{a2}.  The value returned is smaller than or larger than zero
+@@ -1120,6 +1154,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun int strcmp (const char *@var{s1}, const char *@var{s2})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strcmp} function compares the string @var{s1} against
+ @var{s2}, returning a value that has the same sign as the difference
+ between the first differing pair of characters (interpreted as
+@@ -1139,6 +1174,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int wcscmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ The @code{wcscmp} function compares the wide character string @var{ws1}
+ against @var{ws2}.  The value returned is smaller than or larger than zero
+@@ -1159,6 +1195,11 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun int strcasecmp (const char *@var{s1}, const char *@var{s2})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Although this calls tolower multiple times, it's a macro, and
++@c strcasecmp is optimized so that the locale pointer is read only once.
++@c There are some asm implementations too, for which the single-read
++@c from locale TLS pointers also applies.
+ This function is like @code{strcmp}, except that differences in case are
+ ignored.  How uppercase and lowercase characters are related is
+ determined by the currently selected locale.  In the standard @code{"C"}
+@@ -1171,7 +1212,10 @@
+ 
+ @comment wchar.h
+ @comment GNU
+-@deftypefun int wcscasecmp (const wchar_t *@var{ws1}, const wchar_T *@var{ws2})
++@deftypefun int wcscasecmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Since towlower is not a macro, the locale object may be read multiple
++@c times.
+ This function is like @code{wcscmp}, except that differences in case are
+ ignored.  How uppercase and lowercase characters are related is
+ determined by the currently selected locale.  In the standard @code{"C"}
+@@ -1185,6 +1229,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is the similar to @code{strcmp}, except that no more than
+ @var{size} characters are compared.  In other words, if the two
+ strings are the same in their first @var{size} characters, the
+@@ -1194,6 +1239,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int wcsncmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function is the similar to @code{wcscmp}, except that no more than
+ @var{size} wide characters are compared.  In other words, if the two
+ strings are the same in their first @var{size} wide characters, the
+@@ -1203,6 +1249,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun int strncasecmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function is like @code{strncmp}, except that differences in case
+ are ignored.  Like @code{strcasecmp}, it is locale dependent how
+ uppercase and lowercase characters are related.
+@@ -1214,6 +1261,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun int wcsncasecmp (const wchar_t *@var{ws1}, const wchar_t *@var{s2}, size_t @var{n})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
+ This function is like @code{wcsncmp}, except that differences in case
+ are ignored.  Like @code{wcscasecmp}, it is locale dependent how
+ uppercase and lowercase characters are related.
+@@ -1247,6 +1295,8 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c Calls isdigit multiple times, locale may change in between.
+ The @code{strverscmp} function compares the string @var{s1} against
+ @var{s2}, considering them as holding indices/version numbers.  The
+ return value follows the same conventions as found in the
+@@ -1258,7 +1308,7 @@
+ mode, where each sequence of digits is taken as a whole.  If we reach the
+ end of these two parts without noticing a difference, we return to the
+ standard comparison mode.  There are two types of numeric parts:
+-"integral" and "fractional" (those  begin with a '0'). The types
++"integral" and "fractional" (those  begin with a '0').  The types
+ of the numeric parts affect the way we sort them:
+ 
+ @itemize @bullet
+@@ -1297,6 +1347,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun int bcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is an obsolete alias for @code{memcmp}, derived from BSD.
+ @end deftypefun
+ 
+@@ -1343,6 +1394,9 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun int strcoll (const char *@var{s1}, const char *@var{s2})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Calls strcoll_l with the current locale, which dereferences only the
++@c LC_COLLATE data pointer.
+ The @code{strcoll} function is similar to @code{strcmp} but uses the
+ collating sequence of the current locale for collation (the
+ @code{LC_COLLATE} locale).
+@@ -1351,6 +1405,8 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun int wcscoll (const wchar_t *@var{ws1}, const wchar_t *@var{ws2})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Same as strcoll, but calling wcscoll_l.
+ The @code{wcscoll} function is similar to @code{wcscmp} but uses the
+ collating sequence of the current locale for collation (the
+ @code{LC_COLLATE} locale).
+@@ -1370,7 +1426,7 @@
+ compare_elements (const void *v1, const void *v2)
+ @{
+   char * const *p1 = v1;
+-  char * const *p1 = v2;
++  char * const *p2 = v2;
+ 
+   return strcoll (*p1, *p2);
+ @}
+@@ -1391,6 +1447,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun size_t strxfrm (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The function @code{strxfrm} transforms the string @var{from} using the
+ collation transformation determined by the locale currently selected for
+ collation, and stores the transformed string in the array @var{to}.  Up
+@@ -1420,6 +1477,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t wcsxfrm (wchar_t *restrict @var{wto}, const wchar_t *@var{wfrom}, size_t @var{size})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The function @code{wcsxfrm} transforms wide character string @var{wfrom}
+ using the collation transformation determined by the locale currently
+ selected for collation, and stores the transformed string in the array
+@@ -1514,8 +1572,8 @@
+     @}
+ 
+   /* @r{Sort @code{temp_array} by comparing transformed strings.} */
+-  qsort (temp_array, sizeof (struct sorter),
+-         nstrings, compare_elements);
++  qsort (temp_array, nstrings,
++         sizeof (struct sorter), compare_elements);
+ 
+   /* @r{Put the elements back in the permanent array}
+      @r{in their sorted order.} */
+@@ -1579,6 +1637,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {void *} memchr (const void *@var{block}, int @var{c}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function finds the first occurrence of the byte @var{c} (converted
+ to an @code{unsigned char}) in the initial @var{size} bytes of the
+ object beginning at @var{block}.  The return value is a pointer to the
+@@ -1588,6 +1647,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wmemchr (const wchar_t *@var{block}, wchar_t @var{wc}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function finds the first occurrence of the wide character @var{wc}
+ in the initial @var{size} wide characters of the object beginning at
+ @var{block}.  The return value is a pointer to the located wide
+@@ -1597,6 +1657,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {void *} rawmemchr (const void *@var{block}, int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Often the @code{memchr} function is used with the knowledge that the
+ byte @var{c} is available in the memory block specified by the
+ parameters.  But this means that the @var{size} parameter is not really
+@@ -1627,6 +1688,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {void *} memrchr (const void *@var{block}, int @var{c}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{memrchr} is like @code{memchr}, except that it searches
+ backwards from the end of the block defined by @var{block} and @var{size}
+ (instead of forwards from the front).
+@@ -1637,6 +1699,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strchr (const char *@var{string}, int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strchr} function finds the first occurrence of the character
+ @var{c} (converted to a @code{char}) in the null-terminated string
+ beginning at @var{string}.  The return value is a pointer to the located
+@@ -1663,6 +1726,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcschr (const wchar_t *@var{wstring}, int @var{wc})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wcschr} function finds the first occurrence of the wide
+ character @var{wc} in the null-terminated wide character string
+ beginning at @var{wstring}.  The return value is a pointer to the
+@@ -1678,6 +1742,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} strchrnul (const char *@var{string}, int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{strchrnul} is the same as @code{strchr} except that if it does
+ not find the character, it returns a pointer to string's terminating
+ null character rather than a null pointer.
+@@ -1688,6 +1753,7 @@
+ @comment wchar.h
+ @comment GNU
+ @deftypefun {wchar_t *} wcschrnul (const wchar_t *@var{wstring}, wchar_t @var{wc})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{wcschrnul} is the same as @code{wcschr} except that if it does not
+ find the wide character, it returns a pointer to wide character string's
+ terminating null wide character rather than a null pointer.
+@@ -1723,6 +1789,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strrchr (const char *@var{string}, int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{strrchr} is like @code{strchr}, except that it searches
+ backwards from the end of the string @var{string} (instead of forwards
+ from the front).
+@@ -1737,6 +1804,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcsrchr (const wchar_t *@var{wstring}, wchar_t @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The function @code{wcsrchr} is like @code{wcschr}, except that it searches
+ backwards from the end of the string @var{wstring} (instead of forwards
+ from the front).
+@@ -1745,6 +1813,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strstr (const char *@var{haystack}, const char *@var{needle})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is like @code{strchr}, except that it searches @var{haystack} for a
+ substring @var{needle} rather than just a single character.  It
+ returns a pointer into the string @var{haystack} that is the first
+@@ -1763,6 +1832,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcsstr (const wchar_t *@var{haystack}, const wchar_t *@var{needle})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is like @code{wcschr}, except that it searches @var{haystack} for a
+ substring @var{needle} rather than just a single wide character.  It
+ returns a pointer into the string @var{haystack} that is the first wide
+@@ -1773,7 +1843,8 @@
+ @comment wchar.h
+ @comment XPG
+ @deftypefun {wchar_t *} wcswcs (const wchar_t *@var{haystack}, const wchar_t *@var{needle})
+-@code{wcswcs} is an deprecated alias for @code{wcsstr}.  This is the
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@code{wcswcs} is a deprecated alias for @code{wcsstr}.  This is the
+ name originally used in the X/Open Portability Guide before the
+ @w{Amendment 1} to @w{ISO C90} was published.
+ @end deftypefun
+@@ -1782,6 +1853,9 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} strcasestr (const char *@var{haystack}, const char *@var{needle})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c There may be multiple calls of strncasecmp, each accessing the locale
++@c object independently.
+ This is like @code{strstr}, except that it ignores case in searching for
+ the substring.   Like @code{strcasecmp}, it is locale dependent how
+ uppercase and lowercase characters are related.
+@@ -1800,6 +1874,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {void *} memmem (const void *@var{haystack}, size_t @var{haystack-len},@*const void *@var{needle}, size_t @var{needle-len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This is like @code{strstr}, but @var{needle} and @var{haystack} are byte
+ arrays rather than null-terminated strings.  @var{needle-len} is the
+ length of @var{needle} and @var{haystack-len} is the length of
+@@ -1811,6 +1886,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun size_t strspn (const char *@var{string}, const char *@var{skipset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strspn} (``string span'') function returns the length of the
+ initial substring of @var{string} that consists entirely of characters that
+ are members of the set specified by the string @var{skipset}.  The order
+@@ -1831,6 +1907,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t wcsspn (const wchar_t *@var{wstring}, const wchar_t *@var{skipset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wcsspn} (``wide character string span'') function returns the
+ length of the initial substring of @var{wstring} that consists entirely
+ of wide characters that are members of the set specified by the string
+@@ -1841,6 +1918,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun size_t strcspn (const char *@var{string}, const char *@var{stopset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strcspn} (``string complement span'') function returns the length
+ of the initial substring of @var{string} that consists entirely of characters
+ that are @emph{not} members of the set specified by the string @var{stopset}.
+@@ -1862,6 +1940,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun size_t wcscspn (const wchar_t *@var{wstring}, const wchar_t *@var{stopset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wcscspn} (``wide character string complement span'') function
+ returns the length of the initial substring of @var{wstring} that
+ consists entirely of wide characters that are @emph{not} members of the
+@@ -1873,6 +1952,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strpbrk (const char *@var{string}, const char *@var{stopset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{strpbrk} (``string pointer break'') function is related to
+ @code{strcspn}, except that it returns a pointer to the first character
+ in @var{string} that is a member of the set @var{stopset} instead of the
+@@ -1897,6 +1977,7 @@
+ @comment wchar.h
+ @comment ISO
+ @deftypefun {wchar_t *} wcspbrk (const wchar_t *@var{wstring}, const wchar_t *@var{stopset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{wcspbrk} (``wide character string pointer break'') function is
+ related to @code{wcscspn}, except that it returns a pointer to the first
+ wide character in @var{wstring} that is a member of the set
+@@ -1910,6 +1991,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun {char *} index (const char *@var{string}, int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{index} is another name for @code{strchr}; they are exactly the same.
+ New code should always use @code{strchr} since this name is defined in
+ @w{ISO C} while @code{index} is a BSD invention which never was available
+@@ -1919,6 +2001,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun {char *} rindex (const char *@var{string}, int @var{c})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{rindex} is another name for @code{strrchr}; they are exactly the same.
+ New code should always use @code{strrchr} since this name is defined in
+ @w{ISO C} while @code{rindex} is a BSD invention which never was available
+@@ -1940,6 +2023,7 @@
+ @comment string.h
+ @comment ISO
+ @deftypefun {char *} strtok (char *restrict @var{newstring}, const char *restrict @var{delimiters})
++@safety{@prelim{}@mtunsafe{@mtasurace{:strtok}}@asunsafe{}@acsafe{}}
+ A string can be split into tokens by making a series of calls to the
+ function @code{strtok}.
+ 
+@@ -1978,7 +2062,8 @@
+ 
+ @comment wchar.h
+ @comment ISO
+-@deftypefun {wchar_t *} wcstok (wchar_t *@var{newstring}, const char *@var{delimiters})
++@deftypefun {wchar_t *} wcstok (wchar_t *@var{newstring}, const wchar_t *@var{delimiters}, wchar_t **@var{save_ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ A string can be split into tokens by making a series of calls to the
+ function @code{wcstok}.
+ 
+@@ -1986,11 +2071,8 @@
+ the first call only.  The @code{wcstok} function uses this to set up
+ some internal state information.  Subsequent calls to get additional
+ tokens from the same wide character string are indicated by passing a
+-null pointer as the @var{newstring} argument.  Calling @code{wcstok}
+-with another non-null @var{newstring} argument reinitializes the state
+-information.  It is guaranteed that no other library function ever calls
+-@code{wcstok} behind your back (which would mess up this internal state
+-information).
++null pointer as the @var{newstring} argument, which causes the pointer
++previously stored in @var{save_ptr} to be used instead.
+ 
+ The @var{delimiters} argument is a wide character string that specifies
+ a set of delimiters that may surround the token being extracted.  All
+@@ -1999,8 +2081,10 @@
+ delimiters marks the beginning of the next token.  The end of the token
+ is found by looking for the next wide character that is a member of the
+ delimiter set.  This wide character in the original wide character
+-string @var{newstring} is overwritten by a null wide character, and the
+-pointer to the beginning of the token in @var{newstring} is returned.
++string @var{newstring} is overwritten by a null wide character, the
++pointer past the overwritten wide character is saved in @var{save_ptr},
++and the pointer to the beginning of the token in @var{newstring} is
++returned.
+ 
+ On the next call to @code{wcstok}, the searching begins at the next
+ wide character beyond the one that marked the end of the previous token.
+@@ -2010,11 +2094,6 @@
+ If the end of the wide character string @var{newstring} is reached, or
+ if the remainder of string consists only of delimiter wide characters,
+ @code{wcstok} returns a null pointer.
+-
+-Note that ``character'' is here used in the sense of byte.  In a string
+-using a multibyte character encoding (abstract) character consisting of
+-more than one byte are not treated as an entity.  Each byte is treated
+-separately.  The function is not locale-dependent.
+ @end deftypefun
+ 
+ @strong{Warning:} Since @code{strtok} and @code{wcstok} alter the string
+@@ -2039,7 +2118,7 @@
+ structure, then it is error-prone to modify the data structure
+ temporarily.
+ 
+-The functions @code{strtok} and @code{wcstok} are not reentrant.
++The function @code{strtok} is not reentrant, whereas @code{wcstok} is.
+ @xref{Nonreentrancy}, for a discussion of where and why reentrancy is
+ important.
+ 
+@@ -2075,13 +2154,15 @@
+ @comment string.h
+ @comment POSIX
+ @deftypefun {char *} strtok_r (char *@var{newstring}, const char *@var{delimiters}, char **@var{save_ptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Just like @code{strtok}, this function splits the string into several
+ tokens which can be accessed by successive calls to @code{strtok_r}.
+-The difference is that the information about the next token is stored in
+-the space pointed to by the third argument, @var{save_ptr}, which is a
+-pointer to a string pointer.  Calling @code{strtok_r} with a null
+-pointer for @var{newstring} and leaving @var{save_ptr} between the calls
+-unchanged does the job without hindering reentrancy.
++The difference is that, as in @code{wcstok}, the information about the
++next token is stored in the space pointed to by the third argument,
++@var{save_ptr}, which is a pointer to a string pointer.  Calling
++@code{strtok_r} with a null pointer for @var{newstring} and leaving
++@var{save_ptr} between the calls unchanged does the job without
++hindering reentrancy.
+ 
+ This function is defined in POSIX.1 and can be found on many systems
+ which support multi-threading.
+@@ -2090,6 +2171,7 @@
+ @comment string.h
+ @comment BSD
+ @deftypefun {char *} strsep (char **@var{string_ptr}, const char *@var{delimiter})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function has a similar functionality as @code{strtok_r} with the
+ @var{newstring} argument replaced by the @var{save_ptr} argument.  The
+ initialization of the moving pointer has to be done by the user.
+@@ -2141,6 +2223,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} basename (const char *@var{filename})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The GNU version of the @code{basename} function returns the last
+ component of the path in @var{filename}.  This function is the preferred
+ usage, since it does not modify the argument, @var{filename}, and
+@@ -2175,8 +2258,9 @@
+ 
+ @comment libgen.h
+ @comment XPG
+-@deftypefun {char *} basename (char *@var{path})
+-This is the standard XPG defined @code{basename}. It is similar in
++@deftypefun {char *} basename (const char *@var{path})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++This is the standard XPG defined @code{basename}.  It is similar in
+ spirit to the GNU version, but may modify the @var{path} by removing
+ trailing '/' characters.  If the @var{path} is made up entirely of '/'
+ characters, then "/" will be returned.  Also, if @var{path} is
+@@ -2211,6 +2295,7 @@
+ @comment libgen.h
+ @comment XPG
+ @deftypefun {char *} dirname (char *@var{path})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{dirname} function is the compliment to the XPG version of
+ @code{basename}.  It returns the parent directory of the file specified
+ by @var{path}.  If @var{path} is @code{NULL}, an empty string, or
+@@ -2233,6 +2318,8 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {char *} strfry (char *@var{string})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Calls initstate_r, time, getpid, strlen, and random_r.
+ 
+ @code{strfry} creates a pseudorandom anagram of a string, replacing the
+ input with the anagram in place.  For each position in the string,
+@@ -2268,6 +2355,7 @@
+ @comment string.h
+ @comment GNU
+ @deftypefun {void *} memfrob (void *@var{mem}, size_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ 
+ @code{memfrob} transforms (frobnicates) each byte of the data structure
+ at @var{mem}, which is @var{length} bytes long, by bitwise exclusive
+@@ -2291,13 +2379,14 @@
+ 
+ To store or transfer binary data in environments which only support text
+ one has to encode the binary data by mapping the input bytes to
+-characters in the range allowed for storing or transfering.  SVID
++characters in the range allowed for storing or transferring.  SVID
+ systems (and nowadays XPG compliant systems) provide minimal support for
+ this task.
+ 
+ @comment stdlib.h
+ @comment XPG
+ @deftypefun {char *} l64a (long int @var{n})
++@safety{@prelim{}@mtunsafe{@mtasurace{:l64a}}@asunsafe{}@acsafe{}}
+ This function encodes a 32-bit input value using characters from the
+ basic character set.  It returns a pointer to a 7 character buffer which
+ contains an encoded version of @var{n}.  To encode a series of bytes the
+@@ -2373,6 +2462,7 @@
+ @comment stdlib.h
+ @comment XPG
+ @deftypefun {long int} a64l (const char *@var{string})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The parameter @var{string} should contain a string which was produced by
+ a call to @code{l64a}.  The function processes at least 6 characters of
+ this string, and decodes the characters it finds according to the table
+@@ -2459,6 +2549,7 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {error_t} argz_create (char *const @var{argv}[], char **@var{argz}, size_t *@var{argz_len})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{argz_create} function converts the Unix-style argument vector
+ @var{argv} (a vector of pointers to normal C strings, terminated by
+ @code{(char *)0}; @pxref{Program Arguments}) into an argz vector with
+@@ -2468,6 +2559,7 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {error_t} argz_create_sep (const char *@var{string}, int @var{sep}, char **@var{argz}, size_t *@var{argz_len})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{argz_create_sep} function converts the null-terminated string
+ @var{string} into an argz vector (returned in @var{argz} and
+ @var{argz_len}) by splitting it into elements at every occurrence of the
+@@ -2477,13 +2569,15 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {size_t} argz_count (const char *@var{argz}, size_t @var{arg_len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ Returns the number of elements in the argz vector @var{argz} and
+ @var{argz_len}.
+ @end deftypefun
+ 
+ @comment argz.h
+ @comment GNU
+-@deftypefun {void} argz_extract (char *@var{argz}, size_t @var{argz_len}, char **@var{argv})
++@deftypefun {void} argz_extract (const char *@var{argz}, size_t @var{argz_len}, char **@var{argv})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{argz_extract} function converts the argz vector @var{argz} and
+ @var{argz_len} into a Unix-style argument vector stored in @var{argv},
+ by putting pointers to every element in @var{argz} into successive
+@@ -2501,6 +2595,7 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {void} argz_stringify (char *@var{argz}, size_t @var{len}, int @var{sep})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{argz_stringify} converts @var{argz} into a normal string with
+ the elements separated by the character @var{sep}, by replacing each
+ @code{'\0'} inside @var{argz} (except the last one, which terminates the
+@@ -2511,6 +2606,8 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {error_t} argz_add (char **@var{argz}, size_t *@var{argz_len}, const char *@var{str})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Calls strlen and argz_append.
+ The @code{argz_add} function adds the string @var{str} to the end of the
+ argz vector @code{*@var{argz}}, and updates @code{*@var{argz}} and
+ @code{*@var{argz_len}} accordingly.
+@@ -2519,6 +2616,7 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {error_t} argz_add_sep (char **@var{argz}, size_t *@var{argz_len}, const char *@var{str}, int @var{delim})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{argz_add_sep} function is similar to @code{argz_add}, but
+ @var{str} is split into separate elements in the result at occurrences of
+ the character @var{delim}.  This is useful, for instance, for
+@@ -2529,6 +2627,7 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {error_t} argz_append (char **@var{argz}, size_t *@var{argz_len}, const char *@var{buf}, size_t @var{buf_len})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{argz_append} function appends @var{buf_len} bytes starting at
+ @var{buf} to the argz vector @code{*@var{argz}}, reallocating
+ @code{*@var{argz}} to accommodate it, and adding @var{buf_len} to
+@@ -2538,6 +2637,8 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {void} argz_delete (char **@var{argz}, size_t *@var{argz_len}, char *@var{entry})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Calls free if no argument is left.
+ If @var{entry} points to the beginning of one of the elements in the
+ argz vector @code{*@var{argz}}, the @code{argz_delete} function will
+ remove this entry and reallocate @code{*@var{argz}}, modifying
+@@ -2549,6 +2650,8 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun {error_t} argz_insert (char **@var{argz}, size_t *@var{argz_len}, char *@var{before}, const char *@var{entry})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Calls argz_add or realloc and memmove.
+ The @code{argz_insert} function inserts the string @var{entry} into the
+ argz vector @code{*@var{argz}} at a point just before the existing
+ element pointed to by @var{before}, reallocating @code{*@var{argz}} and
+@@ -2561,7 +2664,8 @@
+ 
+ @comment argz.h
+ @comment GNU
+-@deftypefun {char *} argz_next (char *@var{argz}, size_t @var{argz_len}, const char *@var{entry})
++@deftypefun {char *} argz_next (const char *@var{argz}, size_t @var{argz_len}, const char *@var{entry})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{argz_next} function provides a convenient way of iterating
+ over the elements in the argz vector @var{argz}.  It returns a pointer
+ to the next element in @var{argz} after the element @var{entry}, or
+@@ -2595,6 +2699,7 @@
+ @comment argz.h
+ @comment GNU
+ @deftypefun error_t argz_replace (@w{char **@var{argz}, size_t *@var{argz_len}}, @w{const char *@var{str}, const char *@var{with}}, @w{unsigned *@var{replace_count}})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ Replace any occurrences of the string @var{str} in @var{argz} with
+ @var{with}, reallocating @var{argz} as necessary.  If
+ @var{replace_count} is non-zero, @code{*@var{replace_count}} will be
+@@ -2630,6 +2735,7 @@
+ @comment envz.h
+ @comment GNU
+ @deftypefun {char *} envz_entry (const char *@var{envz}, size_t @var{envz_len}, const char *@var{name})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{envz_entry} function finds the entry in @var{envz} with the name
+ @var{name}, and returns a pointer to the whole entry---that is, the argz
+ element which begins with @var{name} followed by a @code{'='} character.  If
+@@ -2639,6 +2745,7 @@
+ @comment envz.h
+ @comment GNU
+ @deftypefun {char *} envz_get (const char *@var{envz}, size_t @var{envz_len}, const char *@var{name})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{envz_get} function finds the entry in @var{envz} with the name
+ @var{name} (like @code{envz_entry}), and returns a pointer to the value
+ portion of that entry (following the @code{'='}).  If there is no entry with
+@@ -2648,6 +2755,9 @@
+ @comment envz.h
+ @comment GNU
+ @deftypefun {error_t} envz_add (char **@var{envz}, size_t *@var{envz_len}, const char *@var{name}, const char *@var{value})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
++@c Calls envz_remove, which calls enz_entry and argz_delete, and then
++@c argz_add or equivalent code that reallocs and appends name=value.
+ The @code{envz_add} function adds an entry to @code{*@var{envz}}
+ (updating @code{*@var{envz}} and @code{*@var{envz_len}}) with the name
+ @var{name}, and value @var{value}.  If an entry with the same name
+@@ -2659,6 +2769,7 @@
+ @comment envz.h
+ @comment GNU
+ @deftypefun {error_t} envz_merge (char **@var{envz}, size_t *@var{envz_len}, const char *@var{envz2}, size_t @var{envz2_len}, int @var{override})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
+ The @code{envz_merge} function adds each entry in @var{envz2} to @var{envz},
+ as if with @code{envz_add}, updating @code{*@var{envz}} and
+ @code{*@var{envz_len}}.  If @var{override} is true, then values in @var{envz2}
+@@ -2672,6 +2783,10 @@
+ @comment envz.h
+ @comment GNU
+ @deftypefun {void} envz_strip (char **@var{envz}, size_t *@var{envz_len})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{envz_strip} function removes any null entries from @var{envz},
+ updating @code{*@var{envz}} and @code{*@var{envz_len}}.
+ @end deftypefun
++
++@c FIXME this are undocumented:
++@c strcasecmp_l @safety{@mtsafe{}@assafe{}@acsafe{}} see strcasecmp
+diff -urN glibc-2.17-c758a686/manual/summary.awk glibc-2.17-c758a686/manual/summary.awk
+--- glibc-2.17-c758a686/manual/summary.awk	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/summary.awk	2014-09-12 16:10:06.042792724 -0400
+@@ -1,5 +1,5 @@
+ # awk script to create summary.texinfo from the library texinfo files.
+-# Copyright (C) 1992, 1993, 1997, 2001 Free Software Foundation, Inc.
++# Copyright (C) 1992-2014 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
+diff -urN glibc-2.17-c758a686/manual/sysinfo.texi glibc-2.17-c758a686/manual/sysinfo.texi
+--- glibc-2.17-c758a686/manual/sysinfo.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/sysinfo.texi	2014-09-12 16:10:06.048792709 -0400
+@@ -91,6 +91,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int gethostname (char *@var{name}, size_t @var{size})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on unix; implemented in terms of uname on posix and of
++@c hurd_get_host_config on hurd.
+ This function returns the host name of the system on which it is called,
+ in the array @var{name}.  The @var{size} argument specifies the size of
+ this array, in bytes.  Note that this is @emph{not} the DNS hostname.
+@@ -121,6 +124,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int sethostname (const char *@var{name}, size_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on unix; implemented in terms of hurd_set_host_config
++@c on hurd.
+ The @code{sethostname} function sets the host name of the system that
+ calls it to @var{name}, a string with length @var{length}.  Only
+ privileged processes are permitted to do this.
+@@ -145,6 +151,8 @@
+ @comment unistd.h
+ @comment ???
+ @deftypefun int getdomainnname (char *@var{name}, size_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Syscalls uname, then strlen and memcpy.
+ @cindex NIS domain name
+ @cindex YP domain name
+ 
+@@ -159,6 +167,8 @@
+ @comment unistd.h
+ @comment ???
+ @deftypefun int setdomainname (const char *@var{name}, size_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall.
+ @cindex NIS domain name
+ @cindex YP domain name
+ 
+@@ -173,6 +183,10 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun {long int} gethostid (void)
++@safety{@prelim{}@mtsafe{@mtshostid{} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}}
++@c On HURD, calls _hurd_get_host_config and strtol.  On Linux, open
++@c HOSTIDFILE, reads an int32_t and closes; if that fails, it calls
++@c gethostname and gethostbyname_r to use the h_addr.
+ This function returns the ``host ID'' of the machine the program is
+ running on.  By convention, this is usually the primary Internet IP address
+ of that machine, converted to a @w{@code{long int}}.  However, on some
+@@ -190,6 +204,7 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int sethostid (long int @var{id})
++@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtshostid{}}}@asunsafe{}@acunsafe{@acucorrupt{} @acsfd{}}}
+ The @code{sethostid} function sets the ``host ID'' of the host machine
+ to @var{id}.  Only privileged processes are permitted to do this.  Usually
+ it happens just once, at system boot time.
+@@ -226,7 +241,7 @@
+ 
+ As a bonus, @code{uname} also gives some information identifying the
+ particular system your program is running on.  This is the same information
+-which you can get with functions targetted to this purpose described in
++which you can get with functions targeted to this purpose described in
+ @ref{Host Identification}.
+ 
+ 
+@@ -296,6 +311,10 @@
+ @comment sys/utsname.h
+ @comment POSIX.1
+ @deftypefun int uname (struct utsname *@var{info})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall on unix; the posix fallback is to call gethostname and
++@c then fills in the other fields with constants; on HURD, it calls
++@c proc_uname and then gethostname.
+ The @code{uname} function fills in the structure pointed to by
+ @var{info} with information about the operating system and host machine.
+ A non-negative value indicates that the data was successfully stored.
+@@ -471,6 +490,12 @@
+ @comment fstab.h
+ @comment BSD
+ @deftypefun int setfsent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:fsent}}@asunsafe{@ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c setfsent @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
++@c  fstab_init(1) @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
++@c   malloc dup @ascuheap @acsmem
++@c   rewind dup @asucorrupt @acucorrupt [no @aculock]
++@c   setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock
+ This function makes sure that the internal read pointer for the
+ @file{fstab} file is at the beginning of the file.  This is done by
+ either opening the file or resetting the read pointer.
+@@ -486,6 +511,9 @@
+ @comment fstab.h
+ @comment BSD
+ @deftypefun void endfsent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:fsent}}@asunsafe{@ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c endfsent @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
++@c  endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd
+ This function makes sure that all resources acquired by a prior call to
+ @code{setfsent} (explicitly or implicitly by calling @code{getfsent}) are
+ freed.
+@@ -494,6 +522,13 @@
+ @comment fstab.h
+ @comment BSD
+ @deftypefun {struct fstab *} getfsent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c getfsent @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c  fstab_init(0) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
++@c  fstab_fetch @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
++@c   getmntent_r dup @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
++@c  fstab_convert @mtasurace:fsent
++@c   hasmntopt dup ok
+ This function returns the next entry of the @file{fstab} file.  If this
+ is the first call to any of the functions handling @file{fstab} since
+ program start or the last call of @code{endfsent}, the file will be
+@@ -508,6 +543,12 @@
+ @comment fstab.h
+ @comment BSD
+ @deftypefun {struct fstab *} getfsspec (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c getffsspec @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c  fstab_init(1) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
++@c  fstab_fetch dup @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
++@c  strcmp dup ok
++@c  fstab_convert dup @mtasurace:fsent
+ This function returns the next entry of the @file{fstab} file which has
+ a string equal to @var{name} pointed to by the @code{fs_spec} element.
+ Since there is normally exactly one entry for each special device it
+@@ -525,6 +566,12 @@
+ @comment fstab.h
+ @comment BSD
+ @deftypefun {struct fstab *} getfsfile (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c getffsfile @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem
++@c  fstab_init(1) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd
++@c  fstab_fetch dup @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
++@c  strcmp dup ok
++@c  fstab_convert dup @mtasurace:fsent
+ This function returns the next entry of the @file{fstab} file which has
+ a string equal to @var{name} pointed to by the @code{fs_file} element.
+ Since there is normally exactly one entry for each mount point it
+@@ -640,6 +687,13 @@
+ @comment mntent.h
+ @comment BSD
+ @deftypefun {FILE *} setmntent (const char *@var{file}, const char *@var{mode})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
++@c setmntent @ascuheap @asulock @acsmem @acsfd @aculock
++@c  strlen dup ok
++@c  mempcpy dup ok
++@c  memcpy dup ok
++@c  fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c  fsetlocking dup ok [no @mtasurace:stream @asulock: exclusive stream]
+ The @code{setmntent} function prepares the file named @var{FILE} which
+ must be in the format of a @file{fstab} and @file{mtab} file for the
+ upcoming processing through the other functions of the family.  The
+@@ -655,6 +709,9 @@
+ @comment mntent.h
+ @comment BSD
+ @deftypefun int endmntent (FILE *@var{stream})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c endmntent @ascuheap @asulock @aculock @acsmem @acsfd
++@c  fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
+ This function takes for the @var{stream} parameter a file handle which
+ previously was returned from the @code{setmntent} call.
+ @code{endmntent} closes the stream and frees all resources.
+@@ -666,6 +723,12 @@
+ @comment mntent.h
+ @comment BSD
+ @deftypefun {struct mntent *} getmntent (FILE *@var{stream})
++@safety{@prelim{}@mtunsafe{@mtasurace{:mntentbuf} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asuinit{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsmem{}}}
++@c getmntent @mtasurace:mntentbuf @mtslocale @asucorrupt @ascuheap @asuinit @acuinit @acucorrupt @aculock @acsmem
++@c  libc_once @ascuheap @asuinit @acuinit @acsmem
++@c   allocate @ascuheap @acsmem
++@c    malloc dup @ascuheap @acsmem
++@c  getmntent_r dup @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
+ The @code{getmntent} function takes as the parameter a file handle
+ previously returned by successful call to @code{setmntent}.  It returns
+ a pointer to a static variable of type @code{struct mntent} which is
+@@ -691,7 +754,17 @@
+ 
+ @comment mntent.h
+ @comment BSD
+-@deftypefun {struct mntent *} getmntent_r (FILE *@var{stream}, struct mentent *@var{result}, char *@var{buffer}, int @var{bufsize})
++@deftypefun {struct mntent *} getmntent_r (FILE *@var{stream}, struct mntent *@var{result}, char *@var{buffer}, int @var{bufsize})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}}
++@c getmntent_r @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem
++@c  flockfile dup @aculock
++@c  fgets_unlocked dup @asucorrupt @acucorrupt [locked, so no @mtsrace:stream]
++@c  funlockfile dup @aculock
++@c  strchr dup ok
++@c  strspn dup ok
++@c  strsep dup ok
++@c  decode_name ok
++@c  sscanf dup @mtslocale @ascuheap @acsmem
+ The @code{getmntent_r} function is the reentrant variant of
+ @code{getmntent}.  It also returns the next entry from the file and
+ returns a pointer.  The actual variable the values are stored in is not
+@@ -717,6 +790,12 @@
+ @comment mntent.h
+ @comment BSD
+ @deftypefun int addmntent (FILE *@var{stream}, const struct mntent *@var{mnt})
++@safety{@prelim{}@mtunsafe{@mtasurace{:stream} @mtslocale{}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
++@c addmntent @mtasurace:stream @mtslocale @asucorrupt @acucorrupt
++@c  fseek dup @asucorrupt @acucorrupt [no @aculock]
++@c  encode_name ok
++@c  fprintf dup @mtslocale @asucorrupt @acucorrupt [no @ascuheap @acsmem, no @aculock]
++@c  fflush dup @asucorrupt @acucorrupt [no @aculock]
+ The @code{addmntent} function allows adding a new entry to the file
+ previously opened with @code{setmntent}.  The new entries are always
+ appended.  I.e., even if the position of the file descriptor is not at
+@@ -740,6 +819,11 @@
+ @comment mntent.h
+ @comment BSD
+ @deftypefun {char *} hasmntopt (const struct mntent *@var{mnt}, const char *@var{opt})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c hasmntopt ok
++@c  strlen dup ok
++@c  strstr dup ok
++@c  strchr dup ok
+ This function can be used to check whether the string pointed to by the
+ @code{mnt_opts} element of the variable pointed to by @var{mnt} contains
+ the option @var{opt}.  If this is true a pointer to the beginning of the
+@@ -778,6 +862,8 @@
+ @comment sys/mount.h
+ @comment SVID, BSD
+ @deftypefun {int} mount (const char *@var{special_file}, const char *@var{dir}, const char *@var{fstype}, unsigned long int @var{options}, const void *@var{data})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall.
+ 
+ @code{mount} mounts or remounts a filesystem.  The two operations are
+ quite different and are merged rather unnaturally into this one function.
+@@ -982,6 +1068,8 @@
+ @comment sys/mount.h
+ @comment GNU
+ @deftypefun {int} umount2 (const char *@var{file}, int @var{flags})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall.
+ 
+ @code{umount2} unmounts a filesystem.
+ 
+@@ -1047,6 +1135,8 @@
+ @comment sys/mount.h
+ @comment SVID, GNU
+ @deftypefun {int} umount (const char *@var{file})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall or wrapper for umount2.
+ 
+ @code{umount} does the same thing as @code{umount2} with @var{flags} set
+ to zeroes.  It is more widely available than @code{umount2} but since it
+@@ -1062,11 +1152,13 @@
+ This section describes the @code{sysctl} function, which gets and sets
+ a variety of system parameters.
+ 
+-The symbols used in this section are declared in the file @file{sysctl.h}.
++The symbols used in this section are declared in the file @file{sys/sysctl.h}.
+ 
+-@comment sysctl.h
++@comment sys/sysctl.h
+ @comment BSD
+ @deftypefun int sysctl (int *@var{names}, int @var{nlen}, void *@var{oldval}, size_t *@var{oldlenp}, void *@var{newval}, size_t @var{newlen})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct syscall, Linux only.
+ 
+ @code{sysctl} gets or sets a specified system parameter.  There are so
+ many of these parameters that it is not practical to list them all here,
+@@ -1090,7 +1182,7 @@
+ a particular parameter, you specify a path through the structure in a
+ way analogous to specifying the pathname of a file.  Each component of
+ the path is specified by an integer and each of these integers has a
+-macro defined for it by @file{sysctl.h}.  @var{names} is the path, in
++macro defined for it by @file{sys/sysctl.h}.  @var{names} is the path, in
+ the form of an array of integers.  Each component of the path is one
+ element of the array, in order.  @var{nlen} is the number of components
+ in the path.
+diff -urN glibc-2.17-c758a686/manual/syslog.texi glibc-2.17-c758a686/manual/syslog.texi
+--- glibc-2.17-c758a686/manual/syslog.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/syslog.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -147,6 +147,17 @@
+ @comment syslog.h
+ @comment BSD
+ @deftypefun void openlog (const char *@var{ident}, int @var{option}, int @var{facility})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c openlog @asulock @aculock @acsfd
++@c  libc_lock_lock @asulock @aculock
++@c  openlog_internal @acsfd [always guarded by syslog_lock, so no race]
++@c   strncpy dup ok
++@c   socket dup @acsfd
++@c   fcntl dup ok
++@c   connect dup ok
++@c   close dup @acsfd
++@c  cancel_handler(NULL) @aculock
++@c   libc_lock_unlock @aculock
+ 
+ @code{openlog} opens or reopens a connection to Syslog in preparation
+ for submitting messages.
+@@ -275,7 +286,39 @@
+ @c syslog() is implemented as a call to vsyslog().
+ @comment syslog.h
+ @comment BSD
+-@deftypefun void syslog (int @var{facility_priority}, char *@var{format}, @dots{})
++@deftypefun void syslog (int @var{facility_priority}, const char *@var{format}, @dots{})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c syslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  va_start dup ok
++@c  vsyslog_chk @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   syslog(INTERNALLOG) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   open_memstream @ascuheap @acsmem
++@c   stpcpy dup ok
++@c   getpid dup ok
++@c   mempcpy dup ok
++@c   fsetlocking [no @mtasurace:stream @asulock for exclusive stream]
++@c   fprintf @mtslocale @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt on temp memstream]
++@c   time dup ok
++@c   localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   strftime_l(C) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   ftell dup ok [no @asucorrupt @aculock @acucorrupt on temp memstream]
++@c   fputs_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
++@c   putc_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
++@c   vfprintf/vfprintf_chk dup @mtslocale @ascuheap @acsmem [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream]
++@c   fclose dup @ascuheap @acsmem [no @asulock @aculock @acsfd on caller-locked memstream]
++@c   writev dup ok
++@c   libc_lock_lock dup @asulock @aculock
++@c   memset dup ok
++@c   sigemptyset dup ok
++@c   sigaction(SIGPIPE) dup @mtasusig:PIPE @acusig:PIPE
++@c   openlog_internal dup @acsfd
++@c   send dup ok
++@c   closelog_internal dup @acsfd
++@c   open dup @acsfd
++@c   dprintf dup ok
++@c   libc_lock_unlock @asulock @aculock
++@c   free dup @acsuheap @acsmem
++@c  va_end dup ok
+ 
+ @code{syslog} submits a message to the Syslog facility.  It does this by
+ writing to the Unix domain socket @code{/dev/log}.
+@@ -403,7 +446,10 @@
+ 
+ @comment syslog.h
+ @comment BSD
+-@deftypefun void vsyslog (int @var{facility_priority}, char *@var{format}, va_list @var{arglist})
++@deftypefun void vsyslog (int @var{facility_priority}, const char *@var{format}, va_list @var{arglist})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c vsyslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  vsyslog_chk dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
+ 
+ This is functionally identical to @code{syslog}, with the BSD style variable
+ length argument.
+@@ -420,6 +466,13 @@
+ @comment syslog.h
+ @comment BSD
+ @deftypefun void closelog (void)
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c closelog @asulock @aculock @acsfd
++@c  libc_lock_lock @asulock @aculock
++@c  closelog_internal @acsfd [always guarded by syslog_lock, so no race]
++@c   close dup@acsfd
++@c  cancel_handler(NULL) @aculock
++@c   libc_lock_unlock @aculock
+ 
+ @code{closelog} closes the current Syslog connection, if there is one.
+ This includes closing the @file{/dev/log} socket, if it is open.
+@@ -450,6 +503,10 @@
+ @comment syslog.h
+ @comment BSD
+ @deftypefun int setlogmask (int @var{mask})
++@safety{@prelim{}@mtunsafe{@mtasurace{:LogMask}}@asunsafe{}@acsafe{}}
++@c Read and modify are not guarded by syslog_lock, so concurrent changes
++@c or even uses are undefined.  This should use an atomic swap instead,
++@c at least for modifications.
+ 
+ @code{setlogmask} sets a mask (the ``logmask'') that determines which
+ future @code{syslog} calls shall be ignored.  If a program has not
+diff -urN glibc-2.17-c758a686/manual/terminal.texi glibc-2.17-c758a686/manual/terminal.texi
+--- glibc-2.17-c758a686/manual/terminal.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/terminal.texi	2014-09-12 16:10:06.047792712 -0400
+@@ -44,6 +44,9 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int isatty (int @var{filedes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c isatty ok
++@c  tcgetattr dup ok
+ This function returns @code{1} if @var{filedes} is a file descriptor
+ associated with an open terminal device, and @math{0} otherwise.
+ @end deftypefun
+@@ -55,6 +58,20 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {char *} ttyname (int @var{filedes})
++@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c ttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
++@c  isatty dup ok
++@c  fstat dup ok
++@c  memcpy dup ok
++@c  getttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
++@c   opendir @ascuheap @acsmem @acsfd
++@c   readdir ok [protected by exclusive access]
++@c   strcmp dup ok
++@c   free dup @asulock @aculock @acsfd @acsmem
++@c   malloc dup @asulock @aculock @acsfd @acsmem
++@c   closedir @ascuheap @acsmem @acsfd
++@c   mempcpy dup ok
++@c   stat dup ok
+ If the file descriptor @var{filedes} is associated with a terminal
+ device, the @code{ttyname} function returns a pointer to a
+ statically-allocated, null-terminated string containing the file name of
+@@ -65,6 +82,18 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int ttyname_r (int @var{filedes}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}}
++@c ttyname_r @ascuheap @acsmem @acsfd
++@c  isatty dup ok
++@c  fstat dup ok
++@c  memcpy dup ok
++@c  getttyname_r @ascuheap @acsmem @acsfd
++@c   opendir @ascuheap @acsmem @acsfd
++@c   readdir ok [protected by exclusive access]
++@c   strcmp dup ok
++@c   closedir @ascuheap @acsmem @acsfd
++@c   stpncpy dup ok
++@c   stat dup ok
+ The @code{ttyname_r} function is similar to the @code{ttyname} function
+ except that it places its result into the user-specified buffer starting
+ at @var{buf} with length @var{len}.
+@@ -264,6 +293,9 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int tcgetattr (int @var{filedes}, struct termios *@var{termios-p})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Converting the kernel-returned termios data structure to the userland
++@c format does not ensure atomic or consistent writing.
+ This function is used to examine the attributes of the terminal
+ device with file descriptor @var{filedes}.  The attributes are returned
+ in the structure that @var{termios-p} points to.
+@@ -284,6 +316,9 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int tcsetattr (int @var{filedes}, int @var{when}, const struct termios *@var{termios-p})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Converting the incoming termios data structure to the kernel format
++@c does not ensure atomic or consistent reading.
+ This function sets the attributes of the terminal device with file
+ descriptor @var{filedes}.  The new attributes are taken from the
+ structure that @var{termios-p} points to.
+@@ -621,7 +656,7 @@
+ of characters, carriage return followed by linefeed.
+ @end deftypevr
+ 
+-@comment termios.h
++@comment termios.h (optional)
+ @comment BSD
+ @deftypevr Macro tcflag_t OXTABS
+ If this bit is set, convert tab characters on output into the appropriate
+@@ -630,7 +665,7 @@
+ @gnulinuxsystems{} it is available as @code{XTABS}.
+ @end deftypevr
+ 
+-@comment termios.h
++@comment termios.h (optional)
+ @comment BSD
+ @deftypevr Macro tcflag_t ONOEOT
+ If this bit is set, discard @kbd{C-d} characters (code @code{004}) on
+@@ -962,7 +997,7 @@
+ While this bit is set, all output is discarded.  @xref{Other Special}.
+ @end deftypevr
+ 
+-@comment termios.h
++@comment termios.h (optional)
+ @comment BSD
+ @deftypevr Macro tcflag_t NOKERNINFO
+ Setting this bit disables handling of the STATUS character.
+@@ -1016,6 +1051,10 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun speed_t cfgetospeed (const struct termios *@var{termios-p})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct access to a single termios field, except on Linux, where
++@c multiple accesses may take place.  No worries either way, callers
++@c must ensure mutual exclusion on such non-opaque types.
+ This function returns the output line speed stored in the structure
+ @code{*@var{termios-p}}.
+ @end deftypefun
+@@ -1023,6 +1062,7 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun speed_t cfgetispeed (const struct termios *@var{termios-p})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function returns the input line speed stored in the structure
+ @code{*@var{termios-p}}.
+ @end deftypefun
+@@ -1030,6 +1070,7 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int cfsetospeed (struct termios *@var{termios-p}, speed_t @var{speed})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function stores @var{speed} in @code{*@var{termios-p}} as the output
+ speed.  The normal return value is @math{0}; a value of @math{-1}
+ indicates an error.  If @var{speed} is not a speed, @code{cfsetospeed}
+@@ -1039,6 +1080,7 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int cfsetispeed (struct termios *@var{termios-p}, speed_t @var{speed})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ This function stores @var{speed} in @code{*@var{termios-p}} as the input
+ speed.  The normal return value is @math{0}; a value of @math{-1}
+ indicates an error.  If @var{speed} is not a speed, @code{cfsetospeed}
+@@ -1048,6 +1090,14 @@
+ @comment termios.h
+ @comment BSD
+ @deftypefun int cfsetspeed (struct termios *@var{termios-p}, speed_t @var{speed})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c There's no guarantee that the two calls are atomic, but since this is
++@c not an opaque type, callers ought to ensure mutual exclusion to the
++@c termios object.
++
++@c cfsetspeed ok
++@c  cfsetispeed ok
++@c  cfsetospeed ok
+ This function stores @var{speed} in @code{*@var{termios-p}} as both the
+ input and output speeds.  The normal return value is @math{0}; a value
+ of @math{-1} indicates an error.  If @var{speed} is not a speed,
+@@ -1625,6 +1675,10 @@
+ @comment termios.h
+ @comment BSD
+ @deftypefun void cfmakeraw (struct termios *@var{termios-p})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c There's no guarantee the changes are atomic, but since this is not an
++@c opaque type, callers ought to ensure mutual exclusion to the termios
++@c object.
+ This function provides an easy way to set up @code{*@var{termios-p}} for
+ what has traditionally been called ``raw mode'' in BSD.  This uses
+ noncanonical input, and turns off most processing to give an unmodified
+@@ -1678,6 +1732,8 @@
+ @comment sgtty.h
+ @comment BSD
+ @deftypefun int gtty (int @var{filedes}, struct sgttyb *@var{attributes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct ioctl, BSD only.
+ This function gets the attributes of a terminal.
+ 
+ @code{gtty} sets *@var{attributes} to describe the terminal attributes
+@@ -1686,7 +1742,9 @@
+ 
+ @comment sgtty.h
+ @comment BSD
+-@deftypefun int stty (int @var{filedes}, struct sgttyb *@var{attributes})
++@deftypefun int stty (int @var{filedes}, const struct sgttyb *@var{attributes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct ioctl, BSD only.
+ 
+ This function sets the attributes of a terminal.
+ 
+@@ -1710,6 +1768,12 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int tcsendbreak (int @var{filedes}, int @var{duration})
++@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acunsafe{@acucorrupt{/bsd}}}
++@c On Linux, this calls just one out of two ioctls; on BSD, it's two
++@c ioctls with a select (for the delay only) in between, the first
++@c setting and the latter clearing the break status.  The BSD
++@c implementation may leave the break enabled if cancelled, and threads
++@c and signals may cause the break to be interrupted before requested.
+ This function generates a break condition by transmitting a stream of
+ zero bits on the terminal associated with the file descriptor
+ @var{filedes}.  The duration of the break is controlled by the
+@@ -1738,6 +1802,8 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int tcdrain (int @var{filedes})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct ioctl.
+ The @code{tcdrain} function waits until all queued
+ output to the terminal @var{filedes} has been transmitted.
+ 
+@@ -1772,6 +1838,8 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int tcflush (int @var{filedes}, int @var{queue})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Direct ioctl.
+ The @code{tcflush} function is used to clear the input and/or output
+ queues associated with the terminal file @var{filedes}.  The @var{queue}
+ argument specifies which queue(s) to clear, and can be one of the
+@@ -1822,6 +1890,11 @@
+ @comment termios.h
+ @comment POSIX.1
+ @deftypefun int tcflow (int @var{filedes}, int @var{action})
++@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acsafe{}}
++@c Direct ioctl on Linux.  On BSD, the TCO* actions are a single ioctl,
++@c whereas the TCI actions first call tcgetattr and then write to the fd
++@c the c_cc character corresponding to the action; there's a window for
++@c another thread to change the xon/xoff characters.
+ The @code{tcflow} function is used to perform operations relating to
+ XON/XOFF flow control on the terminal file specified by @var{filedes}.
+ 
+@@ -1931,6 +2004,14 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int getpt (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
++@c On BSD, tries to open multiple potential pty names, returning on the
++@c first success.  On Linux, try posix_openpt first, then fallback to
++@c the BSD implementation.  The posix implementation opens the ptmx
++@c device, checks with statfs that /dev/pts is a devpts or that /dev is
++@c a devfs, and returns the fd; static variables devpts_mounted and
++@c have_no_dev_ptmx are safely initialized so as to avoid repeated
++@c tests.
+ The @code{getpt} function returns a new file descriptor for the next
+ available master pseudo-terminal.  The normal return value from
+ @code{getpt} is a non-negative integer file descriptor.  In the case of
+@@ -1948,6 +2029,32 @@
+ @comment stdlib.h
+ @comment SVID, XPG4.2
+ @deftypefun int grantpt (int @var{filedes})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  unix/grantpt:pts_name @acsuheap @acsmem
++@c   ptsname_internal dup ok (but this is Linux-only!)
++@c   memchr dup ok
++@c   realloc dup @acsuheap @acsmem
++@c   malloc dup @acsuheap @acsmem
++@c   free dup @acsuheap @acsmem
++@c  fcntl dup ok
++@c  getuid dup ok
++@c  chown dup ok
++@c  sysconf(_SC_GETGR_R_SIZE_MAX) ok
++@c  getgrnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getgid dup ok
++@c  chmod dup ok
++@c  fork dup @aculock
++@c  [child]
++@c   setrlimit
++@c   dup2
++@c   CLOSE_ALL_FDS
++@c   execle
++@c   _exit
++@c  waitpid dup ok
++@c  WIFEXITED dup ok
++@c  WEXITSTATUS dup ok
++@c  free dup @ascuheap @acsmem
+ The @code{grantpt} function changes the ownership and access permission
+ of the slave pseudo-terminal device corresponding to the master
+ pseudo-terminal device associated with the file descriptor
+@@ -1985,6 +2092,13 @@
+ @comment stdlib.h
+ @comment SVID, XPG4.2
+ @deftypefun int unlockpt (int @var{filedes})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
++@c unlockpt @ascuheap/bsd @acsmem @acsfd
++@c /bsd
++@c  ptsname_r dup @ascuheap @acsmem @acsfd
++@c  revoke ok (syscall)
++@c /linux
++@c  ioctl dup ok
+ The @code{unlockpt} function unlocks the slave pseudo-terminal device
+ corresponding to the master pseudo-terminal device associated with the
+ file descriptor @var{filedes}.  On many systems, the slave can only be
+@@ -2008,6 +2122,9 @@
+ @comment stdlib.h
+ @comment SVID, XPG4.2
+ @deftypefun {char *} ptsname (int @var{filedes})
++@safety{@prelim{}@mtunsafe{@mtasurace{:ptsname}}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
++@c ptsname @mtasurace:ptsname @ascuheap/bsd @acsmem @acsfd
++@c  ptsname_r dup @ascuheap/bsd @acsmem @acsfd
+ If the file descriptor @var{filedes} is associated with a
+ master pseudo-terminal device, the @code{ptsname} function returns a
+ pointer to a statically-allocated, null-terminated string containing the
+@@ -2018,6 +2135,37 @@
+ @comment stdlib.h
+ @comment GNU
+ @deftypefun int ptsname_r (int @var{filedes}, char *@var{buf}, size_t @var{len})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}}
++@c ptsname_r @ascuheap/bsd @acsmem @acsfd
++@c /hurd
++@c  term_get_peername ok
++@c  strlen dup ok
++@c  memcpy dup ok
++@c /bsd
++@c  isatty dup ok
++@c  strlen dup ok
++@c  ttyname_r dup @ascuheap @acsmem @acsfd
++@c  stat dup ok
++@c /linux
++@c  ptsname_internal ok
++@c   isatty dup ok
++@c   ioctl dup ok
++@c   strlen dup ok
++@c   itoa_word dup ok
++@c   stpcpy dup ok
++@c   memcpy dup ok
++@c   fxstat64 dup ok
++@c   MASTER_P ok
++@c    major ok
++@c     gnu_dev_major ok
++@c    minor ok
++@c     gnu_dev_minor ok
++@c   minor dup ok
++@c   xstat64 dup ok
++@c   S_ISCHR dup ok
++@c   SLAVE_P ok
++@c    major dup ok
++@c    minor dup ok
+ The @code{ptsname_r} function is similar to the @code{ptsname} function
+ except that it places its result into the user-specified buffer starting
+ at @var{buf} with length @var{len}.
+@@ -2083,6 +2231,22 @@
+ @comment pty.h
+ @comment BSD
+ @deftypefun int openpty (int *@var{amaster}, int *@var{aslave}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c openpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getpt @acsfd
++@c  grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  unlockpt dup @ascuheap/bsd @acsmem @acsfd
++@c  openpty:pts_name @acsuheap @acsmem @acsfd
++@c   ptsname_r dup @ascuheap/bsd @acsmem @acsfd
++@c   realloc dup @acsuheap @acsmem
++@c   malloc dup @acsuheap @acsmem
++@c   free dup @acsuheap @acsmem
++@c  open dup @acsfd
++@c  free dup @acsuheap @acsmem
++@c  tcsetattr dup ok
++@c  ioctl dup ok
++@c  strcpy dup ok
++@c  close dup @acsfd
+ This function allocates and opens a pseudo-terminal pair, returning the
+ file descriptor for the master in @var{*amaster}, and the file
+ descriptor for the slave in @var{*aslave}.  If the argument @var{name}
+@@ -2114,6 +2278,16 @@
+ @comment pty.h
+ @comment BSD
+ @deftypefun int forkpty (int *@var{amaster}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c forkpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  openpty dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  fork dup @aculock
++@c  close dup @acsfd
++@c  /child
++@c   close dup @acsfd
++@c   login_tty dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
++@c   _exit dup ok
++@c  close dup @acsfd
+ This function is similar to the @code{openpty} function, but in
+ addition, forks a new process (@pxref{Creating a Process}) and makes the
+ newly opened slave pseudo-terminal device the controlling terminal
+diff -urN glibc-2.17-c758a686/manual/texinfo.tex glibc-2.17-c758a686/manual/texinfo.tex
+--- glibc-2.17-c758a686/manual/texinfo.tex	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/texinfo.tex	2014-09-12 16:10:06.047792712 -0400
+@@ -3,11 +3,11 @@
+ % Load plain if necessary, i.e., if running under initex.
+ \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
+ %
+-\def\texinfoversion{2012-01-19.16}
++\def\texinfoversion{2014-05-05.10}
+ %
+ % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
+ % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+-% 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
+ %
+ % This texinfo.tex file is free software: you can redistribute it and/or
+ % modify it under the terms of the GNU General Public License as
+@@ -24,13 +24,14 @@
+ %
+ % As a special exception, when this file is read by TeX when processing
+ % a Texinfo source document, you may use the result without
+-% restriction.  (This has been our intent since Texinfo was invented.)
++% restriction. This Exception is an additional permission under section 7
++% of the GNU General Public License, version 3 ("GPLv3").
+ %
+ % Please try the latest version of texinfo.tex before submitting bug
+ % reports; you can get the latest version from:
+-%   http://www.gnu.org/software/texinfo/ (the Texinfo home page), or
+-%   ftp://tug.org/tex/texinfo.tex
+-%     (and all CTAN mirrors, see http://www.ctan.org).
++%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
++%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
++%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
+ % The texinfo.tex in any given distribution could well be out
+ % of date, so if that's what you're using, please check.
+ %
+@@ -280,9 +281,9 @@
+   \toks6=\expandafter{\prevsectiondefs}%
+   \toks8=\expandafter{\lastcolordefs}%
+   \mark{%
+-                   \the\toks0 \the\toks2
+-      \noexpand\or \the\toks4 \the\toks6
+-    \noexpand\else \the\toks8
++                   \the\toks0 \the\toks2  % 0: top marks (\last...)
++      \noexpand\or \the\toks4 \the\toks6  % 1: bottom marks (default, \prev...)
++    \noexpand\else \the\toks8             % 2: color marks
+   }%
+ }
+ % \topmark doesn't work for the very first chapter (after the title
+@@ -321,10 +322,13 @@
+   %
+   % Do this outside of the \shipout so @code etc. will be expanded in
+   % the headline as they should be, not taken literally (outputting ''code).
++  \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars}
++  %
+   \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
+-  \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}%
++  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
++  %
+   \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
+-  \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}%
++  \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
+   %
+   {%
+     % Have to do this stuff outside the \shipout because we want it to
+@@ -594,7 +598,7 @@
+ \def\:{\spacefactor=1000 }
+ 
+ % @* forces a line break.
+-\def\*{\hfil\break\hbox{}\ignorespaces}
++\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
+ 
+ % @/ allows a line break.
+ \let\/=\allowbreak
+@@ -887,7 +891,7 @@
+ \def\popthisfilestack{\errthisfilestackempty}
+ \def\errthisfilestackempty{\errmessage{Internal error:
+   the stack of filenames is empty.}}
+-
++%
+ \def\thisfile{}
+ 
+ % @center line
+@@ -895,36 +899,46 @@
+ %
+ \parseargdef\center{%
+   \ifhmode
+-    \let\next\centerH
++    \let\centersub\centerH
+   \else
+-    \let\next\centerV
++    \let\centersub\centerV
+   \fi
+-  \next{\hfil \ignorespaces#1\unskip \hfil}%
++  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
++  \let\centersub\relax % don't let the definition persist, just in case
+ }
+-\def\centerH#1{%
+-  {%
+-    \hfil\break
+-    \advance\hsize by -\leftskip
+-    \advance\hsize by -\rightskip
+-    \line{#1}%
+-    \break
+-  }%
++\def\centerH#1{{%
++  \hfil\break
++  \advance\hsize by -\leftskip
++  \advance\hsize by -\rightskip
++  \line{#1}%
++  \break
++}}
++%
++\newcount\centerpenalty
++\def\centerV#1{%
++  % The idea here is the same as in \startdefun, \cartouche, etc.: if
++  % @center is the first thing after a section heading, we need to wipe
++  % out the negative parskip inserted by \sectionheading, but still
++  % prevent a page break here.
++  \centerpenalty = \lastpenalty
++  \ifnum\centerpenalty>10000 \vskip\parskip \fi
++  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
++  \line{\kern\leftskip #1\kern\rightskip}%
+ }
+-\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}}
+ 
+ % @sp n   outputs n lines of vertical space
+-
++%
+ \parseargdef\sp{\vskip #1\baselineskip}
+ 
+ % @comment ...line which is ignored...
+ % @c is the same as @comment
+ % @ignore ... @end ignore  is another way to write a comment
+-
++%
+ \def\comment{\begingroup \catcode`\^^M=\other%
+ \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
+ \commentxxx}
+ {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
+-
++%
+ \let\c=\comment
+ 
+ % @paragraphindent NCHARS
+@@ -1097,7 +1111,7 @@
+ % for display in the outlines, and in other places.  Thus, we have to
+ % double any backslashes.  Otherwise, a name like "\node" will be
+ % interpreted as a newline (\n), followed by o, d, e.  Not good.
+-% 
++%
+ % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
+ % related messages.  The final outcome is that it is up to the TeX user
+ % to double the backslashes and otherwise make the string valid, so
+@@ -1107,7 +1121,7 @@
+ % #1 is a control sequence in which to do the replacements,
+ % which we \xdef.
+ \def\txiescapepdf#1{%
+-  \ifx\pdfescapestring\relax
++  \ifx\pdfescapestring\thisisundefined
+     % No primitive available; should we give a warning or log?
+     % Many times it won't matter.
+   \else
+@@ -1124,10 +1138,12 @@
+ 
+ \ifpdf
+   %
+-  % Color manipulation macros based on pdfcolor.tex,
++  % Color manipulation macros using ideas from pdfcolor.tex,
+   % except using rgb instead of cmyk; the latter is said to render as a
+   % very dark gray on-screen and a very dark halftone in print, instead
+-  % of actual black.
++  % of actual black. The dark red here is dark enough to print on paper as
++  % nearly black, but still distinguishable for online viewing.  We use
++  % black by default, though.
+   \def\rgbDarkRed{0.50 0.09 0.12}
+   \def\rgbBlack{0 0 0}
+   %
+@@ -1173,8 +1189,8 @@
+   %
+   % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
+   \def\dopdfimage#1#2#3{%
+-    \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
+-    \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
++    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
++    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
+     %
+     % pdftex (and the PDF format) support .pdf, .png, .jpg (among
+     % others).  Let's try in that order, PDF first since if
+@@ -1212,8 +1228,8 @@
+     \else
+       \immediate\pdfximage
+     \fi
+-      \ifdim \wd0 >0pt width \imagewidth \fi
+-      \ifdim \wd2 >0pt height \imageheight \fi
++      \ifdim \wd0 >0pt width \pdfimagewidth \fi
++      \ifdim \wd2 >0pt height \pdfimageheight \fi
+       \ifnum\pdftexversion<13
+          #1.\pdfimgext
+        \else
+@@ -1237,10 +1253,9 @@
+   % used to mark target names; must be expandable.
+   \def\pdfmkpgn#1{#1}
+   %
+-  % by default, use a color that is dark enough to print on paper as
+-  % nearly black, but still distinguishable for online viewing.
+-  \def\urlcolor{\rgbDarkRed}
+-  \def\linkcolor{\rgbDarkRed}
++  % by default, use black for everything.
++  \def\urlcolor{\rgbBlack}
++  \def\linkcolor{\rgbBlack}
+   \def\endlink{\setcolor{\maincolor}\pdfendlink}
+   %
+   % Adding outlines to PDF; macros for calculating structure of outlines
+@@ -1357,12 +1372,17 @@
+   \def\skipspaces#1{\def\PP{#1}\def\D{|}%
+     \ifx\PP\D\let\nextsp\relax
+     \else\let\nextsp\skipspaces
+-      \ifx\p\space\else\addtokens{\filename}{\PP}%
+-        \advance\filenamelength by 1
+-      \fi
++      \addtokens{\filename}{\PP}%
++      \advance\filenamelength by 1
+     \fi
+     \nextsp}
+-  \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax}
++  \def\getfilename#1{%
++    \filenamelength=0
++    % If we don't expand the argument now, \skipspaces will get
++    % snagged on things like "@value{foo}".
++    \edef\temp{#1}%
++    \expandafter\skipspaces\temp|\relax
++  }
+   \ifnum\pdftexversion < 14
+     \let \startlink \pdfannotlink
+   \else
+@@ -1459,9 +1479,6 @@
+ \def\ttsl{\setfontstyle{ttsl}}
+ 
+ 
+-% Default leading.
+-\newdimen\textleading  \textleading = 13.2pt
+-
+ % Set the baselineskip to #1, and the lineskip and strut size
+ % correspondingly.  There is no deep meaning behind these magic numbers
+ % used as factors; they just match (closely enough) what Knuth defined.
+@@ -1473,6 +1490,7 @@
+ % can get a sort of poor man's double spacing by redefining this.
+ \def\baselinefactor{1}
+ %
++\newdimen\textleading
+ \def\setleading#1{%
+   \dimen0 = #1\relax
+   \normalbaselineskip = \baselinefactor\dimen0
+@@ -1745,18 +1763,24 @@
+ \fi\fi
+ 
+ 
+-% Set the font macro #1 to the font named #2, adding on the
+-% specified font prefix (normally `cm').
++% Set the font macro #1 to the font named \fontprefix#2.
+ % #3 is the font's design size, #4 is a scale factor, #5 is the CMap
+-% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass
+-% empty to omit).
++% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
++% Example:
++% #1 = \textrm
++% #2 = \rmshape
++% #3 = 10
++% #4 = \mainmagstep
++% #5 = OT1
++%
+ \def\setfont#1#2#3#4#5{%
+   \font#1=\fontprefix#2#3 scaled #4
+   \csname cmap#5\endcsname#1%
+ }
+ % This is what gets called when #5 of \setfont is empty.
+ \let\cmap\gobble
+-% emacs-page end of cmaps
++%
++% (end of cmaps)
+ 
+ % Use cm as the default font prefix.
+ % To specify the font prefix, you must define \fontprefix
+@@ -1766,7 +1790,7 @@
+ \fi
+ % Support font families that don't use the same naming scheme as CM.
+ \def\rmshape{r}
+-\def\rmbshape{bx}               %where the normal face is bold
++\def\rmbshape{bx}               % where the normal face is bold
+ \def\bfshape{b}
+ \def\bxshape{bx}
+ \def\ttshape{tt}
+@@ -1781,8 +1805,7 @@
+ \def\scshape{csc}
+ \def\scbshape{csc}
+ 
+-% Definitions for a main text size of 11pt.  This is the default in
+-% Texinfo.
++% Definitions for a main text size of 11pt.  (The default in Texinfo.)
+ %
+ \def\definetextfontsizexi{%
+ % Text fonts (11.2pt, magstep1).
+@@ -1907,7 +1930,7 @@
+ \textleading = 13.2pt % line spacing for 11pt CM
+ \textfonts            % reset the current fonts
+ \rm
+-} % end of 11pt text font size definitions
++} % end of 11pt text font size definitions, \definetextfontsizexi
+ 
+ 
+ % Definitions to make the main text be 10pt Computer Modern, with
+@@ -2039,7 +2062,7 @@
+ \textleading = 12pt   % line spacing for 10pt CM
+ \textfonts            % reset the current fonts
+ \rm
+-} % end of 10pt text font size definitions
++} % end of 10pt text font size definitions, \definetextfontsizex
+ 
+ 
+ % We provide the user-level command
+@@ -2123,7 +2146,7 @@
+   \let\tenttsl=\secttsl
+   \def\curfontsize{sec}%
+   \def\lsize{subsec}\def\lllsize{reduced}%
+-  \resetmathfonts \setleading{16pt}}
++  \resetmathfonts \setleading{17pt}}
+ \def\subsecfonts{%
+   \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
+   \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
+@@ -2254,8 +2277,6 @@
+ 
+ \gdef\markupsetcodequoteleft{\let`\codequoteleft}
+ \gdef\markupsetcodequoteright{\let'\codequoteright}
+-
+-\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft}
+ }
+ 
+ \let\markupsetuplqcode \markupsetcodequoteleft
+@@ -2264,6 +2285,9 @@
+ \let\markupsetuplqexample \markupsetcodequoteleft
+ \let\markupsetuprqexample \markupsetcodequoteright
+ %
++\let\markupsetuplqkbd     \markupsetcodequoteleft
++\let\markupsetuprqkbd     \markupsetcodequoteright
++%
+ \let\markupsetuplqsamp \markupsetcodequoteleft
+ \let\markupsetuprqsamp \markupsetcodequoteright
+ %
+@@ -2273,8 +2297,6 @@
+ \let\markupsetuplqverbatim \markupsetcodequoteleft
+ \let\markupsetuprqverbatim \markupsetcodequoteright
+ 
+-\let\markupsetuplqkbd \markupsetnoligaturesquoteleft
+-
+ % Allow an option to not use regular directed right quote/apostrophe
+ % (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
+ % The undirected quote is ugly, so don't make it the default, but it
+@@ -2359,13 +2381,14 @@
+   \ifx\next,%
+   \else\ifx\next-%
+   \else\ifx\next.%
++  \else\ifx\next\.%
++  \else\ifx\next\comma%
+   \else\ptexslash
+-  \fi\fi\fi
++  \fi\fi\fi\fi\fi
+   \aftersmartic
+ }
+ 
+-% like \smartslanted except unconditionally uses \ttsl, and no ic.
+-% @var is set to this for defun arguments.
++% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
+ \def\ttslanted#1{{\ttsl #1}}
+ 
+ % @cite is like \smartslanted except unconditionally use \sl.  We never want
+@@ -2430,34 +2453,12 @@
+ % @samp.
+ \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
+ 
+-% definition of @key that produces a lozenge.  Doesn't adjust to text size.
+-%\setfont\keyrm\rmshape{8}{1000}{OT1}
+-%\font\keysy=cmsy9
+-%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
+-%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
+-%    \vbox{\hrule\kern-0.4pt
+-%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
+-%    \kern-0.4pt\hrule}%
+-%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
+-
+-% definition of @key with no lozenge.  If the current font is already
+-% monospace, don't change it; that way, we respect @kbdinputstyle.  But
+-% if it isn't monospace, then use \tt.
+-%
+-\def\key#1{{\setupmarkupstyle{key}%
+-  \nohyphenation
+-  \ifmonospace\else\tt\fi
+-  #1}\null}
+-
+-% ctrl is no longer a Texinfo command.
+-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
++% @indicateurl is \samp, that is, with quotes.
++\let\indicateurl=\samp
+ 
+-% @file, @option are the same as @samp.
+-\let\file=\samp
+-\let\option=\samp
+-
+-% @code is a modification of @t,
+-% which makes spaces the same size as normal in the surrounding text.
++% @code (and similar) prints in typewriter, but with spaces the same
++% size as normal in the surrounding text, without hyphenation, etc.
++% This is a subroutine for that.
+ \def\tclose#1{%
+   {%
+     % Change normal interword space to be same as for the current font.
+@@ -2480,14 +2481,14 @@
+ }
+ 
+ % We *must* turn on hyphenation at `-' and `_' in @code.
++% (But see \codedashfinish below.)
+ % Otherwise, it is too hard to avoid overfull hboxes
+ % in the Emacs manual, the Library manual, etc.
+-
++%
+ % Unfortunately, TeX uses one parameter (\hyphenchar) to control
+ % both hyphenation at - and hyphenation within words.
+ % We must therefore turn them both off (\tclose does that)
+-% and arrange explicitly to hyphenate at a dash.
+-%  -- rms.
++% and arrange explicitly to hyphenate at a dash. -- rms.
+ {
+   \catcode`\-=\active \catcode`\_=\active
+   \catcode`\'=\active \catcode`\`=\active
+@@ -2501,17 +2502,38 @@
+      \let-\codedash
+      \let_\codeunder
+     \else
+-     \let-\realdash
++     \let-\normaldash
+      \let_\realunder
+     \fi
++    % Given -foo (with a single dash), we do not want to allow a break
++    % after the hyphen.
++    \global\let\codedashprev=\codedash
++    %
+     \codex
+   }
++  %
++  \gdef\codedash{\futurelet\next\codedashfinish}
++  \gdef\codedashfinish{%
++    \normaldash % always output the dash character itself.
++    %
++    % Now, output a discretionary to allow a line break, unless
++    % (a) the next character is a -, or
++    % (b) the preceding character is a -.
++    % E.g., given --posix, we do not want to allow a break after either -.
++    % Given --foo-bar, we do want to allow a break between the - and the b.
++    \ifx\next\codedash \else
++      \ifx\codedashprev\codedash
++      \else \discretionary{}{}{}\fi
++    \fi
++    % we need the space after the = for the case when \next itself is a
++    % space token; it would get swallowed otherwise.  As in @code{- a}.
++    \global\let\codedashprev= \next
++  }
+ }
+-
++\def\normaldash{-}
++%
+ \def\codex #1{\tclose{#1}\endgroup}
+ 
+-\def\realdash{-}
+-\def\codedash{-\discretionary{}{}{}}
+ \def\codeunder{%
+   % this is all so @math{@code{var_name}+1} can work.  In math mode, _
+   % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
+@@ -2525,9 +2547,9 @@
+ }
+ 
+ % An additional complication: the above will allow breaks after, e.g.,
+-% each of the four underscores in __typeof__.  This is undesirable in
+-% some manuals, especially if they don't have long identifiers in
+-% general.  @allowcodebreaks provides a way to control this.
++% each of the four underscores in __typeof__.  This is bad.
++% @allowcodebreaks provides a document-level way to turn breaking at -
++% and _ on and off.
+ %
+ \newif\ifallowcodebreaks  \allowcodebreakstrue
+ 
+@@ -2546,37 +2568,28 @@
+   \fi\fi
+ }
+ 
+-% @uref (abbreviation for `urlref') takes an optional (comma-separated)
+-% second argument specifying the text to display and an optional third
+-% arg as text to display instead of (rather than in addition to) the url
+-% itself.  First (mandatory) arg is the url.
+-% (This \urefnobreak definition isn't used now, leaving it for a while
+-% for comparison.)
+-\def\urefnobreak#1{\dourefnobreak #1,,,\finish}
+-\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup
+-  \unsepspaces
+-  \pdfurl{#1}%
+-  \setbox0 = \hbox{\ignorespaces #3}%
+-  \ifdim\wd0 > 0pt
+-    \unhbox0 % third arg given, show only that
+-  \else
+-    \setbox0 = \hbox{\ignorespaces #2}%
+-    \ifdim\wd0 > 0pt
+-      \ifpdf
+-        \unhbox0             % PDF: 2nd arg given, show only it
+-      \else
+-        \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url
+-      \fi
+-    \else
+-      \code{#1}% only url given, so show it
+-    \fi
+-  \fi
+-  \endlink
+-\endgroup}
++% For @command, @env, @file, @option quotes seem unnecessary,
++% so use \code rather than \samp.
++\let\command=\code
++\let\env=\code
++\let\file=\code
++\let\option=\code
+ 
+-% This \urefbreak definition is the active one.
++% @uref (abbreviation for `urlref') aka @url takes an optional
++% (comma-separated) second argument specifying the text to display and
++% an optional third arg as text to display instead of (rather than in
++% addition to) the url itself.  First (mandatory) arg is the url.
++
++% TeX-only option to allow changing PDF output to show only the second
++% arg (if given), and not the url (which is then just the link target).
++\newif\ifurefurlonlylink
++
++% The main macro is \urefbreak, which allows breaking at expected
++% places within the url.  (There used to be another version, which
++% didn't support automatic breaking.)
+ \def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
+ \let\uref=\urefbreak
++%
+ \def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
+ \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
+   \unsepspaces
+@@ -2585,12 +2598,19 @@
+   \ifdim\wd0 > 0pt
+     \unhbox0 % third arg given, show only that
+   \else
+-    \setbox0 = \hbox{\ignorespaces #2}%
++    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
+     \ifdim\wd0 > 0pt
+       \ifpdf
+-        \unhbox0             % PDF: 2nd arg given, show only it
++        \ifurefurlonlylink
++          % PDF plus option to not display url, show just arg
++          \unhbox0
++        \else
++          % PDF, normally display both arg and url for consistency,
++          % visibility, if the pdf is eventually used to print, etc.
++          \unhbox0\ (\urefcode{#1})%
++        \fi
+       \else
+-        \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url
++        \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
+       \fi
+     \else
+       \urefcode{#1}% only url given, so show it
+@@ -2630,8 +2650,10 @@
+ % we put a little stretch before and after the breakable chars, to help
+ % line breaking of long url's.  The unequal skips make look better in
+ % cmtt at least, especially for dots.
+-\def\urefprestretch{\urefprebreak \hskip0pt plus.13em }
+-\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em }
++\def\urefprestretchamount{.13em}
++\def\urefpoststretchamount{.1em}
++\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax}
++\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax}
+ %
+ \def\urefcodeamp{\urefprestretch \&\urefpoststretch}
+ \def\urefcodedot{\urefprestretch .\urefpoststretch}
+@@ -2692,10 +2714,6 @@
+   \let\email=\uref
+ \fi
+ 
+-% @kbd is like @code, except that if the argument is just one @key command,
+-% then @kbd has no effect.
+-\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}}
+-
+ % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
+ %   `example' (@kbd uses ttsl only inside of @example and friends),
+ %   or `code' (@kbd uses normal tty font always).
+@@ -2719,16 +2737,36 @@
+ % Default is `distinct'.
+ \kbdinputstyle distinct
+ 
++% @kbd is like @code, except that if the argument is just one @key command,
++% then @kbd has no effect.
++\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
++
+ \def\xkey{\key}
+-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}%
+-\ifx\one\xkey\ifx\threex\three \key{#2}%
+-\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
+-\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi}
++\def\kbdsub#1#2#3\par{%
++  \def\one{#1}\def\three{#3}\def\threex{??}%
++  \ifx\one\xkey\ifx\threex\three \key{#2}%
++  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
++  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
++}
+ 
+-% For @indicateurl, @env, @command quotes seem unnecessary, so use \code.
+-\let\indicateurl=\code
+-\let\env=\code
+-\let\command=\code
++% definition of @key that produces a lozenge.  Doesn't adjust to text size.
++%\setfont\keyrm\rmshape{8}{1000}{OT1}
++%\font\keysy=cmsy9
++%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
++%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
++%    \vbox{\hrule\kern-0.4pt
++%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
++%    \kern-0.4pt\hrule}%
++%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
++
++% definition of @key with no lozenge.  If the current font is already
++% monospace, don't change it; that way, we respect @kbdinputstyle.  But
++% if it isn't monospace, then use \tt.
++%
++\def\key#1{{\setupmarkupstyle{key}%
++  \nohyphenation
++  \ifmonospace\else\tt\fi
++  #1}\null}
+ 
+ % @clicksequence{File @click{} Open ...}
+ \def\clicksequence#1{\begingroup #1\endgroup}
+@@ -2836,6 +2874,9 @@
+   }
+ }
+ 
++% ctrl is no longer a Texinfo command, but leave this definition for fun.
++\def\ctrl #1{{\tt \rawbackslash \hat}#1}
++
+ % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
+ % Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
+ % except specified as a normal braced arg, so no newlines to worry about.
+@@ -2847,6 +2888,15 @@
+   \def\inlinefmtname{#1}%
+   \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
+ }
++%
++% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
++% FMTNAME is tex, else ELSE-TEXT.
++\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
++\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
++  \def\inlinefmtname{#1}%
++  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
++}
++%
+ % For raw, must switch into @tex before parsing the argument, to avoid
+ % setting catcodes prematurely.  Doing it this way means that, for
+ % example, @inlineraw{html, foo{bar} gets a parse error instead of being
+@@ -2863,6 +2913,23 @@
+   \endgroup % close group opened by \tex.
+ }
+ 
++% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
++%
++\long\def\inlineifset#1{\doinlineifset #1,\finish}
++\long\def\doinlineifset#1,#2,\finish{%
++  \def\inlinevarname{#1}%
++  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
++  \else\ignorespaces#2\fi
++}
++
++% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
++%
++\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
++\long\def\doinlineifclear#1,#2,\finish{%
++  \def\inlinevarname{#1}%
++  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
++}
++
+ 
+ \message{glyphs,}
+ % and logos.
+@@ -3126,12 +3193,17 @@
+   % hopefully nobody will notice/care.
+   \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
+   \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
+-  \ifx\curfontstyle\bfstylename
+-    % bold:
+-    \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
+-  \else
+-    % regular:
+-    \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
++  \ifmonospace
++    % typewriter:
++    \font\thisecfont = ectt\ecsize \space at \nominalsize
++  \else
++    \ifx\curfontstyle\bfstylename
++      % bold:
++      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
++    \else
++      % regular:
++      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
++    \fi
+   \fi
+   \thisecfont
+ }
+@@ -3244,6 +3316,20 @@
+   \finishedtitlepagetrue
+ }
+ 
++% Settings used for typesetting titles: no hyphenation, no indentation,
++% don't worry much about spacing, ragged right.  This should be used
++% inside a \vbox, and fonts need to be set appropriately first.  Because
++% it is always used for titles, nothing else, we call \rmisbold.  \par
++% should be specified before the end of the \vbox, since a vbox is a group.
++%
++\def\raggedtitlesettings{%
++  \rmisbold
++  \hyphenpenalty=10000
++  \parindent=0pt
++  \tolerance=5000
++  \ptexraggedright
++}
++
+ % Macros to be used within @titlepage:
+ 
+ \let\subtitlerm=\tenrm
+@@ -3251,7 +3337,7 @@
+ 
+ \parseargdef\title{%
+   \checkenv\titlepage
+-  \leftline{\titlefonts\rmisbold #1}
++  \vbox{\titlefonts \raggedtitlesettings #1\par}%
+   % print a rule at the page bottom also.
+   \finishedtitlepagefalse
+   \vskip4pt \hrule height 4pt width \hsize \vskip4pt
+@@ -3599,7 +3685,7 @@
+   \parskip=\smallskipamount
+   \ifdim\parskip=0pt \parskip=2pt \fi
+   %
+-  % Try typesetting the item mark that if the document erroneously says
++  % Try typesetting the item mark so that if the document erroneously says
+   % something like @itemize @samp (intending @table), there's an error
+   % right away at the @itemize.  It's not the best error message in the
+   % world, but it's better than leaving it to the @item.  This means if
+@@ -3850,18 +3936,22 @@
+ 
+ % multitable-only commands.
+ %
+-% @headitem starts a heading row, which we typeset in bold.
+-% Assignments have to be global since we are inside the implicit group
+-% of an alignment entry.  \everycr resets \everytab so we don't have to
++% @headitem starts a heading row, which we typeset in bold.  Assignments
++% have to be global since we are inside the implicit group of an
++% alignment entry.  \everycr below resets \everytab so we don't have to
+ % undo it ourselves.
+ \def\headitemfont{\b}% for people to use in the template row; not changeable
+ \def\headitem{%
+   \checkenv\multitable
+   \crcr
++  \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
+   \global\everytab={\bf}% can't use \headitemfont since the parsing differs
+   \the\everytab % for the first item
+ }%
+ %
++% default for tables with no headings.
++\let\headitemcrhook=\relax
++%
+ % A \tab used to include \hskip1sp.  But then the space in a template
+ % line is not enough.  That is bad.  So let's go back to just `&' until
+ % we again encounter the problem the 1sp was intended to solve.
+@@ -3892,15 +3982,15 @@
+   %
+   \everycr = {%
+     \noalign{%
+-      \global\everytab={}%
++      \global\everytab={}% Reset from possible headitem.
+       \global\colcount=0 % Reset the column counter.
+-      % Check for saved footnotes, etc.
++      %
++      % Check for saved footnotes, etc.:
+       \checkinserts
+-      % Keeps underfull box messages off when table breaks over pages.
+-      %\filbreak
+-	% Maybe so, but it also creates really weird page breaks when the
+-	% table breaks over pages. Wouldn't \vfil be better?  Wait until the
+-	% problem manifests itself, so it can be fixed for real --karl.
++      %
++      % Perhaps a \nobreak, then reset:
++      \headitemcrhook
++      \global\let\headitemcrhook=\relax
+     }%
+   }%
+   %
+@@ -4139,7 +4229,7 @@
+ \def\value{\begingroup\makevalueexpandable\valuexxx}
+ \def\valuexxx#1{\expandablevalue{#1}\endgroup}
+ {
+-  \catcode`\- = \active \catcode`\_ = \active
++  \catcode`\-=\active \catcode`\_=\active
+   %
+   \gdef\makevalueexpandable{%
+     \let\value = \expandablevalue
+@@ -4148,7 +4238,7 @@
+     % ..., but we might end up with active ones in the argument if
+     % we're called from @code, as @code{@value{foo-bar_}}, though.
+     % So \let them to their normal equivalents.
+-    \let-\realdash \let_\normalunderscore
++    \let-\normaldash \let_\normalunderscore
+   }
+ }
+ 
+@@ -4160,6 +4250,11 @@
+ % it will fail (although perhaps we could fix that with sufficient work
+ % to do a one-level expansion on the result, instead of complete).
+ %
++% Unfortunately, this has the consequence that when _ is in the *value*
++% of an @set, it does not print properly in the roman fonts (get the cmr
++% dot accent at position 126 instead).  No fix comes to mind, and it's
++% been this way since 2003 or earlier, so just ignore it.
++%
+ \def\expandablevalue#1{%
+   \expandafter\ifx\csname SET#1\endcsname\relax
+     {[No value for ``#1'']}%
+@@ -4172,7 +4267,8 @@
+ % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
+ % with @set.
+ %
+-% To get special treatment of `@end ifset,' call \makeond and the redefine.
++% To get the special treatment we need for `@end ifset,' we call
++% \makecond and then redefine.
+ %
+ \makecond{ifset}
+ \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
+@@ -4188,7 +4284,7 @@
+ }
+ \def\ifsetfail{\doignore{ifset}}
+ 
+-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been
++% @ifclear VAR ... @end executes the `...' iff VAR has never been
+ % defined with @set, or has been undefined with @clear.
+ %
+ % The `\else' inside the `\doifset' parameter is a trick to reuse the
+@@ -4199,6 +4295,35 @@
+ \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
+ \def\ifclearfail{\doignore{ifclear}}
+ 
++% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
++% without the @) is in fact defined.  We can only feasibly check at the
++% TeX level, so something like `mathcode' is going to considered
++% defined even though it is not a Texinfo command.
++%
++\makecond{ifcommanddefined}
++\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
++%
++\def\doifcmddefined#1#2{{%
++    \makevalueexpandable
++    \let\next=\empty
++    \expandafter\ifx\csname #2\endcsname\relax
++      #1% If not defined, \let\next as above.
++    \fi
++    \expandafter
++  }\next
++}
++\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
++
++% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
++\makecond{ifcommandnotdefined}
++\def\ifcommandnotdefined{%
++  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
++\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
++
++% Set the `txicommandconditionals' variable, so documents have a way to
++% test if the @ifcommand...defined conditionals are available.
++\set txicommandconditionals
++
+ % @dircategory CATEGORY  -- specify a category of the dir file
+ % which this file should belong to.  Ignore this in TeX.
+ \let\dircategory=\comment
+@@ -4307,7 +4432,7 @@
+   % complicated, when \tex is in effect and \{ is a \delimiter again.
+   % We can't use \lbracecmd and \rbracecmd because texindex assumes
+   % braces and backslashes are used only as delimiters.  Perhaps we
+-  % should define @lbrace and @rbrace commands a la @comma.
++  % should use @lbracechar and @rbracechar?
+   \def\{{{\tt\char123}}%
+   \def\}{{\tt\char125}}%
+   %
+@@ -4328,8 +4453,7 @@
+   % @end macro
+   % ...
+   % @funindex commtest
+-  %
+-  % The above is not enough to reproduce the bug, but it gives the flavor.
++  % This is not enough to reproduce the bug, but it gives the flavor.
+   %
+   % Sample whatsit resulting:
+   % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
+@@ -4435,6 +4559,7 @@
+   \definedummyword\guillemetright
+   \definedummyword\guilsinglleft
+   \definedummyword\guilsinglright
++  \definedummyword\lbracechar
+   \definedummyword\leq
+   \definedummyword\minus
+   \definedummyword\ogonek
+@@ -4447,6 +4572,7 @@
+   \definedummyword\quoteleft
+   \definedummyword\quoteright
+   \definedummyword\quotesinglbase
++  \definedummyword\rbracechar
+   \definedummyword\result
+   \definedummyword\textdegree
+   %
+@@ -4498,6 +4624,7 @@
+   \definedummyword\t
+   %
+   % Commands that take arguments.
++  \definedummyword\abbr
+   \definedummyword\acronym
+   \definedummyword\anchor
+   \definedummyword\cite
+@@ -4509,7 +4636,9 @@
+   \definedummyword\emph
+   \definedummyword\env
+   \definedummyword\file
++  \definedummyword\image
+   \definedummyword\indicateurl
++  \definedummyword\inforef
+   \definedummyword\kbd
+   \definedummyword\key
+   \definedummyword\math
+@@ -4525,8 +4654,21 @@
+   \definedummyword\verb
+   \definedummyword\w
+   \definedummyword\xref
++  %
++  % Consider:
++  %   @macro mkind{arg1,arg2}
++  %   @cindex \arg2\
++  %   @end macro
++  %   @mkind{foo, bar}
++  % The space after the comma will end up in the temporary definition
++  % that we make for arg2 (see \parsemargdef ff.).  We want all this to be
++  % expanded for the sake of the index, so we end up just seeing "bar".
++  \let\xeatspaces = \eatspaces
+ }
+ 
++% For testing: output @{ and @} in index sort strings as \{ and \}.
++\newif\ifusebracesinindexes
++
+ % \indexnofonts is used when outputting the strings to sort the index
+ % by, and when constructing control sequence names.  It eliminates all
+ % control sequences and just writes whatever the best ASCII sort string
+@@ -4555,8 +4697,16 @@
+   % Unfortunately, texindex is not prepared to handle braces in the
+   % content at all.  So for index sorting, we map @{ and @} to strings
+   % starting with |, since that ASCII character is between ASCII { and }.
+-  \def\{{|a}%
+-  \def\}{|b}%
++  \ifusebracesinindexes
++    \def\lbracechar{\lbracecmd}%
++    \def\rbracechar{\rbracecmd}%
++  \else
++    \def\lbracechar{|a}%
++    \def\rbracechar{|b}%
++  \fi
++  \let\{=\lbracechar
++  \let\}=\rbracechar
++  %
+   %
+   % Non-English letters.
+   \def\AA{AA}%
+@@ -4732,10 +4882,9 @@
+ %
+ % ..., ready, GO:
+ %
+-\def\safewhatsit#1{%
+-\ifhmode
++\def\safewhatsit#1{\ifhmode
+   #1%
+-\else
++ \else
+   % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
+   \whatsitskip = \lastskip
+   \edef\lastskipmacro{\the\lastskip}%
+@@ -4759,7 +4908,6 @@
+     % to re-insert the same penalty (values >10000 are used for various
+     % signals); since we just inserted a non-discardable item, any
+     % following glue (such as a \parskip) would be a breakpoint.  For example:
+-    %
+     %   @deffn deffn-whatever
+     %   @vindex index-whatever
+     %   Description.
+@@ -4772,8 +4920,7 @@
+     % (the whatsit from the \write), so we must insert a \nobreak.
+     \nobreak\vskip\whatsitskip
+   \fi
+-\fi
+-}
++\fi}
+ 
+ % The index entry written in the file actually looks like
+ %  \entry {sortstring}{page}{topic}
+@@ -5520,14 +5667,6 @@
+ 
+ % Define @majorheading, @heading and @subheading
+ 
+-% NOTE on use of \vbox for chapter headings, section headings, and such:
+-%       1) We use \vbox rather than the earlier \line to permit
+-%          overlong headings to fold.
+-%       2) \hyphenpenalty is set to 10000 because hyphenation in a
+-%          heading is obnoxious; this forbids it.
+-%       3) Likewise, headings look best if no \parindent is used, and
+-%          if justification is not attempted.  Hence \raggedright.
+-
+ \def\majorheading{%
+   {\advance\chapheadingskip by 10pt \chapbreak }%
+   \parsearg\chapheadingzzz
+@@ -5535,10 +5674,8 @@
+ 
+ \def\chapheading{\chapbreak \parsearg\chapheadingzzz}
+ \def\chapheadingzzz#1{%
+-  {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+-                    \parindent=0pt\ptexraggedright
+-                    \rmisbold #1\hfill}}%
+-  \bigskip \par\penalty 200\relax
++  \vbox{\chapfonts \raggedtitlesettings #1\par}%
++  \nobreak\bigskip \nobreak
+   \suppressfirstparagraphindent
+ }
+ 
+@@ -5697,8 +5834,7 @@
+     %
+     % Typeset the actual heading.
+     \nobreak % Avoid page breaks at the interline glue.
+-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
+-          \hangindent=\wd0 \centerparametersmaybe
++    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
+           \unhbox0 #1\par}%
+   }%
+   \nobreak\bigskip % no page break after a chapter title
+@@ -5720,18 +5856,18 @@
+ \def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
+ %
+ \def\unnchfopen #1{%
+-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+-                       \parindent=0pt\ptexraggedright
+-                       \rmisbold #1\hfill}}\bigskip \par\nobreak
++  \chapoddpage
++  \vbox{\chapfonts \raggedtitlesettings #1\par}%
++  \nobreak\bigskip\nobreak
+ }
+ \def\chfopen #1#2{\chapoddpage {\chapfonts
+ \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
+ \par\penalty 5000 %
+ }
+ \def\centerchfopen #1{%
+-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000
+-                       \parindent=0pt
+-                       \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak
++  \chapoddpage
++  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
++  \nobreak\bigskip \nobreak
+ }
+ \def\CHAPFopen{%
+   \global\let\chapmacro=\chfopen
+@@ -5822,7 +5958,7 @@
+     %
+     % Now the second mark, after the heading break.  No break points
+     % between here and the heading.
+-    \let\prevsectiondefs=\lastsectiondefs
++    \global\let\prevsectiondefs=\lastsectiondefs
+     \domark
+     %
+     % Only insert the space after the number if we have a section number.
+@@ -5876,14 +6012,15 @@
+   %
+   % We'll almost certainly start a paragraph next, so don't let that
+   % glue accumulate.  (Not a breakpoint because it's preceded by a
+-  % discardable item.)
++  % discardable item.)  However, when a paragraph is not started next
++  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
++  % or the negative glue will cause weirdly wrong output, typically
++  % obscuring the section heading with something else.
+   \vskip-\parskip
+   %
+-  % This is purely so the last item on the list is a known \penalty >
+-  % 10000.  This is so \startdefun can avoid allowing breakpoints after
+-  % section headings.  Otherwise, it would insert a valid breakpoint between:
+-  %   @section sec-whatever
+-  %   @deffn def-whatever
++  % This is so the last item on the main vertical list is a known
++  % \penalty > 10000, so \startdefun, etc., can recognize the situation
++  % and do the needful.
+   \penalty 10001
+ }
+ 
+@@ -6188,8 +6325,8 @@
+   \catcode `\|=\other
+   \catcode `\<=\other
+   \catcode `\>=\other
+-  \catcode`\`=\other
+-  \catcode`\'=\other
++  \catcode `\`=\other
++  \catcode `\'=\other
+   \escapechar=`\\
+   %
+   % ' is active in math mode (mathcode"8000).  So reset it, and all our
+@@ -6213,7 +6350,7 @@
+   \let\/=\ptexslash
+   \let\*=\ptexstar
+   \let\t=\ptext
+-  \expandafter \let\csname top\endcsname=\ptextop  % outer
++  \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
+   \let\frenchspacing=\plainfrenchspacing
+   %
+   \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
+@@ -6297,13 +6434,11 @@
+ 				% side, and for 6pt waste from
+ 				% each corner char, and rule thickness
+   \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
+-  % Flag to tell @lisp, etc., not to narrow margin.
+-  \let\nonarrowing = t%
+   %
+   % If this cartouche directly follows a sectioning command, we need the
+   % \parskip glue (backspaced over by default) or the cartouche can
+   % collide with the section heading.
+-  \ifnum\lastpenalty>10000 \vskip\parskip \fi
++  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
+   %
+   \vbox\bgroup
+       \baselineskip=0pt\parskip=0pt\lineskip=0pt
+@@ -6338,7 +6473,7 @@
+ \newdimen\nonfillparindent
+ \def\nonfillstart{%
+   \aboveenvbreak
+-  \hfuzz = 12pt % Don't be fussy
++  \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
+   \sepspaces % Make spaces be word-separators rather than space tokens.
+   \let\par = \lisppar % don't ignore blank lines
+   \obeylines % each line of input is a line of output
+@@ -6465,9 +6600,13 @@
+ 
+ 
+ % @raggedright does more-or-less normal line breaking but no right
+-% justification.  From plain.tex.
++% justification.  From plain.tex.  Don't stretch around special
++% characters in urls in this environment, since the stretch at the right
++% should be enough.
+ \envdef\raggedright{%
+-  \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax
++  \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
++  \def\urefprestretchamount{0pt}%
++  \def\urefpoststretchamount{0pt}%
+ }
+ \let\Eraggedright\par
+ 
+@@ -6496,16 +6635,9 @@
+ \makedispenvdef{quotation}{\quotationstart}
+ %
+ \def\quotationstart{%
+-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
+-  \parindent=0pt
+-  %
+-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
++  \indentedblockstart % same as \indentedblock, but increase right margin too.
+   \ifx\nonarrowing\relax
+-    \advance\leftskip by \lispnarrowing
+     \advance\rightskip by \lispnarrowing
+-    \exdentamount = \lispnarrowing
+-  \else
+-    \let\nonarrowing = \relax
+   \fi
+   \parsearg\quotationlabel
+ }
+@@ -6531,6 +6663,32 @@
+   \fi
+ }
+ 
++% @indentedblock is like @quotation, but indents only on the left and
++% has no optional argument.
++%
++\makedispenvdef{indentedblock}{\indentedblockstart}
++%
++\def\indentedblockstart{%
++  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
++  \parindent=0pt
++  %
++  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
++  \ifx\nonarrowing\relax
++    \advance\leftskip by \lispnarrowing
++    \exdentamount = \lispnarrowing
++  \else
++    \let\nonarrowing = \relax
++  \fi
++}
++
++% Keep a nonzero parskip for the environment, since we're doing normal filling.
++%
++\def\Eindentedblock{%
++  \par
++  {\parskip=0pt \afterenvbreak}%
++}
++\def\Esmallindentedblock{\Eindentedblock}
++
+ 
+ % LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
+ % If we want to allow any <char> as delimiter,
+@@ -7009,7 +7167,10 @@
+   \df \sl \hyphenchar\font=0
+   %
+   % On the other hand, if an argument has two dashes (for instance), we
+-  % want a way to get ttsl.  Let's try @var for that.
++  % want a way to get ttsl.  We used to recommend @var for that, so
++  % leave the code in, but it's strange for @var to lead to typewriter.
++  % Nowadays we recommend @code, since the difference between a ttsl hyphen
++  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
+   \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
+   #1%
+   \sl\hyphenchar\font=45
+@@ -7338,7 +7499,7 @@
+ 
+ % Parse the optional {params} list.  Set up \paramno and \paramlist
+ % so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
+-% in the params list to some hook where the argument si to be expanded.  If
++% in the params list to some hook where the argument is to be expanded.  If
+ % there are less than 10 arguments that hook is to be replaced by ##N where N
+ % is the position in that list, that is to say the macro arguments are to be
+ % defined `a la TeX in the macro body.
+@@ -7793,7 +7954,7 @@
+   \fi\fi
+ }
+ 
+-
++% 
+ % @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
+ % the node name, #2 the name of the Info cross-reference, #3 the printed
+ % node name, #4 the name of the Info file, #5 the name of the printed
+@@ -7803,16 +7964,21 @@
+ \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
+ \def\ref#1{\xrefX[#1,,,,,,,]}
+ %
+-\newbox\topbox
++\newbox\toprefbox
+ \newbox\printedrefnamebox
++\newbox\infofilenamebox
+ \newbox\printedmanualbox
+ %
+ \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
+   \unsepspaces
+   %
++  % Get args without leading/trailing spaces.
+   \def\printedrefname{\ignorespaces #3}%
+   \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
+   %
++  \def\infofilename{\ignorespaces #4}%
++  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
++  %
+   \def\printedmanual{\ignorespaces #5}%
+   \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
+   %
+@@ -7845,12 +8011,20 @@
+   \ifpdf
+     {\indexnofonts
+      \turnoffactive
++     \makevalueexpandable
+      % This expands tokens, so do it after making catcode changes, so _
+-     % etc. don't get their TeX definitions.
++     % etc. don't get their TeX definitions.  This ignores all spaces in
++     % #4, including (wrongly) those in the middle of the filename.
+      \getfilename{#4}%
+      %
++     % This (wrongly) does not take account of leading or trailing
++     % spaces in #1, which should be ignored.
+      \edef\pdfxrefdest{#1}%
+-     \txiescapepdf\pdfxrefdest
++     \ifx\pdfxrefdest\empty
++       \def\pdfxrefdest{Top}% no empty targets
++     \else
++       \txiescapepdf\pdfxrefdest  % escape PDF special chars
++     \fi
+      %
+      \leavevmode
+      \startlink attr{/Border [0 0 0]}%
+@@ -7883,7 +8057,7 @@
+       \printedrefname
+     \fi
+     %
+-    % if the user also gave the printed manual name (fifth arg), append
++    % If the user also gave the printed manual name (fifth arg), append
+     % "in MANUALNAME".
+     \ifdim \wd\printedmanualbox > 0pt
+       \space \putwordin{} \cite{\printedmanual}%
+@@ -7898,32 +8072,20 @@
+     % this is a loss.  Therefore, we give the text of the node name
+     % again, so it is as if TeX is seeing it for the first time.
+     %
+-    % Cross-manual reference.  Only include the "Section ``foo'' in" if
+-    % the foo is neither missing or Top.  Thus, @xref{,,,foo,The Foo Manual}
+-    % outputs simply "see The Foo Manual".
+     \ifdim \wd\printedmanualbox > 0pt
+-      % What is the 7sp about?  The idea is that we also want to omit
+-      % the Section part if we would be printing "Top", since they are
+-      % clearly trying to refer to the whole manual.  But, this being
+-      % TeX, we can't easily compare strings while ignoring the possible
+-      % spaces before and after in the input.  By adding the arbitrary
+-      % 7sp, we make it much less likely that a real node name would
+-      % happen to have the same width as "Top" (e.g., in a monospaced font).
+-      % I hope it will never happen in practice.
++      % Cross-manual reference with a printed manual name.
+       %
+-      % For the same basic reason, we retypeset the "Top" at every
+-      % reference, since the current font is indeterminate.
++      \crossmanualxref{\cite{\printedmanual\unskip}}%
++    %
++    \else\ifdim \wd\infofilenamebox > 0pt
++      % Cross-manual reference with only an info filename (arg 4), no
++      % printed manual name (arg 5).  This is essentially the same as
++      % the case above; we output the filename, since we have nothing else.
+       %
+-      \setbox\topbox = \hbox{Top\kern7sp}%
+-      \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
+-      \ifdim \wd2 > 7sp
+-        \ifdim \wd2 = \wd\topbox \else
+-          \putwordSection{} ``\printedrefname'' \putwordin{}\space
+-        \fi
+-      \fi
+-      \cite{\printedmanual}%
++      \crossmanualxref{\code{\infofilename\unskip}}%
++    %
+     \else
+-      % Reference in this manual.
++      % Reference within this manual.
+       %
+       % _ (for example) has to be the character _ for the purposes of the
+       % control sequence corresponding to the node, but it has to expand
+@@ -7944,11 +8106,37 @@
+       %
+       % output the `page 3'.
+       \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
+-    \fi
++    \fi\fi
+   \fi
+   \endlink
+ \endgroup}
+ 
++% Output a cross-manual xref to #1.  Used just above (twice).
++%
++% Only include the text "Section ``foo'' in" if the foo is neither
++% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
++% "see The Foo Manual", the idea being to refer to the whole manual.
++%
++% But, this being TeX, we can't easily compare our node name against the
++% string "Top" while ignoring the possible spaces before and after in
++% the input.  By adding the arbitrary 7sp below, we make it much less
++% likely that a real node name would have the same width as "Top" (e.g.,
++% in a monospaced font).  Hopefully it will never happen in practice.
++%
++% For the same basic reason, we retypeset the "Top" at every
++% reference, since the current font is indeterminate.
++%
++\def\crossmanualxref#1{%
++  \setbox\toprefbox = \hbox{Top\kern7sp}%
++  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
++  \ifdim \wd2 > 7sp  % nonempty?
++    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
++      \putwordSection{} ``\printedrefname'' \putwordin{}\space
++    \fi
++  \fi
++  #1%
++}
++
+ % This macro is called from \xrefX for the `[nodename]' part of xref
+ % output.  It's a separate macro only so it can be changed more easily,
+ % since square brackets don't work well in some documents.  Particularly
+@@ -8173,6 +8361,7 @@
+ \gdef\footnote{%
+   \let\indent=\ptexindent
+   \let\noindent=\ptexnoindent
++  %
+   \global\advance\footnoteno by \@ne
+   \edef\thisfootno{$^{\the\footnoteno}$}%
+   %
+@@ -8196,6 +8385,11 @@
+ %
+ \gdef\dofootnote{%
+   \insert\footins\bgroup
++  %
++  % Nested footnotes are not supported in TeX, that would take a lot
++  % more work.  (\startsavinginserts does not suffice.)
++  \let\footnote=\errfootnote
++  %
+   % We want to typeset this text as a normal paragraph, even if the
+   % footnote reference occurs in (for example) a display environment.
+   % So reset some parameters.
+@@ -8233,13 +8427,19 @@
+ }
+ }%end \catcode `\@=11
+ 
++\def\errfootnote{%
++  \errhelp=\EMsimple
++  \errmessage{Nested footnotes not supported in texinfo.tex,
++    even though they work in makeinfo; sorry}
++}
++
+ % In case a @footnote appears in a vbox, save the footnote text and create
+ % the real \insert just after the vbox finished.  Otherwise, the insertion
+ % would be lost.
+ % Similarly, if a @footnote appears inside an alignment, save the footnote
+ % text to a box and make the \insert when a row of the table is finished.
+ % And the same can be done for other insert classes.  --kasal, 16nov03.
+-
++%
+ % Replace the \insert primitive by a cheating macro.
+ % Deeper inside, just make sure that the saved insertions are not spilled
+ % out prematurely.
+@@ -8316,7 +8516,7 @@
+   it from ftp://tug.org/tex/epsf.tex.}
+ %
+ \def\image#1{%
+-  \ifx\epsfbox\thisiundefined
++  \ifx\epsfbox\thisisundefined
+     \ifwarnednoepsf \else
+       \errhelp = \noepsfhelp
+       \errmessage{epsf.tex not found, images will be ignored}%
+@@ -8340,6 +8540,13 @@
+   % If the image is by itself, center it.
+   \ifvmode
+     \imagevmodetrue
++  \else \ifx\centersub\centerV
++    % for @center @image, we need a vbox so we can have our vertical space
++    \imagevmodetrue
++    \vbox\bgroup % vbox has better behavior than vtop herev
++  \fi\fi
++  %
++  \ifimagevmode
+     \nobreak\medskip
+     % Usually we'll have text after the image which will insert
+     % \parskip glue, so insert it here too to equalize the space
+@@ -8349,9 +8556,13 @@
+   \fi
+   %
+   % Leave vertical mode so that indentation from an enclosing
+-  % environment such as @quotation is respected.  On the other hand, if
+-  % it's at the top level, we don't want the normal paragraph indentation.
+-  \noindent
++  %  environment such as @quotation is respected.
++  % However, if we're at the top level, we don't want the
++  %  normal paragraph indentation.
++  % On the other hand, if we are in the case of @center @image, we don't
++  %  want to start a paragraph, which will create a hsize-width box and
++  %  eradicate the centering.
++  \ifx\centersub\centerV\else \noindent \fi
+   %
+   % Output the image.
+   \ifpdf
+@@ -8363,7 +8574,10 @@
+     \epsfbox{#1.eps}%
+   \fi
+   %
+-  \ifimagevmode \medskip \fi  % space after the standalone image
++  \ifimagevmode
++    \medskip  % space after a standalone image
++  \fi
++  \ifx\centersub\centerV \egroup \fi
+ \endgroup}
+ 
+ 
+@@ -9793,11 +10007,9 @@
+ \catcode`\"=\active
+ \def\activedoublequote{{\tt\char34}}
+ \let"=\activedoublequote
+-\catcode`\~=\active
+-\def~{{\tt\char126}}
++\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
+ \chardef\hat=`\^
+-\catcode`\^=\active
+-\def^{{\tt \hat}}
++\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat
+ 
+ \catcode`\_=\active
+ \def_{\ifusingtt\normalunderscore\_}
+@@ -9807,16 +10019,26 @@
+ 
+ \catcode`\|=\active
+ \def|{{\tt\char124}}
++
+ \chardef \less=`\<
+-\catcode`\<=\active
+-\def<{{\tt \less}}
++\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
+ \chardef \gtr=`\>
+-\catcode`\>=\active
+-\def>{{\tt \gtr}}
+-\catcode`\+=\active
+-\def+{{\tt \char 43}}
+-\catcode`\$=\active
+-\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
++\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
++\catcode`\+=\active \def+{{\tt \char 43}}
++\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
++
++% used for headline/footline in the output routine, in case the page
++% breaks in the middle of an @tex block.
++\def\texinfochars{%
++  \let< = \activeless
++  \let> = \activegtr
++  \let~ = \activetilde
++  \let^ = \activehat
++  \markupsetuplqdefault \markupsetuprqdefault
++  \let\b = \strong
++  \let\i = \smartitalic
++  % in principle, all other definitions in \tex have to be undone too.
++}
+ 
+ % If a .fmt file is being used, characters that might appear in a file
+ % name cannot be active until we have parsed the command line.
+@@ -9866,22 +10088,26 @@
+ @gdef@otherbackslash{@let\=@realbackslash}
+ 
+ % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
+-% the literal character `\'.
++% the literal character `\'.  Also revert - to its normal character, in
++% case the active - from code has slipped in.
+ %
+-@def@normalturnoffactive{%
+-  @let"=@normaldoublequote
+-  @let$=@normaldollar %$ font-lock fix
+-  @let+=@normalplus
+-  @let<=@normalless
+-  @let>=@normalgreater
+-  @let\=@normalbackslash
+-  @let^=@normalcaret
+-  @let_=@normalunderscore
+-  @let|=@normalverticalbar
+-  @let~=@normaltilde
+-  @markupsetuplqdefault
+-  @markupsetuprqdefault
+-  @unsepspaces
++{@catcode`- = @active
++ @gdef@normalturnoffactive{%
++   @let-=@normaldash
++   @let"=@normaldoublequote
++   @let$=@normaldollar %$ font-lock fix
++   @let+=@normalplus
++   @let<=@normalless
++   @let>=@normalgreater
++   @let\=@normalbackslash
++   @let^=@normalcaret
++   @let_=@normalunderscore
++   @let|=@normalverticalbar
++   @let~=@normaltilde
++   @markupsetuplqdefault
++   @markupsetuprqdefault
++   @unsepspaces
++ }
+ }
+ 
+ % Make _ and + \other characters, temporarily.
+diff -urN glibc-2.17-c758a686/manual/threads.texi glibc-2.17-c758a686/manual/threads.texi
+--- glibc-2.17-c758a686/manual/threads.texi	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/manual/threads.texi	2014-09-12 16:10:06.042792724 -0400
+@@ -0,0 +1,254 @@
++@node POSIX Threads
++@c @node POSIX Threads, Internal Probes, Cryptographic Functions, Top
++@chapter POSIX Threads
++@c %MENU% POSIX Threads
++@cindex pthreads
++
++This chapter describes the @glibcadj{} POSIX Thread implementation.
++
++@menu
++* Thread-specific Data::          Support for creating and
++				  managing thread-specific data
++* Non-POSIX Extensions::          Additional functions to extend
++				  POSIX Thread functionality
++@end menu
++
++@node Thread-specific Data
++@section Thread-specific Data
++
++The @glibcadj{} implements functions to allow users to create and manage
++data specific to a thread.  Such data may be destroyed at thread exit,
++if a destructor is provided.  The following functions are defined:
++
++@comment pthread.h
++@comment POSIX
++@deftypefun int pthread_key_create (pthread_key_t *@var{key}, void (*@var{destructor})(void*))
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c pthread_key_create ok
++@c  KEY_UNUSED ok
++@c  KEY_USABLE ok
++Create a thread-specific data key for the calling thread, referenced by
++@var{key}.
++
++Objects declared with the C++11 @code{thread_local} keyword are destroyed
++before thread-specific data, so they should not be used in thread-specific
++data destructors or even as members of the thread-specific data, since the
++latter is passed as an argument to the destructor function.
++@end deftypefun
++
++@comment pthread.h
++@comment POSIX
++@deftypefun int pthread_key_delete (pthread_key_t @var{key})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c pthread_key_delete ok
++@c   This uses atomic compare and exchange to increment the seq number
++@c   after testing it's not a KEY_UNUSED seq number.
++@c  KEY_UNUSED dup ok
++Destroy the thread-specific data @var{key} in the calling thread.  The
++destructor for the thread-specific data is not called during destruction, nor
++is it called during thread exit.
++@end deftypefun
++
++@comment pthread.h
++@comment POSIX
++@deftypefun void *pthread_getspecific (pthread_key_t @var{key})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c pthread_getspecific ok
++Return the thread-specific data associated with @var{key} in the calling
++thread.
++@end deftypefun
++
++@comment pthread.h
++@comment POSIX
++@deftypefun int pthread_setspecific (pthread_key_t @var{key}, const void *@var{value})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
++@c pthread_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem
++@c   a level2 block may be allocated by a signal handler after
++@c   another call already made a decision to allocate it, thus losing
++@c   the allocated value.  the seq number is updated before the
++@c   value, which might cause an earlier-generation value to seem
++@c   current if setspecific is cancelled or interrupted by a signal
++@c  KEY_UNUSED ok
++@c  calloc dup @ascuheap @acsmem
++Associate the thread-specific @var{value} with @var{key} in the calling thread.
++@end deftypefun
++
++
++@node Non-POSIX Extensions
++@section Non-POSIX Extensions
++
++In addition to implementing the POSIX API for threads, @theglibc{} provides
++additional functions and interfaces to provide functionality not specified in
++the standard.
++
++@menu
++* Default Thread Attributes::             Setting default attributes for
++					  threads in a process.
++@end menu
++
++@node Default Thread Attributes
++@subsection Setting Process-wide defaults for thread attributes
++
++@Theglibc{} provides non-standard API functions to set and get the default
++attributes used in the creation of threads in a process.
++
++@comment pthread.h
++@comment GNU
++@deftypefun int pthread_getattr_default_np (pthread_attr_t *@var{attr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c Takes lock around read from default_pthread_attr.
++Get the default attribute values and set @var{attr} to match.  This
++function returns @math{0} on success and a non-zero error code on
++failure.
++@end deftypefun
++
++@comment pthread.h
++@comment GNU
++@deftypefun int pthread_setattr_default_np (pthread_attr_t *@var{attr})
++@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
++@c pthread_setattr_default_np @ascuheap @asulock @aculock @acsmem
++@c  check_sched_policy_attr ok
++@c  check_sched_priority_attr ok
++@c   sched_get_priority_min dup ok
++@c   sched_get_priority_max dup ok
++@c  check_cpuset_attr ok
++@c   determine_cpumask_size ok
++@c  check_stacksize_attr ok
++@c  lll_lock @asulock @aculock
++@c  free dup @ascuheap @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  memcpy dup ok
++@c  lll_unlock @asulock @aculock
++Set the default attribute values to match the values in @var{attr}.  The
++function returns @math{0} on success and a non-zero error code on failure.
++The following error codes are defined for this function:
++
++@table @code
++@item EINVAL
++At least one of the values in @var{attr} does not qualify as valid for the
++attributes or the stack address is set in the attribute.
++@item ENOMEM
++The system does not have sufficient memory.
++@end table
++@end deftypefun
++
++@c FIXME these are undocumented:
++@c pthread_atfork
++@c pthread_attr_destroy
++@c pthread_attr_getaffinity_np
++@c pthread_attr_getdetachstate
++@c pthread_attr_getguardsize
++@c pthread_attr_getinheritsched
++@c pthread_attr_getschedparam
++@c pthread_attr_getschedpolicy
++@c pthread_attr_getscope
++@c pthread_attr_getstack
++@c pthread_attr_getstackaddr
++@c pthread_attr_getstacksize
++@c pthread_attr_init
++@c pthread_attr_setaffinity_np
++@c pthread_attr_setdetachstate
++@c pthread_attr_setguardsize
++@c pthread_attr_setinheritsched
++@c pthread_attr_setschedparam
++@c pthread_attr_setschedpolicy
++@c pthread_attr_setscope
++@c pthread_attr_setstack
++@c pthread_attr_setstackaddr
++@c pthread_attr_setstacksize
++@c pthread_barrierattr_destroy
++@c pthread_barrierattr_getpshared
++@c pthread_barrierattr_init
++@c pthread_barrierattr_setpshared
++@c pthread_barrier_destroy
++@c pthread_barrier_init
++@c pthread_barrier_wait
++@c pthread_cancel
++@c pthread_cleanup_push
++@c pthread_cleanup_pop
++@c pthread_condattr_destroy
++@c pthread_condattr_getclock
++@c pthread_condattr_getpshared
++@c pthread_condattr_init
++@c pthread_condattr_setclock
++@c pthread_condattr_setpshared
++@c pthread_cond_broadcast
++@c pthread_cond_destroy
++@c pthread_cond_init
++@c pthread_cond_signal
++@c pthread_cond_timedwait
++@c pthread_cond_wait
++@c pthread_create
++@c pthread_detach
++@c pthread_equal
++@c pthread_exit
++@c pthread_getaffinity_np
++@c pthread_getattr_np
++@c pthread_getconcurrency
++@c pthread_getcpuclockid
++@c pthread_getname_np
++@c pthread_getschedparam
++@c pthread_join
++@c pthread_kill
++@c pthread_kill_other_threads_np
++@c pthread_mutexattr_destroy
++@c pthread_mutexattr_getkind_np
++@c pthread_mutexattr_getprioceiling
++@c pthread_mutexattr_getprotocol
++@c pthread_mutexattr_getpshared
++@c pthread_mutexattr_getrobust
++@c pthread_mutexattr_getrobust_np
++@c pthread_mutexattr_gettype
++@c pthread_mutexattr_init
++@c pthread_mutexattr_setkind_np
++@c pthread_mutexattr_setprioceiling
++@c pthread_mutexattr_setprotocol
++@c pthread_mutexattr_setpshared
++@c pthread_mutexattr_setrobust
++@c pthread_mutexattr_setrobust_np
++@c pthread_mutexattr_settype
++@c pthread_mutex_consistent
++@c pthread_mutex_consistent_np
++@c pthread_mutex_destroy
++@c pthread_mutex_getprioceiling
++@c pthread_mutex_init
++@c pthread_mutex_lock
++@c pthread_mutex_setprioceiling
++@c pthread_mutex_timedlock
++@c pthread_mutex_trylock
++@c pthread_mutex_unlock
++@c pthread_once
++@c pthread_rwlockattr_destroy
++@c pthread_rwlockattr_getkind_np
++@c pthread_rwlockattr_getpshared
++@c pthread_rwlockattr_init
++@c pthread_rwlockattr_setkind_np
++@c pthread_rwlockattr_setpshared
++@c pthread_rwlock_destroy
++@c pthread_rwlock_init
++@c pthread_rwlock_rdlock
++@c pthread_rwlock_timedrdlock
++@c pthread_rwlock_timedwrlock
++@c pthread_rwlock_tryrdlock
++@c pthread_rwlock_trywrlock
++@c pthread_rwlock_unlock
++@c pthread_rwlock_wrlock
++@c pthread_self
++@c pthread_setaffinity_np
++@c pthread_setcancelstate
++@c pthread_setcanceltype
++@c pthread_setconcurrency
++@c pthread_setname_np
++@c pthread_setschedparam
++@c pthread_setschedprio
++@c pthread_sigmask
++@c pthread_sigqueue
++@c pthread_spin_destroy
++@c pthread_spin_init
++@c pthread_spin_lock
++@c pthread_spin_trylock
++@c pthread_spin_unlock
++@c pthread_testcancel
++@c pthread_timedjoin_np
++@c pthread_tryjoin_np
++@c pthread_yield
+diff -urN glibc-2.17-c758a686/manual/time.texi glibc-2.17-c758a686/manual/time.texi
+--- glibc-2.17-c758a686/manual/time.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/time.texi	2014-09-12 16:10:06.044792719 -0400
+@@ -79,6 +79,7 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun double difftime (time_t @var{time1}, time_t @var{time0})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{difftime} function returns the number of seconds of elapsed
+ time between calendar time @var{time1} and calendar time @var{time0}, as
+ a value of type @code{double}.  The difference ignores leap seconds
+@@ -246,6 +247,12 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun clock_t clock (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On Hurd, this calls task_info twice and adds user and system time
++@c from both basic and thread time info structs.  On generic posix,
++@c calls times and adds utime and stime.  On bsd, calls getrusage and
++@c safely converts stime and utime to clock.  On linux, calls
++@c clock_gettime.
+ This function returns the calling process' current CPU time.  If the CPU
+ time is not available or cannot be represented, @code{clock} returns the
+ value @code{(clock_t)(-1)}.
+@@ -310,6 +317,12 @@
+ @comment sys/times.h
+ @comment POSIX.1
+ @deftypefun clock_t times (struct tms *@var{buffer})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On HURD, this calls task_info twice, for basic and thread times info,
++@c adding user and system times into tms, and then gettimeofday, to
++@c compute the real time.  On BSD, it calls getclktck, getrusage (twice)
++@c and time.  On Linux, it's a syscall with special handling to account
++@c for clock_t counts that look like error values.
+ The @code{times} function stores the processor time information for
+ the calling process in @var{buffer}.
+ 
+@@ -409,6 +422,7 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun time_t time (time_t *@var{result})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{time} function returns the current calendar time as a value of
+ type @code{time_t}.  If the argument @var{result} is not a null pointer,
+ the calendar time value is also stored in @code{*@var{result}}.  If the
+@@ -420,7 +434,9 @@
+ @c Linux.
+ @comment time.h
+ @comment SVID, XPG
+-@deftypefun int stime (time_t *@var{newtime})
++@deftypefun int stime (const time_t *@var{newtime})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On unix, this is implemented in terms of settimeofday.
+ @code{stime} sets the system clock, i.e., it tells the system that the
+ current calendar time is @var{newtime}, where @code{newtime} is
+ interpreted as described in the above definition of @code{time_t}.
+@@ -475,6 +491,12 @@
+ @comment sys/time.h
+ @comment BSD
+ @deftypefun int gettimeofday (struct timeval *@var{tp}, struct timezone *@var{tzp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On most GNU/Linux systems this is a direct syscall, but the posix/
++@c implementation (not used on GNU/Linux or GNU/Hurd) relies on time and
++@c localtime_r, saving and restoring tzname in an unsafe manner.
++@c On some GNU/Linux variants, ifunc resolvers are used in shared libc
++@c for vdso resolution.  ifunc-vdso-revisit.
+ The @code{gettimeofday} function returns the current calendar time as
+ the elapsed time since the epoch in the @code{struct timeval} structure
+ indicated by @var{tp}.  (@pxref{Elapsed Time} for a description of
+@@ -498,6 +520,9 @@
+ @comment sys/time.h
+ @comment BSD
+ @deftypefun int settimeofday (const struct timeval *@var{tp}, const struct timezone *@var{tzp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On HURD, it calls host_set_time with a privileged port.  On other
++@c unix systems, it's a syscall.
+ The @code{settimeofday} function sets the current calendar time in the
+ system clock according to the arguments.  As for @code{gettimeofday},
+ the calendar time is represented as the elapsed time since the epoch.
+@@ -539,6 +564,10 @@
+ @comment sys/time.h
+ @comment BSD
+ @deftypefun int adjtime (const struct timeval *@var{delta}, struct timeval *@var{olddelta})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On hurd and mach, call host_adjust_time with a privileged port.  On
++@c Linux, it's implemented in terms of adjtimex.  On other unixen, it's
++@c a syscall.
+ This function speeds up or slows down the system clock in order to make
+ a gradual adjustment.  This ensures that the calendar time reported by
+ the system clock is always monotonically increasing, which might not
+@@ -577,6 +606,8 @@
+ @comment sys/timex.h
+ @comment GNU
+ @deftypefun int adjtimex (struct timex *@var{timex})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c It's a syscall, only available on linux.
+ 
+ @code{adjtimex} is functionally identical to @code{ntp_adjtime}.
+ @xref{High Accuracy Clock}.
+@@ -674,6 +705,10 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun {struct tm *} localtime (const time_t *@var{time})
++@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c Calls tz_convert with a static buffer.
++@c localtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+ The @code{localtime} function converts the simple time pointed to by
+ @var{time} to broken-down time representation, expressed relative to the
+ user's specified time zone.
+@@ -687,9 +722,8 @@
+ as a broken-down time; typically this is because the year cannot fit into
+ an @code{int}.
+ 
+-Calling @code{localtime} has one other effect: it sets the variable
+-@code{tzname} with information about the current time zone.  @xref{Time
+-Zone Functions}.
++Calling @code{localtime} also sets the current time zone as if
++@code{tzset} were called.  @xref{Time Zone Functions}.
+ @end deftypefun
+ 
+ Using the @code{localtime} function is a big problem in multi-threaded
+@@ -699,6 +733,87 @@
+ @comment time.h
+ @comment POSIX.1c
+ @deftypefun {struct tm *} localtime_r (const time_t *@var{time}, struct tm *@var{resultp})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c localtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  tz_convert(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   libc_lock_lock dup @asulock @aculock
++@c   tzset_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c     always called with tzset_lock held
++@c     sets static is_initialized before initialization;
++@c     reads and sets old_tz; sets tz_rules.
++@c     some of the issues only apply on the first call.
++@c     subsequent calls only trigger these when called by localtime;
++@c     otherwise, they're ok.
++@c    getenv dup @mtsenv
++@c    strcmp dup ok
++@c    strdup @ascuheap
++@c    tzfile_read @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c     memcmp dup ok
++@c     strstr dup ok
++@c     getenv dup @mtsenv
++@c     asprintf dup @mtslocale @ascuheap @acsmem
++@c     stat64 dup ok
++@c     fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c     fileno dup ok
++@c     fstat64 dup ok
++@c     fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c     free dup @ascuheap @acsmem
++@c     fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive]
++@c     fread_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
++@c     memcpy dup ok
++@c     decode ok
++@c      bswap_32 dup ok
++@c     fseek dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
++@c     ftello dup ok [no @mtasurace:stream @asucorrupt @acucorrupt]
++@c     malloc dup @ascuheap @acsmem
++@c     decode64 ok
++@c      bswap_64 dup ok
++@c     getc_unlocked ok [no @mtasurace:stream @asucorrupt @acucorrupt]
++@c     tzstring dup @ascuheap @acsmem
++@c     compute_tzname_max dup ok [guarded by tzset_lock]
++@c    memset dup ok
++@c    update_vars ok [guarded by tzset_lock]
++@c      sets daylight, timezone, tzname and tzname_cur_max;
++@c      called only with tzset_lock held, unless tzset_parse_tz
++@c      (internal, but not static) gets called by users; given the its
++@c      double-underscore-prefixed name, this interface violation could
++@c      be regarded as undefined behavior.
++@c     strlen ok
++@c    tzset_parse_tz @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c     sscanf dup @mtslocale @ascuheap @acsmem
++@c     isalnum dup @mtsenv
++@c     tzstring @ascuheap @acsmem
++@c       reads and changes tzstring_list without synchronization, but
++@c       only called with tzset_lock held (save for interface violations)
++@c      strlen dup ok
++@c      malloc dup @ascuheap @acsmem
++@c      strcpy dup ok
++@c     isdigit dup @mtslocale
++@c     compute_offset ok
++@c     tzfile_default @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c       sets tzname, timezone, types, zone_names, rule_*off, etc; no guards
++@c      strlen dup ok
++@c      tzfile_read dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c      mempcpy dup ok
++@c      compute_tzname_max ok [if guarded by tzset_lock]
++@c        iterates over zone_names; no guards
++@c     free dup @ascuheap @acsmem
++@c     strtoul dup @mtslocale
++@c     update_vars dup ok
++@c   tzfile_compute(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c     sets tzname; no guards.  with !use_localtime, as in gmtime, it's ok
++@c    tzstring dup @acsuheap @acsmem
++@c    tzset_parse_tz dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    offtime dup ok
++@c    tz_compute dup ok
++@c    strcmp dup ok
++@c   offtime ok
++@c    isleap dup ok
++@c   tz_compute ok
++@c    compute_change ok
++@c     isleap ok
++@c   libc_lock_unlock dup @aculock
++
+ The @code{localtime_r} function works just like the @code{localtime}
+ function.  It takes a pointer to a variable containing a simple time
+ and converts it to the broken-down time format.
+@@ -715,6 +830,9 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun {struct tm *} gmtime (const time_t *@var{time})
++@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c gmtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+ This function is similar to @code{localtime}, except that the broken-down
+ time is expressed as Coordinated Universal Time (UTC) (formerly called
+ Greenwich Mean Time (GMT)) rather than relative to a local time zone.
+@@ -728,6 +846,15 @@
+ @comment time.h
+ @comment POSIX.1c
+ @deftypefun {struct tm *} gmtime_r (const time_t *@var{time}, struct tm *@var{resultp})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c You'd think tz_convert could avoid some safety issues with
++@c !use_localtime, but no such luck: tzset_internal will always bring
++@c about all possible AS and AC problems when it's first called.
++@c Calling any of localtime,gmtime_r once would run the initialization
++@c and avoid the heap, mem and fd issues in gmtime* in subsequent calls,
++@c but the unsafe locking would remain.
++@c gmtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  tz_convert(gmtime_r) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+ This function is similar to @code{localtime_r}, except that it converts
+ just like @code{gmtime} the given time as Coordinated Universal Time.
+ 
+@@ -739,30 +866,58 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun time_t mktime (struct tm *@var{brokentime})
+-The @code{mktime} function is used to convert a broken-down time structure
+-to a simple time representation.  It also ``normalizes'' the contents of
+-the broken-down time structure, by filling in the day of week and day of
+-year based on the other date and time components.
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c mktime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   passes a static localtime_offset to mktime_internal; it is read
++@c   once, used as an initial guess, and updated at the end, but not
++@c   used except as a guess for subsequent calls, so it should be safe.
++@c   Even though a compiler might delay the load and perform it multiple
++@c   times (bug 16346), there are at least two unconditional uses of the
++@c   auto variable in which the first load is stored, separated by a
++@c   call to an external function, and a conditional change of the
++@c   variable before the external call, so refraining from allocating a
++@c   local variable at the first load would be a very bad optimization.
++@c  tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  mktime_internal(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   ydhms_diff ok
++@c   ranged_convert(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    *convert = localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    time_t_avg dup ok
++@c   guess_time_tm dup ok
++@c    ydhms_diff dup ok
++@c    time_t_add_ok ok
++@c     time_t_avg ok
++@c   isdst_differ ok
++@c   time_t_int_add_ok ok
++The @code{mktime} function converts a broken-down time structure to a
++simple time representation.  It also normalizes the contents of the
++broken-down time structure, and fills in some components based on the
++values of the others.
+ 
+ The @code{mktime} function ignores the specified contents of the
+-@code{tm_wday} and @code{tm_yday} members of the broken-down time
++@code{tm_wday}, @code{tm_yday}, @code{tm_gmtoff}, and @code{tm_zone}
++members of the broken-down time
+ structure.  It uses the values of the other components to determine the
+ calendar time; it's permissible for these components to have
+ unnormalized values outside their normal ranges.  The last thing that
+ @code{mktime} does is adjust the components of the @var{brokentime}
+-structure (including the @code{tm_wday} and @code{tm_yday}).
++structure, including the members that were initially ignored.
+ 
+ If the specified broken-down time cannot be represented as a simple time,
+ @code{mktime} returns a value of @code{(time_t)(-1)} and does not modify
+ the contents of @var{brokentime}.
+ 
+-Calling @code{mktime} also sets the variable @code{tzname} with
+-information about the current time zone.  @xref{Time Zone Functions}.
++Calling @code{mktime} also sets the current time zone as if
++@code{tzset} were called; @code{mktime} uses this information instead
++of @var{brokentime}'s initial @code{tm_gmtoff} and @code{tm_zone}
++members.  @xref{Time Zone Functions}.
+ @end deftypefun
+ 
+ @comment time.h
+ @comment ???
+ @deftypefun time_t timelocal (struct tm *@var{brokentime})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c Alias to mktime.
+ 
+ @code{timelocal} is functionally identical to @code{mktime}, but more
+ mnemonically named.  Note that it is the inverse of the @code{localtime}
+@@ -776,6 +931,19 @@
+ @comment time.h
+ @comment ???
+ @deftypefun time_t timegm (struct tm *@var{brokentime})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c timegm @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   gmtime_offset triggers the same caveats as localtime_offset in mktime.
++@c   although gmtime_r, as called by mktime, might save some issues,
++@c   tzset calls tzset_internal with always, which forces
++@c   reinitialization, so all issues may arise.
++@c  tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  mktime_internal(gmtime_r) @asulock @aculock
++@c ..gmtime_r @asulock @aculock
++@c    ... dup ok
++@c    tz_convert(!use_localtime) @asulock @aculock
++@c     ... dup @asulock @aculock
++@c     tzfile_compute(!use_localtime) ok
+ 
+ @code{timegm} is functionally identical to @code{mktime} except it
+ always takes the input values to be Coordinated Universal Time (UTC)
+@@ -837,6 +1005,8 @@
+ @comment sys/timex.h
+ @comment GNU
+ @deftypefun int ntp_gettime (struct ntptimeval *@var{tptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Wrapper for adjtimex.
+ The @code{ntp_gettime} function sets the structure pointed to by
+ @var{tptr} to current values.  The elements of the structure afterwards
+ contain the values the timer implementation in the kernel assumes.  They
+@@ -954,6 +1124,8 @@
+ @comment sys/timex.h
+ @comment GNU
+ @deftypefun int ntp_adjtime (struct timex *@var{tptr})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Alias to adjtimex syscall.
+ The @code{ntp_adjtime} function sets the structure specified by
+ @var{tptr} to current values.
+ 
+@@ -1008,6 +1180,13 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun {char *} asctime (const struct tm *@var{brokentime})
++@safety{@prelim{}@mtunsafe{@mtasurace{:asctime} @mtslocale{}}@asunsafe{}@acsafe{}}
++@c asctime @mtasurace:asctime @mtslocale
++@c   Uses a static buffer.
++@c  asctime_internal @mtslocale
++@c   snprintf dup @mtslocale [no @acsuheap @acsmem]
++@c   ab_day_name @mtslocale
++@c   ab_month_name @mtslocale
+ The @code{asctime} function converts the broken-down time value that
+ @var{brokentime} points to into a string in a standard format:
+ 
+@@ -1031,6 +1210,9 @@
+ @comment time.h
+ @comment POSIX.1c
+ @deftypefun {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
++@c asctime_r @mtslocale
++@c  asctime_internal dup @mtslocale
+ This function is similar to @code{asctime} but instead of placing the
+ result in a static buffer it writes the string in the buffer pointed to
+ by the parameter @var{buffer}.  This buffer should have room
+@@ -1045,6 +1227,10 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun {char *} ctime (const time_t *@var{time})
++@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtasurace{:asctime} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c ctime @mtasurace:tmbuf @mtasurace:asctime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  localtime dup @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  asctime dup @mtasurace:asctime @mtslocale
+ The @code{ctime} function is similar to @code{asctime}, except that you
+ specify the calendar time argument as a @code{time_t} simple time value
+ rather than in broken-down local time format.  It is equivalent to
+@@ -1053,13 +1239,17 @@
+ asctime (localtime (@var{time}))
+ @end smallexample
+ 
+-@code{ctime} sets the variable @code{tzname}, because @code{localtime}
+-does so.  @xref{Time Zone Functions}.
++Calling @code{ctime} also sets the current time zone as if
++@code{tzset} were called.  @xref{Time Zone Functions}.
+ @end deftypefun
+ 
+ @comment time.h
+ @comment POSIX.1c
+ @deftypefun {char *} ctime_r (const time_t *@var{time}, char *@var{buffer})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c ctime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  asctime_r dup @mtslocale
+ This function is similar to @code{ctime}, but places the result in the
+ string pointed to by @var{buffer}.  It is equivalent to (written using
+ gcc extensions, @pxref{Statement Exprs,,,gcc,Porting and Using gcc}):
+@@ -1077,17 +1267,75 @@
+ @comment time.h
+ @comment ISO
+ @deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c strftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  strftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   strftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    add ok
++@c     memset_zero dup ok
++@c     memset_space dup ok
++@c    strlen dup ok
++@c    mbrlen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps]
++@c    mbsinit dup ok
++@c    cpy ok
++@c     add dup ok
++@c     memcpy_lowcase ok
++@c      TOLOWER ok
++@c       tolower_l ok
++@c     memcpy_uppcase ok
++@c      TOUPPER ok
++@c       toupper_l ok
++@c     MEMCPY ok
++@c      memcpy dup ok
++@c    ISDIGIT ok
++@c    STRLEN ok
++@c     strlen dup ok
++@c    strftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    TOUPPER dup ok
++@c    nl_get_era_entry @ascuheap @asulock @acsmem @aculock
++@c     nl_init_era_entries @ascuheap @asulock @acsmem @aculock
++@c      libc_rwlock_wrlock dup @asulock @aculock
++@c      malloc dup @ascuheap @acsmem
++@c      memset dup ok
++@c      free dup @ascuheap @acsmem
++@c      realloc dup @ascuheap @acsmem
++@c      memcpy dup ok
++@c      strchr dup ok
++@c      wcschr dup ok
++@c      libc_rwlock_unlock dup @asulock @aculock
++@c     ERA_DATE_CMP ok
++@c    DO_NUMBER ok
++@c    DO_NUMBER_SPACEPAD ok
++@c    nl_get_alt_digit @ascuheap @asulock @acsmem @aculock
++@c     libc_rwlock_wrlock dup @asulock @aculock
++@c     nl_init_alt_digit @ascuheap @acsmem
++@c      malloc dup @ascuheap @acsmem
++@c      memset dup ok
++@c      strchr dup ok
++@c     libc_rwlock_unlock dup @aculock
++@c    memset_space ok
++@c     memset dup ok
++@c    memset_zero ok
++@c     memset dup ok
++@c    mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    iso_week_days ok
++@c    isleap ok
++@c    tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    tm_diff ok
+ This function is similar to the @code{sprintf} function (@pxref{Formatted
+ Input}), but the conversion specifications that can appear in the format
+ template @var{template} are specialized for printing components of the date
+ and time @var{brokentime} according to the locale currently specified for
+-time conversion (@pxref{Locales}).
++time conversion (@pxref{Locales}) and the current time zone
++(@pxref{Time Zone Functions}).
+ 
+ Ordinary characters appearing in the @var{template} are copied to the
+ output string @var{s}; this can include multibyte character sequences.
+ Conversion specifiers are introduced by a @samp{%} character, followed
+ by an optional flag which can be one of the following.  These flags
+-are all GNU extensions. The first three affect only the output of
++are all GNU extensions.  The first three affect only the output of
+ numbers:
+ 
+ @table @code
+@@ -1392,9 +1640,10 @@
+ If @var{s} is a null pointer, @code{strftime} does not actually write
+ anything, but instead returns the number of characters it would have written.
+ 
+-According to POSIX.1 every call to @code{strftime} implies a call to
+-@code{tzset}.  So the contents of the environment variable @code{TZ}
+-is examined before any output is produced.
++Calling @code{strftime} also sets the current time zone as if
++@code{tzset} were called; @code{strftime} uses this information
++instead of @var{brokentime}'s @code{tm_gmtoff} and @code{tm_zone}
++members.  @xref{Time Zone Functions}.
+ 
+ For an example of @code{strftime}, see @ref{Time Functions Example}.
+ @end deftypefun
+@@ -1402,6 +1651,53 @@
+ @comment time.h
+ @comment ISO/Amend1
+ @deftypefun size_t wcsftime (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, const struct tm *@var{brokentime})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}}
++@c wcsftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c  wcsftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c   wcsftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    add ok
++@c     memset_zero dup ok
++@c     memset_space dup ok
++@c    wcslen dup ok
++@c    cpy ok
++@c     add dup ok
++@c     memcpy_lowcase ok
++@c      TOLOWER ok
++@c       towlower_l dup ok
++@c     memcpy_uppcase ok
++@c      TOUPPER ok
++@c       towupper_l dup ok
++@c     MEMCPY ok
++@c      wmemcpy dup ok
++@c    widen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c     memset dup ok
++@c     mbsrtowcs_l @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps]
++@c    ISDIGIT ok
++@c    STRLEN ok
++@c     wcslen dup ok
++@c    wcsftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd
++@c    TOUPPER dup ok
++@c    nl_get_era_entry dup @ascuheap @asulock @acsmem @aculock
++@c    DO_NUMBER ok
++@c    DO_NUMBER_SPACEPAD ok
++@c    nl_get_walt_digit dup @ascuheap @asulock @acsmem @aculock
++@c     libc_rwlock_wrlock dup @asulock @aculock
++@c     nl_init_alt_digit dup @ascuheap @acsmem
++@c     malloc dup @ascuheap @acsmem
++@c     memset dup ok
++@c     wcschr dup ok
++@c     libc_rwlock_unlock dup @aculock
++@c    memset_space ok
++@c     wmemset dup ok
++@c    memset_zero ok
++@c     wmemset dup ok
++@c    mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    iso_week_days ok
++@c    isleap ok
++@c    tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    tm_diff ok
+ The @code{wcsftime} function is equivalent to the @code{strftime}
+ function with the difference that it operates on wide character
+ strings.  The buffer where the result is stored, pointed to by @var{s},
+@@ -1452,6 +1748,32 @@
+ @comment time.h
+ @comment XPG4
+ @deftypefun {char *} strptime (const char *@var{s}, const char *@var{fmt}, struct tm *@var{tp})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c strptime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  strptime_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   memset dup ok
++@c   ISSPACE ok
++@c    isspace_l dup ok
++@c   match_char ok
++@c   match_string ok
++@c    strlen dup ok
++@c    strncasecmp_l dup ok
++@c   strcmp dup ok
++@c   recursive @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c    strptime_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   get_number ok
++@c    ISSPACE dup ok
++@c   localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   nl_select_era_entry @ascuheap @asulock @acsmem @aculock
++@c    nl_init_era_entries dup @ascuheap @asulock @acsmem @aculock
++@c   get_alt_number dup @ascuheap @asulock @acsmem @aculock
++@c    nl_parse_alt_digit dup @ascuheap @asulock @acsmem @aculock
++@c     libc_rwlock_wrlock dup @asulock @aculock
++@c     nl_init_alt_digit dup @ascuheap @acsmem
++@c     libc_rwlock_unlock dup @aculock
++@c    get_number dup ok
++@c   day_of_the_week ok
++@c   day_of_the_year ok
+ The @code{strptime} function parses the input string @var{s} according
+ to the format string @var{fmt} and stores its results in the
+ structure @var{tp}.
+@@ -1865,6 +2187,9 @@
+ @comment time.h
+ @comment Unix98
+ @deftypefun {struct tm *} getdate (const char *@var{string})
++@safety{@prelim{}@mtunsafe{@mtasurace{:getdate} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c getdate @mtasurace:getdate @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  getdate_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+ The interface to @code{getdate} is the simplest possible for a function
+ to parse a string and return the value.  @var{string} is the input
+ string and the result is returned in a statically-allocated variable.
+@@ -1976,6 +2301,30 @@
+ @comment time.h
+ @comment GNU
+ @deftypefun int getdate_r (const char *@var{string}, struct tm *@var{tp})
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c getdate_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  getenv dup @mtsenv
++@c  stat64 dup ok
++@c  access dup ok
++@c  fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c  fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive]
++@c  isspace dup @mtslocale
++@c  strlen dup ok
++@c  malloc dup @ascuheap @acsmem
++@c  fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  memcpy dup ok
++@c  getline dup @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt, exclusive]
++@c  strptime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  feof_unlocked dup ok
++@c  free dup @ascuheap @acsmem
++@c  ferror_unlocked dup dup ok
++@c  time dup ok
++@c  localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  first_wday @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c   memset dup ok
++@c   mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  check_mday ok
++@c  mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
+ The @code{getdate_r} function is the reentrant counterpart of
+ @code{getdate}.  It does not use the global variable @code{getdate_err}
+ to signal an error, but instead returns an error code.  The same error
+@@ -2037,7 +2386,7 @@
+ [@code{+}|@code{-}]@var{hh}[@code{:}@var{mm}[@code{:}@var{ss}]].  This
+ is positive if the local time zone is west of the Prime Meridian and
+ negative if it is east.  The hour must be between @code{0} and
+-@code{23}, and the minute and seconds between @code{0} and @code{59}.
++@code{24}, and the minute and seconds between @code{0} and @code{59}.
+ 
+ For example, here is how we would specify Eastern Standard Time, but
+ without any Daylight Saving Time alternative:
+@@ -2082,17 +2431,51 @@
+ 
+ The @var{time} fields specify when, in the local time currently in
+ effect, the change to the other time occurs.  If omitted, the default is
+-@code{02:00:00}.
+-
+-For example, here is how you would specify the Eastern time zone in the
+-United States, including the appropriate Daylight Saving Time and its dates
+-of applicability.  The normal offset from UTC is 5 hours; since this is
++@code{02:00:00}.  The hours part of the time fields can range from
++@minus{}167 through 167; this is an extension to POSIX.1, which allows
++only the range 0 through 24.
++
++Here are some example @code{TZ} values, including the appropriate
++Daylight Saving Time and its dates of applicability.  In North
++American Eastern Standard Time (EST) and Eastern Daylight Time (EDT),
++the normal offset from UTC is 5 hours; since this is
+ west of the prime meridian, the sign is positive.  Summer time begins on
+-the first Sunday in April at 2:00am, and ends on the last Sunday in October
++March's second Sunday at 2:00am, and ends on November's first Sunday
+ at 2:00am.
+ 
+ @smallexample
+-EST+5EDT,M4.1.0/2,M10.5.0/2
++EST+5EDT,M3.2.0/2,M11.1.0/2
++@end smallexample
++
++Israel Standard Time (IST) and Israel Daylight Time (IDT) are 2 hours
++ahead of the prime meridian in winter, springing forward an hour on
++March's fourth Thursday at 26:00 (i.e., 02:00 on the first Friday on or
++after March 23), and falling back on October's last Sunday at 02:00.
++
++@smallexample
++IST-2IDT,M3.4.4/26,M10.5.0
++@end smallexample
++
++Western Argentina Summer Time (WARST) is 3 hours behind the prime
++meridian all year.  There is a dummy fall-back transition on December
++31 at 25:00 daylight saving time (i.e., 24:00 standard time,
++equivalent to January 1 at 00:00 standard time), and a simultaneous
++spring-forward transition on January 1 at 00:00 standard time, so
++daylight saving time is in effect all year and the initial @code{WART}
++is a placeholder.
++
++@smallexample
++WART4WARST,J1/0,J365/25
++@end smallexample
++
++Western Greenland Time (WGT) and Western Greenland Summer Time (WGST)
++are 3 hours behind UTC in the winter.  Its clocks follow the European
++Union rules of springing forward by one hour on March's last Sunday at
++01:00 UTC (@minus{}02:00 local time) and falling back on October's
++last Sunday at 01:00 UTC (@minus{}01:00 local time).
++
++@smallexample
++WGT3WGST,M3.5.0/-2,M10.5.0/-1
+ @end smallexample
+ 
+ The schedule of Daylight Saving Time in any particular jurisdiction has
+@@ -2177,6 +2560,11 @@
+ @comment time.h
+ @comment POSIX.1
+ @deftypefun void tzset (void)
++@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c tzset @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  tzset_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_lock_unlock dup @aculock
+ The @code{tzset} function initializes the @code{tzname} variable from
+ the value of the @code{TZ} environment variable.  It is not usually
+ necessary for your program to call this function, because it is called
+@@ -2314,7 +2702,16 @@
+ 
+ @comment sys/time.h
+ @comment BSD
+-@deftypefun int setitimer (int @var{which}, struct itimerval *@var{new}, struct itimerval *@var{old})
++@deftypefun int setitimer (int @var{which}, const struct itimerval *@var{new}, struct itimerval *@var{old})
++@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}}
++@c This function is marked with @mtstimer because the same set of timers
++@c is shared by all threads of a process, so calling it in one thread
++@c may interfere with timers set by another thread.  This interference
++@c is not regarded as destructive, because the interface specification
++@c makes this overriding while returning the previous value the expected
++@c behavior, and the kernel will serialize concurrent calls so that the
++@c last one prevails, with each call getting the timer information from
++@c the timer installed by the previous call in that serialization.
+ The @code{setitimer} function sets the timer specified by @var{which}
+ according to @var{new}.  The @var{which} argument can have a value of
+ @code{ITIMER_REAL}, @code{ITIMER_VIRTUAL}, or @code{ITIMER_PROF}.
+@@ -2335,6 +2732,7 @@
+ @comment sys/time.h
+ @comment BSD
+ @deftypefun int getitimer (int @var{which}, struct itimerval *@var{old})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getitimer} function stores information about the timer specified
+ by @var{which} in the structure pointed at by @var{old}.
+ 
+@@ -2367,6 +2765,8 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {unsigned int} alarm (unsigned int @var{seconds})
++@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}}
++@c Wrapper for setitimer.
+ The @code{alarm} function sets the real-time timer to expire in
+ @var{seconds} seconds.  If you want to cancel any existing alarm, you
+ can do this by calling @code{alarm} with a @var{seconds} argument of
+@@ -2426,6 +2826,10 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {unsigned int} sleep (unsigned int @var{seconds})
++@safety{@prelim{}@mtunsafe{@mtascusig{:SIGCHLD/linux}}@asunsafe{}@acunsafe{}}
++@c On Mach, it uses ports and calls time.  On generic posix, it calls
++@c nanosleep.  On Linux, it temporarily blocks SIGCHLD, which is MT- and
++@c AS-Unsafe, and in a way that makes it AC-Unsafe (C-unsafe, even!).
+ The @code{sleep} function waits for @var{seconds} or until a signal
+ is delivered, whichever happens first.
+ 
+@@ -2470,6 +2874,9 @@
+ @comment time.h
+ @comment POSIX.1
+ @deftypefun int nanosleep (const struct timespec *@var{requested_time}, struct timespec *@var{remaining})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c On Linux, it's a syscall.  On Mach, it calls gettimeofday and uses
++@c ports.
+ If resolution to seconds is not enough the @code{nanosleep} function can
+ be used.  As the name suggests the sleep interval can be specified in
+ nanoseconds.  The actual elapsed time of the sleep interval might be
+diff -urN glibc-2.17-c758a686/manual/tsort.awk glibc-2.17-c758a686/manual/tsort.awk
+--- glibc-2.17-c758a686/manual/tsort.awk	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/tsort.awk	2014-09-12 16:10:06.043792722 -0400
+@@ -1,6 +1,6 @@
+ #! /usr/bin/awk -f
+ # Generate topologically sorted list of manual chapters.
+-# (C) Copyright 1998, 1999 Free Software Foundation, Inc.
++# Copyright (C) 1998-2014 Free Software Foundation, Inc.
+ # Written by Ulrich Drepper <drepper@cygnus.com>, 1998.
+ 
+ BEGIN {
+diff -urN glibc-2.17-c758a686/manual/users.texi glibc-2.17-c758a686/manual/users.texi
+--- glibc-2.17-c758a686/manual/users.texi	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/manual/users.texi	2014-09-12 16:10:06.043792722 -0400
+@@ -71,7 +71,7 @@
+ @cindex group ID
+ Users are classified in @dfn{groups}.  Each user name belongs to one
+ @dfn{default group} and may also belong to any number of
+-@dfn{supplementary groups}. Users who are members of the same group can
++@dfn{supplementary groups}.  Users who are members of the same group can
+ share resources (such as files) that are not accessible to users who are
+ not a member of that group.  Each group has a @dfn{group name} and
+ @dfn{group ID}.  @xref{Group Database}, for how to find information
+@@ -221,30 +221,37 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun uid_t getuid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c Atomic syscall, except on hurd, where it takes a lock within a hurd
++@c critical section.
+ The @code{getuid} function returns the real user ID of the process.
+ @end deftypefun
+ 
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun gid_t getgid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getgid} function returns the real group ID of the process.
+ @end deftypefun
+ 
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun uid_t geteuid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{geteuid} function returns the effective user ID of the process.
+ @end deftypefun
+ 
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun gid_t getegid (void)
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getegid} function returns the effective group ID of the process.
+ @end deftypefun
+ 
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int getgroups (int @var{count}, gid_t *@var{groups})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ The @code{getgroups} function is used to inquire about the supplementary
+ group IDs of the process.  Up to @var{count} of these group IDs are
+ stored in the array @var{groups}; the return value from the function is
+@@ -291,6 +298,34 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int seteuid (uid_t @var{neweuid})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c seteuid @asulock @aculock
++@c  INLINE_SETXID_SYSCALL @asulock @aculock
++@c    This may be just a unix syscall, or the ugliness below used by
++@c    nptl to propagate the syscall to all cloned processes used to
++@c    implement threads.
++@c   nptl_setxid @asulock @aculock
++@c     while holding the stack_alloc_lock, mark with SETXID_BITMASK all
++@c     threads that are not exiting, signal them until no thread remains
++@c     marked, clear the marks and run the syscall, then release the lock.
++@c    lll_lock @asulock @aculock
++@c    list_for_each ok
++@c    list_entry ok
++@c    setxid_mark_thread ok
++@c      if a thread is initializing, wait for it to be cloned.
++@c      mark it with SETXID_BITMASK if it's not exiting
++@c    setxid_signal_thread ok
++@c      if a thread is marked with SETXID_BITMASK,
++@c        send it the SIGSETXID signal
++@c    setxid_unmark_thread ok
++@c      clear SETXID_BITMASK and release the futex if SETXID_BITMASK is
++@c      set.
++@c    <syscall> ok
++@c    lll_unlock @aculock
++@c
++@c  sighandler_setxid ok
++@c    issue the syscall, clear SETXID_BITMASK, release the futex, and
++@c    wake up the signaller loop if the counter reached zero.
+ This function sets the effective user ID of a process to @var{neweuid},
+ provided that the process is allowed to change its effective user ID.  A
+ privileged process (effective user ID zero) can change its effective
+@@ -318,6 +353,9 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int setuid (uid_t @var{newuid})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c setuid @asulock @aculock
++@c  INLINE_SETXID_SYSCALL dup @asulock @aculock
+ If the calling process is privileged, this function sets both the real
+ and effective user ID of the process to @var{newuid}.  It also deletes
+ the file user ID of the process, if any.  @var{newuid} may be any
+@@ -334,6 +372,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int setreuid (uid_t @var{ruid}, uid_t @var{euid})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c setreuid @asulock @aculock
++@c  INLINE_SETXID_SYSCALL dup @asulock @aculock
+ This function sets the real user ID of the process to @var{ruid} and the
+ effective user ID to @var{euid}.  If @var{ruid} is @code{-1}, it means
+ not to change the real user ID; likewise if @var{euid} is @code{-1}, it
+@@ -369,6 +410,9 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int setegid (gid_t @var{newgid})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c setegid @asulock @aculock
++@c  INLINE_SETXID_SYSCALL dup @asulock @aculock
+ This function sets the effective group ID of the process to
+ @var{newgid}, provided that the process is allowed to change its group
+ ID.  Just as with @code{seteuid}, if the process is privileged it may
+@@ -388,6 +432,9 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun int setgid (gid_t @var{newgid})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c setgid @asulock @aculock
++@c  INLINE_SETXID_SYSCALL dup @asulock @aculock
+ This function sets both the real and effective group ID of the process
+ to @var{newgid}, provided that the process is privileged.  It also
+ deletes the file group ID, if any.
+@@ -402,6 +449,9 @@
+ @comment unistd.h
+ @comment BSD
+ @deftypefun int setregid (gid_t @var{rgid}, gid_t @var{egid})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c setregid @asulock @aculock
++@c  INLINE_SETXID_SYSCALL dup @asulock @aculock
+ This function sets the real group ID of the process to @var{rgid} and
+ the effective group ID to @var{egid}.  If @var{rgid} is @code{-1}, it
+ means not to change the real group ID; likewise if @var{egid} is
+@@ -437,7 +487,10 @@
+ 
+ @comment grp.h
+ @comment BSD
+-@deftypefun int setgroups (size_t @var{count}, gid_t *@var{groups})
++@deftypefun int setgroups (size_t @var{count}, const gid_t *@var{groups})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
++@c setgroups @asulock @aculock
++@c  INLINE_SETXID_SYSCALL dup @asulock @aculock
+ This function sets the process's supplementary group IDs.  It can only
+ be called from privileged processes.  The @var{count} argument specifies
+ the number of group IDs in the array @var{groups}.
+@@ -455,6 +508,36 @@
+ @comment grp.h
+ @comment BSD
+ @deftypefun int initgroups (const char *@var{user}, gid_t @var{group})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @acsmem{} @acsfd{} @aculock{}}}
++@c initgroups @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  sysconf(_SC_NGROUPS_MAX) dup @acsfd
++@c  MIN dup ok
++@c  malloc @ascuheap @acsmem
++@c  internal_getgrouplist @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nscd_getgrouplist @ascuheap @acsfd @acsmem
++@c    nscd_get_map_ref dup @ascuheap @acsfd @acsmem
++@c    nscd_cache_search dup ok
++@c    nscd_open_socket dup @acsfd
++@c    realloc dup @ascuheap @acsmem
++@c    readall dup ok
++@c    memcpy dup ok
++@c    close_not_cancel_no_status dup @acsfd
++@c    nscd_drop_map_ref dup @ascuheap @acsmem
++@c    nscd_unmap dup @ascuheap @acsmem
++@c   nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
++@c   nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   compat_call @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    sysconf(_SC_GETGR_R_SIZE_MAX) ok
++@c    nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *getgrent_fct @ascuplugin
++@c    *setgrent_fct @ascuplugin
++@c    *endgrent_fct @ascuplugin
++@c    realloc dup @ascuheap @acsmem
++@c    free dup @ascuheap @acsmem
++@c   *initgroups_dyn_fct @ascuplugin
++@c   nss_next_action dup ok
++@c  setgroups dup @asulock @aculock
++@c  free dup @ascuheap @acsmem
+ The @code{initgroups} function sets the process's supplementary group
+ IDs to be the normal default for the user name @var{user}.  The group
+ @var{group} is automatically included.
+@@ -476,6 +559,13 @@
+ @comment grp.h
+ @comment BSD
+ @deftypefun int getgrouplist (const char *@var{user}, gid_t @var{group}, gid_t *@var{groups}, int *@var{ngroups})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @acsmem{} @acsfd{} @aculock{}}}
++@c getgrouplist @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  MAX dup ok
++@c  malloc dup @ascuheap @acsmem
++@c  internal_getgrouplist dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  memcpy dup ok
++@c  free dup @ascuheap @acsmem
+ The @code{getgrouplist} function scans the group database for all the
+ groups @var{user} belongs to.  Up to *@var{ngroups} group IDs
+ corresponding to these groups are stored in the array @var{groups}; the
+@@ -740,7 +830,7 @@
+ Be cautious about using the @code{exec} functions in combination with
+ changing the effective user ID.  Don't let users of your program execute
+ arbitrary programs under a changed user ID.  Executing a shell is
+-especially bad news. Less obviously, the @code{execlp} and @code{execvp}
++especially bad news.  Less obviously, the @code{execlp} and @code{execvp}
+ functions are a potential risk (since the program they execute depends
+ on the user's @code{PATH} environment variable).
+ 
+@@ -792,6 +882,41 @@
+ @comment unistd.h
+ @comment POSIX.1
+ @deftypefun {char *} getlogin (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:getlogin} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getlogin (linux) @mtasurace:getlogin @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getlogin_r_loginuid dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getlogin_fd0 (unix) @mtasurace:getlogin @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem
++@c    uses static buffer name => @mtasurace:getlogin
++@c   ttyname_r dup @ascuheap @acsmem @acsfd
++@c   strncpy dup ok
++@c   setutent dup @mtasurace:utent @asulock @aculock @acsfd
++@c   getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c   endutent dup @mtasurace:utent @asulock @aculock
++@c   libc_lock_unlock dup ok
++@c   strlen dup ok
++@c   memcpy dup ok
++@c
++@c getlogin_r (linux) @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getlogin_r_loginuid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   open_not_cancel_2 dup @acsfd
++@c   read_not_cancel dup ok
++@c   close_not_cancel_no_status dup @acsfd
++@c   strtoul @mtslocale
++@c   getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   realloc dup @asulock @aculock @acsfd @acsmem
++@c   strlen dup ok
++@c   memcpy dup ok
++@c   free dup @asulock @aculock @acsfd @acsmem
++@c  getlogin_r_fd0 (unix) @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsmem @acsfd
++@c   ttyname_r dup @ascuheap @acsmem @acsfd
++@c   strncpy dup ok
++@c   libc_lock_lock dup @asulock @aculock
++@c   *libc_utmp_jump_table->setutent dup @mtasurace:utent @acsfd
++@c   *libc_utmp_jump_table->getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer
++@c   *libc_utmp_jump_table->endutent dup @mtasurace:utent @asulock @aculock
++@c   libc_lock_unlock dup ok
++@c   strlen dup ok
++@c   memcpy dup ok
+ The @code{getlogin} function returns a pointer to a string containing the
+ name of the user logged in on the controlling terminal of the process,
+ or a null pointer if this information cannot be determined.  The string
+@@ -802,6 +927,11 @@
+ @comment stdio.h
+ @comment POSIX.1
+ @deftypefun {char *} cuserid (char *@var{string})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c cuserid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  geteuid dup ok
++@c  getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  strncpy dup ok
+ The @code{cuserid} function returns a pointer to a string containing a
+ user name associated with the effective ID of the process.  If
+ @var{string} is not a null pointer, it should be an array that can hold
+@@ -1013,6 +1143,22 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun void setutent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c Besides the static variables in utmp_file.c, there's the jump_table.
++@c They're both modified while holding a lock, but other threads may
++@c cause the variables to be modified between calling this function and
++@c others that rely on the internal state it sets up.
++
++@c setutent @mtasurace:utent @asulock @aculock @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->setutent @mtasurace:utent @acsfd
++@c   setutent_unknown @mtasurace:utent @acsfd
++@c    *libc_utmp_file_functions.setutent = setutent_file @mtasurace:utent @acsfd
++@c      open_not_cancel_2 dup @acsfd
++@c      fcntl_not_cancel dup ok
++@c      close_not_cancel_no_status dup @acsfd
++@c      lseek64 dup ok
++@c  libc_lock_unlock dup ok
+ This function opens the user accounting database to begin scanning it.
+ You can then call @code{getutent}, @code{getutid} or @code{getutline} to
+ read entries and @code{pututline} to write entries.
+@@ -1024,6 +1170,14 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun {struct utmp *} getutent (void)
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtasurace{:utentbuf} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c The static buffer that holds results is allocated with malloc at
++@c the first call; the test is not thread-safe, so multiple concurrent
++@c calls could malloc multiple buffers.
++
++@c getutent @mtuinit @mtasurace:utent @mtasurace:utentbuf @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem
++@c  malloc @asulock @aculock @acsfd @acsmem
++@c  getutent_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+ The @code{getutent} function reads the next entry from the user
+ accounting database.  It returns a pointer to the entry, which is
+ statically allocated and may be overwritten by subsequent calls to
+@@ -1037,12 +1191,27 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun void endutent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c endutent @mtasurace:utent @asulock @aculock @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->endutent @mtasurace:utent @acsfd
++@c   endutent_unknown ok
++@c   endutent_file @mtasurace:utent @acsfd
++@c    close_not_cancel_no_status dup @acsfd
++@c  libc_lock_unlock dup ok
+ This function closes the user accounting database.
+ @end deftypefun
+ 
+ @comment utmp.h
+ @comment SVID
+ @deftypefun {struct utmp *} getutid (const struct utmp *@var{id})
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
++@c Same caveats as getutline.
++@c
++@c getutid @mtuinit @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsmem @acsfd
++@c   uses a static buffer malloced on the first call
++@c  malloc dup @ascuheap @acsmem
++@c  getutid_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+ This function searches forward from the current point in the database
+ for an entry that matches @var{id}.  If the @code{ut_type} member of the
+ @var{id} structure is one of @code{RUN_LVL}, @code{BOOT_TIME},
+@@ -1073,6 +1242,14 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun {struct utmp *} getutline (const struct utmp *@var{line})
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c The static buffer that holds results is allocated with malloc at
++@c the first call; the test is not thread-safe, so multiple concurrent
++@c calls could malloc multiple buffers.
++
++@c getutline @mtuinit @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem
++@c  malloc @asulock @aculock @acsfd @acsmem
++@c  getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
+ This function searches forward from the current point in the database
+ until it finds an entry whose @code{ut_type} value is
+ @code{LOGIN_PROCESS} or @code{USER_PROCESS}, and whose @code{ut_line}
+@@ -1095,6 +1272,29 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun {struct utmp *} pututline (const struct utmp *@var{utmp})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c pututline @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->pututline @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
++@c   pututline_unknown @mtasurace:utent @acsfd
++@c    setutent_unknown dup @mtasurace:utent @acsfd
++@c   pututline_file @mtascusig:ALRM @mtascutimer @acsfd
++@c    TRANSFORM_UTMP_FILE_NAME ok
++@c     strcmp dup ok
++@c     acesss dup ok
++@c    open_not_cancel_2 dup @acsfd
++@c    fcntl_not_cancel dup ok
++@c    close_not_cancel_no_status dup @acsfd
++@c    llseek dup ok
++@c    dup2 dup ok
++@c    utmp_equal dup ok
++@c    internal_getut_r dup @mtascusig:ALRM @mtascutimer
++@c    LOCK_FILE dup @mtascusig:ALRM @mtasctimer
++@c    LOCKING_FAILED dup ok
++@c    ftruncate64 dup ok
++@c    write_not_cancel dup ok
++@c    UNLOCK_FILE dup @mtasctimer
++@c  libc_lock_unlock dup @aculock
+ The @code{pututline} function inserts the entry @code{*@var{utmp}} at
+ the appropriate place in the user accounting database.  If it finds that
+ it is not already at the correct place in the database, it uses
+@@ -1125,6 +1325,27 @@
+ @comment utmp.h
+ @comment GNU
+ @deftypefun int getutent_r (struct utmp *@var{buffer}, struct utmp **@var{result})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c getutent_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->getutent_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
++@c   getutent_r_unknown @mtasurace:utent @acsfd
++@c    setutent_unknown dup @mtasurace:utent @acsfd
++@c   getutent_r_file @mtasurace:utent @mtascusig:ALRM @mtascutimer
++@c    LOCK_FILE @mtascusig:ALRM @mtascutimer
++@c     alarm dup @mtascutimer
++@c     sigemptyset dup ok
++@c     sigaction dup ok
++@c     memset dup ok
++@c     fcntl_not_cancel dup ok
++@c    LOCKING_FAILED ok
++@c    read_not_cancel dup ok
++@c    UNLOCK_FILE @mtascutimer
++@c     fcntl_not_cancel dup ok
++@c     alarm dup @mtascutimer
++@c     sigaction dup ok
++@c    memcpy dup ok
++@c  libc_lock_unlock dup ok
+ The @code{getutent_r} is equivalent to the @code{getutent} function.  It
+ returns the next entry from the database.  But instead of storing the
+ information in a static buffer it stores it in the buffer pointed to by
+@@ -1142,6 +1363,22 @@
+ @comment utmp.h
+ @comment GNU
+ @deftypefun int getutid_r (const struct utmp *@var{id}, struct utmp *@var{buffer}, struct utmp **@var{result})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c getutid_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->getutid_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
++@c   getutid_r_unknown @mtasurace:utent @acsfd
++@c    setutent_unknown dup @mtasurace:utent @acsfd
++@c   getutid_r_file @mtascusig:ALRM @mtascutimer
++@c    internal_getut_r @mtascusig:ALRM @mtascutimer
++@c     LOCK_FILE dup @mtascusig:ALRM @mtascutimer
++@c     LOCKING_FAILED dup ok
++@c     read_not_cancel dup ok
++@c     utmp_equal ok
++@c      strncmp dup ok
++@c     UNLOCK_FILE dup @mtascutimer
++@c    memcpy dup ok
++@c  libc_lock_unlock dup @aculock
+ This function retrieves just like @code{getutid} the next entry matching
+ the information stored in @var{id}.  But the result is stored in the
+ buffer pointed to by the parameter @var{buffer}.
+@@ -1157,6 +1394,28 @@
+ @comment utmp.h
+ @comment GNU
+ @deftypefun int getutline_r (const struct utmp *@var{line}, struct utmp *@var{buffer}, struct utmp **@var{result})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
++@c getutline_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->getutline_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd
++@c   getutline_r_unknown @mtasurace:utent @acsfd
++@c    setutent_unknown dup @mtasurace:utent @acsfd
++@c   getutline_r_file @mtasurace:utent @mtascusig:ALRM @mtascutimer
++@c    LOCK_FILE @mtascusig:ALRM @mtascutimer
++@c     alarm dup @mtascutimer
++@c     sigemptyset dup ok
++@c     sigaction dup ok
++@c     memset dup ok
++@c     fcntl_not_cancel dup ok
++@c    LOCKING_FAILED ok
++@c    read_not_cancel dup ok
++@c    strncmp dup ok
++@c    UNLOCK_FILE @mtascutimer
++@c     fcntl_not_cancel dup ok
++@c     alarm dup @mtascutimer
++@c     sigaction dup ok
++@c    memcpy dup ok
++@c  libc_lock_unlock dup ok
+ This function retrieves just like @code{getutline} the next entry
+ matching the information stored in @var{line}.  But the result is stored
+ in the buffer pointed to by the parameter @var{buffer}.
+@@ -1180,6 +1439,14 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun int utmpname (const char *@var{file})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
++@c utmpname @mtasurace:utent @asulock @ascuheap @aculock @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  *libc_utmp_jump_table->endutent dup @mtasurace:utent
++@c  strcmp dup ok
++@c  free dup @ascuheap @acsmem
++@c  strdup dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
+ The @code{utmpname} function changes the name of the database to be
+ examined to @var{file}, and closes any previously opened database.  By
+ default @code{getutent}, @code{getutid}, @code{getutline} and
+@@ -1208,6 +1475,18 @@
+ @comment utmp.h
+ @comment SVID
+ @deftypefun void updwtmp (const char *@var{wtmp_file}, const struct utmp *@var{utmp})
++@safety{@prelim{}@mtunsafe{@mtascusig{:ALRM} @mtascutimer{}}@asunsafe{}@acunsafe{@acsfd{}}}
++@c updwtmp @mtascusig:ALRM @mtascutimer @acsfd
++@c  TRANSFORM_UTMP_FILE_NAME dup ok
++@c  *libc_utmp_file_functions->updwtmp = updwtmp_file @mtascusig:ALRM @mtascutimer @acsfd
++@c   open_not_cancel_2 dup @acsfd
++@c   LOCK_FILE dup @mtascusig:ALRM @mtascutimer
++@c   LOCKING_FAILED dup ok
++@c   lseek64 dup ok
++@c   ftruncate64 dup ok
++@c   write_not_cancel dup ok
++@c   UNLOCK_FILE dup @mtascutimer
++@c   close_not_cancel_no_status dup @acsfd
+ The @code{updwtmp} function appends the entry *@var{utmp} to the
+ database specified by @var{wtmp_file}.  For possible values for the
+ @var{wtmp_file} argument see the @code{utmpname} function.
+@@ -1330,6 +1609,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun void setutxent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+ This function is similar to @code{setutent}.  In @theglibc{} it is
+ simply an alias for @code{setutent}.
+ @end deftypefun
+@@ -1337,6 +1617,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun {struct utmpx *} getutxent (void)
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+ The @code{getutxent} function is similar to @code{getutent}, but returns
+ a pointer to a @code{struct utmpx} instead of @code{struct utmp}.  In
+ @theglibc{} it simply is an alias for @code{getutent}.
+@@ -1345,6 +1626,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun void endutxent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
+ This function is similar to @code{endutent}.  In @theglibc{} it is
+ simply an alias for @code{endutent}.
+ @end deftypefun
+@@ -1352,6 +1634,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun {struct utmpx *} getutxid (const struct utmpx *@var{id})
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
+ This function is similar to @code{getutid}, but uses @code{struct utmpx}
+ instead of @code{struct utmp}.  In @theglibc{} it is simply an alias
+ for @code{getutid}.
+@@ -1360,6 +1643,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun {struct utmpx *} getutxline (const struct utmpx *@var{line})
++@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
+ This function is similar to @code{getutid}, but uses @code{struct utmpx}
+ instead of @code{struct utmp}.  In @theglibc{} it is simply an alias
+ for @code{getutline}.
+@@ -1368,6 +1652,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun {struct utmpx *} pututxline (const struct utmpx *@var{utmp})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}}
+ The @code{pututxline} function is functionally identical to
+ @code{pututline}, but uses @code{struct utmpx} instead of @code{struct
+ utmp}.  In @theglibc{}, @code{pututxline} is simply an alias for
+@@ -1377,6 +1662,7 @@
+ @comment utmpx.h
+ @comment XPG4.2
+ @deftypefun int utmpxname (const char *@var{file})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
+ The @code{utmpxname} function is functionally identical to
+ @code{utmpname}.  In @theglibc{}, @code{utmpxname} is simply an
+ alias for @code{utmpname}.
+@@ -1391,6 +1677,7 @@
+ @comment utmp.h
+ @comment GNU
+ @deftypefun int getutmp (const struct utmpx *@var{utmpx}, struct utmp *@var{utmp})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{getutmp} copies the information, insofar as the structures are
+ compatible, from @var{utmpx} to @var{utmp}.
+ @end deftypefun
+@@ -1399,6 +1686,7 @@
+ @comment utmp.h
+ @comment GNU
+ @deftypefun int getutmpx (const struct utmp *@var{utmp}, struct utmpx *@var{utmpx})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+ @code{getutmpx} copies the information, insofar as the structures are
+ compatible, from @var{utmp} to @var{utmpx}.
+ @end deftypefun
+@@ -1418,6 +1706,17 @@
+ @comment utmp.h
+ @comment BSD
+ @deftypefun int login_tty (int @var{filedes})
++@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c If this function is canceled, it may have succeeded in redirecting
++@c only some of the standard streams to the newly opened terminal.
++@c Should there be a safety annotation for this?
++@c login_tty @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
++@c  setsid dup ok
++@c  ioctl dup ok
++@c  ttyname dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd
++@c  close dup @acsfd
++@c  open dup @acsfd
++@c  dup2 dup ok
+ This function makes @var{filedes} the controlling terminal of the
+ current process, redirects standard input, standard output and
+ standard error output to this terminal, and closes @var{filedes}.
+@@ -1429,6 +1728,24 @@
+ @comment utmp.h
+ @comment BSD
+ @deftypefun void login (const struct utmp *@var{entry})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsfd{} @acsmem{}}}
++@c login @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @ascuheap @aculock @acucorrupt @acsfd @acsmem
++@c  getpid dup ok
++@c  tty_name @ascuheap @acucorrupt @acsmem @acsfd
++@c   ttyname_r dup @ascuheap @acsmem @acsfd
++@c   memchr dup ok
++@c   realloc dup @ascuheap @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  strncmp dup ok
++@c  basename dup ok
++@c  strncpy dup ok
++@c  utmpname dup @mtasurace:utent @asulock @ascuheap @aculock @acsmem
++@c  setutent dup @mtasurace:utent @asulock @aculock @acsfd
++@c  pututline dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  endutent dup @mtasurace:utent @asulock @aculock
++@c  free dup @ascuheap @acsmem
++@c  updwtmp dup @mtascusig:ALRM @mtascutimer @acsfd
+ The @code{login} functions inserts an entry into the user accounting
+ database.  The @code{ut_line} member is set to the name of the terminal
+ on standard input.  If standard input is not a terminal @code{login}
+@@ -1444,6 +1761,17 @@
+ @comment utmp.h
+ @comment BSD
+ @deftypefun int logout (const char *@var{ut_line})
++@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
++@c logout @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @ascuheap @aculock @acsfd @acsmem
++@c  utmpname dup @mtasurace:utent @asulock @ascuheap @aculock @acsmem
++@c  setutent dup @mtasurace:utent @asulock @aculock @acsfd
++@c  strncpy dup ok
++@c  getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  bzero dup ok
++@c  gettimeofday dup ok
++@c  time dup ok
++@c  pututline dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd
++@c  endutent dup @mtasurace:utent @asulock @aculock
+ This function modifies the user accounting database to indicate that the
+ user on @var{ut_line} has logged out.
+ 
+@@ -1454,6 +1782,14 @@
+ @comment utmp.h
+ @comment BSD
+ @deftypefun void logwtmp (const char *@var{ut_line}, const char *@var{ut_name}, const char *@var{ut_host})
++@safety{@prelim{}@mtunsafe{@mtascusig{:ALRM} @mtascutimer{}}@asunsafe{}@acunsafe{@acsfd{}}}
++@c logwtmp @mtascusig:ALRM @mtascutimer @acsfd
++@c  memset dup ok
++@c  getpid dup ok
++@c  strncpy dup ok
++@c  gettimeofday dup ok
++@c  time dup ok
++@c  updwtmp dup @mtascusig:ALRM @mtascutimer @acsfd
+ The @code{logwtmp} function appends an entry to the user accounting log
+ file, for the current time and the information provided in the
+ @var{ut_line}, @var{ut_name} and @var{ut_host} arguments.
+@@ -1535,6 +1871,14 @@
+ @comment pwd.h
+ @comment POSIX.1
+ @deftypefun {struct passwd *} getpwuid (uid_t @var{uid})
++@safety{@prelim{}@mtunsafe{@mtasurace{:pwuid} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getpwuid @mtasurace:pwuid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function returns a pointer to a statically-allocated structure
+ containing information about the user whose user ID is @var{uid}.  This
+ structure may be overwritten on subsequent calls to @code{getpwuid}.
+@@ -1546,6 +1890,208 @@
+ @comment pwd.h
+ @comment POSIX.1c
+ @deftypefun int getpwuid_r (uid_t @var{uid}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_getpwuid_r @ascuheap @acsfd @acsmem
++@c   itoa_word dup ok
++@c   nscd_getpw_r @ascuheap @acsfd @acsmem
++@c    nscd_get_map_ref @ascuheap @acsfd @acsmem
++@c     nscd_acquire_maplock ok
++@c     nscd_get_mapping @ascuheap @acsfd @acsmem
++@c      open_socket dup @acsfd
++@c      memset dup ok
++@c      wait_on_socket dup ok
++@c      recvmsg dup ok
++@c      strcmp dup ok
++@c      fstat64 dup ok
++@c      mmap dup @acsmem
++@c      munmap dup @acsmem
++@c      malloc dup @ascuheap @acsmem
++@c      close dup ok
++@c      nscd_unmap dup @ascuheap @acsmem
++@c    nscd_cache_search ok
++@c     nis_hash ok
++@c     memcmp dup ok
++@c    nscd_open_socket @acsfd
++@c     open_socket @acsfd
++@c      socket dup @acsfd
++@c      fcntl dup ok
++@c      strcpy dup ok
++@c      connect dup ok
++@c      send dup ok
++@c      gettimeofday dup ok
++@c      poll dup ok
++@c      close_not_cancel_no_status dup @acsfd
++@c     wait_on_socket dup ok
++@c     read dup ok
++@c     close_not_cancel_no_status dup @acsfd
++@c    readall ok
++@c     read dup ok
++@c     wait_on_socket ok
++@c      poll dup ok
++@c      gettimeofday dup ok
++@c    memcpy dup ok
++@c    close_not_cancel_no_status dup @acsfd
++@c    nscd_drop_map_ref @ascuheap @acsmem
++@c     nscd_unmap dup @ascuheap @acsmem
++@c    nscd_unmap @ascuheap @acsmem
++@c     munmap dup ok
++@c     free dup @ascuheap @acsmem
++@c  nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_database_lookup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
++@c    libc_lock_lock @asulock @aculock
++@c    libc_lock_unlock @aculock
++@c    nss_parse_file @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
++@c     fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c     fsetlocking dup ok [no concurrent uses]
++@c     malloc dup @asulock @aculock @acsfd @acsmem
++@c     fclose dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c     getline dup @ascuheap @aculock @acucorrupt @acsmem
++@c     strchrnul dup ok
++@c     nss_getline @mtslocale @ascuheap @acsmem
++@c      isspace @mtslocale^^
++@c      strlen dup ok
++@c      malloc dup @asulock @aculock @acsfd @acsmem
++@c      memcpy dup ok
++@c      nss_parse_service_list dup @mtslocale^, @ascuheap @acsmem
++@c     feof_unlocked dup ok
++@c     free dup @asulock @aculock @acsfd @acsmem
++@c    strcmp dup ok
++@c    nss_parse_service_list @mtslocale^, @ascuheap @acsmem
++@c     isspace @mtslocale^^
++@c     malloc dup @asulock @aculock @acsfd @acsmem
++@c     mempcpy dup ok
++@c     strncasecmp dup ok
++@c     free dup @asulock @aculock @acsfd @acsmem
++@c    malloc dup @asulock @aculock @acsfd @acsmem
++@c   nss_lookup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup_function @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c     libc_lock_lock @asulock @aculock
++@c     tsearch @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt due to locking]
++@c      known_compare ok
++@c       strcmp dup ok
++@c     malloc dup @ascuheap @acsmem
++@c     tdelete @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt due to locking]
++@c     free dup @ascuheap @acsmem
++@c     nss_load_library @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem
++@c      nss_new_service @ascuheap @acsmem
++@c       strcmp dup ok
++@c       malloc dup @ascuheap @acsmem
++@c      strlen dup ok
++@c      stpcpy dup ok
++@c      libc_dlopen @ascudlopen @ascuheap @asulock @aculock @acsfd @acsmem
++@c      libc_dlsym dup @asulock @aculock @acsfd @acsmem
++@c      *ifct(*nscd_init_cb) @ascuplugin
++@c     stpcpy dup ok
++@c     libc_dlsym dup @asulock @aculock @acsfd @acsmem
++@c     libc_lock_unlock dup ok
++@c    nss_next_action ok
++@c  *fct.l -> _nss_*_getpwuid_r @ascuplugin
++@c  nss_next2 @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_next_action dup ok
++@c   nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++
++@c _nss_files_getpwuid_r @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  internal_setent @ascuheap @asulock @aculock @acsmem @acsfd
++@c   fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c   fileno dup ok
++@c   fcntl dup ok
++@c   fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c   rewind dup @aculock [stream guarded by non-recursive pwent lock]
++@c  internal_getent @mtslocale^
++@c   fgets_unlocked dup ok [stream guarded by non-recursive pwent lock]
++@c   isspace dup @mtslocale^^
++@c   _nss_files_parse_pwent = parse_line ok
++@c    strpbrk dup ok
++@c  internal_endent @ascuheap @asulock @aculock @acsmem @acsfd
++@c   fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_lock_unlock dup @aculock
++
++@c _nss_nis_getpwuid_r ... not fully reviewed (assumed) @asuinit @asulock @acucorrupt @aculock
++@c  yp_get_default_domain @asulock @aculock
++@c   libc_lock_lock dup @asulock @aculock
++@c   getdomainname dup ok
++@c   strcmp dup ok
++@c   libc_lock_unlock dup @aculock
++@c  snprintf dup @ascuheap @acsmem
++@c  yp_match
++@c   do_ypcall_tr(xdr_ypreq_key,xdr_ypresp_val)
++@c    do_ypcall(xdr_ypreq_key,xdr_ypresp_val)
++@c     libc_lock_lock @asulock @aculock
++@c     strcmp
++@c     yp_bind
++@c     ypclnt_call
++@c      clnt_call
++@c      clnt_perror
++@c     libc_lock_unlock @aculock
++@c     yp_unbind_locked
++@c     yp_unbind
++@c      strcmp dup ok
++@c      calloc dup @asulock @aculock @acsfd @acsmem
++@c      yp_bind_file
++@c       strlen dup ok
++@c       snprintf dup @ascuheap @acsmem
++@c       open dup @acsfd [cancelpt]
++@c       pread dup [cancelpt]
++@c       yp_bind_client_create
++@c       close dup @acsfd [cancelpt]
++@c      yp_bind_ypbindprog
++@c       clnttcp_create
++@c       clnt_destroy
++@c       clnt_call(xdr_domainname,xdr_ypbind_resp)
++@c       memset dup ok
++@c       yp_bind_client_create
++@c      free dup @asulock @aculock @acsfd @acsmem
++@c     calloc dup @asulock @aculock @acsfd @acsmem
++@c     free dup @asulock @aculock @acsfd @acsmem
++@c    ypprot_err
++@c   memcpy dup ok
++@c   xdr_free(xdr_ypresp_val)
++@c    xdr_ypresp_val
++@c     xdr_ypstat
++@c      xdr_enum
++@c       XDR_PUTLONG
++@c        *x_putlong
++@c       XDR_GETLONG
++@c        *x_getlong
++@c       xdr_long
++@c        XDR_PUTLONG dup
++@c        XDR_GETLONG dup
++@c       xdr_short
++@c        XDR_PUTLONG dup
++@c        XDR_GETLONG dup
++@c     xdr_valdat
++@c      xdr_bytes
++@c       xdr_u_int
++@c        XDR_PUTLONG dup
++@c        XDR_GETLONG dup
++@c       mem_alloc @ascuheap @acsmem
++@c        malloc dup @ascuheap @acsmem
++@c       xdr_opaque
++@c        XDR_GETBYTES
++@c         *x_getbytes
++@c        XDR_PUTBYTES
++@c         *x_putbytes
++@c       mem_free @ascuheap @acsmem
++@c        free dup @ascuheap @acsmem
++@c  yperr2nss ok
++@c  strchr dup ok
++@c  _nls_default_nss @asuinit @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
++@c   init @asuinit^, @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock
++@c    fopen dup @ascuheap @asulock @acsmem @acsfd @aculock
++@c    fsetlocking ok [no concurrent uses]
++@c    feof_unlocked dup ok
++@c    getline dup @ascuheap @aculock @acucorrupt @acsmem
++@c    isspace dup @mtslocale^^
++@c    strncmp dup ok
++@c    free dup @asulock @acsmem @acsfd @aculock
++@c    fclose dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  free dup @asulock @acsmem @acsfd @aculock
++@c  mempcpy dup ok
++@c  strncpy dup ok
++@c  isspace dup @mtslocale^^
++@c  _nss_files_parse_pwent ok
+ This function is similar to @code{getpwuid} in that it returns
+ information about the user whose user ID is @var{uid}.  However, it
+ fills the user supplied structure pointed to by @var{result_buf} with
+@@ -1568,6 +2114,14 @@
+ @comment pwd.h
+ @comment POSIX.1
+ @deftypefun {struct passwd *} getpwnam (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:pwnam} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getpwnam @mtasurace:pwnam @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function returns a pointer to a statically-allocated structure
+ containing information about the user whose user name is @var{name}.
+ This structure may be overwritten on subsequent calls to
+@@ -1579,6 +2133,25 @@
+ @comment pwd.h
+ @comment POSIX.1c
+ @deftypefun int getpwnam_r (const char *@var{name}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getpwnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_getpwnam_r @ascuheap @asulock @aculock @acsfd @acsmem
++@c   strlen dup ok
++@c   nscd_getpw_r dup @ascuheap @asulock @aculock @acsfd @acsmem
++@c  nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c
++@c _nss_files_getpwnam_r @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_lock_lock dup @asulock @aculock
++@c  internal_setent dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  internal_getent dup @mtslocale^
++@c  strcmp dup ok
++@c  internal_endent dup @ascuheap @asulock @aculock @acsmem @acsfd
++@c  libc_lock_unlock dup @aculock
++@c
++@c _nss_*_getpwnam_r (assumed) @asuinit @asulock @acucorrupt @aculock
++
+ This function is similar to @code{getpwnam} in that is returns
+ information about the user whose user name is @var{name}.  However, like
+ @code{getpwuid_r}, it fills the user supplied buffers in
+@@ -1603,6 +2176,16 @@
+ @comment pwd.h
+ @comment SVID
+ @deftypefun {struct passwd *} fgetpwent (FILE *@var{stream})
++@safety{@prelim{}@mtunsafe{@mtasurace{:fpwent}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{}}}
++@c fgetpwent @mtasurace:fpwent @asucorrupt @asulock @acucorrupt @aculock
++@c  fgetpos dup @asucorrupt @aculock @acucorrupt
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  fgetpwent_r dup @asucorrupt @acucorrupt @aculock
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  fsetpos dup @asucorrupt @aculock @acucorrupt
++@c  libc_lock_unlock dup @aculock
+ This function reads the next user entry from @var{stream} and returns a
+ pointer to the entry.  The structure is statically allocated and is
+ rewritten on subsequent calls to @code{fgetpwent}.  You must copy the
+@@ -1615,6 +2198,14 @@
+ @comment pwd.h
+ @comment GNU
+ @deftypefun int fgetpwent_r (FILE *@var{stream}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
++@c fgetpwent_r @asucorrupt @acucorrupt @aculock
++@c  flockfile dup @aculock
++@c  fgets_unlocked @asucorrupt @acucorrupt [no @mtsrace due to explicit locking]
++@c  feof_unlocked dup ok
++@c  funlockfile dup @aculock
++@c  isspace dup @mtslocale^^
++@c  parse_line dup ok
+ This function is similar to @code{fgetpwent} in that it reads the next
+ user entry from @var{stream}.  But the result is returned in the
+ structure pointed to by @var{result_buf}.  The
+@@ -1637,6 +2228,17 @@
+ @comment pwd.h
+ @comment SVID, BSD
+ @deftypefun void setpwent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c setpwent @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  nss_setent(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    ** resolv's res_maybe_init not called here
++@c   setup(nss_passwd_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *lookup_fct = nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:pwent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock @aculock
+ This function initializes a stream which @code{getpwent} and
+ @code{getpwent_r} use to read the user database.
+ @end deftypefun
+@@ -1644,6 +2246,15 @@
+ @comment pwd.h
+ @comment POSIX.1
+ @deftypefun {struct passwd *} getpwent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtasurace{:pwentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getpwent @mtasurace:pwent @mtasurace:pwentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent(getpwent_r) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c   *func = getpwent_r dup @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   realloc dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
+ The @code{getpwent} function reads the next entry from the stream
+ initialized by @code{setpwent}.  It returns a pointer to the entry.  The
+ structure is statically allocated and is rewritten on subsequent calls
+@@ -1655,7 +2266,21 @@
+ 
+ @comment pwd.h
+ @comment GNU
+-@deftypefun int getpwent_r (struct passwd *@var{result_buf}, char *@var{buffer}, int @var{buflen}, struct passwd **@var{result})
++@deftypefun int getpwent_r (struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result})
++@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c The static buffer here is not the result_buf, but rather the
++@c variables that keep track of what nss backend we've last used, and
++@c whatever internal state the nss backend uses to keep track of the
++@c last read entry.
++@c getpwent_r @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nss_getent_r(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:pwent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *sfct.f @mtasurace:pwent @ascuplugin
++@c  libc_lock_unlock dup @aculock
+ This function is similar to @code{getpwent} in that it returns the next
+ entry from the stream initialized by @code{setpwent}.  Like
+ @code{fgetpwent_r}, it uses the user-supplied buffers in
+@@ -1668,6 +2293,15 @@
+ @comment pwd.h
+ @comment SVID, BSD
+ @deftypefun void endpwent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endpwent @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock @asulock @aculock
++@c  nss_endent(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    ** resolv's res_maybe_init not called here
++@c   setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct.f @mtasurace:pwent @ascuplugin
++@c   nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_unlock @aculock
+ This function closes the internal stream used by @code{getpwent} or
+ @code{getpwent_r}.
+ @end deftypefun
+@@ -1678,6 +2312,9 @@
+ @comment pwd.h
+ @comment SVID
+ @deftypefun int putpwent (const struct passwd *@var{p}, FILE *@var{stream})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
++@c putpwent @mtslocale @asucorrupt @aculock @acucorrupt
++@c  fprintf dup @mtslocale @asucorrupt @aculock @acucorrupt [no @ascuheap @acsmem]
+ This function writes the user entry @code{*@var{p}} to the stream
+ @var{stream}, in the format used for the standard user database
+ file.  The return value is zero on success and nonzero on failure.
+@@ -1751,6 +2388,9 @@
+ @comment grp.h
+ @comment POSIX.1
+ @deftypefun {struct group *} getgrgid (gid_t @var{gid})
++@safety{@prelim{}@mtunsafe{@mtasurace{:grgid} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getgrgid =~ getpwuid dup @mtasurace:grgid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getgrgid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function returns a pointer to a statically-allocated structure
+ containing information about the group whose group ID is @var{gid}.
+ This structure may be overwritten by subsequent calls to
+@@ -1762,6 +2402,26 @@
+ @comment grp.h
+ @comment POSIX.1c
+ @deftypefun int getgrgid_r (gid_t @var{gid}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getgrgid_r =~ getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_getgrgid_r @ascuheap @acsfd @acsmem
++@c   itoa_word dup ok
++@c   nscd_getgr_r @ascuheap @acsfd @acsmem
++@c    nscd_get_map_ref dup @ascuheap @acsfd @acsmem
++@c    nscd_cache_search dup ok
++@c    nscd_open_socket dup @acsfd
++@c    readvall ok
++@c     readv dup ok
++@c     memcpy dup ok
++@c      wait_on_socket dup ok
++@c    memcpy dup ok
++@c    readall dup ok
++@c    close_not_cancel_no_status dup @acsfd
++@c    nscd_drop_map_ref dup @ascuheap @acsmem
++@c    nscd_unmap dup @ascuheap @acsmem
++@c  nss_group_lookup2 =~ nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l -> _nss_*_getgrgid_r @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function is similar to @code{getgrgid} in that it returns
+ information about the group whose group ID is @var{gid}.  However, it
+ fills the user supplied structure pointed to by @var{result_buf} with
+@@ -1783,6 +2443,9 @@
+ @comment grp.h
+ @comment SVID, BSD
+ @deftypefun {struct group *} getgrnam (const char *@var{name})
++@safety{@prelim{}@mtunsafe{@mtasurace{:grnam} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getgrnam =~ getpwnam dup @mtasurace:grnam @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  getgrnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function returns a pointer to a statically-allocated structure
+ containing information about the group whose group name is @var{name}.
+ This structure may be overwritten by subsequent calls to
+@@ -1794,6 +2457,14 @@
+ @comment grp.h
+ @comment POSIX.1c
+ @deftypefun int getgrnam_r (const char *@var{name}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
++@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getgrnam_r =~ getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_getgrnam_r @ascuheap @asulock @aculock @acsfd @acsmem
++@c   strlen dup ok
++@c   nscd_getgr_r dup @ascuheap @asulock @aculock @acsfd @acsmem
++@c  nss_group_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *fct.l @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function is similar to @code{getgrnam} in that is returns
+ information about the group whose group name is @var{name}.  Like
+ @code{getgrgid_r}, it uses the user supplied buffers in
+@@ -1817,6 +2488,16 @@
+ @comment grp.h
+ @comment SVID
+ @deftypefun {struct group *} fgetgrent (FILE *@var{stream})
++@safety{@prelim{}@mtunsafe{@mtasurace{:fgrent}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{}}}
++@c fgetgrent @mtasurace:fgrent @asucorrupt @asulock @acucorrupt @aculock
++@c  fgetpos dup @asucorrupt @aculock @acucorrupt
++@c  libc_lock_lock dup @asulock @aculock
++@c  malloc dup @ascuheap @acsmem
++@c  fgetgrent_r dup @asucorrupt @acucorrupt @aculock
++@c  realloc dup @ascuheap @acsmem
++@c  free dup @ascuheap @acsmem
++@c  fsetpos dup @asucorrupt @aculock @acucorrupt
++@c  libc_lock_unlock dup @aculock
+ The @code{fgetgrent} function reads the next entry from @var{stream}.
+ It returns a pointer to the entry.  The structure is statically
+ allocated and is overwritten on subsequent calls to @code{fgetgrent}.  You
+@@ -1830,6 +2511,14 @@
+ @comment grp.h
+ @comment GNU
+ @deftypefun int fgetgrent_r (FILE *@var{stream}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
++@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
++@c fgetgrent_r @asucorrupt @acucorrupt @aculock
++@c  flockfile dup @aculock
++@c  fgets_unlocked @asucorrupt @acucorrupt [no @mtsrace due to explicit locking]
++@c  feof_unlocked dup ok
++@c  funlockfile dup @aculock
++@c  isspace dup @mtslocale^^
++@c  parse_line dup ok
+ This function is similar to @code{fgetgrent} in that it reads the next
+ user entry from @var{stream}.  But the result is returned in the
+ structure pointed to by @var{result_buf}.  The first @var{buflen} bytes
+@@ -1852,6 +2541,9 @@
+ @comment grp.h
+ @comment SVID, BSD
+ @deftypefun void setgrent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c setgrent =~ setpwent dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c ...*lookup_fct = nss_group_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function initializes a stream for reading from the group data base.
+ You use this stream by calling @code{getgrent} or @code{getgrent_r}.
+ @end deftypefun
+@@ -1859,6 +2551,9 @@
+ @comment grp.h
+ @comment SVID, BSD
+ @deftypefun {struct group *} getgrent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtasurace{:grentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getgrent =~ getpwent dup @mtasurace:grent @mtasurace:grentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *func = getgrent_r dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ The @code{getgrent} function reads the next entry from the stream
+ initialized by @code{setgrent}.  It returns a pointer to the entry.  The
+ structure is statically allocated and is overwritten on subsequent calls
+@@ -1869,6 +2564,8 @@
+ @comment grp.h
+ @comment GNU
+ @deftypefun int getgrent_r (struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result})
++@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getgrent_r =~ getpwent_r dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function is similar to @code{getgrent} in that it returns the next
+ entry from the stream initialized by @code{setgrent}.  Like
+ @code{fgetgrent_r}, it places the result in user-supplied buffers
+@@ -1882,6 +2579,8 @@
+ @comment grp.h
+ @comment SVID, BSD
+ @deftypefun void endgrent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endgrent =~ endpwent dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function closes the internal stream used by @code{getgrent} or
+ @code{getgrent_r}.
+ @end deftypefun
+@@ -1966,6 +2665,40 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun int setnetgrent (const char *@var{netgroup})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c setnetgrent @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  nscd_setnetgrent @ascuheap @acsfd @acsmem
++@c   __nscd_setnetgrent @ascuheap @acsfd @acsmem
++@c    strlen dup ok
++@c    nscd_get_map_ref dup @ascuheap @acsfd @acsmem
++@c    nscd_cache_search dup ok
++@c    nscd_open_socket dup @acsfd
++@c    malloc dup @ascuheap @acsmem
++@c    readall dup ok
++@c    free dup @ascuheap @acsmem
++@c    close_not_cancel_no_status dup @acsfd
++@c    nscd_drop_map_ref dup @ascuheap @acsmem
++@c    nscd_unmap dup @ascuheap @acsmem
++@c  internal_setnetgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   free_memory dup @ascuheap @acsmem
++@c    free dup @ascuheap @acsmem
++@c   internal_setnetgrent_reuse @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    endnetgrent_hook dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c     nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c     *endfct @ascuplugin
++@c    (netgroup::)setup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c     nss_netgroup_lookup dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c      nss_netgroup_lookup2 =~ nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c     nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *fct.f @ascuplugin
++@c    nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c    *endfct @ascuplugin
++@c    strlen dup ok
++@c    malloc dup @ascuheap @acsmem
++@c    memcpy dup ok
++@c  libc_lock_unlock dup @aculock
+ A call to this function initializes the internal state of the library to
+ allow following calls of the @code{getnetgrent} to iterate over all entries
+ in the netgroup with name @var{netgroup}.
+@@ -1991,6 +2724,12 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun int getnetgrent (char **@var{hostp}, char **@var{userp}, char **@var{domainp})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtasurace{:netgrentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getnetgrent @mtasurace:netgrent @mtasurace:netgrentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   uses unsafely a static buffer allocated within a libc_once call
++@c  allocate (libc_once) @ascuheap @acsmem
++@c   malloc dup @ascuheap @acsmem
++@c  getnetgrent_r dup @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
+ This function returns the next unprocessed entry of the currently
+ selected netgroup.  The string pointers, in which addresses are passed in
+ the arguments @var{hostp}, @var{userp}, and @var{domainp}, will contain
+@@ -2005,7 +2744,20 @@
+ 
+ @comment netdb.h
+ @comment GNU
+-@deftypefun int getnetgrent_r (char **@var{hostp}, char **@var{userp}, char **@var{domainp}, char *@var{buffer}, int @var{buflen})
++@deftypefun int getnetgrent_r (char **@var{hostp}, char **@var{userp}, char **@var{domainp}, char *@var{buffer}, size_t @var{buflen})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c getnetgrent_r @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  internal_getnetgrent_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   *fct @ascuplugin
++@c   nscd_getnetgrent ok
++@c    rawmemchr dup ok
++@c   internal_setnetgrent_reuse dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   strcmp dup ok
++@c   malloc dup @ascuheap @acsmem
++@c   memcpy dup ok
++@c  libc_lock_unlock dup @aculock
+ This function is similar to @code{getnetgrent} with only one exception:
+ the strings the three string pointers @var{hostp}, @var{userp}, and
+ @var{domainp} point to, are placed in the buffer of @var{buflen} bytes
+@@ -2024,6 +2776,13 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun void endnetgrent (void)
++@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c endnetgrent @mtasurace:netgrent @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  libc_lock_lock dup @asulock @aculock
++@c  internal_endnetgrent @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   endnetgrent_hook dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c   free_memory dup @ascuheap @acsmem
++@c  libc_lock_unlock dup @aculock
+ This function frees all buffers which were allocated to process the last
+ selected netgroup.  As a result all string pointers returned by calls
+ to @code{getnetgrent} are invalid afterwards.
+@@ -2039,6 +2798,37 @@
+ @comment netdb.h
+ @comment BSD
+ @deftypefun int innetgr (const char *@var{netgroup}, const char *@var{host}, const char *@var{user}, const char *@var{domain})
++@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}}
++@c This function does not use the static data structure that the
++@c *netgrent* ones do, but since each nss must maintains internal state
++@c to support iteration and concurrent iteration will interfere
++@c destructively, we regard this internal state as a static buffer.
++@c getnetgrent_r iteration in each nss backend.
++@c innetgr @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  nscd_innetgr @ascuheap @acsfd @acsmem
++@c   strlen dup ok
++@c   malloc dup @ascuheap @acsmem
++@c   stpcpy dup ok
++@c   nscd_get_map_ref dup @ascuheap @acsfd @acsmem
++@c   nscd_cache_search dup ok
++@c   nscd_open_socket dup @acsfd
++@c   close_not_cancel_no_status dup @acsfd
++@c   nscd_drop_map_ref dup @ascuheap @acsmem
++@c   nscd_unmap dup @ascuheap @acsmem
++@c   free dup @ascuheap @acsmem
++@c  memset dup ok
++@c  (netgroup::)setup dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *setfct.f @ascuplugin
++@c  nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  *getfct @ascuplugin
++@c  strcmp dup ok
++@c  strlen dup ok
++@c  malloc dup @ascuheap @acsmem
++@c  memcpy dup ok
++@c  strcasecmp dup
++@c  *endfct @ascuplugin
++@c  nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem
++@c  free_memory dup @ascuheap @acsmem
+ This function tests whether the triple specified by the parameters
+ @var{hostp}, @var{userp}, and @var{domainp} is part of the netgroup
+ @var{netgroup}.  Using this function has the advantage that
+@@ -2062,3 +2852,7 @@
+ itself is not found, the netgroup does not contain the triple or
+ internal errors occurred.
+ @end deftypefun
++
++@c FIXME these are undocumented:
++@c setresgid
++@c setresuid
diff --git a/SOURCES/glibc-powerpc-ldbl_high.patch b/SOURCES/glibc-powerpc-ldbl_high.patch
new file mode 100644
index 0000000..68faeee
--- /dev/null
+++ b/SOURCES/glibc-powerpc-ldbl_high.patch
@@ -0,0 +1,13 @@
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-27 19:59:00.000000000 -0500
+@@ -190,6 +190,9 @@
+ # define ldbl_unpack default_ldbl_unpack
+ #endif
+ 
++/* Extract high double.  */
++#define ldbl_high(x) ((double) x)
++
+ /* Convert a finite long double to canonical form.
+    Does not handle +/-Inf properly.  */
+ static inline void
diff --git a/SOURCES/glibc-ppc64le-01.patch b/SOURCES/glibc-ppc64le-01.patch
new file mode 100644
index 0000000..e2a86d7
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-01.patch
@@ -0,0 +1,83 @@
+# commit 1695c7737655241e1773bdddc93e82c22d8d1584
+# Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+# Date:   Tue Feb 4 09:48:47 2014 -0200
+#
+#     abilist-pattern configurability
+#    
+#     This patch creates implicit rules to match the abifiles if
+#     abilist-pattern is defined in the architecture Makefile. This allows
+#     machine specific Makefiles to define different abifiles names
+#     (for instance *-le.abilist for powerpc64le).
+#
+diff -urN glibc-2.17-c758a686/Makerules glibc-2.17-c758a686/Makerules
+--- glibc-2.17-c758a686/Makerules	2014-06-02 15:29:42.000000000 +0000
++++ glibc-2.17-c758a686/Makerules	2014-06-02 15:25:21.000000000 +0000
+@@ -1152,6 +1152,14 @@
+ 	LC_ALL=C $(OBJDUMP) --dynamic-syms $< > $@T
+ 	mv -f $@T $@
+ 
++# A sysdeps/.../Makefile can set abilist-pattern to something like
++# %-foo.abilist to look for libc-foo.abilist instead of libc.abilist.
++# This makes sense if multiple ABIs can be most cleanly supported by a
++# configuration without using separate sysdeps directories for each.
++ifdef abilist-pattern
++vpath $(abilist-pattern) $(+sysdep_dirs)
++endif
++
+ vpath %.abilist $(+sysdep_dirs)
+ 
+ # The .PRECIOUS rule prevents the files built by an implicit rule whose
+@@ -1161,18 +1169,42 @@
+ .PRECIOUS: %.symlist
+ generated += $(extra-libs:=.symlist)
+ 
++ifdef abilist-pattern
++check-abi-%: $(common-objpfx)config.make $(abilist-pattern) $(objpfx)%.symlist
++	$(check-abi-pattern)
++check-abi-%: $(common-objpfx)config.make $(abilist-pattern) \
++	     $(common-objpfx)%.symlist
++	$(check-abi-pattern)
++endif
+ check-abi-%: $(common-objpfx)config.make %.abilist $(objpfx)%.symlist
+ 	$(check-abi)
+ check-abi-%: $(common-objpfx)config.make %.abilist $(common-objpfx)%.symlist
+ 	$(check-abi)
++define check-abi-pattern
++	diff -p -U 0 $(filter $(abilist-pattern),$^) $(filter %.symlist,$^)
++endef
+ define check-abi
+ 	diff -p -U 0 $(filter %.abilist,$^) $(filter %.symlist,$^)
+ endef
+ 
++ifdef abilist-pattern
++update-abi-%: $(objpfx)%.symlist $(abilist-pattern)
++	$(update-abi-pattern)
++update-abi-%: $(common-objpfx)%.symlist $(abilist-pattern)
++	$(update-abi-pattern)
++endif
+ update-abi-%: $(objpfx)%.symlist %.abilist
+ 	$(update-abi)
+ update-abi-%: $(common-objpfx)%.symlist %.abilist
+ 	$(update-abi)
++define update-abi-pattern
++@if cmp -s $^ 2> /dev/null; \
++ then \
++      echo '+++ $(filter $(abilist-pattern),$^) is unchanged'; \
++ else cp -f $^; \
++      echo '*** Now check $(filter $(abilist-pattern),$^) changes for correctness ***'; \
++ fi
++endef
+ define update-abi
+ @if cmp -s $^ 2> /dev/null; \
+  then \
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/Makefile glibc-2.17-c758a686/sysdeps/powerpc/Makefile
+--- glibc-2.17-c758a686/sysdeps/powerpc/Makefile	2014-06-02 15:29:42.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/powerpc/Makefile	2014-06-02 15:25:21.000000000 +0000
+@@ -27,3 +27,7 @@
+ sysdep_headers += sys/platform/ppc.h
+ tests += test-gettimebase
+ endif
++
++ifneq (,$(filter %le,$(config-machine)))
++abilist-pattern = %-le.abilist
++endif
diff --git a/SOURCES/glibc-ppc64le-02.patch b/SOURCES/glibc-ppc64le-02.patch
new file mode 100644
index 0000000..3878826
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-02.patch
@@ -0,0 +1,3197 @@
+# co`mmit c01603f763003cec55234ac757c7a934652caa55
+# Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+# Date:   Tue Feb 4 09:49:34 2014 -0200
+#
+#     PowerPC: powerpc64le abilist for 2.17
+#    
+#     This patch is the abifiles for powerpc64le based on GLIBC 2.17.
+#
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/ld-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,11 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ __libc_memalign F
++ __libc_stack_end D 0x8
++ __tls_get_addr F
++ _dl_mcount F
++ _r_debug D 0x28
++ calloc F
++ free F
++ malloc F
++ realloc F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libBrokenLocale-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,3 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ __ctype_get_mb_cur_max F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libanl-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,6 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ gai_cancel F
++ gai_error F
++ gai_suspend F
++ getaddrinfo_a F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libc-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,2168 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ _Exit F
++ _IO_2_1_stderr_ D 0xe0
++ _IO_2_1_stdin_ D 0xe0
++ _IO_2_1_stdout_ D 0xe0
++ _IO_adjust_column F
++ _IO_adjust_wcolumn F
++ _IO_default_doallocate F
++ _IO_default_finish F
++ _IO_default_pbackfail F
++ _IO_default_uflow F
++ _IO_default_xsgetn F
++ _IO_default_xsputn F
++ _IO_do_write F
++ _IO_doallocbuf F
++ _IO_fclose F
++ _IO_fdopen F
++ _IO_feof F
++ _IO_ferror F
++ _IO_fflush F
++ _IO_fgetpos F
++ _IO_fgetpos64 F
++ _IO_fgets F
++ _IO_file_attach F
++ _IO_file_close F
++ _IO_file_close_it F
++ _IO_file_doallocate F
++ _IO_file_finish F
++ _IO_file_fopen F
++ _IO_file_init F
++ _IO_file_jumps D 0xa8
++ _IO_file_open F
++ _IO_file_overflow F
++ _IO_file_read F
++ _IO_file_seek F
++ _IO_file_seekoff F
++ _IO_file_setbuf F
++ _IO_file_stat F
++ _IO_file_sync F
++ _IO_file_underflow F
++ _IO_file_write F
++ _IO_file_xsputn F
++ _IO_flockfile F
++ _IO_flush_all F
++ _IO_flush_all_linebuffered F
++ _IO_fopen F
++ _IO_fprintf F
++ _IO_fputs F
++ _IO_fread F
++ _IO_free_backup_area F
++ _IO_free_wbackup_area F
++ _IO_fsetpos F
++ _IO_fsetpos64 F
++ _IO_ftell F
++ _IO_ftrylockfile F
++ _IO_funlockfile F
++ _IO_fwrite F
++ _IO_getc F
++ _IO_getline F
++ _IO_getline_info F
++ _IO_gets F
++ _IO_init F
++ _IO_init_marker F
++ _IO_init_wmarker F
++ _IO_iter_begin F
++ _IO_iter_end F
++ _IO_iter_file F
++ _IO_iter_next F
++ _IO_least_wmarker F
++ _IO_link_in F
++ _IO_list_all D 0x8
++ _IO_list_lock F
++ _IO_list_resetlock F
++ _IO_list_unlock F
++ _IO_marker_delta F
++ _IO_marker_difference F
++ _IO_padn F
++ _IO_peekc_locked F
++ _IO_popen F
++ _IO_printf F
++ _IO_proc_close F
++ _IO_proc_open F
++ _IO_putc F
++ _IO_puts F
++ _IO_remove_marker F
++ _IO_seekmark F
++ _IO_seekoff F
++ _IO_seekpos F
++ _IO_seekwmark F
++ _IO_setb F
++ _IO_setbuffer F
++ _IO_setvbuf F
++ _IO_sgetn F
++ _IO_sprintf F
++ _IO_sputbackc F
++ _IO_sputbackwc F
++ _IO_sscanf F
++ _IO_str_init_readonly F
++ _IO_str_init_static F
++ _IO_str_overflow F
++ _IO_str_pbackfail F
++ _IO_str_seekoff F
++ _IO_str_underflow F
++ _IO_sungetc F
++ _IO_sungetwc F
++ _IO_switch_to_get_mode F
++ _IO_switch_to_main_wget_area F
++ _IO_switch_to_wbackup_area F
++ _IO_switch_to_wget_mode F
++ _IO_un_link F
++ _IO_ungetc F
++ _IO_unsave_markers F
++ _IO_unsave_wmarkers F
++ _IO_vfprintf F
++ _IO_vfscanf F
++ _IO_vsprintf F
++ _IO_wdefault_doallocate F
++ _IO_wdefault_finish F
++ _IO_wdefault_pbackfail F
++ _IO_wdefault_uflow F
++ _IO_wdefault_xsgetn F
++ _IO_wdefault_xsputn F
++ _IO_wdo_write F
++ _IO_wdoallocbuf F
++ _IO_wfile_jumps D 0xa8
++ _IO_wfile_overflow F
++ _IO_wfile_seekoff F
++ _IO_wfile_sync F
++ _IO_wfile_underflow F
++ _IO_wfile_xsputn F
++ _IO_wmarker_delta F
++ _IO_wsetb F
++ __adjtimex F
++ __after_morecore_hook D 0x8
++ __argz_count F
++ __argz_next F
++ __argz_stringify F
++ __asprintf F
++ __asprintf_chk F
++ __assert F
++ __assert_fail F
++ __assert_perror_fail F
++ __backtrace F
++ __backtrace_symbols F
++ __backtrace_symbols_fd F
++ __bsd_getpgrp F
++ __bzero F
++ __check_rhosts_file D 0x4
++ __chk_fail F
++ __clone F
++ __close F
++ __cmsg_nxthdr F
++ __confstr_chk F
++ __connect F
++ __ctype_b_loc F
++ __ctype_get_mb_cur_max F
++ __ctype_tolower_loc F
++ __ctype_toupper_loc F
++ __curbrk D 0x8
++ __cxa_at_quick_exit F
++ __cxa_atexit F
++ __cxa_finalize F
++ __cyg_profile_func_enter F
++ __cyg_profile_func_exit F
++ __daylight D 0x4
++ __dcgettext F
++ __default_morecore F
++ __dgettext F
++ __dprintf_chk F
++ __dup2 F
++ __duplocale F
++ __endmntent F
++ __environ D 0x8
++ __errno_location F
++ __fbufsize F
++ __fcntl F
++ __fdelt_chk F
++ __fdelt_warn F
++ __ffs F
++ __fgets_chk F
++ __fgets_unlocked_chk F
++ __fgetws_chk F
++ __fgetws_unlocked_chk F
++ __finite F
++ __finitef F
++ __finitel F
++ __flbf F
++ __fork F
++ __fpending F
++ __fprintf_chk F
++ __fpu_control D 0x4
++ __fpurge F
++ __fread_chk F
++ __fread_unlocked_chk F
++ __freadable F
++ __freading F
++ __free_hook D 0x8
++ __freelocale F
++ __fsetlocking F
++ __fwprintf_chk F
++ __fwritable F
++ __fwriting F
++ __fxstat F
++ __fxstat64 F
++ __fxstatat F
++ __fxstatat64 F
++ __getauxval F
++ __getcwd_chk F
++ __getdelim F
++ __getdomainname_chk F
++ __getgroups_chk F
++ __gethostname_chk F
++ __getlogin_r_chk F
++ __getmntent_r F
++ __getpagesize F
++ __getpgid F
++ __getpid F
++ __gets_chk F
++ __gettimeofday F
++ __getwd_chk F
++ __gmtime_r F
++ __h_errno_location F
++ __isalnum_l F
++ __isalpha_l F
++ __isascii_l F
++ __isblank_l F
++ __iscntrl_l F
++ __isctype F
++ __isdigit_l F
++ __isgraph_l F
++ __isinf F
++ __isinff F
++ __isinfl F
++ __islower_l F
++ __isnan F
++ __isnanf F
++ __isnanl F
++ __isoc99_fscanf F
++ __isoc99_fwscanf F
++ __isoc99_scanf F
++ __isoc99_sscanf F
++ __isoc99_swscanf F
++ __isoc99_vfscanf F
++ __isoc99_vfwscanf F
++ __isoc99_vscanf F
++ __isoc99_vsscanf F
++ __isoc99_vswscanf F
++ __isoc99_vwscanf F
++ __isoc99_wscanf F
++ __isprint_l F
++ __ispunct_l F
++ __isspace_l F
++ __isupper_l F
++ __iswalnum_l F
++ __iswalpha_l F
++ __iswblank_l F
++ __iswcntrl_l F
++ __iswctype F
++ __iswctype_l F
++ __iswdigit_l F
++ __iswgraph_l F
++ __iswlower_l F
++ __iswprint_l F
++ __iswpunct_l F
++ __iswspace_l F
++ __iswupper_l F
++ __iswxdigit_l F
++ __isxdigit_l F
++ __ivaliduser F
++ __key_decryptsession_pk_LOCAL D 0x8
++ __key_encryptsession_pk_LOCAL D 0x8
++ __key_gendes_LOCAL D 0x8
++ __libc_allocate_rtsig F
++ __libc_calloc F
++ __libc_current_sigrtmax F
++ __libc_current_sigrtmin F
++ __libc_free F
++ __libc_freeres F
++ __libc_init_first F
++ __libc_mallinfo F
++ __libc_malloc F
++ __libc_mallopt F
++ __libc_memalign F
++ __libc_pvalloc F
++ __libc_realloc F
++ __libc_sa_len F
++ __libc_start_main F
++ __libc_valloc F
++ __longjmp_chk F
++ __lseek F
++ __lxstat F
++ __lxstat64 F
++ __malloc_hook D 0x8
++ __malloc_initialize_hook D 0x8
++ __mbrlen F
++ __mbrtowc F
++ __mbsnrtowcs_chk F
++ __mbsrtowcs_chk F
++ __mbstowcs_chk F
++ __memalign_hook D 0x8
++ __memcpy_chk F
++ __memmove_chk F
++ __mempcpy F
++ __mempcpy_chk F
++ __mempcpy_small F
++ __memset_chk F
++ __monstartup F
++ __morecore D 0x8
++ __nanosleep F
++ __newlocale F
++ __nl_langinfo_l F
++ __nldbl__IO_fprintf F
++ __nldbl__IO_printf F
++ __nldbl__IO_sprintf F
++ __nldbl__IO_sscanf F
++ __nldbl__IO_vfprintf F
++ __nldbl__IO_vfscanf F
++ __nldbl__IO_vsprintf F
++ __nldbl___asprintf F
++ __nldbl___asprintf_chk F
++ __nldbl___dprintf_chk F
++ __nldbl___fprintf_chk F
++ __nldbl___fwprintf_chk F
++ __nldbl___isoc99_fscanf F
++ __nldbl___isoc99_fwscanf F
++ __nldbl___isoc99_scanf F
++ __nldbl___isoc99_sscanf F
++ __nldbl___isoc99_swscanf F
++ __nldbl___isoc99_vfscanf F
++ __nldbl___isoc99_vfwscanf F
++ __nldbl___isoc99_vscanf F
++ __nldbl___isoc99_vsscanf F
++ __nldbl___isoc99_vswscanf F
++ __nldbl___isoc99_vwscanf F
++ __nldbl___isoc99_wscanf F
++ __nldbl___obstack_printf_chk F
++ __nldbl___obstack_vprintf_chk F
++ __nldbl___printf_chk F
++ __nldbl___printf_fp F
++ __nldbl___snprintf_chk F
++ __nldbl___sprintf_chk F
++ __nldbl___strfmon_l F
++ __nldbl___swprintf_chk F
++ __nldbl___syslog_chk F
++ __nldbl___vasprintf_chk F
++ __nldbl___vdprintf_chk F
++ __nldbl___vfprintf_chk F
++ __nldbl___vfscanf F
++ __nldbl___vfwprintf_chk F
++ __nldbl___vprintf_chk F
++ __nldbl___vsnprintf F
++ __nldbl___vsnprintf_chk F
++ __nldbl___vsprintf_chk F
++ __nldbl___vsscanf F
++ __nldbl___vstrfmon F
++ __nldbl___vstrfmon_l F
++ __nldbl___vswprintf_chk F
++ __nldbl___vsyslog_chk F
++ __nldbl___vwprintf_chk F
++ __nldbl___wprintf_chk F
++ __nldbl_asprintf F
++ __nldbl_dprintf F
++ __nldbl_fprintf F
++ __nldbl_fscanf F
++ __nldbl_fwprintf F
++ __nldbl_fwscanf F
++ __nldbl_obstack_printf F
++ __nldbl_obstack_vprintf F
++ __nldbl_printf F
++ __nldbl_printf_size F
++ __nldbl_scanf F
++ __nldbl_snprintf F
++ __nldbl_sprintf F
++ __nldbl_sscanf F
++ __nldbl_strfmon F
++ __nldbl_strfmon_l F
++ __nldbl_swprintf F
++ __nldbl_swscanf F
++ __nldbl_syslog F
++ __nldbl_vasprintf F
++ __nldbl_vdprintf F
++ __nldbl_vfprintf F
++ __nldbl_vfscanf F
++ __nldbl_vfwprintf F
++ __nldbl_vfwscanf F
++ __nldbl_vprintf F
++ __nldbl_vscanf F
++ __nldbl_vsnprintf F
++ __nldbl_vsprintf F
++ __nldbl_vsscanf F
++ __nldbl_vswprintf F
++ __nldbl_vswscanf F
++ __nldbl_vsyslog F
++ __nldbl_vwprintf F
++ __nldbl_vwscanf F
++ __nldbl_wprintf F
++ __nldbl_wscanf F
++ __nss_configure_lookup F
++ __nss_database_lookup F
++ __nss_group_lookup F
++ __nss_hostname_digits_dots F
++ __nss_hosts_lookup F
++ __nss_next F
++ __nss_passwd_lookup F
++ __obstack_printf_chk F
++ __obstack_vprintf_chk F
++ __open F
++ __open64 F
++ __open64_2 F
++ __open_2 F
++ __openat64_2 F
++ __openat_2 F
++ __overflow F
++ __pipe F
++ __poll F
++ __poll_chk F
++ __posix_getopt F
++ __ppc_get_timebase_freq F
++ __ppoll_chk F
++ __pread64 F
++ __pread64_chk F
++ __pread_chk F
++ __printf_chk F
++ __printf_fp F
++ __profile_frequency F
++ __progname D 0x8
++ __progname_full D 0x8
++ __ptsname_r_chk F
++ __pwrite64 F
++ __rawmemchr F
++ __rcmd_errstr D 0x8
++ __read F
++ __read_chk F
++ __readlink_chk F
++ __readlinkat_chk F
++ __realloc_hook D 0x8
++ __realpath_chk F
++ __recv_chk F
++ __recvfrom_chk F
++ __register_atfork F
++ __res_init F
++ __res_nclose F
++ __res_ninit F
++ __res_randomid F
++ __res_state F
++ __rpc_thread_createerr F
++ __rpc_thread_svc_fdset F
++ __rpc_thread_svc_max_pollfd F
++ __rpc_thread_svc_pollfd F
++ __sbrk F
++ __sched_cpualloc F
++ __sched_cpucount F
++ __sched_cpufree F
++ __sched_get_priority_max F
++ __sched_get_priority_min F
++ __sched_getparam F
++ __sched_getscheduler F
++ __sched_setscheduler F
++ __sched_yield F
++ __select F
++ __send F
++ __setmntent F
++ __setpgid F
++ __sigaction F
++ __sigaddset F
++ __sigdelset F
++ __sigismember F
++ __signbit F
++ __signbitf F
++ __signbitl F
++ __sigpause F
++ __sigsetjmp F
++ __sigsuspend F
++ __snprintf_chk F
++ __sprintf_chk F
++ __stack_chk_fail F
++ __statfs F
++ __stpcpy F
++ __stpcpy_chk F
++ __stpcpy_small F
++ __stpncpy F
++ __stpncpy_chk F
++ __strcasecmp F
++ __strcasecmp_l F
++ __strcasestr F
++ __strcat_chk F
++ __strcoll_l F
++ __strcpy_chk F
++ __strcpy_small F
++ __strcspn_c1 F
++ __strcspn_c2 F
++ __strcspn_c3 F
++ __strdup F
++ __strerror_r F
++ __strfmon_l F
++ __strftime_l F
++ __strncasecmp_l F
++ __strncat_chk F
++ __strncpy_chk F
++ __strndup F
++ __strpbrk_c2 F
++ __strpbrk_c3 F
++ __strsep_1c F
++ __strsep_2c F
++ __strsep_3c F
++ __strsep_g F
++ __strspn_c1 F
++ __strspn_c2 F
++ __strspn_c3 F
++ __strtod_internal F
++ __strtod_l F
++ __strtof_internal F
++ __strtof_l F
++ __strtok_r F
++ __strtok_r_1c F
++ __strtol_internal F
++ __strtol_l F
++ __strtold_internal F
++ __strtold_l F
++ __strtoll_internal F
++ __strtoll_l F
++ __strtoul_internal F
++ __strtoul_l F
++ __strtoull_internal F
++ __strtoull_l F
++ __strverscmp F
++ __strxfrm_l F
++ __swprintf_chk F
++ __sysconf F
++ __sysctl F
++ __syslog_chk F
++ __sysv_signal F
++ __timezone D 0x8
++ __toascii_l F
++ __tolower_l F
++ __toupper_l F
++ __towctrans F
++ __towctrans_l F
++ __towlower_l F
++ __towupper_l F
++ __ttyname_r_chk F
++ __tzname D 0x10
++ __uflow F
++ __underflow F
++ __uselocale F
++ __vasprintf_chk F
++ __vdprintf_chk F
++ __vfork F
++ __vfprintf_chk F
++ __vfscanf F
++ __vfwprintf_chk F
++ __vprintf_chk F
++ __vsnprintf F
++ __vsnprintf_chk F
++ __vsprintf_chk F
++ __vsscanf F
++ __vswprintf_chk F
++ __vsyslog_chk F
++ __vwprintf_chk F
++ __wait F
++ __waitpid F
++ __wcpcpy_chk F
++ __wcpncpy_chk F
++ __wcrtomb_chk F
++ __wcscasecmp_l F
++ __wcscat_chk F
++ __wcscoll_l F
++ __wcscpy_chk F
++ __wcsftime_l F
++ __wcsncasecmp_l F
++ __wcsncat_chk F
++ __wcsncpy_chk F
++ __wcsnrtombs_chk F
++ __wcsrtombs_chk F
++ __wcstod_internal F
++ __wcstod_l F
++ __wcstof_internal F
++ __wcstof_l F
++ __wcstol_internal F
++ __wcstol_l F
++ __wcstold_internal F
++ __wcstold_l F
++ __wcstoll_internal F
++ __wcstoll_l F
++ __wcstombs_chk F
++ __wcstoul_internal F
++ __wcstoul_l F
++ __wcstoull_internal F
++ __wcstoull_l F
++ __wcsxfrm_l F
++ __wctomb_chk F
++ __wctrans_l F
++ __wctype_l F
++ __wmemcpy_chk F
++ __wmemmove_chk F
++ __wmempcpy_chk F
++ __wmemset_chk F
++ __woverflow F
++ __wprintf_chk F
++ __write F
++ __wuflow F
++ __wunderflow F
++ __xmknod F
++ __xmknodat F
++ __xpg_basename F
++ __xpg_sigpause F
++ __xpg_strerror_r F
++ __xstat F
++ __xstat64 F
++ _authenticate F
++ _dl_mcount_wrapper F
++ _dl_mcount_wrapper_check F
++ _environ D 0x8
++ _exit F
++ _flushlbf F
++ _libc_intl_domainname D 0x5
++ _longjmp F
++ _mcleanup F
++ _mcount F
++ _nl_default_dirname D 0x12
++ _nl_domain_bindings D 0x8
++ _nl_msg_cat_cntr D 0x4
++ _null_auth D 0x18
++ _obstack_allocated_p F
++ _obstack_begin F
++ _obstack_begin_1 F
++ _obstack_free F
++ _obstack_memory_used F
++ _obstack_newchunk F
++ _res D 0x238
++ _res_hconf D 0x48
++ _rpc_dtablesize F
++ _seterr_reply F
++ _setjmp F
++ _sys_errlist D 0x438
++ _sys_nerr D 0x4
++ _sys_siglist D 0x208
++ _tolower F
++ _toupper F
++ a64l F
++ abort F
++ abs F
++ accept F
++ accept4 F
++ access F
++ acct F
++ addmntent F
++ addseverity F
++ adjtime F
++ adjtimex F
++ advance F
++ alarm F
++ aligned_alloc F
++ alphasort F
++ alphasort64 F
++ argp_err_exit_status D 0x4
++ argp_error F
++ argp_failure F
++ argp_help F
++ argp_parse F
++ argp_program_bug_address D 0x8
++ argp_program_version D 0x8
++ argp_program_version_hook D 0x8
++ argp_state_help F
++ argp_usage F
++ argz_add F
++ argz_add_sep F
++ argz_append F
++ argz_count F
++ argz_create F
++ argz_create_sep F
++ argz_delete F
++ argz_extract F
++ argz_insert F
++ argz_next F
++ argz_replace F
++ argz_stringify F
++ asctime F
++ asctime_r F
++ asprintf F
++ atof F
++ atoi F
++ atol F
++ atoll F
++ authdes_create F
++ authdes_getucred F
++ authdes_pk_create F
++ authnone_create F
++ authunix_create F
++ authunix_create_default F
++ backtrace F
++ backtrace_symbols F
++ backtrace_symbols_fd F
++ basename F
++ bcmp F
++ bcopy F
++ bdflush F
++ bind F
++ bind_textdomain_codeset F
++ bindresvport F
++ bindtextdomain F
++ brk F
++ bsd_signal F
++ bsearch F
++ btowc F
++ bzero F
++ c16rtomb F
++ c32rtomb F
++ calloc F
++ callrpc F
++ canonicalize_file_name F
++ capget F
++ capset F
++ catclose F
++ catgets F
++ catopen F
++ cbc_crypt F
++ cfgetispeed F
++ cfgetospeed F
++ cfmakeraw F
++ cfree F
++ cfsetispeed F
++ cfsetospeed F
++ cfsetspeed F
++ chdir F
++ chflags F
++ chmod F
++ chown F
++ chroot F
++ clearenv F
++ clearerr F
++ clearerr_unlocked F
++ clnt_broadcast F
++ clnt_create F
++ clnt_pcreateerror F
++ clnt_perrno F
++ clnt_perror F
++ clnt_spcreateerror F
++ clnt_sperrno F
++ clnt_sperror F
++ clntraw_create F
++ clnttcp_create F
++ clntudp_bufcreate F
++ clntudp_create F
++ clntunix_create F
++ clock F
++ clock_adjtime F
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ clone F
++ close F
++ closedir F
++ closelog F
++ confstr F
++ connect F
++ copysign F
++ copysignf F
++ copysignl F
++ creat F
++ creat64 F
++ create_module F
++ ctermid F
++ ctime F
++ ctime_r F
++ cuserid F
++ daemon F
++ daylight D 0x4
++ dcgettext F
++ dcngettext F
++ delete_module F
++ des_setparity F
++ dgettext F
++ difftime F
++ dirfd F
++ dirname F
++ div F
++ dl_iterate_phdr F
++ dngettext F
++ dprintf F
++ drand48 F
++ drand48_r F
++ dup F
++ dup2 F
++ dup3 F
++ duplocale F
++ dysize F
++ eaccess F
++ ecb_crypt F
++ ecvt F
++ ecvt_r F
++ endaliasent F
++ endfsent F
++ endgrent F
++ endhostent F
++ endmntent F
++ endnetent F
++ endnetgrent F
++ endprotoent F
++ endpwent F
++ endrpcent F
++ endservent F
++ endsgent F
++ endspent F
++ endttyent F
++ endusershell F
++ endutent F
++ endutxent F
++ environ D 0x8
++ envz_add F
++ envz_entry F
++ envz_get F
++ envz_merge F
++ envz_remove F
++ envz_strip F
++ epoll_create F
++ epoll_create1 F
++ epoll_ctl F
++ epoll_pwait F
++ epoll_wait F
++ erand48 F
++ erand48_r F
++ err F
++ error F
++ error_at_line F
++ error_message_count D 0x4
++ error_one_per_line D 0x4
++ error_print_progname D 0x8
++ errx F
++ ether_aton F
++ ether_aton_r F
++ ether_hostton F
++ ether_line F
++ ether_ntoa F
++ ether_ntoa_r F
++ ether_ntohost F
++ euidaccess F
++ eventfd F
++ eventfd_read F
++ eventfd_write F
++ execl F
++ execle F
++ execlp F
++ execv F
++ execve F
++ execvp F
++ execvpe F
++ exit F
++ faccessat F
++ fallocate F
++ fallocate64 F
++ fanotify_init F
++ fanotify_mark F
++ fattach F
++ fchdir F
++ fchflags F
++ fchmod F
++ fchmodat F
++ fchown F
++ fchownat F
++ fclose F
++ fcloseall F
++ fcntl F
++ fcvt F
++ fcvt_r F
++ fdatasync F
++ fdetach F
++ fdopen F
++ fdopendir F
++ feof F
++ feof_unlocked F
++ ferror F
++ ferror_unlocked F
++ fexecve F
++ fflush F
++ fflush_unlocked F
++ ffs F
++ ffsl F
++ ffsll F
++ fgetc F
++ fgetc_unlocked F
++ fgetgrent F
++ fgetgrent_r F
++ fgetpos F
++ fgetpos64 F
++ fgetpwent F
++ fgetpwent_r F
++ fgets F
++ fgets_unlocked F
++ fgetsgent F
++ fgetsgent_r F
++ fgetspent F
++ fgetspent_r F
++ fgetwc F
++ fgetwc_unlocked F
++ fgetws F
++ fgetws_unlocked F
++ fgetxattr F
++ fileno F
++ fileno_unlocked F
++ finite F
++ finitef F
++ finitel F
++ flistxattr F
++ flock F
++ flockfile F
++ fmemopen F
++ fmtmsg F
++ fnmatch F
++ fopen F
++ fopen64 F
++ fopencookie F
++ fork F
++ fpathconf F
++ fprintf F
++ fputc F
++ fputc_unlocked F
++ fputs F
++ fputs_unlocked F
++ fputwc F
++ fputwc_unlocked F
++ fputws F
++ fputws_unlocked F
++ fread F
++ fread_unlocked F
++ free F
++ freeaddrinfo F
++ freeifaddrs F
++ freelocale F
++ fremovexattr F
++ freopen F
++ freopen64 F
++ frexp F
++ frexpf F
++ frexpl F
++ fscanf F
++ fseek F
++ fseeko F
++ fseeko64 F
++ fsetpos F
++ fsetpos64 F
++ fsetxattr F
++ fstatfs F
++ fstatfs64 F
++ fstatvfs F
++ fstatvfs64 F
++ fsync F
++ ftell F
++ ftello F
++ ftello64 F
++ ftime F
++ ftok F
++ ftruncate F
++ ftruncate64 F
++ ftrylockfile F
++ fts_children F
++ fts_close F
++ fts_open F
++ fts_read F
++ fts_set F
++ ftw F
++ ftw64 F
++ funlockfile F
++ futimens F
++ futimes F
++ futimesat F
++ fwide F
++ fwprintf F
++ fwrite F
++ fwrite_unlocked F
++ fwscanf F
++ gai_strerror F
++ gcvt F
++ get_avphys_pages F
++ get_current_dir_name F
++ get_kernel_syms F
++ get_myaddress F
++ get_nprocs F
++ get_nprocs_conf F
++ get_phys_pages F
++ getaddrinfo F
++ getaliasbyname F
++ getaliasbyname_r F
++ getaliasent F
++ getaliasent_r F
++ getauxval F
++ getc F
++ getc_unlocked F
++ getchar F
++ getchar_unlocked F
++ getcontext F
++ getcwd F
++ getdate F
++ getdate_err D 0x4
++ getdate_r F
++ getdelim F
++ getdirentries F
++ getdirentries64 F
++ getdomainname F
++ getdtablesize F
++ getegid F
++ getenv F
++ geteuid F
++ getfsent F
++ getfsfile F
++ getfsspec F
++ getgid F
++ getgrent F
++ getgrent_r F
++ getgrgid F
++ getgrgid_r F
++ getgrnam F
++ getgrnam_r F
++ getgrouplist F
++ getgroups F
++ gethostbyaddr F
++ gethostbyaddr_r F
++ gethostbyname F
++ gethostbyname2 F
++ gethostbyname2_r F
++ gethostbyname_r F
++ gethostent F
++ gethostent_r F
++ gethostid F
++ gethostname F
++ getifaddrs F
++ getipv4sourcefilter F
++ getitimer F
++ getline F
++ getloadavg F
++ getlogin F
++ getlogin_r F
++ getmntent F
++ getmntent_r F
++ getmsg F
++ getnameinfo F
++ getnetbyaddr F
++ getnetbyaddr_r F
++ getnetbyname F
++ getnetbyname_r F
++ getnetent F
++ getnetent_r F
++ getnetgrent F
++ getnetgrent_r F
++ getnetname F
++ getopt F
++ getopt_long F
++ getopt_long_only F
++ getpagesize F
++ getpass F
++ getpeername F
++ getpgid F
++ getpgrp F
++ getpid F
++ getpmsg F
++ getppid F
++ getpriority F
++ getprotobyname F
++ getprotobyname_r F
++ getprotobynumber F
++ getprotobynumber_r F
++ getprotoent F
++ getprotoent_r F
++ getpt F
++ getpublickey F
++ getpw F
++ getpwent F
++ getpwent_r F
++ getpwnam F
++ getpwnam_r F
++ getpwuid F
++ getpwuid_r F
++ getresgid F
++ getresuid F
++ getrlimit F
++ getrlimit64 F
++ getrpcbyname F
++ getrpcbyname_r F
++ getrpcbynumber F
++ getrpcbynumber_r F
++ getrpcent F
++ getrpcent_r F
++ getrpcport F
++ getrusage F
++ gets F
++ getsecretkey F
++ getservbyname F
++ getservbyname_r F
++ getservbyport F
++ getservbyport_r F
++ getservent F
++ getservent_r F
++ getsgent F
++ getsgent_r F
++ getsgnam F
++ getsgnam_r F
++ getsid F
++ getsockname F
++ getsockopt F
++ getsourcefilter F
++ getspent F
++ getspent_r F
++ getspnam F
++ getspnam_r F
++ getsubopt F
++ gettext F
++ gettimeofday F
++ getttyent F
++ getttynam F
++ getuid F
++ getusershell F
++ getutent F
++ getutent_r F
++ getutid F
++ getutid_r F
++ getutline F
++ getutline_r F
++ getutmp F
++ getutmpx F
++ getutxent F
++ getutxid F
++ getutxline F
++ getw F
++ getwc F
++ getwc_unlocked F
++ getwchar F
++ getwchar_unlocked F
++ getwd F
++ getxattr F
++ glob F
++ glob64 F
++ glob_pattern_p F
++ globfree F
++ globfree64 F
++ gmtime F
++ gmtime_r F
++ gnu_dev_major F
++ gnu_dev_makedev F
++ gnu_dev_minor F
++ gnu_get_libc_release F
++ gnu_get_libc_version F
++ grantpt F
++ group_member F
++ gsignal F
++ gtty F
++ h_errlist D 0x28
++ h_nerr D 0x4
++ hasmntopt F
++ hcreate F
++ hcreate_r F
++ hdestroy F
++ hdestroy_r F
++ herror F
++ host2netname F
++ hsearch F
++ hsearch_r F
++ hstrerror F
++ htonl F
++ htons F
++ iconv F
++ iconv_close F
++ iconv_open F
++ if_freenameindex F
++ if_indextoname F
++ if_nameindex F
++ if_nametoindex F
++ imaxabs F
++ imaxdiv F
++ in6addr_any D 0x10
++ in6addr_loopback D 0x10
++ index F
++ inet6_opt_append F
++ inet6_opt_find F
++ inet6_opt_finish F
++ inet6_opt_get_val F
++ inet6_opt_init F
++ inet6_opt_next F
++ inet6_opt_set_val F
++ inet6_option_alloc F
++ inet6_option_append F
++ inet6_option_find F
++ inet6_option_init F
++ inet6_option_next F
++ inet6_option_space F
++ inet6_rth_add F
++ inet6_rth_getaddr F
++ inet6_rth_init F
++ inet6_rth_reverse F
++ inet6_rth_segments F
++ inet6_rth_space F
++ inet_addr F
++ inet_aton F
++ inet_lnaof F
++ inet_makeaddr F
++ inet_netof F
++ inet_network F
++ inet_nsap_addr F
++ inet_nsap_ntoa F
++ inet_ntoa F
++ inet_ntop F
++ inet_pton F
++ init_module F
++ initgroups F
++ initstate F
++ initstate_r F
++ innetgr F
++ inotify_add_watch F
++ inotify_init F
++ inotify_init1 F
++ inotify_rm_watch F
++ insque F
++ ioctl F
++ iruserok F
++ iruserok_af F
++ isalnum F
++ isalnum_l F
++ isalpha F
++ isalpha_l F
++ isascii F
++ isastream F
++ isatty F
++ isblank F
++ isblank_l F
++ iscntrl F
++ iscntrl_l F
++ isctype F
++ isdigit F
++ isdigit_l F
++ isfdtype F
++ isgraph F
++ isgraph_l F
++ isinf F
++ isinff F
++ isinfl F
++ islower F
++ islower_l F
++ isnan F
++ isnanf F
++ isnanl F
++ isprint F
++ isprint_l F
++ ispunct F
++ ispunct_l F
++ isspace F
++ isspace_l F
++ isupper F
++ isupper_l F
++ iswalnum F
++ iswalnum_l F
++ iswalpha F
++ iswalpha_l F
++ iswblank F
++ iswblank_l F
++ iswcntrl F
++ iswcntrl_l F
++ iswctype F
++ iswctype_l F
++ iswdigit F
++ iswdigit_l F
++ iswgraph F
++ iswgraph_l F
++ iswlower F
++ iswlower_l F
++ iswprint F
++ iswprint_l F
++ iswpunct F
++ iswpunct_l F
++ iswspace F
++ iswspace_l F
++ iswupper F
++ iswupper_l F
++ iswxdigit F
++ iswxdigit_l F
++ isxdigit F
++ isxdigit_l F
++ jrand48 F
++ jrand48_r F
++ key_decryptsession F
++ key_decryptsession_pk F
++ key_encryptsession F
++ key_encryptsession_pk F
++ key_gendes F
++ key_get_conv F
++ key_secretkey_is_set F
++ key_setnet F
++ key_setsecret F
++ kill F
++ killpg F
++ klogctl F
++ l64a F
++ labs F
++ lchmod F
++ lchown F
++ lckpwdf F
++ lcong48 F
++ lcong48_r F
++ ldexp F
++ ldexpf F
++ ldexpl F
++ ldiv F
++ lfind F
++ lgetxattr F
++ link F
++ linkat F
++ listen F
++ listxattr F
++ llabs F
++ lldiv F
++ llistxattr F
++ llseek F
++ loc1 D 0x8
++ loc2 D 0x8
++ localeconv F
++ localtime F
++ localtime_r F
++ lockf F
++ lockf64 F
++ locs D 0x8
++ longjmp F
++ lrand48 F
++ lrand48_r F
++ lremovexattr F
++ lsearch F
++ lseek F
++ lseek64 F
++ lsetxattr F
++ lutimes F
++ madvise F
++ makecontext F
++ mallinfo F
++ malloc F
++ malloc_get_state F
++ malloc_info F
++ malloc_set_state F
++ malloc_stats F
++ malloc_trim F
++ malloc_usable_size F
++ mallopt F
++ mallwatch D 0x8
++ mblen F
++ mbrlen F
++ mbrtoc16 F
++ mbrtoc32 F
++ mbrtowc F
++ mbsinit F
++ mbsnrtowcs F
++ mbsrtowcs F
++ mbstowcs F
++ mbtowc F
++ mcheck F
++ mcheck_check_all F
++ mcheck_pedantic F
++ memalign F
++ memccpy F
++ memchr F
++ memcmp F
++ memcpy F
++ memfrob F
++ memmem F
++ memmove F
++ mempcpy F
++ memrchr F
++ memset F
++ mincore F
++ mkdir F
++ mkdirat F
++ mkdtemp F
++ mkfifo F
++ mkfifoat F
++ mkostemp F
++ mkostemp64 F
++ mkostemps F
++ mkostemps64 F
++ mkstemp F
++ mkstemp64 F
++ mkstemps F
++ mkstemps64 F
++ mktemp F
++ mktime F
++ mlock F
++ mlockall F
++ mmap F
++ mmap64 F
++ modf F
++ modff F
++ modfl F
++ moncontrol F
++ monstartup F
++ mount F
++ mprobe F
++ mprotect F
++ mrand48 F
++ mrand48_r F
++ mremap F
++ msgctl F
++ msgget F
++ msgrcv F
++ msgsnd F
++ msync F
++ mtrace F
++ munlock F
++ munlockall F
++ munmap F
++ muntrace F
++ name_to_handle_at F
++ nanosleep F
++ netname2host F
++ netname2user F
++ newlocale F
++ nfsservctl F
++ nftw F
++ nftw64 F
++ ngettext F
++ nice F
++ nl_langinfo F
++ nl_langinfo_l F
++ nrand48 F
++ nrand48_r F
++ ntohl F
++ ntohs F
++ ntp_adjtime F
++ ntp_gettime F
++ ntp_gettimex F
++ obstack_alloc_failed_handler D 0x8
++ obstack_exit_failure D 0x4
++ obstack_free F
++ obstack_printf F
++ obstack_vprintf F
++ on_exit F
++ open F
++ open64 F
++ open_by_handle_at F
++ open_memstream F
++ open_wmemstream F
++ openat F
++ openat64 F
++ opendir F
++ openlog F
++ optarg D 0x8
++ opterr D 0x4
++ optind D 0x4
++ optopt D 0x4
++ parse_printf_format F
++ passwd2des F
++ pathconf F
++ pause F
++ pclose F
++ perror F
++ personality F
++ pipe F
++ pipe2 F
++ pivot_root F
++ pmap_getmaps F
++ pmap_getport F
++ pmap_rmtcall F
++ pmap_set F
++ pmap_unset F
++ poll F
++ popen F
++ posix_fadvise F
++ posix_fadvise64 F
++ posix_fallocate F
++ posix_fallocate64 F
++ posix_madvise F
++ posix_memalign F
++ posix_openpt F
++ posix_spawn F
++ posix_spawn_file_actions_addclose F
++ posix_spawn_file_actions_adddup2 F
++ posix_spawn_file_actions_addopen F
++ posix_spawn_file_actions_destroy F
++ posix_spawn_file_actions_init F
++ posix_spawnattr_destroy F
++ posix_spawnattr_getflags F
++ posix_spawnattr_getpgroup F
++ posix_spawnattr_getschedparam F
++ posix_spawnattr_getschedpolicy F
++ posix_spawnattr_getsigdefault F
++ posix_spawnattr_getsigmask F
++ posix_spawnattr_init F
++ posix_spawnattr_setflags F
++ posix_spawnattr_setpgroup F
++ posix_spawnattr_setschedparam F
++ posix_spawnattr_setschedpolicy F
++ posix_spawnattr_setsigdefault F
++ posix_spawnattr_setsigmask F
++ posix_spawnp F
++ ppoll F
++ prctl F
++ pread F
++ pread64 F
++ preadv F
++ preadv64 F
++ printf F
++ printf_size F
++ printf_size_info F
++ prlimit F
++ prlimit64 F
++ process_vm_readv F
++ process_vm_writev F
++ profil F
++ program_invocation_name D 0x8
++ program_invocation_short_name D 0x8
++ pselect F
++ psiginfo F
++ psignal F
++ pthread_attr_destroy F
++ pthread_attr_getdetachstate F
++ pthread_attr_getinheritsched F
++ pthread_attr_getschedparam F
++ pthread_attr_getschedpolicy F
++ pthread_attr_getscope F
++ pthread_attr_init F
++ pthread_attr_setdetachstate F
++ pthread_attr_setinheritsched F
++ pthread_attr_setschedparam F
++ pthread_attr_setschedpolicy F
++ pthread_attr_setscope F
++ pthread_cond_broadcast F
++ pthread_cond_destroy F
++ pthread_cond_init F
++ pthread_cond_signal F
++ pthread_cond_timedwait F
++ pthread_cond_wait F
++ pthread_condattr_destroy F
++ pthread_condattr_init F
++ pthread_equal F
++ pthread_exit F
++ pthread_getschedparam F
++ pthread_mutex_destroy F
++ pthread_mutex_init F
++ pthread_mutex_lock F
++ pthread_mutex_unlock F
++ pthread_self F
++ pthread_setcancelstate F
++ pthread_setcanceltype F
++ pthread_setschedparam F
++ ptrace F
++ ptsname F
++ ptsname_r F
++ putc F
++ putc_unlocked F
++ putchar F
++ putchar_unlocked F
++ putenv F
++ putgrent F
++ putmsg F
++ putpmsg F
++ putpwent F
++ puts F
++ putsgent F
++ putspent F
++ pututline F
++ pututxline F
++ putw F
++ putwc F
++ putwc_unlocked F
++ putwchar F
++ putwchar_unlocked F
++ pvalloc F
++ pwrite F
++ pwrite64 F
++ pwritev F
++ pwritev64 F
++ qecvt F
++ qecvt_r F
++ qfcvt F
++ qfcvt_r F
++ qgcvt F
++ qsort F
++ qsort_r F
++ query_module F
++ quick_exit F
++ quotactl F
++ raise F
++ rand F
++ rand_r F
++ random F
++ random_r F
++ rawmemchr F
++ rcmd F
++ rcmd_af F
++ re_comp F
++ re_compile_fastmap F
++ re_compile_pattern F
++ re_exec F
++ re_match F
++ re_match_2 F
++ re_search F
++ re_search_2 F
++ re_set_registers F
++ re_set_syntax F
++ re_syntax_options D 0x8
++ read F
++ readahead F
++ readdir F
++ readdir64 F
++ readdir64_r F
++ readdir_r F
++ readlink F
++ readlinkat F
++ readv F
++ realloc F
++ realpath F
++ reboot F
++ recv F
++ recvfrom F
++ recvmmsg F
++ recvmsg F
++ regcomp F
++ regerror F
++ regexec F
++ regfree F
++ register_printf_function F
++ register_printf_modifier F
++ register_printf_specifier F
++ register_printf_type F
++ registerrpc F
++ remap_file_pages F
++ remove F
++ removexattr F
++ remque F
++ rename F
++ renameat F
++ revoke F
++ rewind F
++ rewinddir F
++ rexec F
++ rexec_af F
++ rexecoptions D 0x4
++ rindex F
++ rmdir F
++ rpc_createerr D 0x20
++ rpmatch F
++ rresvport F
++ rresvport_af F
++ rtime F
++ ruserok F
++ ruserok_af F
++ ruserpass F
++ sbrk F
++ scalbn F
++ scalbnf F
++ scalbnl F
++ scandir F
++ scandir64 F
++ scandirat F
++ scandirat64 F
++ scanf F
++ sched_get_priority_max F
++ sched_get_priority_min F
++ sched_getaffinity F
++ sched_getcpu F
++ sched_getparam F
++ sched_getscheduler F
++ sched_rr_get_interval F
++ sched_setaffinity F
++ sched_setparam F
++ sched_setscheduler F
++ sched_yield F
++ secure_getenv F
++ seed48 F
++ seed48_r F
++ seekdir F
++ select F
++ semctl F
++ semget F
++ semop F
++ semtimedop F
++ send F
++ sendfile F
++ sendfile64 F
++ sendmmsg F
++ sendmsg F
++ sendto F
++ setaliasent F
++ setbuf F
++ setbuffer F
++ setcontext F
++ setdomainname F
++ setegid F
++ setenv F
++ seteuid F
++ setfsent F
++ setfsgid F
++ setfsuid F
++ setgid F
++ setgrent F
++ setgroups F
++ sethostent F
++ sethostid F
++ sethostname F
++ setipv4sourcefilter F
++ setitimer F
++ setjmp F
++ setlinebuf F
++ setlocale F
++ setlogin F
++ setlogmask F
++ setmntent F
++ setnetent F
++ setnetgrent F
++ setns F
++ setpgid F
++ setpgrp F
++ setpriority F
++ setprotoent F
++ setpwent F
++ setregid F
++ setresgid F
++ setresuid F
++ setreuid F
++ setrlimit F
++ setrlimit64 F
++ setrpcent F
++ setservent F
++ setsgent F
++ setsid F
++ setsockopt F
++ setsourcefilter F
++ setspent F
++ setstate F
++ setstate_r F
++ settimeofday F
++ setttyent F
++ setuid F
++ setusershell F
++ setutent F
++ setutxent F
++ setvbuf F
++ setxattr F
++ sgetsgent F
++ sgetsgent_r F
++ sgetspent F
++ sgetspent_r F
++ shmat F
++ shmctl F
++ shmdt F
++ shmget F
++ shutdown F
++ sigaction F
++ sigaddset F
++ sigaltstack F
++ sigandset F
++ sigblock F
++ sigdelset F
++ sigemptyset F
++ sigfillset F
++ siggetmask F
++ sighold F
++ sigignore F
++ siginterrupt F
++ sigisemptyset F
++ sigismember F
++ siglongjmp F
++ signal F
++ signalfd F
++ sigorset F
++ sigpause F
++ sigpending F
++ sigprocmask F
++ sigqueue F
++ sigrelse F
++ sigreturn F
++ sigset F
++ sigsetmask F
++ sigstack F
++ sigsuspend F
++ sigtimedwait F
++ sigvec F
++ sigwait F
++ sigwaitinfo F
++ sleep F
++ snprintf F
++ sockatmark F
++ socket F
++ socketpair F
++ splice F
++ sprintf F
++ sprofil F
++ srand F
++ srand48 F
++ srand48_r F
++ srandom F
++ srandom_r F
++ sscanf F
++ ssignal F
++ sstk F
++ statfs F
++ statfs64 F
++ statvfs F
++ statvfs64 F
++ stderr D 0x8
++ stdin D 0x8
++ stdout D 0x8
++ step F
++ stime F
++ stpcpy F
++ stpncpy F
++ strcasecmp F
++ strcasecmp_l F
++ strcasestr F
++ strcat F
++ strchr F
++ strchrnul F
++ strcmp F
++ strcoll F
++ strcoll_l F
++ strcpy F
++ strcspn F
++ strdup F
++ strerror F
++ strerror_l F
++ strerror_r F
++ strfmon F
++ strfmon_l F
++ strfry F
++ strftime F
++ strftime_l F
++ strlen F
++ strncasecmp F
++ strncasecmp_l F
++ strncat F
++ strncmp F
++ strncpy F
++ strndup F
++ strnlen F
++ strpbrk F
++ strptime F
++ strptime_l F
++ strrchr F
++ strsep F
++ strsignal F
++ strspn F
++ strstr F
++ strtod F
++ strtod_l F
++ strtof F
++ strtof_l F
++ strtoimax F
++ strtok F
++ strtok_r F
++ strtol F
++ strtol_l F
++ strtold F
++ strtold_l F
++ strtoll F
++ strtoll_l F
++ strtoq F
++ strtoul F
++ strtoul_l F
++ strtoull F
++ strtoull_l F
++ strtoumax F
++ strtouq F
++ strverscmp F
++ strxfrm F
++ strxfrm_l F
++ stty F
++ svc_exit F
++ svc_fdset D 0x80
++ svc_getreq F
++ svc_getreq_common F
++ svc_getreq_poll F
++ svc_getreqset F
++ svc_max_pollfd D 0x4
++ svc_pollfd D 0x8
++ svc_register F
++ svc_run F
++ svc_sendreply F
++ svc_unregister F
++ svcauthdes_stats D 0x18
++ svcerr_auth F
++ svcerr_decode F
++ svcerr_noproc F
++ svcerr_noprog F
++ svcerr_progvers F
++ svcerr_systemerr F
++ svcerr_weakauth F
++ svcfd_create F
++ svcraw_create F
++ svctcp_create F
++ svcudp_bufcreate F
++ svcudp_create F
++ svcudp_enablecache F
++ svcunix_create F
++ svcunixfd_create F
++ swab F
++ swapcontext F
++ swapoff F
++ swapon F
++ swprintf F
++ swscanf F
++ symlink F
++ symlinkat F
++ sync F
++ sync_file_range F
++ syncfs F
++ sys_errlist D 0x438
++ sys_nerr D 0x4
++ sys_sigabbrev D 0x208
++ sys_siglist D 0x208
++ syscall F
++ sysconf F
++ sysctl F
++ sysinfo F
++ syslog F
++ system F
++ sysv_signal F
++ tcdrain F
++ tcflow F
++ tcflush F
++ tcgetattr F
++ tcgetpgrp F
++ tcgetsid F
++ tcsendbreak F
++ tcsetattr F
++ tcsetpgrp F
++ tdelete F
++ tdestroy F
++ tee F
++ telldir F
++ tempnam F
++ textdomain F
++ tfind F
++ time F
++ timegm F
++ timelocal F
++ timerfd_create F
++ timerfd_gettime F
++ timerfd_settime F
++ times F
++ timespec_get F
++ timezone D 0x8
++ tmpfile F
++ tmpfile64 F
++ tmpnam F
++ tmpnam_r F
++ toascii F
++ tolower F
++ tolower_l F
++ toupper F
++ toupper_l F
++ towctrans F
++ towctrans_l F
++ towlower F
++ towlower_l F
++ towupper F
++ towupper_l F
++ tr_break F
++ truncate F
++ truncate64 F
++ tsearch F
++ ttyname F
++ ttyname_r F
++ ttyslot F
++ twalk F
++ tzname D 0x10
++ tzset F
++ ualarm F
++ ulckpwdf F
++ ulimit F
++ umask F
++ umount F
++ umount2 F
++ uname F
++ ungetc F
++ ungetwc F
++ unlink F
++ unlinkat F
++ unlockpt F
++ unsetenv F
++ unshare F
++ updwtmp F
++ updwtmpx F
++ uselib F
++ uselocale F
++ user2netname F
++ usleep F
++ ustat F
++ utime F
++ utimensat F
++ utimes F
++ utmpname F
++ utmpxname F
++ valloc F
++ vasprintf F
++ vdprintf F
++ verr F
++ verrx F
++ versionsort F
++ versionsort64 F
++ vfork F
++ vfprintf F
++ vfscanf F
++ vfwprintf F
++ vfwscanf F
++ vhangup F
++ vlimit F
++ vmsplice F
++ vprintf F
++ vscanf F
++ vsnprintf F
++ vsprintf F
++ vsscanf F
++ vswprintf F
++ vswscanf F
++ vsyslog F
++ vtimes F
++ vwarn F
++ vwarnx F
++ vwprintf F
++ vwscanf F
++ wait F
++ wait3 F
++ wait4 F
++ waitid F
++ waitpid F
++ warn F
++ warnx F
++ wcpcpy F
++ wcpncpy F
++ wcrtomb F
++ wcscasecmp F
++ wcscasecmp_l F
++ wcscat F
++ wcschr F
++ wcschrnul F
++ wcscmp F
++ wcscoll F
++ wcscoll_l F
++ wcscpy F
++ wcscspn F
++ wcsdup F
++ wcsftime F
++ wcsftime_l F
++ wcslen F
++ wcsncasecmp F
++ wcsncasecmp_l F
++ wcsncat F
++ wcsncmp F
++ wcsncpy F
++ wcsnlen F
++ wcsnrtombs F
++ wcspbrk F
++ wcsrchr F
++ wcsrtombs F
++ wcsspn F
++ wcsstr F
++ wcstod F
++ wcstod_l F
++ wcstof F
++ wcstof_l F
++ wcstoimax F
++ wcstok F
++ wcstol F
++ wcstol_l F
++ wcstold F
++ wcstold_l F
++ wcstoll F
++ wcstoll_l F
++ wcstombs F
++ wcstoq F
++ wcstoul F
++ wcstoul_l F
++ wcstoull F
++ wcstoull_l F
++ wcstoumax F
++ wcstouq F
++ wcswcs F
++ wcswidth F
++ wcsxfrm F
++ wcsxfrm_l F
++ wctob F
++ wctomb F
++ wctrans F
++ wctrans_l F
++ wctype F
++ wctype_l F
++ wcwidth F
++ wmemchr F
++ wmemcmp F
++ wmemcpy F
++ wmemmove F
++ wmempcpy F
++ wmemset F
++ wordexp F
++ wordfree F
++ wprintf F
++ write F
++ writev F
++ wscanf F
++ xdecrypt F
++ xdr_accepted_reply F
++ xdr_array F
++ xdr_authdes_cred F
++ xdr_authdes_verf F
++ xdr_authunix_parms F
++ xdr_bool F
++ xdr_bytes F
++ xdr_callhdr F
++ xdr_callmsg F
++ xdr_char F
++ xdr_cryptkeyarg F
++ xdr_cryptkeyarg2 F
++ xdr_cryptkeyres F
++ xdr_des_block F
++ xdr_double F
++ xdr_enum F
++ xdr_float F
++ xdr_free F
++ xdr_getcredres F
++ xdr_hyper F
++ xdr_int F
++ xdr_int16_t F
++ xdr_int32_t F
++ xdr_int64_t F
++ xdr_int8_t F
++ xdr_key_netstarg F
++ xdr_key_netstres F
++ xdr_keybuf F
++ xdr_keystatus F
++ xdr_long F
++ xdr_longlong_t F
++ xdr_netnamestr F
++ xdr_netobj F
++ xdr_opaque F
++ xdr_opaque_auth F
++ xdr_pmap F
++ xdr_pmaplist F
++ xdr_pointer F
++ xdr_quad_t F
++ xdr_reference F
++ xdr_rejected_reply F
++ xdr_replymsg F
++ xdr_rmtcall_args F
++ xdr_rmtcallres F
++ xdr_short F
++ xdr_sizeof F
++ xdr_string F
++ xdr_u_char F
++ xdr_u_hyper F
++ xdr_u_int F
++ xdr_u_long F
++ xdr_u_longlong_t F
++ xdr_u_quad_t F
++ xdr_u_short F
++ xdr_uint16_t F
++ xdr_uint32_t F
++ xdr_uint64_t F
++ xdr_uint8_t F
++ xdr_union F
++ xdr_unixcred F
++ xdr_vector F
++ xdr_void F
++ xdr_wrapstring F
++ xdrmem_create F
++ xdrrec_create F
++ xdrrec_endofrecord F
++ xdrrec_eof F
++ xdrrec_skiprecord F
++ xdrstdio_create F
++ xencrypt F
++ xprt_register F
++ xprt_unregister F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libcrypt-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,9 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ crypt F
++ crypt_r F
++ encrypt F
++ encrypt_r F
++ fcrypt F
++ setkey F
++ setkey_r F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libdl-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,11 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ dladdr F
++ dladdr1 F
++ dlclose F
++ dlerror F
++ dlinfo F
++ dlmopen F
++ dlopen F
++ dlsym F
++ dlvsym F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libm-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,402 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ _LIB_VERSION D 0x4
++ __acos_finite F
++ __acosf_finite F
++ __acosh_finite F
++ __acoshf_finite F
++ __acoshl_finite F
++ __acosl_finite F
++ __asin_finite F
++ __asinf_finite F
++ __asinl_finite F
++ __atan2_finite F
++ __atan2f_finite F
++ __atan2l_finite F
++ __atanh_finite F
++ __atanhf_finite F
++ __atanhl_finite F
++ __clog10 F
++ __clog10f F
++ __clog10l F
++ __cosh_finite F
++ __coshf_finite F
++ __coshl_finite F
++ __exp10_finite F
++ __exp10f_finite F
++ __exp10l_finite F
++ __exp2_finite F
++ __exp2f_finite F
++ __exp2l_finite F
++ __exp_finite F
++ __expf_finite F
++ __expl_finite F
++ __fe_dfl_env D 0x8
++ __fe_enabled_env D 0x8
++ __fe_nomask_env F
++ __fe_nonieee_env D 0x8
++ __finite F
++ __finitef F
++ __finitel F
++ __fmod_finite F
++ __fmodf_finite F
++ __fmodl_finite F
++ __fpclassify F
++ __fpclassifyf F
++ __fpclassifyl F
++ __gamma_r_finite F
++ __gammaf_r_finite F
++ __gammal_r_finite F
++ __hypot_finite F
++ __hypotf_finite F
++ __hypotl_finite F
++ __j0_finite F
++ __j0f_finite F
++ __j0l_finite F
++ __j1_finite F
++ __j1f_finite F
++ __j1l_finite F
++ __jn_finite F
++ __jnf_finite F
++ __jnl_finite F
++ __lgamma_r_finite F
++ __lgammaf_r_finite F
++ __lgammal_r_finite F
++ __log10_finite F
++ __log10f_finite F
++ __log10l_finite F
++ __log2_finite F
++ __log2f_finite F
++ __log2l_finite F
++ __log_finite F
++ __logf_finite F
++ __logl_finite F
++ __nldbl_nexttowardf F
++ __pow_finite F
++ __powf_finite F
++ __powl_finite F
++ __remainder_finite F
++ __remainderf_finite F
++ __remainderl_finite F
++ __scalb_finite F
++ __scalbf_finite F
++ __scalbl_finite F
++ __signbit F
++ __signbitf F
++ __signbitl F
++ __sinh_finite F
++ __sinhf_finite F
++ __sinhl_finite F
++ __sqrt_finite F
++ __sqrtf_finite F
++ __sqrtl_finite F
++ __y0_finite F
++ __y0f_finite F
++ __y0l_finite F
++ __y1_finite F
++ __y1f_finite F
++ __y1l_finite F
++ __yn_finite F
++ __ynf_finite F
++ __ynl_finite F
++ acos F
++ acosf F
++ acosh F
++ acoshf F
++ acoshl F
++ acosl F
++ asin F
++ asinf F
++ asinh F
++ asinhf F
++ asinhl F
++ asinl F
++ atan F
++ atan2 F
++ atan2f F
++ atan2l F
++ atanf F
++ atanh F
++ atanhf F
++ atanhl F
++ atanl F
++ cabs F
++ cabsf F
++ cabsl F
++ cacos F
++ cacosf F
++ cacosh F
++ cacoshf F
++ cacoshl F
++ cacosl F
++ carg F
++ cargf F
++ cargl F
++ casin F
++ casinf F
++ casinh F
++ casinhf F
++ casinhl F
++ casinl F
++ catan F
++ catanf F
++ catanh F
++ catanhf F
++ catanhl F
++ catanl F
++ cbrt F
++ cbrtf F
++ cbrtl F
++ ccos F
++ ccosf F
++ ccosh F
++ ccoshf F
++ ccoshl F
++ ccosl F
++ ceil F
++ ceilf F
++ ceill F
++ cexp F
++ cexpf F
++ cexpl F
++ cimag F
++ cimagf F
++ cimagl F
++ clog F
++ clog10 F
++ clog10f F
++ clog10l F
++ clogf F
++ clogl F
++ conj F
++ conjf F
++ conjl F
++ copysign F
++ copysignf F
++ copysignl F
++ cos F
++ cosf F
++ cosh F
++ coshf F
++ coshl F
++ cosl F
++ cpow F
++ cpowf F
++ cpowl F
++ cproj F
++ cprojf F
++ cprojl F
++ creal F
++ crealf F
++ creall F
++ csin F
++ csinf F
++ csinh F
++ csinhf F
++ csinhl F
++ csinl F
++ csqrt F
++ csqrtf F
++ csqrtl F
++ ctan F
++ ctanf F
++ ctanh F
++ ctanhf F
++ ctanhl F
++ ctanl F
++ drem F
++ dremf F
++ dreml F
++ erf F
++ erfc F
++ erfcf F
++ erfcl F
++ erff F
++ erfl F
++ exp F
++ exp10 F
++ exp10f F
++ exp10l F
++ exp2 F
++ exp2f F
++ exp2l F
++ expf F
++ expl F
++ expm1 F
++ expm1f F
++ expm1l F
++ fabs F
++ fabsf F
++ fabsl F
++ fdim F
++ fdimf F
++ fdiml F
++ feclearexcept F
++ fedisableexcept F
++ feenableexcept F
++ fegetenv F
++ fegetexcept F
++ fegetexceptflag F
++ fegetround F
++ feholdexcept F
++ feraiseexcept F
++ fesetenv F
++ fesetexceptflag F
++ fesetround F
++ fetestexcept F
++ feupdateenv F
++ finite F
++ finitef F
++ finitel F
++ floor F
++ floorf F
++ floorl F
++ fma F
++ fmaf F
++ fmal F
++ fmax F
++ fmaxf F
++ fmaxl F
++ fmin F
++ fminf F
++ fminl F
++ fmod F
++ fmodf F
++ fmodl F
++ frexp F
++ frexpf F
++ frexpl F
++ gamma F
++ gammaf F
++ gammal F
++ hypot F
++ hypotf F
++ hypotl F
++ ilogb F
++ ilogbf F
++ ilogbl F
++ j0 F
++ j0f F
++ j0l F
++ j1 F
++ j1f F
++ j1l F
++ jn F
++ jnf F
++ jnl F
++ ldexp F
++ ldexpf F
++ ldexpl F
++ lgamma F
++ lgamma_r F
++ lgammaf F
++ lgammaf_r F
++ lgammal F
++ lgammal_r F
++ llrint F
++ llrintf F
++ llrintl F
++ llround F
++ llroundf F
++ llroundl F
++ log F
++ log10 F
++ log10f F
++ log10l F
++ log1p F
++ log1pf F
++ log1pl F
++ log2 F
++ log2f F
++ log2l F
++ logb F
++ logbf F
++ logbl F
++ logf F
++ logl F
++ lrint F
++ lrintf F
++ lrintl F
++ lround F
++ lroundf F
++ lroundl F
++ matherr F
++ modf F
++ modff F
++ modfl F
++ nan F
++ nanf F
++ nanl F
++ nearbyint F
++ nearbyintf F
++ nearbyintl F
++ nextafter F
++ nextafterf F
++ nextafterl F
++ nexttoward F
++ nexttowardf F
++ nexttowardl F
++ pow F
++ pow10 F
++ pow10f F
++ pow10l F
++ powf F
++ powl F
++ remainder F
++ remainderf F
++ remainderl F
++ remquo F
++ remquof F
++ remquol F
++ rint F
++ rintf F
++ rintl F
++ round F
++ roundf F
++ roundl F
++ scalb F
++ scalbf F
++ scalbl F
++ scalbln F
++ scalblnf F
++ scalblnl F
++ scalbn F
++ scalbnf F
++ scalbnl F
++ signgam D 0x4
++ significand F
++ significandf F
++ significandl F
++ sin F
++ sincos F
++ sincosf F
++ sincosl F
++ sinf F
++ sinh F
++ sinhf F
++ sinhl F
++ sinl F
++ sqrt F
++ sqrtf F
++ sqrtl F
++ tan F
++ tanf F
++ tanh F
++ tanhf F
++ tanhl F
++ tanl F
++ tgamma F
++ tgammaf F
++ tgammal F
++ trunc F
++ truncf F
++ truncl F
++ y0 F
++ y0f F
++ y0l F
++ y1 F
++ y1f F
++ y1l F
++ yn F
++ ynf F
++ ynl F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libnsl-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,123 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ __free_fdresult F
++ __nis_default_access F
++ __nis_default_group F
++ __nis_default_owner F
++ __nis_default_ttl F
++ __nis_finddirectory F
++ __nis_hash F
++ __nisbind_connect F
++ __nisbind_create F
++ __nisbind_destroy F
++ __nisbind_next F
++ __yp_check F
++ nis_add F
++ nis_add_entry F
++ nis_addmember F
++ nis_checkpoint F
++ nis_clone_directory F
++ nis_clone_object F
++ nis_clone_result F
++ nis_creategroup F
++ nis_destroy_object F
++ nis_destroygroup F
++ nis_dir_cmp F
++ nis_domain_of F
++ nis_domain_of_r F
++ nis_first_entry F
++ nis_free_directory F
++ nis_free_object F
++ nis_free_request F
++ nis_freenames F
++ nis_freeresult F
++ nis_freeservlist F
++ nis_freetags F
++ nis_getnames F
++ nis_getservlist F
++ nis_ismember F
++ nis_leaf_of F
++ nis_leaf_of_r F
++ nis_lerror F
++ nis_list F
++ nis_local_directory F
++ nis_local_group F
++ nis_local_host F
++ nis_local_principal F
++ nis_lookup F
++ nis_mkdir F
++ nis_modify F
++ nis_modify_entry F
++ nis_name_of F
++ nis_name_of_r F
++ nis_next_entry F
++ nis_perror F
++ nis_ping F
++ nis_print_directory F
++ nis_print_entry F
++ nis_print_group F
++ nis_print_group_entry F
++ nis_print_link F
++ nis_print_object F
++ nis_print_result F
++ nis_print_rights F
++ nis_print_table F
++ nis_read_obj F
++ nis_remove F
++ nis_remove_entry F
++ nis_removemember F
++ nis_rmdir F
++ nis_servstate F
++ nis_sperrno F
++ nis_sperror F
++ nis_sperror_r F
++ nis_stats F
++ nis_verifygroup F
++ nis_write_obj F
++ readColdStartFile F
++ writeColdStartFile F
++ xdr_cback_data F
++ xdr_domainname F
++ xdr_keydat F
++ xdr_mapname F
++ xdr_obj_p F
++ xdr_peername F
++ xdr_valdat F
++ xdr_yp_buf F
++ xdr_ypall F
++ xdr_ypbind_binding F
++ xdr_ypbind_resp F
++ xdr_ypbind_resptype F
++ xdr_ypbind_setdom F
++ xdr_ypdelete_args F
++ xdr_ypmap_parms F
++ xdr_ypmaplist F
++ xdr_yppush_status F
++ xdr_yppushresp_xfr F
++ xdr_ypreq_key F
++ xdr_ypreq_nokey F
++ xdr_ypreq_xfr F
++ xdr_ypresp_all F
++ xdr_ypresp_key_val F
++ xdr_ypresp_maplist F
++ xdr_ypresp_master F
++ xdr_ypresp_order F
++ xdr_ypresp_val F
++ xdr_ypresp_xfr F
++ xdr_ypstat F
++ xdr_ypupdate_args F
++ xdr_ypxfrstat F
++ yp_all F
++ yp_bind F
++ yp_first F
++ yp_get_default_domain F
++ yp_maplist F
++ yp_master F
++ yp_match F
++ yp_next F
++ yp_order F
++ yp_unbind F
++ yp_update F
++ ypbinderr_string F
++ yperr_string F
++ ypprot_err F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libpthread-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,224 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ _IO_flockfile F
++ _IO_ftrylockfile F
++ _IO_funlockfile F
++ __close F
++ __connect F
++ __errno_location F
++ __fcntl F
++ __fork F
++ __h_errno_location F
++ __libc_allocate_rtsig F
++ __libc_current_sigrtmax F
++ __libc_current_sigrtmin F
++ __lseek F
++ __nanosleep F
++ __open F
++ __open64 F
++ __pread64 F
++ __pthread_cleanup_routine F
++ __pthread_getspecific F
++ __pthread_key_create F
++ __pthread_mutex_destroy F
++ __pthread_mutex_init F
++ __pthread_mutex_lock F
++ __pthread_mutex_trylock F
++ __pthread_mutex_unlock F
++ __pthread_mutexattr_destroy F
++ __pthread_mutexattr_init F
++ __pthread_mutexattr_settype F
++ __pthread_once F
++ __pthread_register_cancel F
++ __pthread_register_cancel_defer F
++ __pthread_rwlock_destroy F
++ __pthread_rwlock_init F
++ __pthread_rwlock_rdlock F
++ __pthread_rwlock_tryrdlock F
++ __pthread_rwlock_trywrlock F
++ __pthread_rwlock_unlock F
++ __pthread_rwlock_wrlock F
++ __pthread_setspecific F
++ __pthread_unregister_cancel F
++ __pthread_unregister_cancel_restore F
++ __pthread_unwind_next F
++ __pwrite64 F
++ __read F
++ __res_state F
++ __send F
++ __sigaction F
++ __vfork F
++ __wait F
++ __write F
++ _pthread_cleanup_pop F
++ _pthread_cleanup_pop_restore F
++ _pthread_cleanup_push F
++ _pthread_cleanup_push_defer F
++ accept F
++ close F
++ connect F
++ fcntl F
++ flockfile F
++ fork F
++ fsync F
++ ftrylockfile F
++ funlockfile F
++ longjmp F
++ lseek F
++ lseek64 F
++ msync F
++ nanosleep F
++ open F
++ open64 F
++ pause F
++ pread F
++ pread64 F
++ pthread_attr_destroy F
++ pthread_attr_getaffinity_np F
++ pthread_attr_getdetachstate F
++ pthread_attr_getguardsize F
++ pthread_attr_getinheritsched F
++ pthread_attr_getschedparam F
++ pthread_attr_getschedpolicy F
++ pthread_attr_getscope F
++ pthread_attr_getstack F
++ pthread_attr_getstackaddr F
++ pthread_attr_getstacksize F
++ pthread_attr_init F
++ pthread_attr_setaffinity_np F
++ pthread_attr_setdetachstate F
++ pthread_attr_setguardsize F
++ pthread_attr_setinheritsched F
++ pthread_attr_setschedparam F
++ pthread_attr_setschedpolicy F
++ pthread_attr_setscope F
++ pthread_attr_setstack F
++ pthread_attr_setstackaddr F
++ pthread_attr_setstacksize F
++ pthread_barrier_destroy F
++ pthread_barrier_init F
++ pthread_barrier_wait F
++ pthread_barrierattr_destroy F
++ pthread_barrierattr_getpshared F
++ pthread_barrierattr_init F
++ pthread_barrierattr_setpshared F
++ pthread_cancel F
++ pthread_cond_broadcast F
++ pthread_cond_destroy F
++ pthread_cond_init F
++ pthread_cond_signal F
++ pthread_cond_timedwait F
++ pthread_cond_wait F
++ pthread_condattr_destroy F
++ pthread_condattr_getclock F
++ pthread_condattr_getpshared F
++ pthread_condattr_init F
++ pthread_condattr_setclock F
++ pthread_condattr_setpshared F
++ pthread_create F
++ pthread_detach F
++ pthread_equal F
++ pthread_exit F
++ pthread_getaffinity_np F
++ pthread_getattr_np F
++ pthread_getconcurrency F
++ pthread_getcpuclockid F
++ pthread_getname_np F
++ pthread_getschedparam F
++ pthread_getspecific F
++ pthread_join F
++ pthread_key_create F
++ pthread_key_delete F
++ pthread_kill F
++ pthread_kill_other_threads_np F
++ pthread_mutex_consistent F
++ pthread_mutex_consistent_np F
++ pthread_mutex_destroy F
++ pthread_mutex_getprioceiling F
++ pthread_mutex_init F
++ pthread_mutex_lock F
++ pthread_mutex_setprioceiling F
++ pthread_mutex_timedlock F
++ pthread_mutex_trylock F
++ pthread_mutex_unlock F
++ pthread_mutexattr_destroy F
++ pthread_mutexattr_getkind_np F
++ pthread_mutexattr_getprioceiling F
++ pthread_mutexattr_getprotocol F
++ pthread_mutexattr_getpshared F
++ pthread_mutexattr_getrobust F
++ pthread_mutexattr_getrobust_np F
++ pthread_mutexattr_gettype F
++ pthread_mutexattr_init F
++ pthread_mutexattr_setkind_np F
++ pthread_mutexattr_setprioceiling F
++ pthread_mutexattr_setprotocol F
++ pthread_mutexattr_setpshared F
++ pthread_mutexattr_setrobust F
++ pthread_mutexattr_setrobust_np F
++ pthread_mutexattr_settype F
++ pthread_once F
++ pthread_rwlock_destroy F
++ pthread_rwlock_init F
++ pthread_rwlock_rdlock F
++ pthread_rwlock_timedrdlock F
++ pthread_rwlock_timedwrlock F
++ pthread_rwlock_tryrdlock F
++ pthread_rwlock_trywrlock F
++ pthread_rwlock_unlock F
++ pthread_rwlock_wrlock F
++ pthread_rwlockattr_destroy F
++ pthread_rwlockattr_getkind_np F
++ pthread_rwlockattr_getpshared F
++ pthread_rwlockattr_init F
++ pthread_rwlockattr_setkind_np F
++ pthread_rwlockattr_setpshared F
++ pthread_self F
++ pthread_setaffinity_np F
++ pthread_setcancelstate F
++ pthread_setcanceltype F
++ pthread_setconcurrency F
++ pthread_setname_np F
++ pthread_setschedparam F
++ pthread_setschedprio F
++ pthread_setspecific F
++ pthread_sigmask F
++ pthread_sigqueue F
++ pthread_spin_destroy F
++ pthread_spin_init F
++ pthread_spin_lock F
++ pthread_spin_trylock F
++ pthread_spin_unlock F
++ pthread_testcancel F
++ pthread_timedjoin_np F
++ pthread_tryjoin_np F
++ pthread_yield F
++ pwrite F
++ pwrite64 F
++ raise F
++ read F
++ recv F
++ recvfrom F
++ recvmsg F
++ sem_close F
++ sem_destroy F
++ sem_getvalue F
++ sem_init F
++ sem_open F
++ sem_post F
++ sem_timedwait F
++ sem_trywait F
++ sem_unlink F
++ sem_wait F
++ send F
++ sendmsg F
++ sendto F
++ sigaction F
++ siglongjmp F
++ sigwait F
++ system F
++ tcdrain F
++ vfork F
++ wait F
++ waitpid F
++ write F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libresolv-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,93 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ __b64_ntop F
++ __b64_pton F
++ __dn_comp F
++ __dn_count_labels F
++ __dn_expand F
++ __dn_skipname F
++ __fp_nquery F
++ __fp_query F
++ __fp_resstat F
++ __hostalias F
++ __loc_aton F
++ __loc_ntoa F
++ __p_cdname F
++ __p_cdnname F
++ __p_class F
++ __p_class_syms D 0xa8
++ __p_fqname F
++ __p_fqnname F
++ __p_option F
++ __p_query F
++ __p_rcode F
++ __p_secstodate F
++ __p_time F
++ __p_type F
++ __p_type_syms D 0x450
++ __putlong F
++ __putshort F
++ __res_close F
++ __res_dnok F
++ __res_hnok F
++ __res_hostalias F
++ __res_isourserver F
++ __res_mailok F
++ __res_mkquery F
++ __res_nameinquery F
++ __res_nmkquery F
++ __res_nquery F
++ __res_nquerydomain F
++ __res_nsearch F
++ __res_nsend F
++ __res_ownok F
++ __res_queriesmatch F
++ __res_query F
++ __res_querydomain F
++ __res_search F
++ __res_send F
++ __sym_ntop F
++ __sym_ntos F
++ __sym_ston F
++ _gethtbyaddr F
++ _gethtbyname F
++ _gethtbyname2 F
++ _gethtent F
++ _getlong F
++ _getshort F
++ _res_opcodes D 0x80
++ _sethtent F
++ inet_net_ntop F
++ inet_net_pton F
++ inet_neta F
++ ns_datetosecs F
++ ns_format_ttl F
++ ns_get16 F
++ ns_get32 F
++ ns_initparse F
++ ns_makecanon F
++ ns_msg_getflag F
++ ns_name_compress F
++ ns_name_ntol F
++ ns_name_ntop F
++ ns_name_pack F
++ ns_name_pton F
++ ns_name_rollback F
++ ns_name_skip F
++ ns_name_uncompress F
++ ns_name_unpack F
++ ns_parse_ttl F
++ ns_parserr F
++ ns_put16 F
++ ns_put32 F
++ ns_samedomain F
++ ns_samename F
++ ns_skiprr F
++ ns_sprintrr F
++ ns_sprintrrf F
++ ns_subdomain F
++ res_gethostbyaddr F
++ res_gethostbyname F
++ res_gethostbyname2 F
++ res_send_setqhook F
++ res_send_setrhook F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librt-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,37 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ __mq_open_2 F
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ lio_listio F
++ lio_listio64 F
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libthread_db-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,42 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ td_init F
++ td_log F
++ td_symbol_list F
++ td_ta_clear_event F
++ td_ta_delete F
++ td_ta_enable_stats F
++ td_ta_event_addr F
++ td_ta_event_getmsg F
++ td_ta_get_nthreads F
++ td_ta_get_ph F
++ td_ta_get_stats F
++ td_ta_map_id2thr F
++ td_ta_map_lwp2thr F
++ td_ta_new F
++ td_ta_reset_stats F
++ td_ta_set_event F
++ td_ta_setconcurrency F
++ td_ta_thr_iter F
++ td_ta_tsd_iter F
++ td_thr_clear_event F
++ td_thr_dbresume F
++ td_thr_dbsuspend F
++ td_thr_event_enable F
++ td_thr_event_getmsg F
++ td_thr_get_info F
++ td_thr_getfpregs F
++ td_thr_getgregs F
++ td_thr_getxregs F
++ td_thr_getxregsize F
++ td_thr_set_event F
++ td_thr_setfpregs F
++ td_thr_setgregs F
++ td_thr_setprio F
++ td_thr_setsigpending F
++ td_thr_setxregs F
++ td_thr_sigsetmask F
++ td_thr_tls_get_addr F
++ td_thr_tlsbase F
++ td_thr_tsd F
++ td_thr_validate F
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist	1970-01-01 00:00:00.000000000 +0000
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/libutil-le.abilist	2014-06-02 15:22:40.000000000 +0000
+@@ -0,0 +1,8 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ forkpty F
++ login F
++ login_tty F
++ logout F
++ logwtmp F
++ openpty F
diff --git a/SOURCES/glibc-ppc64le-03.patch b/SOURCES/glibc-ppc64le-03.patch
new file mode 100644
index 0000000..40b6e71
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-03.patch
@@ -0,0 +1,1617 @@
+# commit 9e54314bb06aace405553552f7e7b7d8c172968c
+# Author: Joseph Myers <joseph@codesourcery.com>
+# Date:   Thu Jun 6 19:02:09 2013 +0000
+# 
+#     Update miscellaneous scripts from upstream.
+# 
+diff -urN glibc-2.17-c758a686/scripts/config.guess glibc-2.17-c758a686/scripts/config.guess
+--- glibc-2.17-c758a686/scripts/config.guess	2014-05-26 15:59:45.000000000 -0500
++++ glibc-2.17-c758a686/scripts/config.guess	2014-05-26 16:01:00.000000000 -0500
+@@ -1,14 +1,12 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+-#   2011, 2012 Free Software Foundation, Inc.
++#   Copyright 1992-2013 Free Software Foundation, Inc.
+ 
+-timestamp='2012-09-25'
++timestamp='2013-11-29'
+ 
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+ # This program is distributed in the hope that it will be useful, but
+@@ -22,19 +20,17 @@
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
+-
+-
+-# Originally written by Per Bothner.  Please send patches (context
+-# diff format) to <config-patches@gnu.org> and include a ChangeLog
+-# entry.
++# the same distribution terms that you use for the rest of that
++# program.  This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+ #
+-# This script attempts to guess a canonical system name similar to
+-# config.sub.  If it succeeds, it prints the system name on stdout, and
+-# exits with 0.  Otherwise, it exits with 1.
++# Originally written by Per Bothner.
+ #
+ # You can get the latest version of this script from:
+ # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++#
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
++
+ 
+ me=`echo "$0" | sed -e 's,.*/,,'`
+ 
+@@ -54,9 +50,7 @@
+ GNU config.guess ($timestamp)
+ 
+ Originally written by Per Bothner.
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+-Free Software Foundation, Inc.
++Copyright 1992-2013 Free Software Foundation, Inc.
+ 
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -138,6 +132,27 @@
+ UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+ 
++case "${UNAME_SYSTEM}" in
++Linux|GNU|GNU/*)
++	# If the system lacks a compiler, then just pick glibc.
++	# We could probably try harder.
++	LIBC=gnu
++
++	eval $set_cc_for_build
++	cat <<-EOF > $dummy.c
++	#include <features.h>
++	#if defined(__UCLIBC__)
++	LIBC=uclibc
++	#elif defined(__dietlibc__)
++	LIBC=dietlibc
++	#else
++	LIBC=gnu
++	#endif
++	EOF
++	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
++	;;
++esac
++
+ # Note: order is significant - the case branches are not exclusive.
+ 
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+@@ -859,21 +874,21 @@
+ 	exit ;;
+     *:GNU:*:*)
+ 	# the GNU system
+-	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
++	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ 	exit ;;
+     *:GNU/*:*:*)
+ 	# other systems with GNU libc and userland
+-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
++	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+ 	exit ;;
+     i*86:Minix:*:*)
+ 	echo ${UNAME_MACHINE}-pc-minix
+ 	exit ;;
+     aarch64:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     aarch64_be:Linux:*:*)
+ 	UNAME_MACHINE=aarch64_be
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     alpha:Linux:*:*)
+ 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+@@ -886,59 +901,54 @@
+ 	  EV68*) UNAME_MACHINE=alphaev68 ;;
+ 	esac
+ 	objdump --private-headers /bin/sh | grep -q ld.so.1
+-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
++	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++	exit ;;
++    arc:Linux:*:* | arceb:Linux:*:*)
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     arm*:Linux:*:*)
+ 	eval $set_cc_for_build
+ 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+ 	    | grep -q __ARM_EABI__
+ 	then
+-	    echo ${UNAME_MACHINE}-unknown-linux-gnu
++	    echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	else
+ 	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ 		| grep -q __ARM_PCS_VFP
+ 	    then
+-		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
+ 	    else
+-		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
++		echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
+ 	    fi
+ 	fi
+ 	exit ;;
+     avr32*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     cris:Linux:*:*)
+-	echo ${UNAME_MACHINE}-axis-linux-gnu
++	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ 	exit ;;
+     crisv32:Linux:*:*)
+-	echo ${UNAME_MACHINE}-axis-linux-gnu
++	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
+ 	exit ;;
+     frv:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     hexagon:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     i*86:Linux:*:*)
+-	LIBC=gnu
+-	eval $set_cc_for_build
+-	sed 's/^	//' << EOF >$dummy.c
+-	#ifdef __dietlibc__
+-	LIBC=dietlibc
+-	#endif
+-EOF
+-	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
+-	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
++	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
+ 	exit ;;
+     ia64:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     m32r*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     m68*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     mips:Linux:*:* | mips64:Linux:*:*)
+ 	eval $set_cc_for_build
+@@ -957,54 +967,63 @@
+ 	#endif
+ EOF
+ 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
+-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
++	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
+ 	;;
++    or1k:Linux:*:*)
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
++	exit ;;
+     or32:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     padre:Linux:*:*)
+-	echo sparc-unknown-linux-gnu
++	echo sparc-unknown-linux-${LIBC}
+ 	exit ;;
+     parisc64:Linux:*:* | hppa64:Linux:*:*)
+-	echo hppa64-unknown-linux-gnu
++	echo hppa64-unknown-linux-${LIBC}
+ 	exit ;;
+     parisc:Linux:*:* | hppa:Linux:*:*)
+ 	# Look for CPU level
+ 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+-	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+-	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+-	  *)    echo hppa-unknown-linux-gnu ;;
++	  PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
++	  PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
++	  *)    echo hppa-unknown-linux-${LIBC} ;;
+ 	esac
+ 	exit ;;
+     ppc64:Linux:*:*)
+-	echo powerpc64-unknown-linux-gnu
++	echo powerpc64-unknown-linux-${LIBC}
+ 	exit ;;
+     ppc:Linux:*:*)
+-	echo powerpc-unknown-linux-gnu
++	echo powerpc-unknown-linux-${LIBC}
++	exit ;;
++    ppc64le:Linux:*:*)
++	echo powerpc64le-unknown-linux-${LIBC}
++	exit ;;
++    ppcle:Linux:*:*)
++	echo powerpcle-unknown-linux-${LIBC}
+ 	exit ;;
+     s390:Linux:*:* | s390x:Linux:*:*)
+-	echo ${UNAME_MACHINE}-ibm-linux
++	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
+ 	exit ;;
+     sh64*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     sh*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     sparc:Linux:*:* | sparc64:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     tile*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     vax:Linux:*:*)
+-	echo ${UNAME_MACHINE}-dec-linux-gnu
++	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
+ 	exit ;;
+     x86_64:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     xtensa*:Linux:*:*)
+-	echo ${UNAME_MACHINE}-unknown-linux-gnu
++	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+ 	exit ;;
+     i*86:DYNIX/ptx:4*:*)
+ 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+@@ -1237,19 +1256,31 @@
+ 	exit ;;
+     *:Darwin:*:*)
+ 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+-	case $UNAME_PROCESSOR in
+-	    i386)
+-		eval $set_cc_for_build
+-		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+-		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+-		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+-		      grep IS_64BIT_ARCH >/dev/null
+-		  then
+-		      UNAME_PROCESSOR="x86_64"
+-		  fi
+-		fi ;;
+-	    unknown) UNAME_PROCESSOR=powerpc ;;
+-	esac
++	eval $set_cc_for_build
++	if test "$UNAME_PROCESSOR" = unknown ; then
++	    UNAME_PROCESSOR=powerpc
++	fi
++	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
++	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
++		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++		    grep IS_64BIT_ARCH >/dev/null
++		then
++		    case $UNAME_PROCESSOR in
++			i386) UNAME_PROCESSOR=x86_64 ;;
++			powerpc) UNAME_PROCESSOR=powerpc64 ;;
++		    esac
++		fi
++	    fi
++	elif test "$UNAME_PROCESSOR" = i386 ; then
++	    # Avoid executing cc on OS X 10.9, as it ships with a stub
++	    # that puts up a graphical alert prompting to install
++	    # developer tools.  Any system running Mac OS X 10.7 or
++	    # later (Darwin 11 and later) is required to have a 64-bit
++	    # processor. This is not true of the ARM version of Darwin
++	    # that Apple uses in portable devices.
++	    UNAME_PROCESSOR=x86_64
++	fi
+ 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+ 	exit ;;
+     *:procnto*:*:* | *:QNX:[0123456789]*:*)
+diff -urN glibc-2.17-c758a686/scripts/config.sub glibc-2.17-c758a686/scripts/config.sub
+--- glibc-2.17-c758a686/scripts/config.sub	2014-05-26 15:59:45.000000000 -0500
++++ glibc-2.17-c758a686/scripts/config.sub	2014-05-26 16:00:52.000000000 -0500
+@@ -1,24 +1,18 @@
+ #! /bin/sh
+ # Configuration validation subroutine script.
+-#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+-#   2011, 2012 Free Software Foundation, Inc.
+-
+-timestamp='2012-08-18'
+-
+-# This file is (in principle) common to ALL GNU software.
+-# The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine.  It does not imply ALL GNU software can.
+-#
+-# This file is free software; you can redistribute it and/or modify
+-# it under the terms of the GNU General Public License as published by
+-# the Free Software Foundation; either version 2 of the License, or
++#   Copyright 1992-2013 Free Software Foundation, Inc.
++
++timestamp='2013-10-01'
++
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
+ # (at your option) any later version.
+ #
+-# This program is distributed in the hope that it will be useful,
+-# but WITHOUT ANY WARRANTY; without even the implied warranty of
+-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-# GNU General Public License for more details.
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++# General Public License for more details.
+ #
+ # You should have received a copy of the GNU General Public License
+ # along with this program; if not, see <http://www.gnu.org/licenses/>.
+@@ -26,11 +20,12 @@
+ # As a special exception to the GNU General Public License, if you
+ # distribute this file as part of a program that contains a
+ # configuration script generated by Autoconf, you may include it under
+-# the same distribution terms that you use for the rest of that program.
++# the same distribution terms that you use for the rest of that
++# program.  This Exception is an additional permission under section 7
++# of the GNU General Public License, version 3 ("GPLv3").
+ 
+ 
+-# Please send patches to <config-patches@gnu.org>.  Submit a context
+-# diff and a properly formatted GNU ChangeLog entry.
++# Please send patches with a ChangeLog entry to config-patches@gnu.org.
+ #
+ # Configuration subroutine to validate and canonicalize a configuration type.
+ # Supply the specified configuration type as an argument.
+@@ -73,9 +68,7 @@
+ version="\
+ GNU config.sub ($timestamp)
+ 
+-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
+-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
+-Free Software Foundation, Inc.
++Copyright 1992-2013 Free Software Foundation, Inc.
+ 
+ This is free software; see the source for copying conditions.  There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+@@ -156,7 +149,7 @@
+ 	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ 	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+ 	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+-	-apple | -axis | -knuth | -cray | -microblaze)
++	-apple | -axis | -knuth | -cray | -microblaze*)
+ 		os=
+ 		basic_machine=$1
+ 		;;
+@@ -259,10 +252,12 @@
+ 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+ 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+ 	| am33_2.0 \
+-	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
+-        | be32 | be64 \
++	| arc | arceb \
++	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
++	| avr | avr32 \
++	| be32 | be64 \
+ 	| bfin \
+-	| c4x | clipper \
++	| c4x | c8051 | clipper \
+ 	| d10v | d30v | dlx | dsp16xx \
+ 	| epiphany \
+ 	| fido | fr30 | frv \
+@@ -270,10 +265,11 @@
+ 	| hexagon \
+ 	| i370 | i860 | i960 | ia64 \
+ 	| ip2k | iq2000 \
++	| k1om \
+ 	| le32 | le64 \
+ 	| lm32 \
+ 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
+-	| maxq | mb | microblaze | mcore | mep | metag \
++	| maxq | mb | microblaze | microblazeel | mcore | mep | metag \
+ 	| mips | mipsbe | mipseb | mipsel | mipsle \
+ 	| mips16 \
+ 	| mips64 | mips64el \
+@@ -291,16 +287,17 @@
+ 	| mipsisa64r2 | mipsisa64r2el \
+ 	| mipsisa64sb1 | mipsisa64sb1el \
+ 	| mipsisa64sr71k | mipsisa64sr71kel \
++	| mipsr5900 | mipsr5900el \
+ 	| mipstx39 | mipstx39el \
+ 	| mn10200 | mn10300 \
+ 	| moxie \
+ 	| mt \
+ 	| msp430 \
+ 	| nds32 | nds32le | nds32be \
+-	| nios | nios2 \
++	| nios | nios2 | nios2eb | nios2el \
+ 	| ns16k | ns32k \
+ 	| open8 \
+-	| or32 \
++	| or1k | or32 \
+ 	| pdp10 | pdp11 | pj | pjl \
+ 	| powerpc | powerpc64 | powerpc64le | powerpcle \
+ 	| pyramid \
+@@ -328,7 +325,7 @@
+ 	c6x)
+ 		basic_machine=tic6x-unknown
+ 		;;
+-	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip)
++	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
+ 		basic_machine=$basic_machine-unknown
+ 		os=-none
+ 		;;
+@@ -370,13 +367,13 @@
+ 	| aarch64-* | aarch64_be-* \
+ 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+ 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+-	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
+ 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+ 	| avr-* | avr32-* \
+ 	| be32-* | be64-* \
+ 	| bfin-* | bs2000-* \
+ 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
+-	| clipper-* | craynv-* | cydra-* \
++	| c8051-* | clipper-* | craynv-* | cydra-* \
+ 	| d10v-* | d30v-* | dlx-* \
+ 	| elxsi-* \
+ 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
+@@ -385,11 +382,13 @@
+ 	| hexagon-* \
+ 	| i*86-* | i860-* | i960-* | ia64-* \
+ 	| ip2k-* | iq2000-* \
++	| k1om-* \
+ 	| le32-* | le64-* \
+ 	| lm32-* \
+ 	| m32c-* | m32r-* | m32rle-* \
+ 	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+-	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \
++	| m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++	| microblaze-* | microblazeel-* \
+ 	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+ 	| mips16-* \
+ 	| mips64-* | mips64el-* \
+@@ -407,12 +406,13 @@
+ 	| mipsisa64r2-* | mipsisa64r2el-* \
+ 	| mipsisa64sb1-* | mipsisa64sb1el-* \
+ 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
++	| mipsr5900-* | mipsr5900el-* \
+ 	| mipstx39-* | mipstx39el-* \
+ 	| mmix-* \
+ 	| mt-* \
+ 	| msp430-* \
+ 	| nds32-* | nds32le-* | nds32be-* \
+-	| nios-* | nios2-* \
++	| nios-* | nios2-* | nios2eb-* | nios2el-* \
+ 	| none-* | np1-* | ns16k-* | ns32k-* \
+ 	| open8-* \
+ 	| orion-* \
+@@ -788,7 +788,7 @@
+ 		basic_machine=ns32k-utek
+ 		os=-sysv
+ 		;;
+-	microblaze)
++	microblaze*)
+ 		basic_machine=microblaze-xilinx
+ 		;;
+ 	mingw64)
+@@ -796,7 +796,7 @@
+ 		os=-mingw64
+ 		;;
+ 	mingw32)
+-		basic_machine=i386-pc
++		basic_machine=i686-pc
+ 		os=-mingw32
+ 		;;
+ 	mingw32ce)
+@@ -832,7 +832,7 @@
+ 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+ 		;;
+ 	msys)
+-		basic_machine=i386-pc
++		basic_machine=i686-pc
+ 		os=-msys
+ 		;;
+ 	mvs)
+@@ -1023,7 +1023,11 @@
+ 		basic_machine=i586-unknown
+ 		os=-pw32
+ 		;;
+-	rdos)
++	rdos | rdos64)
++		basic_machine=x86_64-pc
++		os=-rdos
++		;;
++	rdos32)
+ 		basic_machine=i386-pc
+ 		os=-rdos
+ 		;;
+@@ -1350,7 +1354,7 @@
+ 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+ 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
+ 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
+-	      | -sym* | -kopensolaris* \
++	      | -sym* | -kopensolaris* | -plan9* \
+ 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ 	      | -aos* | -aros* \
+ 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+@@ -1496,9 +1500,6 @@
+ 	-aros*)
+ 		os=-aros
+ 		;;
+-	-kaos*)
+-		os=-kaos
+-		;;
+ 	-zvmoe)
+ 		os=-zvmoe
+ 		;;
+@@ -1547,6 +1548,9 @@
+ 	c4x-* | tic4x-*)
+ 		os=-coff
+ 		;;
++	c8051-*)
++		os=-elf
++		;;
+ 	hexagon-*)
+ 		os=-elf
+ 		;;
+@@ -1590,6 +1594,9 @@
+ 	mips*-*)
+ 		os=-elf
+ 		;;
++	or1k-*)
++		os=-elf
++		;;
+ 	or32-*)
+ 		os=-coff
+ 		;;
+diff -urN glibc-2.17-c758a686/scripts/install-sh glibc-2.17-c758a686/scripts/install-sh
+--- glibc-2.17-c758a686/scripts/install-sh	2014-05-26 15:59:45.000000000 -0500
++++ glibc-2.17-c758a686/scripts/install-sh	2014-05-26 16:00:34.000000000 -0500
+@@ -1,250 +1,527 @@
+-#! /bin/sh
+-#
++#!/bin/sh
+ # install - install a program, script, or datafile
+-# This comes from X11R5 (mit/util/scripts/install.sh).
++
++scriptversion=2011-11-20.07; # UTC
++
++# This originates from X11R5 (mit/util/scripts/install.sh), which was
++# later released in X11R6 (xc/config/util/install.sh) with the
++# following copyright and license.
++#
++# Copyright (C) 1994 X Consortium
++#
++# Permission is hereby granted, free of charge, to any person obtaining a copy
++# of this software and associated documentation files (the "Software"), to
++# deal in the Software without restriction, including without limitation the
++# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++# sell copies of the Software, and to permit persons to whom the Software is
++# furnished to do so, subject to the following conditions:
++#
++# The above copyright notice and this permission notice shall be included in
++# all copies or substantial portions of the Software.
++#
++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
++# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
++# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++#
++# Except as contained in this notice, the name of the X Consortium shall not
++# be used in advertising or otherwise to promote the sale, use or other deal-
++# ings in this Software without prior written authorization from the X Consor-
++# tium.
+ #
+-# Copyright 1991 by the Massachusetts Institute of Technology
+ #
+-# Permission to use, copy, modify, distribute, and sell this software and its
+-# documentation for any purpose is hereby granted without fee, provided that
+-# the above copyright notice appear in all copies and that both that
+-# copyright notice and this permission notice appear in supporting
+-# documentation, and that the name of M.I.T. not be used in advertising or
+-# publicity pertaining to distribution of the software without specific,
+-# written prior permission.  M.I.T. makes no representations about the
+-# suitability of this software for any purpose.  It is provided "as is"
+-# without express or implied warranty.
++# FSF changes to this file are in the public domain.
+ #
+ # Calling this script install-sh is preferred over install.sh, to prevent
+-# `make' implicit rules from creating a file called install from it
++# 'make' implicit rules from creating a file called install from it
+ # when there is no Makefile.
+ #
+ # This script is compatible with the BSD install script, but was written
+-# from scratch.  It can only install one file at a time, a restriction
+-# shared with many OS's install programs.
++# from scratch.
+ 
++nl='
++'
++IFS=" ""	$nl"
+ 
+ # set DOITPROG to echo to test this script
+ 
+ # Don't use :- since 4.3BSD and earlier shells don't like it.
+-doit="${DOITPROG-}"
+-
+-
+-# put in absolute paths if you don't have them in your path; or use env. vars.
+-
+-mvprog="${MVPROG-mv}"
+-cpprog="${CPPROG-cp}"
+-chmodprog="${CHMODPROG-chmod}"
+-chownprog="${CHOWNPROG-chown}"
+-chgrpprog="${CHGRPPROG-chgrp}"
+-stripprog="${STRIPPROG-strip}"
+-rmprog="${RMPROG-rm}"
+-mkdirprog="${MKDIRPROG-mkdir}"
+-
+-transformbasename=""
+-transform_arg=""
+-instcmd="$mvprog"
+-chmodcmd="$chmodprog 0755"
+-chowncmd=""
+-chgrpcmd=""
+-stripcmd=""
+-rmcmd="$rmprog -f"
+-mvcmd="$mvprog"
+-src=""
+-dst=""
+-dir_arg=""
+-
+-while [ x"$1" != x ]; do
+-    case $1 in
+-	-c) instcmd="$cpprog"
+-	    shift
+-	    continue;;
+-
+-	-d) dir_arg=true
+-	    shift
+-	    continue;;
+-
+-	-m) chmodcmd="$chmodprog $2"
+-	    shift
+-	    shift
+-	    continue;;
+-
+-	-o) chowncmd="$chownprog $2"
+-	    shift
+-	    shift
+-	    continue;;
+-
+-	-g) chgrpcmd="$chgrpprog $2"
+-	    shift
+-	    shift
+-	    continue;;
+-
+-	-s) stripcmd="$stripprog"
+-	    shift
+-	    continue;;
+-
+-	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+-	    shift
+-	    continue;;
+-
+-	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+-	    shift
+-	    continue;;
+-
+-	*)  if [ x"$src" = x ]
+-	    then
+-		src=$1
+-	    else
+-		# this colon is to work around a 386BSD /bin/sh bug
+-		:
+-		dst=$1
+-	    fi
+-	    shift
+-	    continue;;
+-    esac
+-done
+-
+-if [ x"$src" = x ]
+-then
+-	echo "install:	no input file specified"
+-	exit 1
++doit=${DOITPROG-}
++if test -z "$doit"; then
++  doit_exec=exec
+ else
+-	true
++  doit_exec=$doit
+ fi
+ 
+-if [ x"$dir_arg" != x ]; then
+-	dst=$src
+-	src=""
+-	
+-	if [ -d $dst ]; then
+-		instcmd=:
+-	else
+-		instcmd=mkdir
+-	fi
+-else
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
+ 
+-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+-# might cause directories to be created, which would be especially bad 
+-# if $src (and thus $dsttmp) contains '*'.
+-
+-	if [ -f $src -o -d $src ]
+-	then
+-		true
+-	else
+-		echo "install:  $src does not exist"
+-		exit 1
+-	fi
+-	
+-	if [ x"$dst" = x ]
+-	then
+-		echo "install:	no destination specified"
+-		exit 1
+-	else
+-		true
+-	fi
+-
+-# If destination is a directory, append the input filename; if your system
+-# does not like double slashes in filenames, you may need to add some logic
+-
+-	if [ -d $dst ]
+-	then
+-		dst="$dst"/`basename $src`
+-	else
+-		true
+-	fi
+-fi
+-
+-## this sed command emulates the dirname command
+-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
++chgrpprog=${CHGRPPROG-chgrp}
++chmodprog=${CHMODPROG-chmod}
++chownprog=${CHOWNPROG-chown}
++cmpprog=${CMPPROG-cmp}
++cpprog=${CPPROG-cp}
++mkdirprog=${MKDIRPROG-mkdir}
++mvprog=${MVPROG-mv}
++rmprog=${RMPROG-rm}
++stripprog=${STRIPPROG-strip}
++
++posix_glob='?'
++initialize_posix_glob='
++  test "$posix_glob" != "?" || {
++    if (set -f) 2>/dev/null; then
++      posix_glob=
++    else
++      posix_glob=:
++    fi
++  }
++'
+ 
+-# Make sure that the destination directory exists.
+-#  this part is taken from Noah Friedman's mkinstalldirs script
++posix_mkdir=
+ 
+-# Skip lots of stat calls in the usual case.
+-if [ ! -d "$dstdir" ]; then
+-defaultIFS='	
+-'
+-IFS="${IFS-${defaultIFS}}"
++# Desired mode of installed file.
++mode=0755
+ 
+-oIFS="${IFS}"
+-# Some sh's can't handle IFS=/ for some reason.
+-IFS='%'
+-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+-IFS="${oIFS}"
+-
+-pathcomp=''
+-
+-while [ $# -ne 0 ] ; do
+-	pathcomp="${pathcomp}${1}"
+-	shift
+-
+-	if [ ! -d "${pathcomp}" ] ;
+-        then
+-		$mkdirprog "${pathcomp}"
+-	else
+-		true
+-	fi
++chgrpcmd=
++chmodcmd=$chmodprog
++chowncmd=
++mvcmd=$mvprog
++rmcmd="$rmprog -f"
++stripcmd=
+ 
+-	pathcomp="${pathcomp}/"
++src=
++dst=
++dir_arg=
++dst_arg=
++
++copy_on_change=false
++no_target_directory=
++
++usage="\
++Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
++   or: $0 [OPTION]... SRCFILES... DIRECTORY
++   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
++   or: $0 [OPTION]... -d DIRECTORIES...
++
++In the 1st form, copy SRCFILE to DSTFILE.
++In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
++In the 4th, create DIRECTORIES.
++
++Options:
++     --help     display this help and exit.
++     --version  display version info and exit.
++
++  -c            (ignored)
++  -C            install only if different (preserve the last data modification time)
++  -d            create directories instead of installing files.
++  -g GROUP      $chgrpprog installed files to GROUP.
++  -m MODE       $chmodprog installed files to MODE.
++  -o USER       $chownprog installed files to USER.
++  -s            $stripprog installed files.
++  -t DIRECTORY  install into DIRECTORY.
++  -T            report an error if DSTFILE is a directory.
++
++Environment variables override the default commands:
++  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
++  RMPROG STRIPPROG
++"
++
++while test $# -ne 0; do
++  case $1 in
++    -c) ;;
++
++    -C) copy_on_change=true;;
++
++    -d) dir_arg=true;;
++
++    -g) chgrpcmd="$chgrpprog $2"
++	shift;;
++
++    --help) echo "$usage"; exit $?;;
++
++    -m) mode=$2
++	case $mode in
++	  *' '* | *'	'* | *'
++'*	  | *'*'* | *'?'* | *'['*)
++	    echo "$0: invalid mode: $mode" >&2
++	    exit 1;;
++	esac
++	shift;;
++
++    -o) chowncmd="$chownprog $2"
++	shift;;
++
++    -s) stripcmd=$stripprog;;
++
++    -t) dst_arg=$2
++	# Protect names problematic for 'test' and other utilities.
++	case $dst_arg in
++	  -* | [=\(\)!]) dst_arg=./$dst_arg;;
++	esac
++	shift;;
++
++    -T) no_target_directory=true;;
++
++    --version) echo "$0 $scriptversion"; exit $?;;
++
++    --)	shift
++	break;;
++
++    -*)	echo "$0: invalid option: $1" >&2
++	exit 1;;
++
++    *)  break;;
++  esac
++  shift
+ done
++
++if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
++  # When -d is used, all remaining arguments are directories to create.
++  # When -t is used, the destination is already specified.
++  # Otherwise, the last argument is the destination.  Remove it from $@.
++  for arg
++  do
++    if test -n "$dst_arg"; then
++      # $@ is not empty: it contains at least $arg.
++      set fnord "$@" "$dst_arg"
++      shift # fnord
++    fi
++    shift # arg
++    dst_arg=$arg
++    # Protect names problematic for 'test' and other utilities.
++    case $dst_arg in
++      -* | [=\(\)!]) dst_arg=./$dst_arg;;
++    esac
++  done
+ fi
+ 
+-if [ x"$dir_arg" != x ]
+-then
+-	$doit $instcmd $dst &&
+-
+-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+-else
++if test $# -eq 0; then
++  if test -z "$dir_arg"; then
++    echo "$0: no input file specified." >&2
++    exit 1
++  fi
++  # It's OK to call 'install-sh -d' without argument.
++  # This can happen when creating conditional directories.
++  exit 0
++fi
+ 
+-# If we're going to rename the final executable, determine the name now.
++if test -z "$dir_arg"; then
++  do_exit='(exit $ret); exit $ret'
++  trap "ret=129; $do_exit" 1
++  trap "ret=130; $do_exit" 2
++  trap "ret=141; $do_exit" 13
++  trap "ret=143; $do_exit" 15
++
++  # Set umask so as not to create temps with too-generous modes.
++  # However, 'strip' requires both read and write access to temps.
++  case $mode in
++    # Optimize common cases.
++    *644) cp_umask=133;;
++    *755) cp_umask=22;;
++
++    *[0-7])
++      if test -z "$stripcmd"; then
++	u_plus_rw=
++      else
++	u_plus_rw='% 200'
++      fi
++      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++    *)
++      if test -z "$stripcmd"; then
++	u_plus_rw=
++      else
++	u_plus_rw=,u+rw
++      fi
++      cp_umask=$mode$u_plus_rw;;
++  esac
++fi
+ 
+-	if [ x"$transformarg" = x ] 
+-	then
+-		dstfile=`basename $dst`
++for src
++do
++  # Protect names problematic for 'test' and other utilities.
++  case $src in
++    -* | [=\(\)!]) src=./$src;;
++  esac
++
++  if test -n "$dir_arg"; then
++    dst=$src
++    dstdir=$dst
++    test -d "$dstdir"
++    dstdir_status=$?
++  else
++
++    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
++    # might cause directories to be created, which would be especially bad
++    # if $src (and thus $dsttmp) contains '*'.
++    if test ! -f "$src" && test ! -d "$src"; then
++      echo "$0: $src does not exist." >&2
++      exit 1
++    fi
++
++    if test -z "$dst_arg"; then
++      echo "$0: no destination specified." >&2
++      exit 1
++    fi
++    dst=$dst_arg
++
++    # If destination is a directory, append the input filename; won't work
++    # if double slashes aren't ignored.
++    if test -d "$dst"; then
++      if test -n "$no_target_directory"; then
++	echo "$0: $dst_arg: Is a directory" >&2
++	exit 1
++      fi
++      dstdir=$dst
++      dst=$dstdir/`basename "$src"`
++      dstdir_status=0
++    else
++      # Prefer dirname, but fall back on a substitute if dirname fails.
++      dstdir=`
++	(dirname "$dst") 2>/dev/null ||
++	expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++	     X"$dst" : 'X\(//\)[^/]' \| \
++	     X"$dst" : 'X\(//\)$' \| \
++	     X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++	echo X"$dst" |
++	    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\/\)[^/].*/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\/\)$/{
++		   s//\1/
++		   q
++		 }
++		 /^X\(\/\).*/{
++		   s//\1/
++		   q
++		 }
++		 s/.*/./; q'
++      `
++
++      test -d "$dstdir"
++      dstdir_status=$?
++    fi
++  fi
++
++  obsolete_mkdir_used=false
++
++  if test $dstdir_status != 0; then
++    case $posix_mkdir in
++      '')
++	# Create intermediate dirs using mode 755 as modified by the umask.
++	# This is like FreeBSD 'install' as of 1997-10-28.
++	umask=`umask`
++	case $stripcmd.$umask in
++	  # Optimize common cases.
++	  *[2367][2367]) mkdir_umask=$umask;;
++	  .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++
++	  *[0-7])
++	    mkdir_umask=`expr $umask + 22 \
++	      - $umask % 100 % 40 + $umask % 20 \
++	      - $umask % 10 % 4 + $umask % 2
++	    `;;
++	  *) mkdir_umask=$umask,go-w;;
++	esac
++
++	# With -d, create the new directory with the user-specified mode.
++	# Otherwise, rely on $mkdir_umask.
++	if test -n "$dir_arg"; then
++	  mkdir_mode=-m$mode
+ 	else
+-		dstfile=`basename $dst $transformbasename | 
+-			sed $transformarg`$transformbasename
++	  mkdir_mode=
+ 	fi
+ 
+-# don't allow the sed command to completely eliminate the filename
++	posix_mkdir=false
++	case $umask in
++	  *[123567][0-7][0-7])
++	    # POSIX mkdir -p sets u+wx bits regardless of umask, which
++	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++	    ;;
++	  *)
++	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
++
++	    if (umask $mkdir_umask &&
++		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++	    then
++	      if test -z "$dir_arg" || {
++		   # Check for POSIX incompatibilities with -m.
++		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++		   # other-writable bit of parent directory when it shouldn't.
++		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
++		   case $ls_ld_tmpdir in
++		     d????-?r-*) different_mode=700;;
++		     d????-?--*) different_mode=755;;
++		     *) false;;
++		   esac &&
++		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++		   }
++		 }
++	      then posix_mkdir=:
++	      fi
++	      rmdir "$tmpdir/d" "$tmpdir"
++	    else
++	      # Remove any dirs left behind by ancient mkdir implementations.
++	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++	    fi
++	    trap '' 0;;
++	esac;;
++    esac
+ 
+-	if [ x"$dstfile" = x ] 
+-	then
+-		dstfile=`basename $dst`
++    if
++      $posix_mkdir && (
++	umask $mkdir_umask &&
++	$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++      )
++    then :
++    else
++
++      # The umask is ridiculous, or mkdir does not conform to POSIX,
++      # or it failed possibly due to a race condition.  Create the
++      # directory the slow way, step by step, checking for races as we go.
++
++      case $dstdir in
++	/*) prefix='/';;
++	[-=\(\)!]*) prefix='./';;
++	*)  prefix='';;
++      esac
++
++      eval "$initialize_posix_glob"
++
++      oIFS=$IFS
++      IFS=/
++      $posix_glob set -f
++      set fnord $dstdir
++      shift
++      $posix_glob set +f
++      IFS=$oIFS
++
++      prefixes=
++
++      for d
++      do
++	test X"$d" = X && continue
++
++	prefix=$prefix$d
++	if test -d "$prefix"; then
++	  prefixes=
+ 	else
+-		true
++	  if $posix_mkdir; then
++	    (umask=$mkdir_umask &&
++	     $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++	    # Don't fail if two instances are running concurrently.
++	    test -d "$prefix" || exit 1
++	  else
++	    case $prefix in
++	      *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++	      *) qprefix=$prefix;;
++	    esac
++	    prefixes="$prefixes '$qprefix'"
++	  fi
+ 	fi
++	prefix=$prefix/
++      done
+ 
+-# Make a temp file name in the proper directory.
+-
+-	dsttmp=$dstdir/#inst.$$#
+-
+-# Move or copy the file name to the temp name
+-
+-	$doit $instcmd $src $dsttmp &&
+-
+-	trap "rm -f ${dsttmp}" 0 &&
+-
+-# and set any options; do chmod last to preserve setuid bits
+-
+-# If any of these fail, we abort the whole thing.  If we want to
+-# ignore errors from any of these, just make sure not to ignore
+-# errors from the above "$doit $instcmd $src $dsttmp" command.
+-
+-	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+-	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+-	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+-	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+-
+-# Now rename the file to the real destination.
+-
+-	$doit $rmcmd -f $dstdir/$dstfile &&
+-	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+-
+-fi &&
++      if test -n "$prefixes"; then
++	# Don't fail if two instances are running concurrently.
++	(umask $mkdir_umask &&
++	 eval "\$doit_exec \$mkdirprog $prefixes") ||
++	  test -d "$dstdir" || exit 1
++	obsolete_mkdir_used=true
++      fi
++    fi
++  fi
++
++  if test -n "$dir_arg"; then
++    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
++  else
++
++    # Make a couple of temp file names in the proper directory.
++    dsttmp=$dstdir/_inst.$$_
++    rmtmp=$dstdir/_rm.$$_
++
++    # Trap to clean up those temp files at exit.
++    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
++
++    # Copy the file name to the temp name.
++    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
++
++    # and set any options; do chmod last to preserve setuid bits.
++    #
++    # If any of these fail, we abort the whole thing.  If we want to
++    # ignore errors from any of these, just make sure not to ignore
++    # errors from the above "$doit $cpprog $src $dsttmp" command.
++    #
++    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
++    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
++    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
++    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
++
++    # If -C, don't bother to copy if it wouldn't change the file.
++    if $copy_on_change &&
++       old=`LC_ALL=C ls -dlL "$dst"	2>/dev/null` &&
++       new=`LC_ALL=C ls -dlL "$dsttmp"	2>/dev/null` &&
++
++       eval "$initialize_posix_glob" &&
++       $posix_glob set -f &&
++       set X $old && old=:$2:$4:$5:$6 &&
++       set X $new && new=:$2:$4:$5:$6 &&
++       $posix_glob set +f &&
++
++       test "$old" = "$new" &&
++       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
++    then
++      rm -f "$dsttmp"
++    else
++      # Rename the file to the real destination.
++      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
++
++      # The rename failed, perhaps because mv can't rename something else
++      # to itself, or perhaps because mv is so ancient that it does not
++      # support -f.
++      {
++	# Now remove or move aside any old file at destination location.
++	# We try this two ways since rm can't unlink itself on some
++	# systems and the destination file might be busy for other
++	# reasons.  In this case, the final cleanup might fail but the new
++	# file should still install successfully.
++	{
++	  test ! -f "$dst" ||
++	  $doit $rmcmd -f "$dst" 2>/dev/null ||
++	  { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
++	    { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
++	  } ||
++	  { echo "$0: cannot unlink or rename $dst" >&2
++	    (exit 1); exit 1
++	  }
++	} &&
++
++	# Now rename the file to the real destination.
++	$doit $mvcmd "$dsttmp" "$dst"
++      }
++    fi || exit 1
+ 
++    trap '' 0
++  fi
++done
+ 
+-exit 0
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+diff -urN glibc-2.17-c758a686/scripts/mkinstalldirs glibc-2.17-c758a686/scripts/mkinstalldirs
+--- glibc-2.17-c758a686/scripts/mkinstalldirs	2014-05-26 15:59:45.000000000 -0500
++++ glibc-2.17-c758a686/scripts/mkinstalldirs	2014-05-26 16:00:34.000000000 -0500
+@@ -1,38 +1,162 @@
+ #! /bin/sh
+ # mkinstalldirs --- make directory hierarchy
+-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+-# Created: 1993-05-16
+-# Public domain
+ 
++scriptversion=2009-04-28.21; # UTC
++
++# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
++# Created: 1993-05-16
++# Public domain.
++#
++# This file is maintained in Automake, please report
++# bugs to <bug-automake@gnu.org> or send patches to
++# <automake-patches@gnu.org>.
++
++nl='
++'
++IFS=" ""	$nl"
+ errstatus=0
++dirmode=
++
++usage="\
++Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
++
++Create each directory DIR (with mode MODE, if specified), including all
++leading file name components.
++
++Report bugs to <bug-automake@gnu.org>."
++
++# process command line arguments
++while test $# -gt 0 ; do
++  case $1 in
++    -h | --help | --h*)         # -h for help
++      echo "$usage"
++      exit $?
++      ;;
++    -m)                         # -m PERM arg
++      shift
++      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
++      dirmode=$1
++      shift
++      ;;
++    --version)
++      echo "$0 $scriptversion"
++      exit $?
++      ;;
++    --)                         # stop option processing
++      shift
++      break
++      ;;
++    -*)                         # unknown option
++      echo "$usage" 1>&2
++      exit 1
++      ;;
++    *)                          # first non-opt arg
++      break
++      ;;
++  esac
++done
+ 
+ for file
+ do
+-   set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+-   shift
++  if test -d "$file"; then
++    shift
++  else
++    break
++  fi
++done
++
++case $# in
++  0) exit 0 ;;
++esac
++
++# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
++# mkdir -p a/c at the same time, both will detect that a is missing,
++# one will create a, then the other will try to create a and die with
++# a "File exists" error.  This is a problem when calling mkinstalldirs
++# from a parallel make.  We use --version in the probe to restrict
++# ourselves to GNU mkdir, which is thread-safe.
++case $dirmode in
++  '')
++    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
++      echo "mkdir -p -- $*"
++      exec mkdir -p -- "$@"
++    else
++      # On NextStep and OpenStep, the 'mkdir' command does not
++      # recognize any option.  It will interpret all options as
++      # directories to create, and then abort because '.' already
++      # exists.
++      test -d ./-p && rmdir ./-p
++      test -d ./--version && rmdir ./--version
++    fi
++    ;;
++  *)
++    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
++       test ! -d ./--version; then
++      echo "mkdir -m $dirmode -p -- $*"
++      exec mkdir -m "$dirmode" -p -- "$@"
++    else
++      # Clean up after NextStep and OpenStep mkdir.
++      for d in ./-m ./-p ./--version "./$dirmode";
++      do
++        test -d $d && rmdir $d
++      done
++    fi
++    ;;
++esac
+ 
+-   pathcomp=
+-   for d
+-   do
+-     pathcomp="$pathcomp$d"
+-     case "$pathcomp" in
+-       -* ) pathcomp=./$pathcomp ;;
+-     esac
+-
+-     if test ! -d "$pathcomp"; then
+-        echo "mkdir $pathcomp" 1>&2
+-
+-        mkdir "$pathcomp" || lasterr=$?
+-
+-        if test ! -d "$pathcomp"; then
+-  	  errstatus=$lasterr
+-        fi
+-     fi
++for file
++do
++  case $file in
++    /*) pathcomp=/ ;;
++    *)  pathcomp= ;;
++  esac
++  oIFS=$IFS
++  IFS=/
++  set fnord $file
++  shift
++  IFS=$oIFS
++
++  for d
++  do
++    test "x$d" = x && continue
++
++    pathcomp=$pathcomp$d
++    case $pathcomp in
++      -*) pathcomp=./$pathcomp ;;
++    esac
++
++    if test ! -d "$pathcomp"; then
++      echo "mkdir $pathcomp"
++
++      mkdir "$pathcomp" || lasterr=$?
++
++      if test ! -d "$pathcomp"; then
++	errstatus=$lasterr
++      else
++	if test ! -z "$dirmode"; then
++	  echo "chmod $dirmode $pathcomp"
++	  lasterr=
++	  chmod "$dirmode" "$pathcomp" || lasterr=$?
++
++	  if test ! -z "$lasterr"; then
++	    errstatus=$lasterr
++	  fi
++	fi
++      fi
++    fi
+ 
+-     pathcomp="$pathcomp/"
+-   done
++    pathcomp=$pathcomp/
++  done
+ done
+ 
+ exit $errstatus
+ 
+-# mkinstalldirs ends here
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+diff -urN glibc-2.17-c758a686/scripts/move-if-change glibc-2.17-c758a686/scripts/move-if-change
+--- glibc-2.17-c758a686/scripts/move-if-change	2014-05-26 15:59:45.000000000 -0500
++++ glibc-2.17-c758a686/scripts/move-if-change	2014-05-26 16:00:34.000000000 -0500
+@@ -1,17 +1,83 @@
+ #!/bin/sh
+ # Like mv $1 $2, but if the files are the same, just delete $1.
+-# Status is 0 if $2 is changed, 1 otherwise.
+-if
+-test -r $2
+-then
+-if
+-cmp -s $1 $2
+-then
+-echo $2 is unchanged
+-rm -f $1
++# Status is zero if successful, nonzero otherwise.
++
++VERSION='2012-01-06 07:23'; # UTC
++# The definition above must lie within the first 8 lines in order
++# for the Emacs time-stamp write hook (at end) to update it.
++# If you change this file with Emacs, please let the write hook
++# do its job.  Otherwise, update this string manually.
++
++# Copyright (C) 2002-2013 Free Software Foundation, Inc.
++
++# This program is free software: you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation, either version 3 of the License, or
++# (at your option) any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program.  If not, see <http://www.gnu.org/licenses/>.
++
++usage="usage: $0 SOURCE DEST"
++
++help="$usage
++  or:  $0 OPTION
++If SOURCE is different than DEST, then move it to DEST; else remove SOURCE.
++
++  --help     display this help and exit
++  --version  output version information and exit
++
++The variable CMPPROG can be used to specify an alternative to 'cmp'.
++
++Report bugs to <bug-gnulib@gnu.org>."
++
++version=`expr "$VERSION" : '\([^ ]*\)'`
++version="move-if-change (gnulib) $version
++Copyright (C) 2011 Free Software Foundation, Inc.
++License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
++This is free software: you are free to change and redistribute it.
++There is NO WARRANTY, to the extent permitted by law."
++
++cmpprog=${CMPPROG-cmp}
++
++for arg
++do
++  case $arg in
++    --help | --hel | --he | --h)
++      exec echo "$help" ;;
++    --version | --versio | --versi | --vers | --ver | --ve | --v)
++      exec echo "$version" ;;
++    --)
++      shift
++      break ;;
++    -*)
++      echo "$0: invalid option: $arg" >&2
++      exit 1 ;;
++    *)
++      break ;;
++  esac
++done
++
++test $# -eq 2 || { echo "$0: $usage" >&2; exit 1; }
++
++if test -r "$2" && $cmpprog -- "$1" "$2" >/dev/null; then
++  rm -f -- "$1"
+ else
+-mv -f $1 $2
+-fi
+-else
+-mv -f $1 $2
++  if mv -f -- "$1" "$2"; then :; else
++    # Ignore failure due to a concurrent move-if-change.
++    test -r "$2" && $cmpprog -- "$1" "$2" >/dev/null && rm -f -- "$1"
++  fi
+ fi
++
++## Local Variables:
++## eval: (add-hook 'write-file-hooks 'time-stamp)
++## time-stamp-start: "VERSION='"
++## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
++## time-stamp-time-zone: "UTC"
++## time-stamp-end: "'; # UTC"
++## End:
diff --git a/SOURCES/glibc-ppc64le-04.patch b/SOURCES/glibc-ppc64le-04.patch
new file mode 100644
index 0000000..8f6840b
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-04.patch
@@ -0,0 +1,676 @@
+# commit 9605ca6c085a749f29b6866a3e00bce1ba1a2698
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:12:56 2013 +0930
+# 
+#     IBM long double mechanical changes to support little-endian
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00001.html
+#     
+#     This patch starts the process of supporting powerpc64 little-endian
+#     long double in glibc.  IBM long double is an array of two ieee
+#     doubles, so making union ibm_extended_long_double reflect this fact is
+#     the correct way to access fields of the doubles.
+#     
+#         * sysdeps/ieee754/ldbl-128ibm/ieee754.h
+#         (union ibm_extended_long_double): Define as an array of ieee754_double.
+#         (IBM_EXTENDED_LONG_DOUBLE_BIAS): Delete.
+#         * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: Update all references
+#         to ibm_extended_long_double and IBM_EXTENDED_LONG_DOUBLE_BIAS.
+#         * sysdeps/ieee754/ldbl-128ibm/e_exp10l.c: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_expl.c: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/strtold_l.c: Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_exp10l.c	2014-05-26 21:08:10.000000000 -0500
+@@ -36,9 +36,9 @@
+   else if (arg > LDBL_MAX_10_EXP + 1)
+     return LDBL_MAX * LDBL_MAX;
+ 
+-  u.d = arg;
+-  arg_high = u.dd[0];
+-  arg_low = u.dd[1];
++  u.ld = arg;
++  arg_high = u.d[0].d;
++  arg_low = u.d[1].d;
+   exp_high = arg_high * log10_high;
+   exp_low = arg_high * log10_low + arg_low * M_LN10l;
+   return __ieee754_expl (exp_high) * __ieee754_expl (exp_low);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_expl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_expl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_expl.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_expl.c	2014-05-26 21:08:10.000000000 -0500
+@@ -162,39 +162,39 @@
+       x = x + xl;
+ 
+       /* Compute ex2 = 2^n_0 e^(argtable[tval1]) e^(argtable[tval2]).  */
+-      ex2_u.d = __expl_table[T_EXPL_RES1 + tval1]
+-		* __expl_table[T_EXPL_RES2 + tval2];
++      ex2_u.ld = (__expl_table[T_EXPL_RES1 + tval1]
++		  * __expl_table[T_EXPL_RES2 + tval2]);
+       n_i = (int)n;
+       /* 'unsafe' is 1 iff n_1 != 0.  */
+       unsafe = fabsl(n_i) >= -LDBL_MIN_EXP - 1;
+-      ex2_u.ieee.exponent += n_i >> unsafe;
++      ex2_u.d[0].ieee.exponent += n_i >> unsafe;
+       /* Fortunately, there are no subnormal lowpart doubles in
+ 	 __expl_table, only normal values and zeros.
+ 	 But after scaling it can be subnormal.  */
+-      exponent2 = ex2_u.ieee.exponent2 + (n_i >> unsafe);
+-      if (ex2_u.ieee.exponent2 == 0)
+-	/* assert ((ex2_u.ieee.mantissa2|ex2_u.ieee.mantissa3) == 0) */;
++      exponent2 = ex2_u.d[1].ieee.exponent + (n_i >> unsafe);
++      if (ex2_u.d[1].ieee.exponent == 0)
++	/* assert ((ex2_u.d[1].ieee.mantissa0|ex2_u.d[1].ieee.mantissa1) == 0) */;
+       else if (exponent2 > 0)
+-	ex2_u.ieee.exponent2 = exponent2;
++	ex2_u.d[1].ieee.exponent = exponent2;
+       else if (exponent2 <= -54)
+ 	{
+-	  ex2_u.ieee.exponent2 = 0;
+-	  ex2_u.ieee.mantissa2 = 0;
+-	  ex2_u.ieee.mantissa3 = 0;
++	  ex2_u.d[1].ieee.exponent = 0;
++	  ex2_u.d[1].ieee.mantissa0 = 0;
++	  ex2_u.d[1].ieee.mantissa1 = 0;
+ 	}
+       else
+ 	{
+ 	  static const double
+ 	    two54 = 1.80143985094819840000e+16, /* 4350000000000000 */
+ 	    twom54 = 5.55111512312578270212e-17; /* 3C90000000000000 */
+-	  ex2_u.dd[1] *= two54;
+-	  ex2_u.ieee.exponent2 += n_i >> unsafe;
+-	  ex2_u.dd[1] *= twom54;
++	  ex2_u.d[1].d *= two54;
++	  ex2_u.d[1].ieee.exponent += n_i >> unsafe;
++	  ex2_u.d[1].d *= twom54;
+ 	}
+ 
+       /* Compute scale = 2^n_1.  */
+-      scale_u.d = 1.0L;
+-      scale_u.ieee.exponent += n_i - (n_i >> unsafe);
++      scale_u.ld = 1.0L;
++      scale_u.d[0].ieee.exponent += n_i - (n_i >> unsafe);
+ 
+       /* Approximate e^x2 - 1, using a seventh-degree polynomial,
+ 	 with maximum error in [-2^-16-2^-53,2^-16+2^-53]
+@@ -204,7 +204,7 @@
+       /* Return result.  */
+       fesetenv (&oldenv);
+ 
+-      result = x22 * ex2_u.d + ex2_u.d;
++      result = x22 * ex2_u.ld + ex2_u.ld;
+ 
+       /* Now we can test whether the result is ultimate or if we are unsure.
+ 	 In the later case we should probably call a mpn based routine to give
+@@ -238,7 +238,7 @@
+       if (!unsafe)
+ 	return result;
+       else
+-	return result * scale_u.d;
++	return result * scale_u.ld;
+     }
+   /* Exceptional cases:  */
+   else if (isless (x, himark))
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h	2014-05-26 21:08:10.000000000 -0500
+@@ -180,29 +180,9 @@
+ 
+ union ibm_extended_long_double
+   {
+-    long double d;
+-    double dd[2];
+-
+-    /* This is the IBM extended format long double.  */
+-    struct
+-      { /* Big endian.  There is no other.  */
+-
+-	unsigned int negative:1;
+-	unsigned int exponent:11;
+-	/* Together Mantissa0-3 comprise the mantissa.  */
+-	unsigned int mantissa0:20;
+-	unsigned int mantissa1:32;
+-
+-	unsigned int negative2:1;
+-	unsigned int exponent2:11;
+-	/* There is an implied 1 here?  */
+-	/* Together these comprise the mantissa.  */
+-	unsigned int mantissa2:20;
+-	unsigned int mantissa3:32;
+-      } ieee;
+-   };
+-
+-#define IBM_EXTENDED_LONG_DOUBLE_BIAS 0x3ff /* Added to exponent.  */
++    long double ld;
++    union ieee754_double d[2];
++  };
+ 
+ __END_DECLS
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c	2014-05-26 21:08:10.000000000 -0500
+@@ -36,22 +36,22 @@
+   union ibm_extended_long_double u;
+   unsigned long long hi, lo;
+   int ediff;
+-  u.d = value;
++  u.ld = value;
+ 
+-  *is_neg = u.ieee.negative;
+-  *expt = (int) u.ieee.exponent - IBM_EXTENDED_LONG_DOUBLE_BIAS;
++  *is_neg = u.d[0].ieee.negative;
++  *expt = (int) u.d[0].ieee.exponent - IEEE754_DOUBLE_BIAS;
+ 
+-  lo = ((long long) u.ieee.mantissa2 << 32) | u.ieee.mantissa3;
+-  hi = ((long long) u.ieee.mantissa0 << 32) | u.ieee.mantissa1;
++  lo = ((long long) u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1;
++  hi = ((long long) u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1;
+   /* If the lower double is not a denomal or zero then set the hidden
+      53rd bit.  */
+-  if (u.ieee.exponent2 > 0)
++  if (u.d[1].ieee.exponent > 0)
+     {
+       lo |= 1LL << 52;
+ 
+       /* The lower double is normalized separately from the upper.  We may
+ 	 need to adjust the lower manitissa to reflect this.  */
+-      ediff = u.ieee.exponent - u.ieee.exponent2;
++      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent;
+       if (ediff > 53)
+ 	lo = lo >> (ediff-53);
+     }
+@@ -59,8 +59,8 @@
+      difference between the long double and the rounded high double
+      value.  This is indicated by a differnce between the signs of the
+      high and low doubles.  */
+-  if ((u.ieee.negative != u.ieee.negative2)
+-      && ((u.ieee.exponent2 != 0) && (lo != 0L)))
++  if ((u.d[0].ieee.negative != u.d[1].ieee.negative)
++      && ((u.d[1].ieee.exponent != 0) && (lo != 0L)))
+     {
+       lo = (1ULL << 53) - lo;
+       if (hi == 0LL)
+@@ -92,7 +92,7 @@
+ #define NUM_LEADING_ZEROS (BITS_PER_MP_LIMB \
+ 			   - (LDBL_MANT_DIG - ((N - 1) * BITS_PER_MP_LIMB)))
+ 
+-  if (u.ieee.exponent == 0)
++  if (u.d[0].ieee.exponent == 0)
+     {
+       /* A biased exponent of zero is a special case.
+ 	 Either it is a zero or it is a denormal number.  */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-26 21:08:10.000000000 -0500
+@@ -14,28 +14,28 @@
+      as bit 53 of the mantissa.  */
+   uint64_t hi, lo;
+   int ediff;
+-  union ibm_extended_long_double eldbl;
+-  eldbl.d = x;
+-  *exp = eldbl.ieee.exponent - IBM_EXTENDED_LONG_DOUBLE_BIAS;
++  union ibm_extended_long_double u;
++  u.ld = x;
++  *exp = u.d[0].ieee.exponent - IEEE754_DOUBLE_BIAS;
+ 
+-  lo = ((int64_t)eldbl.ieee.mantissa2 << 32) | eldbl.ieee.mantissa3;
+-  hi = ((int64_t)eldbl.ieee.mantissa0 << 32) | eldbl.ieee.mantissa1;
++  lo = ((uint64_t)u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1;
++  hi = ((uint64_t)u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1;
+   /* If the lower double is not a denomal or zero then set the hidden
+      53rd bit.  */
+-  if (eldbl.ieee.exponent2 > 0x001)
++  if (u.d[1].ieee.exponent > 0x001)
+     {
+       lo |= (1ULL << 52);
+       lo = lo << 7; /* pre-shift lo to match ieee854.  */
+       /* The lower double is normalized separately from the upper.  We
+ 	 may need to adjust the lower manitissa to reflect this.  */
+-      ediff = eldbl.ieee.exponent - eldbl.ieee.exponent2;
++      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent;
+       if (ediff > 53)
+ 	lo = lo >> (ediff-53);
+       hi |= (1ULL << 52);
+     }
+   
+-  if ((eldbl.ieee.negative != eldbl.ieee.negative2)
+-      && ((eldbl.ieee.exponent2 != 0) && (lo != 0LL)))
++  if ((u.d[0].ieee.negative != u.d[1].ieee.negative)
++      && ((u.d[1].ieee.exponent != 0) && (lo != 0LL)))
+     {
+       hi--;
+       lo = (1ULL << 60) - lo;
+@@ -58,10 +58,10 @@
+   unsigned long hidden2, lzcount;
+   unsigned long long hi, lo;
+ 
+-  u.ieee.negative = sign;
+-  u.ieee.negative2 = sign;
+-  u.ieee.exponent = exp + IBM_EXTENDED_LONG_DOUBLE_BIAS;
+-  u.ieee.exponent2 = exp-53 + IBM_EXTENDED_LONG_DOUBLE_BIAS;
++  u.d[0].ieee.negative = sign;
++  u.d[1].ieee.negative = sign;
++  u.d[0].ieee.exponent = exp + IEEE754_DOUBLE_BIAS;
++  u.d[1].ieee.exponent = exp-53 + IEEE754_DOUBLE_BIAS;
+   /* Expect 113 bits (112 bits + hidden) right justified in two longs.
+      The low order 53 bits (52 + hidden) go into the lower double */ 
+   lo = (lo64 >> 7)& ((1ULL << 53) - 1);
+@@ -78,7 +78,7 @@
+       if (hidden2)
+ 	{
+ 	  hi++;
+-	  u.ieee.negative2 = !sign;
++	  u.d[1].ieee.negative = !sign;
+ 	  lo = (1ULL << 53) - lo;
+ 	}
+       /* The hidden bit of the lo mantissa is zero so we need to
+@@ -94,32 +94,32 @@
+       lzcount = lzcount - 11;
+       if (lzcount > 0)
+ 	{
+-	  int expnt2 = u.ieee.exponent2 - lzcount;
++	  int expnt2 = u.d[1].ieee.exponent - lzcount;
+ 	  if (expnt2 >= 1)
+ 	    {
+ 	      /* Not denormal.  Normalize and set low exponent.  */
+ 	      lo = lo << lzcount;
+-	      u.ieee.exponent2 = expnt2;
++	      u.d[1].ieee.exponent = expnt2;
+ 	    }
+ 	  else
+ 	    {
+ 	      /* Is denormal.  */
+ 	      lo = lo << (lzcount + expnt2);
+-	      u.ieee.exponent2 = 0;
++	      u.d[1].ieee.exponent = 0;
+ 	    }
+ 	}
+     }
+   else
+     {
+-      u.ieee.negative2 = 0;
+-      u.ieee.exponent2 = 0;
++      u.d[1].ieee.negative = 0;
++      u.d[1].ieee.exponent = 0;
+     }
+ 
+-  u.ieee.mantissa3 = lo & ((1ULL << 32) - 1);
+-  u.ieee.mantissa2 = (lo >> 32) & ((1ULL << 20) - 1);
+-  u.ieee.mantissa1 = hi & ((1ULL << 32) - 1);
+-  u.ieee.mantissa0 = (hi >> 32) & ((1ULL << 20) - 1);
+-  return u.d;
++  u.d[1].ieee.mantissa1 = lo & ((1ULL << 32) - 1);
++  u.d[1].ieee.mantissa0 = (lo >> 32) & ((1ULL << 20) - 1);
++  u.d[0].ieee.mantissa1 = hi & ((1ULL << 32) - 1);
++  u.d[0].ieee.mantissa0 = (hi >> 32) & ((1ULL << 20) - 1);
++  return u.ld;
+ }
+   
+ /* Handy utility functions to pack/unpack/cononicalize and find the nearbyint
+@@ -128,18 +128,18 @@
+ default_ldbl_pack (double a, double aa)
+ {
+   union ibm_extended_long_double u;
+-  u.dd[0] = a;
+-  u.dd[1] = aa;
+-  return u.d;
++  u.d[0].d = a;
++  u.d[1].d = aa;
++  return u.ld;
+ }
+ 
+ static inline void
+ default_ldbl_unpack (long double l, double *a, double *aa)
+ {
+   union ibm_extended_long_double u;
+-  u.d = l;
+-  *a = u.dd[0];
+-  *aa = u.dd[1];
++  u.ld = l;
++  *a = u.d[0].d;
++  *aa = u.d[1].d;
+ }
+ 
+ #ifndef ldbl_pack
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c	2014-05-26 21:08:10.000000000 -0500
+@@ -34,11 +34,11 @@
+   unsigned long long hi, lo;
+   int exponent2;
+ 
+-  u.ieee.negative = sign;
+-  u.ieee.negative2 = sign;
+-  u.ieee.exponent = expt + IBM_EXTENDED_LONG_DOUBLE_BIAS;
+-  u.ieee.exponent2 = 0;
+-  exponent2 = expt - 53 + IBM_EXTENDED_LONG_DOUBLE_BIAS;
++  u.d[0].ieee.negative = sign;
++  u.d[1].ieee.negative = sign;
++  u.d[0].ieee.exponent = expt + IEEE754_DOUBLE_BIAS;
++  u.d[1].ieee.exponent = 0;
++  exponent2 = expt - 53 + IEEE754_DOUBLE_BIAS;
+ 
+ #if BITS_PER_MP_LIMB == 32
+   /* The low order 53 bits (52 + hidden) go into the lower double */
+@@ -74,15 +74,15 @@
+       else
+ 	lzcount = lzcount + 42;
+ 
+-      if (lzcount > u.ieee.exponent)
++      if (lzcount > u.d[0].ieee.exponent)
+ 	{
+-	  lzcount = u.ieee.exponent;
+-	  u.ieee.exponent = 0;
++	  lzcount = u.d[0].ieee.exponent;
++	  u.d[0].ieee.exponent = 0;
+ 	  exponent2 -= lzcount;
+ 	}
+       else
+ 	{
+-	  u.ieee.exponent -= (lzcount - 1);
++	  u.d[0].ieee.exponent -= (lzcount - 1);
+ 	  exponent2 -= (lzcount - 1);
+ 	}
+ 
+@@ -112,9 +112,9 @@
+ 	    {
+ 	      if ((hi & (1LL << 53)) != 0)
+ 		hi -= 1LL << 52;
+-	      u.ieee.exponent++;
++	      u.d[0].ieee.exponent++;
+ 	    }
+-	  u.ieee.negative2 = !sign;
++	  u.d[1].ieee.negative = !sign;
+ 	  lo = (1LL << 53) - lo;
+ 	}
+ 
+@@ -135,17 +135,17 @@
+ 	  exponent2 = exponent2 - lzcount;
+ 	}
+       if (exponent2 > 0)
+-	u.ieee.exponent2 = exponent2;
++	u.d[1].ieee.exponent = exponent2;
+       else
+ 	lo >>= 1 - exponent2;
+     }
+   else
+-    u.ieee.negative2 = 0;
++    u.d[1].ieee.negative = 0;
+ 
+-  u.ieee.mantissa3 = lo & 0xffffffffLL;
+-  u.ieee.mantissa2 = (lo >> 32) & 0xfffff;
+-  u.ieee.mantissa1 = hi & 0xffffffffLL;
+-  u.ieee.mantissa0 = (hi >> 32) & ((1LL << (LDBL_MANT_DIG - 86)) - 1);
++  u.d[1].ieee.mantissa1 = lo & 0xffffffffLL;
++  u.d[1].ieee.mantissa0 = (lo >> 32) & 0xfffff;
++  u.d[0].ieee.mantissa1 = hi & 0xffffffffLL;
++  u.d[0].ieee.mantissa0 = (hi >> 32) & ((1LL << (LDBL_MANT_DIG - 86)) - 1);
+ 
+-  return u.d;
++  return u.ld;
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c	2014-05-26 21:08:10.000000000 -0500
+@@ -27,31 +27,31 @@
+       unsigned long long int num0, num1;				      \
+       unsigned long long hi, lo;					      \
+       int ediff;							      \
+-      union ibm_extended_long_double eldbl;				      \
+-      eldbl.d = fpnum.ldbl.d;						      \
++      union ibm_extended_long_double u;					      \
++      u.ld = fpnum.ldbl.d;						      \
+ 									      \
+       assert (sizeof (long double) == 16);				      \
+ 									      \
+-      lo = ((long long)eldbl.ieee.mantissa2 << 32) | eldbl.ieee.mantissa3;    \
+-      hi = ((long long)eldbl.ieee.mantissa0 << 32) | eldbl.ieee.mantissa1;    \
++      lo = ((long long)u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1;  \
++      hi = ((long long)u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1;  \
+       lo <<= 7; /* pre-shift lo to match ieee854.  */			      \
+       /* If the lower double is not a denomal or zero then set the hidden     \
+ 	 53rd bit.  */							      \
+-      if (eldbl.ieee.exponent2 != 0)					      \
++      if (u.d[1].ieee.exponent != 0)					      \
+ 	lo |= (1ULL << (52 + 7));					      \
+       else								      \
+ 	lo <<= 1;							      \
+       /* The lower double is normalized separately from the upper.  We	      \
+ 	 may need to adjust the lower manitissa to reflect this.  */	      \
+-      ediff = eldbl.ieee.exponent - eldbl.ieee.exponent2;		      \
++      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent;		      \
+       if (ediff > 53 + 63)						      \
+ 	lo = 0;								      \
+       else if (ediff > 53)						      \
+ 	lo = lo >> (ediff - 53);					      \
+-      else if (eldbl.ieee.exponent2 == 0 && ediff < 53)			      \
++      else if (u.d[1].ieee.exponent == 0 && ediff < 53)			      \
+ 	lo = lo << (53 - ediff);					      \
+-      if (eldbl.ieee.negative != eldbl.ieee.negative2			      \
+-	  && (eldbl.ieee.exponent2 != 0 || lo != 0L))			      \
++      if (u.d[0].ieee.negative != u.d[1].ieee.negative			      \
++	  && (u.d[1].ieee.exponent != 0 || lo != 0L))			      \
+ 	{								      \
+ 	  lo = (1ULL << 60) - lo;					      \
+ 	  if (hi == 0L)							      \
+@@ -59,7 +59,7 @@
+ 	      /* we have a borrow from the hidden bit, so shift left 1.  */   \
+ 	      hi = 0xffffffffffffeLL | (lo >> 59);			      \
+ 	      lo = 0xfffffffffffffffLL & (lo << 1);			      \
+-	      eldbl.ieee.exponent--;					      \
++	      u.d[0].ieee.exponent--;					      \
+ 	    }								      \
+ 	  else								      \
+ 	    hi--;							      \
+@@ -110,9 +110,9 @@
+ 	  *--wnumstr = L'0';						      \
+ 	}								      \
+ 									      \
+-      leading = eldbl.ieee.exponent == 0 ? '0' : '1';			      \
++      leading = u.d[0].ieee.exponent == 0 ? '0' : '1';			      \
+ 									      \
+-      exponent = eldbl.ieee.exponent;					      \
++      exponent = u.d[0].ieee.exponent;					      \
+ 									      \
+       if (exponent == 0)						      \
+ 	{								      \
+@@ -122,18 +122,18 @@
+ 	    {								      \
+ 	      /* This is a denormalized number.  */			      \
+ 	      expnegative = 1;						      \
+-	      exponent = IBM_EXTENDED_LONG_DOUBLE_BIAS - 1;		      \
++	      exponent = IEEE754_DOUBLE_BIAS - 1;			      \
+ 	    }								      \
+ 	}								      \
+-      else if (exponent >= IBM_EXTENDED_LONG_DOUBLE_BIAS)		      \
++      else if (exponent >= IEEE754_DOUBLE_BIAS)				      \
+ 	{								      \
+ 	  expnegative = 0;						      \
+-	  exponent -= IBM_EXTENDED_LONG_DOUBLE_BIAS;			      \
++	  exponent -= IEEE754_DOUBLE_BIAS;				      \
+ 	}								      \
+       else								      \
+ 	{								      \
+ 	  expnegative = 1;						      \
+-	  exponent = -(exponent - IBM_EXTENDED_LONG_DOUBLE_BIAS);	      \
++	  exponent = -(exponent - IEEE754_DOUBLE_BIAS);			      \
+ 	}								      \
+ } while (0)
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nearbyintl.c	2014-05-26 21:08:10.000000000 -0500
+@@ -33,11 +33,11 @@
+   fenv_t env;
+   static const long double TWO52 = 4503599627370496.0L;
+   union ibm_extended_long_double u;
+-  u.d = x;
++  u.ld = x;
+ 
+-  if (fabs (u.dd[0]) < TWO52)
++  if (fabs (u.d[0].d) < TWO52)
+     {
+-      double high = u.dd[0];
++      double high = u.d[0].d;
+       feholdexcept (&env);
+       if (high > 0.0)
+ 	{
+@@ -51,11 +51,11 @@
+ 	  high += TWO52;
+           if (high == 0.0) high = -0.0;
+ 	}
+-      u.dd[0] = high;
+-      u.dd[1] = 0.0;
++      u.d[0].d = high;
++      u.d[1].d = 0.0;
+       fesetenv (&env);
+     }
+-  else if (fabs (u.dd[1]) < TWO52 && u.dd[1] != 0.0)
++  else if (fabs (u.d[1].d) < TWO52 && u.d[1].d != 0.0)
+     {
+       double high, low, tau;
+       /* In this case we have to round the low double and handle any
+@@ -64,55 +64,55 @@
+          may already be rounded and the low double may have the
+          opposite sign to compensate.  */
+       feholdexcept (&env);
+-      if (u.dd[0] > 0.0)
++      if (u.d[0].d > 0.0)
+ 	{
+-	  if (u.dd[1] > 0.0)
++	  if (u.d[1].d > 0.0)
+ 	    {
+ 	      /* If the high/low doubles are the same sign then simply
+ 	         round the low double.  */
+-	      high = u.dd[0];
+-	      low = u.dd[1];
++	      high = u.d[0].d;
++	      low = u.d[1].d;
+ 	    }
+-	  else if (u.dd[1] < 0.0)
++	  else if (u.d[1].d < 0.0)
+ 	    {
+ 	      /* Else the high double is pre rounded and we need to
+ 	         adjust for that.  */
+ 
+-	      tau = __nextafter (u.dd[0], 0.0);
+-	      tau = (u.dd[0] - tau) * 2.0;
+-	      high = u.dd[0] - tau;
+-	      low = u.dd[1] + tau;
++	      tau = __nextafter (u.d[0].d, 0.0);
++	      tau = (u.d[0].d - tau) * 2.0;
++	      high = u.d[0].d - tau;
++	      low = u.d[1].d + tau;
+ 	    }
+ 	  low += TWO52;
+ 	  low -= TWO52;
+ 	}
+-      else if (u.dd[0] < 0.0)
++      else if (u.d[0].d < 0.0)
+ 	{
+-	  if (u.dd[1] < 0.0)
++	  if (u.d[1].d < 0.0)
+ 	    {
+ 	      /* If the high/low doubles are the same sign then simply
+ 	         round the low double.  */
+-	      high = u.dd[0];
+-	      low = u.dd[1];
++	      high = u.d[0].d;
++	      low = u.d[1].d;
+ 	    }
+-	  else if (u.dd[1] > 0.0)
++	  else if (u.d[1].d > 0.0)
+ 	    {
+ 	      /* Else the high double is pre rounded and we need to
+ 	         adjust for that.  */
+-	      tau = __nextafter (u.dd[0], 0.0);
+-	      tau = (u.dd[0] - tau) * 2.0;
+-	      high = u.dd[0] - tau;
+-	      low = u.dd[1] + tau;
++	      tau = __nextafter (u.d[0].d, 0.0);
++	      tau = (u.d[0].d - tau) * 2.0;
++	      high = u.d[0].d - tau;
++	      low = u.d[1].d + tau;
+ 	    }
+ 	  low = TWO52 - low;
+ 	  low = -(low - TWO52);
+ 	}
+-      u.dd[0] = high + low;
+-      u.dd[1] = high - u.dd[0] + low;
++      u.d[0].d = high + low;
++      u.d[1].d = high - u.d[0].d + low;
+       fesetenv (&env);
+     }
+ 
+-  return u.d;
++  return u.ld;
+ }
+ 
+ long_double_symbol (libm, __nearbyintl, nearbyintl);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/strtold_l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/strtold_l.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/strtold_l.c	2014-05-26 21:12:01.000000000 -0500
+@@ -43,12 +43,11 @@
+ #define FLOAT_HUGE_VAL	HUGE_VALL
+ # define SET_MANTISSA(flt, mant) \
+   do { union ibm_extended_long_double u;				      \
+-       u.d = (flt);							      \
+-       if ((mant & 0xfffffffffffffULL) == 0)				      \
+-	 mant = 0x8000000000000ULL;					      \
+-       u.ieee.mantissa0 = ((mant) >> 32) & 0xfffff;			      \
+-       u.ieee.mantissa1 = (mant) & 0xffffffff;				      \
+-       (flt) = u.d;							      \
++       u.ld = (flt);							      \
++       u.d[0].ieee_nan.mantissa0 = (mant) >> 32;				      \
++       u.d[0].ieee_nan.mantissa1 = (mant);				   	      \
++       if ((u.d[0].ieee.mantissa0 | u.d[0].ieee.mantissa1) != 0)	      \
++         (flt) = u.ld;							      \
+   } while (0)
+ 
+ #include <strtod_l.c>
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c	2014-05-26 21:08:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/x2y2m1l.c	2014-05-26 21:08:10.000000000 -0500
+@@ -89,23 +89,23 @@
+   double vals[12];
+   SET_RESTORE_ROUND (FE_TONEAREST);
+   union ibm_extended_long_double xu, yu;
+-  xu.d = x;
+-  yu.d = y;
+-  if (fabs (xu.dd[1]) < 0x1p-500)
+-    xu.dd[1] = 0.0;
+-  if (fabs (yu.dd[1]) < 0x1p-500)
+-    yu.dd[1] = 0.0;
+-  mul_split (&vals[1], &vals[0], xu.dd[0], xu.dd[0]);
+-  mul_split (&vals[3], &vals[2], xu.dd[0], xu.dd[1]);
++  xu.ld = x;
++  yu.ld = y;
++  if (fabs (xu.d[1].d) < 0x1p-500)
++    xu.d[1].d = 0.0;
++  if (fabs (yu.d[1].d) < 0x1p-500)
++    yu.d[1].d = 0.0;
++  mul_split (&vals[1], &vals[0], xu.d[0].d, xu.d[0].d);
++  mul_split (&vals[3], &vals[2], xu.d[0].d, xu.d[1].d);
+   vals[2] *= 2.0;
+   vals[3] *= 2.0;
+-  mul_split (&vals[5], &vals[4], xu.dd[1], xu.dd[1]);
+-  mul_split (&vals[7], &vals[6], yu.dd[0], yu.dd[0]);
+-  mul_split (&vals[9], &vals[8], yu.dd[0], yu.dd[1]);
++  mul_split (&vals[5], &vals[4], xu.d[1].d, xu.d[1].d);
++  mul_split (&vals[7], &vals[6], yu.d[0].d, yu.d[0].d);
++  mul_split (&vals[9], &vals[8], yu.d[0].d, yu.d[1].d);
+   vals[8] *= 2.0;
+   vals[9] *= 2.0;
+-  mul_split (&vals[11], &vals[10], yu.dd[1], yu.dd[1]);
+-  if (xu.dd[0] >= 0.75)
++  mul_split (&vals[11], &vals[10], yu.d[1].d, yu.d[1].d);
++  if (xu.d[0].d >= 0.75)
+     vals[1] -= 1.0;
+   else
+     {
diff --git a/SOURCES/glibc-ppc64le-05.patch b/SOURCES/glibc-ppc64le-05.patch
new file mode 100644
index 0000000..d089fda
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-05.patch
@@ -0,0 +1,486 @@
+# commit 4cf69995e26e16005d4e3843ad4d18c75cf21a04
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:19:44 2013 +0930
+# 
+#     Fix for [BZ #15680] IBM long double inaccuracy
+#     http://sourceware.org/ml/libc-alpha/2013-06/msg00919.html
+#     
+#     I discovered a number of places where denormals and other corner cases
+#     were being handled wrongly.
+#     
+#     - printf_fphex.c: Testing for the low double exponent being zero is
+#     unnecessary.  If the difference in exponents is less than 53 then the
+#     high double exponent must be nearing the low end of its range, and the
+#     low double exponent hit rock bottom.
+#     
+#     - ldbl2mpn.c: A denormal (ie. exponent of zero) value is treated as
+#     if the exponent was one, so shift mantissa left by one.  Code handling
+#     normalisation of the low double mantissa lacked a test for shift count
+#     greater than bits in type being shifted, and lacked anything to handle
+#     the case where the difference in exponents is less than 53 as in
+#     printf_fphex.c.
+#     
+#     - math_ldbl.h (ldbl_extract_mantissa): Same as above, but worse, with
+#     code testing for exponent > 1 for some reason, probably a typo for >= 1.
+#     
+#     - math_ldbl.h (ldbl_insert_mantissa): Round the high double as per
+#     mpn2ldbl.c (hi is odd or explicit mantissas non-zero) so that the
+#     number we return won't change when applying ldbl_canonicalize().
+#     Add missing overflow checks and normalisation of high mantissa.
+#     Correct misleading comment: "The hidden bit of the lo mantissa is
+#     zero" is not always true as can be seen from the code rounding the hi
+#     mantissa.  Also by inspection, lzcount can never be less than zero so
+#     remove that test.  Lastly, masking bitfields to their widths can be
+#     left to the compiler.
+#     
+#     - mpn2ldbl.c: The overflow checks here on rounding of high double were
+#     just plain wrong.  Incrementing the exponent must be accompanied by a
+#     shift right of the mantissa to keep the value unchanged.  Above notes
+#     for ldbl_insert_mantissa are also relevant.
+#     
+#         [BZ #15680]
+#         * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c: Comment fix.
+#         * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c
+#         (PRINT_FPHEX_LONG_DOUBLE): Tidy code by moving -53 into ediff
+#         calculation.  Remove unnecessary test for denormal exponent.
+#         * sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c (__mpn_extract_long_double):
+#         Correct handling of denormals.  Avoid undefined shift behaviour.
+#         Correct normalisation of low mantissa when low double is denormal.
+#         * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h
+#         (ldbl_extract_mantissa): Likewise.  Comment.  Use uint64_t* for hi64.
+#         (ldbl_insert_mantissa): Make both hi64 and lo64 parms uint64_t.
+#         Correct normalisation of low mantissa.  Test for overflow of high
+#         mantissa and normalise.
+#         (ldbl_nearbyint): Use more readable constant for two52.
+#         * sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c
+#         (__mpn_construct_long_double): Fix test for overflow of high
+#         mantissa and correct normalisation.  Avoid undefined shift.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c	2014-05-27 19:13:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c	2014-05-27 19:14:45.000000000 -0500
+@@ -243,7 +243,7 @@
+      We split the 113 bits of the mantissa into 5 24bit integers
+      stored in a double array.  */
+   /* Make the IBM extended format 105 bit mantissa look like the ieee854 112
+-     bit mantissa so the next operatation will give the correct result.  */
++     bit mantissa so the next operation will give the correct result.  */
+   ldbl_extract_mantissa (&ixd, &lxd, &exp, x);
+   exp = exp - 23;
+   /* This is faster than doing this in floating point, because we
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c	2014-05-27 19:13:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ldbl2mpn.c	2014-05-27 19:14:45.000000000 -0500
+@@ -36,6 +36,7 @@
+   union ibm_extended_long_double u;
+   unsigned long long hi, lo;
+   int ediff;
++
+   u.ld = value;
+ 
+   *is_neg = u.d[0].ieee.negative;
+@@ -43,27 +44,36 @@
+ 
+   lo = ((long long) u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1;
+   hi = ((long long) u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1;
+-  /* If the lower double is not a denomal or zero then set the hidden
++
++  /* If the lower double is not a denormal or zero then set the hidden
+      53rd bit.  */
+-  if (u.d[1].ieee.exponent > 0)
+-    {
+-      lo |= 1LL << 52;
++  if (u.d[1].ieee.exponent != 0)
++    lo |= 1ULL << 52;
++  else
++    lo = lo << 1;
+ 
+-      /* The lower double is normalized separately from the upper.  We may
+-	 need to adjust the lower manitissa to reflect this.  */
+-      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent;
+-      if (ediff > 53)
+-	lo = lo >> (ediff-53);
++  /* The lower double is normalized separately from the upper.  We may
++     need to adjust the lower manitissa to reflect this.  */
++  ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent - 53;
++  if (ediff > 0)
++    {
++      if (ediff < 64)
++	lo = lo >> ediff;
++      else
++	lo = 0;
+     }
++  else if (ediff < 0)
++    lo = lo << -ediff;
++
+   /* The high double may be rounded and the low double reflects the
+      difference between the long double and the rounded high double
+      value.  This is indicated by a differnce between the signs of the
+      high and low doubles.  */
+-  if ((u.d[0].ieee.negative != u.d[1].ieee.negative)
+-      && ((u.d[1].ieee.exponent != 0) && (lo != 0L)))
++  if (u.d[0].ieee.negative != u.d[1].ieee.negative
++      && lo != 0)
+     {
+       lo = (1ULL << 53) - lo;
+-      if (hi == 0LL)
++      if (hi == 0)
+ 	{
+ 	  /* we have a borrow from the hidden bit, so shift left 1.  */
+ 	  hi = 0x0ffffffffffffeLL | (lo >> 51);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-27 19:13:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-27 19:51:13.000000000 -0500
+@@ -13,77 +13,118 @@
+      the number before the decimal point and the second implicit bit
+      as bit 53 of the mantissa.  */
+   uint64_t hi, lo;
+-  int ediff;
+   union ibm_extended_long_double u;
++
+   u.ld = x;
+   *exp = u.d[0].ieee.exponent - IEEE754_DOUBLE_BIAS;
+ 
+   lo = ((uint64_t)u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1;
+   hi = ((uint64_t)u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1;
+-  /* If the lower double is not a denomal or zero then set the hidden
+-     53rd bit.  */
+-  if (u.d[1].ieee.exponent > 0x001)
+-    {
+-      lo |= (1ULL << 52);
+-      lo = lo << 7; /* pre-shift lo to match ieee854.  */
+-      /* The lower double is normalized separately from the upper.  We
+-	 may need to adjust the lower manitissa to reflect this.  */
+-      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent;
+-      if (ediff > 53)
+-	lo = lo >> (ediff-53);
+-      hi |= (1ULL << 52);
+-    }
+   
+-  if ((u.d[0].ieee.negative != u.d[1].ieee.negative)
+-      && ((u.d[1].ieee.exponent != 0) && (lo != 0LL)))
++  if (u.d[0].ieee.exponent != 0)
+     {
+-      hi--;
+-      lo = (1ULL << 60) - lo;
+-      if (hi < (1ULL << 52))
++      int ediff;
++
++      /* If not a denormal or zero then we have an implicit 53rd bit.  */
++      hi |= (uint64_t) 1 << 52;
++
++      if (u.d[1].ieee.exponent != 0)
++	lo |= (uint64_t) 1 << 52;
++      else
++	/* A denormal is to be interpreted as having a biased exponent
++	   of 1.  */
++	lo = lo << 1;
++
++      /* We are going to shift 4 bits out of hi later, because we only
++	 want 48 bits in *hi64.  That means we want 60 bits in lo, but
++	 we currently only have 53.  Shift the value up.  */
++      lo = lo << 7;
++
++      /* The lower double is normalized separately from the upper.
++	 We may need to adjust the lower mantissa to reflect this.
++	 The difference between the exponents can be larger than 53
++	 when the low double is much less than 1ULP of the upper
++	 (in which case there are significant bits, all 0's or all
++	 1's, between the two significands).  The difference between
++	 the exponents can be less than 53 when the upper double
++	 exponent is nearing its minimum value (in which case the low
++	 double is denormal ie. has an exponent of zero).  */
++      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent - 53;
++      if (ediff > 0)
+ 	{
+-	  /* we have a borrow from the hidden bit, so shift left 1.  */
+-	  hi = (hi << 1) | (lo >> 59);
+-	  lo = 0xfffffffffffffffLL & (lo << 1);
+-	  *exp = *exp - 1;
++	  if (ediff < 64)
++	    lo = lo >> ediff;
++	  else
++	    lo = 0;
++	}
++      else if (ediff < 0)
++	lo = lo << -ediff;
++
++      if (u.d[0].ieee.negative != u.d[1].ieee.negative
++	  && lo != 0)
++	{
++	  hi--;
++	  lo = ((uint64_t) 1 << 60) - lo;
++	  if (hi < (uint64_t) 1 << 52)
++	    {
++	      /* We have a borrow from the hidden bit, so shift left 1.  */
++	      hi = (hi << 1) | (lo >> 59);
++	      lo = (((uint64_t) 1 << 60) - 1) & (lo << 1);
++	      *exp = *exp - 1;
++	    }
+ 	}
+     }
++  else
++    /* If the larger magnitude double is denormal then the smaller
++       one must be zero.  */
++    hi = hi << 1;
++
+   *lo64 = (hi << 60) | lo;
+   *hi64 = hi >> 4;
+ }
+ 
+ static inline long double
+-ldbl_insert_mantissa (int sign, int exp, int64_t hi64, u_int64_t lo64)
++ldbl_insert_mantissa (int sign, int exp, int64_t hi64, uint64_t lo64)
+ {
+   union ibm_extended_long_double u;
+-  unsigned long hidden2, lzcount;
+-  unsigned long long hi, lo;
++  int expnt2;
++  uint64_t hi, lo;
+ 
+   u.d[0].ieee.negative = sign;
+   u.d[1].ieee.negative = sign;
+   u.d[0].ieee.exponent = exp + IEEE754_DOUBLE_BIAS;
+-  u.d[1].ieee.exponent = exp-53 + IEEE754_DOUBLE_BIAS;
++  u.d[1].ieee.exponent = 0;
++  expnt2 = exp - 53 + IEEE754_DOUBLE_BIAS;
++ 
+   /* Expect 113 bits (112 bits + hidden) right justified in two longs.
+      The low order 53 bits (52 + hidden) go into the lower double */ 
+-  lo = (lo64 >> 7)& ((1ULL << 53) - 1);
+-  hidden2 = (lo64 >> 59) &  1ULL;
++  lo = (lo64 >> 7) & (((uint64_t) 1 << 53) - 1);
+   /* The high order 53 bits (52 + hidden) go into the upper double */
+-  hi = (lo64 >> 60) & ((1ULL << 11) - 1);
+-  hi |= (hi64 << 4);
++  hi = lo64 >> 60;
++  hi |= hi64 << 4;
+ 
+-  if (lo != 0LL)
++  if (lo != 0)
+     {
+-      /* hidden2 bit of low double controls rounding of the high double.
+-	 If hidden2 is '1' then round up hi and adjust lo (2nd mantissa)
++      int lzcount;
++
++      /* hidden bit of low double controls rounding of the high double.
++	 If hidden is '1' and either the explicit mantissa is non-zero
++	 or hi is odd, then round up hi and adjust lo (2nd mantissa)
+ 	 plus change the sign of the low double to compensate.  */
+-      if (hidden2)
++      if ((lo & ((uint64_t) 1 << 52)) != 0
++	  && ((hi & 1) != 0 || (lo & (((uint64_t) 1 << 52) - 1)) != 0))
+ 	{
+ 	  hi++;
++	  if ((hi & ((uint64_t) 1 << 53)) != 0)
++	    {
++	      hi = hi >> 1;
++	      u.d[0].ieee.exponent++;
++	    }
+ 	  u.d[1].ieee.negative = !sign;
+-	  lo = (1ULL << 53) - lo;
++	  lo = ((uint64_t) 1 << 53) - lo;
+ 	}
+-      /* The hidden bit of the lo mantissa is zero so we need to
+-	 normalize the it for the low double.  Shift it left until the
+-	 hidden bit is '1' then adjust the 2nd exponent accordingly.  */ 
++      /* Normalize the low double.  Shift the mantissa left until
++	 the hidden bit is '1' and adjust the exponent accordingly.  */
+ 
+       if (sizeof (lo) == sizeof (long))
+ 	lzcount = __builtin_clzl (lo);
+@@ -91,34 +132,30 @@
+ 	lzcount = __builtin_clzl ((long) (lo >> 32));
+       else
+ 	lzcount = __builtin_clzl ((long) lo) + 32;
+-      lzcount = lzcount - 11;
+-      if (lzcount > 0)
++      lzcount = lzcount - (64 - 53);
++      lo <<= lzcount;
++      expnt2 -= lzcount;
++
++      if (expnt2 >= 1)
++	/* Not denormal.  */
++	u.d[1].ieee.exponent = expnt2;
++      else
+ 	{
+-	  int expnt2 = u.d[1].ieee.exponent - lzcount;
+-	  if (expnt2 >= 1)
+-	    {
+-	      /* Not denormal.  Normalize and set low exponent.  */
+-	      lo = lo << lzcount;
+-	      u.d[1].ieee.exponent = expnt2;
+-	    }
++	  /* Is denormal.  Note that biased exponent of 0 is treated
++	     as if it was 1, hence the extra shift.  */
++	  if (expnt2 > -53)
++	    lo >>= 1 - expnt2;
+ 	  else
+-	    {
+-	      /* Is denormal.  */
+-	      lo = lo << (lzcount + expnt2);
+-	      u.d[1].ieee.exponent = 0;
+-	    }
++	    lo = 0;
+ 	}
+     }
+   else
+-    {
+-      u.d[1].ieee.negative = 0;
+-      u.d[1].ieee.exponent = 0;
+-    }
++    u.d[1].ieee.negative = 0;
+ 
+-  u.d[1].ieee.mantissa1 = lo & ((1ULL << 32) - 1);
+-  u.d[1].ieee.mantissa0 = (lo >> 32) & ((1ULL << 20) - 1);
+-  u.d[0].ieee.mantissa1 = hi & ((1ULL << 32) - 1);
+-  u.d[0].ieee.mantissa0 = (hi >> 32) & ((1ULL << 20) - 1);
++  u.d[1].ieee.mantissa1 = lo;
++  u.d[1].ieee.mantissa0 = lo >> 32;
++  u.d[0].ieee.mantissa1 = hi;
++  u.d[0].ieee.mantissa0 = hi >> 32;
+   return u.ld;
+ }
+   
+@@ -133,6 +170,10 @@
+   return u.ld;
+ }
+ 
++/* To suit our callers we return *hi64 and *lo64 as if they came from
++   an ieee854 112 bit mantissa, that is, 48 bits in *hi64 (plus one
++   implicit bit) and 64 bits in *lo64.  */
++
+ static inline void
+ default_ldbl_unpack (long double l, double *a, double *aa)
+ {
+@@ -162,13 +203,13 @@
+   *aa = xl;
+ }
+ 
+-/* Simple inline nearbyint (double) function .
++/* Simple inline nearbyint (double) function.
+    Only works in the default rounding mode
+    but is useful in long double rounding functions.  */
+ static inline double
+ ldbl_nearbyint (double a)
+ {
+-  double two52 = 0x10000000000000LL;
++  double two52 = 0x1p52;
+ 
+   if (__builtin_expect ((__builtin_fabs (a) < two52), 1))
+     {
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c	2014-05-27 19:13:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/mpn2ldbl.c	2014-05-27 19:14:45.000000000 -0500
+@@ -70,9 +70,9 @@
+       else
+ 	lzcount = __builtin_clzl ((long) val) + 32;
+       if (hi)
+-	lzcount = lzcount - 11;
++	lzcount = lzcount - (64 - 53);
+       else
+-	lzcount = lzcount + 42;
++	lzcount = lzcount + 53 - (64 - 53);
+ 
+       if (lzcount > u.d[0].ieee.exponent)
+ 	{
+@@ -98,29 +98,27 @@
+ 	}
+     }
+ 
+-  if (lo != 0L)
++  if (lo != 0)
+     {
+-      /* hidden2 bit of low double controls rounding of the high double.
+-	 If hidden2 is '1' and either the explicit mantissa is non-zero
++      /* hidden bit of low double controls rounding of the high double.
++	 If hidden is '1' and either the explicit mantissa is non-zero
+ 	 or hi is odd, then round up hi and adjust lo (2nd mantissa)
+ 	 plus change the sign of the low double to compensate.  */
+       if ((lo & (1LL << 52)) != 0
+-	  && ((hi & 1) != 0 || (lo & ((1LL << 52) - 1))))
++	  && ((hi & 1) != 0 || (lo & ((1LL << 52) - 1)) != 0))
+ 	{
+ 	  hi++;
+-	  if ((hi & ((1LL << 52) - 1)) == 0)
++	  if ((hi & (1LL << 53)) != 0)
+ 	    {
+-	      if ((hi & (1LL << 53)) != 0)
+-		hi -= 1LL << 52;
++	      hi >>= 1;
+ 	      u.d[0].ieee.exponent++;
+ 	    }
+ 	  u.d[1].ieee.negative = !sign;
+ 	  lo = (1LL << 53) - lo;
+ 	}
+ 
+-      /* The hidden bit of the lo mantissa is zero so we need to normalize
+-	 it for the low double.  Shift it left until the hidden bit is '1'
+-	 then adjust the 2nd exponent accordingly.  */
++      /* Normalize the low double.  Shift the mantissa left until
++	 the hidden bit is '1' and adjust the exponent accordingly.  */
+ 
+       if (sizeof (lo) == sizeof (long))
+ 	lzcount = __builtin_clzl (lo);
+@@ -128,24 +126,24 @@
+ 	lzcount = __builtin_clzl ((long) (lo >> 32));
+       else
+ 	lzcount = __builtin_clzl ((long) lo) + 32;
+-      lzcount = lzcount - 11;
+-      if (lzcount > 0)
+-	{
+-	  lo = lo << lzcount;
+-	  exponent2 = exponent2 - lzcount;
+-	}
++      lzcount = lzcount - (64 - 53);
++      lo <<= lzcount;
++      exponent2 -= lzcount;
++
+       if (exponent2 > 0)
+ 	u.d[1].ieee.exponent = exponent2;
+-      else
++      else if (exponent2 > -53)
+ 	lo >>= 1 - exponent2;
++      else
++	lo = 0;
+     }
+   else
+     u.d[1].ieee.negative = 0;
+ 
+-  u.d[1].ieee.mantissa1 = lo & 0xffffffffLL;
+-  u.d[1].ieee.mantissa0 = (lo >> 32) & 0xfffff;
+-  u.d[0].ieee.mantissa1 = hi & 0xffffffffLL;
+-  u.d[0].ieee.mantissa0 = (hi >> 32) & ((1LL << (LDBL_MANT_DIG - 86)) - 1);
++  u.d[1].ieee.mantissa1 = lo;
++  u.d[1].ieee.mantissa0 = lo >> 32;
++  u.d[0].ieee.mantissa1 = hi;
++  u.d[0].ieee.mantissa0 = hi >> 32;
+ 
+   return u.ld;
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c	2014-05-27 19:13:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c	2014-05-27 19:14:45.000000000 -0500
+@@ -43,15 +43,15 @@
+ 	lo <<= 1;							      \
+       /* The lower double is normalized separately from the upper.  We	      \
+ 	 may need to adjust the lower manitissa to reflect this.  */	      \
+-      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent;		      \
+-      if (ediff > 53 + 63)						      \
++      ediff = u.d[0].ieee.exponent - u.d[1].ieee.exponent - 53;		      \
++      if (ediff > 63)							      \
+ 	lo = 0;								      \
+-      else if (ediff > 53)						      \
+-	lo = lo >> (ediff - 53);					      \
+-      else if (u.d[1].ieee.exponent == 0 && ediff < 53)			      \
+-	lo = lo << (53 - ediff);					      \
++      else if (ediff > 0)						      \
++	lo = lo >> ediff;						      \
++      else if (ediff < 0)						      \
++	lo = lo << -ediff;						      \
+       if (u.d[0].ieee.negative != u.d[1].ieee.negative			      \
+-	  && (u.d[1].ieee.exponent != 0 || lo != 0L))			      \
++	  && lo != 0)							      \
+ 	{								      \
+ 	  lo = (1ULL << 60) - lo;					      \
+ 	  if (hi == 0L)							      \
diff --git a/SOURCES/glibc-ppc64le-06.patch b/SOURCES/glibc-ppc64le-06.patch
new file mode 100644
index 0000000..fe7cf61
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-06.patch
@@ -0,0 +1,652 @@
+# commit 1b6adf888de14675bc3207578dcb7132ed5f8ecc
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:21:58 2013 +0930
+# 
+#     PowerPC floating point little-endian [1 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00081.html
+#     
+#     This is the first of a series of patches to ban ieee854_long_double
+#     and the ieee854_long_double macros when using IBM long double.  union
+#     ieee854_long_double just isn't correct for IBM long double, especially
+#     when little-endian, and pretending it is OK has allowed a number of
+#     bugs to remain undetected in sysdeps/ieee754/ldbl-128ibm/.
+#     
+#     This changes the few places in generic code that use it.
+#     
+#         * stdio-common/printf_size.c (__printf_size): Don't use
+#         union ieee854_long_double in fpnum union.
+#         * stdio-common/printf_fphex.c (__printf_fphex): Likewise.  Use
+#         signbit macro to retrieve sign from long double.
+#         * stdio-common/printf_fp.c (___printf_fp): Use signbit macro to
+#         retrieve sign from long double.
+#         * sysdeps/ieee754/ldbl-128ibm/printf_fphex.c: Adjust for fpnum change.
+#         * sysdeps/ieee754/ldbl-128/printf_fphex.c: Likewise.
+#         * sysdeps/ieee754/ldbl-96/printf_fphex.c: Likewise.
+#         * sysdeps/x86_64/fpu/printf_fphex.c: Likewise.
+#         * math/test-misc.c (main): Don't use union ieee854_long_double.
+#     ports/
+#         * sysdeps/ia64/fpu/printf_fphex.c: Adjust for fpnum change.
+# 
+diff -urN glibc-2.17-c758a686/math/test-misc.c glibc-2.17-c758a686/math/test-misc.c
+--- glibc-2.17-c758a686/math/test-misc.c	2014-05-27 19:53:22.000000000 -0500
++++ glibc-2.17-c758a686/math/test-misc.c	2014-05-27 19:53:45.000000000 -0500
+@@ -721,300 +721,161 @@
+ 
+ #ifndef NO_LONG_DOUBLE
+   {
+-    union ieee854_long_double v1;
+-    union ieee854_long_double v2;
+-    long double ld;
++    long double v1, v2;
+ 
+-    v1.d = ld = LDBL_MIN;
+-    if (fpclassify (ld) != FP_NORMAL)
++    v1 = LDBL_MIN;
++    if (fpclassify (v1) != FP_NORMAL)
+       {
+-	printf ("fpclassify (LDBL_MIN) failed: %d\n", fpclassify (ld));
++	printf ("fpclassify (LDBL_MIN) failed: %d (%La)\n",
++		fpclassify (v1), v1);
+ 	result = 1;
+       }
+-    ld = nextafterl (ld, LDBL_MIN / 2.0);
+-    if (fpclassify (ld) != FP_SUBNORMAL)
++    v2 = nextafterl (v1, LDBL_MIN / 2.0);
++    if (fpclassify (v2) != FP_SUBNORMAL)
+       {
+ 	printf ("fpclassify (LDBL_MIN-epsilon) failed: %d (%La)\n",
+-		fpclassify (ld), ld);
++		fpclassify (v2), v2);
+ 	result = 1;
+       }
+-    v2.d = ld = nextafterl (ld, LDBL_MIN);
+-    if (fpclassify (ld) != FP_NORMAL)
++    v2 = nextafterl (v2, LDBL_MIN);
++    if (fpclassify (v2) != FP_NORMAL)
+       {
+ 	printf ("fpclassify (LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
+-		fpclassify (ld), ld);
++		fpclassify (v2), v2);
+ 	result = 1;
+       }
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
++    if (v1 != v2)
+       {
+-	printf ("LDBL_MIN: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("LDBL_MIN: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
+-      {
+-	printf ("LDBL_MIN: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
+-	result = 1;
+-      }
+-    if (v1.ieee.negative != v2.ieee.negative)
+-      {
+-	printf ("LDBL_MIN: negative differs: %d vs %d\n",
+-		v1.ieee.negative, v2.ieee.negative);
++	printf ("LDBL_MIN-epsilon+epsilon != LDBL_MIN: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = -LDBL_MIN;
+-    if (fpclassify (ld) != FP_NORMAL)
++    v1 = -LDBL_MIN;
++    if (fpclassify (v1) != FP_NORMAL)
+       {
+-	printf ("fpclassify (-LDBL_MIN) failed: %d\n", fpclassify (ld));
++	printf ("fpclassify (-LDBL_MIN) failed: %d (%La)\n",
++		fpclassify (v1), v1);
+ 	result = 1;
+       }
+-    ld = nextafterl (ld, -LDBL_MIN / 2.0);
+-    if (fpclassify (ld) != FP_SUBNORMAL)
++    v2 = nextafterl (v1, -LDBL_MIN / 2.0);
++    if (fpclassify (v2) != FP_SUBNORMAL)
+       {
+ 	printf ("fpclassify (-LDBL_MIN-epsilon) failed: %d (%La)\n",
+-		fpclassify (ld), ld);
++		fpclassify (v2), v2);
+ 	result = 1;
+       }
+-    v2.d = ld = nextafterl (ld, -LDBL_MIN);
+-    if (fpclassify (ld) != FP_NORMAL)
++    v2 = nextafterl (v2, -LDBL_MIN);
++    if (fpclassify (v2) != FP_NORMAL)
+       {
+ 	printf ("fpclassify (-LDBL_MIN-epsilon+epsilon) failed: %d (%La)\n",
+-		fpclassify (ld), ld);
++		fpclassify (v2), v2);
+ 	result = 1;
+       }
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
++    if (v1 != v2)
+       {
+-	printf ("-LDBL_MIN: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("-LDBL_MIN: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
+-      {
+-	printf ("-LDBL_MIN: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
+-	result = 1;
+-      }
+-    if (v1.ieee.negative != v2.ieee.negative)
+-      {
+-	printf ("-LDBL_MIN: negative differs: %d vs %d\n",
+-		v1.ieee.negative, v2.ieee.negative);
++	printf ("-LDBL_MIN-epsilon+epsilon != -LDBL_MIN: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+ 
+-    ld = LDBL_MAX;
+-    if (fpclassify (ld) != FP_NORMAL)
++    v1 = LDBL_MAX;
++    if (fpclassify (v1) != FP_NORMAL)
+       {
+-	printf ("fpclassify (LDBL_MAX) failed: %d\n", fpclassify (ld));
++	printf ("fpclassify (LDBL_MAX) failed: %d (%La)\n",
++		fpclassify (v1), v1);
+ 	result = 1;
+       }
+-    ld = nextafterl (ld, INFINITY);
+-    if (fpclassify (ld) != FP_INFINITE)
++    v2 = nextafterl (v1, INFINITY);
++    if (fpclassify (v2) != FP_INFINITE)
+       {
+-	printf ("fpclassify (LDBL_MAX+epsilon) failed: %d\n", fpclassify (ld));
++	printf ("fpclassify (LDBL_MAX+epsilon) failed: %d (%La)\n",
++		fpclassify (v2), v2);
+ 	result = 1;
+       }
+ 
+-    ld = -LDBL_MAX;
+-    if (fpclassify (ld) != FP_NORMAL)
++    v1 = -LDBL_MAX;
++    if (fpclassify (v1) != FP_NORMAL)
+       {
+-	printf ("fpclassify (-LDBL_MAX) failed: %d\n", fpclassify (ld));
++	printf ("fpclassify (-LDBL_MAX) failed: %d (%La)\n",
++		fpclassify (v1), v1);
+ 	result = 1;
+       }
+-    ld = nextafterl (ld, -INFINITY);
+-    if (fpclassify (ld) != FP_INFINITE)
++    v2 = nextafterl (v1, -INFINITY);
++    if (fpclassify (v2) != FP_INFINITE)
+       {
+-	printf ("fpclassify (-LDBL_MAX-epsilon) failed: %d\n",
+-		fpclassify (ld));
++	printf ("fpclassify (-LDBL_MAX-epsilon) failed: %d (%La)\n",
++		fpclassify (v2), v2);
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = 0.0625;
+-    ld = nextafterl (ld, 0.0);
+-    v2.d = ld = nextafterl (ld, 1.0);
++    v1 = 0.0625;
++    v2 = nextafterl (v1, 0.0);
++    v2 = nextafterl (v2, 1.0);
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+-      {
+-	printf ("0.0625L down: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("0.0625L down: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
+-      {
+-	printf ("0.0625L down: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
+-	result = 1;
+-      }
+-    if (v1.ieee.negative != v2.ieee.negative)
++    if (v1 != v2)
+       {
+-	printf ("0.0625L down: negative differs: %d vs %d\n",
+-		v1.ieee.negative, v2.ieee.negative);
++	printf ("0.0625L-epsilon+epsilon != 0.0625L: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = 0.0625;
+-    ld = nextafterl (ld, 1.0);
+-    v2.d = ld = nextafterl (ld, 0.0);
++    v1 = 0.0625;
++    v2 = nextafterl (v1, 1.0);
++    v2 = nextafterl (v2, 0.0);
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+-      {
+-	printf ("0.0625L up: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("0.0625L up: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
++    if (v1 != v2)
+       {
+-	printf ("0.0625L up: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
+-	result = 1;
+-      }
+-    if (v1.ieee.negative != v2.ieee.negative)
+-      {
+-	printf ("0.0625L up: negative differs: %d vs %d\n",
+-		v1.ieee.negative, v2.ieee.negative);
++	printf ("0.0625L+epsilon-epsilon != 0.0625L: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = -0.0625;
+-    ld = nextafterl (ld, 0.0);
+-    v2.d = ld = nextafterl (ld, -1.0);
++    v1 = -0.0625;
++    v2 = nextafterl (v1, 0.0);
++    v2 = nextafterl (v2, -1.0);
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+-      {
+-	printf ("-0.0625L up: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("-0.0625L up: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
++    if (v1 != v2)
+       {
+-	printf ("-0.0625L up: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
+-	result = 1;
+-      }
+-    if (v1.ieee.negative != v2.ieee.negative)
+-      {
+-	printf ("-0.0625L up: negative differs: %d vs %d\n",
+-		v1.ieee.negative, v2.ieee.negative);
++	printf ("-0.0625L+epsilon-epsilon != -0.0625L: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = -0.0625;
+-    ld = nextafterl (ld, -1.0);
+-    v2.d = ld = nextafterl (ld, 0.0);
++    v1 = -0.0625;
++    v2 = nextafterl (v1, -1.0);
++    v2 = nextafterl (v2, 0.0);
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+-      {
+-	printf ("-0.0625L down: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
++    if (v1 != v2)
+       {
+-	printf ("-0.0625L down: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
+-      {
+-	printf ("-0.0625L down: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
+-	result = 1;
+-      }
+-    if (v1.ieee.negative != v2.ieee.negative)
+-      {
+-	printf ("-0.0625L down: negative differs: %d vs %d\n",
+-		v1.ieee.negative, v2.ieee.negative);
++	printf ("-0.0625L-epsilon+epsilon != -0.0625L: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = 0.0;
+-    ld = nextafterl (ld, 1.0);
+-    v2.d = nextafterl (ld, -1.0);
++    v1 = 0.0;
++    v2 = nextafterl (v1, 1.0);
++    v2 = nextafterl (v2, -1.0);
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+-      {
+-	printf ("0.0L up: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("0.0L up: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
++    if (v1 != v2)
+       {
+-	printf ("0.0L up: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
++	printf ("0.0+epsilon-epsilon != 0.0L: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+-    if (0 != v2.ieee.negative)
++    if (signbit (v2))
+       {
+-	printf ("0.0L up: negative differs: 0 vs %d\n",
+-		v2.ieee.negative);
++	printf ("0.0+epsilon-epsilon is negative\n");
+ 	result = 1;
+       }
+ 
+-    v1.d = ld = 0.0;
+-    ld = nextafterl (ld, -1.0);
+-    v2.d = nextafterl (ld, 1.0);
++    v1 = 0.0;
++    v2 = nextafterl (v1, -1.0);
++    v2 = nextafterl (v2, 1.0);
+ 
+-    if (v1.ieee.mantissa0 != v2.ieee.mantissa0)
+-      {
+-	printf ("0.0L down: mantissa0 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa0, v2.ieee.mantissa0);
+-	result = 1;
+-      }
+-    if (v1.ieee.mantissa1 != v2.ieee.mantissa1)
+-      {
+-	printf ("0.0L down: mantissa1 differs: %8x vs %8x\n",
+-		v1.ieee.mantissa1, v2.ieee.mantissa1);
+-	result = 1;
+-      }
+-    if (v1.ieee.exponent != v2.ieee.exponent)
++    if (v1 != v2)
+       {
+-	printf ("0.0L down: exponent differs: %4x vs %4x\n",
+-		v1.ieee.exponent, v2.ieee.exponent);
++	printf ("0.0-epsilon+epsilon != 0.0L: %La vs %La\n", v2, v1);
+ 	result = 1;
+       }
+-    if (1 != v2.ieee.negative)
++    if (!signbit (v2))
+       {
+-	printf ("0.0L down: negative differs: 1 vs %d\n",
+-		v2.ieee.negative);
++	printf ("0.0-epsilon+epsilon is positive\n");
+ 	result = 1;
+       }
+ 
+diff -urN glibc-2.17-c758a686/ports/sysdeps/ia64/fpu/printf_fphex.c glibc-2.17-c758a686/ports/sysdeps/ia64/fpu/printf_fphex.c
+--- glibc-2.17-c758a686/ports/sysdeps/ia64/fpu/printf_fphex.c	2014-05-27 19:53:21.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/ia64/fpu/printf_fphex.c	2014-05-27 19:53:45.000000000 -0500
+@@ -25,9 +25,11 @@
+       /* The "strange" 80 bit format on ia64 has an explicit		      \
+ 	 leading digit in the 64 bit mantissa.  */			      \
+       unsigned long long int num;					      \
++      union ieee854_long_double u;					      \
++      u.d = fpnum.ldbl;							      \
+ 									      \
+-      num = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32	      \
+-	     | fpnum.ldbl.ieee.mantissa1);				      \
++      num = (((unsigned long long int) u.ieee.mantissa0) << 32		      \
++	     | u.ieee.mantissa1);					      \
+ 									      \
+       zero_mantissa = num == 0;						      \
+ 									      \
+@@ -49,8 +51,8 @@
+ 									      \
+       /* We have 3 bits from the mantissa in the leading nibble.	      \
+ 	 Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'.  */      \
+-      exponent = fpnum.ldbl.ieee.exponent;				      \
+-									     \
++      exponent = u.ieee.exponent;					      \
++									      \
+       if (exponent == 0)						      \
+ 	{								      \
+ 	  if (zero_mantissa)						      \
+diff -urN glibc-2.17-c758a686/stdio-common/printf_fp.c glibc-2.17-c758a686/stdio-common/printf_fp.c
+--- glibc-2.17-c758a686/stdio-common/printf_fp.c	2014-05-27 19:53:22.000000000 -0500
++++ glibc-2.17-c758a686/stdio-common/printf_fp.c	2014-05-27 19:53:45.000000000 -0500
+@@ -335,8 +335,7 @@
+       int res;
+       if (__isnanl (fpnum.ldbl))
+ 	{
+-	  union ieee854_long_double u = { .d = fpnum.ldbl };
+-	  is_neg = u.ieee.negative != 0;
++	  is_neg = signbit (fpnum.ldbl);
+ 	  if (isupper (info->spec))
+ 	    {
+ 	      special = "NAN";
+diff -urN glibc-2.17-c758a686/stdio-common/printf_fphex.c glibc-2.17-c758a686/stdio-common/printf_fphex.c
+--- glibc-2.17-c758a686/stdio-common/printf_fphex.c	2014-05-27 19:53:22.000000000 -0500
++++ glibc-2.17-c758a686/stdio-common/printf_fphex.c	2014-05-27 19:53:45.000000000 -0500
+@@ -93,7 +93,7 @@
+   union
+     {
+       union ieee754_double dbl;
+-      union ieee854_long_double ldbl;
++      long double ldbl;
+     }
+   fpnum;
+ 
+@@ -162,12 +162,11 @@
+ #ifndef __NO_LONG_DOUBLE_MATH
+   if (info->is_long_double && sizeof (long double) > sizeof (double))
+     {
+-      fpnum.ldbl.d = *(const long double *) args[0];
++      fpnum.ldbl = *(const long double *) args[0];
+ 
+       /* Check for special values: not a number or infinity.  */
+-      if (__isnanl (fpnum.ldbl.d))
++      if (__isnanl (fpnum.ldbl))
+ 	{
+-	  negative = fpnum.ldbl.ieee.negative != 0;
+ 	  if (isupper (info->spec))
+ 	    {
+ 	      special = "NAN";
+@@ -181,8 +180,7 @@
+ 	}
+       else
+ 	{
+-	  int res = __isinfl (fpnum.ldbl.d);
+-	  if (res)
++	  if (__isinfl (fpnum.ldbl))
+ 	    {
+ 	      if (isupper (info->spec))
+ 		{
+@@ -194,11 +192,9 @@
+ 		  special = "inf";
+ 		  wspecial = L"inf";
+ 		}
+-	      negative = res < 0;
+ 	    }
+-	  else
+-	    negative = signbit (fpnum.ldbl.d);
+ 	}
++      negative = signbit (fpnum.ldbl);
+     }
+   else
+ #endif	/* no long double */
+diff -urN glibc-2.17-c758a686/stdio-common/printf_size.c glibc-2.17-c758a686/stdio-common/printf_size.c
+--- glibc-2.17-c758a686/stdio-common/printf_size.c	2014-05-27 19:53:22.000000000 -0500
++++ glibc-2.17-c758a686/stdio-common/printf_size.c	2014-05-27 19:53:45.000000000 -0500
+@@ -103,7 +103,7 @@
+   union
+     {
+       union ieee754_double dbl;
+-      union ieee854_long_double ldbl;
++      long double ldbl;
+     }
+   fpnum;
+   const void *ptr = &fpnum;
+@@ -123,25 +123,25 @@
+ #ifndef __NO_LONG_DOUBLE_MATH
+   if (info->is_long_double && sizeof (long double) > sizeof (double))
+     {
+-      fpnum.ldbl.d = *(const long double *) args[0];
++      fpnum.ldbl = *(const long double *) args[0];
+ 
+       /* Check for special values: not a number or infinity.  */
+-      if (__isnanl (fpnum.ldbl.d))
++      if (__isnanl (fpnum.ldbl))
+ 	{
+ 	  special = "nan";
+ 	  wspecial = L"nan";
+ 	  // fpnum_sign = 0;	Already zero
+ 	}
+-      else if ((res = __isinfl (fpnum.ldbl.d)))
++      else if ((res = __isinfl (fpnum.ldbl)))
+ 	{
+ 	  fpnum_sign = res;
+ 	  special = "inf";
+ 	  wspecial = L"inf";
+ 	}
+       else
+-	while (fpnum.ldbl.d >= divisor && tag[1] != '\0')
++	while (fpnum.ldbl >= divisor && tag[1] != '\0')
+ 	  {
+-	    fpnum.ldbl.d /= divisor;
++	    fpnum.ldbl /= divisor;
+ 	    ++tag;
+ 	  }
+     }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128/printf_fphex.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128/printf_fphex.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128/printf_fphex.c	2014-05-27 19:53:20.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128/printf_fphex.c	2014-05-27 19:53:45.000000000 -0500
+@@ -24,13 +24,15 @@
+ 	 digits we use only the implicit digits for the number before	      \
+ 	 the decimal point.  */						      \
+       unsigned long long int num0, num1;				      \
++      union ieee854_long_double u;					      \
++      u.d = fpnum.ldbl;							      \
+ 									      \
+       assert (sizeof (long double) == 16);				      \
+ 									      \
+-      num0 = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32      \
+-	     | fpnum.ldbl.ieee.mantissa1);				      \
+-      num1 = (((unsigned long long int) fpnum.ldbl.ieee.mantissa2) << 32      \
+-	     | fpnum.ldbl.ieee.mantissa3);				      \
++      num0 = (((unsigned long long int) u.ieee.mantissa0) << 32		      \
++	     | u.ieee.mantissa1);					      \
++      num1 = (((unsigned long long int) u.ieee.mantissa2) << 32		      \
++	     | u.ieee.mantissa3);					      \
+ 									      \
+       zero_mantissa = (num0|num1) == 0;					      \
+ 									      \
+@@ -75,9 +77,9 @@
+ 	  *--wnumstr = L'0';						      \
+ 	}								      \
+ 									      \
+-      leading = fpnum.ldbl.ieee.exponent == 0 ? '0' : '1';		      \
++      leading = u.ieee.exponent == 0 ? '0' : '1';			      \
+ 									      \
+-      exponent = fpnum.ldbl.ieee.exponent;				      \
++      exponent = u.ieee.exponent;					      \
+ 									      \
+       if (exponent == 0)						      \
+ 	{								      \
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c	2014-05-27 19:53:20.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/printf_fphex.c	2014-05-27 19:53:45.000000000 -0500
+@@ -28,14 +28,14 @@
+       unsigned long long hi, lo;					      \
+       int ediff;							      \
+       union ibm_extended_long_double u;					      \
+-      u.ld = fpnum.ldbl.d;						      \
++      u.ld = fpnum.ldbl;						      \
+ 									      \
+       assert (sizeof (long double) == 16);				      \
+ 									      \
+       lo = ((long long)u.d[1].ieee.mantissa0 << 32) | u.d[1].ieee.mantissa1;  \
+       hi = ((long long)u.d[0].ieee.mantissa0 << 32) | u.d[0].ieee.mantissa1;  \
+       lo <<= 7; /* pre-shift lo to match ieee854.  */			      \
+-      /* If the lower double is not a denomal or zero then set the hidden     \
++      /* If the lower double is not a denormal or zero then set the hidden    \
+ 	 53rd bit.  */							      \
+       if (u.d[1].ieee.exponent != 0)					      \
+ 	lo |= (1ULL << (52 + 7));					      \
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-96/printf_fphex.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-96/printf_fphex.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-96/printf_fphex.c	2014-05-27 19:53:20.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-96/printf_fphex.c	2014-05-27 19:53:45.000000000 -0500
+@@ -25,11 +25,13 @@
+       /* The "strange" 80 bit format on ix86 and m68k has an explicit	      \
+ 	 leading digit in the 64 bit mantissa.  */			      \
+       unsigned long long int num;					      \
++      union ieee854_long_double u;					      \
++      u.d = fpnum.ldbl;							      \
+ 									      \
+       assert (sizeof (long double) == 12);				      \
+ 									      \
+-      num = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32	      \
+-	     | fpnum.ldbl.ieee.mantissa1);				      \
++      num = (((unsigned long long int) u.ieee.mantissa0) << 32		      \
++	     | u.ieee.mantissa1);					      \
+ 									      \
+       zero_mantissa = num == 0;						      \
+ 									      \
+@@ -62,7 +64,7 @@
+ 									      \
+       /* We have 3 bits from the mantissa in the leading nibble.	      \
+ 	 Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'.  */      \
+-      exponent = fpnum.ldbl.ieee.exponent;				      \
++      exponent = u.ieee.exponent;					      \
+ 									      \
+       if (exponent == 0)						      \
+ 	{								      \
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/fpu/printf_fphex.c glibc-2.17-c758a686/sysdeps/x86_64/fpu/printf_fphex.c
+--- glibc-2.17-c758a686/sysdeps/x86_64/fpu/printf_fphex.c	2014-05-27 19:53:20.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/fpu/printf_fphex.c	2014-05-27 19:53:45.000000000 -0500
+@@ -25,10 +25,11 @@
+       /* The "strange" 80 bit format on ix86 and m68k has an explicit	      \
+ 	 leading digit in the 64 bit mantissa.  */			      \
+       unsigned long long int num;					      \
++      union ieee854_long_double u;					      \
++      u.d = fpnum.ldbl;							      \
+ 									      \
+-									      \
+-      num = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32	      \
+-	     | fpnum.ldbl.ieee.mantissa1);				      \
++      num = (((unsigned long long int) u.ieee.mantissa0) << 32		      \
++	     | u.ieee.mantissa1);					      \
+ 									      \
+       zero_mantissa = num == 0;						      \
+ 									      \
+@@ -61,7 +62,7 @@
+ 									      \
+       /* We have 3 bits from the mantissa in the leading nibble.	      \
+ 	 Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'.  */      \
+-      exponent = fpnum.ldbl.ieee.exponent;				      \
++      exponent = u.ieee.exponent;					      \
+ 									      \
+       if (exponent == 0)						      \
+ 	{								      \
diff --git a/SOURCES/glibc-ppc64le-07.patch b/SOURCES/glibc-ppc64le-07.patch
new file mode 100644
index 0000000..120576e
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-07.patch
@@ -0,0 +1,651 @@
+# commit 4ebd120cd983c8d2ac7a234884b3ac6805d82973
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:24:05 2013 +0930
+# 
+#     PowerPC floating point little-endian [2 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00082.html
+#     
+#     This patch replaces occurrences of GET_LDOUBLE_* and SET_LDOUBLE_*
+#     macros, and union ieee854_long_double_shape_type in ldbl-128ibm/,
+#     and a stray one in the 32-bit fpu support.  These files have no
+#     significant changes apart from rewriting the long double bit access.
+#     
+#         * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h (ldbl_high): Define.
+#         * sysdeps/ieee754/ldbl-128ibm/e_acoshl.c (__ieee754_acoshl): Rewrite
+#         all uses of ieee854 long double macros and unions.
+#         * sysdeps/ieee754/ldbl-128ibm/e_acosl.c (__ieee754_acosl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_asinl.c (__ieee754_asinl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_atanhl.c (__ieee754_atanhl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_coshl.c (__ieee754_coshl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_log2l.c (__ieee754_log2l): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c (__ieee754_rem_pio2l):
+#         Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_sinhl.c (__ieee754_sinhl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/k_cosl.c (__kernel_cosl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/k_sincosl.c (__kernel_sincosl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/k_sinl.c (__kernel_sinl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_asinhl.c (__asinhl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_atanl.c (__atanl): Likewise.
+#         Simplify sign and nan test too.
+#         * sysdeps/ieee754/ldbl-128ibm/s_cosl.c (__cosl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_fabsl.c (__fabsl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_finitel.c (___finitel): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c (___fpclassifyl):
+#         Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_isnanl.c (___isnanl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_issignalingl.c (__issignalingl):
+#         Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_logbl.c (__logbl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_signbitl.c (___signbitl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_sincosl.c (__sincosl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_sinl.c (__sinl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_tanl.c (__tanl): Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c (__logbl): Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acoshl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -36,8 +36,12 @@
+ {
+ 	long double t;
+ 	int64_t hx;
+-	u_int64_t lx;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	uint64_t lx;
++	double xhi, xlo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
+ 	if(hx<0x3ff0000000000000LL) {		/* x < 1 */
+ 	    return (x-x)/(x-x);
+ 	} else if(hx >=0x41b0000000000000LL) {	/* x > 2**28 */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acosl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acosl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acosl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_acosl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -151,26 +151,25 @@
+ long double
+ __ieee754_acosl (long double x)
+ {
+-  long double z, r, w, p, q, s, t, f2;
+-  ieee854_long_double_shape_type u;
++  long double a, z, r, w, p, q, s, t, f2;
+ 
+-  u.value = __builtin_fabsl (x);
+-  if (u.value == 1.0L)
++  a = __builtin_fabsl (x);
++  if (a == 1.0L)
+     {
+       if (x > 0.0L)
+ 	return 0.0;		/* acos(1) = 0  */
+       else
+ 	return (2.0 * pio2_hi) + (2.0 * pio2_lo);	/* acos(-1)= pi */
+     }
+-  else if (u.value > 1.0L)
++  else if (a > 1.0L)
+     {
+       return (x - x) / (x - x);	/* acos(|x| > 1) is NaN */
+     }
+-  if (u.value < 0.5L)
++  if (a < 0.5L)
+     {
+-      if (u.value < 6.938893903907228e-18L)	/* |x| < 2**-57 */
++      if (a < 6.938893903907228e-18L)	/* |x| < 2**-57 */
+ 	return pio2_hi + pio2_lo;
+-      if (u.value < 0.4375L)
++      if (a < 0.4375L)
+ 	{
+ 	  /* Arcsine of x.  */
+ 	  z = x * x;
+@@ -199,7 +198,7 @@
+ 	  return z;
+ 	}
+       /* .4375 <= |x| < .5 */
+-      t = u.value - 0.4375L;
++      t = a - 0.4375L;
+       p = ((((((((((P10 * t
+ 		    + P9) * t
+ 		   + P8) * t
+@@ -230,9 +229,9 @@
+ 	r = acosr4375 + r;
+       return r;
+     }
+-  else if (u.value < 0.625L)
++  else if (a < 0.625L)
+     {
+-      t = u.value - 0.5625L;
++      t = a - 0.5625L;
+       p = ((((((((((rS10 * t
+ 		    + rS9) * t
+ 		   + rS8) * t
+@@ -264,7 +263,9 @@
+     }
+   else
+     {				/* |x| >= .625 */
+-      z = (one - u.value) * 0.5;
++      double shi, slo;
++
++      z = (one - a) * 0.5;
+       s = __ieee754_sqrtl (z);
+       /* Compute an extended precision square root from
+ 	 the Newton iteration  s -> 0.5 * (s + z / s).
+@@ -273,12 +274,11 @@
+ 	  Express s = f1 + f2 where f1 * f1 is exactly representable.
+ 	  w = (z - s^2)/2s = (z - f1^2 - 2 f1 f2 - f2^2)/2s .
+ 	  s + w has extended precision.  */
+-      u.value = s;
+-      u.parts32.w2 = 0;
+-      u.parts32.w3 = 0;
+-      f2 = s - u.value;
+-      w = z - u.value * u.value;
+-      w = w - 2.0 * u.value * f2;
++      ldbl_unpack (s, &shi, &slo);
++      a = shi;
++      f2 = slo;
++      w = z - a * a;
++      w = w - 2.0 * a * f2;
+       w = w - f2 * f2;
+       w = w / (2.0 * s);
+       /* Arcsine of s.  */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_asinl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_asinl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_asinl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_asinl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -131,19 +131,18 @@
+ long double
+ __ieee754_asinl (long double x)
+ {
+-  long double t, w, p, q, c, r, s;
++  long double a, t, w, p, q, c, r, s;
+   int flag;
+-  ieee854_long_double_shape_type u;
+ 
+   flag = 0;
+-  u.value = __builtin_fabsl (x);
+-  if (u.value == 1.0L)	/* |x|>= 1 */
++  a = __builtin_fabsl (x);
++  if (a == 1.0L)	/* |x|>= 1 */
+     return x * pio2_hi + x * pio2_lo;	/* asin(1)=+-pi/2 with inexact */
+-  else if (u.value >= 1.0L)
++  else if (a >= 1.0L)
+     return (x - x) / (x - x);	/* asin(|x|>1) is NaN */
+-  else if (u.value < 0.5L)
++  else if (a < 0.5L)
+     {
+-      if (u.value < 6.938893903907228e-18L) /* |x| < 2**-57 */
++      if (a < 6.938893903907228e-18L) /* |x| < 2**-57 */
+ 	{
+ 	  if (huge + x > one)
+ 	    return x;		/* return x with inexact if x!=0 */
+@@ -155,9 +154,9 @@
+ 	  flag = 1;
+ 	}
+     }
+-  else if (u.value < 0.625L)
++  else if (a < 0.625L)
+     {
+-      t = u.value - 0.5625;
++      t = a - 0.5625;
+       p = ((((((((((rS10 * t
+ 		    + rS9) * t
+ 		   + rS8) * t
+@@ -190,7 +189,7 @@
+   else
+     {
+       /* 1 > |x| >= 0.625 */
+-      w = one - u.value;
++      w = one - a;
+       t = w * 0.5;
+     }
+ 
+@@ -223,17 +222,14 @@
+     }
+ 
+   s = __ieee754_sqrtl (t);
+-  if (u.value > 0.975L)
++  if (a > 0.975L)
+     {
+       w = p / q;
+       t = pio2_hi - (2.0 * (s + s * w) - pio2_lo);
+     }
+   else
+     {
+-      u.value = s;
+-      u.parts32.w3 = 0;
+-      u.parts32.w2 = 0;
+-      w = u.value;
++      w = ldbl_high (s);
+       c = (t - w * w) / (s + w);
+       r = p / q;
+       p = 2.0 * s * r - (pio2_lo - 2.0 * c);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atanhl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -40,8 +40,10 @@
+ {
+ 	long double t;
+ 	int64_t hx,ix;
+-	u_int64_t lx __attribute__ ((unused));
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	double xhi;
++
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (hx, xhi);
+ 	ix = hx&0x7fffffffffffffffLL;
+ 	if (ix >= 0x3ff0000000000000LL) { /* |x|>=1 */
+ 	    if (ix > 0x3ff0000000000000LL)
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_coshl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_coshl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_coshl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_coshl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -41,9 +41,11 @@
+ {
+ 	long double t,w;
+ 	int64_t ix;
++	double xhi;
+ 
+     /* High word of |x|. */
+-	GET_LDOUBLE_MSW64(ix,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (ix, xhi);
+ 	ix &= 0x7fffffffffffffffLL;
+ 
+     /* x is INF or NaN */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log2l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log2l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log2l.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log2l.c	2014-05-27 19:59:00.000000000 -0500
+@@ -177,11 +177,13 @@
+   long double z;
+   long double y;
+   int e;
+-  int64_t hx, lx;
++  int64_t hx;
++  double xhi;
+ 
+ /* Test for domain */
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
+-  if (((hx & 0x7fffffffffffffffLL) | (lx & 0x7fffffffffffffffLL)) == 0)
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
++  if ((hx & 0x7fffffffffffffffLL) == 0)
+     return (-1.0L / (x - x));
+   if (hx < 0)
+     return (x - x) / (x - x);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_rem_pio2l.c	2014-05-27 19:59:00.000000000 -0500
+@@ -200,10 +200,11 @@
+   double tx[8];
+   int exp;
+   int64_t n, ix, hx, ixd;
+-  u_int64_t lx __attribute__ ((unused));
+   u_int64_t lxd;
++  double xhi;
+ 
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
+   ix = hx & 0x7fffffffffffffffLL;
+   if (ix <= 0x3fe921fb54442d10LL)	/* x in <-pi/4, pi/4> */
+     {
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sinhl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -38,9 +38,11 @@
+ {
+ 	long double t,w,h;
+ 	int64_t ix,jx;
++	double xhi;
+ 
+     /* High word of |x|. */
+-	GET_LDOUBLE_MSW64(jx,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (jx, xhi);
+ 	ix = jx&0x7fffffffffffffffLL;
+ 
+     /* x is INF or NaN */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_cosl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_cosl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_cosl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_cosl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -81,8 +81,11 @@
+ {
+   long double h, l, z, sin_l, cos_l_m1;
+   int64_t ix;
+-  u_int32_t tix, hix, index;
+-  GET_LDOUBLE_MSW64 (ix, x);
++  uint32_t tix, hix, index;
++  double xhi, hhi;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (ix, xhi);
+   tix = ((u_int64_t)ix) >> 32;
+   tix &= ~0x80000000;			/* tix = |x|'s high 32 bits */
+   if (tix < 0x3fc30000)			/* |x| < 0.1484375 */
+@@ -136,7 +139,8 @@
+ 	case 2: index = (hix - 0x3fc30000) >> 14; break;
+ 	}
+ */
+-      SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
++      INSERT_WORDS64 (hhi, ((uint64_t)hix) << 32);
++      h = hhi;
+       l = y - (h - x);
+       z = l * l;
+       sin_l = l*(ONE+z*(SSIN1+z*(SSIN2+z*(SSIN3+z*(SSIN4+z*SSIN5)))));
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sincosl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -100,9 +100,12 @@
+ {
+   long double h, l, z, sin_l, cos_l_m1;
+   int64_t ix;
+-  u_int32_t tix, hix, index;
+-  GET_LDOUBLE_MSW64 (ix, x);
+-  tix = ((u_int64_t)ix) >> 32;
++  uint32_t tix, hix, index;
++  double xhi, hhi;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (ix, xhi);
++  tix = ((uint64_t)ix) >> 32;
+   tix &= ~0x80000000;			/* tix = |x|'s high 32 bits */
+   if (tix < 0x3fc30000)			/* |x| < 0.1484375 */
+     {
+@@ -164,7 +167,8 @@
+ 	case 2: index = (hix - 0x3fc30000) >> 14; break;
+ 	}
+ */
+-      SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
++      INSERT_WORDS64 (hhi, ((uint64_t)hix) << 32);
++      h = hhi;
+       if (iy)
+ 	l = y - (h - x);
+       else
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sinl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sinl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sinl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_sinl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -82,7 +82,10 @@
+   long double h, l, z, sin_l, cos_l_m1;
+   int64_t ix;
+   u_int32_t tix, hix, index;
+-  GET_LDOUBLE_MSW64 (ix, x);
++  double xhi, hhi;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (ix, xhi);
+   tix = ((u_int64_t)ix) >> 32;
+   tix &= ~0x80000000;			/* tix = |x|'s high 32 bits */
+   if (tix < 0x3fc30000)			/* |x| < 0.1484375 */
+@@ -132,7 +135,8 @@
+ 	case 2: index = (hix - 0x3fc30000) >> 14; break;
+ 	}
+ */
+-      SET_LDOUBLE_WORDS64(h, ((u_int64_t)hix) << 32, 0);
++      INSERT_WORDS64 (hhi, ((uint64_t)hix) << 32);
++      h = hhi;
+       if (iy)
+ 	l = (ix < 0 ? -y : y) - (h - x);
+       else
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_asinhl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -38,7 +38,10 @@
+ {
+ 	long double t,w;
+ 	int64_t hx,ix;
+-	GET_LDOUBLE_MSW64(hx,x);
++	double xhi;
++
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (hx, xhi);
+ 	ix = hx&0x7fffffffffffffffLL;
+ 	if(ix>=0x7ff0000000000000LL) return x+x;	/* x is inf or NaN */
+ 	if(ix< 0x3e20000000000000LL) {	/* |x|<2**-29 */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_atanl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_atanl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_atanl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_atanl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -173,23 +173,20 @@
+ long double
+ __atanl (long double x)
+ {
+-  int k, sign;
++  int32_t k, sign, lx;
+   long double t, u, p, q;
+-  ieee854_long_double_shape_type s;
++  double xhi;
+ 
+-  s.value = x;
+-  k = s.parts32.w0;
+-  if (k & 0x80000000)
+-    sign = 1;
+-  else
+-    sign = 0;
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS (k, lx, xhi);
++  sign = k & 0x80000000;
+ 
+   /* Check for IEEE special cases.  */
+   k &= 0x7fffffff;
+   if (k >= 0x7ff00000)
+     {
+       /* NaN. */
+-      if ((k & 0xfffff) | s.parts32.w1 )
++      if (((k - 0x7ff00000) | lx) != 0)
+ 	return (x + x);
+ 
+       /* Infinity. */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_cosl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_cosl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_cosl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_cosl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -53,9 +53,11 @@
+ {
+ 	long double y[2],z=0.0L;
+ 	int64_t n, ix;
++	double xhi;
+ 
+     /* High word of x. */
+-	GET_LDOUBLE_MSW64(ix,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (ix, xhi);
+ 
+     /* |x| ~< pi/4 */
+ 	ix &= 0x7fffffffffffffffLL;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fabsl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -29,10 +29,16 @@
+ long double __fabsl(long double x)
+ {
+ 	u_int64_t hx, lx;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	double xhi, xlo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
+ 	lx = lx ^ ( hx & 0x8000000000000000LL );
+ 	hx = hx & 0x7fffffffffffffffLL;
+-	SET_LDOUBLE_WORDS64(x,hx,lx);
++	INSERT_WORDS64 (xhi, hx);
++	INSERT_WORDS64 (xlo, lx);
++	x = ldbl_pack (xhi, xlo);
+ 	return x;
+ }
+ long_double_symbol (libm, __fabsl, fabsl);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_finitel.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_finitel.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_finitel.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_finitel.c	2014-05-27 19:59:00.000000000 -0500
+@@ -29,10 +29,14 @@
+ int
+ ___finitel (long double x)
+ {
+-	int64_t hx;
+-	GET_LDOUBLE_MSW64(hx,x);
+-	return (int)((u_int64_t)((hx&0x7fffffffffffffffLL)
+-				 -0x7ff0000000000000LL)>>63);
++  uint64_t hx;
++  double xhi;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
++  hx &= 0x7fffffffffffffffLL;
++  hx -= 0x7ff0000000000000LL;
++  return hx >> 63;
+ }
+ hidden_ver (___finitel, __finitel)
+ weak_alias (___finitel, ____finitel)
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_fpclassifyl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -46,8 +46,10 @@
+ {
+   u_int64_t hx, lx;
+   int retval = FP_NORMAL;
++  double xhi, xlo;
+ 
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
++  ldbl_unpack (x, &xhi, &xlo);
++  EXTRACT_WORDS64 (hx, xhi);
+   if ((hx & 0x7ff0000000000000ULL) == 0x7ff0000000000000ULL) {
+       /* +/-NaN or +/-Inf */
+       if (hx & 0x000fffffffffffffULL) {
+@@ -65,6 +67,7 @@
+ 	      retval = FP_NORMAL;
+ 	  } else {
+ 	      if ((hx & 0x7ff0000000000000ULL) == 0x0360000000000000ULL) {
++		  EXTRACT_WORDS64 (lx, xlo);
+ 		  if ((lx & 0x7fffffffffffffff)	/* lower is non-zero */
+ 		  && ((lx^hx) & 0x8000000000000000ULL)) { /* and sign differs */
+ 		      /* +/- denormal */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isnanl.c	2014-05-27 19:59:00.000000000 -0500
+@@ -29,12 +29,14 @@
+ int
+ ___isnanl (long double x)
+ {
+-	int64_t hx;
+-	int64_t lx __attribute__ ((unused));
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
+-	hx &= 0x7fffffffffffffffLL;
+-	hx = 0x7ff0000000000000LL - hx;
+-	return (int)((u_int64_t)hx>>63);
++  uint64_t hx;
++  double xhi;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
++  hx &= 0x7fffffffffffffffLL;
++  hx = 0x7ff0000000000000LL - hx;
++  return (int) (hx >> 63);
+ }
+ hidden_ver (___isnanl, __isnanl)
+ #ifndef IS_IN_libm
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_logbl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_logbl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_logbl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_logbl.c	2014-05-27 19:59:19.000000000 -0500
+@@ -27,9 +27,10 @@
+ __logbl (long double x)
+ {
+   int64_t hx, rhx;
+-  int64_t lx __attribute__ ((unused));
++  double xhi;
+ 
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
+   hx &= 0x7fffffffffffffffLL;	/* high |x| */
+   if (hx == 0)
+     return -1.0 / fabs (x);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_signbitl.c	2014-05-27 19:59:19.000000000 -0500
+@@ -25,8 +25,10 @@
+ ___signbitl (long double x)
+ {
+   int64_t e;
++  double xhi;
+ 
+-  GET_LDOUBLE_MSW64 (e, x);
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (e, xhi);
+   return e < 0;
+ }
+ #ifdef IS_IN_libm
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sincosl.c	2014-05-27 19:59:19.000000000 -0500
+@@ -27,9 +27,11 @@
+ __sincosl (long double x, long double *sinx, long double *cosx)
+ {
+   int64_t ix;
++  double xhi;
+ 
+   /* High word of x. */
+-  GET_LDOUBLE_MSW64 (ix, x);
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (ix, xhi);
+ 
+   /* |x| ~< pi/4 */
+   ix &= 0x7fffffffffffffffLL;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sinl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sinl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sinl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_sinl.c	2014-05-27 19:59:19.000000000 -0500
+@@ -53,9 +53,11 @@
+ {
+ 	long double y[2],z=0.0L;
+ 	int64_t n, ix;
++	double xhi;
+ 
+     /* High word of x. */
+-	GET_LDOUBLE_MSW64(ix,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (ix, xhi);
+ 
+     /* |x| ~< pi/4 */
+ 	ix &= 0x7fffffffffffffffLL;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanl.c	2014-05-27 19:59:19.000000000 -0500
+@@ -53,9 +53,11 @@
+ {
+ 	long double y[2],z=0.0L;
+ 	int64_t n, ix;
++	double xhi;
+ 
+     /* High word of x. */
+-	GET_LDOUBLE_MSW64(ix,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (ix, xhi);
+ 
+     /* |x| ~< pi/4 */
+ 	ix &= 0x7fffffffffffffffLL;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c	2014-05-27 19:58:07.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_logbl.c	2014-05-27 19:59:19.000000000 -0500
+@@ -35,14 +35,14 @@
+ long double
+ __logbl (long double x)
+ {
+-  double xh, xl;
++  double xh;
+   double ret;
+ 
+   if (__builtin_expect (x == 0.0L, 0))
+     /* Raise FE_DIVBYZERO and return -HUGE_VAL[LF].  */
+     return -1.0L / __builtin_fabsl (x);
+ 
+-  ldbl_unpack (x, &xh, &xl);
++  xh = ldbl_high (x);
+   /* ret = x & 0x7ff0000000000000;  */
+   asm (
+     "xxland %x0,%x1,%x2\n"
+@@ -58,9 +58,9 @@
+     {
+       /* POSIX specifies that denormal number is treated as
+          though it were normalized.  */
+-      int64_t lx, hx;
++      int64_t hx;
+ 
+-      GET_LDOUBLE_WORDS64 (hx, lx, x);
++      EXTRACT_WORDS64 (hx, xh);
+       return (long double) (-1023 - (__builtin_clzll (hx) - 12));
+     }
+   /* Test to avoid logb_downward (0.0) == -0.0.  */
diff --git a/SOURCES/glibc-ppc64le-08.patch b/SOURCES/glibc-ppc64le-08.patch
new file mode 100644
index 0000000..5f79844
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-08.patch
@@ -0,0 +1,1235 @@
+# commit 765714cafcad7e6168518c61111f07bd955a9fee
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:24:58 2013 +0930
+# 
+#     PowerPC floating point little-endian [3 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00083.html
+#     
+#     Further replacement of ieee854 macros and unions.  These files also
+#     have some optimisations for comparison against 0.0L, infinity and nan.
+#     Since the ABI specifies that the high double of an IBM long double
+#     pair is the value rounded to double, a high double of 0.0 means the
+#     low double must also be 0.0.  The ABI also says that infinity and
+#     nan are encoded in the high double, with the low double unspecified.
+#     This means that tests for 0.0L, +/-Infinity and +/-NaN need only check
+#     the high double.
+#     
+#         * sysdeps/ieee754/ldbl-128ibm/e_atan2l.c (__ieee754_atan2l): Rewrite
+#         all uses of ieee854 long double macros and unions.  Simplify tests
+#         for long doubles that are fully specified by the high double.
+#         * sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c (__ieee754_gammal_r):
+#         Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c (__ieee754_ilogbl): Likewise.
+#         Remove dead code too.
+#         * sysdeps/ieee754/ldbl-128ibm/e_jnl.c (__ieee754_jnl): Likewise.
+#         (__ieee754_ynl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_log10l.c (__ieee754_log10l): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_logl.c (__ieee754_logl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/e_powl.c (__ieee754_powl): Likewise.
+#         Remove dead code too.
+#         * sysdeps/ieee754/ldbl-128ibm/k_tanl.c (__kernel_tanl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_expm1l.c (__expm1l): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c (__isinf_nsl): Likewise.
+#         Simplify.
+#         * sysdeps/ieee754/ldbl-128ibm/s_isinfl.c (___isinfl): Likewise.
+#         Simplify.
+#         * sysdeps/ieee754/ldbl-128ibm/s_log1pl.c (__log1pl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_modfl.c (__modfl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c (__nextafterl): Likewise.
+#         Comment on variable precision.
+#         * sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c (__nexttoward): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c (__nexttowardf):
+#         Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_remquol.c (__remquol): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c (__scalblnl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c (__scalbnl): Likewise.
+#         * sysdeps/ieee754/ldbl-128ibm/s_tanhl.c (__tanhl): Likewise.
+#         * sysdeps/powerpc/fpu/libm-test-ulps: Adjust tan_towardzero ulps.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_atan2l.c	2014-05-27 23:05:55.000000000 -0500
+@@ -56,11 +56,15 @@
+ {
+ 	long double z;
+ 	int64_t k,m,hx,hy,ix,iy;
+-	u_int64_t lx,ly;
++	uint64_t lx;
++	double xhi, xlo, yhi;
+ 
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
+ 	ix = hx&0x7fffffffffffffffLL;
+-	GET_LDOUBLE_WORDS64(hy,ly,y);
++	yhi = ldbl_high (y);
++	EXTRACT_WORDS64 (hy, yhi);
+ 	iy = hy&0x7fffffffffffffffLL;
+ 	if(((ix)>0x7ff0000000000000LL)||
+ 	   ((iy)>0x7ff0000000000000LL))	/* x or y is NaN */
+@@ -70,7 +74,7 @@
+ 	m = ((hy>>63)&1)|((hx>>62)&2);	/* 2*sign(x)+sign(y) */
+ 
+     /* when y = 0 */
+-	if((iy|(ly&0x7fffffffffffffffLL))==0) {
++	if(iy==0) {
+ 	    switch(m) {
+ 		case 0:
+ 		case 1: return y;	/* atan(+-0,+anything)=+-0 */
+@@ -79,7 +83,7 @@
+ 	    }
+ 	}
+     /* when x = 0 */
+-	if((ix|(lx&0x7fffffffffffffff))==0) return (hy<0)?  -pi_o_2-tiny: pi_o_2+tiny;
++	if(ix==0) return (hy<0)?  -pi_o_2-tiny: pi_o_2+tiny;
+ 
+     /* when x is INF */
+ 	if(ix==0x7ff0000000000000LL) {
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_gammal_r.c	2014-05-27 23:05:55.000000000 -0500
+@@ -29,11 +29,12 @@
+      and the exp function.  But due to the required boundary
+      conditions we must check some values separately.  */
+   int64_t hx;
+-  u_int64_t lx;
++  double xhi;
+ 
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
+ 
+-  if (((hx | lx) & 0x7fffffffffffffffLL) == 0)
++  if ((hx & 0x7fffffffffffffffLL) == 0)
+     {
+       /* Return value for x == 0 is Inf with divide by zero exception.  */
+       *signgamp = 0;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_ilogbl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -31,26 +31,24 @@
+ 
+ int __ieee754_ilogbl(long double x)
+ {
+-	int64_t hx,lx;
++	int64_t hx;
+ 	int ix;
++	double xhi;
+ 
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (hx, xhi);
+ 	hx &= 0x7fffffffffffffffLL;
+ 	if(hx <= 0x0010000000000000LL) {
+-	    if((hx|(lx&0x7fffffffffffffffLL))==0)
++	    if(hx==0)
+ 		return FP_ILOGB0;	/* ilogbl(0) = FP_ILOGB0 */
+ 	    else			/* subnormal x */
+-		if(hx==0) {
+-		    for (ix = -1043; lx>0; lx<<=1) ix -=1;
+-		} else {
+-		    for (ix = -1022, hx<<=11; hx>0; hx<<=1) ix -=1;
+-		}
++		for (ix = -1022, hx<<=11; hx>0; hx<<=1) ix -=1;
+ 	    return ix;
+ 	}
+ 	else if (hx<0x7ff0000000000000LL) return (hx>>52)-0x3ff;
+ 	else if (FP_ILOGBNAN != INT_MAX) {
+ 	    /* ISO C99 requires ilogbl(+-Inf) == INT_MAX.  */
+-	    if (((hx^0x7ff0000000000000LL)|lx) == 0)
++	    if (hx==0x7ff0000000000000LL)
+ 		return INT_MAX;
+ 	}
+ 	return FP_ILOGBNAN;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_jnl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_jnl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_jnl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_jnl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -70,26 +70,25 @@
+ long double
+ __ieee754_jnl (int n, long double x)
+ {
+-  u_int32_t se;
++  uint32_t se, lx;
+   int32_t i, ix, sgn;
+   long double a, b, temp, di;
+   long double z, w;
+-  ieee854_long_double_shape_type u;
++  double xhi;
+ 
+ 
+   /* J(-n,x) = (-1)^n * J(n, x), J(n, -x) = (-1)^n * J(n, x)
+    * Thus, J(-n,x) = J(n,-x)
+    */
+ 
+-  u.value = x;
+-  se = u.parts32.w0;
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS (se, lx, xhi);
+   ix = se & 0x7fffffff;
+ 
+   /* if J(n,NaN) is NaN */
+   if (ix >= 0x7ff00000)
+     {
+-      if ((u.parts32.w0 & 0xfffff) | u.parts32.w1
+-	  | (u.parts32.w2 & 0x7fffffff) | u.parts32.w3)
++      if (((ix - 0x7ff00000) | lx) != 0)
+ 	return x + x;
+     }
+ 
+@@ -298,21 +297,20 @@
+ long double
+ __ieee754_ynl (int n, long double x)
+ {
+-  u_int32_t se;
++  uint32_t se, lx;
+   int32_t i, ix;
+   int32_t sign;
+   long double a, b, temp;
+-  ieee854_long_double_shape_type u;
++  double xhi;
+ 
+-  u.value = x;
+-  se = u.parts32.w0;
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS (se, lx, xhi);
+   ix = se & 0x7fffffff;
+ 
+   /* if Y(n,NaN) is NaN */
+   if (ix >= 0x7ff00000)
+     {
+-      if ((u.parts32.w0 & 0xfffff) | u.parts32.w1
+-	  | (u.parts32.w2 & 0x7fffffff) | u.parts32.w3)
++      if (((ix - 0x7ff00000) | lx) != 0)
+ 	return x + x;
+     }
+   if (x <= 0.0L)
+@@ -377,14 +375,16 @@
+       a = __ieee754_y0l (x);
+       b = __ieee754_y1l (x);
+       /* quit if b is -inf */
+-      u.value = b;
+-      se = u.parts32.w0 & 0xfff00000;
++      xhi = ldbl_high (b);
++      GET_HIGH_WORD (se, xhi);
++      se &= 0xfff00000;
+       for (i = 1; i < n && se != 0xfff00000; i++)
+ 	{
+ 	  temp = b;
+ 	  b = ((long double) (i + i) / x) * b - a;
+-	  u.value = b;
+-	  se = u.parts32.w0 & 0xfff00000;
++	  xhi = ldbl_high (b);
++	  GET_HIGH_WORD (se, xhi);
++	  se &= 0xfff00000;
+ 	  a = temp;
+ 	}
+     }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log10l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log10l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log10l.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_log10l.c	2014-05-27 23:05:55.000000000 -0500
+@@ -182,11 +182,13 @@
+   long double z;
+   long double y;
+   int e;
+-  int64_t hx, lx;
++  int64_t hx;
++  double xhi;
+ 
+ /* Test for domain */
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
+-  if (((hx & 0x7fffffffffffffffLL) | (lx & 0x7fffffffffffffffLL)) == 0)
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
++  if ((hx & 0x7fffffffffffffffLL) == 0)
+     return (-1.0L / (x - x));
+   if (hx < 0)
+     return (x - x) / (x - x);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_logl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_logl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_logl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_logl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -185,18 +185,20 @@
+ long double
+ __ieee754_logl(long double x)
+ {
+-  long double z, y, w;
+-  ieee854_long_double_shape_type u, t;
++  long double z, y, w, t;
+   unsigned int m;
+   int k, e;
++  double xhi;
++  uint32_t hx, lx;
+ 
+-  u.value = x;
+-  m = u.parts32.w0;
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS (hx, lx, xhi);
++  m = hx;
+ 
+   /* Check for IEEE special cases.  */
+   k = m & 0x7fffffff;
+   /* log(0) = -infinity. */
+-  if ((k | u.parts32.w1 | (u.parts32.w2 & 0x7fffffff) | u.parts32.w3) == 0)
++  if ((k | lx) == 0)
+     {
+       return -0.5L / ZERO;
+     }
+@@ -216,7 +218,7 @@
+     {
+       z = x - 1.0L;
+       k = 64;
+-      t.value  = 1.0L;
++      t = 1.0L;
+       e = 0;
+     }
+   else
+@@ -233,10 +235,8 @@
+ 	  k = (m - 0xff000) >> 13;
+ 	  /* t is the argument 0.5 + (k+26)/128
+ 	     of the nearest item to u in the lookup table.  */
+-	  t.parts32.w0 = 0x3ff00000 + (k << 13);
+-	  t.parts32.w1 = 0;
+-	  t.parts32.w2 = 0;
+-	  t.parts32.w3 = 0;
++	  INSERT_WORDS (xhi, 0x3ff00000 + (k << 13), 0);
++	  t = xhi;
+ 	  w0 += 0x100000;
+ 	  e -= 1;
+ 	  k += 64;
+@@ -244,17 +244,15 @@
+       else
+ 	{
+ 	  k = (m - 0xfe000) >> 14;
+-	  t.parts32.w0 = 0x3fe00000 + (k << 14);
+-	  t.parts32.w1 = 0;
+-	  t.parts32.w2 = 0;
+-	  t.parts32.w3 = 0;
++	  INSERT_WORDS (xhi, 0x3fe00000 + (k << 14), 0);
++	  t = xhi;
+ 	}
+-      u.value = __scalbnl (u.value, ((int) ((w0 - u.parts32.w0) * 2)) >> 21);
++      x = __scalbnl (x, ((int) ((w0 - hx) * 2)) >> 21);
+       /* log(u) = log( t u/t ) = log(t) + log(u/t)
+ 	 log(t) is tabulated in the lookup table.
+ 	 Express log(u/t) = log(1+z),  where z = u/t - 1 = (u-t)/t.
+ 	 cf. Cody & Waite. */
+-      z = (u.value - t.value) / t.value;
++      z = (x - t) / t;
+     }
+   /* Series expansion of log(1+z).  */
+   w = z * z;
+@@ -275,7 +273,7 @@
+   y += e * ln2b;  /* Base 2 exponent offset times ln(2).  */
+   y += z;
+   y += logtbl[k-26]; /* log(t) - (t-1) */
+-  y += (t.value - 1.0L);
++  y += (t - 1.0L);
+   y += e * ln2a;
+   return y;
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_powl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_powl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_powl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_powl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -151,37 +151,32 @@
+   long double y1, t1, t2, r, s, t, u, v, w;
+   long double s2, s_h, s_l, t_h, t_l, ay;
+   int32_t i, j, k, yisint, n;
+-  u_int32_t ix, iy;
+-  int32_t hx, hy;
+-  ieee854_long_double_shape_type o, p, q;
++  uint32_t ix, iy;
++  int32_t hx, hy, hax;
++  double ohi, xhi, xlo, yhi, ylo;
++  uint32_t lx, ly, lj;
+ 
+-  p.value = x;
+-  hx = p.parts32.w0;
++  ldbl_unpack (x, &xhi, &xlo);
++  EXTRACT_WORDS (hx, lx, xhi);
+   ix = hx & 0x7fffffff;
+ 
+-  q.value = y;
+-  hy = q.parts32.w0;
++  ldbl_unpack (y, &yhi, &ylo);
++  EXTRACT_WORDS (hy, ly, yhi);
+   iy = hy & 0x7fffffff;
+ 
+-
+   /* y==zero: x**0 = 1 */
+-  if ((iy | q.parts32.w1 | (q.parts32.w2 & 0x7fffffff) | q.parts32.w3) == 0)
++  if ((iy | ly) == 0)
+     return one;
+ 
+   /* 1.0**y = 1; -1.0**+-Inf = 1 */
+   if (x == one)
+     return one;
+-  if (x == -1.0L && iy == 0x7ff00000
+-      && (q.parts32.w1 | (q.parts32.w2 & 0x7fffffff) | q.parts32.w3) == 0)
++  if (x == -1.0L && ((iy - 0x7ff00000) | ly) == 0)
+     return one;
+ 
+   /* +-NaN return x+y */
+-  if ((ix > 0x7ff00000)
+-      || ((ix == 0x7ff00000)
+-	  && ((p.parts32.w1 | (p.parts32.w2 & 0x7fffffff) | p.parts32.w3) != 0))
+-      || (iy > 0x7ff00000)
+-      || ((iy == 0x7ff00000)
+-	  && ((q.parts32.w1 | (q.parts32.w2 & 0x7fffffff) | q.parts32.w3) != 0)))
++  if ((ix >= 0x7ff00000 && ((ix - 0x7ff00000) | lx) != 0)
++      || (iy >= 0x7ff00000 && ((iy - 0x7ff00000) | ly) != 0))
+     return x + y;
+ 
+   /* determine if y is an odd int when x < 0
+@@ -192,7 +187,10 @@
+   yisint = 0;
+   if (hx < 0)
+     {
+-      if ((q.parts32.w2 & 0x7fffffff) >= 0x43400000)	/* Low part >= 2^53 */
++      uint32_t low_ye;
++
++      GET_HIGH_WORD (low_ye, ylo);
++      if ((low_ye & 0x7fffffff) >= 0x43400000)	/* Low part >= 2^53 */
+ 	yisint = 2;		/* even integer y */
+       else if (iy >= 0x3ff00000)	/* 1.0 */
+ 	{
+@@ -207,42 +205,43 @@
+ 	}
+     }
+ 
++  ax = fabsl (x);
++
+   /* special value of y */
+-  if ((q.parts32.w1 | (q.parts32.w2 & 0x7fffffff) | q.parts32.w3) == 0)
++  if (ly == 0)
+     {
+-      if (iy == 0x7ff00000 && q.parts32.w1 == 0)	/* y is +-inf */
++      if (iy == 0x7ff00000)	/* y is +-inf */
+ 	{
+-	  if (((ix - 0x3ff00000) | p.parts32.w1
+-	       | (p.parts32.w2 & 0x7fffffff) | p.parts32.w3) == 0)
+-	    return y - y;	/* inf**+-1 is NaN */
+-	  else if (ix > 0x3ff00000 || fabsl (x) > 1.0L)
++	  if (ax > one)
+ 	    /* (|x|>1)**+-inf = inf,0 */
+ 	    return (hy >= 0) ? y : zero;
+ 	  else
+ 	    /* (|x|<1)**-,+inf = inf,0 */
+ 	    return (hy < 0) ? -y : zero;
+ 	}
+-      if (iy == 0x3ff00000)
+-	{			/* y is  +-1 */
+-	  if (hy < 0)
+-	    return one / x;
+-	  else
+-	    return x;
+-	}
+-      if (hy == 0x40000000)
+-	return x * x;		/* y is  2 */
+-      if (hy == 0x3fe00000)
+-	{			/* y is  0.5 */
+-	  if (hx >= 0)		/* x >= +0 */
+-	    return __ieee754_sqrtl (x);
++      if (ylo == 0.0)
++	{
++	  if (iy == 0x3ff00000)
++	    {			/* y is  +-1 */
++	      if (hy < 0)
++		return one / x;
++	      else
++		return x;
++	    }
++	  if (hy == 0x40000000)
++	    return x * x;		/* y is  2 */
++	  if (hy == 0x3fe00000)
++	    {			/* y is  0.5 */
++	      if (hx >= 0)		/* x >= +0 */
++		return __ieee754_sqrtl (x);
++	    }
+ 	}
+     }
+ 
+-  ax = fabsl (x);
+   /* special value of x */
+-  if ((p.parts32.w1 | (p.parts32.w2 & 0x7fffffff) | p.parts32.w3) == 0)
++  if (lx == 0)
+     {
+-      if (ix == 0x7ff00000 || ix == 0 || ix == 0x3ff00000)
++      if (ix == 0x7ff00000 || ix == 0 || (ix == 0x3ff00000 && xlo == 0.0))
+ 	{
+ 	  z = ax;		/*x is +-0,+-inf,+-1 */
+ 	  if (hy < 0)
+@@ -294,8 +293,8 @@
+     {
+       ax *= two113;
+       n -= 113;
+-      o.value = ax;
+-      ix = o.parts32.w0;
++      ohi = ldbl_high (ax);
++      GET_HIGH_WORD (ix, ohi);
+     }
+   n += ((ix) >> 20) - 0x3ff;
+   j = ix & 0x000fffff;
+@@ -312,26 +311,19 @@
+       ix -= 0x00100000;
+     }
+ 
+-  o.value = ax;
+-  o.value = __scalbnl (o.value, ((int) ((ix - o.parts32.w0) * 2)) >> 21);
+-  ax = o.value;
++  ohi = ldbl_high (ax);
++  GET_HIGH_WORD (hax, ohi);
++  ax = __scalbnl (ax, ((int) ((ix - hax) * 2)) >> 21);
+ 
+   /* compute s = s_h+s_l = (x-1)/(x+1) or (x-1.5)/(x+1.5) */
+   u = ax - bp[k];		/* bp[0]=1.0, bp[1]=1.5 */
+   v = one / (ax + bp[k]);
+   s = u * v;
+-  s_h = s;
++  s_h = ldbl_high (s);
+ 
+-  o.value = s_h;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  s_h = o.value;
+   /* t_h=ax+bp[k] High */
+   t_h = ax + bp[k];
+-  o.value = t_h;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  t_h = o.value;
++  t_h = ldbl_high (t_h);
+   t_l = ax - (t_h - bp[k]);
+   s_l = v * ((u - s_h * t_h) - s_h * t_l);
+   /* compute log(ax) */
+@@ -342,30 +334,21 @@
+   r += s_l * (s_h + s);
+   s2 = s_h * s_h;
+   t_h = 3.0 + s2 + r;
+-  o.value = t_h;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  t_h = o.value;
++  t_h = ldbl_high (t_h);
+   t_l = r - ((t_h - 3.0) - s2);
+   /* u+v = s*(1+...) */
+   u = s_h * t_h;
+   v = s_l * t_h + t_l * s;
+   /* 2/(3log2)*(s+...) */
+   p_h = u + v;
+-  o.value = p_h;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  p_h = o.value;
++  p_h = ldbl_high (p_h);
+   p_l = v - (p_h - u);
+   z_h = cp_h * p_h;		/* cp_h+cp_l = 2/(3*log2) */
+   z_l = cp_l * p_h + p_l * cp + dp_l[k];
+   /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */
+   t = (long double) n;
+   t1 = (((z_h + z_l) + dp_h[k]) + t);
+-  o.value = t1;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  t1 = o.value;
++  t1 = ldbl_high (t1);
+   t2 = z_l - (((t1 - t) - dp_h[k]) - z_h);
+ 
+   /* s (sign of result -ve**odd) = -1 else = 1 */
+@@ -374,21 +357,16 @@
+     s = -one;			/* (-ve)**(odd int) */
+ 
+   /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */
+-  y1 = y;
+-  o.value = y1;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  y1 = o.value;
++  y1 = ldbl_high (y);
+   p_l = (y - y1) * t1 + y * t2;
+   p_h = y1 * t1;
+   z = p_l + p_h;
+-  o.value = z;
+-  j = o.parts32.w0;
++  ohi = ldbl_high (z);
++  EXTRACT_WORDS (j, lj, ohi);
+   if (j >= 0x40d00000) /* z >= 16384 */
+     {
+       /* if z > 16384 */
+-      if (((j - 0x40d00000) | o.parts32.w1
+-	| (o.parts32.w2 & 0x7fffffff) | o.parts32.w3) != 0)
++      if (((j - 0x40d00000) | lj) != 0)
+ 	return s * huge * huge;	/* overflow */
+       else
+ 	{
+@@ -399,8 +377,7 @@
+   else if ((j & 0x7fffffff) >= 0x40d01b90)	/* z <= -16495 */
+     {
+       /* z < -16495 */
+-      if (((j - 0xc0d01bc0) | o.parts32.w1
+-	 | (o.parts32.w2 & 0x7fffffff) | o.parts32.w3) != 0)
++      if (((j - 0xc0d01bc0) | lj) != 0)
+ 	return s * tiny * tiny;	/* underflow */
+       else
+ 	{
+@@ -419,10 +396,7 @@
+       p_h -= t;
+     }
+   t = p_l + p_h;
+-  o.value = t;
+-  o.parts32.w3 = 0;
+-  o.parts32.w2 = 0;
+-  t = o.value;
++  t = ldbl_high (t);
+   u = t * lg2_h;
+   v = (p_l - (t - p_h)) * lg2 + t * lg2_l;
+   z = u + v;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_tanl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_tanl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_tanl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/k_tanl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -85,17 +85,17 @@
+ __kernel_tanl (long double x, long double y, int iy)
+ {
+   long double z, r, v, w, s;
+-  int32_t ix, sign;
+-  ieee854_long_double_shape_type u, u1;
++  int32_t ix, sign, hx, lx;
++  double xhi;
+ 
+-  u.value = x;
+-  ix = u.parts32.w0 & 0x7fffffff;
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS (hx, lx, xhi);
++  ix = hx & 0x7fffffff;
+   if (ix < 0x3c600000)		/* x < 2**-57 */
+     {
+-      if ((int) x == 0)
+-	{			/* generate inexact */
+-	  if ((ix | u.parts32.w1 | (u.parts32.w2 & 0x7fffffff) | u.parts32.w3
+-	       | (iy + 1)) == 0)
++      if ((int) x == 0)		/* generate inexact */
++	{
++	  if ((ix | lx | (iy + 1)) == 0)
+ 	    return one / fabs (x);
+ 	  else
+ 	    return (iy == 1) ? x : -one / x;
+@@ -103,7 +103,7 @@
+     }
+   if (ix >= 0x3fe59420) /* |x| >= 0.6743316650390625 */
+     {
+-      if ((u.parts32.w0 & 0x80000000) != 0)
++      if ((hx & 0x80000000) != 0)
+ 	{
+ 	  x = -x;
+ 	  y = -y;
+@@ -139,15 +139,13 @@
+     {				/* if allow error up to 2 ulp,
+ 				   simply return -1.0/(x+r) here */
+       /*  compute -1.0/(x+r) accurately */
+-      u1.value = w;
+-      u1.parts32.w2 = 0;
+-      u1.parts32.w3 = 0;
+-      v = r - (u1.value - x);		/* u1+v = r+x */
++      long double u1, z1;
++
++      u1 = ldbl_high (w);
++      v = r - (u1 - x);		/* u1+v = r+x */
+       z = -1.0 / w;
+-      u.value = z;
+-      u.parts32.w2 = 0;
+-      u.parts32.w3 = 0;
+-      s = 1.0 + u.value * u1.value;
+-      return u.value + z * (s + u.value * v);
++      z1 = ldbl_high (z);
++      s = 1.0 + z1 * u1;
++      return z1 + z * (s + z1 * v);
+     }
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_expm1l.c	2014-05-27 23:05:55.000000000 -0500
+@@ -92,19 +92,19 @@
+ __expm1l (long double x)
+ {
+   long double px, qx, xx;
+-  int32_t ix, sign;
+-  ieee854_long_double_shape_type u;
++  int32_t ix, lx, sign;
+   int k;
++  double xhi;
+ 
+   /* Detect infinity and NaN.  */
+-  u.value = x;
+-  ix = u.parts32.w0;
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS (ix, lx, xhi);
+   sign = ix & 0x80000000;
+   ix &= 0x7fffffff;
+   if (ix >= 0x7ff00000)
+     {
+       /* Infinity. */
+-      if (((ix & 0xfffff) | u.parts32.w1 | (u.parts32.w2&0x7fffffff) | u.parts32.w3) == 0)
++      if (((ix - 0x7ff00000) | lx) == 0)
+ 	{
+ 	  if (sign)
+ 	    return -1.0L;
+@@ -116,7 +116,7 @@
+     }
+ 
+   /* expm1(+- 0) = +- 0.  */
+-  if ((ix == 0) && (u.parts32.w1 | (u.parts32.w2&0x7fffffff) | u.parts32.w3) == 0)
++  if ((ix | lx) == 0)
+     return x;
+ 
+   /* Overflow.  */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -36,16 +36,21 @@
+ 
+ long double __frexpl(long double x, int *eptr)
+ {
+-	u_int64_t hx, lx, ix, ixl;
++	uint64_t hx, lx, ix, ixl;
+ 	int64_t explo;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	double xhi, xlo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
+ 	ixl = 0x7fffffffffffffffULL&lx;
+ 	ix =  0x7fffffffffffffffULL&hx;
+ 	*eptr = 0;
+-	if(ix>=0x7ff0000000000000ULL||((ix|ixl)==0)) return x;	/* 0,inf,nan */
++	if(ix>=0x7ff0000000000000ULL||ix==0) return x;	/* 0,inf,nan */
+ 	if (ix<0x0010000000000000ULL) {		/* subnormal */
+ 	    x *= two107;
+-	    GET_LDOUBLE_MSW64(hx,x);
++	    xhi = ldbl_high (x);
++	    EXTRACT_WORDS64 (hx, xhi);
+ 	    ix = hx&0x7fffffffffffffffULL;
+ 	    *eptr = -107;
+ 	}
+@@ -54,7 +59,7 @@
+ 	if (ixl != 0ULL) {
+ 	  explo = (ixl>>52) - (ix>>52) + 0x3fe;
+ 	  if ((ixl&0x7ff0000000000000ULL) == 0LL) {
+-	    /* the lower double is a denomal so we need to correct its
++	    /* the lower double is a denormal so we need to correct its
+ 	       mantissa and perhaps its exponent.  */
+ 	    int cnt;
+ 
+@@ -73,7 +78,9 @@
+ 	  lx = 0ULL;
+ 
+ 	hx = (hx&0x800fffffffffffffULL) | 0x3fe0000000000000ULL;
+-	SET_LDOUBLE_WORDS64(x,hx,lx);
++	INSERT_WORDS64 (xhi, hx);
++	INSERT_WORDS64 (xlo, lx);
++	x = ldbl_pack (xhi, xlo);
+ 	return x;
+ }
+ #ifdef IS_IN_libm
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinf_nsl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -1,6 +1,7 @@
+ /*
+  * __isinf_nsl(x) returns != 0 if x is ±inf, else 0;
+  * no branching!
++ * slightly dodgy in relying on signed shift right copying sign bit
+  */
+ 
+ #include <math.h>
+@@ -9,8 +10,14 @@
+ int
+ __isinf_nsl (long double x)
+ {
+-	int64_t hx,lx;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
+-	return !((lx & 0x7fffffffffffffffLL)
+-		 | ((hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL));
++  double xhi;
++  int64_t hx, mask;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
++
++  mask = (hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL;
++  mask |= -mask;
++  mask >>= 63;
++  return ~mask;
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_isinfl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -11,6 +11,7 @@
+ /*
+  * isinfl(x) returns 1 if x is inf, -1 if x is -inf, else 0;
+  * no branching!
++ * slightly dodgy in relying on signed shift right copying sign bit
+  */
+ 
+ #include <math.h>
+@@ -20,12 +21,16 @@
+ int
+ ___isinfl (long double x)
+ {
+-	int64_t hx,lx;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
+-	lx = (lx & 0x7fffffffffffffffLL);
+-	lx |= (hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL;
+-	lx |= -lx;
+-	return ~(lx >> 63) & (hx >> 62);
++  double xhi;
++  int64_t hx, mask;
++
++  xhi = ldbl_high (x);
++  EXTRACT_WORDS64 (hx, xhi);
++
++  mask = (hx & 0x7fffffffffffffffLL) ^ 0x7ff0000000000000LL;
++  mask |= -mask;
++  mask >>= 63;
++  return ~mask & (hx >> 62);
+ }
+ hidden_ver (___isinfl, __isinfl)
+ #ifndef IS_IN_libm
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_log1pl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -126,19 +126,18 @@
+ __log1pl (long double xm1)
+ {
+   long double x, y, z, r, s;
+-  ieee854_long_double_shape_type u;
+-  int32_t hx;
++  double xhi;
++  int32_t hx, lx;
+   int e;
+ 
+   /* Test for NaN or infinity input. */
+-  u.value = xm1;
+-  hx = u.parts32.w0;
++  xhi = ldbl_high (xm1);
++  EXTRACT_WORDS (hx, lx, xhi);
+   if (hx >= 0x7ff00000)
+     return xm1;
+ 
+   /* log1p(+- 0) = +- 0.  */
+-  if (((hx & 0x7fffffff) == 0)
+-      && (u.parts32.w1 | (u.parts32.w2 & 0x7fffffff) | u.parts32.w3) == 0)
++  if (((hx & 0x7fffffff) | lx) == 0)
+     return xm1;
+ 
+   x = xm1 + 1.0L;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_modfl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_modfl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_modfl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_modfl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -37,43 +37,54 @@
+ {
+ 	int64_t i0,i1,j0;
+ 	u_int64_t i;
+-	GET_LDOUBLE_WORDS64(i0,i1,x);
++	double xhi, xlo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (i0, xhi);
++	EXTRACT_WORDS64 (i1, xlo);
+ 	i1 &= 0x000fffffffffffffLL;
+ 	j0 = ((i0>>52)&0x7ff)-0x3ff;	/* exponent of x */
+ 	if(j0<52) {			/* integer part in high x */
+ 	    if(j0<0) {			/* |x|<1 */
+ 		/* *iptr = +-0 */
+-	        SET_LDOUBLE_WORDS64(*iptr,i0&0x8000000000000000ULL,0);
++		INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL);
++		*iptr = xhi;
+ 		return x;
+ 	    } else {
+ 		i = (0x000fffffffffffffLL)>>j0;
+ 		if(((i0&i)|(i1&0x7fffffffffffffffLL))==0) {		/* x is integral */
+ 		    *iptr = x;
+ 		    /* return +-0 */
+-		    SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0);
++		    INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL);
++		    x = xhi;
+ 		    return x;
+ 		} else {
+-		    SET_LDOUBLE_WORDS64(*iptr,i0&(~i),0);
++		    INSERT_WORDS64 (xhi, i0&(~i));
++		    *iptr = xhi;
+ 		    return x - *iptr;
+ 		}
+ 	    }
+ 	} else if (j0>103) {		/* no fraction part */
+ 	    *iptr = x*one;
+ 	    /* We must handle NaNs separately.  */
+-	    if (j0 == 0x400 && ((i0 & 0x000fffffffffffffLL) | i1))
++	    if ((i0 & 0x7fffffffffffffffLL) > 0x7ff0000000000000LL)
+ 	      return x*one;
+ 	    /* return +-0 */
+-	    SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0);
++	    INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL);
++	    x = xhi;
+ 	    return x;
+ 	} else {			/* fraction part in low x */
+ 	    i = -1ULL>>(j0-52);
+ 	    if((i1&i)==0) { 		/* x is integral */
+ 		*iptr = x;
+ 		/* return +-0 */
+-		SET_LDOUBLE_WORDS64(x,i0&0x8000000000000000ULL,0);
++		INSERT_WORDS64 (xhi, i0&0x8000000000000000ULL);
++		x = xhi;
+ 		return x;
+ 	    } else {
+-		SET_LDOUBLE_WORDS64(*iptr,i0,i1&(~i));
++		INSERT_WORDS64 (xhi, i0);
++		INSERT_WORDS64 (xlo, i1&(~i));
++		*iptr = ldbl_pack (xhi, xlo);
+ 		return x - *iptr;
+ 	    }
+ 	}
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -30,27 +30,28 @@
+ 
+ long double __nextafterl(long double x, long double y)
+ {
+-	int64_t hx,hy,ihx,ihy,ilx;
+-	u_int64_t lx;
+-	u_int64_t ly __attribute__ ((unused));
++	int64_t hx,hy,ihx,ihy;
++	uint64_t lx;
++	double xhi, xlo, yhi;
+ 
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
+-	GET_LDOUBLE_WORDS64(hy,ly,y);
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
++	yhi = ldbl_high (y);
++	EXTRACT_WORDS64 (hy, yhi);
+ 	ihx = hx&0x7fffffffffffffffLL;		/* |hx| */
+-	ilx = lx&0x7fffffffffffffffLL;		/* |lx| */
+ 	ihy = hy&0x7fffffffffffffffLL;		/* |hy| */
+ 
+-	if((((ihx&0x7ff0000000000000LL)==0x7ff0000000000000LL)&&
+-	    ((ihx&0x000fffffffffffffLL)!=0)) ||   /* x is nan */
+-	   (((ihy&0x7ff0000000000000LL)==0x7ff0000000000000LL)&&
+-	    ((ihy&0x000fffffffffffffLL)!=0)))     /* y is nan */
++	if((ihx>0x7ff0000000000000LL) ||	/* x is nan */
++	   (ihy>0x7ff0000000000000LL))		/* y is nan */
+ 	    return x+y; /* signal the nan */
+ 	if(x==y)
+ 	    return y;		/* x=y, return y */
+-	if(ihx == 0 && ilx == 0) {			/* x == 0 */
+-	    long double u;
++	if(ihx == 0) {				/* x == 0 */
++	    long double u;			/* return +-minsubnormal */
+ 	    hy = (hy & 0x8000000000000000ULL) | 1;
+-	    SET_LDOUBLE_WORDS64(x,hy,0ULL);/* return +-minsubnormal */
++	    INSERT_WORDS64 (yhi, hy);
++	    x = yhi;
+ 	    u = math_opt_barrier (x);
+ 	    u = u * u;
+ 	    math_force_eval (u);		/* raise underflow flag */
+@@ -59,10 +60,16 @@
+ 	
+ 	long double u;
+ 	if(x > y) {	/* x > y, x -= ulp */
++	    /* This isn't the largest magnitude correctly rounded
++	       long double as you can see from the lowest mantissa
++	       bit being zero.  It is however the largest magnitude
++	       long double with a 106 bit mantissa, and nextafterl
++	       is insane with variable precision.  So to make
++	       nextafterl sane we assume 106 bit precision.  */
+ 	    if((hx==0xffefffffffffffffLL)&&(lx==0xfc8ffffffffffffeLL))
+ 	      return x+x;	/* overflow, return -inf */
+ 	    if (hx >= 0x7ff0000000000000LL) {
+-	      SET_LDOUBLE_WORDS64(u,0x7fefffffffffffffLL,0x7c8ffffffffffffeLL);
++	      u = 0x1.fffffffffffff7ffffffffffff8p+1023L;
+ 	      return u;
+ 	    }
+ 	    if(ihx <= 0x0360000000000000LL) {  /* x <= LDBL_MIN */
+@@ -77,16 +84,19 @@
+ 	      return x;
+ 	    }
+ 	    if (ihx < 0x06a0000000000000LL) { /* ulp will denormal */
+-	      SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL),0ULL);
++	      INSERT_WORDS64 (yhi, hx & (0x7ffLL<<52));
++	      u = yhi;
+ 	      u *= 0x1.0000000000000p-105L;
+-	    } else
+-	      SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL)-0x0690000000000000LL,0ULL);
++	    } else {
++	      INSERT_WORDS64 (yhi, (hx & (0x7ffLL<<52))-(0x069LL<<52));
++	      u = yhi;
++	    }
+ 	    return x - u;
+ 	} else {				/* x < y, x += ulp */
+ 	    if((hx==0x7fefffffffffffffLL)&&(lx==0x7c8ffffffffffffeLL))
+ 	      return x+x;	/* overflow, return +inf */
+-	    if ((u_int64_t) hx >= 0xfff0000000000000ULL) {
+-	      SET_LDOUBLE_WORDS64(u,0xffefffffffffffffLL,0xfc8ffffffffffffeLL);
++	    if ((uint64_t) hx >= 0xfff0000000000000ULL) {
++	      u = -0x1.fffffffffffff7ffffffffffff8p+1023L;
+ 	      return u;
+ 	    }
+ 	    if(ihx <= 0x0360000000000000LL) {  /* x <= LDBL_MIN */
+@@ -103,10 +113,13 @@
+ 	      return x;
+ 	    }
+ 	    if (ihx < 0x06a0000000000000LL) { /* ulp will denormal */
+-	      SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL),0ULL);
++	      INSERT_WORDS64 (yhi, hx & (0x7ffLL<<52));
++	      u = yhi;
+ 	      u *= 0x1.0000000000000p-105L;
+-	    } else
+-	      SET_LDOUBLE_WORDS64(u,(hx&0x7ff0000000000000LL)-0x0690000000000000LL,0ULL);
++	    } else {
++	      INSERT_WORDS64 (yhi, (hx & (0x7ffLL<<52))-(0x069LL<<52));
++	      u = yhi;
++	    }
+ 	    return x + u;
+ 	}
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttoward.c	2014-05-27 23:10:26.000000000 -0500
+@@ -34,23 +34,23 @@
+ {
+ 	int32_t hx,ix;
+ 	int64_t hy,iy;
+-	u_int32_t lx;
+-	u_int64_t ly,uly;
++	uint32_t lx;
++	double yhi;
++
+ 
+ 	EXTRACT_WORDS(hx,lx,x);
+-	GET_LDOUBLE_WORDS64(hy,ly,y);
++	yhi = ldbl_high (y);
++	EXTRACT_WORDS64(hy,yhi);
+ 	ix = hx&0x7fffffff;		/* |x| */
+ 	iy = hy&0x7fffffffffffffffLL;	/* |y| */
+-	uly = ly&0x7fffffffffffffffLL;	/* |y| */
+ 
+ 	if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) ||   /* x is nan */
+-	   ((iy>=0x7ff0000000000000LL)&&((iy-0x7ff0000000000000LL)|uly)!=0))
+-	   						    /* y is nan */
++	   iy>0x7ff0000000000000LL)			    /* y is nan */
+ 	   return x+y;
+ 	if((long double) x==y) return y;	/* x=y, return y */
+ 	if((ix|lx)==0) {			/* x == 0 */
+ 	    double u;
+-	    INSERT_WORDS(x,(u_int32_t)((hy>>32)&0x80000000),1);/* return +-minsub */
++	    INSERT_WORDS(x,(uint32_t)((hy>>32)&0x80000000),1);/* return +-minsub */
+ 	    u = math_opt_barrier (x);
+ 	    u = u * u;
+ 	    math_force_eval (u);		/* raise underflow flag */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nexttowardf.c	2014-05-27 23:05:55.000000000 -0500
+@@ -27,16 +27,16 @@
+ {
+ 	int32_t hx,ix;
+ 	int64_t hy,iy;
+-	u_int64_t ly, uly;
++	double yhi;
+ 
+ 	GET_FLOAT_WORD(hx,x);
+-	GET_LDOUBLE_WORDS64(hy,ly,y);
++	yhi = ldbl_high (y);
++	EXTRACT_WORDS64 (hy, yhi);
+ 	ix = hx&0x7fffffff;		/* |x| */
+ 	iy = hy&0x7fffffffffffffffLL;	/* |y| */
+-	uly = ly&0x7fffffffffffffffLL;	/* |y| */
+ 
+ 	if((ix>0x7f800000) ||   /* x is nan */
+-	   ((iy>=0x7ff0000000000000LL)&&((iy-0x7ff0000000000000LL)|uly)!=0))
++	   (iy>0x7ff0000000000000LL))
+ 				/* y is nan */
+ 	   return x+y;
+ 	if((long double) x==y) return y;	/* x=y, return y */
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_remquol.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_remquol.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_remquol.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_remquol.c	2014-05-27 23:05:55.000000000 -0500
+@@ -33,20 +33,24 @@
+   int64_t hx,hy;
+   u_int64_t sx,lx,ly,qs;
+   int cquo;
++  double xhi, xlo, yhi, ylo;
+ 
+-  GET_LDOUBLE_WORDS64 (hx, lx, x);
+-  GET_LDOUBLE_WORDS64 (hy, ly, y);
++  ldbl_unpack (x, &xhi, &xlo);
++  EXTRACT_WORDS64 (hx, xhi);
++  EXTRACT_WORDS64 (lx, xlo);
++  ldbl_unpack (y, &yhi, &ylo);
++  EXTRACT_WORDS64 (hy, yhi);
++  EXTRACT_WORDS64 (ly, ylo);
+   sx = hx & 0x8000000000000000ULL;
+   qs = sx ^ (hy & 0x8000000000000000ULL);
+   hy &= 0x7fffffffffffffffLL;
+   hx &= 0x7fffffffffffffffLL;
+ 
+   /* Purge off exception values.  */
+-  if ((hy | (ly & 0x7fffffffffffffff)) == 0)
++  if (hy == 0)
+     return (x * y) / (x * y); 			/* y = 0 */
+   if ((hx >= 0x7ff0000000000000LL)		/* x not finite */
+-      || ((hy >= 0x7ff0000000000000LL)		/* y is NaN */
+-	  && (((hy - 0x7ff0000000000000LL) | ly) != 0)))
++      || (hy > 0x7ff0000000000000LL))		/* y is NaN */
+     return (x * y) / (x * y);
+ 
+   if (hy <= 0x7fbfffffffffffffLL)
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalblnl.c	2014-05-27 23:15:30.000000000 -0500
+@@ -41,11 +41,15 @@
+ {
+ 	int64_t k,l,hx,lx;
+ 	union { int64_t i; double d; } u;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	double xhi, xlo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
+ 	k = (hx>>52)&0x7ff;		/* extract exponent */
+ 	l = (lx>>52)&0x7ff;
+ 	if (k==0) {				/* 0 or subnormal x */
+-	    if (((hx|lx)&0x7fffffffffffffffULL)==0) return x; /* +-0 */
++	    if ((hx&0x7fffffffffffffffULL)==0) return x; /* +-0 */
+ 	    u.i = hx;
+ 	    u.d *= two54;
+ 	    hx = u.i;
+@@ -61,7 +65,9 @@
+ 	if (k > 0) {				/* normal result */
+ 	    hx = (hx&0x800fffffffffffffULL)|(k<<52);
+ 	    if ((lx & 0x7fffffffffffffffULL) == 0) { /* low part +-0 */
+-	    	SET_LDOUBLE_WORDS64(x,hx,lx);
++		INSERT_WORDS64 (xhi, hx);
++		INSERT_WORDS64 (xlo, lx);
++		x = ldbl_pack (xhi, xlo);
+ 	    	return x;
+ 	    }
+ 	    if (l == 0) { /* low part subnormal */
+@@ -81,14 +87,19 @@
+ 	    	u.d *= twom54;
+ 	    	lx = u.i;
+ 	    }
+-	    SET_LDOUBLE_WORDS64(x,hx,lx);
++	    INSERT_WORDS64 (xhi, hx);
++	    INSERT_WORDS64 (xlo, lx);
++	    x = ldbl_pack (xhi, xlo);
+ 	    return x;
+ 	}
+ 	if (k <= -54)
+ 	  return tiny*__copysignl(tiny,x); 	/*underflow*/
+ 	k += 54;				/* subnormal result */
+ 	lx &= 0x8000000000000000ULL;
+-	SET_LDOUBLE_WORDS64(x,(hx&0x800fffffffffffffULL)|(k<<52),lx);
++	hx &= 0x800fffffffffffffULL;
++	INSERT_WORDS64 (xhi, hx|(k<<52));
++	INSERT_WORDS64 (xlo, lx);
++	x = ldbl_pack (xhi, xlo);
+ 	return x*twolm54;
+ }
+ long_double_symbol (libm, __scalblnl, scalblnl);
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_scalbnl.c	2014-05-27 23:16:25.000000000 -0500
+@@ -41,11 +41,15 @@
+ {
+ 	int64_t k,l,hx,lx;
+ 	union { int64_t i; double d; } u;
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
++	double xhi, xlo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
+ 	k = (hx>>52)&0x7ff;		/* extract exponent */
+ 	l = (lx>>52)&0x7ff;
+ 	if (k==0) {				/* 0 or subnormal x */
+-	    if (((hx|lx)&0x7fffffffffffffffULL)==0) return x; /* +-0 */
++	    if ((hx&0x7fffffffffffffffULL)==0) return x; /* +-0 */
+ 	    u.i = hx;
+ 	    u.d *= two54;
+ 	    hx = u.i;
+@@ -61,7 +65,9 @@
+ 	if (k > 0) {				/* normal result */
+ 	    hx = (hx&0x800fffffffffffffULL)|(k<<52);
+ 	    if ((lx & 0x7fffffffffffffffULL) == 0) { /* low part +-0 */
+-	    	SET_LDOUBLE_WORDS64(x,hx,lx);
++		INSERT_WORDS64 (xhi, hx);
++		INSERT_WORDS64 (xlo, lx);
++		x = ldbl_pack (xhi, xlo);
+ 	    	return x;
+ 	    }
+ 	    if (l == 0) { /* low part subnormal */
+@@ -81,14 +87,19 @@
+ 	    	u.d *= twom54;
+ 	    	lx = u.i;
+ 	    }
+-	    SET_LDOUBLE_WORDS64(x,hx,lx);
++	    INSERT_WORDS64 (xhi, hx);
++	    INSERT_WORDS64 (xlo, lx);
++	    x = ldbl_pack (xhi, xlo);
+ 	    return x;
+ 	}
+ 	if (k <= -54)
+ 	  return tiny*__copysignl(tiny,x); 	/*underflow*/
+ 	k += 54;				/* subnormal result */
+ 	lx &= 0x8000000000000000ULL;
+-	SET_LDOUBLE_WORDS64(x,(hx&0x800fffffffffffffULL)|(k<<52),lx);
++	hx &= 0x800fffffffffffffULL;
++	INSERT_WORDS64 (xhi, hx|(k<<52));
++	INSERT_WORDS64 (xlo, lx);
++	x = ldbl_pack (xhi, xlo);
+ 	return x*twolm54;
+ }
+ #ifdef IS_IN_libm
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_tanhl.c	2014-05-27 23:05:55.000000000 -0500
+@@ -47,10 +47,12 @@
+ long double __tanhl(long double x)
+ {
+ 	long double t,z;
+-	int64_t jx,ix,lx;
++	int64_t jx,ix;
++	double xhi;
+ 
+     /* High word of |x|. */
+-	GET_LDOUBLE_WORDS64(jx,lx,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (jx, xhi);
+ 	ix = jx&0x7fffffffffffffffLL;
+ 
+     /* x is INF or NaN */
+@@ -61,7 +63,7 @@
+ 
+     /* |x| < 22 */
+ 	if (ix < 0x4036000000000000LL) {		/* |x|<22 */
+-	    if ((ix | (lx&0x7fffffffffffffffLL)) == 0)
++	    if (ix == 0)
+ 		return x;		/* x == +-0 */
+ 	    if (ix<0x3c60000000000000LL) 	/* |x|<2**-57 */
+ 		return x*(one+x);    	/* tanh(small) = small */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps	2014-05-27 23:05:51.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps	2014-05-27 23:08:26.000000000 -0500
+@@ -2641,6 +2641,9 @@
+ ifloat: 1
+ ildouble: 2
+ ldouble: 2
++Test "tan_towardzero (2)":
++ildouble: 1
++ldouble: 1
+ Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
+ float: 1
+ ifloat: 1
diff --git a/SOURCES/glibc-ppc64le-09.patch b/SOURCES/glibc-ppc64le-09.patch
new file mode 100644
index 0000000..969d3a1
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-09.patch
@@ -0,0 +1,567 @@
+# commit 650ef4bd7976e36831cba22d838b567d3b5f6e8f
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:25:51 2013 +0930
+# 
+#     PowerPC floating point little-endian [4 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00084.html
+#     
+#     Another batch of ieee854 macros and union replacement.  These four
+#     files also have bugs fixed with this patch.  The fact that the two
+#     doubles in an IBM long double may have different signs means that
+#     negation and absolute value operations can't just twiddle one sign bit
+#     as you can with ieee864 style extended double.  fmodl, remainderl,
+#     erfl and erfcl all had errors of this type.  erfl also returned +1 for
+#     large magnitude negative input where it should return -1.  The hypotl
+#     error is innocuous since the value adjusted twice is only used as a
+#     flag.  The e_hypotl.c tests for large "a" and small "b" are mutually
+#     exclusive because we've already exited when x/y > 2**120.  That allows
+#     some further small simplifications.
+#     
+#         [BZ #15734], [BZ #15735]
+#         * sysdeps/ieee754/ldbl-128ibm/e_fmodl.c (__ieee754_fmodl): Rewrite
+#         all uses of ieee875 long double macros and unions.  Simplify test
+#         for 0.0L.  Correct |x|<|y| and |x|=|y| test.  Use
+#         ldbl_extract_mantissa value for ix,iy exponents.  Properly
+#         normalize after ldbl_extract_mantissa, and don't add hidden bit
+#         already handled.  Don't treat low word of ieee854 mantissa like
+#         low word of IBM long double and mask off bit when testing for
+#         zero.
+#         * sysdeps/ieee754/ldbl-128ibm/e_hypotl.c (__ieee754_hypotl): Rewrite
+#         all uses of ieee875 long double macros and unions.  Simplify tests
+#         for 0.0L and inf.  Correct double adjustment of k.  Delete dead code
+#         adjusting ha,hb.  Simplify code setting kld.  Delete two600 and
+#         two1022, instead use their values.  Recognise that tests for large
+#         "a" and small "b" are mutually exclusive.  Rename vars.  Comment.
+#         * sysdeps/ieee754/ldbl-128ibm/e_remainderl.c (__ieee754_remainderl):
+#         Rewrite all uses of ieee875 long double macros and unions.  Simplify
+#         test for 0.0L and nan.  Correct negation.
+#         * sysdeps/ieee754/ldbl-128ibm/s_erfl.c (__erfl): Rewrite all uses of
+#         ieee875 long double macros and unions.  Correct output for large
+#         magnitude x.  Correct absolute value calculation.
+#         (__erfcl): Likewise.
+#         * math/libm-test.inc: Add tests for errors discovered in IBM long
+#         double versions of fmodl, remainderl, erfl and erfcl.
+# 
+diff -urN glibc-2.17-c758a686/math/libm-test.inc glibc-2.17-c758a686/math/libm-test.inc
+--- glibc-2.17-c758a686/math/libm-test.inc	2014-05-27 20:02:29.000000000 -0500
++++ glibc-2.17-c758a686/math/libm-test.inc	2014-05-27 20:09:59.000000000 -0500
+@@ -4040,6 +4040,10 @@
+   TEST_f_f (erf, 2.0L, 0.995322265018952734162069256367252929L);
+   TEST_f_f (erf, 4.125L, 0.999999994576599200434933994687765914L);
+   TEST_f_f (erf, 27.0L, 1.0L);
++#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 54
++  /* The input is not exactly representable as a double.  */
++  TEST_f_f (erf, -0x1.fffffffffffff8p-2L, -0.5204998778130465132916303345518417673509L);
++#endif
+ 
+   END (erf);
+ }
+@@ -4071,6 +4075,10 @@
+   TEST_f_f (erfc, 0x1.ffa002p+2L, 1.233585992097580296336099501489175967033e-29L);
+   TEST_f_f (erfc, 0x1.ffffc8p+2L, 1.122671365033056305522366683719541099329e-29L);
+ #ifdef TEST_LDOUBLE
++# if LDBL_MANT_DIG >= 54
++  /* The input is not exactly representable as a double.  */
++  TEST_f_f (erfc, -0x1.fffffffffffff8p-2L, 1.52049987781304651329163033455184176735L);
++# endif
+   /* The result can only be represented in long double.  */
+ # if LDBL_MIN_10_EXP < -319
+   TEST_f_f (erfc, 27.0L, 0.523704892378925568501606768284954709e-318L);
+@@ -5634,6 +5642,13 @@
+ #if defined TEST_LDOUBLE && LDBL_MIN_EXP <= -16381
+   TEST_ff_f (fmod, 0x0.fffffffffffffffep-16382L, 0x1p-16445L, plus_zero);
+ #endif
++#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 56
++  TEST_ff_f (fmod, -0x1.00000000000004p+0L, 0x1.fffffffffffff8p-1L, -0x1p-53L);
++  TEST_ff_f (fmod, 0x1.fffffffffffffap-1L, 0x1.fffffffffffff8p-1L, 0x1p-56L);
++  TEST_ff_f (fmod, -0x1.fffffffffffffap-1L, 0x1.fffffffffffff8p-1L, -0x1p-56L);
++  TEST_ff_f (fmod, 0x1.fffffffffffffap-1L, -0x1.fffffffffffff8p-1L, 0x1p-56L);
++  TEST_ff_f (fmod, -0x1.fffffffffffffap-1L, -0x1.fffffffffffff8p-1L, -0x1p-56L);
++#endif
+ 
+   END (fmod);
+ }
+@@ -8642,6 +8657,9 @@
+   TEST_ff_f (remainder, -1.625, -1.0, 0.375);
+   TEST_ff_f (remainder, 5.0, 2.0, 1.0);
+   TEST_ff_f (remainder, 3.0, 2.0, -1.0);
++#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 56
++  TEST_ff_f (remainder, -0x1.80000000000002p1L, 2.0, 0x1.fffffffffffff8p-1L);
++#endif
+ 
+   END (remainder);
+ }
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c	2014-05-27 20:02:27.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_fmodl.c	2014-05-27 20:04:08.000000000 -0500
+@@ -27,76 +27,83 @@
+ long double
+ __ieee754_fmodl (long double x, long double y)
+ {
+-	int64_t n,hx,hy,hz,ix,iy,sx, i;
+-	u_int64_t lx,ly,lz;
+-	int temp;
+-
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
+-	GET_LDOUBLE_WORDS64(hy,ly,y);
++	int64_t hx, hy, hz, sx, sy;
++	uint64_t lx, ly, lz;
++	int n, ix, iy;
++	double xhi, xlo, yhi, ylo;
++
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
++	ldbl_unpack (y, &yhi, &ylo);
++	EXTRACT_WORDS64 (hy, yhi);
++	EXTRACT_WORDS64 (ly, ylo);
+ 	sx = hx&0x8000000000000000ULL;		/* sign of x */
+-	hx ^=sx;				/* |x| */
+-	hy &= 0x7fffffffffffffffLL;		/* |y| */
++	hx ^= sx;				/* |x| */
++	sy = hy&0x8000000000000000ULL;		/* sign of y */
++	hy ^= sy;				/* |y| */
+ 
+     /* purge off exception values */
+-	if(__builtin_expect((hy|(ly&0x7fffffffffffffff))==0 ||
++	if(__builtin_expect(hy==0 ||
+ 			    (hx>=0x7ff0000000000000LL)|| /* y=0,or x not finite */
+ 			    (hy>0x7ff0000000000000LL),0))	/* or y is NaN */
+ 	    return (x*y)/(x*y);
+-	if(__builtin_expect(hx<=hy,0)) {
+-	    if((hx<hy)||(lx<ly)) return x;	/* |x|<|y| return x */
+-	    if(lx==ly)
+-		return Zero[(u_int64_t)sx>>63];	/* |x|=|y| return x*0*/
++	if (__builtin_expect (hx <= hy, 0))
++	  {
++	    /* If |x| < |y| return x.  */
++	    if (hx < hy)
++	      return x;
++	    /* At this point the absolute value of the high doubles of
++	       x and y must be equal.  */
++	    /* If the low double of y is the same sign as the high
++	       double of y (ie. the low double increases |y|)...  */
++	    if (((ly ^ sy) & 0x8000000000000000LL) == 0
++		/* ... then a different sign low double to high double
++		   for x or same sign but lower magnitude...  */
++		&& (int64_t) (lx ^ sx) < (int64_t) (ly ^ sy))
++	      /* ... means |x| < |y|.  */
++	      return x;
++	    /* If the low double of x differs in sign to the high
++	       double of x (ie. the low double decreases |x|)...  */
++	    if (((lx ^ sx) & 0x8000000000000000LL) != 0
++		/* ... then a different sign low double to high double
++		   for y with lower magnitude (we've already caught
++		   the same sign for y case above)...  */
++		&& (int64_t) (lx ^ sx) > (int64_t) (ly ^ sy))
++	      /* ... means |x| < |y|.  */
++	      return x;
++	    /* If |x| == |y| return x*0.  */
++	    if ((lx ^ sx) == (ly ^ sy))
++	      return Zero[(uint64_t) sx >> 63];
+ 	}
+ 
+-    /* determine ix = ilogb(x) */
+-	if(__builtin_expect(hx<0x0010000000000000LL,0)) {	/* subnormal x */
+-	    if(hx==0) {
+-		for (ix = -1043, i=lx; i>0; i<<=1) ix -=1;
+-	    } else {
+-		for (ix = -1022, i=(hx<<11); i>0; i<<=1) ix -=1;
+-	    }
+-	} else ix = (hx>>52)-0x3ff;
+-
+-    /* determine iy = ilogb(y) */
+-	if(__builtin_expect(hy<0x0010000000000000LL,0)) {	/* subnormal y */
+-	    if(hy==0) {
+-		for (iy = -1043, i=ly; i>0; i<<=1) iy -=1;
+-	    } else {
+-		for (iy = -1022, i=(hy<<11); i>0; i<<=1) iy -=1;
+-	    }
+-	} else iy = (hy>>52)-0x3ff;
+-
+     /* Make the IBM extended format 105 bit mantissa look like the ieee854 112
+        bit mantissa so the following operations will give the correct
+        result.  */
+-	ldbl_extract_mantissa(&hx, &lx, &temp, x);
+-	ldbl_extract_mantissa(&hy, &ly, &temp, y);
++	ldbl_extract_mantissa(&hx, &lx, &ix, x);
++	ldbl_extract_mantissa(&hy, &ly, &iy, y);
+ 
+-    /* set up {hx,lx}, {hy,ly} and align y to x */
+-	if(__builtin_expect(ix >= -1022, 1))
+-	    hx = 0x0001000000000000LL|(0x0000ffffffffffffLL&hx);
+-	else {		/* subnormal x, shift x to normal */
+-	    n = -1022-ix;
+-	    if(n<=63) {
+-		hx = (hx<<n)|(lx>>(64-n));
+-		lx <<= n;
+-	    } else {
+-		hx = lx<<(n-64);
+-		lx = 0;
+-	    }
+-	}
+-	if(__builtin_expect(iy >= -1022, 1))
+-	    hy = 0x0001000000000000LL|(0x0000ffffffffffffLL&hy);
+-	else {		/* subnormal y, shift y to normal */
+-	    n = -1022-iy;
+-	    if(n<=63) {
+-		hy = (hy<<n)|(ly>>(64-n));
+-		ly <<= n;
+-	    } else {
+-		hy = ly<<(n-64);
+-		ly = 0;
+-	    }
+-	}
++	if (__builtin_expect (ix == -IEEE754_DOUBLE_BIAS, 0))
++	  {
++	    /* subnormal x, shift x to normal.  */
++	    while ((hx & (1LL << 48)) == 0)
++	      {
++		hx = (hx << 1) | (lx >> 63);
++		lx = lx << 1;
++		ix -= 1;
++	      }
++	  }
++
++	if (__builtin_expect (iy == -IEEE754_DOUBLE_BIAS, 0))
++	  {
++	    /* subnormal y, shift y to normal.  */
++	    while ((hy & (1LL << 48)) == 0)
++	      {
++		hy = (hy << 1) | (ly >> 63);
++		ly = ly << 1;
++		iy -= 1;
++	      }
++	  }
+ 
+     /* fix point fmod */
+ 	n = ix - iy;
+@@ -104,7 +111,7 @@
+ 	    hz=hx-hy;lz=lx-ly; if(lx<ly) hz -= 1;
+ 	    if(hz<0){hx = hx+hx+(lx>>63); lx = lx+lx;}
+ 	    else {
+-		if((hz|(lz&0x7fffffffffffffff))==0)		/* return sign(x)*0 */
++		if((hz|lz)==0)		/* return sign(x)*0 */
+ 		    return Zero[(u_int64_t)sx>>63];
+ 		hx = hz+hz+(lz>>63); lx = lz+lz;
+ 	    }
+@@ -113,7 +120,7 @@
+ 	if(hz>=0) {hx=hz;lx=lz;}
+ 
+     /* convert back to floating value and restore the sign */
+-	if((hx|(lx&0x7fffffffffffffff))==0)			/* return sign(x)*0 */
++	if((hx|lx)==0)			/* return sign(x)*0 */
+ 	    return Zero[(u_int64_t)sx>>63];
+ 	while(hx<0x0001000000000000LL) {	/* normalize x */
+ 	    hx = hx+hx+(lx>>63); lx = lx+lx;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c	2014-05-27 20:02:27.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_hypotl.c	2014-05-27 20:04:08.000000000 -0500
+@@ -45,76 +45,84 @@
+ #include <math.h>
+ #include <math_private.h>
+ 
+-static const long double two600 = 0x1.0p+600L;
+-static const long double two1022 = 0x1.0p+1022L;
+-
+ long double
+ __ieee754_hypotl(long double x, long double y)
+ {
+-	long double a,b,t1,t2,y1,y2,w,kld;
++	long double a,b,a1,a2,b1,b2,w,kld;
+ 	int64_t j,k,ha,hb;
++	double xhi, yhi, hi, lo;
+ 
+-	GET_LDOUBLE_MSW64(ha,x);
++	xhi = ldbl_high (x);
++	EXTRACT_WORDS64 (ha, xhi);
++	yhi = ldbl_high (y);
++	EXTRACT_WORDS64 (hb, yhi);
+ 	ha &= 0x7fffffffffffffffLL;
+-	GET_LDOUBLE_MSW64(hb,y);
+ 	hb &= 0x7fffffffffffffffLL;
+ 	if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;}
+ 	a = fabsl(a);	/* a <- |a| */
+ 	b = fabsl(b);	/* b <- |b| */
+-	if((ha-hb)>0x780000000000000LL) {return a+b;} /* x/y > 2**120 */
++	if((ha-hb)>0x0780000000000000LL) {return a+b;} /* x/y > 2**120 */
+ 	k=0;
+ 	kld = 1.0L;
+ 	if(ha > 0x5f30000000000000LL) {	/* a>2**500 */
+ 	   if(ha >= 0x7ff0000000000000LL) {	/* Inf or NaN */
+-	       u_int64_t low;
+ 	       w = a+b;			/* for sNaN */
+-	       GET_LDOUBLE_LSW64(low,a);
+-	       if(((ha&0xfffffffffffffLL)|(low&0x7fffffffffffffffLL))==0)
++	       if(ha == 0x7ff0000000000000LL)
+ 		 w = a;
+-	       GET_LDOUBLE_LSW64(low,b);
+-	       if(((hb^0x7ff0000000000000LL)|(low&0x7fffffffffffffffLL))==0)
++	       if(hb == 0x7ff0000000000000LL)
+ 		 w = b;
+ 	       return w;
+ 	   }
+ 	   /* scale a and b by 2**-600 */
+-	   ha -= 0x2580000000000000LL; hb -= 0x2580000000000000LL; k += 600;
+-	   a /= two600;
+-	   b /= two600;
+-	   k += 600;
+-	   kld = two600;
++	   a *= 0x1p-600L;
++	   b *= 0x1p-600L;
++	   k = 600;
++	   kld = 0x1p+600L;
+ 	}
+-	if(hb < 0x23d0000000000000LL) {	/* b < 2**-450 */
++	else if(hb < 0x23d0000000000000LL) {	/* b < 2**-450 */
+ 	    if(hb <= 0x000fffffffffffffLL) {	/* subnormal b or 0 */
+-		u_int64_t low;
+-		GET_LDOUBLE_LSW64(low,b);
+-		if((hb|(low&0x7fffffffffffffffLL))==0) return a;
+-		t1=two1022;	/* t1=2^1022 */
+-		b *= t1;
+-		a *= t1;
+-		k -= 1022;
+-		kld = kld / two1022;
++		if(hb==0) return a;
++		a *= 0x1p+1022L;
++		b *= 0x1p+1022L;
++		k = -1022;
++		kld = 0x1p-1022L;
+ 	    } else {		/* scale a and b by 2^600 */
+-		ha += 0x2580000000000000LL;	/* a *= 2^600 */
+-		hb += 0x2580000000000000LL;	/* b *= 2^600 */
+-		k -= 600;
+-		a *= two600;
+-		b *= two600;
+-		kld = kld / two600;
++		a *= 0x1p+600L;
++		b *= 0x1p+600L;
++		k = -600;
++		kld = 0x1p-600L;
+ 	    }
+ 	}
+     /* medium size a and b */
+ 	w = a-b;
+ 	if (w>b) {
+-	    SET_LDOUBLE_WORDS64(t1,ha,0);
+-	    t2 = a-t1;
+-	    w  = __ieee754_sqrtl(t1*t1-(b*(-b)-t2*(a+t1)));
++	    ldbl_unpack (a, &hi, &lo);
++	    a1 = hi;
++	    a2 = lo;
++	    /* a*a + b*b
++	       = (a1+a2)*a + b*b
++	       = a1*a + a2*a + b*b
++	       = a1*(a1+a2) + a2*a + b*b
++	       = a1*a1 + a1*a2 + a2*a + b*b
++	       = a1*a1 + a2*(a+a1) + b*b  */
++	    w  = __ieee754_sqrtl(a1*a1-(b*(-b)-a2*(a+a1)));
+ 	} else {
+ 	    a  = a+a;
+-	    SET_LDOUBLE_WORDS64(y1,hb,0);
+-	    y2 = b - y1;
+-	    SET_LDOUBLE_WORDS64(t1,ha+0x0010000000000000LL,0);
+-	    t2 = a - t1;
+-	    w  = __ieee754_sqrtl(t1*y1-(w*(-w)-(t1*y2+t2*b)));
++	    ldbl_unpack (b, &hi, &lo);
++	    b1 = hi;
++	    b2 = lo;
++	    ldbl_unpack (a, &hi, &lo);
++	    a1 = hi;
++	    a2 = lo;
++	    /* a*a + b*b
++	       = a*a + (a-b)*(a-b) - (a-b)*(a-b) + b*b
++	       = a*a + w*w  - (a*a - 2*a*b + b*b) + b*b
++	       = w*w + 2*a*b
++	       = w*w + (a1+a2)*b
++	       = w*w + a1*b + a2*b
++	       = w*w + a1*(b1+b2) + a2*b
++	       = w*w + a1*b1 + a1*b2 + a2*b  */
++	    w  = __ieee754_sqrtl(a1*b1-(w*(-w)-(a1*b2+a2*b)));
+ 	}
+ 	if(k!=0)
+ 	    return w*kld;
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c	2014-05-27 20:02:27.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_remainderl.c	2014-05-27 20:04:08.000000000 -0500
+@@ -33,18 +33,22 @@
+ 	int64_t hx,hp;
+ 	u_int64_t sx,lx,lp;
+ 	long double p_half;
++	double xhi, xlo, phi, plo;
+ 
+-	GET_LDOUBLE_WORDS64(hx,lx,x);
+-	GET_LDOUBLE_WORDS64(hp,lp,p);
++	ldbl_unpack (x, &xhi, &xlo);
++	EXTRACT_WORDS64 (hx, xhi);
++	EXTRACT_WORDS64 (lx, xlo);
++	ldbl_unpack (p, &phi, &plo);
++	EXTRACT_WORDS64 (hp, phi);
++	EXTRACT_WORDS64 (lp, plo);
+ 	sx = hx&0x8000000000000000ULL;
+ 	hp &= 0x7fffffffffffffffLL;
+ 	hx &= 0x7fffffffffffffffLL;
+ 
+     /* purge off exception values */
+-	if((hp|(lp&0x7fffffffffffffff))==0) return (x*p)/(x*p);	/* p = 0 */
++	if(hp==0) return (x*p)/(x*p);	/* p = 0 */
+ 	if((hx>=0x7ff0000000000000LL)||			/* x not finite */
+-	  ((hp>=0x7ff0000000000000LL)&&			/* p is NaN */
+-	  (((hp-0x7ff0000000000000LL)|lp)!=0)))
++	   (hp>0x7ff0000000000000LL))			/* p is NaN */
+ 	    return (x*p)/(x*p);
+ 
+ 
+@@ -64,8 +68,8 @@
+ 		if(x>=p_half) x -= p;
+ 	    }
+ 	}
+-	GET_LDOUBLE_MSW64(hx,x);
+-	SET_LDOUBLE_MSW64(x,hx^sx);
++	if (sx)
++	  x = -x;
+ 	return x;
+ }
+ strong_alias (__ieee754_remainderl, __remainderl_finite)
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_erfl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_erfl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_erfl.c	2014-05-27 20:02:27.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_erfl.c	2014-05-27 20:04:08.000000000 -0500
+@@ -760,16 +760,16 @@
+ __erfl (long double x)
+ {
+   long double a, y, z;
+-  int32_t i, ix, sign;
+-  ieee854_long_double_shape_type u;
++  int32_t i, ix, hx;
++  double xhi;
+ 
+-  u.value = x;
+-  sign = u.parts32.w0;
+-  ix = sign & 0x7fffffff;
++  xhi = ldbl_high (x);
++  GET_HIGH_WORD (hx, xhi);
++  ix = hx & 0x7fffffff;
+ 
+   if (ix >= 0x7ff00000)
+     {				/* erf(nan)=nan */
+-      i = ((sign & 0xfff00000) >> 31) << 1;
++      i = ((uint32_t) hx >> 31) << 1;
+       return (long double) (1 - i) + one / x;	/* erf(+-inf)=+-1 */
+     }
+ 
+@@ -778,7 +778,7 @@
+       if (ix >= 0x4039A0DE)
+ 	{
+ 	/* __erfcl (x) underflows if x > 25.6283 */
+-	  if (sign)
++	  if ((hx & 0x80000000) == 0)
+ 	    return one-tiny;
+ 	  else
+ 	    return tiny-one;
+@@ -789,8 +789,9 @@
+ 	  return (one - y);
+ 	}
+     }
+-  u.parts32.w0 = ix;
+-  a = u.value;
++  a = x;
++  if ((hx & 0x80000000) != 0)
++    a = -a;
+   z = x * x;
+   if (ix < 0x3fec0000)  /* a < 0.875 */
+     {
+@@ -814,7 +815,7 @@
+       y = erf_const + neval (a, TN2, NTN2) / deval (a, TD2, NTD2);
+     }
+ 
+-  if (sign & 0x80000000) /* x < 0 */
++  if (hx & 0x80000000) /* x < 0 */
+     y = -y;
+   return( y );
+ }
+@@ -824,18 +825,18 @@
+ __erfcl (long double x)
+ {
+   long double y, z, p, r;
+-  int32_t i, ix, sign;
+-  ieee854_long_double_shape_type u;
+-
+-  u.value = x;
+-  sign = u.parts32.w0;
+-  ix = sign & 0x7fffffff;
+-  u.parts32.w0 = ix;
++  int32_t i, ix;
++  uint32_t hx;
++  double xhi;
++
++  xhi = ldbl_high (x);
++  GET_HIGH_WORD (hx, xhi);
++  ix = hx & 0x7fffffff;
+ 
+   if (ix >= 0x7ff00000)
+     {				/* erfc(nan)=nan */
+       /* erfc(+-inf)=0,2 */
+-      return (long double) (((u_int32_t) sign >> 31) << 1) + one / x;
++      return (long double) ((hx >> 31) << 1) + one / x;
+     }
+ 
+   if (ix < 0x3fd00000) /* |x| <1/4 */
+@@ -846,7 +847,8 @@
+     }
+   if (ix < 0x3ff40000) /* 1.25 */
+     {
+-      x = u.value;
++      if ((hx & 0x80000000) != 0)
++	x = -x;
+       i = 8.0 * x;
+       switch (i)
+ 	{
+@@ -891,7 +893,7 @@
+ 	  y += C20a;
+ 	  break;
+ 	}
+-      if (sign & 0x80000000)
++      if (hx & 0x80000000)
+ 	y = 2.0L - y;
+       return y;
+     }
+@@ -899,10 +901,11 @@
+   if (ix < 0x405ac000)
+     {
+       /* x < -9 */
+-      if ((ix >= 0x40220000) && (sign & 0x80000000))
++      if (hx >= 0xc0220000)
+ 	return two - tiny;
+ 
+-      x = fabsl (x);
++      if ((hx & 0x80000000) != 0)
++	x = -x;
+       z = one / (x * x);
+       i = 8.0 / x;
+       switch (i)
+@@ -933,21 +936,17 @@
+ 	  p = neval (z, RNr8, NRNr8) / deval (z, RDr8, NRDr8);
+ 	  break;
+ 	}
+-      u.value = x;
+-      u.parts32.w3 = 0;
+-      u.parts32.w2 = 0;
+-      u.parts32.w1 &= 0xf8000000;
+-      z = u.value;
++      z = (float) x;
+       r = __ieee754_expl (-z * z - 0.5625) *
+ 	__ieee754_expl ((z - x) * (z + x) + p);
+-      if ((sign & 0x80000000) == 0)
++      if ((hx & 0x80000000) == 0)
+ 	return r / x;
+       else
+ 	return two - r / x;
+     }
+   else
+     {
+-      if ((sign & 0x80000000) == 0)
++      if ((hx & 0x80000000) == 0)
+ 	return tiny * tiny;
+       else
+ 	return two - tiny;
diff --git a/SOURCES/glibc-ppc64le-10.patch b/SOURCES/glibc-ppc64le-10.patch
new file mode 100644
index 0000000..ae80fe6
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-10.patch
@@ -0,0 +1,91 @@
+# commit 32c301dfc9b786453e59b61fe4a821a89e1a206b
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:26:39 2013 +0930
+# 
+#     PowerPC floating point little-endian [5 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00085.html
+#     
+#     Rid ourselves of ieee854.
+#     
+#         * sysdeps/ieee754/ldbl-128ibm/ieee754.h (union ieee854_long_double):
+#         Delete.
+#         (IEEE854_LONG_DOUBLE_BIAS): Delete.
+#         * sysdeps/ieee754/ldbl-128ibm/math_ldbl.h: Don't include ieee854
+#         version of math_ldbl.h.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h	2014-05-27 22:10:43.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/ieee754.h	2014-05-27 22:11:10.000000000 -0500
+@@ -112,61 +112,6 @@
+ #define IEEE754_DOUBLE_BIAS	0x3ff /* Added to exponent.  */
+ 
+ 
+-union ieee854_long_double
+-  {
+-    long double d;
+-
+-    /* This is the IEEE 854 quad-precision format.  */
+-    struct
+-      {
+-#if	__BYTE_ORDER == __BIG_ENDIAN
+-	unsigned int negative:1;
+-	unsigned int exponent:15;
+-	/* Together these comprise the mantissa.  */
+-	unsigned int mantissa0:16;
+-	unsigned int mantissa1:32;
+-	unsigned int mantissa2:32;
+-	unsigned int mantissa3:32;
+-#endif				/* Big endian.  */
+-#if	__BYTE_ORDER == __LITTLE_ENDIAN
+-	/* Together these comprise the mantissa.  */
+-	unsigned int mantissa3:32;
+-	unsigned int mantissa2:32;
+-	unsigned int mantissa1:32;
+-	unsigned int mantissa0:16;
+-	unsigned int exponent:15;
+-	unsigned int negative:1;
+-#endif				/* Little endian.  */
+-      } ieee;
+-
+-    /* This format makes it easier to see if a NaN is a signalling NaN.  */
+-    struct
+-      {
+-#if	__BYTE_ORDER == __BIG_ENDIAN
+-	unsigned int negative:1;
+-	unsigned int exponent:15;
+-	unsigned int quiet_nan:1;
+-	/* Together these comprise the mantissa.  */
+-	unsigned int mantissa0:15;
+-	unsigned int mantissa1:32;
+-	unsigned int mantissa2:32;
+-	unsigned int mantissa3:32;
+-#else
+-	/* Together these comprise the mantissa.  */
+-	unsigned int mantissa3:32;
+-	unsigned int mantissa2:32;
+-	unsigned int mantissa1:32;
+-	unsigned int mantissa0:15;
+-	unsigned int quiet_nan:1;
+-	unsigned int exponent:15;
+-	unsigned int negative:1;
+-#endif
+-      } ieee_nan;
+-  };
+-
+-#define IEEE854_LONG_DOUBLE_BIAS 0x3fff /* Added to exponent.  */
+-
+-
+ /* IBM extended format for long double.
+ 
+    Each long double is made up of two IEEE doubles.  The value of the
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-27 22:10:43.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/math_ldbl.h	2014-05-27 22:11:10.000000000 -0500
+@@ -2,7 +2,6 @@
+ #error "Never use <math_ldbl.h> directly; include <math_private.h> instead."
+ #endif
+ 
+-#include <sysdeps/ieee754/ldbl-128/math_ldbl.h>
+ #include <ieee754.h>
+   
+ static inline void
diff --git a/SOURCES/glibc-ppc64le-11.patch b/SOURCES/glibc-ppc64le-11.patch
new file mode 100644
index 0000000..ec12797
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-11.patch
@@ -0,0 +1,113 @@
+# commit 62a728aeff93507ce5975f245a5f1d2046fb4503
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:27:19 2013 +0930
+# 
+#     PowerPC floating point little-endian [6 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00197.html
+#     
+#     A rewrite to make this code correct for little-endian.
+#     
+#         * sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c (mynumber): Replace
+#         union 32-bit int array member with 64-bit int array.
+#         (t515, tm256): Double rather than long double.
+#         (__ieee754_sqrtl): Rewrite using 64-bit arithmetic.
+#
+diff -urN glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c	2014-05-27 22:20:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/e_sqrtl.c	2014-05-27 22:21:39.000000000 -0500
+@@ -34,15 +34,13 @@
+ 
+ #include <math_private.h>
+ 
+-typedef unsigned int int4;
+-typedef union {int4 i[4]; long double x; double d[2]; } mynumber;
++typedef union {int64_t i[2]; long double x; double d[2]; } mynumber;
+ 
+-static const  mynumber
+-  t512 = {{0x5ff00000, 0x00000000, 0x00000000, 0x00000000 }},  /* 2^512  */
+-  tm256 = {{0x2ff00000, 0x00000000, 0x00000000, 0x00000000 }};  /* 2^-256 */
+ static const double
+-two54 = 1.80143985094819840000e+16, /* 0x4350000000000000 */
+-twom54 = 5.55111512312578270212e-17; /* 0x3C90000000000000 */
++  t512 = 0x1p512,
++  tm256 = 0x1p-256,
++  two54 = 0x1p54,	/* 0x4350000000000000 */
++  twom54 = 0x1p-54;	/* 0x3C90000000000000 */
+ 
+ /*********************************************************************/
+ /* An ultimate sqrt routine. Given an IEEE double machine number x   */
+@@ -54,56 +52,53 @@
+   static const long double big = 134217728.0, big1 = 134217729.0;
+   long double t,s,i;
+   mynumber a,c;
+-  int4 k, l, m;
+-  int n;
++  uint64_t k, l;
++  int64_t m, n;
+   double d;
+ 
+   a.x=x;
+-  k=a.i[0] & 0x7fffffff;
++  k=a.i[0] & INT64_C(0x7fffffffffffffff);
+   /*----------------- 2^-1022  <= | x |< 2^1024  -----------------*/
+-  if (k>0x000fffff && k<0x7ff00000) {
++  if (k>INT64_C(0x000fffff00000000) && k<INT64_C(0x7ff0000000000000)) {
+     if (x < 0) return (big1-big1)/(big-big);
+-    l = (k&0x001fffff)|0x3fe00000;
+-    if (((a.i[2] & 0x7fffffff) | a.i[3]) != 0) {
+-      n = (int) ((l - k) * 2) >> 21;
+-      m = (a.i[2] >> 20) & 0x7ff;
++    l = (k&INT64_C(0x001fffffffffffff))|INT64_C(0x3fe0000000000000);
++    if ((a.i[1] & INT64_C(0x7fffffffffffffff)) != 0) {
++      n = (int64_t) ((l - k) * 2) >> 53;
++      m = (a.i[1] >> 52) & 0x7ff;
+       if (m == 0) {
+ 	a.d[1] *= two54;
+-	m = ((a.i[2] >> 20) & 0x7ff) - 54;
++	m = ((a.i[1] >> 52) & 0x7ff) - 54;
+       }
+       m += n;
+-      if ((int) m > 0)
+-	a.i[2] = (a.i[2] & 0x800fffff) | (m << 20);
+-      else if ((int) m <= -54) {
+-	a.i[2] &= 0x80000000;
+-	a.i[3] = 0;
++      if (m > 0)
++	a.i[1] = (a.i[1] & INT64_C(0x800fffffffffffff)) | (m << 52);
++      else if (m <= -54) {
++	a.i[1] &= INT64_C(0x8000000000000000);
+       } else {
+ 	m += 54;
+-	a.i[2] = (a.i[2] & 0x800fffff) | (m << 20);
++	a.i[1] = (a.i[1] & INT64_C(0x800fffffffffffff)) | (m << 52);
+ 	a.d[1] *= twom54;
+       }
+     }
+     a.i[0] = l;
+     s = a.x;
+     d = __ieee754_sqrt (a.d[0]);
+-    c.i[0] = 0x20000000+((k&0x7fe00000)>>1);
++    c.i[0] = INT64_C(0x2000000000000000)+((k&INT64_C(0x7fe0000000000000))>>1);
+     c.i[1] = 0;
+-    c.i[2] = 0;
+-    c.i[3] = 0;
+     i = d;
+     t = 0.5L * (i + s / i);
+     i = 0.5L * (t + s / t);
+     return c.x * i;
+   }
+   else {
+-    if (k>=0x7ff00000) {
+-      if (a.i[0] == 0xfff00000 && a.i[1] == 0)
++    if (k>=INT64_C(0x7ff0000000000000)) {
++      if (a.i[0] == INT64_C(0xfff0000000000000))
+ 	return (big1-big1)/(big-big); /* sqrt (-Inf) = NaN.  */
+       return x; /* sqrt (NaN) = NaN, sqrt (+Inf) = +Inf.  */
+     }
+     if (x == 0) return x;
+     if (x < 0) return (big1-big1)/(big-big);
+-    return tm256.x*__ieee754_sqrtl(x*t512.x);
++    return tm256*__ieee754_sqrtl(x*t512);
+   }
+ }
+ strong_alias (__ieee754_sqrtl, __sqrtl_finite)
diff --git a/SOURCES/glibc-ppc64le-12.patch b/SOURCES/glibc-ppc64le-12.patch
new file mode 100644
index 0000000..5e2d378
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-12.patch
@@ -0,0 +1,75 @@
+# commit 2ca85d2bbbaa60b9c83bf1f57a2801c84e0a3625
+# Author: Anton Blanchard <anton@au1.ibm.com>
+# Date:   Sat Aug 17 18:28:06 2013 +0930
+# 
+#     PowerPC floating point little-endian [7 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00086.html
+#     
+#         * sysdeps/powerpc/bits/mathinline.h (__signbitf): Use builtin.
+#         (__signbit): Likewise.  Correct for little-endian.
+#         (__signbitl): Call __signbit.
+#         (lrint): Correct for little-endian.
+#         (lrintf): Call lrint.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/bits/mathinline.h glibc-2.17-c758a686/sysdeps/powerpc/fpu/bits/mathinline.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/bits/mathinline.h	2014-05-27 22:28:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/bits/mathinline.h	2014-05-27 22:28:37.000000000 -0500
+@@ -62,21 +62,28 @@
+ __MATH_INLINE int
+ __NTH (__signbitf (float __x))
+ {
++#if __GNUC_PREREQ (4, 0)
++  return __builtin_signbitf (__x);
++#else
+   __extension__ union { float __f; int __i; } __u = { __f: __x };
+   return __u.__i < 0;
++#endif
+ }
+ __MATH_INLINE int
+ __NTH (__signbit (double __x))
+ {
+-  __extension__ union { double __d; int __i[2]; } __u = { __d: __x };
+-  return __u.__i[0] < 0;
++#if __GNUC_PREREQ (4, 0)
++  return __builtin_signbit (__x);
++#else
++  __extension__ union { double __d; long long __i; } __u = { __d: __x };
++  return __u.__i < 0;
++#endif
+ }
+ #  ifdef __LONG_DOUBLE_128__
+ __MATH_INLINE int
+ __NTH (__signbitl (long double __x))
+ {
+-  __extension__ union { long double __d; int __i[4]; } __u = { __d: __x };
+-  return __u.__i[0] < 0;
++  return __signbit ((double) __x);
+ }
+ #  endif
+ # endif
+@@ -93,22 +100,17 @@
+ {
+   union {
+     double __d;
+-    int __ll[2];
++    long long __ll;
+   } __u;
+   __asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x));
+-  return __u.__ll[1];
++  return __u.__ll;
+ }
+ 
+ __MATH_INLINE long int lrintf (float __x) __THROW;
+ __MATH_INLINE long int
+ __NTH (lrintf (float __x))
+ {
+-  union {
+-    double __d;
+-    int __ll[2];
+-  } __u;
+-  __asm__ ("fctiw %0,%1" : "=f"(__u.__d) : "f"(__x));
+-  return __u.__ll[1];
++  return lrint ((double) __x);
+ }
+ # endif
+ 
diff --git a/SOURCES/glibc-ppc64le-13.patch b/SOURCES/glibc-ppc64le-13.patch
new file mode 100644
index 0000000..52830a1
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-13.patch
@@ -0,0 +1,283 @@
+# commit 4a28b3ca4bc52d9a3ac0d9edb53d3de510e1b77c
+# Author: Anton Blanchard <anton@au1.ibm.com>
+# Date:   Sat Aug 17 18:28:55 2013 +0930
+# 
+#     PowerPC floating point little-endian [8 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00199.html
+#     
+#     Corrects floating-point environment code for little-endian.
+#     
+#         * sysdeps/powerpc/fpu/fenv_libc.h (fenv_union_t): Replace int
+#         array with long long.
+#         * sysdeps/powerpc/fpu/e_sqrt.c (__slow_ieee754_sqrt): Adjust.
+#         * sysdeps/powerpc/fpu/e_sqrtf.c (__slow_ieee754_sqrtf): Adjust.
+#         * sysdeps/powerpc/fpu/fclrexcpt.c (__feclearexcept): Adjust.
+#         * sysdeps/powerpc/fpu/fedisblxcpt.c (fedisableexcept): Adjust.
+#         * sysdeps/powerpc/fpu/feenablxcpt.c (feenableexcept): Adjust.
+#         * sysdeps/powerpc/fpu/fegetexcept.c (__fegetexcept): Adjust.
+#         * sysdeps/powerpc/fpu/feholdexcpt.c (feholdexcept): Adjust.
+#         * sysdeps/powerpc/fpu/fesetenv.c (__fesetenv): Adjust.
+#         * sysdeps/powerpc/fpu/feupdateenv.c (__feupdateenv): Adjust.
+#         * sysdeps/powerpc/fpu/fgetexcptflg.c (__fegetexceptflag): Adjust.
+#         * sysdeps/powerpc/fpu/fraiseexcpt.c (__feraiseexcept): Adjust.
+#         * sysdeps/powerpc/fpu/fsetexcptflg.c (__fesetexceptflag): Adjust.
+#         * sysdeps/powerpc/fpu/ftestexcept.c (fetestexcept): Adjust.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrt.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrt.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrt.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrt.c	2014-05-27 22:31:43.000000000 -0500
+@@ -145,7 +145,7 @@
+       feraiseexcept (FE_INVALID_SQRT);
+ 
+       fenv_union_t u = { .fenv = fegetenv_register () };
+-      if ((u.l[1] & FE_INVALID) == 0)
++      if ((u.l & FE_INVALID) == 0)
+ #endif
+ 	feraiseexcept (FE_INVALID);
+       x = a_nan.value;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrtf.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrtf.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrtf.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/e_sqrtf.c	2014-05-27 22:31:43.000000000 -0500
+@@ -121,7 +121,7 @@
+       feraiseexcept (FE_INVALID_SQRT);
+ 
+       fenv_union_t u = { .fenv = fegetenv_register () };
+-      if ((u.l[1] & FE_INVALID) == 0)
++      if ((u.l & FE_INVALID) == 0)
+ #endif
+ 	feraiseexcept (FE_INVALID);
+       x = a_nan.value;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fclrexcpt.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fclrexcpt.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fclrexcpt.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fclrexcpt.c	2014-05-27 22:31:43.000000000 -0500
+@@ -28,8 +28,8 @@
+   u.fenv = fegetenv_register ();
+ 
+   /* Clear the relevant bits.  */
+-  u.l[1] = u.l[1] & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID)
+-		      | (excepts & FPSCR_STICKY_BITS));
++  u.l = u.l & ~((-(excepts >> (31 - FPSCR_VX) & 1) & FE_ALL_INVALID)
++		| (excepts & FPSCR_STICKY_BITS));
+ 
+   /* Put the new state in effect.  */
+   fesetenv_register (u.fenv);
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fedisblxcpt.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fedisblxcpt.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fedisblxcpt.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fedisblxcpt.c	2014-05-27 22:31:43.000000000 -0500
+@@ -32,15 +32,15 @@
+ 
+   fe.fenv = fegetenv_register ();
+   if (excepts & FE_INEXACT)
+-    fe.l[1] &= ~(1 << (31 - FPSCR_XE));
++    fe.l &= ~(1 << (31 - FPSCR_XE));
+   if (excepts & FE_DIVBYZERO)
+-    fe.l[1] &= ~(1 << (31 - FPSCR_ZE));
++    fe.l &= ~(1 << (31 - FPSCR_ZE));
+   if (excepts & FE_UNDERFLOW)
+-    fe.l[1] &= ~(1 << (31 - FPSCR_UE));
++    fe.l &= ~(1 << (31 - FPSCR_UE));
+   if (excepts & FE_OVERFLOW)
+-    fe.l[1] &= ~(1 << (31 - FPSCR_OE));
++    fe.l &= ~(1 << (31 - FPSCR_OE));
+   if (excepts & FE_INVALID)
+-    fe.l[1] &= ~(1 << (31 - FPSCR_VE));
++    fe.l &= ~(1 << (31 - FPSCR_VE));
+   fesetenv_register (fe.fenv);
+ 
+   new = __fegetexcept ();
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/feenablxcpt.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/feenablxcpt.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/feenablxcpt.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/feenablxcpt.c	2014-05-27 22:31:43.000000000 -0500
+@@ -32,15 +32,15 @@
+ 
+   fe.fenv = fegetenv_register ();
+   if (excepts & FE_INEXACT)
+-    fe.l[1] |= (1 << (31 - FPSCR_XE));
++    fe.l |= (1 << (31 - FPSCR_XE));
+   if (excepts & FE_DIVBYZERO)
+-    fe.l[1] |= (1 << (31 - FPSCR_ZE));
++    fe.l |= (1 << (31 - FPSCR_ZE));
+   if (excepts & FE_UNDERFLOW)
+-    fe.l[1] |= (1 << (31 - FPSCR_UE));
++    fe.l |= (1 << (31 - FPSCR_UE));
+   if (excepts & FE_OVERFLOW)
+-    fe.l[1] |= (1 << (31 - FPSCR_OE));
++    fe.l |= (1 << (31 - FPSCR_OE));
+   if (excepts & FE_INVALID)
+-    fe.l[1] |= (1 << (31 - FPSCR_VE));
++    fe.l |= (1 << (31 - FPSCR_VE));
+   fesetenv_register (fe.fenv);
+ 
+   new = __fegetexcept ();
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fegetexcept.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fegetexcept.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fegetexcept.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fegetexcept.c	2014-05-27 22:31:43.000000000 -0500
+@@ -27,15 +27,15 @@
+ 
+   fe.fenv = fegetenv_register ();
+ 
+-  if (fe.l[1] & (1 << (31 - FPSCR_XE)))
++  if (fe.l & (1 << (31 - FPSCR_XE)))
+       result |= FE_INEXACT;
+-  if (fe.l[1] & (1 << (31 - FPSCR_ZE)))
++  if (fe.l & (1 << (31 - FPSCR_ZE)))
+       result |= FE_DIVBYZERO;
+-  if (fe.l[1] & (1 << (31 - FPSCR_UE)))
++  if (fe.l & (1 << (31 - FPSCR_UE)))
+       result |= FE_UNDERFLOW;
+-  if (fe.l[1] & (1 << (31 - FPSCR_OE)))
++  if (fe.l & (1 << (31 - FPSCR_OE)))
+       result |= FE_OVERFLOW;
+-  if (fe.l[1] & (1 << (31 - FPSCR_VE)))
++  if (fe.l & (1 << (31 - FPSCR_VE)))
+       result |= FE_INVALID;
+ 
+   return result;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/feholdexcpt.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/feholdexcpt.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/feholdexcpt.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/feholdexcpt.c	2014-05-27 22:33:09.000000000 -0500
+@@ -30,13 +30,12 @@
+ 
+   /* Clear everything except for the rounding modes and non-IEEE arithmetic
+      flag.  */
+-  new.l[1] = old.l[1] & 7;
+-  new.l[0] = old.l[0];
++  new.l = old.l & 0xffffffff00000007LL;
+   
+   /* If the old env had any eabled exceptions, then mask SIGFPE in the
+      MSR FE0/FE1 bits.  This may allow the FPU to run faster because it
+      always takes the default action and can not generate SIGFPE. */
+-  if ((old.l[1] & _FPU_MASK_ALL) != 0)
++  if ((old.l & _FPU_MASK_ALL) != 0)
+     (void)__fe_mask_env ();
+ 
+   /* Put the new state in effect.  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fenv_libc.h glibc-2.17-c758a686/sysdeps/powerpc/fpu/fenv_libc.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fenv_libc.h	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fenv_libc.h	2014-05-27 22:31:43.000000000 -0500
+@@ -69,7 +69,7 @@
+ typedef union
+ {
+   fenv_t fenv;
+-  unsigned int l[2];
++  unsigned long long l;
+ } fenv_union_t;
+ 
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fesetenv.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fesetenv.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fesetenv.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fesetenv.c	2014-05-27 22:35:18.000000000 -0500
+@@ -36,14 +36,14 @@
+      exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits.  This will put the
+      hardware into "precise mode" and may cause the FPU to run slower on some
+      hardware.  */
+-  if ((old.l[1] & _FPU_MASK_ALL) == 0 && (new.l[1] & _FPU_MASK_ALL) != 0)
++  if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0)
+     (void)__fe_nomask_env ();
+   
+   /* If the old env had any enabled exceptions and the new env has no enabled
+      exceptions, then mask SIGFPE in the MSR FE0/FE1 bits.  This may allow the
+      FPU to run faster because it always takes the default action and can not 
+      generate SIGFPE. */
+-  if ((old.l[1] & _FPU_MASK_ALL) != 0 && (new.l[1] & _FPU_MASK_ALL) == 0)
++  if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0)
+     (void)__fe_mask_env ();
+     
+   fesetenv_register (*envp);
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/feupdateenv.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/feupdateenv.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/feupdateenv.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/feupdateenv.c	2014-05-27 22:34:23.000000000 -0500
+@@ -36,20 +36,20 @@
+   /* Restore rounding mode and exception enable from *envp and merge
+      exceptions.  Leave fraction rounded/inexact and FP result/CC bits
+      unchanged.  */
+-  new.l[1] = (old.l[1] & 0x1FFFFF00) | (new.l[1] & 0x1FF80FFF);
++  new.l = (old.l & 0xffffffff1fffff00LL) | (new.l & 0x1ff80fff);
+   
+   /* If the old env has no eabled exceptions and the new env has any enabled
+      exceptions, then unmask SIGFPE in the MSR FE0/FE1 bits.  This will put
+      the hardware into "precise mode" and may cause the FPU to run slower on
+      some hardware.  */
+-  if ((old.l[1] & _FPU_MASK_ALL) == 0 && (new.l[1] & _FPU_MASK_ALL) != 0)
++  if ((old.l & _FPU_MASK_ALL) == 0 && (new.l & _FPU_MASK_ALL) != 0)
+     (void)__fe_nomask_env ();
+   
+   /* If the old env had any eabled exceptions and the new env has no enabled
+      exceptions, then mask SIGFPE in the MSR FE0/FE1 bits.  This may allow the
+      FPU to run faster because it always takes the default action and can not 
+      generate SIGFPE. */
+-  if ((old.l[1] & _FPU_MASK_ALL) != 0 && (new.l[1] & _FPU_MASK_ALL) == 0)
++  if ((old.l & _FPU_MASK_ALL) != 0 && (new.l & _FPU_MASK_ALL) == 0)
+     (void)__fe_mask_env ();
+ 
+   /* Atomically enable and raise (if appropriate) exceptions set in `new'. */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fgetexcptflg.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fgetexcptflg.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fgetexcptflg.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fgetexcptflg.c	2014-05-27 22:31:43.000000000 -0500
+@@ -28,7 +28,7 @@
+   u.fenv = fegetenv_register ();
+ 
+   /* Return (all of) it.  */
+-  *flagp = u.l[1] & excepts & FE_ALL_EXCEPT;
++  *flagp = u.l & excepts & FE_ALL_EXCEPT;
+ 
+   /* Success.  */
+   return 0;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fraiseexcpt.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fraiseexcpt.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fraiseexcpt.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fraiseexcpt.c	2014-05-27 22:31:43.000000000 -0500
+@@ -34,11 +34,11 @@
+   u.fenv = fegetenv_register ();
+ 
+   /* Add the exceptions */
+-  u.l[1] = (u.l[1]
+-	    | (excepts & FPSCR_STICKY_BITS)
+-	    /* Turn FE_INVALID into FE_INVALID_SOFTWARE.  */
+-	    | (excepts >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
+-	       & FE_INVALID_SOFTWARE));
++  u.l = (u.l
++	 | (excepts & FPSCR_STICKY_BITS)
++	 /* Turn FE_INVALID into FE_INVALID_SOFTWARE.  */
++	 | (excepts >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
++	    & FE_INVALID_SOFTWARE));
+ 
+   /* Store the new status word (along with the rest of the environment),
+      triggering any appropriate exceptions.  */
+@@ -50,7 +50,7 @@
+ 	 don't have FE_INVALID_SOFTWARE implemented.  Detect this
+ 	 case and raise FE_INVALID_SNAN instead.  */
+       u.fenv = fegetenv_register ();
+-      if ((u.l[1] & FE_INVALID) == 0)
++      if ((u.l & FE_INVALID) == 0)
+ 	set_fpscr_bit (FPSCR_VXSNAN);
+     }
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fsetexcptflg.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/fsetexcptflg.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fsetexcptflg.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fsetexcptflg.c	2014-05-27 22:31:43.000000000 -0500
+@@ -32,10 +32,10 @@
+   flag = *flagp & excepts;
+ 
+   /* Replace the exception status */
+-  u.l[1] = ((u.l[1] & ~(FPSCR_STICKY_BITS & excepts))
+-	    | (flag & FPSCR_STICKY_BITS)
+-	    | (flag >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
+-	       & FE_INVALID_SOFTWARE));
++  u.l = ((u.l & ~(FPSCR_STICKY_BITS & excepts))
++	 | (flag & FPSCR_STICKY_BITS)
++	 | (flag >> ((31 - FPSCR_VX) - (31 - FPSCR_VXSOFT))
++	    & FE_INVALID_SOFTWARE));
+ 
+   /* Store the new status word (along with the rest of the environment).
+      This may cause floating-point exceptions if the restored state
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/ftestexcept.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/ftestexcept.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/ftestexcept.c	2014-05-27 22:31:42.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/ftestexcept.c	2014-05-27 22:31:43.000000000 -0500
+@@ -28,6 +28,6 @@
+ 
+   /* The FE_INVALID bit is dealt with correctly by the hardware, so we can
+      just:  */
+-  return u.l[1] & excepts;
++  return u.l & excepts;
+ }
+ libm_hidden_def (fetestexcept)
diff --git a/SOURCES/glibc-ppc64le-14.patch b/SOURCES/glibc-ppc64le-14.patch
new file mode 100644
index 0000000..9025fd7
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-14.patch
@@ -0,0 +1,120 @@
+# commit 603e84104cdc709c8e7dcbac54b9a585bf8dff78
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:29:43 2013 +0930
+# 
+#     PowerPC floating point little-endian [9 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00200.html
+#     
+#     This works around the fact that vsx is disabled in current
+#     little-endian gcc.  Also, float constants take 4 bytes in memory
+#     vs. 16 bytes for vector constants, and we don't need to write one lot
+#     of masks for double (register format) and another for float (mem
+#     format).
+#     
+#         * sysdeps/powerpc/fpu/s_float_bitwise.h (__float_and_test28): Don't
+#         use vector int constants.
+#         (__float_and_test24, __float_and8, __float_get_exp): Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_float_bitwise.h glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_float_bitwise.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_float_bitwise.h	2014-05-27 22:37:18.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_float_bitwise.h	2014-05-27 22:37:20.000000000 -0500
+@@ -23,18 +23,19 @@
+ #include <math_private.h>
+ 
+ /* Returns (int)(num & 0x7FFFFFF0 == value) */
+-static inline
+-int __float_and_test28 (float num, float value)
++static inline int
++__float_and_test28 (float num, float value)
+ {
+   float ret;
+ #ifdef _ARCH_PWR7
+-  vector int mask = (vector int) {
+-    0x7ffffffe, 0x00000000, 0x00000000, 0x0000000
+-  };
++  union {
++    int i;
++    float f;
++  } mask = { .i = 0x7ffffff0 };
+   __asm__ (
+-  /* the 'f' constrain is use on mask because we just need
++  /* the 'f' constraint is used on mask because we just need
+    * to compare floats, not full vector */
+-    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask)
++    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
+   );
+ #else
+   int32_t inum;
+@@ -46,16 +47,17 @@
+ }
+ 
+ /* Returns (int)(num & 0x7FFFFF00 == value) */
+-static inline
+-int __float_and_test24 (float num, float value)
++static inline int
++__float_and_test24 (float num, float value)
+ {
+   float ret;
+ #ifdef _ARCH_PWR7
+-  vector int mask = (vector int) {
+-    0x7fffffe0, 0x00000000, 0x00000000, 0x0000000
+-  };
++  union {
++    int i;
++    float f;
++  } mask = { .i = 0x7fffff00 };
+   __asm__ (
+-    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask)
++    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
+   );
+ #else
+   int32_t inum;
+@@ -67,16 +69,17 @@
+ }
+ 
+ /* Returns (float)(num & 0x7F800000) */
+-static inline
+-float __float_and8 (float num)
++static inline float
++__float_and8 (float num)
+ {
+   float ret;
+ #ifdef _ARCH_PWR7
+-  vector int mask = (vector int) {
+-    0x7ff00000, 0x00000000, 0x00000000, 0x00000000
+-  };
++  union {
++    int i;
++    float f;
++  } mask = { .i = 0x7f800000 };
+   __asm__ (
+-    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask)
++    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
+   );
+ #else
+   int32_t inum;
+@@ -88,17 +91,18 @@
+ }
+ 
+ /* Returns ((int32_t)(num & 0x7F800000) >> 23) */
+-static inline
+-int32_t __float_get_exp (float num)
++static inline int32_t
++__float_get_exp (float num)
+ {
+   int32_t inum;
+ #ifdef _ARCH_PWR7
+   float ret;
+-  vector int mask = (vector int) {
+-    0x7ff00000, 0x00000000, 0x00000000, 0x00000000
+-  };
++  union {
++    int i;
++    float f;
++  } mask = { .i = 0x7f800000 };
+   __asm__ (
+-    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask)
++    "xxland %x0,%x1,%x2" : "=f" (ret) : "f" (num), "f" (mask.f)
+   );
+   GET_FLOAT_WORD(inum, ret);
+ #else
diff --git a/SOURCES/glibc-ppc64le-15.patch b/SOURCES/glibc-ppc64le-15.patch
new file mode 100644
index 0000000..29b3b54
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-15.patch
@@ -0,0 +1,119 @@
+# commit da13146da10360436941e843834c90a9aef5fd7a
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:30:23 2013 +0930
+# 
+#     PowerPC floating point little-endian [10 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00201.html
+#     
+#     These two functions oddly test x+1>0 when a double x is >= 0.0, and
+#     similarly when x is negative.  I don't see the point of that since the
+#     test should always be true.  I also don't see any need to convert x+1
+#     to integer rather than simply using xr+1.  Note that the standard
+#     allows these functions to return any value when the input is outside
+#     the range of long long, but it's not too hard to prevent xr+1
+#     overflowing so that's what I've done.
+#     
+#     (With rounding mode FE_UPWARD, x+1 can be a lot more than what you
+#     might naively expect, but perhaps that situation was covered by the
+#     x - xrf < 1.0 test.)
+#     
+#         * sysdeps/powerpc/fpu/s_llround.c (__llround): Rewrite.
+#         * sysdeps/powerpc/fpu/s_llroundf.c (__llroundf): Rewrite.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llround.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llround.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llround.c	2014-05-27 22:38:55.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llround.c	2014-05-27 22:38:58.000000000 -0500
+@@ -19,29 +19,28 @@
+ #include <math.h>
+ #include <math_ldbl_opt.h>
+ 
+-/* I think that what this routine is supposed to do is round a value
+-   to the nearest integer, with values exactly on the boundary rounded
+-   away from zero.  */
+-/* This routine relies on (long long)x, when x is out of range of a long long,
+-   clipping to MAX_LLONG or MIN_LLONG.  */
++/* Round to the nearest integer, with values exactly on a 0.5 boundary
++   rounded away from zero, regardless of the current rounding mode.
++   If (long long)x, when x is out of range of a long long, clips at
++   LLONG_MAX or LLONG_MIN, then this implementation also clips.  */
+ 
+ long long int
+ __llround (double x)
+ {
+-  double xrf;
+-  long long int xr;
+-  xr = (long long int) x;
+-  xrf = (double) xr;
++  long long xr = (long long) x;
++  double xrf = (double) xr;
++
+   if (x >= 0.0)
+-    if (x - xrf >= 0.5 && x - xrf < 1.0 && x+1 > 0)
+-      return x+1;
+-    else
+-      return x;
++    {
++      if (x - xrf >= 0.5)
++	xr += (long long) ((unsigned long long) xr + 1) > 0;
++    }
+   else
+-    if (xrf - x >= 0.5 && xrf - x < 1.0 && x-1 < 0)
+-      return x-1;
+-    else
+-      return x;
++    {
++      if (xrf - x >= 0.5)
++	xr -= (long long) ((unsigned long long) xr - 1) < 0;
++    }
++  return xr;
+ }
+ weak_alias (__llround, llround)
+ #ifdef NO_LONG_DOUBLE
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llroundf.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llroundf.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llroundf.c	2014-05-27 22:38:55.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/s_llroundf.c	2014-05-27 22:38:58.000000000 -0500
+@@ -18,28 +18,27 @@
+ 
+ #include <math.h>
+ 
+-/* I think that what this routine is supposed to do is round a value
+-   to the nearest integer, with values exactly on the boundary rounded
+-   away from zero.  */
+-/* This routine relies on (long long)x, when x is out of range of a long long,
+-   clipping to MAX_LLONG or MIN_LLONG.  */
++/* Round to the nearest integer, with values exactly on a 0.5 boundary
++   rounded away from zero, regardless of the current rounding mode.
++   If (long long)x, when x is out of range of a long long, clips at
++   LLONG_MAX or LLONG_MIN, then this implementation also clips.  */
+ 
+ long long int
+ __llroundf (float x)
+ {
+-  float xrf;
+-  long long int xr;
+-  xr = (long long int) x;
+-  xrf = (float) xr;
++  long long xr = (long long) x;
++  float xrf = (float) xr;
++
+   if (x >= 0.0)
+-    if (x - xrf >= 0.5 && x - xrf < 1.0 && x+1 > 0)
+-      return x+1;
+-    else
+-      return x;
++    {
++      if (x - xrf >= 0.5)
++	xr += (long long) ((unsigned long long) xr + 1) > 0;
++    }
+   else
+-    if (xrf - x >= 0.5 && xrf - x < 1.0 && x-1 < 0)
+-      return x-1;
+-    else
+-      return x;
++    {
++      if (xrf - x >= 0.5)
++	xr -= (long long) ((unsigned long long) xr - 1) < 0;
++    }
++  return xr;
+ }
+ weak_alias (__llroundf, llroundf)
diff --git a/SOURCES/glibc-ppc64le-16.patch b/SOURCES/glibc-ppc64le-16.patch
new file mode 100644
index 0000000..0da0865
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-16.patch
@@ -0,0 +1,163 @@
+# commit 9c008155b7d5d1bd81d909497850a2ece28aec50
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:31:05 2013 +0930
+# 
+#     PowerPC floating point little-endian [11 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00202.html
+#     
+#     Another little-endian fix.
+#     
+#         * sysdeps/powerpc/fpu_control.h (_FPU_GETCW): Rewrite using
+#         64-bit int/double union.
+#         (_FPU_SETCW): Likewise.
+#         * sysdeps/powerpc/fpu/tst-setcontext-fpscr.c (_GET_DI_FPSCR): Likewise.
+#         (_SET_DI_FPSCR, _GET_SI_FPSCR, _SET_SI_FPSCR): Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/fpu_control.h glibc-2.17-c758a686/sysdeps/powerpc/fpu/fpu_control.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/fpu_control.h	2014-05-27 22:40:18.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/fpu_control.h	2014-05-27 22:43:40.000000000 -0500
+@@ -45,22 +45,26 @@
+ #define _FPU_IEEE     0x000000f0
+ 
+ /* Type of the control word.  */
+-typedef unsigned int fpu_control_t __attribute__ ((__mode__ (__SI__)));
++typedef unsigned int fpu_control_t;
+ 
+ /* Macros for accessing the hardware control word.  */
+-#define _FPU_GETCW(__cw) ( { \
+-  union { double d; fpu_control_t cw[2]; } \
+-    tmp __attribute__ ((__aligned__(8))); \
+-  __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0"); \
+-  (__cw)=tmp.cw[1]; \
+-  tmp.cw[1]; } )
+-#define _FPU_SETCW(__cw) { \
+-  union { double d; fpu_control_t cw[2]; } \
+-    tmp __attribute__ ((__aligned__(8))); \
+-  tmp.cw[0] = 0xFFF80000; /* More-or-less arbitrary; this is a QNaN. */ \
+-  tmp.cw[1] = __cw; \
+-  __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0"); \
+-}
++#define _FPU_GETCW(cw)						\
++  ({union { double __d; unsigned long long __ll; } __u;		\
++    register double __fr;					\
++    __asm__ ("mffs %0" : "=f" (__fr));				\
++    __u.__d = __fr;						\
++    (cw) = (fpu_control_t) __u.__ll;				\
++    (fpu_control_t) __u.__ll;					\
++  })
++
++#define _FPU_SETCW(cw)						\
++  { union { double __d; unsigned long long __ll; } __u;		\
++    register double __fr;					\
++    __u.__ll = 0xfff80000LL << 32; /* This is a QNaN.  */	\
++    __u.__ll |= (cw) & 0xffffffffLL;				\
++    __fr = __u.__d;						\
++    __asm__ ("mtfsf 255,%0" : : "f" (__fr));			\
++  }
+ 
+ /* Default control word set at startup.  */
+ extern fpu_control_t __fpu_control;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c glibc-2.17-c758a686/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c	2014-05-27 22:40:18.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/tst-setcontext-fpscr.c	2014-05-27 22:40:21.000000000 -0500
+@@ -83,7 +83,7 @@
+   return 0;
+ }
+ 
+-typedef unsigned long long di_fpscr_t __attribute__ ((__mode__ (__DI__)));
++typedef unsigned int di_fpscr_t __attribute__ ((__mode__ (__DI__)));
+ typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__)));
+ 
+ #define _FPSCR_RESERVED 0xfffffff8ffffff04ULL
+@@ -95,50 +95,51 @@
+ #define _FPSCR_TEST1_RN  0x0000000000000002ULL
+ 
+ /* Macros for accessing the hardware control word on Power6[x].  */
+-# define _GET_DI_FPSCR(__fpscr) ({					     \
+-   union { double d;							     \
+-           di_fpscr_t fpscr; }						     \
+-     tmp __attribute__ ((__aligned__(8)));				     \
+-   __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0");		     \
+-   (__fpscr)=tmp.fpscr;							     \
+-   tmp.fpscr; })
++#define _GET_DI_FPSCR(__fpscr)						\
++  ({union { double d; di_fpscr_t fpscr; } u;				\
++    register double fr;							\
++    __asm__ ("mffs %0" : "=f" (fr));					\
++    u.d = fr;								\
++    (__fpscr) = u.fpscr;						\
++    u.fpscr;								\
++  })
+ 
+-/* We make sure to zero fp0 after we use it in order to prevent stale data
++/* We make sure to zero fp after we use it in order to prevent stale data
+    in an fp register from making a test-case pass erroneously.  */
+-# define _SET_DI_FPSCR(__fpscr) {					     \
+-  union { double d; di_fpscr_t fpscr; }					     \
+-    tmp __attribute__ ((__aligned__(8)));				     \
+-  tmp.fpscr = __fpscr;							     \
+-  /* Set the entire 64-bit FPSCR.  */					     \
+-  __asm__ ("lfd%U0 0,%0; "						     \
+-	   ".machine push; "						     \
+-	   ".machine \"power6\"; "					     \
+-	   "mtfsf 255,0,1,0; "						     \
+-	   ".machine pop" : : "m" (tmp.d) : "fr0");			     \
+-  tmp.d = 0;								     \
+-  __asm__("lfd%U0 0,%0" : : "m" (tmp.d) : "fr0");			     \
+-}
+-
+-# define _GET_SI_FPSCR(__fpscr) ({					     \
+-   union { double d;							     \
+-           si_fpscr_t cw[2]; }						     \
+-     tmp __attribute__ ((__aligned__(8)));				     \
+-   __asm__ ("mffs 0; stfd%U0 0,%0" : "=m" (tmp.d) : : "fr0");		     \
+-   (__fpscr)=tmp.cw[1];							     \
+-   tmp.cw[0]; })
++# define _SET_DI_FPSCR(__fpscr)						\
++  { union { double d; di_fpscr_t fpscr; } u;				\
++    register double fr;							\
++    u.fpscr = __fpscr;							\
++    fr = u.d;								\
++    /* Set the entire 64-bit FPSCR.  */					\
++    __asm__ (".machine push; "						\
++	     ".machine \"power6\"; "					\
++	     "mtfsf 255,%0,1,0; "					\
++	     ".machine pop" : : "f" (fr));				\
++    fr = 0.0;								\
++  }
++
++# define _GET_SI_FPSCR(__fpscr)						\
++  ({union { double d; di_fpscr_t fpscr; } u;				\
++    register double fr;							\
++    __asm__ ("mffs %0" : "=f" (fr));					\
++    u.d = fr;								\
++    (__fpscr) = (si_fpscr_t) u.fpscr;					\
++    (si_fpscr_t) u.fpscr;						\
++  })
+ 
+-/* We make sure to zero fp0 after we use it in order to prevent stale data
++/* We make sure to zero fp after we use it in order to prevent stale data
+    in an fp register from making a test-case pass erroneously.  */
+-# define _SET_SI_FPSCR(__fpscr) {					     \
+-  union { double d; si_fpscr_t fpscr[2]; }				     \
+-    tmp __attribute__ ((__aligned__(8)));				     \
+-  /* More-or-less arbitrary; this is a QNaN. */				     \
+-  tmp.fpscr[0] = 0xFFF80000;						     \
+-  tmp.fpscr[1] = __fpscr;						     \
+-  __asm__ ("lfd%U0 0,%0; mtfsf 255,0" : : "m" (tmp.d) : "fr0");		     \
+-  tmp.d = 0;								     \
+-  __asm__("lfd%U0 0,%0" : : "m" (tmp.d) : "fr0");			     \
+-}
++# define _SET_SI_FPSCR(__fpscr)						\
++  { union { double d; di_fpscr_t fpscr; } u;				\
++    register double fr;							\
++    /* More-or-less arbitrary; this is a QNaN. */			\
++    u.fpscr = 0xfff80000ULL << 32;					\
++    u.fpscr |= __fpscr & 0xffffffffULL;					\
++    fr = u.d;								\
++    __asm__ ("mtfsf 255,%0" : : "f" (fr));				\
++    fr = 0.0;								\
++  }
+ 
+ void prime_special_regs(int which)
+ {
diff --git a/SOURCES/glibc-ppc64le-17.patch b/SOURCES/glibc-ppc64le-17.patch
new file mode 100644
index 0000000..5ed69a9
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-17.patch
@@ -0,0 +1,312 @@
+# commit 7b88401f3b25325b1381798a0eccb3efe7751fec
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:31:45 2013 +0930
+# 
+#     PowerPC floating point little-endian [12 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00087.html
+#     
+#     Fixes for little-endian in 32-bit assembly.
+#     
+#         * sysdeps/powerpc/sysdep.h (LOWORD, HIWORD, HISHORT): Define.
+#         * sysdeps/powerpc/powerpc32/fpu/s_copysign.S: Load little-endian
+#         words of double from correct stack offsets.
+#         * sysdeps/powerpc/powerpc32/fpu/s_copysignl.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/fpu/s_lrint.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S: Use HISHORT.
+#         * sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysign.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysign.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysign.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysign.S	2014-05-27 22:45:46.000000000 -0500
+@@ -29,7 +29,7 @@
+ 	stwu	r1,-16(r1)
+ 	cfi_adjust_cfa_offset (16)
+ 	stfd	fp2,8(r1)
+-	lwz	r3,8(r1)
++	lwz	r3,8+HIWORD(r1)
+ 	cmpwi   r3,0
+ 	addi    r1,r1,16
+ 	cfi_adjust_cfa_offset (-16)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_copysignl.S	2014-05-27 22:45:46.000000000 -0500
+@@ -30,7 +30,7 @@
+ 	fmr	fp0,fp1
+ 	fabs	fp1,fp1
+ 	fcmpu	cr7,fp0,fp1
+-	lwz	r3,8(r1)
++	lwz	r3,8+HIWORD(r1)
+ 	cmpwi	cr6,r3,0
+ 	addi	r1,r1,16
+ 	cfi_adjust_cfa_offset (-16)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lrint.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lrint.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lrint.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lrint.S	2014-05-27 22:45:46.000000000 -0500
+@@ -24,10 +24,10 @@
+ 	stwu	r1,-16(r1)
+ 	fctiw	fp13,fp1
+ 	stfd	fp13,8(r1)
+-	nop	/* Insure the following load is in a different dispatch group */
++	nop	/* Ensure the following load is in a different dispatch group */
+ 	nop	/* to avoid pipe stall on POWER4&5.  */
+ 	nop
+-	lwz	r3,12(r1)
++	lwz	r3,8+LOWORD(r1)
+ 	addi	r1,r1,16
+ 	blr
+ 	END (__lrint)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lround.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lround.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lround.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_lround.S	2014-05-27 22:45:46.000000000 -0500
+@@ -67,7 +67,7 @@
+ 	nop	/* Ensure the following load is in a different dispatch  */
+ 	nop	/* group to avoid pipe stall on POWER4&5.  */
+ 	nop
+-	lwz	r3,12(r1)	/* Load return as integer.  */
++	lwz	r3,8+LOWORD(r1)	/* Load return as integer.  */
+ .Lout:
+ 	addi	r1,r1,16
+ 	blr
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrint.S	2014-05-27 22:48:09.000000000 -0500
+@@ -29,8 +29,8 @@
+ 	nop	/* Insure the following load is in a different dispatch group */
+ 	nop	/* to avoid pipe stall on POWER4&5.  */
+ 	nop
+-	lwz	r3,8(r1)
+-	lwz	r4,12(r1)
++	lwz	r3,8+HIWORD(r1)
++	lwz	r4,8+LOWORD(r1)
+ 	addi	r1,r1,16	
+ 	blr
+ 	END (__llrint)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llrintf.S	2014-05-27 22:48:44.000000000 -0500
+@@ -28,8 +28,8 @@
+ 	nop	/* Insure the following load is in a different dispatch group */
+ 	nop	/* to avoid pipe stall on POWER4&5.  */
+ 	nop
+-	lwz	r3,8(r1)
+-	lwz	r4,12(r1)
++	lwz	r3,8+HIWORD(r1)
++	lwz	r4,8+LOWORD(r1)
+ 	addi	r1,r1,16	
+ 	blr
+ 	END (__llrintf)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5/fpu/s_isnan.S	2014-05-27 22:45:46.000000000 -0500
+@@ -27,8 +27,8 @@
+ 	ori	r1,r1,0
+ 	stfd	fp1,24(r1)	/* copy FPR to GPR */
+ 	ori	r1,r1,0
+-	lwz	r4,24(r1)
+-	lwz	r5,28(r1)
++	lwz	r4,24+HIWORD(r1)
++	lwz	r5,24+LOWORD(r1)
+ 	lis	r0,0x7ff0	/* const long r0 0x7ff00000 00000000 */
+ 	clrlwi	r4,r4,1		/* x = fabs(x) */
+ 	cmpw	cr7,r4,r0	/* if (fabs(x) =< inf) */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_llround.S	2014-05-27 22:45:46.000000000 -0500
+@@ -39,8 +39,8 @@
+ 	nop	/* Ensure the following load is in a different dispatch  */
+ 	nop	/* group to avoid pipe stall on POWER4&5.  */
+ 	nop
+-	lwz	r4,12(r1)
+-	lwz	r3,8(r1)
++	lwz	r3,8+HIWORD(r1)
++	lwz	r4,8+LOWORD(r1)
+ 	addi	r1,r1,16
+ 	blr
+ 	END (__llround)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power5+/fpu/s_lround.S	2014-05-27 22:45:46.000000000 -0500
+@@ -38,7 +38,7 @@
+ 	nop	/* Ensure the following load is in a different dispatch  */
+ 	nop	/* group to avoid pipe stall on POWER4&5.  */
+ 	nop
+-	lwz	r3,12(r1)
++	lwz	r3,8+LOWORD(r1)
+ 	addi	r1,r1,16
+ 	blr
+ 	END (__lround)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_isnan.S	2014-05-27 22:45:46.000000000 -0500
+@@ -27,8 +27,8 @@
+ 	ori	r1,r1,0
+ 	stfd	fp1,24(r1)	/* copy FPR to GPR */
+ 	ori	r1,r1,0
+-	lwz	r4,24(r1)
+-	lwz	r5,28(r1)
++	lwz	r4,24+HIWORD(r1)
++	lwz	r5,24+LOWORD(r1)
+ 	lis	r0,0x7ff0	/* const long r0 0x7ff00000 00000000 */
+ 	clrlwi	r4,r4,1		/* x = fabs(x) */
+ 	cmpw	cr7,r4,r0	/* if (fabs(x) =< inf) */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrint.S	2014-05-27 22:46:52.000000000 -0500
+@@ -29,8 +29,8 @@
+ /* Insure the following load is in a different dispatch group by
+    inserting "group ending nop".  */
+ 	ori	r1,r1,0
+-	lwz	r3,8(r1)
+-	lwz	r4,12(r1)
++	lwz	r3,8+HIWORD(r1)
++	lwz	r4,8+LOWORD(r1)
+ 	addi	r1,r1,16	
+ 	blr
+ 	END (__llrint)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llrintf.S	2014-05-27 22:47:29.000000000 -0500
+@@ -28,8 +28,8 @@
+ /* Insure the following load is in a different dispatch group by
+    inserting "group ending nop".  */
+ 	ori	r1,r1,0
+-	lwz	r3,8(r1)
+-	lwz	r4,12(r1)
++	lwz	r3,8+HIWORD(r1)
++	lwz	r4,8+LOWORD(r1)
+ 	addi	r1,r1,16	
+ 	blr
+ 	END (__llrintf)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/fpu/s_llround.S	2014-05-27 22:45:46.000000000 -0500
+@@ -39,8 +39,8 @@
+ /* Insure the following load is in a different dispatch group by
+    inserting "group ending nop".  */
+ 	ori	r1,r1,0
+-	lwz	r4,12(r1)
+-	lwz	r3,8(r1)
++	lwz	r3,8+HIWORD(r1)
++	lwz	r4,8+LOWORD(r1)
+ 	addi	r1,r1,16
+ 	blr
+ 	END (__llround)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S	2014-05-27 22:45:46.000000000 -0500
+@@ -54,9 +54,8 @@
+ 	stfd    fp1,8(r1)     /* Transfer FP to GPR's.  */
+ 
+ 	ori	2,2,0	      /* Force a new dispatch group.  */
+-	lhz     r0,8(r1)      /* Fetch the upper portion of the high word of
+-			      the FP value (where the exponent and sign bits
+-			      are).  */
++	lhz	r0,8+HISHORT(r1) /* Fetch the upper 16 bits of the FP value
++				    (biased exponent and sign bit).  */
+ 	clrlwi	r0,r0,17      /* r0 = abs(r0).  */
+ 	addi	r1,r1,16      /* Reset the stack pointer.  */
+ 	cmpwi	cr7,r0,0x7ff0 /* r4 == 0x7ff0?.  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S	2014-05-27 22:45:46.000000000 -0500
+@@ -48,14 +48,13 @@
+ 	li	r3,0
+ 	bflr    29	      /* If not INF, return.  */
+ 
+-	/* Either we have -INF/+INF or a denormal.  */
++	/* Either we have +INF or -INF.  */
+ 
+ 	stwu    r1,-16(r1)    /* Allocate stack space.  */
+ 	stfd    fp1,8(r1)     /* Transfer FP to GPR's.  */
+ 	ori	2,2,0	      /* Force a new dispatch group.  */
+-	lhz	r4,8(r1)      /* Fetch the upper portion of the high word of
+-			      the FP value (where the exponent and sign bits
+-			      are).  */
++	lhz	r4,8+HISHORT(r1) /* Fetch the upper 16 bits of the FP value
++				    (biased exponent and sign bit).  */
+ 	addi	r1,r1,16      /* Reset the stack pointer.  */
+ 	cmpwi	cr7,r4,0x7ff0 /* r4 == 0x7ff0?  */
+ 	li	r3,1
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S	2014-05-27 22:45:46.000000000 -0500
+@@ -53,8 +53,8 @@
+ 	stwu	r1,-16(r1)    /* Allocate stack space.  */
+ 	stfd	fp1,8(r1)     /* Transfer FP to GPR's.  */
+ 	ori	2,2,0	      /* Force a new dispatch group.  */
+-	lwz     r4,8(r1)      /* Load the upper half of the FP value.  */
+-	lwz     r5,12(r1)     /* Load the lower half of the FP value.  */
++	lwz     r4,8+HIWORD(r1) /* Load the upper half of the FP value.  */
++	lwz     r5,8+LOWORD(r1) /* Load the lower half of the FP value.  */
+ 	addi	r1,r1,16      /* Reset the stack pointer.  */
+ 	lis     r0,0x7ff0     /* Load the upper portion for an INF/NaN.  */
+ 	clrlwi  r4,r4,1	      /* r4 = abs(r4).  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S	2014-05-27 22:45:46.000000000 -0500
+@@ -39,10 +39,8 @@
+ 
+ 	stfd    fp1,-16(r1)   /* Transfer FP to GPR's.  */
+ 	ori	2,2,0	      /* Force a new dispatch group.  */
+-
+-	lhz     r4,-16(r1)    /* Fetch the upper portion of the high word of
+-			      the FP value (where the exponent and sign bits
+-			      are).  */
++	lhz     r4,-16+HISHORT(r1)  /* Fetch the upper 16 bits of the FP value
++				    (biased exponent and sign bit).  */
+ 	clrlwi  r4,r4,17      /* r4 = abs(r4).  */
+ 	cmpwi   cr7,r4,0x7ff0 /* r4 == 0x7ff0?  */
+ 	bltlr   cr7	      /* LT means finite, other non-finite.  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S	2014-05-27 22:45:46.000000000 -0500
+@@ -38,9 +38,8 @@
+ 
+ 	stfd    fp1,-16(r1)   /* Transfer FP to GPR's.  */
+ 	ori	2,2,0	      /* Force a new dispatch group.  */
+-	lhz	r4,-16(r1)    /* Fetch the upper portion of the high word of
+-			      the FP value (where the exponent and sign bits
+-			      are).  */
++	lhz	r4,-16+HISHORT(r1)  /* Fetch the upper 16 bits of the FP value
++				    (biased exponent and sign bit).  */
+ 	cmpwi	cr7,r4,0x7ff0 /* r4 == 0x7ff0?  */
+ 	li	r3,1
+ 	beqlr   cr7	      /* EQ means INF, otherwise -INF.  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/sysdep.h glibc-2.17-c758a686/sysdeps/powerpc/sysdep.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/sysdep.h	2014-05-27 22:45:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/sysdep.h	2014-05-27 22:45:46.000000000 -0500
+@@ -144,6 +144,21 @@
+ 
+ #define VRSAVE	256
+ 
++/* The 32-bit words of a 64-bit dword are at these offsets in memory.  */
++#if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN
++# define LOWORD 0
++# define HIWORD 4
++#else
++# define LOWORD 4
++# define HIWORD 0
++#endif
++
++/* The high 16-bit word of a 64-bit dword is at this offset in memory.  */
++#if defined __LITTLE_ENDIAN__ || defined _LITTLE_ENDIAN
++# define HISHORT 6
++#else
++# define HISHORT 0
++#endif
+ 
+ /* This seems to always be the case on PPC.  */
+ #define ALIGNARG(log2) log2
diff --git a/SOURCES/glibc-ppc64le-18.patch b/SOURCES/glibc-ppc64le-18.patch
new file mode 100644
index 0000000..f5e327e
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-18.patch
@@ -0,0 +1,81 @@
+# commit 6a31fe7f9cce72b69fce8fe499a2c6ad492c2311
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:32:18 2013 +0930
+# 
+#     PowerPC floating point little-endian [13 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00088.html
+#     
+#         * sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Increase alignment of
+#         constants to usual value for .cst8 section, and remove redundant
+#         high address load.
+#         * sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S: Use float
+#         constant for 0x1p52.  Load little-endian words of double from
+#         correct stack offsets.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_roundf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_roundf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_roundf.S	2014-05-27 22:50:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/s_roundf.S	2014-05-27 22:50:13.000000000 -0500
+@@ -19,7 +19,7 @@
+ #include <sysdep.h>
+ 
+ 	.section	.rodata.cst8,"aM",@progbits,8
+-	.align	2
++	.align	3
+ .LC0:	/* 2**23 */
+ 	.long 0x4b000000
+ .LC1:	/* 0.5 */
+@@ -60,7 +60,6 @@
+ #ifdef SHARED
+ 	lfs	fp10,.LC1-.LC0(r9)
+ #else
+-	lis	r9,.LC1@ha
+ 	lfs	fp10,.LC1@l(r9)
+ #endif
+ 	ble-	cr6,.L4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S	2014-05-27 22:50:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S	2014-05-27 22:50:13.000000000 -0500
+@@ -19,12 +19,10 @@
+ #include <sysdep.h>
+ #include <math_ldbl_opt.h>
+ 
+- .section .rodata.cst12,"aM",@progbits,12
++ .section .rodata.cst8,"aM",@progbits,8
+  .align 3
+- .LC0:   /* 0x1.0000000000000p+52 == 2^52 */
+-	.long 0x43300000
+-	.long 0x00000000
+-	.long 0x3f000000 /* Use this for 0.5  */
++ .LC0:	.long (52+127)<<23 /* 0x1p+52  */
++	.long (-1+127)<<23 /* 0.5  */
+ 
+ 	.section	".text"
+ 
+@@ -57,12 +55,12 @@
+ 	addi	r9,r9,.LC0-got_label@l
+ 	mtlr	r11
+ 	cfi_same_value (lr)
+-	lfd	fp9,0(r9)
+-	lfs	fp10,8(r9)
++	lfs	fp9,0(r9)
++	lfs	fp10,4(r9)
+ #else
+ 	lis r9,.LC0@ha
+-	lfd fp9,.LC0@l(r9)	/* Load 2^52 into fpr9.  */
+-	lfs fp10,.LC0@l+8(r9)	/* Load 0.5 into fpr10.  */
++	lfs fp9,.LC0@l(r9)	/* Load 2^52 into fpr9.  */
++	lfs fp10,.LC0@l+4(r9)	/* Load 0.5 into fpr10.  */
+ #endif
+ 	fabs	fp2,fp1		/* Get the absolute value of x.  */
+ 	fsub	fp12,fp10,fp10	/* Compute 0.0 into fpr12.  */
+@@ -80,8 +78,8 @@
+ 	nop
+ 	nop
+ 	nop
+-	lwz	r4,12(r1)	/* Load return as integer.  */
+-	lwz	r3,8(r1)
++	lwz	r3,8+HIWORD(r1)	/* Load return as integer.  */
++	lwz	r4,8+LOWORD(r1)
+ .Lout:
+ 	addi	r1,r1,16
+ 	blr
diff --git a/SOURCES/glibc-ppc64le-19.patch b/SOURCES/glibc-ppc64le-19.patch
new file mode 100644
index 0000000..bbf7228
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-19.patch
@@ -0,0 +1,110 @@
+# commit 76a66d510a3737674563133a420f4fd22da42c1b
+# Author: Anton Blanchard <anton@au1.ibm.com>
+# Date:   Sat Aug 17 18:33:02 2013 +0930
+# 
+#     PowerPC floating point little-endian [14 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00205.html
+#     
+#     These all wrongly specified float constants in a 64-bit word.
+#     
+#         * sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Correct float constants
+#         for little-endian.
+#         * sysdeps/powerpc/powerpc64/fpu/s_floorf.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/fpu/s_rintf.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/fpu/s_roundf.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/fpu/s_truncf.S: Likewise.
+#
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S	2014-05-27 22:52:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_ceilf.S	2014-05-27 22:52:18.000000000 -0500
+@@ -19,8 +19,10 @@
+ #include <sysdep.h>
+ 
+ 	.section	".toc","aw"
++	.p2align 3
+ .LC0:	/* 2**23 */
+-	.tc FD_4b000000_0[TC],0x4b00000000000000
++	.long 0x4b000000
++	.long 0x0
+ 	.section	".text"
+ 
+ EALIGN (__ceilf, 4, 0)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_floorf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_floorf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_floorf.S	2014-05-27 22:52:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_floorf.S	2014-05-27 22:52:18.000000000 -0500
+@@ -19,8 +19,10 @@
+ #include <sysdep.h>
+ 
+ 	.section	".toc","aw"
++	.p2align 3
+ .LC0:	/* 2**23 */
+-	.tc FD_4b000000_0[TC],0x4b00000000000000
++	.long 0x4b000000
++	.long 0x0
+ 	.section	".text"
+ 
+ EALIGN (__floorf, 4, 0)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S	2014-05-27 22:52:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S	2014-05-27 22:52:18.000000000 -0500
+@@ -26,8 +26,10 @@
+ /* float [fp1] nearbyintf(float [fp1]) */
+ 
+ 	.section	".toc","aw"
++	.p2align 3
+ .LC0:	/* 2**23 */
+-	.tc FD_4b000000_0[TC],0x4b00000000000000
++	.long 0x4b000000
++	.long 0x0
+ 	.section	".text"
+ 
+ EALIGN (__nearbyintf, 4, 0)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_rintf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_rintf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_rintf.S	2014-05-27 22:52:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_rintf.S	2014-05-27 22:52:18.000000000 -0500
+@@ -19,8 +19,10 @@
+ #include <sysdep.h>
+ 
+ 	.section	".toc","aw"
++	.p2align 3
+ .LC0:	/* 2**23 */
+-	.tc FD_4b000000_0[TC],0x4b00000000000000
++	.long 0x4b000000
++	.long 0x0
+ 	.section	".text"
+ 
+ EALIGN (__rintf, 4, 0)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_roundf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_roundf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_roundf.S	2014-05-27 22:52:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_roundf.S	2014-05-27 22:52:18.000000000 -0500
+@@ -19,10 +19,12 @@
+ #include <sysdep.h>
+ 
+ 	.section	".toc","aw"
++	.p2align 3
+ .LC0:	/* 2**23 */
+-	.tc FD_4b000000_0[TC],0x4b00000000000000
++	.long 0x4b000000
+ .LC1:	/* 0.5 */
+-	.tc FD_3f000000_0[TC],0x3f00000000000000
++	.long 0x3f000000
++
+ 	.section	".text"
+ 	
+ /* float [fp1] roundf  (float x [fp1])
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_truncf.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_truncf.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_truncf.S	2014-05-27 22:52:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_truncf.S	2014-05-27 22:52:18.000000000 -0500
+@@ -19,8 +19,10 @@
+ #include <sysdep.h>
+ 
+ 	.section	".toc","aw"
++	.p2align 3
+ .LC0:	/* 2**23 */
+-	.tc FD_4b000000_0[TC],0x4b00000000000000
++	.long 0x4b000000
++	.long 0x0
+ 	.section	".text"
+ 	
+ /* float [fp1] truncf (float x [fp1])
diff --git a/SOURCES/glibc-ppc64le-20.patch b/SOURCES/glibc-ppc64le-20.patch
new file mode 100644
index 0000000..1342f97
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-20.patch
@@ -0,0 +1,43 @@
+# commit fef13a78ea30d4c26d6bab48d731ebe864ee31b0
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:33:45 2013 +0930
+# 
+#     PowerPC floating point little-endian [15 of 15]
+#     http://sourceware.org/ml/libc-alpha/2013-07/msg00206.html
+#     
+#     The union loses when little-endian.
+#     
+#         * sysdeps/powerpc/powerpc32/power4/hp-timing.h (HP_TIMING_NOW):
+#         Don't use a union to pack hi/low value.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h	2014-05-27 22:53:37.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h	2014-05-27 22:53:39.000000000 -0500
+@@ -87,18 +87,15 @@
+ 
+ #define HP_TIMING_NOW(Var)						\
+   do {									\
+-        union { long long ll; long ii[2]; } _var;			\
+-	long tmp;							\
+-        __asm__ __volatile__ (						\
+-		"1:	mfspr	%0,269;"				\
+-		"	mfspr	%1,268;"				\
+-		"	mfspr	%2,269;"				\
+-		"	cmpw	%0,%2;"					\
+-		"	bne	1b;"					\
+-		: "=r" (_var.ii[0]), "=r" (_var.ii[1]) , "=r" (tmp)	\
+-		: : "cr0"						\
+-		);							\
+-	Var = _var.ll;							\
++    unsigned int hi, lo, tmp;						\
++    __asm__ __volatile__ ("1:	mfspr	%0,269;"			\
++			  "	mfspr	%1,268;"			\
++			  "	mfspr	%2,269;"			\
++			  "	cmpw	%0,%2;"				\
++			  "	bne	1b;"				\
++			  : "=&r" (hi), "=&r" (lo), "=&r" (tmp)		\
++			  : : "cr0");					\
++    Var = ((hp_timing_t) hi << 32) | lo;				\
+   } while (0)
+ 
+ 
diff --git a/SOURCES/glibc-ppc64le-21.patch b/SOURCES/glibc-ppc64le-21.patch
new file mode 100644
index 0000000..a945404
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-21.patch
@@ -0,0 +1,294 @@
+# commit be1e5d311342e08ae1f8013342df27b7ded2c156
+# Author: Anton Blanchard <anton@au1.ibm.com>
+# Date:   Sat Aug 17 18:34:40 2013 +0930
+# 
+#     PowerPC LE setjmp/longjmp
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00089.html
+#     
+#     Little-endian fixes for setjmp/longjmp.  When writing these I noticed
+#     the setjmp code corrupts the non volatile VMX registers when using an
+#     unaligned buffer.  Anton fixed this, and also simplified it quite a
+#     bit.
+#     
+#     The current code uses boilerplate for the case where we want to store
+#     16 bytes to an unaligned address.  For that we have to do a
+#     read/modify/write of two aligned 16 byte quantities.  In our case we
+#     are storing a bunch of back to back data (consective VMX registers),
+#     and only the start and end of the region need the read/modify/write.
+#     
+#         [BZ #15723]
+#         * sysdeps/powerpc/jmpbuf-offsets.h: Comment fix.
+#         * sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Correct
+#         _dl_hwcap access for little-endian.
+#         * sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Likewise.  Don't
+#         destroy vmx regs when saving unaligned.
+#         * sysdeps/powerpc/powerpc64/__longjmp-common.S: Correct CR load.
+#         * sysdeps/powerpc/powerpc64/setjmp-common.S: Likewise CR save.  Don't
+#         destroy vmx regs when saving unaligned.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/jmpbuf-offsets.h glibc-2.17-c758a686/sysdeps/powerpc/jmpbuf-offsets.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/jmpbuf-offsets.h	2014-05-27 22:55:23.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/jmpbuf-offsets.h	2014-05-27 22:55:27.000000000 -0500
+@@ -21,12 +21,10 @@
+ #define JB_LR     2  /* The address we will return to */
+ #if __WORDSIZE == 64
+ # define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18*2 words total.  */
+-# define JB_CR     21 /* Condition code registers with the VRSAVE at */
+-                       /* offset 172 (low half of the double word.  */
++# define JB_CR     21 /* Shared dword with VRSAVE.  CR word at offset 172.  */
+ # define JB_FPRS   22 /* FPRs 14 through 31 are saved, 18*2 words total.  */
+ # define JB_SIZE   (64 * 8) /* As per PPC64-VMX ABI.  */
+-# define JB_VRSAVE 21 /* VRSAVE shares a double word with the CR at offset */
+-                       /* 168 (high half of the double word).  */
++# define JB_VRSAVE 21 /* Shared dword with CR.  VRSAVE word at offset 168.  */
+ # define JB_VRS    40 /* VRs 20 through 31 are saved, 12*4 words total.  */
+ #else
+ # define JB_GPRS   3  /* GPRs 14 through 31 are saved, 18 in total.  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S	2014-05-27 22:55:23.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S	2014-05-27 22:55:27.000000000 -0500
+@@ -46,16 +46,16 @@
+ #   endif
+ 	mtlr    r6
+ 	cfi_same_value (lr)
+-	lwz     r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(r5)
++	lwz     r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r5)
+ #  else
+ 	lwz     r5,_dl_hwcap@got(r5)
+ 	mtlr    r6
+ 	cfi_same_value (lr)
+-	lwz     r5,4(r5)
++	lwz     r5,LOWORD(r5)
+ #  endif
+ # else
+-	lis	r5,(_dl_hwcap+4)@ha
+-	lwz     r5,(_dl_hwcap+4)@l(r5)
++	lis	r5,(_dl_hwcap+LOWORD)@ha
++	lwz     r5,(_dl_hwcap+LOWORD)@l(r5)
+ # endif
+ 	andis.	r5,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16)
+ 	beq	L(no_vmx)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S	2014-05-27 22:55:23.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S	2014-05-27 22:55:27.000000000 -0500
+@@ -97,14 +97,14 @@
+ #   else
+ 	lwz     r5,_rtld_global_ro@got(r5)
+ #   endif
+-	lwz     r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(r5)
++	lwz     r5,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r5)
+ #  else
+ 	lwz     r5,_dl_hwcap@got(r5)
+-	lwz     r5,4(r5)
++	lwz     r5,LOWORD(r5)
+ #  endif
+ # else
+-	lis	r6,(_dl_hwcap+4)@ha
+-	lwz     r5,(_dl_hwcap+4)@l(r6)
++	lis	r6,(_dl_hwcap+LOWORD)@ha
++	lwz     r5,(_dl_hwcap+LOWORD)@l(r6)
+ # endif
+ 	andis.	r5,r5,(PPC_FEATURE_HAS_ALTIVEC >> 16)
+ 	beq	L(no_vmx)
+@@ -114,44 +114,43 @@
+ 	stw	r0,((JB_VRSAVE)*4)(3)
+ 	addi	r6,r5,16
+ 	beq+	L(aligned_save_vmx)
++
+ 	lvsr	v0,0,r5
+-	vspltisb v1,-1         /* set v1 to all 1's */
+-	vspltisb v2,0          /* set v2 to all 0's */
+-	vperm   v3,v2,v1,v0   /* v3 contains shift mask with num all 1 bytes on left = misalignment  */
+-
+-
+-	/* Special case for v20 we need to preserve what is in save area below v20 before obliterating it */
+-	lvx     v5,0,r5
+-	vperm   v20,v20,v20,v0
+-	vsel    v5,v5,v20,v3
+-	vsel    v20,v20,v2,v3
+-	stvx    v5,0,r5
+-
+-#define save_2vmx_partial(savevr,prev_savevr,hivr,shiftvr,maskvr,savegpr,addgpr) \
+-	addi    addgpr,addgpr,32; \
+-	vperm   savevr,savevr,savevr,shiftvr; \
+-	vsel    hivr,prev_savevr,savevr,maskvr; \
+-	stvx    hivr,0,savegpr;
+-
+-	save_2vmx_partial(v21,v20,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v22,v21,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v23,v22,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v24,v23,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v25,v24,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v26,v25,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v27,v26,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v28,v27,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v29,v28,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v30,v29,v5,v0,v3,r5,r6)
+-
+-	/* Special case for r31 we need to preserve what is in save area above v31 before obliterating it */
+-	addi    r5,r5,32
+-	vperm   v31,v31,v31,v0
+-	lvx     v4,0,r5
+-	vsel    v5,v30,v31,v3
+-	stvx    v5,0,r6
+-	vsel    v4,v31,v4,v3
+-	stvx    v4,0,r5
++	lvsl	v1,0,r5
++	addi	r6,r5,-16
++
++# define save_misaligned_vmx(savevr,prevvr,shiftvr,tmpvr,savegpr,addgpr) \
++	addi	addgpr,addgpr,32;					 \
++	vperm	tmpvr,prevvr,savevr,shiftvr;				 \
++	stvx	tmpvr,0,savegpr
++
++	/*
++	 * We have to be careful not to corrupt the data below v20 and
++	 * above v31. To keep things simple we just rotate both ends in
++	 * the opposite direction to our main permute so we can use
++	 * the common macro.
++	 */
++
++	/* load and rotate data below v20 */
++	lvx	v2,0,r5
++	vperm	v2,v2,v2,v1
++	save_misaligned_vmx(v20,v2,v0,v3,r5,r6)
++	save_misaligned_vmx(v21,v20,v0,v3,r6,r5)
++	save_misaligned_vmx(v22,v21,v0,v3,r5,r6)
++	save_misaligned_vmx(v23,v22,v0,v3,r6,r5)
++	save_misaligned_vmx(v24,v23,v0,v3,r5,r6)
++	save_misaligned_vmx(v25,v24,v0,v3,r6,r5)
++	save_misaligned_vmx(v26,v25,v0,v3,r5,r6)
++	save_misaligned_vmx(v27,v26,v0,v3,r6,r5)
++	save_misaligned_vmx(v28,v27,v0,v3,r5,r6)
++	save_misaligned_vmx(v29,v28,v0,v3,r6,r5)
++	save_misaligned_vmx(v30,v29,v0,v3,r5,r6)
++	save_misaligned_vmx(v31,v30,v0,v3,r6,r5)
++	/* load and rotate data above v31 */
++	lvx	v2,0,r6
++	vperm	v2,v2,v2,v1
++	save_misaligned_vmx(v2,v31,v0,v3,r5,r6)
++
+ 	b	L(no_vmx)
+ 
+ L(aligned_save_vmx):
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S	2014-05-27 22:55:23.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S	2014-05-27 22:55:27.000000000 -0500
+@@ -60,7 +60,7 @@
+ 	beq	L(no_vmx)
+ 	la	r5,((JB_VRS)*8)(3)
+ 	andi.	r6,r5,0xf
+-	lwz	r0,((JB_VRSAVE)*8)(3)
++	lwz	r0,((JB_VRSAVE)*8)(3)	/* 32-bit VRSAVE.  */
+ 	mtspr	VRSAVE,r0
+ 	beq+	L(aligned_restore_vmx)
+ 	addi    r6,r5,16
+@@ -156,7 +156,7 @@
+ 	lfd fp21,((JB_FPRS+7)*8)(r3)
+ 	ld r22,((JB_GPRS+8)*8)(r3)
+ 	lfd fp22,((JB_FPRS+8)*8)(r3)
+-	ld r0,(JB_CR*8)(r3)
++	lwz r0,((JB_CR*8)+4)(r3)	/* 32-bit CR.  */
+ 	ld r23,((JB_GPRS+9)*8)(r3)
+ 	lfd fp23,((JB_FPRS+9)*8)(r3)
+ 	ld r24,((JB_GPRS+10)*8)(r3)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S	2014-05-27 22:55:23.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S	2014-05-27 22:55:27.000000000 -0500
+@@ -98,7 +98,7 @@
+ 	mfcr r0
+ 	std  r16,((JB_GPRS+2)*8)(3)
+ 	stfd fp16,((JB_FPRS+2)*8)(3)
+-	std  r0,(JB_CR*8)(3)
++	stw  r0,((JB_CR*8)+4)(3)	/* 32-bit CR.  */
+ 	std  r17,((JB_GPRS+3)*8)(3)
+ 	stfd fp17,((JB_FPRS+3)*8)(3)
+ 	std  r18,((JB_GPRS+4)*8)(3)
+@@ -142,50 +142,46 @@
+ 	la	r5,((JB_VRS)*8)(3)
+ 	andi.	r6,r5,0xf
+ 	mfspr	r0,VRSAVE
+-	stw	r0,((JB_VRSAVE)*8)(3)
++	stw	r0,((JB_VRSAVE)*8)(3)	/* 32-bit VRSAVE.  */
+ 	addi	r6,r5,16
+ 	beq+	L(aligned_save_vmx)
++
+ 	lvsr	v0,0,r5
+-	vspltisb v1,-1         /* set v1 to all 1's */
+-	vspltisb v2,0          /* set v2 to all 0's */
+-	vperm   v3,v2,v1,v0   /* v3 contains shift mask with num all 1 bytes
+-				 on left = misalignment  */
+-
+-
+-	/* Special case for v20 we need to preserve what is in save area
+-	   below v20 before obliterating it */
+-	lvx     v5,0,r5
+-	vperm   v20,v20,v20,v0
+-	vsel    v5,v5,v20,v3
+-	vsel    v20,v20,v2,v3
+-	stvx    v5,0,r5
+-
+-# define save_2vmx_partial(savevr,prev_savevr,hivr,shiftvr,maskvr,savegpr,addgpr) \
+-	addi    addgpr,addgpr,32; \
+-	vperm   savevr,savevr,savevr,shiftvr; \
+-	vsel    hivr,prev_savevr,savevr,maskvr; \
+-	stvx    hivr,0,savegpr;
+-
+-	save_2vmx_partial(v21,v20,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v22,v21,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v23,v22,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v24,v23,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v25,v24,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v26,v25,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v27,v26,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v28,v27,v5,v0,v3,r5,r6)
+-	save_2vmx_partial(v29,v28,v5,v0,v3,r6,r5)
+-	save_2vmx_partial(v30,v29,v5,v0,v3,r5,r6)
+-
+-	/* Special case for r31 we need to preserve what is in save area
+-	   above v31 before obliterating it */
+-	addi    r5,r5,32
+-	vperm   v31,v31,v31,v0
+-	lvx     v4,0,r5
+-	vsel    v5,v30,v31,v3
+-	stvx    v5,0,r6
+-	vsel    v4,v31,v4,v3
+-	stvx    v4,0,r5
++	lvsl	v1,0,r5
++	addi	r6,r5,-16
++
++# define save_misaligned_vmx(savevr,prevvr,shiftvr,tmpvr,savegpr,addgpr) \
++	addi	addgpr,addgpr,32;					 \
++	vperm	tmpvr,prevvr,savevr,shiftvr;				 \
++	stvx	tmpvr,0,savegpr
++
++	/*
++	 * We have to be careful not to corrupt the data below v20 and
++	 * above v31. To keep things simple we just rotate both ends in
++	 * the opposite direction to our main permute so we can use
++	 * the common macro.
++	 */
++
++	/* load and rotate data below v20 */
++	lvx	v2,0,r5
++	vperm	v2,v2,v2,v1
++	save_misaligned_vmx(v20,v2,v0,v3,r5,r6)
++	save_misaligned_vmx(v21,v20,v0,v3,r6,r5)
++	save_misaligned_vmx(v22,v21,v0,v3,r5,r6)
++	save_misaligned_vmx(v23,v22,v0,v3,r6,r5)
++	save_misaligned_vmx(v24,v23,v0,v3,r5,r6)
++	save_misaligned_vmx(v25,v24,v0,v3,r6,r5)
++	save_misaligned_vmx(v26,v25,v0,v3,r5,r6)
++	save_misaligned_vmx(v27,v26,v0,v3,r6,r5)
++	save_misaligned_vmx(v28,v27,v0,v3,r5,r6)
++	save_misaligned_vmx(v29,v28,v0,v3,r6,r5)
++	save_misaligned_vmx(v30,v29,v0,v3,r5,r6)
++	save_misaligned_vmx(v31,v30,v0,v3,r6,r5)
++	/* load and rotate data above v31 */
++	lvx	v2,0,r6
++	vperm	v2,v2,v2,v1
++	save_misaligned_vmx(v2,v31,v0,v3,r5,r6)
++
+ 	b	L(no_vmx)
+ 
+ L(aligned_save_vmx):
diff --git a/SOURCES/glibc-ppc64le-22.patch b/SOURCES/glibc-ppc64le-22.patch
new file mode 100644
index 0000000..12a0ff0
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-22.patch
@@ -0,0 +1,228 @@
+# commit 9b874b2f1eb2550e39d3e9c38772e64a767e9de2
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:35:40 2013 +0930
+# 
+#     PowerPC ugly symbol versioning
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00090.html
+#     
+#     This patch fixes symbol versioning in setjmp/longjmp.  The existing
+#     code uses raw versions, which results in wrong symbol versioning when
+#     you want to build glibc with a base version of 2.19 for LE.
+#     
+#     Note that the merging the 64-bit and 32-bit versions in novmx-lonjmp.c
+#     and pt-longjmp.c doesn't result in GLIBC_2.0 versions for 64-bit, due
+#     to the base in shlib_versions.
+#     
+#         * sysdeps/powerpc/longjmp.c: Use proper symbol versioning macros.
+#         * sysdeps/powerpc/novmx-longjmp.c: Likewise.
+#         * sysdeps/powerpc/powerpc32/bsd-_setjmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/bsd-setjmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/fpu/__longjmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/fpu/setjmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/mcount.c: Likewise.
+#         * sysdeps/powerpc/powerpc32/setjmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/setjmp.S: Likewise.
+#         * nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c	2014-05-27 23:22:12.000000000 -0500
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/pt-longjmp.c	2014-05-27 23:23:44.000000000 -0500
+@@ -41,13 +41,8 @@
+   __novmx__libc_longjmp (env, val);
+ }
+ 
+-# if __WORDSIZE == 64
+-symbol_version (__novmx_longjmp,longjmp,GLIBC_2.3);
+-symbol_version (__novmx_siglongjmp,siglongjmp,GLIBC_2.3);
+-# else
+-symbol_version (__novmx_longjmp,longjmp,GLIBC_2.0);
+-symbol_version (__novmx_siglongjmp,siglongjmp,GLIBC_2.0);
+-# endif
++compat_symbol (libpthread, __novmx_longjmp, longjmp, GLIBC_2_0);
++compat_symbol (libpthread, __novmx_siglongjmp, siglongjmp, GLIBC_2_0);
+ #endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4))  */ 
+ 
+ void
+@@ -62,5 +57,5 @@
+   __libc_siglongjmp (env, val);
+ }
+ 
+-versioned_symbol (libc, __vmx_longjmp, longjmp, GLIBC_2_3_4);
+-versioned_symbol (libc, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
++versioned_symbol (libpthread, __vmx_longjmp, longjmp, GLIBC_2_3_4);
++versioned_symbol (libpthread, __vmx_siglongjmp, siglongjmp, GLIBC_2_3_4);
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/longjmp.c glibc-2.17-c758a686/sysdeps/powerpc/longjmp.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/longjmp.c	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/longjmp.c	2014-05-27 23:22:12.000000000 -0500
+@@ -56,6 +56,6 @@
+ 
+ default_symbol_version (__vmx__libc_longjmp, __libc_longjmp, GLIBC_PRIVATE);
+ default_symbol_version (__vmx__libc_siglongjmp, __libc_siglongjmp, GLIBC_PRIVATE);
+-default_symbol_version (__vmx_longjmp, _longjmp, GLIBC_2.3.4);
+-default_symbol_version (__vmxlongjmp, longjmp, GLIBC_2.3.4);
+-default_symbol_version (__vmxsiglongjmp, siglongjmp, GLIBC_2.3.4);
++versioned_symbol (libc, __vmx_longjmp, _longjmp, GLIBC_2_3_4);
++versioned_symbol (libc, __vmxlongjmp, longjmp, GLIBC_2_3_4);
++versioned_symbol (libc, __vmxsiglongjmp, siglongjmp, GLIBC_2_3_4);
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/novmx-longjmp.c glibc-2.17-c758a686/sysdeps/powerpc/novmx-longjmp.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/novmx-longjmp.c	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/novmx-longjmp.c	2014-05-27 23:22:12.000000000 -0500
+@@ -51,13 +51,7 @@
+ weak_alias (__novmx__libc_siglongjmp, __novmxlongjmp)
+ weak_alias (__novmx__libc_siglongjmp, __novmxsiglongjmp)
+ 
+-# if __WORDSIZE == 64
+-symbol_version (__novmx_longjmp,_longjmp,GLIBC_2.3);
+-symbol_version (__novmxlongjmp,longjmp,GLIBC_2.3);
+-symbol_version (__novmxsiglongjmp,siglongjmp,GLIBC_2.3);
+-# else
+-symbol_version (__novmx_longjmp,_longjmp,GLIBC_2.0);
+-symbol_version (__novmxlongjmp,longjmp,GLIBC_2.0);
+-symbol_version (__novmxsiglongjmp,siglongjmp,GLIBC_2.0);
+-# endif
++compat_symbol (libc, __novmx_longjmp, _longjmp, GLIBC_2_0);
++compat_symbol (libc, __novmxlongjmp, longjmp, GLIBC_2_0);
++compat_symbol (libc, __novmxsiglongjmp, siglongjmp, GLIBC_2_0);
+ #endif /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4))  */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-_setjmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-_setjmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-_setjmp.S	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-_setjmp.S	2014-05-27 23:22:12.000000000 -0500
+@@ -32,7 +32,7 @@
+ /* Build a versioned object for libc.  */
+ 
+ # if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+-symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.0);
++compat_symbol (libc, __novmx_setjmp, _setjmp, GLIBC_2_0);
+ 
+ ENTRY (BP_SYM (__novmx_setjmp))
+ 	li r4,0			/* Set second argument to 0.  */
+@@ -41,7 +41,7 @@
+ libc_hidden_def (__novmx_setjmp)
+ # endif /* defined SHARED  && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) */
+ 
+-default_symbol_version (__vmx_setjmp,_setjmp,GLIBC_2.3.4)
++versioned_symbol (libc, __vmx_setjmp, _setjmp, GLIBC_2_3_4)
+ /* __GI__setjmp prototype is needed for ntpl i.e. _setjmp is defined
+    as a libc_hidden_proto & is used in sysdeps/generic/libc-start.c
+    if HAVE_CLEANUP_JMP_BUF is defined */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-setjmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-setjmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-setjmp.S	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bsd-setjmp.S	2014-05-27 23:22:12.000000000 -0500
+@@ -27,7 +27,7 @@
+ 	b __novmx__sigsetjmp@local
+ END (__novmxsetjmp)
+ strong_alias (__novmxsetjmp, __novmx__setjmp)
+-symbol_version (__novmxsetjmp, setjmp, GLIBC_2.0)
++compat_symbol (libc, __novmxsetjmp, setjmp, GLIBC_2_0)
+ 
+ #endif  /* defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) ) */
+ 
+@@ -37,4 +37,4 @@
+ END (__vmxsetjmp)
+ strong_alias (__vmxsetjmp, __vmx__setjmp)
+ strong_alias (__vmx__setjmp, __setjmp)
+-default_symbol_version (__vmxsetjmp,setjmp,GLIBC_2.3.4)
++versioned_symbol (libc, __vmxsetjmp, setjmp, GLIBC_2_3_4)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp.S	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/__longjmp.S	2014-05-27 23:22:12.000000000 -0500
+@@ -26,14 +26,14 @@
+ 
+ #else /* !NOT_IN_libc */
+ /* Build a versioned object for libc.  */
+-default_symbol_version (__vmx__longjmp,__longjmp,GLIBC_2.3.4);
++versioned_symbol (libc, __vmx__longjmp, __longjmp, GLIBC_2_3_4);
+ # define __longjmp  __vmx__longjmp
+ # include "__longjmp-common.S"
+ 
+ # if defined SHARED && SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4)
+ #  define __NO_VMX__
+ #  undef JB_SIZE
+-symbol_version (__novmx__longjmp,__longjmp,GLIBC_2.0);
++compat_symbol (libc, __novmx__longjmp, __longjmp, GLIBC_2_0);
+ #  undef __longjmp
+ #  define __longjmp  __novmx__longjmp
+ #  include "__longjmp-common.S"
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp.S	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/fpu/setjmp.S	2014-05-27 23:22:12.000000000 -0500
+@@ -26,7 +26,7 @@
+ 
+ #else /* !NOT_IN_libc */
+ /* Build a versioned object for libc.  */
+-default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
++versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
+ # define __sigsetjmp __vmx__sigsetjmp
+ # define __sigjmp_save __vmx__sigjmp_save
+ # include "setjmp-common.S"
+@@ -36,7 +36,7 @@
+ #  undef __sigsetjmp
+ #  undef __sigjmp_save
+ #  undef JB_SIZE
+-symbol_version (__novmx__sigsetjmp,__sigsetjmp,GLIBC_2.0)
++compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0)
+ #  define __sigsetjmp __novmx__sigsetjmp
+ #  define __sigjmp_save __novmx__sigjmp_save
+ #  include "setjmp-common.S"
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/mcount.c glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/mcount.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/mcount.c	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/mcount.c	2014-05-27 23:22:12.000000000 -0500
+@@ -9,7 +9,7 @@
+ /* __mcount_internal was added in glibc 2.15 with version GLIBC_PRIVATE,
+    but it should have been put in version GLIBC_2.15.  Mark the
+    GLIBC_PRIVATE version obsolete and add it to GLIBC_2.16 instead.  */
+-default_symbol_version (___mcount_internal, __mcount_internal, GLIBC_2.16);
++versioned_symbol (libc, ___mcount_internal, __mcount_internal, GLIBC_2_16);
+ 
+ #if SHLIB_COMPAT (libc, GLIBC_2_15, GLIBC_2_16)
+ strong_alias (___mcount_internal, ___mcount_internal_private);
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/setjmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/setjmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/setjmp.S	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/setjmp.S	2014-05-27 23:22:12.000000000 -0500
+@@ -25,7 +25,7 @@
+ 
+ #else /* !NOT_IN_libc */
+ /* Build a versioned object for libc.  */
+-default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
++versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
+ # define __sigsetjmp __vmx__sigsetjmp
+ # define __sigjmp_save __vmx__sigjmp_save
+ # include "setjmp-common.S"
+@@ -35,7 +35,7 @@
+ #  undef __sigsetjmp
+ #  undef __sigjmp_save
+ #  undef JB_SIZE
+-symbol_version (__novmx__sigsetjmp,__sigsetjmp,GLIBC_2.0)
++compat_symbol (libc, __novmx__sigsetjmp, __sigsetjmp, GLIBC_2_0)
+ #  define __sigsetjmp __novmx__sigsetjmp
+ #  define __sigjmp_save __novmx__sigjmp_save
+ #  include "setjmp-common.S"
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp.S	2014-05-27 23:22:10.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp.S	2014-05-27 23:22:12.000000000 -0500
+@@ -26,9 +26,9 @@
+ 
+ #else /* !NOT_IN_libc */
+ /* Build a versioned object for libc.  */
+-default_symbol_version (__vmxsetjmp, setjmp, GLIBC_2.3.4)
+-default_symbol_version (__vmx_setjmp,_setjmp,GLIBC_2.3.4)
+-default_symbol_version (__vmx__sigsetjmp,__sigsetjmp,GLIBC_2.3.4)
++versioned_symbol (libc, __vmxsetjmp, setjmp, GLIBC_2_3_4)
++versioned_symbol (libc, __vmx_setjmp, _setjmp, GLIBC_2_3_4)
++versioned_symbol (libc, __vmx__sigsetjmp, __sigsetjmp, GLIBC_2_3_4)
+ # define setjmp __vmxsetjmp
+ # define _setjmp __vmx_setjmp
+ # define __sigsetjmp __vmx__sigsetjmp
+@@ -44,9 +44,9 @@
+ #  undef __sigjmp_save
+ #  undef JB_SIZE
+ #  define __NO_VMX__
+-symbol_version (__novmxsetjmp, setjmp, GLIBC_2.3)
+-symbol_version (__novmx_setjmp,_setjmp,GLIBC_2.3);
+-symbol_version (__novmx__sigsetjmp,__sigsetjmp,GLIBC_2.3)
++compat_symbol (libc, __novmxsetjmp, setjmp, GLIBC_2_3)
++compat_symbol (libc, __novmx_setjmp,_setjmp, GLIBC_2_3);
++compat_symbol (libc, __novmx__sigsetjmp,__sigsetjmp, GLIBC_2_3)
+ #  define setjmp __novmxsetjmp
+ #  define _setjmp __novmx_setjmp
+ #  define __sigsetjmp __novmx__sigsetjmp
diff --git a/SOURCES/glibc-ppc64le-23.patch b/SOURCES/glibc-ppc64le-23.patch
new file mode 100644
index 0000000..00288b9
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-23.patch
@@ -0,0 +1,102 @@
+# commit 02f04a6c7fea2b474b026bbce721d8c658d71fda
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:36:11 2013 +0930
+# 
+#     PowerPC LE _dl_hwcap access
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00091.html
+#     
+#     More LE support, correcting word accesses to _dl_hwcap.
+#     
+#         * sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S: Use
+#         HIWORD/LOWORD.
+#         * sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S: Ditto.
+#         * sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S: Ditto.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S	2014-05-27 23:25:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S	2014-05-27 23:25:38.000000000 -0500
+@@ -151,15 +151,15 @@
+ #   ifdef SHARED
+ 	lwz     r7,_rtld_global_ro@got(r7)
+ 	mtlr    r8
+-	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(r7)
++	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7)
+ #   else
+ 	lwz     r7,_dl_hwcap@got(r7)
+ 	mtlr    r8
+-	lwz     r7,4(r7)
++	lwz     r7,LOWORD(r7)
+ #   endif
+ #  else
+-	lis	r7,(_dl_hwcap+4)@ha
+-	lwz     r7,(_dl_hwcap+4)@l(r7)
++	lis	r7,(_dl_hwcap+LOWORD)@ha
++	lwz     r7,(_dl_hwcap+LOWORD)@l(r7)
+ #  endif
+ 	andis.	r7,r7,(PPC_FEATURE_HAS_ALTIVEC >> 16)
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S	2014-05-27 23:25:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S	2014-05-27 23:25:38.000000000 -0500
+@@ -79,15 +79,15 @@
+ # ifdef SHARED
+ 	lwz     r7,_rtld_global_ro@got(r7)
+ 	mtlr    r8
+-	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(r7)
++	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7)
+ # else
+ 	lwz     r7,_dl_hwcap@got(r7)
+ 	mtlr    r8
+-	lwz     r7,4(r7)
++	lwz     r7,LOWORD(r7)
+ # endif
+ #else
+-	lis	r7,(_dl_hwcap+4)@ha
+-	lwz     r7,(_dl_hwcap+4)@l(r7)
++	lis	r7,(_dl_hwcap+LOWORD)@ha
++	lwz     r7,(_dl_hwcap+LOWORD)@l(r7)
+ #endif
+ 
+ #ifdef __CONTEXT_ENABLE_FPRS
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S	2014-05-27 23:25:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S	2014-05-27 23:25:38.000000000 -0500
+@@ -152,15 +152,15 @@
+ #  ifdef SHARED
+ 	lwz     r7,_rtld_global_ro@got(r7)
+ 	mtlr    r8
+-	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(r7)
++	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7)
+ #  else
+ 	lwz     r7,_dl_hwcap@got(r7)
+ 	mtlr    r8
+-	lwz     r7,4(r7)
++	lwz     r7,LOWORD(r7)
+ #  endif
+ # else
+-	lis	r7,(_dl_hwcap+4)@ha
+-	lwz     r7,(_dl_hwcap+4)@l(r7)
++	lis	r7,(_dl_hwcap+LOWORD)@ha
++	lwz     r7,(_dl_hwcap+LOWORD)@l(r7)
+ # endif
+ 
+ # ifdef __CONTEXT_ENABLE_VRS
+@@ -308,14 +308,14 @@
+ 	mtlr    r8
+ #   ifdef SHARED
+ 	lwz     r7,_rtld_global_ro@got(r7)
+-	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+4(r7)
++	lwz     r7,RTLD_GLOBAL_RO_DL_HWCAP_OFFSET+LOWORD(r7)
+ #   else
+ 	lwz     r7,_dl_hwcap@got(r7)
+-	lwz     r7,4(r7)
++	lwz     r7,LOWORD(r7)
+ #   endif
+ #  else
+-	lis	r7,(_dl_hwcap+4)@ha
+-	lwz     r7,(_dl_hwcap+4)@l(r7)
++	lis	r7,(_dl_hwcap+LOWORD)@ha
++	lwz     r7,(_dl_hwcap+LOWORD)@l(r7)
+ #  endif
+ 	andis.	r7,r7,(PPC_FEATURE_HAS_ALTIVEC >> 16)
+ 	la	r10,(_UC_VREGS)(r31)
diff --git a/SOURCES/glibc-ppc64le-24.patch b/SOURCES/glibc-ppc64le-24.patch
new file mode 100644
index 0000000..5870d4f
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-24.patch
@@ -0,0 +1,55 @@
+# commit 0b2c2ace3601d5d59cf89130b16840e7f132f7a6
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:36:45 2013 +0930
+# 
+#     PowerPC makecontext
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00092.html
+#     
+#     Use conditional form of branch and link to avoid destroying the cpu
+#     link stack used to predict blr return addresses.
+#     
+#         * sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S: Use
+#         conditional form of branch and link when obtaining pc.
+#         * sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S	2014-05-28 12:25:49.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S	2014-05-28 12:25:51.000000000 -0500
+@@ -47,7 +47,9 @@
+ #ifdef PIC
+ 	mflr	r0
+ 	cfi_register(lr,r0)
+-	bl	1f
++	/* Use this conditional form of branch and link to avoid destroying
++	   the cpu link stack used to predict blr return addresses.  */
++	bcl	20,31,1f
+ 1:	mflr	r6
+ 	addi	r6,r6,L(exitcode)-1b
+ 	mtlr	r0
+@@ -136,7 +138,9 @@
+ #ifdef PIC
+ 	mflr	r0
+ 	cfi_register(lr,r0)
+-	bl	1f
++	/* Use this conditional form of branch and link to avoid destroying
++	   the cpu link stack used to predict blr return addresses.  */
++	bcl	20,31,1f
+ 1:	mflr	r6
+ 	addi	r6,r6,L(novec_exitcode)-1b
+ 	mtlr	r0
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S	2014-05-28 12:25:49.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S	2014-05-28 12:25:51.000000000 -0500
+@@ -124,8 +124,10 @@
+ 
+   /* If the target function returns we need to do some cleanup.  We use a
+      code trick to get the address of our cleanup function into the link
+-     register.  Do not add any code between here and L(exitcode).  */
+-  bl  L(gotexitcodeaddr);
++     register.  Do not add any code between here and L(exitcode).
++     Use this conditional form of branch and link to avoid destroying
++     the cpu link stack used to predict blr return addresses.  */
++  bcl	20,31,L(gotexitcodeaddr);
+ 
+ 	/* This is the helper code which gets called if a function which
+ 	   is registered with 'makecontext' returns.  In this case we
diff --git a/SOURCES/glibc-ppc64le-25.patch b/SOURCES/glibc-ppc64le-25.patch
new file mode 100644
index 0000000..144d3f3
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-25.patch
@@ -0,0 +1,411 @@
+# commit db9b4570c5dc550074140ac1d1677077fba29a26
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:40:11 2013 +0930
+# 
+#     PowerPC LE strlen
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00097.html
+#     
+#     This is the first of nine patches adding little-endian support to the
+#     existing optimised string and memory functions.  I did spend some
+#     time with a power7 simulator looking at cycle by cycle behaviour for
+#     memchr, but most of these patches have not been run on cpu simulators
+#     to check that we are going as fast as possible.  I'm sure PowerPC can
+#     do better.  However, the little-endian support mostly leaves main
+#     loops unchanged, so I'm banking on previous authors having done a
+#     good job on big-endian..  As with most code you stare at long enough,
+#     I found some improvements for big-endian too.
+#     
+#     Little-endian support for strlen.  Like most of the string functions,
+#     I leave the main word or multiple-word loops substantially unchanged,
+#     just needing to modify the tail.
+#     
+#     Removing the branch in the power7 functions is just a tidy.  .align
+#     produces a branch anyway.  Modifying regs in the non-power7 functions
+#     is to suit the new little-endian tail.
+#     
+#         * sysdeps/powerpc/powerpc64/power7/strlen.S (strlen): Add little-endian
+#         support.  Don't branch over align.
+#         * sysdeps/powerpc/powerpc32/power7/strlen.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/strlen.S (strlen): Add little-endian support.
+#         Rearrange tmp reg use to suit.  Comment.
+#         * sysdeps/powerpc/powerpc32/strlen.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strlen.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strlen.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strlen.S	2014-05-28 12:28:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strlen.S	2014-05-28 12:28:45.000000000 -0500
+@@ -31,7 +31,11 @@
+ 	li	r0,0	      /* Word with null chars to use with cmpb.  */
+ 	li	r5,-1	      /* MASK = 0xffffffffffffffff.  */
+ 	lwz	r12,0(r4)     /* Load word from memory.  */
++#ifdef __LITTLE_ENDIAN__
++	slw	r5,r5,r6
++#else
+ 	srw	r5,r5,r6      /* MASK = MASK >> padding.  */
++#endif
+ 	orc	r9,r12,r5     /* Mask bits that are not part of the string.  */
+ 	cmpb	r10,r9,r0     /* Check for null bytes in WORD1.  */
+ 	cmpwi	cr7,r10,0     /* If r10 == 0, no null's have been found.  */
+@@ -49,9 +53,6 @@
+ 	cmpb	r10,r12,r0
+ 	cmpwi	cr7,r10,0
+ 	bne	cr7,L(done)
+-	b	L(loop)	      /* We branch here (rather than falling through)
+-				 to skip the nops due to heavy alignment
+-				 of the loop below.  */
+ 
+ 	/* Main loop to look for the end of the string.  Since it's a
+ 	   small loop (< 8 instructions), align it to 32-bytes.  */
+@@ -88,9 +89,15 @@
+ 	   0xff in the same position as the null byte in the original
+ 	   word from the string.  Use that to calculate the length.  */
+ L(done):
+-	cntlzw	r0,r10	      /* Count leading zeroes before the match.  */
++#ifdef __LITTLE_ENDIAN__
++	addi	r9, r10, -1   /* Form a mask from trailing zeros.  */
++	andc	r9, r9, r10
++	popcntw r0, r9	      /* Count the bits in the mask.  */
++#else
++	cntlzw	r0,r10	      /* Count leading zeros before the match.  */
++#endif
+ 	subf	r5,r3,r4
+-	srwi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
++	srwi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r5,r0      /* Compute final length.  */
+ 	blr
+ END (BP_SYM (strlen))
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strlen.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strlen.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strlen.S	2014-05-28 12:28:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strlen.S	2014-05-28 12:32:24.000000000 -0500
+@@ -31,7 +31,12 @@
+       1 is subtracted you get a value in the range 0x00-0x7f, none of which
+       have their high bit set. The expression here is
+       (x + 0xfefefeff) & ~(x | 0x7f7f7f7f), which gives 0x00000000 when
+-      there were no 0x00 bytes in the word.
++      there were no 0x00 bytes in the word.  You get 0x80 in bytes that
++      match, but possibly false 0x80 matches in the next more significant
++      byte to a true match due to carries.  For little-endian this is
++      of no consequence since the least significant match is the one
++      we're interested in, but big-endian needs method 2 to find which
++      byte matches.
+ 
+    2) Given a word 'x', we can test to see _which_ byte was zero by
+       calculating ~(((x & 0x7f7f7f7f) + 0x7f7f7f7f) | x | 0x7f7f7f7f).
+@@ -74,7 +79,7 @@
+ 
+ ENTRY (BP_SYM (strlen))
+ 
+-#define rTMP1	r0
++#define rTMP4	r0
+ #define rRTN	r3	/* incoming STR arg, outgoing result */
+ #define rSTR	r4	/* current string position */
+ #define rPADN	r5	/* number of padding bits we prepend to the
+@@ -84,9 +89,9 @@
+ #define rWORD1	r8	/* current string word */
+ #define rWORD2	r9	/* next string word */
+ #define rMASK	r9	/* mask for first string word */
+-#define rTMP2	r10
+-#define rTMP3	r11
+-#define rTMP4	r12
++#define rTMP1	r10
++#define rTMP2	r11
++#define rTMP3	r12
+ 
+ 	CHECK_BOUNDS_LOW (rRTN, rTMP1, rTMP2)
+ 
+@@ -96,15 +101,20 @@
+ 	lwz	rWORD1, 0(rSTR)
+ 	li	rMASK, -1
+ 	addi	r7F7F, r7F7F, 0x7f7f
+-/* That's the setup done, now do the first pair of words.
+-   We make an exception and use method (2) on the first two words, to reduce
+-   overhead.  */
++/* We use method (2) on the first two words, because rFEFE isn't
++   required which reduces setup overhead.  Also gives a faster return
++   for small strings on big-endian due to needing to recalculate with
++   method (2) anyway.  */
++#ifdef __LITTLE_ENDIAN__
++	slw	rMASK, rMASK, rPADN
++#else
+ 	srw	rMASK, rMASK, rPADN
++#endif
+ 	and	rTMP1, r7F7F, rWORD1
+ 	or	rTMP2, r7F7F, rWORD1
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor	rTMP1, rTMP2, rTMP1
+-	and.	rWORD1, rTMP1, rMASK
++	nor	rTMP3, rTMP2, rTMP1
++	and.	rTMP3, rTMP3, rMASK
+ 	mtcrf	0x01, rRTN
+ 	bne	L(done0)
+ 	lis	rFEFE, -0x101
+@@ -113,11 +123,12 @@
+ 	bt	29, L(loop)
+ 
+ /* Handle second word of pair.  */
++/* Perhaps use method (1) here for little-endian, saving one instruction?  */
+ 	lwzu	rWORD1, 4(rSTR)
+ 	and	rTMP1, r7F7F, rWORD1
+ 	or	rTMP2, r7F7F, rWORD1
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor.	rWORD1, rTMP2, rTMP1
++	nor.	rTMP3, rTMP2, rTMP1
+ 	bne	L(done0)
+ 
+ /* The loop.  */
+@@ -131,29 +142,53 @@
+ 	add	rTMP3, rFEFE, rWORD2
+ 	nor	rTMP4, r7F7F, rWORD2
+ 	bne	L(done1)
+-	and.	rTMP1, rTMP3, rTMP4
++	and.	rTMP3, rTMP3, rTMP4
+ 	beq	L(loop)
+ 
++#ifndef __LITTLE_ENDIAN__
+ 	and	rTMP1, r7F7F, rWORD2
+ 	add	rTMP1, rTMP1, r7F7F
+-	andc	rWORD1, rTMP4, rTMP1
++	andc	rTMP3, rTMP4, rTMP1
+ 	b	L(done0)
+ 
+ L(done1):
+ 	and	rTMP1, r7F7F, rWORD1
+ 	subi	rSTR, rSTR, 4
+ 	add	rTMP1, rTMP1, r7F7F
+-	andc	rWORD1, rTMP2, rTMP1
++	andc	rTMP3, rTMP2, rTMP1
+ 
+ /* When we get to here, rSTR points to the first word in the string that
+-   contains a zero byte, and the most significant set bit in rWORD1 is in that
+-   byte.  */
++   contains a zero byte, and rTMP3 has 0x80 for bytes that are zero,
++   and 0x00 otherwise.  */
+ L(done0):
+-	cntlzw	rTMP3, rWORD1
++	cntlzw	rTMP3, rTMP3
+ 	subf	rTMP1, rRTN, rSTR
+ 	srwi	rTMP3, rTMP3, 3
+ 	add	rRTN, rTMP1, rTMP3
+ 	/* GKM FIXME: check high bound.  */
+ 	blr
++#else
++
++L(done0):
++	addi	rTMP1, rTMP3, -1	/* Form a mask from trailing zeros.  */
++	andc	rTMP1, rTMP1, rTMP3
++	cntlzw	rTMP1, rTMP1		/* Count bits not in the mask.  */
++	subf	rTMP3, rRTN, rSTR
++	subfic	rTMP1, rTMP1, 32-7
++	srwi	rTMP1, rTMP1, 3
++	add	rRTN, rTMP1, rTMP3
++	blr
++
++L(done1):
++	addi	rTMP3, rTMP1, -1
++	andc	rTMP3, rTMP3, rTMP1
++	cntlzw	rTMP3, rTMP3
++	subf	rTMP1, rRTN, rSTR
++	subfic	rTMP3, rTMP3, 32-7-32
++	srawi	rTMP3, rTMP3, 3
++	add	rRTN, rTMP1, rTMP3
++	blr
++#endif
++
+ END (BP_SYM (strlen))
+ libc_hidden_builtin_def (strlen)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strlen.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strlen.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strlen.S	2014-05-28 12:28:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strlen.S	2014-05-28 12:28:45.000000000 -0500
+@@ -32,7 +32,11 @@
+ 				 with cmpb.  */
+ 	li	r5,-1	      /* MASK = 0xffffffffffffffff.  */
+ 	ld	r12,0(r4)     /* Load doubleword from memory.  */
++#ifdef __LITTLE_ENDIAN__
++	sld	r5,r5,r6
++#else
+ 	srd	r5,r5,r6      /* MASK = MASK >> padding.  */
++#endif
+ 	orc	r9,r12,r5     /* Mask bits that are not part of the string.  */
+ 	cmpb	r10,r9,r0     /* Check for null bytes in DWORD1.  */
+ 	cmpdi	cr7,r10,0     /* If r10 == 0, no null's have been found.  */
+@@ -50,9 +54,6 @@
+ 	cmpb	r10,r12,r0
+ 	cmpdi	cr7,r10,0
+ 	bne	cr7,L(done)
+-	b	L(loop)	      /* We branch here (rather than falling through)
+-				 to skip the nops due to heavy alignment
+-				 of the loop below.  */
+ 
+ 	/* Main loop to look for the end of the string.  Since it's a
+ 	   small loop (< 8 instructions), align it to 32-bytes.  */
+@@ -89,9 +90,15 @@
+ 	   0xff in the same position as the null byte in the original
+ 	   doubleword from the string.  Use that to calculate the length.  */
+ L(done):
+-	cntlzd	r0,r10	      /* Count leading zeroes before the match.  */
++#ifdef __LITTLE_ENDIAN__
++	addi	r9, r10, -1   /* Form a mask from trailing zeros.  */
++	andc	r9, r9, r10
++	popcntd r0, r9	      /* Count the bits in the mask.  */
++#else
++	cntlzd	r0,r10	      /* Count leading zeros before the match.  */
++#endif
+ 	subf	r5,r3,r4
+-	srdi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
++	srdi	r0,r0,3	      /* Convert leading/trailing zeros to bytes.  */
+ 	add	r3,r5,r0      /* Compute final length.  */
+ 	blr
+ END (BP_SYM (strlen))
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strlen.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strlen.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strlen.S	2014-05-28 12:28:44.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strlen.S	2014-05-28 12:38:17.000000000 -0500
+@@ -31,7 +31,12 @@
+       1 is subtracted you get a value in the range 0x00-0x7f, none of which
+       have their high bit set. The expression here is
+       (x + 0xfefefeff) & ~(x | 0x7f7f7f7f), which gives 0x00000000 when
+-      there were no 0x00 bytes in the word.
++      there were no 0x00 bytes in the word.  You get 0x80 in bytes that
++      match, but possibly false 0x80 matches in the next more significant
++      byte to a true match due to carries.  For little-endian this is
++      of no consequence since the least significant match is the one
++      we're interested in, but big-endian needs method 2 to find which
++      byte matches.
+ 
+    2) Given a word 'x', we can test to see _which_ byte was zero by
+       calculating ~(((x & 0x7f7f7f7f) + 0x7f7f7f7f) | x | 0x7f7f7f7f).
+@@ -64,7 +69,7 @@
+    Answer:
+    1) Added a Data Cache Block Touch early to prefetch the first 128 
+    byte cache line. Adding dcbt instructions to the loop would not be 
+-   effective since most strings will be shorter than the cache line.*/
++   effective since most strings will be shorter than the cache line.  */
+ 
+ /* Some notes on register usage: Under the SVR4 ABI, we can use registers
+    0 and 3 through 12 (so long as we don't call any procedures) without
+@@ -80,7 +85,7 @@
+ ENTRY (BP_SYM (strlen))
+ 	CALL_MCOUNT 1
+ 
+-#define rTMP1	r0
++#define rTMP4	r0
+ #define rRTN	r3	/* incoming STR arg, outgoing result */
+ #define rSTR	r4	/* current string position */
+ #define rPADN	r5	/* number of padding bits we prepend to the
+@@ -90,9 +95,9 @@
+ #define rWORD1	r8	/* current string doubleword */
+ #define rWORD2	r9	/* next string doubleword */
+ #define rMASK	r9	/* mask for first string doubleword */
+-#define rTMP2	r10
+-#define rTMP3	r11
+-#define rTMP4	r12
++#define rTMP1	r10
++#define rTMP2	r11
++#define rTMP3	r12
+ 
+ /* Note:  The Bounded pointer support in this code is broken.  This code
+    was inherited from PPC32 and that support was never completed.
+@@ -109,30 +114,36 @@
+ 	addi	r7F7F, r7F7F, 0x7f7f
+ 	li	rMASK, -1
+ 	insrdi	r7F7F, r7F7F, 32, 0
+-/* That's the setup done, now do the first pair of doublewords.
+-   We make an exception and use method (2) on the first two doublewords, 
+-   to reduce overhead.  */
+-	srd	rMASK, rMASK, rPADN
++/* We use method (2) on the first two doublewords, because rFEFE isn't
++   required which reduces setup overhead.  Also gives a faster return
++   for small strings on big-endian due to needing to recalculate with
++   method (2) anyway.  */
++#ifdef __LITTLE_ENDIAN__
++	sld	rMASK, rMASK, rPADN
++#else
++ 	srd	rMASK, rMASK, rPADN
++#endif
+ 	and	rTMP1, r7F7F, rWORD1
+ 	or	rTMP2, r7F7F, rWORD1
+ 	lis	rFEFE, -0x101
+ 	add	rTMP1, rTMP1, r7F7F
+ 	addi	rFEFE, rFEFE, -0x101
+-	nor	rTMP1, rTMP2, rTMP1
+-	and.	rWORD1, rTMP1, rMASK
++	nor	rTMP3, rTMP2, rTMP1
++	and.	rTMP3, rTMP3, rMASK
+ 	mtcrf	0x01, rRTN
+ 	bne	L(done0)
+-	sldi  rTMP1, rFEFE, 32
+-	add  rFEFE, rFEFE, rTMP1
++	sldi	rTMP1, rFEFE, 32
++	add	rFEFE, rFEFE, rTMP1
+ /* Are we now aligned to a doubleword boundary?  */
+ 	bt	28, L(loop)
+ 
+ /* Handle second doubleword of pair.  */
++/* Perhaps use method (1) here for little-endian, saving one instruction?  */
+ 	ldu	rWORD1, 8(rSTR)
+ 	and	rTMP1, r7F7F, rWORD1
+ 	or	rTMP2, r7F7F, rWORD1
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor.	rWORD1, rTMP2, rTMP1
++	nor.	rTMP3, rTMP2, rTMP1
+ 	bne	L(done0)
+ 
+ /* The loop.  */
+@@ -146,29 +157,53 @@
+ 	add	rTMP3, rFEFE, rWORD2
+ 	nor	rTMP4, r7F7F, rWORD2
+ 	bne	L(done1)
+-	and.	rTMP1, rTMP3, rTMP4
++	and.	rTMP3, rTMP3, rTMP4
+ 	beq	L(loop)
+ 
++#ifndef __LITTLE_ENDIAN__
+ 	and	rTMP1, r7F7F, rWORD2
+ 	add	rTMP1, rTMP1, r7F7F
+-	andc	rWORD1, rTMP4, rTMP1
++	andc	rTMP3, rTMP4, rTMP1
+ 	b	L(done0)
+ 
+ L(done1):
+ 	and	rTMP1, r7F7F, rWORD1
+ 	subi	rSTR, rSTR, 8
+ 	add	rTMP1, rTMP1, r7F7F
+-	andc	rWORD1, rTMP2, rTMP1
++	andc	rTMP3, rTMP2, rTMP1
+ 
+ /* When we get to here, rSTR points to the first doubleword in the string that
+-   contains a zero byte, and the most significant set bit in rWORD1 is in that
+-   byte.  */
++   contains a zero byte, and rTMP3 has 0x80 for bytes that are zero, and 0x00
++   otherwise.  */
+ L(done0):
+-	cntlzd	rTMP3, rWORD1
++	cntlzd	rTMP3, rTMP3
+ 	subf	rTMP1, rRTN, rSTR
+ 	srdi	rTMP3, rTMP3, 3
+ 	add	rRTN, rTMP1, rTMP3
+ 	/* GKM FIXME: check high bound.  */
+ 	blr
++#else
++
++L(done0):
++	addi	rTMP1, rTMP3, -1	/* Form a mask from trailing zeros.  */
++	andc	rTMP1, rTMP1, rTMP3
++	cntlzd	rTMP1, rTMP1		/* Count bits not in the mask.  */
++	subf	rTMP3, rRTN, rSTR
++	subfic	rTMP1, rTMP1, 64-7
++	srdi	rTMP1, rTMP1, 3
++	add	rRTN, rTMP1, rTMP3
++	blr
++
++L(done1):
++	addi	rTMP3, rTMP1, -1
++	andc	rTMP3, rTMP3, rTMP1
++	cntlzd	rTMP3, rTMP3
++	subf	rTMP1, rRTN, rSTR
++	subfic	rTMP3, rTMP3, 64-7-64
++	sradi	rTMP3, rTMP3, 3
++	add	rRTN, rTMP1, rTMP3
++	blr
++#endif
++
+ END (BP_SYM (strlen))
+ libc_hidden_builtin_def (strlen)
diff --git a/SOURCES/glibc-ppc64le-26.patch b/SOURCES/glibc-ppc64le-26.patch
new file mode 100644
index 0000000..93fd255
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-26.patch
@@ -0,0 +1,379 @@
+# commit 33ee81de05e83ce12f32a491270bb4c1611399c7
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:40:48 2013 +0930
+# 
+#     PowerPC LE strnlen
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00098.html
+#     
+#     The existing strnlen code has a number of defects, so this patch is more
+#     than just adding little-endian support.  The changes here are similar to
+#     those for memchr.
+#     
+#         * sysdeps/powerpc/powerpc64/power7/strnlen.S (strnlen): Add
+#         little-endian support.  Remove unnecessary "are we done" tests.
+#         Handle "s" wrapping around zero and extremely large "size".
+#         Correct main loop count.  Handle single left-over word from main
+#         loop inline rather than by using small_loop.  Correct comments.
+#         Delete "zero" tail, use "end_max" instead.
+#         * sysdeps/powerpc/powerpc32/power7/strnlen.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strnlen.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strnlen.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strnlen.S	2014-05-28 12:40:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strnlen.S	2014-05-28 12:44:52.000000000 -0500
+@@ -30,51 +30,47 @@
+ 	add	r7,r3,r4      /* Calculate the last acceptable address.  */
+ 	cmplwi	r4,16
+ 	li	r0,0	      /* Word with null chars.  */
++	addi	r7,r7,-1
+ 	ble	L(small_range)
+ 
+-	cmplw	cr7,r3,r7     /* Is the address equal or less than r3?  If
+-				 it's equal or less, it means size is either 0
+-				 or a negative number.  */
+-	ble	cr7,L(proceed)
+-
+-	li	r7,-1	      /* Make r11 the biggest if r4 <= 0.  */
+-L(proceed):
+ 	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
+ 	lwz	r12,0(r8)     /* Load word from memory.  */
+ 	cmpb	r10,r12,r0    /* Check for null bytes in DWORD1.  */
++#ifdef __LITTLE_ENDIAN__
++	srw	r10,r10,r6
++	slw	r10,r10,r6
++#else
+ 	slw	r10,r10,r6
+ 	srw	r10,r10,r6
++#endif
+ 	cmplwi	cr7,r10,0     /* If r10 == 0, no null's have been found.  */
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,4
+-	cmplw	cr6,r9,r7
+-	bge	cr6,L(end_max)
+-
++	clrrwi	r7,r7,2       /* Address of last word.  */
+ 	mtcrf   0x01,r8
+ 	/* Are we now aligned to a doubleword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+ 
+ 	bt	29,L(loop_setup)
+ 
+-	/* Handle DWORD2 of pair.  */
++	/* Handle WORD2 of pair.  */
+ 	lwzu	r12,4(r8)
+ 	cmpb	r10,r12,r0
+ 	cmplwi	cr7,r10,0
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,4
+-	cmplw	cr6,r9,r7
+-	bge	cr6,L(end_max)
+-
+ L(loop_setup):
+-	sub	r5,r7,r9
++	/* The last word we want to read in the loop below is the one
++	   containing the last byte of the string, ie. the word at
++	   (s + size - 1) & ~3, or r7.  The first word read is at
++	   r8 + 4, we read 2 * cnt words, so the last word read will
++	   be at r8 + 4 + 8 * cnt - 4.  Solving for cnt gives
++	   cnt = (r7 - r8) / 8  */
++	sub	r5,r7,r8
+ 	srwi	r6,r5,3	      /* Number of loop iterations.  */
+ 	mtctr	r6	      /* Setup the counter.  */
+-	b	L(loop)
+-	/* Main loop to look for the null byte backwards in the string.  Since
++
++	/* Main loop to look for the null byte in the string.  Since
+ 	   it's a small loop (< 8 instructions), align it to 32-bytes.  */
+ 	.p2align  5
+ L(loop):
+@@ -90,15 +86,18 @@
+ 	cmplwi	cr7,r5,0
+ 	bne	cr7,L(found)
+ 	bdnz	L(loop)
+-	/* We're here because the counter reached 0, and that means we
+-	   didn't have any matches for null in the whole range.  Just return
+-	   the original size.  */
+-	addi	r9,r8,4
+-	cmplw	cr6,r9,r7
+-	blt	cr6,L(loop_small)
++
++	/* We may have one more word to read.  */
++	cmplw	cr6,r8,r7
++	beq	cr6,L(end_max)
++
++	lwzu	r12,4(r8)
++	cmpb	r10,r12,r0
++	cmplwi	cr6,r10,0
++	bne	cr6,L(done)
+ 
+ L(end_max):
+-	sub	r3,r7,r3
++	mr	r3,r4
+ 	blr
+ 
+ 	/* OK, one (or both) of the words contains a null byte.  Check
+@@ -123,49 +122,56 @@
+ 	   We need to make sure the null char is *before* the end of the
+ 	   range.  */
+ L(done):
+-	cntlzw	r0,r10	      /* Count leading zeroes before the match.  */
+-	srwi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
+-	add	r9,r8,r0
+-	sub	r6,r9,r3      /* Length until the match.  */
+-	cmplw	r9,r7
+-	bgt	L(end_max)
+-	mr	r3,r6
+-	blr
+-
+-	.align	4
+-L(zero):
+-	li	r3,0
++#ifdef __LITTLE_ENDIAN__
++	addi	r0,r10,-1
++	andc	r0,r0,r10
++	popcntw	r0,r0
++#else
++	cntlzw	r0,r10	      /* Count leading zeros before the match.  */
++#endif
++	sub	r3,r8,r3
++	srwi	r0,r0,3	      /* Convert leading/trailing zeros to bytes.  */
++	add	r3,r3,r0      /* Length until the match.  */
++	cmplw	r3,r4
++	blelr
++	mr	r3,r4
+ 	blr
+ 
+-/* Deals with size <= 32.  */
++/* Deals with size <= 16.  */
+ 	.align	4
+ L(small_range):
+ 	cmplwi	r4,0
+-	beq	L(zero)
++	beq	L(end_max)
++
++	clrrwi	r7,r7,2       /* Address of last word.  */
+ 
+ 	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
+ 	lwz	r12,0(r8)     /* Load word from memory.  */
+ 	cmpb	r10,r12,r0    /* Check for null bytes in WORD1.  */
++#ifdef __LITTLE_ENDIAN__
++	srw	r10,r10,r6
++	slw	r10,r10,r6
++#else
+ 	slw	r10,r10,r6
+ 	srw	r10,r10,r6
++#endif
+ 	cmplwi	cr7,r10,0
+ 	bne	cr7,L(done)
+ 
+-	addi    r9,r8,4
+-	cmplw	r9,r7
+-	bge	L(end_max)
+-	b	L(loop_small)
++	cmplw	r8,r7
++	beq	L(end_max)
+ 
+ 	.p2align  5
+ L(loop_small):
+ 	lwzu	r12,4(r8)
+ 	cmpb	r10,r12,r0
+-	addi	r9,r8,4
+ 	cmplwi	cr6,r10,0
+ 	bne	cr6,L(done)
+-	cmplw	r9,r7
+-	bge	L(end_max)
+-	b	L(loop_small)
++	cmplw	r8,r7
++	bne	L(loop_small)
++	mr	r3,r4
++	blr
++
+ END (BP_SYM (__strnlen))
+ weak_alias (BP_SYM (__strnlen), BP_SYM(strnlen))
+ libc_hidden_builtin_def (strnlen)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strnlen.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strnlen.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strnlen.S	2014-05-28 12:40:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strnlen.S	2014-05-28 13:24:41.000000000 -0500
+@@ -26,33 +26,29 @@
+ ENTRY (BP_SYM (__strnlen))
+ 	CALL_MCOUNT 2
+ 	dcbt	0,r3
+-	clrrdi  r8,r3,3
++	clrrdi	r8,r3,3
+ 	add	r7,r3,r4      /* Calculate the last acceptable address.  */
+ 	cmpldi	r4,32
+ 	li	r0,0	      /* Doubleword with null chars.  */
++	addi	r7,r7,-1
++
+ 	/* If we have less than 33 bytes to search, skip to a faster code.  */
+ 	ble	L(small_range)
+ 
+-	cmpld	cr7,r3,r7    /* Is the address equal or less than r3?  If
+-				it's equal or less, it means size is either 0
+-				or a negative number.  */
+-	ble	cr7,L(proceed)
+-
+-	li	r7,-1	      /* Make r11 the biggest if r4 <= 0.  */
+-L(proceed):
+ 	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+ 	ld	r12,0(r8)     /* Load doubleword from memory.  */
+ 	cmpb	r10,r12,r0    /* Check for null bytes in DWORD1.  */
++#ifdef __LITTLE_ENDIAN__
++	srd	r10,r10,r6
++	sld	r10,r10,r6
++#else
+ 	sld	r10,r10,r6
+ 	srd	r10,r10,r6
++#endif
+ 	cmpldi	cr7,r10,0     /* If r10 == 0, no null's have been found.  */
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,8
+-	cmpld	cr6,r9,r7
+-	bge	cr6,L(end_max)
+-
++	clrrdi	r7,r7,3       /* Address of last doubleword.  */
+ 	mtcrf   0x01,r8
+ 	/* Are we now aligned to a quadword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+@@ -65,17 +61,18 @@
+ 	cmpldi	cr7,r10,0
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,8
+-	cmpld	cr6,r9,r7
+-	bge	cr6,L(end_max)
+-
+ L(loop_setup):
+-	sub	r5,r7,r9
++	/* The last dword we want to read in the loop below is the one
++	   containing the last byte of the string, ie. the dword at
++	   (s + size - 1) & ~7, or r7.  The first dword read is at
++	   r8 + 8, we read 2 * cnt dwords, so the last dword read will
++	   be at r8 + 8 + 16 * cnt - 8.  Solving for cnt gives
++	   cnt = (r7 - r8) / 16  */
++	sub	r5,r7,r8
+ 	srdi	r6,r5,4	      /* Number of loop iterations.  */
+ 	mtctr	r6	      /* Setup the counter.  */
+-	b	L(loop)
+-	/* Main loop to look for the null byte backwards in the string.  Since
++
++	/* Main loop to look for the null byte in the string.  Since
+ 	   it's a small loop (< 8 instructions), align it to 32-bytes.  */
+ 	.p2align  5
+ L(loop):
+@@ -91,15 +88,18 @@
+ 	cmpldi	cr7,r5,0
+ 	bne	cr7,L(found)
+ 	bdnz	L(loop)
+-	/* We're here because the counter reached 0, and that means we
+-	   didn't have any matches for null in the whole range.  Just return
+-	   the original size.  */
+-	addi	r9,r8,8
+-	cmpld	cr6,r9,r7
+-	blt	cr6,L(loop_small)
++
++	/* We may have one more dword to read.  */
++	cmpld	cr6,r8,r7
++	beq	cr6,L(end_max)
++
++	ldu	r12,8(r8)
++	cmpb	r10,r12,r0
++	cmpldi	cr6,r10,0
++	bne	cr6,L(done)
+ 
+ L(end_max):
+-	sub	r3,r7,r3
++	mr	r3,r4
+ 	blr
+ 
+ 	/* OK, one (or both) of the doublewords contains a null byte.  Check
+@@ -121,52 +121,59 @@
+ 	/* r10 has the output of the cmpb instruction, that is, it contains
+ 	   0xff in the same position as the null byte in the original
+ 	   doubleword from the string.  Use that to calculate the length.
+-	   We need to make sure the null char is *before* the start of the
+-	   range (since we're going backwards).  */
++	   We need to make sure the null char is *before* the end of the
++	   range.  */
+ L(done):
+-	cntlzd	r0,r10	      /* Count leading zeroes before the match.  */
+-	srdi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
+-	add	r9,r8,r0
+-	sub	r6,r9,r3      /* Length until the match.  */
+-	cmpld	r9,r7
+-	bgt	L(end_max)
+-	mr	r3,r6
+-	blr
+-
+-	.align	4
+-L(zero):
+-	li	r3,0
++#ifdef __LITTLE_ENDIAN__
++	addi	r0,r10,-1
++	andc	r0,r0,r10
++	popcntd	r0,r0
++#else
++	cntlzd	r0,r10	      /* Count leading zeros before the match.  */
++#endif
++	sub	r3,r8,r3
++	srdi	r0,r0,3	      /* Convert leading/trailing zeros to bytes.  */
++	add	r3,r3,r0      /* Length until the match.  */
++	cmpld	r3,r4
++	blelr
++	mr	r3,r4
+ 	blr
+ 
+ /* Deals with size <= 32.  */
+ 	.align	4
+ L(small_range):
+ 	cmpldi	r4,0
+-	beq	L(zero)
++	beq	L(end_max)
++
++	clrrdi	r7,r7,3       /* Address of last doubleword.  */
+ 
+ 	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+-	ld	r12,0(r8)     /* Load word from memory.  */
++	ld	r12,0(r8)     /* Load doubleword from memory.  */
+ 	cmpb	r10,r12,r0    /* Check for null bytes in DWORD1.  */
++#ifdef __LITTLE_ENDIAN__
++	srd	r10,r10,r6
++	sld	r10,r10,r6
++#else
+ 	sld	r10,r10,r6
+ 	srd	r10,r10,r6
++#endif
+ 	cmpldi	cr7,r10,0
+ 	bne	cr7,L(done)
+ 
+-	addi    r9,r8,8
+-	cmpld	r9,r7
+-	bge	L(end_max)
+-	b	L(loop_small)
++	cmpld	r8,r7
++	beq	L(end_max)
+ 
+ 	.p2align  5
+ L(loop_small):
+ 	ldu	r12,8(r8)
+ 	cmpb	r10,r12,r0
+-	addi	r9,r8,8
+ 	cmpldi	cr6,r10,0
+ 	bne	cr6,L(done)
+-	cmpld	r9,r7
+-	bge	L(end_max)
+-	b	L(loop_small)
++	cmpld	r8,r7
++	bne	L(loop_small)
++	mr	r3,r4
++	blr
++
+ END (BP_SYM (__strnlen))
+ weak_alias (BP_SYM (__strnlen), BP_SYM(strnlen))
+ libc_hidden_builtin_def (strnlen)
diff --git a/SOURCES/glibc-ppc64le-27.patch b/SOURCES/glibc-ppc64le-27.patch
new file mode 100644
index 0000000..83ca794
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-27.patch
@@ -0,0 +1,861 @@
+# commit 8a7413f9b036da83ffde491a37d9d2340bc321a7
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:41:17 2013 +0930
+# 
+#     PowerPC LE strcmp and strncmp
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00099.html
+#     
+#     More little-endian support.  I leave the main strcmp loops unchanged,
+#     (well, except for renumbering rTMP to something other than r0 since
+#     it's needed in an addi insn) and modify the tail for little-endian.
+#     
+#     I noticed some of the big-endian tail code was a little untidy so have
+#     cleaned that up too.
+#     
+#         * sysdeps/powerpc/powerpc64/strcmp.S (rTMP2): Define as r0.
+#         (rTMP): Define as r11.
+#         (strcmp): Add little-endian support.  Optimise tail.
+#         * sysdeps/powerpc/powerpc32/strcmp.S: Similarly.
+#         * sysdeps/powerpc/powerpc64/strncmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/strncmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power4/strncmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power4/strncmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/strncmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/strncmp.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/strncmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/strncmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/strncmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/strncmp.S	2014-05-28 13:27:02.000000000 -0500
+@@ -26,7 +26,7 @@
+ 
+ EALIGN (BP_SYM(strncmp), 4, 0)
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -42,6 +42,7 @@
+ #define r7F7F	r9	/* constant 0x7f7f7f7f */
+ #define rNEG	r10	/* ~(word in s1 | 0x7f7f7f7f) */
+ #define rBITDIF	r11	/* bits that differ in s1 & s2 words */
++#define rTMP	r12
+ 
+ 	dcbt	0,rSTR1
+ 	or	rTMP, rSTR2, rSTR1
+@@ -80,12 +81,45 @@
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
+ 
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	slwi	rTMP, rTMP, 1
++	addi    rTMP2, rTMP, -1
++	andc    rTMP2, rTMP2, rTMP
++	and	rWORD2, rWORD2, rTMP2		/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rldimi	rTMP2, rWORD2, 24, 32
++	rldimi	rTMP, rWORD1, 24, 32
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr+
++	ori	rRTN, rTMP2, 1
++	blr
++
++L(different):
++	lwz	rWORD1, -4(rSTR1)
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rldimi	rTMP2, rWORD2, 24, 32
++	rldimi	rTMP, rWORD1, 24, 32
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr+
++	ori	rRTN, rTMP2, 1
++	blr
++
++#else
+ L(endstring):
+ 	and	rTMP, r7F7F, rWORD1
+ 	beq	cr1, L(equal)
+ 	add	rTMP, rTMP, r7F7F
+ 	xor.	rBITDIF, rWORD1, rWORD2
+-
+ 	andc	rNEG, rNEG, rTMP
+ 	blt-	L(highbit)
+ 	cntlzw	rBITDIF, rBITDIF
+@@ -93,28 +127,20 @@
+ 	addi	rNEG, rNEG, 7
+ 	cmpw	cr1, rNEG, rBITDIF
+ 	sub	rRTN, rWORD1, rWORD2
+-	blt-	cr1, L(equal)
+-	srawi	rRTN, rRTN, 31
+-	ori	rRTN, rRTN, 1
+-	blr
++	bgelr+	cr1
+ L(equal):
+ 	li	rRTN, 0
+ 	blr
+ 
+ L(different):
+-	lwzu	rWORD1, -4(rSTR1)
++	lwz	rWORD1, -4(rSTR1)
+ 	xor.	rBITDIF, rWORD1, rWORD2
+ 	sub	rRTN, rWORD1, rWORD2
+-	blt-	L(highbit)
+-	srawi	rRTN, rRTN, 31
+-	ori	rRTN, rRTN, 1
+-	blr
++	bgelr+
+ L(highbit):
+-	srwi	rWORD2, rWORD2, 24
+-	srwi	rWORD1, rWORD1, 24
+-	sub	rRTN, rWORD1, rWORD2
++	ori	rRTN, rWORD2, 1
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strncmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strncmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strncmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strncmp.S	2014-05-28 13:27:02.000000000 -0500
+@@ -28,7 +28,7 @@
+ 
+ EALIGN (BP_SYM(strncmp),5,0)
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -44,6 +44,7 @@
+ #define r7F7F	r9	/* constant 0x7f7f7f7f */
+ #define rNEG	r10	/* ~(word in s1 | 0x7f7f7f7f) */
+ #define rBITDIF	r11	/* bits that differ in s1 & s2 words */
++#define rTMP	r12
+ 
+ 	dcbt	0,rSTR1
+ 	nop
+@@ -83,13 +84,45 @@
+ /* OK. We've hit the end of the string. We need to be careful that
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	slwi	rTMP, rTMP, 1
++	addi    rTMP2, rTMP, -1
++	andc    rTMP2, rTMP2, rTMP
++	and	rWORD2, rWORD2, rTMP2		/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rldimi	rTMP2, rWORD2, 24, 32
++	rldimi	rTMP, rWORD1, 24, 32
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr
++	ori	rRTN, rTMP2, 1
++	blr
++
++L(different):
++	lwz	rWORD1, -4(rSTR1)
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rldimi	rTMP2, rWORD2, 24, 32
++	rldimi	rTMP, rWORD1, 24, 32
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr
++	ori	rRTN, rTMP2, 1
++	blr
+ 
++#else
+ L(endstring):
+ 	and	rTMP,r7F7F,rWORD1
+ 	beq	cr1,L(equal)
+ 	add	rTMP,rTMP,r7F7F
+ 	xor.	rBITDIF,rWORD1,rWORD2
+-
+ 	andc	rNEG,rNEG,rTMP
+ 	blt	L(highbit)
+ 	cntlzw	rBITDIF,rBITDIF
+@@ -97,28 +130,20 @@
+ 	addi	rNEG,rNEG,7
+ 	cmpw	cr1,rNEG,rBITDIF
+ 	sub	rRTN,rWORD1,rWORD2
+-	blt	cr1,L(equal)
+-	srawi	rRTN,rRTN,31
+-	ori	rRTN,rRTN,1
+-	blr
++	bgelr	cr1
+ L(equal):
+ 	li	rRTN,0
+ 	blr
+ 
+ L(different):
+-	lwzu	rWORD1,-4(rSTR1)
++	lwz	rWORD1,-4(rSTR1)
+ 	xor.	rBITDIF,rWORD1,rWORD2
+ 	sub	rRTN,rWORD1,rWORD2
+-	blt	L(highbit)
+-	srawi	rRTN,rRTN,31
+-	ori	rRTN,rRTN,1
+-	blr
++	bgelr
+ L(highbit):
+-	srwi	rWORD2,rWORD2,24
+-	srwi	rWORD1,rWORD1,24
+-	sub	rRTN,rWORD1,rWORD2
++	ori	rRTN, rWORD2, 1
+ 	blr
+-
++#endif
+ 
+ /* Oh well. In this case, we just do a byte-by-byte comparison.  */
+ 	.align	4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcmp.S	2014-05-28 13:27:02.000000000 -0500
+@@ -26,7 +26,7 @@
+ 
+ EALIGN (BP_SYM (strcmp), 4, 0)
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -40,6 +40,7 @@
+ #define r7F7F	r8	/* constant 0x7f7f7f7f */
+ #define rNEG	r9	/* ~(word in s1 | 0x7f7f7f7f) */
+ #define rBITDIF	r10	/* bits that differ in s1 & s2 words */
++#define rTMP	r11
+ 
+ 	CHECK_BOUNDS_LOW (rSTR1, rTMP, rHIGH1)
+ 	CHECK_BOUNDS_LOW (rSTR2, rTMP, rHIGH2)
+@@ -64,10 +65,45 @@
+ 	and.	rTMP, rTMP, rNEG
+ 	cmpw	cr1, rWORD1, rWORD2
+ 	beq+	L(g0)
+-L(endstring):
++
+ /* OK. We've hit the end of the string. We need to be careful that
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	addi    rTMP2, rTMP, -1
++	andc    rTMP2, rTMP2, rTMP
++	rlwimi	rTMP2, rTMP2, 1, 0, 30
++	and	rWORD2, rWORD2, rTMP2		/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rlwimi	rTMP2, rWORD2, 24, 0, 7
++	rlwimi	rTMP, rWORD1, 24, 0, 7
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr+
++	ori	rRTN, rTMP2, 1
++	blr
++
++L(different):
++	lwz	rWORD1, -4(rSTR1)
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rlwimi	rTMP2, rWORD2, 24, 0, 7
++	rlwimi	rTMP, rWORD1, 24, 0, 7
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr+
++	ori	rRTN, rTMP2, 1
++	blr
++
++#else
++L(endstring):
+ 	and	rTMP, r7F7F, rWORD1
+ 	beq	cr1, L(equal)
+ 	add	rTMP, rTMP, r7F7F
+@@ -94,7 +130,7 @@
+ 	ori	rRTN, rWORD2, 1
+ 	/* GKM FIXME: check high bounds.  */
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strncmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strncmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strncmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strncmp.S	2014-05-28 13:27:02.000000000 -0500
+@@ -26,7 +26,7 @@
+ 
+ EALIGN (BP_SYM(strncmp), 4, 0)
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -40,6 +40,7 @@
+ #define r7F7F	r9	/* constant 0x7f7f7f7f */
+ #define rNEG	r10	/* ~(word in s1 | 0x7f7f7f7f) */
+ #define rBITDIF	r11	/* bits that differ in s1 & s2 words */
++#define rTMP	r12
+ 
+ 	dcbt	0,rSTR1
+ 	or	rTMP, rSTR2, rSTR1
+@@ -78,12 +79,45 @@
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
+ 
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	slwi	rTMP, rTMP, 1
++	addi    rTMP2, rTMP, -1
++	andc    rTMP2, rTMP2, rTMP
++	and	rWORD2, rWORD2, rTMP2		/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rlwimi	rTMP2, rWORD2, 24, 0, 7
++	rlwimi	rTMP, rWORD1, 24, 0, 7
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr+
++	ori	rRTN, rTMP2, 1
++	blr
++
++L(different):
++	lwz	rWORD1, -4(rSTR1)
++	rlwinm	rTMP2, rWORD2, 8, 0xffffffff	/* Byte reverse word.  */
++	rlwinm	rTMP, rWORD1, 8, 0xffffffff
++	rlwimi	rTMP2, rWORD2, 24, 0, 7
++	rlwimi	rTMP, rWORD1, 24, 0, 7
++	rlwimi	rTMP2, rWORD2, 24, 16, 23
++	rlwimi	rTMP, rWORD1, 24, 16, 23
++	xor.	rBITDIF, rTMP, rTMP2
++	sub	rRTN, rTMP, rTMP2
++	bgelr+
++	ori	rRTN, rTMP2, 1
++	blr
++
++#else
+ L(endstring):
+ 	and	rTMP, r7F7F, rWORD1
+ 	beq	cr1, L(equal)
+ 	add	rTMP, rTMP, r7F7F
+ 	xor.	rBITDIF, rWORD1, rWORD2
+-
+ 	andc	rNEG, rNEG, rTMP
+ 	blt-	L(highbit)
+ 	cntlzw	rBITDIF, rBITDIF
+@@ -91,28 +125,20 @@
+ 	addi	rNEG, rNEG, 7
+ 	cmpw	cr1, rNEG, rBITDIF
+ 	sub	rRTN, rWORD1, rWORD2
+-	blt-	cr1, L(equal)
+-	srawi	rRTN, rRTN, 31
+-	ori	rRTN, rRTN, 1
+-	blr
++	bgelr+	cr1
+ L(equal):
+ 	li	rRTN, 0
+ 	blr
+ 
+ L(different):
+-	lwzu	rWORD1, -4(rSTR1)
++	lwz	rWORD1, -4(rSTR1)
+ 	xor.	rBITDIF, rWORD1, rWORD2
+ 	sub	rRTN, rWORD1, rWORD2
+-	blt-	L(highbit)
+-	srawi	rRTN, rRTN, 31
+-	ori	rRTN, rRTN, 1
+-	blr
++	bgelr+
+ L(highbit):
+-	srwi	rWORD2, rWORD2, 24
+-	srwi	rWORD1, rWORD1, 24
+-	sub	rRTN, rWORD1, rWORD2
++	ori	rRTN, rWORD2, 1
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/strncmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/strncmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/strncmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/strncmp.S	2014-05-28 13:27:02.000000000 -0500
+@@ -27,7 +27,7 @@
+ EALIGN (BP_SYM(strncmp), 4, 0)
+ 	CALL_MCOUNT 3
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -43,6 +43,7 @@
+ #define r7F7F	r9	/* constant 0x7f7f7f7f7f7f7f7f */
+ #define rNEG	r10	/* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */
+ #define rBITDIF	r11	/* bits that differ in s1 & s2 words */
++#define rTMP	r12
+ 
+ 	dcbt	0,rSTR1
+ 	or	rTMP, rSTR2, rSTR1
+@@ -84,12 +85,59 @@
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
+ 
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	addi    rTMP2, rTMP, -1
++	beq	cr1, L(equal)
++	andc    rTMP2, rTMP2, rTMP
++	rldimi	rTMP2, rTMP2, 1, 0
++	and	rWORD2, rWORD2, rTMP2	/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	cmpd	cr1, rWORD1, rWORD2
++	beq	cr1, L(equal)
++	xor	rBITDIF, rWORD1, rWORD2	/* rBITDIF has bits that differ.  */
++	neg	rNEG, rBITDIF
++	and	rNEG, rNEG, rBITDIF	/* rNEG has LS bit that differs.  */
++	cntlzd	rNEG, rNEG		/* bitcount of the bit.  */
++	andi.	rNEG, rNEG, 56		/* bitcount to LS byte that differs. */
++	sld	rWORD1, rWORD1, rNEG	/* shift left to clear MS bytes.  */
++	sld	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt-	L(highbit)
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
++	ori	rRTN, rRTN, 1
++	blr
++L(equal):
++	li	rRTN, 0
++	blr
++
++L(different):
++	ld	rWORD1, -8(rSTR1)
++	xor	rBITDIF, rWORD1, rWORD2	/* rBITDIF has bits that differ.  */
++	neg	rNEG, rBITDIF
++	and	rNEG, rNEG, rBITDIF	/* rNEG has LS bit that differs.  */
++	cntlzd	rNEG, rNEG		/* bitcount of the bit.  */
++	andi.	rNEG, rNEG, 56		/* bitcount to LS byte that differs. */
++	sld	rWORD1, rWORD1, rNEG	/* shift left to clear MS bytes.  */
++	sld	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt-	L(highbit)
++	sradi	rRTN, rRTN, 63
++	ori	rRTN, rRTN, 1
++	blr
++L(highbit):
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
++	blr
++
++#else
+ L(endstring):
+ 	and	rTMP, r7F7F, rWORD1
+ 	beq	cr1, L(equal)
+ 	add	rTMP, rTMP, r7F7F
+ 	xor.	rBITDIF, rWORD1, rWORD2
+-
+ 	andc	rNEG, rNEG, rTMP
+ 	blt-	L(highbit)
+ 	cntlzd	rBITDIF, rBITDIF
+@@ -98,7 +146,7 @@
+ 	cmpd	cr1, rNEG, rBITDIF
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blt-	cr1, L(equal)
+-	sradi	rRTN, rRTN, 63
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
+ 	ori	rRTN, rRTN, 1
+ 	blr
+ L(equal):
+@@ -106,7 +154,7 @@
+ 	blr
+ 
+ L(different):
+-	ldu	rWORD1, -8(rSTR1)
++	ld	rWORD1, -8(rSTR1)
+ 	xor.	rBITDIF, rWORD1, rWORD2
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blt-	L(highbit)
+@@ -114,11 +162,10 @@
+ 	ori	rRTN, rRTN, 1
+ 	blr
+ L(highbit):
+-	srdi	rWORD2, rWORD2, 56
+-	srdi	rWORD1, rWORD1, 56
+-	sub	rRTN, rWORD1, rWORD2
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strncmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strncmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strncmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strncmp.S	2014-05-28 13:27:02.000000000 -0500
+@@ -29,7 +29,7 @@
+ EALIGN (BP_SYM(strncmp),5,0)
+ 	CALL_MCOUNT 3
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -45,6 +45,7 @@
+ #define r7F7F	r9	/* constant 0x7f7f7f7f7f7f7f7f */
+ #define rNEG	r10	/* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */
+ #define rBITDIF	r11	/* bits that differ in s1 & s2 words */
++#define rTMP	r12
+ 
+ 	dcbt	0,rSTR1
+ 	nop
+@@ -88,12 +89,57 @@
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
+ 
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	addi    rTMP2, rTMP, -1
++	beq	cr1, L(equal)
++	andc    rTMP2, rTMP2, rTMP
++	rldimi	rTMP2, rTMP2, 1, 0
++	and	rWORD2, rWORD2, rTMP2	/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	cmpd	cr1, rWORD1, rWORD2
++	beq	cr1, L(equal)
++	cmpb	rBITDIF, rWORD1, rWORD2	/* 0xff on equal bytes.  */
++	addi	rNEG, rBITDIF, 1
++	orc	rNEG, rNEG, rBITDIF	/* 0's below LS differing byte.  */
++	sldi	rNEG, rNEG, 8		/* 1's above LS differing byte.  */
++	andc	rWORD1, rWORD1, rNEG	/* mask off MS bytes.  */
++	andc	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt	L(highbit)
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
++	ori	rRTN, rRTN, 1
++	blr
++L(equal):
++	li	rRTN, 0
++	blr
++
++L(different):
++	ld	rWORD1, -8(rSTR1)
++	cmpb	rBITDIF, rWORD1, rWORD2	/* 0xff on equal bytes.  */
++	addi	rNEG, rBITDIF, 1
++	orc	rNEG, rNEG, rBITDIF	/* 0's below LS differing byte.  */
++	sldi	rNEG, rNEG, 8		/* 1's above LS differing byte.  */
++	andc	rWORD1, rWORD1, rNEG	/* mask off MS bytes.  */
++	andc	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt	L(highbit)
++	sradi	rRTN, rRTN, 63
++	ori	rRTN, rRTN, 1
++	blr
++L(highbit):
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
++	blr
++
++#else
+ L(endstring):
+ 	and	rTMP,r7F7F,rWORD1
+ 	beq	cr1,L(equal)
+ 	add	rTMP,rTMP,r7F7F
+ 	xor.	rBITDIF,rWORD1,rWORD2
+-
+ 	andc	rNEG,rNEG,rTMP
+ 	blt	L(highbit)
+ 	cntlzd	rBITDIF,rBITDIF
+@@ -102,7 +148,7 @@
+ 	cmpd	cr1,rNEG,rBITDIF
+ 	sub	rRTN,rWORD1,rWORD2
+ 	blt	cr1,L(equal)
+-	sradi	rRTN,rRTN,63
++	sradi	rRTN,rRTN,63		/* must return an int.  */
+ 	ori	rRTN,rRTN,1
+ 	blr
+ L(equal):
+@@ -110,7 +156,7 @@
+ 	blr
+ 
+ L(different):
+-	ldu	rWORD1,-8(rSTR1)
++	ld	rWORD1,-8(rSTR1)
+ 	xor.	rBITDIF,rWORD1,rWORD2
+ 	sub	rRTN,rWORD1,rWORD2
+ 	blt	L(highbit)
+@@ -118,11 +164,10 @@
+ 	ori	rRTN,rRTN,1
+ 	blr
+ L(highbit):
+-	srdi	rWORD2,rWORD2,56
+-	srdi	rWORD1,rWORD1,56
+-	sub	rRTN,rWORD1,rWORD2
++	sradi	rRTN,rWORD2,63
++	ori	rRTN,rRTN,1
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align	4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcmp.S	2014-05-28 13:37:15.000000000 -0500
+@@ -27,7 +27,7 @@
+ EALIGN (BP_SYM(strcmp), 4, 0)
+ 	CALL_MCOUNT 2
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -46,6 +46,7 @@
+ #define r7F7F	r8	/* constant 0x7f7f7f7f7f7f7f7f */
+ #define rNEG	r9	/* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */
+ #define rBITDIF	r10	/* bits that differ in s1 & s2 words */
++#define rTMP	r11
+ 
+ 	CHECK_BOUNDS_LOW (rSTR1, rTMP, rHIGH1)
+ 	CHECK_BOUNDS_LOW (rSTR2, rTMP, rHIGH2)
+@@ -72,19 +73,66 @@
+ 	ldu	rWORD2, 8(rSTR2)
+ L(g1):	add	rTMP, rFEFE, rWORD1
+ 	nor	rNEG, r7F7F, rWORD1
+-
+ 	and.	rTMP, rTMP, rNEG
+ 	cmpd	cr1, rWORD1, rWORD2
+ 	beq+	L(g0)
+-L(endstring):
++
+ /* OK. We've hit the end of the string. We need to be careful that
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	addi    rTMP2, rTMP, -1
++	beq	cr1, L(equal)
++	andc    rTMP2, rTMP2, rTMP
++	rldimi	rTMP2, rTMP2, 1, 0
++	and	rWORD2, rWORD2, rTMP2	/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	cmpd	cr1, rWORD1, rWORD2
++	beq	cr1, L(equal)
++	xor	rBITDIF, rWORD1, rWORD2	/* rBITDIF has bits that differ.  */
++	neg	rNEG, rBITDIF
++	and	rNEG, rNEG, rBITDIF	/* rNEG has LS bit that differs.  */
++	cntlzd	rNEG, rNEG		/* bitcount of the bit.  */
++	andi.	rNEG, rNEG, 56		/* bitcount to LS byte that differs. */
++	sld	rWORD1, rWORD1, rNEG	/* shift left to clear MS bytes.  */
++	sld	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt-	L(highbit)
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
++	ori	rRTN, rRTN, 1
++	blr
++L(equal):
++	li	rRTN, 0
++	blr
++
++L(different):
++	ld	rWORD1, -8(rSTR1)
++	xor	rBITDIF, rWORD1, rWORD2	/* rBITDIF has bits that differ.  */
++	neg	rNEG, rBITDIF
++	and	rNEG, rNEG, rBITDIF	/* rNEG has LS bit that differs.  */
++	cntlzd	rNEG, rNEG		/* bitcount of the bit.  */
++	andi.	rNEG, rNEG, 56		/* bitcount to LS byte that differs. */
++	sld	rWORD1, rWORD1, rNEG	/* shift left to clear MS bytes.  */
++	sld	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt-	L(highbit)
++	sradi	rRTN, rRTN, 63
++	ori	rRTN, rRTN, 1
++	blr
++L(highbit):
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
++	blr
++
++#else
++L(endstring):
+ 	and	rTMP, r7F7F, rWORD1
+ 	beq	cr1, L(equal)
+ 	add	rTMP, rTMP, r7F7F
+ 	xor.	rBITDIF, rWORD1, rWORD2
+-
+ 	andc	rNEG, rNEG, rTMP
+ 	blt-	L(highbit)
+ 	cntlzd	rBITDIF, rBITDIF
+@@ -93,7 +141,7 @@
+ 	cmpd	cr1, rNEG, rBITDIF
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blt-	cr1, L(equal)
+-	sradi	rRTN, rRTN, 63
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
+ 	ori	rRTN, rRTN, 1
+ 	blr
+ L(equal):
+@@ -110,12 +158,11 @@
+ 	ori	rRTN, rRTN, 1
+ 	blr
+ L(highbit):
+-	srdi	rWORD2, rWORD2, 56
+-	srdi	rWORD1, rWORD1, 56
+-	sub	rRTN, rWORD1, rWORD2
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
+ 	/* GKM FIXME: check high bounds.  */
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strncmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strncmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strncmp.S	2014-05-28 13:26:59.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strncmp.S	2014-05-28 13:38:31.000000000 -0500
+@@ -27,7 +27,7 @@
+ EALIGN (BP_SYM(strncmp), 4, 0)
+ 	CALL_MCOUNT 3
+ 
+-#define rTMP	r0
++#define rTMP2	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -41,6 +41,7 @@
+ #define r7F7F	r9	/* constant 0x7f7f7f7f7f7f7f7f */
+ #define rNEG	r10	/* ~(word in s1 | 0x7f7f7f7f7f7f7f7f) */
+ #define rBITDIF	r11	/* bits that differ in s1 & s2 words */
++#define rTMP	r12
+ 
+ 	dcbt	0,rSTR1
+ 	or	rTMP, rSTR2, rSTR1
+@@ -81,13 +82,60 @@
+ /* OK. We've hit the end of the string. We need to be careful that
+    we don't compare two strings as different because of gunk beyond
+    the end of the strings...  */
+-	
++
++#ifdef __LITTLE_ENDIAN__
++L(endstring):
++	addi    rTMP2, rTMP, -1
++	beq	cr1, L(equal)
++	andc    rTMP2, rTMP2, rTMP
++	rldimi	rTMP2, rTMP2, 1, 0
++	and	rWORD2, rWORD2, rTMP2	/* Mask off gunk.  */
++	and	rWORD1, rWORD1, rTMP2
++	cmpd	cr1, rWORD1, rWORD2
++	beq	cr1, L(equal)
++	xor	rBITDIF, rWORD1, rWORD2	/* rBITDIF has bits that differ.  */
++	neg	rNEG, rBITDIF
++	and	rNEG, rNEG, rBITDIF	/* rNEG has LS bit that differs.  */
++	cntlzd	rNEG, rNEG		/* bitcount of the bit.  */
++	andi.	rNEG, rNEG, 56		/* bitcount to LS byte that differs. */
++	sld	rWORD1, rWORD1, rNEG	/* shift left to clear MS bytes.  */
++	sld	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt-	L(highbit)
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
++	ori	rRTN, rRTN, 1
++	blr
++L(equal):
++	li	rRTN, 0
++	blr
++
++L(different):
++	ld	rWORD1, -8(rSTR1)
++	xor	rBITDIF, rWORD1, rWORD2	/* rBITDIF has bits that differ.  */
++	neg	rNEG, rBITDIF
++	and	rNEG, rNEG, rBITDIF	/* rNEG has LS bit that differs.  */
++	cntlzd	rNEG, rNEG		/* bitcount of the bit.  */
++	andi.	rNEG, rNEG, 56		/* bitcount to LS byte that differs. */
++	sld	rWORD1, rWORD1, rNEG	/* shift left to clear MS bytes.  */
++	sld	rWORD2, rWORD2, rNEG
++	xor.	rBITDIF, rWORD1, rWORD2
++	sub	rRTN, rWORD1, rWORD2
++	blt-	L(highbit)
++	sradi	rRTN, rRTN, 63
++	ori	rRTN, rRTN, 1
++	blr
++L(highbit):
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
++	blr
++
++#else
+ L(endstring):
+ 	and	rTMP, r7F7F, rWORD1
+ 	beq	cr1, L(equal)
+ 	add	rTMP, rTMP, r7F7F
+ 	xor.	rBITDIF, rWORD1, rWORD2
+-
+ 	andc	rNEG, rNEG, rTMP
+ 	blt-	L(highbit)
+ 	cntlzd	rBITDIF, rBITDIF
+@@ -96,7 +144,7 @@
+ 	cmpd	cr1, rNEG, rBITDIF
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blt-	cr1, L(equal)
+-	sradi	rRTN, rRTN, 63
++	sradi	rRTN, rRTN, 63		/* must return an int.  */
+ 	ori	rRTN, rRTN, 1
+ 	blr
+ L(equal):
+@@ -104,7 +152,7 @@
+ 	blr
+ 
+ L(different):
+-	ldu	rWORD1, -8(rSTR1)
++	ld	rWORD1, -8(rSTR1)
+ 	xor.	rBITDIF, rWORD1, rWORD2
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blt-	L(highbit)
+@@ -112,11 +160,10 @@
+ 	ori	rRTN, rRTN, 1
+ 	blr
+ L(highbit):
+-	srdi	rWORD2, rWORD2, 56
+-	srdi	rWORD1, rWORD1, 56
+-	sub	rRTN, rWORD1, rWORD2
++	sradi	rRTN, rWORD2, 63
++	ori	rRTN, rRTN, 1
+ 	blr
+-
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte comparison.  */
+ 	.align 4
diff --git a/SOURCES/glibc-ppc64le-28.patch b/SOURCES/glibc-ppc64le-28.patch
new file mode 100644
index 0000000..05f63e9
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-28.patch
@@ -0,0 +1,167 @@
+# commit 43b84013714c46e6dcae4a5564c5527777ad5e08
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:45:31 2013 +0930
+# 
+#     PowerPC LE strcpy
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00100.html
+#     
+#     The strcpy changes for little-endian are quite straight-forward, just
+#     a matter of rotating the last word differently.
+#     
+#     I'll note that the powerpc64 version of stpcpy is just begging to be
+#     converted to use 64-bit loads and stores..
+#     
+#         * sysdeps/powerpc/powerpc64/strcpy.S: Add little-endian support:
+#         * sysdeps/powerpc/powerpc32/strcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/stpcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/stpcpy.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/stpcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/stpcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/stpcpy.S	2014-05-28 13:40:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/stpcpy.S	2014-05-28 13:40:01.000000000 -0500
+@@ -74,7 +74,22 @@
+ 
+ 	mr	rALT, rWORD
+ /* We've hit the end of the string.  Do the rest byte-by-byte.  */
+-L(g1):	rlwinm.	rTMP, rALT, 8, 24, 31
++L(g1):
++#ifdef __LITTLE_ENDIAN__
++	rlwinm.	rTMP, rALT, 0, 24, 31
++	stbu	rALT, 4(rDEST)
++	beqlr-
++	rlwinm.	rTMP, rALT, 24, 24, 31
++	stbu	rTMP, 1(rDEST)
++	beqlr-
++	rlwinm.	rTMP, rALT, 16, 24, 31
++	stbu	rTMP, 1(rDEST)
++	beqlr-
++	rlwinm	rTMP, rALT, 8, 24, 31
++	stbu	rTMP, 1(rDEST)
++	blr
++#else
++	rlwinm.	rTMP, rALT, 8, 24, 31
+ 	stbu	rTMP, 4(rDEST)
+ 	beqlr-
+ 	rlwinm.	rTMP, rALT, 16, 24, 31
+@@ -87,6 +102,7 @@
+ 	CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
+ 	STORE_RETURN_VALUE (rDEST)
+ 	blr
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte copy.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcpy.S	2014-05-28 13:40:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strcpy.S	2014-05-28 13:40:01.000000000 -0500
+@@ -78,7 +78,22 @@
+ 
+ 	mr	rALT, rWORD
+ /* We've hit the end of the string.  Do the rest byte-by-byte.  */
+-L(g1):	rlwinm.	rTMP, rALT, 8, 24, 31
++L(g1):
++#ifdef __LITTLE_ENDIAN__
++	rlwinm.	rTMP, rALT, 0, 24, 31
++	stb	rALT, 4(rDEST)
++	beqlr-
++	rlwinm.	rTMP, rALT, 24, 24, 31
++	stb	rTMP, 5(rDEST)
++	beqlr-
++	rlwinm.	rTMP, rALT, 16, 24, 31
++	stb	rTMP, 6(rDEST)
++	beqlr-
++	rlwinm	rTMP, rALT, 8, 24, 31
++	stb	rTMP, 7(rDEST)
++	blr
++#else
++	rlwinm.	rTMP, rALT, 8, 24, 31
+ 	stb	rTMP, 4(rDEST)
+ 	beqlr-
+ 	rlwinm.	rTMP, rALT, 16, 24, 31
+@@ -90,6 +105,7 @@
+ 	stb	rALT, 7(rDEST)
+ 	/* GKM FIXME: check high bound.  */
+ 	blr
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte copy.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/stpcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/stpcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/stpcpy.S	2014-05-28 13:40:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/stpcpy.S	2014-05-28 13:40:01.000000000 -0500
+@@ -75,7 +75,22 @@
+ 
+ 	mr	rALT, rWORD
+ /* We've hit the end of the string.  Do the rest byte-by-byte.  */
+-L(g1):	rlwinm.	rTMP, rALT, 8, 24, 31
++L(g1):
++#ifdef __LITTLE_ENDIAN__
++	rlwinm.	rTMP, rALT, 0, 24, 31
++	stbu	rALT, 4(rDEST)
++	beqlr-
++	rlwinm.	rTMP, rALT, 24, 24, 31
++	stbu	rTMP, 1(rDEST)
++	beqlr-
++	rlwinm.	rTMP, rALT, 16, 24, 31
++	stbu	rTMP, 1(rDEST)
++	beqlr-
++	rlwinm	rTMP, rALT, 8, 24, 31
++	stbu	rTMP, 1(rDEST)
++	blr
++#else
++	rlwinm.	rTMP, rALT, 8, 24, 31
+ 	stbu	rTMP, 4(rDEST)
+ 	beqlr-
+ 	rlwinm.	rTMP, rALT, 16, 24, 31
+@@ -88,6 +103,7 @@
+ 	CHECK_BOUNDS_HIGH (rDEST, rHIGH, twlgt)
+ 	STORE_RETURN_VALUE (rDEST)
+ 	blr
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte copy.  */
+ 	.align 4
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcpy.S	2014-05-28 13:40:01.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strcpy.S	2014-05-28 13:40:01.000000000 -0500
+@@ -90,6 +90,32 @@
+ 	mr	rALT, rWORD
+ /* We've hit the end of the string.  Do the rest byte-by-byte.  */
+ L(g1):
++#ifdef __LITTLE_ENDIAN__
++	extrdi.	rTMP, rALT, 8, 56
++	stb	rALT, 8(rDEST)
++	beqlr-
++	extrdi.	rTMP, rALT, 8, 48
++	stb	rTMP, 9(rDEST)
++	beqlr-
++	extrdi.	rTMP, rALT, 8, 40
++	stb	rTMP, 10(rDEST)
++	beqlr-
++	extrdi.	rTMP, rALT, 8, 32
++	stb	rTMP, 11(rDEST)
++	beqlr-
++	extrdi.	rTMP, rALT, 8, 24
++	stb	rTMP, 12(rDEST)
++	beqlr-
++	extrdi.	rTMP, rALT, 8, 16
++	stb	rTMP, 13(rDEST)
++	beqlr-
++	extrdi.	rTMP, rALT, 8, 8
++	stb	rTMP, 14(rDEST)
++	beqlr-
++	extrdi	rTMP, rALT, 8, 0
++	stb	rTMP, 15(rDEST)
++	blr
++#else
+ 	extrdi.	rTMP, rALT, 8, 0
+ 	stb	rTMP, 8(rDEST)
+ 	beqlr-
+@@ -114,6 +140,7 @@
+ 	stb	rALT, 15(rDEST)
+ 	/* GKM FIXME: check high bound.  */
+ 	blr
++#endif
+ 
+ /* Oh well.  In this case, we just do a byte-by-byte copy.  */
+ 	.align 4
diff --git a/SOURCES/glibc-ppc64le-29.patch b/SOURCES/glibc-ppc64le-29.patch
new file mode 100644
index 0000000..291155e
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-29.patch
@@ -0,0 +1,642 @@
+# commit 664318c3eb07032e2bfcf47cb2aa3c89280c19e7
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:46:05 2013 +0930
+# 
+#     PowerPC LE strchr
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00101.html
+#     
+#     Adds little-endian support to optimised strchr assembly.  I've also
+#     tweaked the big-endian code a little.  In power7/strchr.S there's a
+#     check in the tail of the function that we didn't match 0 before
+#     finding a c match, done by comparing leading zero counts.  It's just
+#     as valid, and quicker, to compare the raw output from cmpb.
+#     
+#     Another little tweak is to use rldimi/insrdi in place of rlwimi for
+#     the power7 strchr functions.  Since rlwimi is cracked, it is a few
+#     cycles slower.  rldimi can be used on the 32-bit power7 functions
+#     too.
+#     
+#         * sysdeps/powerpc/powerpc64/power7/strchr.S (strchr): Add little-endian
+#         support.  Correct typos, formatting.  Optimize tail.  Use insrdi
+#         rather than rlwimi.
+#         * sysdeps/powerpc/powerpc32/power7/strchr.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/strchrnul.S (__strchrnul): Add
+#         little-endian support.  Correct typos.
+#         * sysdeps/powerpc/powerpc32/power7/strchrnul.S: Likewise.  Use insrdi
+#         rather than rlwimi.
+#         * sysdeps/powerpc/powerpc64/strchr.S (rTMP4, rTMP5): Define.  Use
+#         in loop and entry code to keep "and." results.
+#         (strchr): Add little-endian support.  Comment.  Move cntlzd
+#         earlier in tail.
+#         * sysdeps/powerpc/powerpc32/strchr.S: Likewise.
+# 
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strchr.S
+===================================================================
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strchr.S.orig
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strchr.S
+@@ -37,8 +37,8 @@ ENTRY (BP_SYM(strchr))
+ 	beq	cr7,L(null_match)
+ 
+ 	/* Replicate byte to word.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
++	insrdi	r4,r4,16,32
+ 
+ 	/* Now r4 has a word of c bytes and r0 has
+ 	   a word of null bytes.  */
+@@ -48,11 +48,17 @@ ENTRY (BP_SYM(strchr))
+ 
+ 	/* Move the words left and right to discard the bits that are
+ 	   not part of the string and to bring them back as zeros.  */
+-
++#ifdef __LITTLE_ENDIAN__
++	srw	r10,r10,r6
++	srw	r11,r11,r6
++	slw	r10,r10,r6
++	slw	r11,r11,r6
++#else
+ 	slw	r10,r10,r6
+ 	slw	r11,r11,r6
+ 	srw	r10,r10,r6
+ 	srw	r11,r11,r6
++#endif
+ 	or	r5,r10,r11    /* OR the results to speed things up.  */
+ 	cmpwi	cr7,r5,0      /* If r5 == 0, no c or null bytes
+ 				 have been found.  */
+@@ -67,7 +73,7 @@ ENTRY (BP_SYM(strchr))
+ 
+ 	/* Handle WORD2 of pair.  */
+ 	lwzu	r12,4(r8)
+-	cmpb    r10,r12,r4
++	cmpb	r10,r12,r4
+ 	cmpb	r11,r12,r0
+ 	or	r5,r10,r11
+ 	cmpwi	cr7,r5,0
+@@ -102,22 +108,31 @@ L(loop):
+ 	bne	cr6,L(done)
+ 
+ 	/* The c/null byte must be in the second word.  Adjust the address
+-	   again and move the result of cmpb to r10 so we can calculate the
+-	   pointer.  */
++	   again and move the result of cmpb to r10/r11 so we can calculate
++	   the pointer.  */
+ 
+ 	mr	r10,r6
+ 	mr	r11,r7
+ 	addi	r8,r8,4
+ 
+-	/* r5 has the output of the cmpb instruction, that is, it contains
++	/* r10/r11 have the output of the cmpb instructions, that is,
+ 	   0xff in the same position as the c/null byte in the original
+ 	   word from the string.  Use that to calculate the pointer.  */
+ L(done):
+-	cntlzw	r4,r10	      /* Count leading zeroes before c matches.  */
+-	cntlzw	r0,r11	      /* Count leading zeroes before null matches.  */
+-	cmplw	cr7,r4,r0
++#ifdef __LITTLE_ENDIAN__
++	addi    r3,r10,-1
++	andc    r3,r3,r10
++	popcntw	r0,r3
++	addi    r4,r11,-1
++	andc    r4,r4,r11
++	cmplw	cr7,r3,r4
++	bgt	cr7,L(no_match)
++#else
++	cntlzw	r0,r10	      /* Count leading zeros before c matches.  */
++	cmplw	cr7,r11,r10
+ 	bgt	cr7,L(no_match)
+-	srwi	r0,r4,3	      /* Convert leading zeroes to bytes.  */
++#endif
++	srwi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of the matching c byte
+ 				 or null in case c was not found.  */
+ 	blr
+@@ -135,10 +150,14 @@ L(null_match):
+ 	cmpb	r5,r12,r0     /* Compare each byte against null bytes.  */
+ 
+ 	/* Move the words left and right to discard the bits that are
+-	   not part of the string and to bring them back as zeros.  */
+-
++	   not part of the string and bring them back as zeros.  */
++#ifdef __LITTLE_ENDIAN__
++	srw	r5,r5,r6
++	slw	r5,r5,r6
++#else
+ 	slw	r5,r5,r6
+ 	srw	r5,r5,r6
++#endif
+ 	cmpwi	cr7,r5,0      /* If r10 == 0, no c or null bytes
+ 				 have been found.  */
+ 	bne	cr7,L(done_null)
+@@ -193,7 +212,13 @@ L(loop_null):
+ 	   0xff in the same position as the null byte in the original
+ 	   word from the string.  Use that to calculate the pointer.  */
+ L(done_null):
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r5,-1
++	andc    r0,r0,r5
++	popcntw	r0,r0
++#else
+ 	cntlzw	r0,r5	      /* Count leading zeros before the match.  */
++#endif
+ 	srwi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of the matching null byte.  */
+ 	blr
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strchrnul.S
+===================================================================
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strchrnul.S.orig
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/strchrnul.S
+@@ -29,8 +29,8 @@ ENTRY (BP_SYM(__strchrnul))
+ 	clrrwi	r8,r3,2	      /* Align the address to word boundary.  */
+ 
+ 	/* Replicate byte to word.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
++	insrdi	r4,r4,16,32
+ 
+ 	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
+ 	lwz	r12,0(r8)     /* Load word from memory.  */
+@@ -45,10 +45,17 @@ ENTRY (BP_SYM(__strchrnul))
+ 
+ 	/* Move the words left and right to discard the bits that are
+ 	   not part of the string and bring them back as zeros.  */
++#ifdef __LITTLE_ENDIAN__
++	srw	r10,r10,r6
++	srw	r9,r9,r6
++	slw	r10,r10,r6
++	slw	r9,r9,r6
++#else
+ 	slw	r10,r10,r6
+ 	slw	r9,r9,r6
+ 	srw	r10,r10,r6
+ 	srw	r9,r9,r6
++#endif
+ 	or	r5,r9,r10     /* OR the results to speed things up.  */
+ 	cmpwi	cr7,r5,0      /* If r5 == 0, no c or null bytes
+ 				 have been found.  */
+@@ -56,7 +63,7 @@ ENTRY (BP_SYM(__strchrnul))
+ 
+ 	mtcrf   0x01,r8
+ 
+-	/* Are we now aligned to a quadword boundary?  If so, skip to
++	/* Are we now aligned to a doubleword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+ 
+ 	bt	29,L(loop)
+@@ -78,7 +85,7 @@ L(loop):
+ 	   single register for speed.  This is an attempt
+ 	   to speed up the null-checking process for bigger strings.  */
+ 	lwz	r12,4(r8)
+-	lwzu     r11,8(r8)
++	lwzu	r11,8(r8)
+ 	cmpb	r10,r12,r0
+ 	cmpb	r9,r12,r4
+ 	cmpb	r6,r11,r0
+@@ -97,9 +104,9 @@ L(loop):
+ 	addi	r8,r8,-4
+ 	bne	cr6,L(done)
+ 
+-	/* The c/null byte must be in the second word.  Adjust the
+-	   address again and move the result of cmpb to r10 so we can calculate
+-	   the pointer.  */
++	/* The c/null byte must be in the second word.  Adjust the address
++	   again and move the result of cmpb to r5 so we can calculate the
++	   pointer.  */
+ 	mr	r5,r10
+ 	addi	r8,r8,4
+ 
+@@ -107,7 +114,13 @@ L(loop):
+ 	   0xff in the same position as the c/null byte in the original
+ 	   word from the string.  Use that to calculate the pointer.  */
+ L(done):
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r5,-1
++	andc    r0,r0,r5
++	popcntw	r0,r0
++#else
+ 	cntlzw	r0,r5	      /* Count leading zeros before the match.  */
++#endif
+ 	srwi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of matching c/null byte.  */
+ 	blr
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strchr.S
+===================================================================
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strchr.S.orig
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/strchr.S
+@@ -44,6 +44,8 @@ ENTRY (BP_SYM (strchr))
+ #define rIGN	r10	/* number of bits we should ignore in the first word */
+ #define rMASK	r11	/* mask with the bits to ignore set to 0 */
+ #define rTMP3	r12
++#define rTMP4	rIGN
++#define rTMP5	rMASK
+ 
+ 	CHECK_BOUNDS_LOW (rSTR, rTMP1, rTMP2)
+ 	STORE_RETURN_BOUNDS (rTMP1, rTMP2)
+@@ -59,53 +61,74 @@ ENTRY (BP_SYM (strchr))
+ 	addi	r7F7F, r7F7F, 0x7f7f
+ /* Test the first (partial?) word.  */
+ 	lwz	rWORD, 0(rSTR)
++#ifdef __LITTLE_ENDIAN__
++	slw	rMASK, rMASK, rIGN
++#else
+ 	srw	rMASK, rMASK, rIGN
++#endif
+ 	orc	rWORD, rWORD, rMASK
+ 	add	rTMP1, rFEFE, rWORD
+ 	nor	rTMP2, r7F7F, rWORD
+-	and.	rTMP1, rTMP1, rTMP2
++	and.	rTMP4, rTMP1, rTMP2
+ 	xor	rTMP3, rCHR, rWORD
+ 	orc	rTMP3, rTMP3, rMASK
+ 	b	L(loopentry)
+ 
+ /* The loop.  */
+ 
+-L(loop):lwzu rWORD, 4(rSTR)
+-	and.	rTMP1, rTMP1, rTMP2
++L(loop):
++	lwzu	rWORD, 4(rSTR)
++	and.	rTMP5, rTMP1, rTMP2
+ /* Test for 0.	*/
+-	add	rTMP1, rFEFE, rWORD
+-	nor	rTMP2, r7F7F, rWORD
++	add	rTMP1, rFEFE, rWORD /* x - 0x01010101.  */
++	nor	rTMP2, r7F7F, rWORD /* ~(x | 0x7f7f7f7f) == ~x & 0x80808080.  */
+ 	bne	L(foundit)
+-	and.	rTMP1, rTMP1, rTMP2
++	and.	rTMP4, rTMP1, rTMP2 /* (x - 0x01010101) & ~x & 0x80808080.  */
+ /* Start test for the bytes we're looking for.  */
+ 	xor	rTMP3, rCHR, rWORD
+ L(loopentry):
+ 	add	rTMP1, rFEFE, rTMP3
+ 	nor	rTMP2, r7F7F, rTMP3
+ 	beq	L(loop)
++
+ /* There is a zero byte in the word, but may also be a matching byte (either
+    before or after the zero byte).  In fact, we may be looking for a
+-   zero byte, in which case we return a match.  We guess that this hasn't
+-   happened, though.  */
+-L(missed):
+-	and.	rTMP1, rTMP1, rTMP2
++   zero byte, in which case we return a match.  */
++	and.	rTMP5, rTMP1, rTMP2
+ 	li	rRTN, 0
+ 	STORE_RETURN_VALUE (rSTR)
+ 	beqlr
+-/* It did happen. Decide which one was first...
+-   I'm not sure if this is actually faster than a sequence of
+-   rotates, compares, and branches (we use it anyway because it's shorter).  */
++/* At this point:
++   rTMP5 bytes are 0x80 for each match of c, 0 otherwise.
++   rTMP4 bytes are 0x80 for each match of 0, 0 otherwise.
++   But there may be false matches in the next most significant byte from
++   a true match due to carries.  This means we need to recalculate the
++   matches using a longer method for big-endian.  */
++#ifdef __LITTLE_ENDIAN__
++	addi	rTMP1, rTMP5, -1
++	andc	rTMP1, rTMP1, rTMP5
++	cntlzw	rCLZB, rTMP1
++	addi	rTMP2, rTMP4, -1
++	andc	rTMP2, rTMP2, rTMP4
++	cmplw	rTMP1, rTMP2
++	bgtlr
++	subfic	rCLZB, rCLZB, 32-7
++#else
++/* I think we could reduce this by two instructions by keeping the "nor"
++   results from the loop for reuse here.  See strlen.S tail.  Similarly
++   one instruction could be pruned from L(foundit).  */
+ 	and	rFEFE, r7F7F, rWORD
+-	or	rMASK, r7F7F, rWORD
++	or	rTMP5, r7F7F, rWORD
+ 	and	rTMP1, r7F7F, rTMP3
+-	or	rIGN, r7F7F, rTMP3
++	or	rTMP4, r7F7F, rTMP3
+ 	add	rFEFE, rFEFE, r7F7F
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor	rWORD, rMASK, rFEFE
+-	nor	rTMP2, rIGN, rTMP1
++	nor	rWORD, rTMP5, rFEFE
++	nor	rTMP2, rTMP4, rTMP1
++	cntlzw	rCLZB, rTMP2
+ 	cmplw	rWORD, rTMP2
+ 	bgtlr
+-	cntlzw	rCLZB, rTMP2
++#endif
+ 	srwi	rCLZB, rCLZB, 3
+ 	add	rRTN, rSTR, rCLZB
+ 	CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, twlge)
+@@ -113,13 +136,21 @@ L(missed):
+ 	blr
+ 
+ L(foundit):
++#ifdef __LITTLE_ENDIAN__
++	addi	rTMP1, rTMP5, -1
++	andc	rTMP1, rTMP1, rTMP5
++	cntlzw	rCLZB, rTMP1
++	subfic	rCLZB, rCLZB, 32-7-32
++	srawi	rCLZB, rCLZB, 3
++#else
+ 	and	rTMP1, r7F7F, rTMP3
+-	or	rIGN, r7F7F, rTMP3
++	or	rTMP4, r7F7F, rTMP3
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor	rTMP2, rIGN, rTMP1
++	nor	rTMP2, rTMP4, rTMP1
+ 	cntlzw	rCLZB, rTMP2
+ 	subi	rSTR, rSTR, 4
+ 	srwi	rCLZB, rCLZB, 3
++#endif
+ 	add	rRTN, rSTR, rCLZB
+ 	CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, twlge)
+ 	STORE_RETURN_VALUE (rSTR)
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strchr.S
+===================================================================
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strchr.S.orig
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strchr.S
+@@ -37,8 +37,8 @@ ENTRY (BP_SYM(strchr))
+ 	beq	cr7,L(null_match)
+ 
+ 	/* Replicate byte to doubleword.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
++	insrdi	r4,r4,16,32
+ 	insrdi  r4,r4,32,0
+ 
+ 	/* Now r4 has a doubleword of c bytes and r0 has
+@@ -49,11 +49,17 @@ ENTRY (BP_SYM(strchr))
+ 
+ 	/* Move the doublewords left and right to discard the bits that are
+ 	   not part of the string and bring them back as zeros.  */
+-
++#ifdef __LITTLE_ENDIAN__
++	srd	r10,r10,r6
++	srd	r11,r11,r6
++	sld	r10,r10,r6
++	sld	r11,r11,r6
++#else
+ 	sld	r10,r10,r6
+ 	sld	r11,r11,r6
+ 	srd	r10,r10,r6
+ 	srd	r11,r11,r6
++#endif
+ 	or	r5,r10,r11    /* OR the results to speed things up.  */
+ 	cmpdi	cr7,r5,0      /* If r5 == 0, no c or null bytes
+ 				 have been found.  */
+@@ -110,15 +116,24 @@ L(loop):
+ 	mr	r11,r7
+ 	addi	r8,r8,8
+ 
+-	/* r5 has the output of the cmpb instruction, that is, it contains
++	/* r10/r11 have the output of the cmpb instructions, that is,
+ 	   0xff in the same position as the c/null byte in the original
+ 	   doubleword from the string.  Use that to calculate the pointer.  */
+ L(done):
+-	cntlzd	r4,r10	      /* Count leading zeroes before c matches.  */
+-	cntlzd	r0,r11	      /* Count leading zeroes before null matches.  */
+-	cmpld	cr7,r4,r0
++#ifdef __LITTLE_ENDIAN__
++	addi    r3,r10,-1
++	andc    r3,r3,r10
++	popcntd	r0,r3
++	addi    r4,r11,-1
++	andc    r4,r4,r11
++	cmpld	cr7,r3,r4
+ 	bgt	cr7,L(no_match)
+-	srdi	r0,r4,3	      /* Convert leading zeroes to bytes.  */
++#else
++	cntlzd	r0,r10	      /* Count leading zeros before c matches.  */
++	cmpld	cr7,r11,r10
++	bgt	cr7,L(no_match)
++#endif
++	srdi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of the matching c byte
+ 				 or null in case c was not found.  */
+ 	blr
+@@ -137,9 +152,13 @@ L(null_match):
+ 
+ 	/* Move the doublewords left and right to discard the bits that are
+ 	   not part of the string and bring them back as zeros.  */
+-
++#ifdef __LITTLE_ENDIAN__
++	srd	r5,r5,r6
++	sld	r5,r5,r6
++#else
+ 	sld	r5,r5,r6
+ 	srd	r5,r5,r6
++#endif
+ 	cmpdi	cr7,r5,0      /* If r10 == 0, no c or null bytes
+ 				 have been found.  */
+ 	bne	cr7,L(done_null)
+@@ -194,7 +213,13 @@ L(loop_null):
+ 	   0xff in the same position as the null byte in the original
+ 	   doubleword from the string.  Use that to calculate the pointer.  */
+ L(done_null):
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r5,-1
++	andc    r0,r0,r5
++	popcntd	r0,r0
++#else
+ 	cntlzd	r0,r5	      /* Count leading zeros before the match.  */
++#endif
+ 	srdi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of the matching null byte.  */
+ 	blr
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strchrnul.S
+===================================================================
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strchrnul.S.orig
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/strchrnul.S
+@@ -29,8 +29,8 @@ ENTRY (BP_SYM(__strchrnul))
+ 	clrrdi	r8,r3,3	      /* Align the address to doubleword boundary.  */
+ 
+ 	/* Replicate byte to doubleword.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
++	insrdi	r4,r4,16,32
+ 	insrdi	r4,r4,32,0
+ 
+ 	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+@@ -46,10 +46,17 @@ ENTRY (BP_SYM(__strchrnul))
+ 
+ 	/* Move the doublewords left and right to discard the bits that are
+ 	   not part of the string and to bring them back as zeros.  */
++#ifdef __LITTLE_ENDIAN__
++	srd	r10,r10,r6
++	srd	r9,r9,r6
++	sld	r10,r10,r6
++	sld	r9,r9,r6
++#else
+ 	sld	r10,r10,r6
+ 	sld	r9,r9,r6
+ 	srd	r10,r10,r6
+ 	srd	r9,r9,r6
++#endif
+ 	or	r5,r9,r10     /* OR the results to speed things up.  */
+ 	cmpdi	cr7,r5,0      /* If r5 == 0, no c or null bytes
+ 				 have been found.  */
+@@ -99,7 +106,7 @@ L(loop):
+ 	bne	cr6,L(done)
+ 
+ 	/* The c/null byte must be in the second doubleword.  Adjust the
+-	   address again and move the result of cmpb to r10 so we can calculate
++	   address again and move the result of cmpb to r5 so we can calculate
+ 	   the pointer.  */
+ 	mr	r5,r10
+ 	addi	r8,r8,8
+@@ -108,7 +115,13 @@ L(loop):
+ 	   0xff in the same position as the c/null byte in the original
+ 	   doubleword from the string.  Use that to calculate the pointer.  */
+ L(done):
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r5,-1
++	andc    r0,r0,r5
++	popcntd	r0,r0
++#else
+ 	cntlzd	r0,r5	      /* Count leading zeros before the match.  */
++#endif
+ 	srdi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of matching c/null byte.  */
+ 	blr
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strchr.S
+===================================================================
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strchr.S.orig
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/strchr.S
+@@ -50,14 +50,16 @@ ENTRY (BP_SYM (strchr))
+ #define rIGN	r10	/* number of bits we should ignore in the first word */
+ #define rMASK	r11	/* mask with the bits to ignore set to 0 */
+ #define rTMP3	r12
++#define rTMP4	rIGN
++#define rTMP5	rMASK
+ 
+ 	CHECK_BOUNDS_LOW (rSTR, rTMP1, rTMP2)
+ 	STORE_RETURN_BOUNDS (rTMP1, rTMP2)
+ 
+ 	dcbt	0,rRTN
+-	rlwimi	rCHR, rCHR, 8, 16, 23
++	insrdi	rCHR, rCHR, 8, 48
+ 	li	rMASK, -1
+-	rlwimi	rCHR, rCHR, 16, 0, 15
++	insrdi	rCHR, rCHR, 16, 32
+ 	rlwinm	rIGN, rRTN, 3, 26, 28
+ 	insrdi	rCHR, rCHR, 32, 0
+ 	lis	rFEFE, -0x101
+@@ -70,53 +72,74 @@ ENTRY (BP_SYM (strchr))
+ 	add	rFEFE, rFEFE, rTMP1
+ /* Test the first (partial?) word.  */
+ 	ld	rWORD, 0(rSTR)
++#ifdef __LITTLE_ENDIAN__
++	sld	rMASK, rMASK, rIGN
++#else
+ 	srd	rMASK, rMASK, rIGN
++#endif
+ 	orc	rWORD, rWORD, rMASK
+ 	add	rTMP1, rFEFE, rWORD
+ 	nor	rTMP2, r7F7F, rWORD
+-	and.	rTMP1, rTMP1, rTMP2
++	and.	rTMP4, rTMP1, rTMP2
+ 	xor	rTMP3, rCHR, rWORD
+ 	orc	rTMP3, rTMP3, rMASK
+ 	b	L(loopentry)
+ 
+ /* The loop.  */
+ 
+-L(loop):ldu rWORD, 8(rSTR)
+-	and.	rTMP1, rTMP1, rTMP2
++L(loop):
++	ldu	rWORD, 8(rSTR)
++	and.	rTMP5, rTMP1, rTMP2
+ /* Test for 0.	*/
+-	add	rTMP1, rFEFE, rWORD
+-	nor	rTMP2, r7F7F, rWORD
++	add	rTMP1, rFEFE, rWORD /* x - 0x01010101.  */
++	nor	rTMP2, r7F7F, rWORD /* ~(x | 0x7f7f7f7f) == ~x & 0x80808080.  */
+ 	bne	L(foundit)
+-	and.	rTMP1, rTMP1, rTMP2
++	and.	rTMP4, rTMP1, rTMP2 /* (x - 0x01010101) & ~x & 0x80808080.  */
+ /* Start test for the bytes we're looking for.  */
+ 	xor	rTMP3, rCHR, rWORD
+ L(loopentry):
+ 	add	rTMP1, rFEFE, rTMP3
+ 	nor	rTMP2, r7F7F, rTMP3
+ 	beq	L(loop)
++
+ /* There is a zero byte in the word, but may also be a matching byte (either
+    before or after the zero byte).  In fact, we may be looking for a
+-   zero byte, in which case we return a match.  We guess that this hasn't
+-   happened, though.  */
+-L(missed):
+-	and.	rTMP1, rTMP1, rTMP2
++   zero byte, in which case we return a match.  */
++	and.	rTMP5, rTMP1, rTMP2
+ 	li	rRTN, 0
+ 	STORE_RETURN_VALUE (rSTR)
+ 	beqlr
+-/* It did happen. Decide which one was first...
+-   I'm not sure if this is actually faster than a sequence of
+-   rotates, compares, and branches (we use it anyway because it's shorter).  */
++/* At this point:
++   rTMP5 bytes are 0x80 for each match of c, 0 otherwise.
++   rTMP4 bytes are 0x80 for each match of 0, 0 otherwise.
++   But there may be false matches in the next most significant byte from
++   a true match due to carries.  This means we need to recalculate the
++   matches using a longer method for big-endian.  */
++#ifdef __LITTLE_ENDIAN__
++	addi	rTMP1, rTMP5, -1
++	andc	rTMP1, rTMP1, rTMP5
++	cntlzd	rCLZB, rTMP1
++	addi	rTMP2, rTMP4, -1
++	andc	rTMP2, rTMP2, rTMP4
++	cmpld	rTMP1, rTMP2
++	bgtlr
++	subfic	rCLZB, rCLZB, 64-7
++#else
++/* I think we could reduce this by two instructions by keeping the "nor"
++   results from the loop for reuse here.  See strlen.S tail.  Similarly
++   one instruction could be pruned from L(foundit).  */
+ 	and	rFEFE, r7F7F, rWORD
+-	or	rMASK, r7F7F, rWORD
++	or	rTMP5, r7F7F, rWORD
+ 	and	rTMP1, r7F7F, rTMP3
+-	or	rIGN, r7F7F, rTMP3
++	or	rTMP4, r7F7F, rTMP3
+ 	add	rFEFE, rFEFE, r7F7F
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor	rWORD, rMASK, rFEFE
+-	nor	rTMP2, rIGN, rTMP1
++	nor	rWORD, rTMP5, rFEFE
++	nor	rTMP2, rTMP4, rTMP1
++	cntlzd	rCLZB, rTMP2
+ 	cmpld	rWORD, rTMP2
+ 	bgtlr
+-	cntlzd	rCLZB, rTMP2
++#endif
+ 	srdi	rCLZB, rCLZB, 3
+ 	add	rRTN, rSTR, rCLZB
+ 	CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, tdlge)
+@@ -124,13 +147,21 @@ L(missed):
+ 	blr
+ 
+ L(foundit):
++#ifdef __LITTLE_ENDIAN__
++	addi	rTMP1, rTMP5, -1
++	andc	rTMP1, rTMP1, rTMP5
++	cntlzd	rCLZB, rTMP1
++	subfic	rCLZB, rCLZB, 64-7-64
++	sradi	rCLZB, rCLZB, 3
++#else
+ 	and	rTMP1, r7F7F, rTMP3
+-	or	rIGN, r7F7F, rTMP3
++	or	rTMP4, r7F7F, rTMP3
+ 	add	rTMP1, rTMP1, r7F7F
+-	nor	rTMP2, rIGN, rTMP1
++	nor	rTMP2, rTMP4, rTMP1
+ 	cntlzd	rCLZB, rTMP2
+ 	subi	rSTR, rSTR, 8
+ 	srdi	rCLZB, rCLZB, 3
++#endif
+ 	add	rRTN, rSTR, rCLZB
+ 	CHECK_BOUNDS_HIGH_RTN (rSTR, rTMP2, tdlge)
+ 	STORE_RETURN_VALUE (rSTR)
diff --git a/SOURCES/glibc-ppc64le-30.patch b/SOURCES/glibc-ppc64le-30.patch
new file mode 100644
index 0000000..3834dcc
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-30.patch
@@ -0,0 +1,7383 @@
+# commit fe6e95d7171eba5f3e07848f081676fae4e86322
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:46:47 2013 +0930
+# 
+#     PowerPC LE memcmp
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00102.html
+#     
+#     This is a rather large patch due to formatting and renaming.  The
+#     formatting changes were to make it possible to compare power7 and
+#     power4 versions of memcmp.  Using different register defines came
+#     about while I was wrestling with the code, trying to find spare
+#     registers at one stage.  I found it much simpler if we refer to a reg
+#     by the same name throughout a function, so it's better if short-term
+#     multiple use regs like rTMP are referred to using their register
+#     number.  I made the cr field usage changes when attempting to reload
+#     rWORDn regs in the exit path to byte swap before comparing when
+#     little-endian.  That proved a bad idea due to the pipelining involved
+#     in the main loop;  Offsets to reload the regs were different first
+#     time around the loop..  Anyway, I left the cr field usage changes in
+#     place for consistency.
+#     
+#     Aside from these more-or-less cosmetic changes, I fixed a number of
+#     places where an early exit path restores regs unnecessarily, removed
+#     some dead code, and optimised one or two exits.
+#     
+#         * sysdeps/powerpc/powerpc64/power7/memcmp.S: Add little-endian support.
+#         Formatting.  Consistently use rXXX register defines or rN defines.
+#         Use early exit labels that avoid restoring unused non-volatile regs.
+#         Make cr field use more consistent with rWORDn compares.  Rename
+#         regs used as shift registers for unaligned loop, using rN defines
+#         for short lifetime/multiple use regs.
+#         * sysdeps/powerpc/powerpc64/power4/memcmp.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/memcmp.S: Likewise.  Exit with
+#         addi 1,1,64 to pop stack frame.  Simplify return value code.
+#         * sysdeps/powerpc/powerpc32/power4/memcmp.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcmp.S	2014-05-28 19:22:37.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcmp.S	2014-05-28 23:55:52.000000000 -0500
+@@ -1,4 +1,4 @@
+-/* Optimized strcmp implementation for PowerPC64.
++/* Optimized strcmp implementation for PowerPC32.
+    Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+ 
+@@ -20,13 +20,14 @@
+ #include <bp-sym.h>
+ #include <bp-asm.h>
+ 
+-/* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5])  */
+-
++/* int [r3] memcmp (const char *s1 [r3],
++		    const char *s2 [r4],
++		    size_t size [r5])  */
++ 
+ 	.machine power4
+ EALIGN (BP_SYM(memcmp), 4, 0)
+ 	CALL_MCOUNT
+ 
+-#define rTMP	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -37,33 +38,32 @@
+ #define rWORD4	r9	/* next word in s2 */
+ #define rWORD5	r10	/* next word in s1 */
+ #define rWORD6	r11	/* next word in s2 */
+-#define rBITDIF	r12	/* bits that differ in s1 & s2 words */
+ #define rWORD7	r30	/* next word in s1 */
+ #define rWORD8	r31	/* next word in s2 */
+ 
+-	xor	rTMP, rSTR2, rSTR1
++	xor	r0, rSTR2, rSTR1
+ 	cmplwi	cr6, rN, 0
+ 	cmplwi	cr1, rN, 12
+-	clrlwi.	rTMP, rTMP, 30
+-	clrlwi	rBITDIF, rSTR1, 30
+-	cmplwi	cr5, rBITDIF, 0
++	clrlwi.	r0, r0, 30
++	clrlwi	r12, rSTR1, 30
++	cmplwi	cr5, r12, 0
+ 	beq-	cr6, L(zeroLength)
+-	dcbt	0,rSTR1
+-	dcbt	0,rSTR2
++	dcbt	0, rSTR1
++	dcbt	0, rSTR2
+ /* If less than 8 bytes or not aligned, use the unaligned
+    byte loop.  */
+ 	blt	cr1, L(bytealigned)
+-        stwu    1,-64(1)
++	stwu	1, -64(r1)
+ 	cfi_adjust_cfa_offset(64)
+-        stw     r31,48(1)	
+-	cfi_offset(31,(48-64))
+-        stw     r30,44(1)	
+-	cfi_offset(30,(44-64))
++	stw	rWORD8, 48(r1)
++	cfi_offset(rWORD8, (48-64))
++	stw	rWORD7, 44(r1)
++	cfi_offset(rWORD7, (44-64))
+ 	bne	L(unaligned)
+ /* At this point we know both strings have the same alignment and the
+-   compare length is at least 8 bytes.  rBITDIF contains the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    2 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then we are already word 
++   of r12 to 0.  If r12 == 0 then we are already word
+    aligned and can perform the word aligned loop.
+   
+    Otherwise we know the two strings have the same alignment (but not
+@@ -72,74 +72,95 @@
+    eliminate bits preceeding the first byte.  Since we want to join the
+    normal (word aligned) compare loop, starting at the second word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first word. This insures that the loop count is
++   versioning for the first word. This ensures that the loop count is
+    correct and the first word (shifted) is in the expected register pair. */
+-	.align 4
++	.align	4
+ L(samealignment):
+ 	clrrwi	rSTR1, rSTR1, 2
+ 	clrrwi	rSTR2, rSTR2, 2
+ 	beq	cr5, L(Waligned)
+-	add	rN, rN, rBITDIF
+-	slwi	r11, rBITDIF, 3
+-	srwi	rTMP, rN, 4	 /* Divide by 16 */
+-	andi.	rBITDIF, rN, 12  /* Get the word remainder */
++	add	rN, rN, r12
++	slwi	rWORD6, r12, 3
++	srwi	r0, rN, 4	/* Divide by 16 */
++	andi.	r12, rN, 12	/* Get the word remainder */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 0(rSTR1)
+ 	lwz	rWORD2, 0(rSTR2)
+-	cmplwi	cr1, rBITDIF, 8
++#endif
++	cmplwi	cr1, r12, 8
+ 	cmplwi	cr7, rN, 16
+ 	clrlwi	rN, rN, 30
+ 	beq	L(dPs4)
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
+ 	bgt	cr1, L(dPs3)
+ 	beq	cr1, L(dPs2)
+ 
+ /* Remainder is 4 */
+-	.align 3
++	.align	3
+ L(dsP1):
+-	slw	rWORD5, rWORD1, r11
+-	slw	rWORD6, rWORD2, r11
++	slw	rWORD5, rWORD1, rWORD6
++	slw	rWORD6, rWORD2, rWORD6
+ 	cmplw	cr5, rWORD5, rWORD6
+ 	blt	cr7, L(dP1x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+ 	lwz	rWORD2, 4(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	b	L(dP1e)
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
+ L(dPs2):
+-	slw	rWORD5, rWORD1, r11
+-	slw	rWORD6, rWORD2, r11
++	slw	rWORD5, rWORD1, rWORD6
++	slw	rWORD6, rWORD2, rWORD6
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	blt	cr7, L(dP2x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD7, 4(rSTR1)
+ 	lwz	rWORD8, 4(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+ 	b	L(dP2e)
+ /* Remainder is 12 */
+-	.align 4
++	.align	4
+ L(dPs3):
+-	slw	rWORD3, rWORD1, r11
+-	slw	rWORD4, rWORD2, r11
++	slw	rWORD3, rWORD1, rWORD6
++	slw	rWORD4, rWORD2, rWORD6
+ 	cmplw	cr1, rWORD3, rWORD4
+ 	b	L(dP3e)
+ /* Count is a multiple of 16, remainder is 0 */
+-	.align 4
++	.align	4
+ L(dPs4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	slw	rWORD1, rWORD1, r11
+-	slw	rWORD2, rWORD2, r11
+-	cmplw	cr0, rWORD1, rWORD2
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	slw	rWORD1, rWORD1, rWORD6
++	slw	rWORD2, rWORD2, rWORD6
++	cmplw	cr7, rWORD1, rWORD2
+ 	b	L(dP4e)
+ 
+ /* At this point we know both strings are word aligned and the
+    compare length is at least 8 bytes.  */
+-	.align 4
++	.align	4
+ L(Waligned):
+-	andi.	rBITDIF, rN, 12  /* Get the word remainder */
+-	srwi	rTMP, rN, 4	 /* Divide by 16 */
+-	cmplwi	cr1, rBITDIF, 8
++	andi.	r12, rN, 12	/* Get the word remainder */
++	srwi	r0, rN, 4	/* Divide by 16 */
++	cmplwi	cr1, r12, 8
+ 	cmplwi	cr7, rN, 16
+ 	clrlwi	rN, rN, 30
+ 	beq	L(dP4)
+@@ -147,177 +168,352 @@
+ 	beq	cr1, L(dP2)
+ 		
+ /* Remainder is 4 */
+-	.align 4
++	.align	4
+ L(dP1):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
+ /* Normally we'd use rWORD7/rWORD8 here, but since we might exit early
+    (8-15 byte compare), we want to use only volatile registers.  This
+    means we can avoid restoring non-volatile registers since we did not
+    change any on the early exit path.  The key here is the non-early
+    exit path only cares about the condition code (cr5), not about which 
+    register pair was used.  */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 0(rSTR1)
+ 	lwz	rWORD6, 0(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD5, rWORD6
+ 	blt	cr7, L(dP1x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+ 	lwz	rWORD2, 4(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ L(dP1e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 8(rSTR1)
+ 	lwz	rWORD4, 8(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 12(rSTR1)
+ 	lwz	rWORD6, 12(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+-	bne	cr5, L(dLcr5)
+-	bne	cr0, L(dLcr0)
+-	
++	bne	cr5, L(dLcr5x)
++	bne	cr7, L(dLcr7x)
++
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwzu	rWORD7, 16(rSTR1)
+ 	lwzu	rWORD8, 16(rSTR2)
++#endif
+ 	bne	cr1, L(dLcr1)
+ 	cmplw	cr5, rWORD7, rWORD8
+ 	bdnz	L(dLoop)
+ 	bne	cr6, L(dLcr6)
+-        lwz     r30,44(1)
+-        lwz     r31,48(1)
+-	.align 3
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++	.align	3
+ L(dP1x):
+ 	slwi.	r12, rN, 3
+-	bne	cr5, L(dLcr5)
++	bne	cr5, L(dLcr5x)
+ 	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
+-        lwz     1,0(1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bne	L(d00)
+ 	li	rRTN, 0
+ 	blr
+ 		
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dP2):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 0(rSTR1)
+ 	lwz	rWORD6, 0(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	blt	cr7, L(dP2x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD7, 4(rSTR1)
+ 	lwz	rWORD8, 4(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+ L(dP2e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 8(rSTR1)
+ 	lwz	rWORD2, 8(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 12(rSTR1)
+ 	lwz	rWORD4, 12(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 4
+ 	addi	rSTR2, rSTR2, 4
++#endif
+ 	bne	cr6, L(dLcr6)
+ 	bne	cr5, L(dLcr5)
+ 	b	L(dLoop2)
+ /* Again we are on a early exit path (16-23 byte compare), we want to
+    only use volatile registers and avoid restoring non-volatile
+    registers.  */
+-	.align 4
++	.align	4
+ L(dP2x):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 4(rSTR1)
+ 	lwz	rWORD4, 4(rSTR2)
+-	cmplw	cr5, rWORD3, rWORD4
++#endif
++	cmplw	cr1, rWORD3, rWORD4
+ 	slwi.	r12, rN, 3
+-	bne	cr6, L(dLcr6)
++	bne	cr6, L(dLcr6x)
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 4
+ 	addi	rSTR2, rSTR2, 4
+-	bne	cr5, L(dLcr5)
++#endif
++	bne	cr1, L(dLcr1x)
+ 	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
+-        lwz     1,0(1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bne	L(d00)
+ 	li	rRTN, 0
+ 	blr
+ 		
+ /* Remainder is 12 */
+-	.align 4
++	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dP3):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 0(rSTR1)
+ 	lwz	rWORD4, 0(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+ L(dP3e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 4(rSTR1)
+ 	lwz	rWORD6, 4(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	blt	cr7, L(dP3x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD7, 8(rSTR1)
+ 	lwz	rWORD8, 8(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 12(rSTR1)
+ 	lwz	rWORD2, 12(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
++#endif
+ 	bne	cr1, L(dLcr1)
+ 	bne	cr6, L(dLcr6)
+ 	b	L(dLoop1)
+ /* Again we are on a early exit path (24-31 byte compare), we want to
+    only use volatile registers and avoid restoring non-volatile
+    registers.  */
+-	.align 4
++	.align	4
+ L(dP3x):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 8(rSTR1)
+ 	lwz	rWORD2, 8(rSTR2)
+-	cmplw	cr5, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	slwi.	r12, rN, 3
+-	bne	cr1, L(dLcr1)
++	bne	cr1, L(dLcr1x)
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
+-	bne	cr6, L(dLcr6)
++#endif
++	bne	cr6, L(dLcr6x)
+ 	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
+-	bne	cr5, L(dLcr5)
+-        lwz     1,0(1)
++	bne	cr7, L(dLcr7x)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bne	L(d00)
+ 	li	rRTN, 0
+ 	blr
+ 	
+ /* Count is a multiple of 16, remainder is 0 */
+-	.align 4
++	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dP4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 0(rSTR1)
+ 	lwz	rWORD2, 0(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ L(dP4e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 4(rSTR1)
+ 	lwz	rWORD4, 4(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 8(rSTR1)
+ 	lwz	rWORD6, 8(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwzu	rWORD7, 12(rSTR1)
+ 	lwzu	rWORD8, 12(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+-	bne	cr0, L(dLcr0)
++	bne	cr7, L(dLcr7)
+ 	bne	cr1, L(dLcr1)
+ 	bdz-	L(d24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+-	.align 4
++	.align	4
+ L(dLoop):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+ 	lwz	rWORD2, 4(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(dLcr6)
+ L(dLoop1):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 8(rSTR1)
+ 	lwz	rWORD4, 8(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	bne	cr5, L(dLcr5)
+ L(dLoop2):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 12(rSTR1)
+ 	lwz	rWORD6, 12(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+-	bne	cr0, L(dLcr0)
++	bne	cr7, L(dLcr7)
+ L(dLoop3):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwzu	rWORD7, 16(rSTR1)
+ 	lwzu	rWORD8, 16(rSTR2)
++#endif
+ 	bne-	cr1, L(dLcr1)
+-	cmplw	cr0, rWORD1, rWORD2
++	cmplw	cr7, rWORD1, rWORD2
+ 	bdnz+	L(dLoop)	
+ 	
+ L(dL4):
+@@ -327,7 +523,7 @@
+ 	bne	cr5, L(dLcr5)
+ 	cmplw	cr5, rWORD7, rWORD8
+ L(d44):
+-	bne	cr0, L(dLcr0)
++	bne	cr7, L(dLcr7)
+ L(d34):
+ 	bne	cr1, L(dLcr1)
+ L(d24):
+@@ -336,69 +532,82 @@
+ 	slwi.	r12, rN, 3
+ 	bne	cr5, L(dLcr5) 
+ L(d04):
+-        lwz     r30,44(1)
+-        lwz     r31,48(1)
+-        lwz     1,0(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
+ 	beq	L(zeroLength)
+ /* At this point we have a remainder of 1 to 3 bytes to compare.  Since
+    we are aligned it is safe to load the whole word, and use
+-   shift right to eliminate bits beyond the compare length. */ 
++   shift right to eliminate bits beyond the compare length.  */
+ L(d00):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+ 	lwz	rWORD2, 4(rSTR2) 
++#endif
+ 	srw	rWORD1, rWORD1, rN
+ 	srw	rWORD2, rWORD2, rN
+-        cmplw   rWORD1,rWORD2
+-        li      rRTN,0
+-        beqlr
+-        li      rRTN,1
+-        bgtlr
+-        li      rRTN,-1
+-        blr
+-
+-	.align 4
+-L(dLcr0):
+-        lwz     r30,44(1)
+-        lwz     r31,48(1)
++	sub	rRTN, rWORD1, rWORD2
++	blr
++
++	.align	4
++	cfi_adjust_cfa_offset(64)
++L(dLcr7):
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++L(dLcr7x):
+ 	li	rRTN, 1
+-        lwz     1,0(1)
+-	bgtlr	cr0
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
++	bgtlr	cr7
+ 	li	rRTN, -1
+ 	blr
+-	.align 4
++	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dLcr1):
+-        lwz     r30,44(1)
+-        lwz     r31,48(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++L(dLcr1x):
+ 	li	rRTN, 1
+-        lwz     1,0(1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bgtlr	cr1
+ 	li	rRTN, -1
+ 	blr
+-	.align 4
++	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dLcr6):
+-        lwz     r30,44(1)
+-        lwz     r31,48(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++L(dLcr6x):
+ 	li	rRTN, 1
+-        lwz     1,0(1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bgtlr	cr6
+ 	li	rRTN, -1
+ 	blr
+-	.align 4
++	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dLcr5):
+-        lwz     r30,44(1)
+-        lwz     r31,48(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
+ L(dLcr5x):
+ 	li	rRTN, 1
+-        lwz     1,0(1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bgtlr	cr5
+ 	li	rRTN, -1
+ 	blr
+ 	
+-	.align 4
++	.align	4
+ L(bytealigned):
+-	cfi_adjust_cfa_offset(-64)
+-	mtctr   rN	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	rN	/* Power4 wants mtctr 1st in dispatch group */
+ 
+ /* We need to prime this loop.  This loop is swing modulo scheduled
+    to avoid pipe delays.  The dependent instruction latencies (load to 
+@@ -413,7 +622,7 @@
+ 	lbz	rWORD1, 0(rSTR1)
+ 	lbz	rWORD2, 0(rSTR2)
+ 	bdz-	L(b11)
+-	cmplw	cr0, rWORD1, rWORD2
++	cmplw	cr7, rWORD1, rWORD2
+ 	lbz	rWORD3, 1(rSTR1)
+ 	lbz	rWORD4, 1(rSTR2)
+ 	bdz-	L(b12)
+@@ -421,11 +630,11 @@
+ 	lbzu	rWORD5, 2(rSTR1)
+ 	lbzu	rWORD6, 2(rSTR2)
+ 	bdz-	L(b13)
+-	.align 4
++	.align	4
+ L(bLoop):
+ 	lbzu	rWORD1, 1(rSTR1)
+ 	lbzu	rWORD2, 1(rSTR2)
+-	bne-	cr0, L(bLcr0)
++	bne-	cr7, L(bLcr7)
+ 
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	bdz-	L(b3i)
+@@ -434,7 +643,7 @@
+ 	lbzu	rWORD4, 1(rSTR2)
+ 	bne-	cr1, L(bLcr1)
+ 
+-	cmplw	cr0, rWORD1, rWORD2
++	cmplw	cr7, rWORD1, rWORD2
+ 	bdz-	L(b2i)
+ 
+ 	lbzu	rWORD5, 1(rSTR1)
+@@ -451,23 +660,23 @@
+    tested.  In this case we must complete the pending operations
+    before returning.  */
+ L(b1i):
+-	bne-	cr0, L(bLcr0)
++	bne-	cr7, L(bLcr7)
+ 	bne-	cr1, L(bLcr1)
+ 	b	L(bx56)
+-	.align 4
++	.align	4
+ L(b2i):
+ 	bne-	cr6, L(bLcr6)
+-	bne-	cr0, L(bLcr0)
++	bne-	cr7, L(bLcr7)
+ 	b	L(bx34)
+-	.align 4
++	.align	4
+ L(b3i):
+ 	bne-	cr1, L(bLcr1)
+ 	bne-	cr6, L(bLcr6)
+ 	b	L(bx12)
+-	.align 4
+-L(bLcr0):
++	.align	4
++L(bLcr7):
+ 	li	rRTN, 1
+-	bgtlr	cr0
++	bgtlr	cr7
+ 	li	rRTN, -1
+ 	blr
+ L(bLcr1):
+@@ -482,36 +691,31 @@
+ 	blr
+ 
+ L(b13):
+-	bne-	cr0, L(bx12)
++	bne-	cr7, L(bx12)
+ 	bne-	cr1, L(bx34)
+ L(bx56):
+ 	sub	rRTN, rWORD5, rWORD6
+ 	blr
+ 	nop
+ L(b12):
+-	bne-	cr0, L(bx12)
++	bne-	cr7, L(bx12)
+ L(bx34):	
+ 	sub	rRTN, rWORD3, rWORD4
+ 	blr
+-
+ L(b11):
+ L(bx12):
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blr
+-
+-	.align 4 
+-L(zeroLengthReturn):
+-
++	.align	4
+ L(zeroLength):
+ 	li	rRTN, 0
+ 	blr
+ 
+-	cfi_adjust_cfa_offset(64)
+-	.align 4
++	.align	4
+ /* At this point we know the strings have different alignment and the
+-   compare length is at least 8 bytes.  rBITDIF contains the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    2 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then rStr1 is word aligned and can 
++   of r12 to 0.  If r12 == 0 then rStr1 is word aligned and can
+    perform the Wunaligned loop.
+   
+    Otherwise we know that rSTR1 is not aready word aligned yet.
+@@ -520,79 +724,88 @@
+    eliminate bits preceeding the first byte.  Since we want to join the
+    normal (Wualigned) compare loop, starting at the second word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first W. This insures that the loop count is
++   versioning for the first W. This ensures that the loop count is
+    correct and the first W (shifted) is in the expected resister pair.  */
+ #define rSHL		r29	/* Unaligned shift left count.  */
+ #define rSHR		r28	/* Unaligned shift right count.  */
+-#define rB		r27	/* Left rotation temp for rWORD2.  */
+-#define rD		r26	/* Left rotation temp for rWORD4.  */
+-#define rF		r25	/* Left rotation temp for rWORD6.  */
+-#define rH		r24	/* Left rotation temp for rWORD8.  */
+-#define rA		r0	/* Right rotation temp for rWORD2.  */
+-#define rC		r12	/* Right rotation temp for rWORD4.  */
+-#define rE		r0	/* Right rotation temp for rWORD6.  */
+-#define rG		r12	/* Right rotation temp for rWORD8.  */
++#define rWORD8_SHIFT	r27	/* Left rotation temp for rWORD2.  */
++#define rWORD2_SHIFT	r26	/* Left rotation temp for rWORD4.  */
++#define rWORD4_SHIFT	r25	/* Left rotation temp for rWORD6.  */
++#define rWORD6_SHIFT	r24	/* Left rotation temp for rWORD8.  */
++	cfi_adjust_cfa_offset(64)
+ L(unaligned):
+-	stw     r29,40(r1)	
+-	cfi_offset(r29,(40-64))	
++	stw	rSHL, 40(r1)
++	cfi_offset(rSHL, (40-64))
+ 	clrlwi	rSHL, rSTR2, 30
+-        stw     r28,36(r1)	
+-	cfi_offset(r28,(36-64))
++	stw	rSHR, 36(r1)
++	cfi_offset(rSHR, (36-64))
+ 	beq	cr5, L(Wunaligned)
+-        stw     r27,32(r1)	
+-	cfi_offset(r27,(32-64))
++	stw	rWORD8_SHIFT, 32(r1)
++	cfi_offset(rWORD8_SHIFT, (32-64))
+ /* Adjust the logical start of rSTR2 to compensate for the extra bits
+    in the 1st rSTR1 W.  */
+-	sub	r27, rSTR2, rBITDIF
++	sub	rWORD8_SHIFT, rSTR2, r12
+ /* But do not attempt to address the W before that W that contains
+    the actual start of rSTR2.  */
+ 	clrrwi	rSTR2, rSTR2, 2
+-        stw     r26,28(r1)	
+-	cfi_offset(r26,(28-64))
+-/* Compute the left/right shift counts for the unalign rSTR2,
++	stw	rWORD2_SHIFT, 28(r1)
++	cfi_offset(rWORD2_SHIFT, (28-64))
++/* Compute the left/right shift counts for the unaligned rSTR2,
+    compensating for the logical (W aligned) start of rSTR1.  */ 
+-	clrlwi	rSHL, r27, 30
++	clrlwi	rSHL, rWORD8_SHIFT, 30
+ 	clrrwi	rSTR1, rSTR1, 2	
+-        stw     r25,24(r1)	
+-	cfi_offset(r25,(24-64))
++	stw	rWORD4_SHIFT, 24(r1)
++	cfi_offset(rWORD4_SHIFT, (24-64))
+ 	slwi	rSHL, rSHL, 3
+-	cmplw	cr5, r27, rSTR2
+-	add	rN, rN, rBITDIF
+-	slwi	r11, rBITDIF, 3
+-        stw     r24,20(r1)	
+-	cfi_offset(r24,(20-64))
++	cmplw	cr5, rWORD8_SHIFT, rSTR2
++	add	rN, rN, r12
++	slwi	rWORD6, r12, 3
++	stw	rWORD6_SHIFT, 20(r1)
++	cfi_offset(rWORD6_SHIFT, (20-64))
+ 	subfic	rSHR, rSHL, 32
+-	srwi	rTMP, rN, 4      /* Divide by 16 */
+-	andi.	rBITDIF, rN, 12  /* Get the W remainder */
++	srwi	r0, rN, 4	/* Divide by 16 */
++	andi.	r12, rN, 12	/* Get the W remainder */
+ /* We normally need to load 2 Ws to start the unaligned rSTR2, but in
+    this special case those bits may be discarded anyway.  Also we
+    must avoid loading a W where none of the bits are part of rSTR2 as
+    this may cross a page boundary and cause a page fault.  */
+ 	li	rWORD8, 0
+ 	blt	cr5, L(dus0)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD8, 0(rSTR2)
+-	la	rSTR2, 4(rSTR2)
++	addi	rSTR2, rSTR2, 4
++#endif
+ 	slw	rWORD8, rWORD8, rSHL
+ 
+ L(dus0):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 0(rSTR1)
+ 	lwz	rWORD2, 0(rSTR2)
+-	cmplwi	cr1, rBITDIF, 8
++#endif
++	cmplwi	cr1, r12, 8
+ 	cmplwi	cr7, rN, 16
+-	srw	rG, rWORD2, rSHR
++	srw	r12, rWORD2, rSHR
+ 	clrlwi	rN, rN, 30
+ 	beq	L(duPs4)
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	or	rWORD8, rG, rWORD8
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	or	rWORD8, r12, rWORD8
+ 	bgt	cr1, L(duPs3)
+ 	beq	cr1, L(duPs2)
+ 
+ /* Remainder is 4 */
+-	.align 4
++	.align	4
+ L(dusP1):
+-	slw	rB, rWORD2, rSHL
+-	slw	rWORD7, rWORD1, r11
+-	slw	rWORD8, rWORD8, r11
++	slw	rWORD8_SHIFT, rWORD2, rSHL
++	slw	rWORD7, rWORD1, rWORD6
++	slw	rWORD8, rWORD8, rWORD6
+ 	bge	cr7, L(duP1e)
+ /* At this point we exit early with the first word compare
+    complete and remainder of 0 to 3 bytes.  See L(du14) for details on
+@@ -602,95 +815,133 @@
+ 	bne	cr5, L(duLcr5)
+ 	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD2, 4(rSTR2)
+-	srw	rA, rWORD2, rSHR
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
+ L(duPs2):
+-	slw	rH, rWORD2, rSHL
+-	slw	rWORD5, rWORD1, r11
+-	slw	rWORD6, rWORD8, r11
++	slw	rWORD6_SHIFT, rWORD2, rSHL
++	slw	rWORD5, rWORD1, rWORD6
++	slw	rWORD6, rWORD8, rWORD6
+ 	b	L(duP2e)
+ /* Remainder is 12 */
+-	.align 4
++	.align	4
+ L(duPs3):
+-	slw	rF, rWORD2, rSHL
+-	slw	rWORD3, rWORD1, r11
+-	slw	rWORD4, rWORD8, r11
++	slw	rWORD4_SHIFT, rWORD2, rSHL
++	slw	rWORD3, rWORD1, rWORD6
++	slw	rWORD4, rWORD8, rWORD6
+ 	b	L(duP3e)
+ /* Count is a multiple of 16, remainder is 0 */
+-	.align 4
++	.align	4
+ L(duPs4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	or	rWORD8, rG, rWORD8
+-	slw	rD, rWORD2, rSHL
+-	slw	rWORD1, rWORD1, r11
+-	slw	rWORD2, rWORD8, r11
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	or	rWORD8, r12, rWORD8
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	slw	rWORD1, rWORD1, rWORD6
++	slw	rWORD2, rWORD8, rWORD6
+ 	b	L(duP4e)
+ 
+ /* At this point we know rSTR1 is word aligned and the
+    compare length is at least 8 bytes.  */
+-	.align 4
++	.align	4
+ L(Wunaligned):
+-        stw     r27,32(r1)	
+-	cfi_offset(r27,(32-64))
++	stw	rWORD8_SHIFT, 32(r1)
++	cfi_offset(rWORD8_SHIFT, (32-64))
+ 	clrrwi	rSTR2, rSTR2, 2
+-        stw     r26,28(r1)	
+-	cfi_offset(r26,(28-64))
+-	srwi	rTMP, rN, 4	 /* Divide by 16 */
+-        stw     r25,24(r1)	
+-	cfi_offset(r25,(24-64))
+-	andi.	rBITDIF, rN, 12  /* Get the W remainder */
+-        stw     r24,20(r1)	
+-	cfi_offset(r24,(20-64))
++	stw	rWORD2_SHIFT, 28(r1)
++	cfi_offset(rWORD2_SHIFT, (28-64))
++	srwi	r0, rN, 4	/* Divide by 16 */
++	stw	rWORD4_SHIFT, 24(r1)
++	cfi_offset(rWORD4_SHIFT, (24-64))
++	andi.	r12, rN, 12	/* Get the W remainder */
++	stw	rWORD6_SHIFT, 20(r1)
++	cfi_offset(rWORD6_SHIFT, (20-64))
+ 	slwi	rSHL, rSHL, 3
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD6, 0(rSTR2)
+ 	lwzu	rWORD8, 4(rSTR2)
+-	cmplwi	cr1, rBITDIF, 8
++#endif
++	cmplwi	cr1, r12, 8
+ 	cmplwi	cr7, rN, 16
+ 	clrlwi	rN, rN, 30
+ 	subfic	rSHR, rSHL, 32
+-	slw	rH, rWORD6, rSHL
++	slw	rWORD6_SHIFT, rWORD6, rSHL
+ 	beq	L(duP4)
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
+ 	bgt	cr1, L(duP3)
+ 	beq	cr1, L(duP2)
+ 		
+ /* Remainder is 4 */
+-	.align 4
++	.align	4
+ L(duP1):
+-	srw	rG, rWORD8, rSHR
++	srw	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
+ 	lwz	rWORD7, 0(rSTR1)
+-	slw	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++#endif
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	blt	cr7, L(duP1x)
+ L(duP1e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+ 	lwz	rWORD2, 4(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+-	srw	rA, rWORD2, rSHR
+-	slw	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 8(rSTR1)
+ 	lwz	rWORD4, 8(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
+-	srw	rC, rWORD4, rSHR
+-	slw	rF, rWORD4, rSHL
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
+ 	bne	cr5, L(duLcr5)
+-	or	rWORD4, rC, rD
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 12(rSTR1)
+ 	lwz	rWORD6, 12(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+-	srw	rE, rWORD6, rSHR
+-	slw	rH, rWORD6, rSHL
+-	bne	cr0, L(duLcr0)
+-	or	rWORD6, rE, rF
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	bne	cr7, L(duLcr7)
++	or	rWORD6, r0, rWORD4_SHIFT
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	b	L(duLoop3)	
+-	.align 4
++	.align	4
+ /* At this point we exit early with the first word compare
+    complete and remainder of 0 to 3 bytes.  See L(du14) for details on
+    how we handle the remaining bytes.  */
+@@ -700,186 +951,321 @@
+ 	bne	cr5, L(duLcr5)
+ 	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
+-	ld	rWORD2, 8(rSTR2)
+-	srw	rA, rWORD2, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD2, 8(rSTR2)
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
+ L(duP2):
+-	srw	rE, rWORD8, rSHR
++	srw	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
+ 	lwz	rWORD5, 0(rSTR1)
+-	or	rWORD6, rE, rH
+-	slw	rH, rWORD8, rSHL
++#endif
++	or	rWORD6, r0, rWORD6_SHIFT
++	slw	rWORD6_SHIFT, rWORD8, rSHL
+ L(duP2e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD7, 4(rSTR1)
+ 	lwz	rWORD8, 4(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+-	srw	rG, rWORD8, rSHR
+-	slw	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	blt	cr7, L(duP2x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 8(rSTR1)
+ 	lwz	rWORD2, 8(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+ 	bne	cr6, L(duLcr6)
+-	srw	rA, rWORD2, rSHR
+-	slw	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 12(rSTR1)
+ 	lwz	rWORD4, 12(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	bne	cr5, L(duLcr5)
+-	srw	rC, rWORD4, rSHR
+-	slw	rF, rWORD4, rSHL
+-	or	rWORD4, rC, rD
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 4
+ 	addi	rSTR2, rSTR2, 4
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+ 	b	L(duLoop2)
+-	.align 4
++	.align	4
+ L(duP2x):
+ 	cmplw	cr5, rWORD7, rWORD8
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 4
+ 	addi	rSTR2, rSTR2, 4
++#endif
+ 	bne	cr6, L(duLcr6)
+ 	slwi.	rN, rN, 3
+ 	bne	cr5, L(duLcr5)
+ 	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD2, 4(rSTR2)
+-	srw	rA, rWORD2, rSHR
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ 		
+ /* Remainder is 12 */
+-	.align 4
++	.align	4
+ L(duP3):
+-	srw	rC, rWORD8, rSHR
++	srw	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
+ 	lwz	rWORD3, 0(rSTR1)
+-	slw	rF, rWORD8, rSHL
+-	or	rWORD4, rC, rH
++#endif
++	slw	rWORD4_SHIFT, rWORD8, rSHL
++	or	rWORD4, r12, rWORD6_SHIFT
+ L(duP3e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 4(rSTR1)
+ 	lwz	rWORD6, 4(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+-	srw	rE, rWORD6, rSHR
+-	slw	rH, rWORD6, rSHL
+-	or	rWORD6, rE, rF
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD7, 8(rSTR1)
+ 	lwz	rWORD8, 8(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	bne	cr1, L(duLcr1)
+-	srw	rG, rWORD8, rSHR
+-	slw	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	blt	cr7, L(duP3x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 12(rSTR1)
+ 	lwz	rWORD2, 12(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+ 	bne	cr6, L(duLcr6)
+-	srw	rA, rWORD2, rSHR
+-	slw	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	b	L(duLoop1)
+-	.align 4
++	.align	4
+ L(duP3x):
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
++#endif
++#if 0
++/* Huh?  We've already branched on cr1!  */
+ 	bne	cr1, L(duLcr1)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+ 	bne	cr6, L(duLcr6)
+ 	slwi.	rN, rN, 3
+ 	bne	cr5, L(duLcr5)
+ 	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD2, 4(rSTR2)
+-	srw	rA, rWORD2, rSHR
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ 	
+ /* Count is a multiple of 16, remainder is 0 */
+-	.align 4
++	.align	4
+ L(duP4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	srw	rA, rWORD8, rSHR
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	srw	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
+ 	lwz	rWORD1, 0(rSTR1)
+-	slw	rD, rWORD8, rSHL
+-	or	rWORD2, rA, rH
++#endif
++	slw	rWORD2_SHIFT, rWORD8, rSHL
++	or	rWORD2, r0, rWORD6_SHIFT
+ L(duP4e):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 4(rSTR1)
+ 	lwz	rWORD4, 4(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
+-	srw	rC, rWORD4, rSHR
+-	slw	rF, rWORD4, rSHL
+-	or	rWORD4, rC, rD
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 8(rSTR1)
+ 	lwz	rWORD6, 8(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+-	bne	cr0, L(duLcr0)
+-	srw	rE, rWORD6, rSHR
+-	slw	rH, rWORD6, rSHL
+-	or	rWORD6, rE, rF
++	bne	cr7, L(duLcr7)
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwzu	rWORD7, 12(rSTR1)
+ 	lwzu	rWORD8, 12(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	bne	cr1, L(duLcr1)
+-	srw	rG, rWORD8, rSHR
+-	slw	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	cmplw	cr5, rWORD7, rWORD8
+ 	bdz-	L(du24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+-	.align 4
++	.align	4
+ L(duLoop):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+ 	lwz	rWORD2, 4(rSTR2)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(duLcr6)
+-	srw	rA, rWORD2, rSHR
+-	slw	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
+ L(duLoop1):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD3, 8(rSTR1)
+ 	lwz	rWORD4, 8(rSTR2)
++#endif
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	bne	cr5, L(duLcr5)
+-	srw	rC, rWORD4, rSHR
+-	slw	rF, rWORD4, rSHL
+-	or	rWORD4, rC, rD
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
+ L(duLoop2):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD5, 12(rSTR1)
+ 	lwz	rWORD6, 12(rSTR2)
++#endif
+ 	cmplw	cr5, rWORD7, rWORD8
+-	bne	cr0, L(duLcr0)
+-	srw	rE, rWORD6, rSHR
+-	slw	rH, rWORD6, rSHL
+-	or	rWORD6, rE, rF
++	bne	cr7, L(duLcr7)
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
+ L(duLoop3):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwzu	rWORD7, 16(rSTR1)
+ 	lwzu	rWORD8, 16(rSTR2)
+-	cmplw	cr0, rWORD1, rWORD2
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	bne-	cr1, L(duLcr1)
+-	srw	rG, rWORD8, rSHR
+-	slw	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	bdnz+	L(duLoop)	
+ 	
+ L(duL4):
++#if 0
++/* Huh?  We've already branched on cr1!  */
+ 	bne	cr1, L(duLcr1)
++#endif
+ 	cmplw	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(duLcr6)
+ 	cmplw	cr6, rWORD5, rWORD6
+ 	bne	cr5, L(duLcr5)
+ 	cmplw	cr5, rWORD7, rWORD8
+ L(du44):
+-	bne	cr0, L(duLcr0)
++	bne	cr7, L(duLcr7)
+ L(du34):
+ 	bne	cr1, L(duLcr1)
+ L(du24):
+@@ -889,95 +1275,101 @@
+ 	bne	cr5, L(duLcr5)
+ /* At this point we have a remainder of 1 to 3 bytes to compare.  We use
+    shift right to eliminate bits beyond the compare length. 
++   This allows the use of word subtract to compute the final result.
+ 
+    However it may not be safe to load rWORD2 which may be beyond the 
+    string length. So we compare the bit length of the remainder to
+    the right shift count (rSHR). If the bit count is less than or equal
+    we do not need to load rWORD2 (all significant bits are already in
+-   rB).  */
++   rWORD8_SHIFT).  */
+ 	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
+ 	lwz	rWORD2, 4(rSTR2)
+-	srw	rA, rWORD2, rSHR
+-	.align 4
++#endif
++	srw	r0, rWORD2, rSHR
++	.align	4
+ L(dutrim):
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++#else
+ 	lwz	rWORD1, 4(rSTR1)
+-        lwz     r31,48(1)
++#endif
++	lwz	rWORD8, 48(r1)
+ 	subfic	rN, rN, 32	/* Shift count is 32 - (rN * 8).  */ 
+-	or	rWORD2, rA, rB
+-        lwz     r30,44(1)
+-        lwz     r29,40(r1)
++	or	rWORD2, r0, rWORD8_SHIFT
++	lwz	rWORD7, 44(r1)
++	lwz	rSHL, 40(r1)
+ 	srw	rWORD1, rWORD1, rN
+ 	srw	rWORD2, rWORD2, rN
+-        lwz     r28,36(r1)	
+-        lwz     r27,32(r1)
+-        cmplw   rWORD1,rWORD2
+-        li      rRTN,0
+-        beq     L(dureturn26)
+-        li      rRTN,1
+-        bgt     L(dureturn26)
+-        li      rRTN,-1
+-	b    L(dureturn26)
+-	.align 4
+-L(duLcr0):
+-        lwz     r31,48(1)
+-        lwz     r30,44(1)
+-	li	rRTN, 1
+-	bgt	cr0, L(dureturn29)	
+-	lwz     r29,40(r1)
+-        lwz     r28,36(r1)	
++	lwz	rSHR, 36(r1)
++	lwz	rWORD8_SHIFT, 32(r1)
++	sub	rRTN, rWORD1, rWORD2
++	b	L(dureturn26)
++	.align	4
++L(duLcr7):
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
++	li	rRTN, 1
++	bgt	cr7, L(dureturn29)
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+-	.align 4
++	.align	4
+ L(duLcr1):
+-        lwz     r31,48(1)
+-        lwz     r30,44(1)
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
+ 	li	rRTN, 1
+ 	bgt	cr1, L(dureturn29)	
+-        lwz     r29,40(r1)
+-        lwz     r28,36(r1)	
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+-	.align 4
++	.align	4
+ L(duLcr6):
+-        lwz     r31,48(1)
+-        lwz     r30,44(1)
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
+ 	li	rRTN, 1
+ 	bgt	cr6, L(dureturn29)	
+-        lwz     r29,40(r1)
+-        lwz     r28,36(r1)	
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+-	.align 4
++	.align	4
+ L(duLcr5):
+-        lwz     r31,48(1)
+-        lwz     r30,44(1)
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
+ 	li	rRTN, 1
+ 	bgt	cr5, L(dureturn29)	
+-        lwz     r29,40(r1)
+-        lwz     r28,36(r1)	
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	3
+ L(duZeroReturn):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	.align	4
+ L(dureturn):
+-        lwz     r31,48(1)
+-        lwz     r30,44(1)
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
+ L(dureturn29):	
+-        lwz     r29,40(r1)
+-        lwz     r28,36(r1)	
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
+ L(dureturn27):	
+-        lwz     r27,32(r1)
++	lwz	rWORD8_SHIFT, 32(r1)
+ L(dureturn26):	
+-        lwz     r26,28(r1)
++	lwz	rWORD2_SHIFT, 28(r1)
+ L(dureturn25):	
+-        lwz     r25,24(r1)
+-        lwz     r24,20(r1)
+-        lwz     1,0(1)
++	lwz	rWORD4_SHIFT, 24(r1)
++	lwz	rWORD6_SHIFT, 20(r1)
++	addi	1, 1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	blr
+ END (BP_SYM (memcmp))
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcmp.S	2014-05-28 19:22:37.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcmp.S	2014-05-28 21:44:57.000000000 -0500
+@@ -25,10 +25,9 @@
+ 		    size_t size [r5])  */
+ 
+ 	.machine power7
+-EALIGN (BP_SYM(memcmp),4,0)
++EALIGN (BP_SYM(memcmp), 4, 0)
+ 	CALL_MCOUNT
+ 
+-#define rTMP	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+@@ -39,35 +38,32 @@
+ #define rWORD4	r9	/* next word in s2 */
+ #define rWORD5	r10	/* next word in s1 */
+ #define rWORD6	r11	/* next word in s2 */
+-#define rBITDIF	r12	/* bits that differ in s1 & s2 words */
+ #define rWORD7	r30	/* next word in s1 */
+ #define rWORD8	r31	/* next word in s2 */
+ 
+-	xor	rTMP,rSTR2,rSTR1
+-	cmplwi	cr6,rN,0
+-	cmplwi	cr1,rN,12
+-	clrlwi.	rTMP,rTMP,30
+-	clrlwi	rBITDIF,rSTR1,30
+-	cmplwi	cr5,rBITDIF,0
+-	beq-	cr6,L(zeroLength)
+-	dcbt	0,rSTR1
+-	dcbt	0,rSTR2
+-
+-	/* If less than 8 bytes or not aligned, use the unaligned
+-	   byte loop.  */
+-
+-	blt	cr1,L(bytealigned)
+-	stwu	1,-64(1)
++	xor	r0, rSTR2, rSTR1
++	cmplwi	cr6, rN, 0
++	cmplwi	cr1, rN, 12
++	clrlwi.	r0, r0, 30
++	clrlwi	r12, rSTR1, 30
++	cmplwi	cr5, r12, 0
++	beq-	cr6, L(zeroLength)
++	dcbt	0, rSTR1
++	dcbt	0, rSTR2
++/* If less than 8 bytes or not aligned, use the unaligned
++   byte loop.  */
++	blt	cr1, L(bytealigned)
++	stwu	1, -64(r1)
+ 	cfi_adjust_cfa_offset(64)
+-	stw	r31,48(1)
+-	cfi_offset(31,(48-64))
+-	stw	r30,44(1)
+-	cfi_offset(30,(44-64))
++	stw	rWORD8, 48(r1)
++	cfi_offset(rWORD8, (48-64))
++	stw	rWORD7, 44(r1)
++	cfi_offset(rWORD7, (44-64))
+ 	bne	L(unaligned)
+ /* At this point we know both strings have the same alignment and the
+-   compare length is at least 8 bytes.  rBITDIF contains the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    2 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then we are already word
++   of r12 to 0.  If r12 == 0 then we are already word
+    aligned and can perform the word aligned loop.
+ 
+    Otherwise we know the two strings have the same alignment (but not
+@@ -76,332 +72,541 @@
+    eliminate bits preceeding the first byte.  Since we want to join the
+    normal (word aligned) compare loop, starting at the second word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first word. This insures that the loop count is
++   versioning for the first word. This ensures that the loop count is
+    correct and the first word (shifted) is in the expected register pair. */
+ 	.align	4
+ L(samealignment):
+-	clrrwi	rSTR1,rSTR1,2
+-	clrrwi	rSTR2,rSTR2,2
+-	beq	cr5,L(Waligned)
+-	add	rN,rN,rBITDIF
+-	slwi	r11,rBITDIF,3
+-	srwi	rTMP,rN,4	/* Divide by 16 */
+-	andi.	rBITDIF,rN,12	/* Get the word remainder */
+-	lwz	rWORD1,0(rSTR1)
+-	lwz	rWORD2,0(rSTR2)
+-	cmplwi	cr1,rBITDIF,8
+-	cmplwi	cr7,rN,16
+-	clrlwi	rN,rN,30
++	clrrwi	rSTR1, rSTR1, 2
++	clrrwi	rSTR2, rSTR2, 2
++	beq	cr5, L(Waligned)
++	add	rN, rN, r12
++	slwi	rWORD6, r12, 3
++	srwi	r0, rN, 4	/* Divide by 16 */
++	andi.	r12, rN, 12	/* Get the word remainder */
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 0(rSTR1)
++	lwz	rWORD2, 0(rSTR2)
++#endif
++	cmplwi	cr1, r12, 8
++	cmplwi	cr7, rN, 16
++	clrlwi	rN, rN, 30
+ 	beq	L(dPs4)
+-	mtctr	rTMP
+-	bgt	cr1,L(dPs3)
+-	beq	cr1,L(dPs2)
++	mtctr	r0
++	bgt	cr1, L(dPs3)
++	beq	cr1, L(dPs2)
+ 
+ /* Remainder is 4 */
+ 	.align	3
+ L(dsP1):
+-	slw	rWORD5,rWORD1,r11
+-	slw	rWORD6,rWORD2,r11
+-	cmplw	cr5,rWORD5,rWORD6
+-	blt	cr7,L(dP1x)
++	slw	rWORD5, rWORD1, rWORD6
++	slw	rWORD6, rWORD2, rWORD6
++	cmplw	cr5, rWORD5, rWORD6
++	blt	cr7, L(dP1x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	rWORD2,4(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 4(rSTR1)
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	b	L(dP1e)
+ /* Remainder is 8 */
+ 	.align	4
+ L(dPs2):
+-	slw	rWORD5,rWORD1,r11
+-	slw	rWORD6,rWORD2,r11
+-	cmplw	cr6,rWORD5,rWORD6
+-	blt	cr7,L(dP2x)
++	slw	rWORD5, rWORD1, rWORD6
++	slw	rWORD6, rWORD2, rWORD6
++	cmplw	cr6, rWORD5, rWORD6
++	blt	cr7, L(dP2x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
+-	lwz	rWORD7,4(rSTR1)
+-	lwz	rWORD8,4(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD7, 4(rSTR1)
++	lwz	rWORD8, 4(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
+ 	b	L(dP2e)
+ /* Remainder is 12 */
+ 	.align	4
+ L(dPs3):
+-	slw	rWORD3,rWORD1,r11
+-	slw	rWORD4,rWORD2,r11
+-	cmplw	cr1,rWORD3,rWORD4
++	slw	rWORD3, rWORD1, rWORD6
++	slw	rWORD4, rWORD2, rWORD6
++	cmplw	cr1, rWORD3, rWORD4
+ 	b	L(dP3e)
+ /* Count is a multiple of 16, remainder is 0 */
+ 	.align	4
+ L(dPs4):
+-	mtctr	rTMP
+-	slw	rWORD1,rWORD1,r11
+-	slw	rWORD2,rWORD2,r11
+-	cmplw	cr0,rWORD1,rWORD2
++	mtctr	r0
++	slw	rWORD1, rWORD1, rWORD6
++	slw	rWORD2, rWORD2, rWORD6
++	cmplw	cr7, rWORD1, rWORD2
+ 	b	L(dP4e)
+ 
+ /* At this point we know both strings are word aligned and the
+    compare length is at least 8 bytes.  */
+ 	.align	4
+ L(Waligned):
+-	andi.	rBITDIF,rN,12	/* Get the word remainder */
+-	srwi	rTMP,rN,4	/* Divide by 16 */
+-	cmplwi	cr1,rBITDIF,8
+-	cmplwi	cr7,rN,16
+-	clrlwi	rN,rN,30
++	andi.	r12, rN, 12	/* Get the word remainder */
++	srwi	r0, rN, 4	/* Divide by 16 */
++	cmplwi	cr1, r12, 8
++	cmplwi	cr7, rN, 16
++	clrlwi	rN, rN, 30
+ 	beq	L(dP4)
+-	bgt	cr1,L(dP3)
+-	beq	cr1,L(dP2)
++	bgt	cr1, L(dP3)
++	beq	cr1, L(dP2)
+ 
+ /* Remainder is 4 */
+ 	.align	4
+ L(dP1):
+-	mtctr	rTMP
++	mtctr	r0
+ /* Normally we'd use rWORD7/rWORD8 here, but since we might exit early
+    (8-15 byte compare), we want to use only volatile registers.  This
+    means we can avoid restoring non-volatile registers since we did not
+    change any on the early exit path.  The key here is the non-early
+    exit path only cares about the condition code (cr5), not about which
+    register pair was used.  */
+-	lwz	rWORD5,0(rSTR1)
+-	lwz	rWORD6,0(rSTR2)
+-	cmplw	cr5,rWORD5,rWORD6
+-	blt	cr7,L(dP1x)
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	rWORD2,4(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 0(rSTR1)
++	lwz	rWORD6, 0(rSTR2)
++#endif
++	cmplw	cr5, rWORD5, rWORD6
++	blt	cr7, L(dP1x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 4(rSTR1)
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ L(dP1e):
+-	lwz	rWORD3,8(rSTR1)
+-	lwz	rWORD4,8(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	lwz	rWORD5,12(rSTR1)
+-	lwz	rWORD6,12(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr5,L(dLcr5)
+-	bne	cr0,L(dLcr0)
+-
+-	lwzu	rWORD7,16(rSTR1)
+-	lwzu	rWORD8,16(rSTR2)
+-	bne	cr1,L(dLcr1)
+-	cmplw	cr5,rWORD7,rWORD8
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 8(rSTR1)
++	lwz	rWORD4, 8(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 12(rSTR1)
++	lwz	rWORD6, 12(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr5, L(dLcr5x)
++	bne	cr7, L(dLcr7x)
++
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwzu	rWORD7, 16(rSTR1)
++	lwzu	rWORD8, 16(rSTR2)
++#endif
++	bne	cr1, L(dLcr1)
++	cmplw	cr5, rWORD7, rWORD8
+ 	bdnz	L(dLoop)
+-	bne	cr6,L(dLcr6)
+-	lwz	r30,44(1)
+-	lwz	r31,48(1)
++	bne	cr6, L(dLcr6)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
+ 	.align	3
+ L(dP1x):
+-	slwi.	r12,rN,3
+-	bne	cr5,L(dLcr5)
+-	subfic	rN,r12,32	/* Shift count is 32 - (rN * 8).  */
+-	lwz	1,0(1)
++	slwi.	r12, rN, 3
++	bne	cr5, L(dLcr5x)
++	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bne	L(d00)
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ /* Remainder is 8 */
+ 	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dP2):
+-	mtctr	rTMP
+-	lwz	rWORD5,0(rSTR1)
+-	lwz	rWORD6,0(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	blt	cr7,L(dP2x)
+-	lwz	rWORD7,4(rSTR1)
+-	lwz	rWORD8,4(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
++	mtctr	r0
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 0(rSTR1)
++	lwz	rWORD6, 0(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	blt	cr7, L(dP2x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD7, 4(rSTR1)
++	lwz	rWORD8, 4(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
+ L(dP2e):
+-	lwz	rWORD1,8(rSTR1)
+-	lwz	rWORD2,8(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
+-	lwz	rWORD3,12(rSTR1)
+-	lwz	rWORD4,12(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	addi	rSTR1,rSTR1,4
+-	addi	rSTR2,rSTR2,4
+-	bne	cr6,L(dLcr6)
+-	bne	cr5,L(dLcr5)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 8(rSTR1)
++	lwz	rWORD2, 8(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 12(rSTR1)
++	lwz	rWORD4, 12(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#endif
++	bne	cr6, L(dLcr6)
++	bne	cr5, L(dLcr5)
+ 	b	L(dLoop2)
+ /* Again we are on a early exit path (16-23 byte compare), we want to
+    only use volatile registers and avoid restoring non-volatile
+    registers.  */
+ 	.align	4
+ L(dP2x):
+-	lwz	rWORD3,4(rSTR1)
+-	lwz	rWORD4,4(rSTR2)
+-	cmplw	cr5,rWORD3,rWORD4
+-	slwi.	r12,rN,3
+-	bne	cr6,L(dLcr6)
+-	addi	rSTR1,rSTR1,4
+-	addi	rSTR2,rSTR2,4
+-	bne	cr5,L(dLcr5)
+-	subfic	rN,r12,32	/* Shift count is 32 - (rN * 8).  */
+-	lwz	1,0(1)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 4(rSTR1)
++	lwz	rWORD4, 4(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	slwi.	r12, rN, 3
++	bne	cr6, L(dLcr6x)
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#endif
++	bne	cr1, L(dLcr1x)
++	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bne	L(d00)
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ /* Remainder is 12 */
+ 	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dP3):
+-	mtctr	rTMP
+-	lwz	rWORD3,0(rSTR1)
+-	lwz	rWORD4,0(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
++	mtctr	r0
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 0(rSTR1)
++	lwz	rWORD4, 0(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
+ L(dP3e):
+-	lwz	rWORD5,4(rSTR1)
+-	lwz	rWORD6,4(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	blt	cr7,L(dP3x)
+-	lwz	rWORD7,8(rSTR1)
+-	lwz	rWORD8,8(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	lwz	rWORD1,12(rSTR1)
+-	lwz	rWORD2,12(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	bne	cr1,L(dLcr1)
+-	bne	cr6,L(dLcr6)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 4(rSTR1)
++	lwz	rWORD6, 4(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	blt	cr7, L(dP3x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD7, 8(rSTR1)
++	lwz	rWORD8, 8(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 12(rSTR1)
++	lwz	rWORD2, 12(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	bne	cr1, L(dLcr1)
++	bne	cr6, L(dLcr6)
+ 	b	L(dLoop1)
+ /* Again we are on a early exit path (24-31 byte compare), we want to
+    only use volatile registers and avoid restoring non-volatile
+    registers.  */
+ 	.align	4
+ L(dP3x):
+-	lwz	rWORD1,8(rSTR1)
+-	lwz	rWORD2,8(rSTR2)
+-	cmplw	cr5,rWORD1,rWORD2
+-	slwi.	r12,rN,3
+-	bne	cr1,L(dLcr1)
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	bne	cr6,L(dLcr6)
+-	subfic	rN,r12,32	/* Shift count is 32 - (rN * 8).  */
+-	bne	cr5,L(dLcr5)
+-	lwz	1,0(1)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 8(rSTR1)
++	lwz	rWORD2, 8(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	slwi.	r12, rN, 3
++	bne	cr1, L(dLcr1x)
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	bne	cr6, L(dLcr6x)
++	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
++	bne	cr7, L(dLcr7x)
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bne	L(d00)
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ /* Count is a multiple of 16, remainder is 0 */
+ 	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dP4):
+-	mtctr	rTMP
+-	lwz	rWORD1,0(rSTR1)
+-	lwz	rWORD2,0(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
++	mtctr	r0
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 0(rSTR1)
++	lwz	rWORD2, 0(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ L(dP4e):
+-	lwz	rWORD3,4(rSTR1)
+-	lwz	rWORD4,4(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	lwz	rWORD5,8(rSTR1)
+-	lwz	rWORD6,8(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	lwzu	rWORD7,12(rSTR1)
+-	lwzu	rWORD8,12(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	bne	cr0,L(dLcr0)
+-	bne	cr1,L(dLcr1)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 4(rSTR1)
++	lwz	rWORD4, 4(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 8(rSTR1)
++	lwz	rWORD6, 8(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwzu	rWORD7, 12(rSTR1)
++	lwzu	rWORD8, 12(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	bne	cr7, L(dLcr7)
++	bne	cr1, L(dLcr1)
+ 	bdz-	L(d24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+ 	.align	4
+ L(dLoop):
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	rWORD2,4(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	bne	cr6,L(dLcr6)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 4(rSTR1)
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	bne	cr6, L(dLcr6)
+ L(dLoop1):
+-	lwz	rWORD3,8(rSTR1)
+-	lwz	rWORD4,8(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr5,L(dLcr5)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 8(rSTR1)
++	lwz	rWORD4, 8(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr5, L(dLcr5)
+ L(dLoop2):
+-	lwz	rWORD5,12(rSTR1)
+-	lwz	rWORD6,12(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	bne	cr0,L(dLcr0)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 12(rSTR1)
++	lwz	rWORD6, 12(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	bne	cr7, L(dLcr7)
+ L(dLoop3):
+-	lwzu	rWORD7,16(rSTR1)
+-	lwzu	rWORD8,16(rSTR2)
+-	bne	cr1,L(dLcr1)
+-	cmplw	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwzu	rWORD7, 16(rSTR1)
++	lwzu	rWORD8, 16(rSTR2)
++#endif
++	bne	cr1, L(dLcr1)
++	cmplw	cr7, rWORD1, rWORD2
+ 	bdnz	L(dLoop)
+ 
+ L(dL4):
+-	cmplw	cr1,rWORD3,rWORD4
+-	bne	cr6,L(dLcr6)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr5,L(dLcr5)
+-	cmplw	cr5,rWORD7,rWORD8
++	cmplw	cr1, rWORD3, rWORD4
++	bne	cr6, L(dLcr6)
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr5, L(dLcr5)
++	cmplw	cr5, rWORD7, rWORD8
+ L(d44):
+-	bne	cr0,L(dLcr0)
++	bne	cr7, L(dLcr7)
+ L(d34):
+-	bne	cr1,L(dLcr1)
++	bne	cr1, L(dLcr1)
+ L(d24):
+-	bne	cr6,L(dLcr6)
++	bne	cr6, L(dLcr6)
+ L(d14):
+-	slwi.	r12,rN,3
+-	bne	cr5,L(dLcr5)
++	slwi.	r12, rN, 3
++	bne	cr5, L(dLcr5)
+ L(d04):
+-	lwz	r30,44(1)
+-	lwz	r31,48(1)
+-	lwz	1,0(1)
+-	subfic	rN,r12,32	/* Shift count is 32 - (rN * 8).  */
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
++	subfic	rN, r12, 32	/* Shift count is 32 - (rN * 8).  */
+ 	beq	L(zeroLength)
+ /* At this point we have a remainder of 1 to 3 bytes to compare.  Since
+    we are aligned it is safe to load the whole word, and use
+-   shift right to eliminate bits beyond the compare length. */
++   shift right to eliminate bits beyond the compare length.  */
+ L(d00):
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	rWORD2,4(rSTR2)
+-	srw	rWORD1,rWORD1,rN
+-	srw	rWORD2,rWORD2,rN
+-	cmplw	rWORD1,rWORD2
+-	li	rRTN,0
+-	beqlr
+-	li	rRTN,1
+-	bgtlr
+-	li	rRTN,-1
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 4(rSTR1)
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	srw	rWORD1, rWORD1, rN
++	srw	rWORD2, rWORD2, rN
++	sub	rRTN, rWORD1, rWORD2
+ 	blr
+ 
+ 	.align	4
+-L(dLcr0):
+-	lwz	r30,44(1)
+-	lwz	r31,48(1)
+-	li	rRTN,1
+-	lwz	1,0(1)
+-	bgtlr	cr0
+-	li	rRTN,-1
++	cfi_adjust_cfa_offset(64)
++L(dLcr7):
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++L(dLcr7x):
++	li	rRTN, 1
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
++	bgtlr	cr7
++	li	rRTN, -1
+ 	blr
+ 	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dLcr1):
+-	lwz	r30,44(1)
+-	lwz	r31,48(1)
+-	li	rRTN,1
+-	lwz	1,0(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++L(dLcr1x):
++	li	rRTN, 1
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bgtlr	cr1
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dLcr6):
+-	lwz	r30,44(1)
+-	lwz	r31,48(1)
+-	li	rRTN,1
+-	lwz	1,0(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
++L(dLcr6x):
++	li	rRTN, 1
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bgtlr	cr6
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 	.align	4
++	cfi_adjust_cfa_offset(64)
+ L(dLcr5):
+-	lwz	r30,44(1)
+-	lwz	r31,48(1)
++	lwz	rWORD7, 44(r1)
++	lwz	rWORD8, 48(r1)
+ L(dLcr5x):
+-	li	rRTN,1
+-	lwz	1,0(1)
++	li	rRTN, 1
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	bgtlr	cr5
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 
+ 	.align	4
+ L(bytealigned):
+-	cfi_adjust_cfa_offset(-64)
+ 	mtctr	rN
+ 
+ /* We need to prime this loop.  This loop is swing modulo scheduled
+@@ -413,38 +618,39 @@
+ 
+    So we must precondition some registers and condition codes so that
+    we don't exit the loop early on the first iteration.  */
+-	lbz	rWORD1,0(rSTR1)
+-	lbz	rWORD2,0(rSTR2)
++
++	lbz	rWORD1, 0(rSTR1)
++	lbz	rWORD2, 0(rSTR2)
+ 	bdz	L(b11)
+-	cmplw	cr0,rWORD1,rWORD2
+-	lbz	rWORD3,1(rSTR1)
+-	lbz	rWORD4,1(rSTR2)
++	cmplw	cr7, rWORD1, rWORD2
++	lbz	rWORD3, 1(rSTR1)
++	lbz	rWORD4, 1(rSTR2)
+ 	bdz	L(b12)
+-	cmplw	cr1,rWORD3,rWORD4
+-	lbzu	rWORD5,2(rSTR1)
+-	lbzu	rWORD6,2(rSTR2)
++	cmplw	cr1, rWORD3, rWORD4
++	lbzu	rWORD5, 2(rSTR1)
++	lbzu	rWORD6, 2(rSTR2)
+ 	bdz	L(b13)
+ 	.align	4
+ L(bLoop):
+-	lbzu	rWORD1,1(rSTR1)
+-	lbzu	rWORD2,1(rSTR2)
+-	bne	cr0,L(bLcr0)
++	lbzu	rWORD1, 1(rSTR1)
++	lbzu	rWORD2, 1(rSTR2)
++	bne	cr7, L(bLcr7)
+ 
+-	cmplw	cr6,rWORD5,rWORD6
++	cmplw	cr6, rWORD5, rWORD6
+ 	bdz	L(b3i)
+ 
+-	lbzu	rWORD3,1(rSTR1)
+-	lbzu	rWORD4,1(rSTR2)
+-	bne	cr1,L(bLcr1)
++	lbzu	rWORD3, 1(rSTR1)
++	lbzu	rWORD4, 1(rSTR2)
++	bne	cr1, L(bLcr1)
+ 
+-	cmplw	cr0,rWORD1,rWORD2
++	cmplw	cr7, rWORD1, rWORD2
+ 	bdz	L(b2i)
+ 
+-	lbzu	rWORD5,1(rSTR1)
+-	lbzu	rWORD6,1(rSTR2)
+-	bne	cr6,L(bLcr6)
++	lbzu	rWORD5, 1(rSTR1)
++	lbzu	rWORD6, 1(rSTR2)
++	bne	cr6, L(bLcr6)
+ 
+-	cmplw	cr1,rWORD3,rWORD4
++	cmplw	cr1, rWORD3, rWORD4
+ 	bdnz	L(bLoop)
+ 
+ /* We speculatively loading bytes before we have tested the previous
+@@ -454,67 +660,62 @@
+    tested.  In this case we must complete the pending operations
+    before returning.  */
+ L(b1i):
+-	bne	cr0,L(bLcr0)
+-	bne	cr1,L(bLcr1)
++	bne	cr7, L(bLcr7)
++	bne	cr1, L(bLcr1)
+ 	b	L(bx56)
+ 	.align	4
+ L(b2i):
+-	bne	cr6,L(bLcr6)
+-	bne	cr0,L(bLcr0)
++	bne	cr6, L(bLcr6)
++	bne	cr7, L(bLcr7)
+ 	b	L(bx34)
+ 	.align	4
+ L(b3i):
+-	bne	cr1,L(bLcr1)
+-	bne	cr6,L(bLcr6)
++	bne	cr1, L(bLcr1)
++	bne	cr6, L(bLcr6)
+ 	b	L(bx12)
+ 	.align	4
+-L(bLcr0):
+-	li	rRTN,1
+-	bgtlr	cr0
+-	li	rRTN,-1
++L(bLcr7):
++	li	rRTN, 1
++	bgtlr	cr7
++	li	rRTN, -1
+ 	blr
+ L(bLcr1):
+-	li	rRTN,1
++	li	rRTN, 1
+ 	bgtlr	cr1
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ L(bLcr6):
+-	li	rRTN,1
++	li	rRTN, 1
+ 	bgtlr	cr6
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 
+ L(b13):
+-	bne	cr0,L(bx12)
+-	bne	cr1,L(bx34)
++	bne	cr7, L(bx12)
++	bne	cr1, L(bx34)
+ L(bx56):
+-	sub	rRTN,rWORD5,rWORD6
++	sub	rRTN, rWORD5, rWORD6
+ 	blr
+ 	nop
+ L(b12):
+-	bne	cr0,L(bx12)
++	bne	cr7, L(bx12)
+ L(bx34):
+-	sub	rRTN,rWORD3,rWORD4
++	sub	rRTN, rWORD3, rWORD4
+ 	blr
+-
+ L(b11):
+ L(bx12):
+-	sub	rRTN,rWORD1,rWORD2
++	sub	rRTN, rWORD1, rWORD2
+ 	blr
+-
+ 	.align	4
+-L(zeroLengthReturn):
+-
+ L(zeroLength):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+-	cfi_adjust_cfa_offset(64)
+ 	.align	4
+ /* At this point we know the strings have different alignment and the
+-   compare length is at least 8 bytes.  rBITDIF contains the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    2 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then rStr1 is word aligned and can
++   of r12 to 0.  If r12 == 0 then rStr1 is word aligned and can
+    perform the Wunaligned loop.
+ 
+    Otherwise we know that rSTR1 is not aready word aligned yet.
+@@ -523,465 +724,654 @@
+    eliminate bits preceeding the first byte.  Since we want to join the
+    normal (Wualigned) compare loop, starting at the second word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first W. This insures that the loop count is
++   versioning for the first W. This ensures that the loop count is
+    correct and the first W (shifted) is in the expected resister pair.  */
+ #define rSHL		r29	/* Unaligned shift left count.  */
+ #define rSHR		r28	/* Unaligned shift right count.  */
+-#define rB		r27	/* Left rotation temp for rWORD2.  */
+-#define rD		r26	/* Left rotation temp for rWORD4.  */
+-#define rF		r25	/* Left rotation temp for rWORD6.  */
+-#define rH		r24	/* Left rotation temp for rWORD8.  */
+-#define rA		r0	/* Right rotation temp for rWORD2.  */
+-#define rC		r12	/* Right rotation temp for rWORD4.  */
+-#define rE		r0	/* Right rotation temp for rWORD6.  */
+-#define rG		r12	/* Right rotation temp for rWORD8.  */
++#define rWORD8_SHIFT	r27	/* Left rotation temp for rWORD2.  */
++#define rWORD2_SHIFT	r26	/* Left rotation temp for rWORD4.  */
++#define rWORD4_SHIFT	r25	/* Left rotation temp for rWORD6.  */
++#define rWORD6_SHIFT	r24	/* Left rotation temp for rWORD8.  */
++	cfi_adjust_cfa_offset(64)
+ L(unaligned):
+-	stw	r29,40(r1)
+-	cfi_offset(r29,(40-64))
+-	clrlwi	rSHL,rSTR2,30
+-	stw	r28,36(r1)
+-	cfi_offset(r28,(36-64))
+-	beq	cr5,L(Wunaligned)
+-	stw	r27,32(r1)
+-	cfi_offset(r27,(32-64))
++	stw	rSHL, 40(r1)
++	cfi_offset(rSHL, (40-64))
++	clrlwi	rSHL, rSTR2, 30
++	stw	rSHR, 36(r1)
++	cfi_offset(rSHR, (36-64))
++	beq	cr5, L(Wunaligned)
++	stw	rWORD8_SHIFT, 32(r1)
++	cfi_offset(rWORD8_SHIFT, (32-64))
+ /* Adjust the logical start of rSTR2 to compensate for the extra bits
+    in the 1st rSTR1 W.  */
+-	sub	r27,rSTR2,rBITDIF
++	sub	rWORD8_SHIFT, rSTR2, r12
+ /* But do not attempt to address the W before that W that contains
+    the actual start of rSTR2.  */
+-	clrrwi	rSTR2,rSTR2,2
+-	stw	r26,28(r1)
+-	cfi_offset(r26,(28-64))
+-/* Compute the left/right shift counts for the unalign rSTR2,
++	clrrwi	rSTR2, rSTR2, 2
++	stw	rWORD2_SHIFT, 28(r1)
++	cfi_offset(rWORD2_SHIFT, (28-64))
++/* Compute the left/right shift counts for the unaligned rSTR2,
+    compensating for the logical (W aligned) start of rSTR1.  */
+-	clrlwi	rSHL,r27,30
+-	clrrwi	rSTR1,rSTR1,2
+-	stw	r25,24(r1)
+-	cfi_offset(r25,(24-64))
+-	slwi	rSHL,rSHL,3
+-	cmplw	cr5,r27,rSTR2
+-	add	rN,rN,rBITDIF
+-	slwi	r11,rBITDIF,3
+-	stw	r24,20(r1)
+-	cfi_offset(r24,(20-64))
+-	subfic	rSHR,rSHL,32
+-	srwi	rTMP,rN,4	/* Divide by 16 */
+-	andi.	rBITDIF,rN,12	/* Get the W remainder */
++	clrlwi	rSHL, rWORD8_SHIFT, 30
++	clrrwi	rSTR1, rSTR1, 2
++	stw	rWORD4_SHIFT, 24(r1)
++	cfi_offset(rWORD4_SHIFT, (24-64))
++	slwi	rSHL, rSHL, 3
++	cmplw	cr5, rWORD8_SHIFT, rSTR2
++	add	rN, rN, r12
++	slwi	rWORD6, r12, 3
++	stw	rWORD6_SHIFT, 20(r1)
++	cfi_offset(rWORD6_SHIFT, (20-64))
++	subfic	rSHR, rSHL, 32
++	srwi	r0, rN, 4	/* Divide by 16 */
++	andi.	r12, rN, 12	/* Get the W remainder */
+ /* We normally need to load 2 Ws to start the unaligned rSTR2, but in
+    this special case those bits may be discarded anyway.  Also we
+    must avoid loading a W where none of the bits are part of rSTR2 as
+    this may cross a page boundary and cause a page fault.  */
+-	li	rWORD8,0
+-	blt	cr5,L(dus0)
+-	lwz	rWORD8,0(rSTR2)
+-	la	rSTR2,4(rSTR2)
+-	slw	rWORD8,rWORD8,rSHL
++	li	rWORD8, 0
++	blt	cr5, L(dus0)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD8, 0(rSTR2)
++	addi	rSTR2, rSTR2, 4
++#endif
++	slw	rWORD8, rWORD8, rSHL
+ 
+ L(dus0):
+-	lwz	rWORD1,0(rSTR1)
+-	lwz	rWORD2,0(rSTR2)
+-	cmplwi	cr1,rBITDIF,8
+-	cmplwi	cr7,rN,16
+-	srw	rG,rWORD2,rSHR
+-	clrlwi	rN,rN,30
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 0(rSTR1)
++	lwz	rWORD2, 0(rSTR2)
++#endif
++	cmplwi	cr1, r12, 8
++	cmplwi	cr7, rN, 16
++	srw	r12, rWORD2, rSHR
++	clrlwi	rN, rN, 30
+ 	beq	L(duPs4)
+-	mtctr	rTMP
+-	or	rWORD8,rG,rWORD8
+-	bgt	cr1,L(duPs3)
+-	beq	cr1,L(duPs2)
++	mtctr	r0
++	or	rWORD8, r12, rWORD8
++	bgt	cr1, L(duPs3)
++	beq	cr1, L(duPs2)
+ 
+ /* Remainder is 4 */
+ 	.align	4
+ L(dusP1):
+-	slw	rB,rWORD2,rSHL
+-	slw	rWORD7,rWORD1,r11
+-	slw	rWORD8,rWORD8,r11
+-	bge	cr7,L(duP1e)
++	slw	rWORD8_SHIFT, rWORD2, rSHL
++	slw	rWORD7, rWORD1, rWORD6
++	slw	rWORD8, rWORD8, rWORD6
++	bge	cr7, L(duP1e)
+ /* At this point we exit early with the first word compare
+    complete and remainder of 0 to 3 bytes.  See L(du14) for details on
+    how we handle the remaining bytes.  */
+-	cmplw	cr5,rWORD7,rWORD8
+-	slwi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmplw	cr7,rN,rSHR
++	cmplw	cr5, rWORD7, rWORD8
++	slwi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	lwz	rWORD2,4(rSTR2)
+-	srw	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 8 */
+ 	.align	4
+ L(duPs2):
+-	slw	rH,rWORD2,rSHL
+-	slw	rWORD5,rWORD1,r11
+-	slw	rWORD6,rWORD8,r11
++	slw	rWORD6_SHIFT, rWORD2, rSHL
++	slw	rWORD5, rWORD1, rWORD6
++	slw	rWORD6, rWORD8, rWORD6
+ 	b	L(duP2e)
+ /* Remainder is 12 */
+ 	.align	4
+ L(duPs3):
+-	slw	rF,rWORD2,rSHL
+-	slw	rWORD3,rWORD1,r11
+-	slw	rWORD4,rWORD8,r11
++	slw	rWORD4_SHIFT, rWORD2, rSHL
++	slw	rWORD3, rWORD1, rWORD6
++	slw	rWORD4, rWORD8, rWORD6
+ 	b	L(duP3e)
+ /* Count is a multiple of 16, remainder is 0 */
+ 	.align	4
+ L(duPs4):
+-	mtctr	rTMP
+-	or	rWORD8,rG,rWORD8
+-	slw	rD,rWORD2,rSHL
+-	slw	rWORD1,rWORD1,r11
+-	slw	rWORD2,rWORD8,r11
++	mtctr	r0
++	or	rWORD8, r12, rWORD8
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	slw	rWORD1, rWORD1, rWORD6
++	slw	rWORD2, rWORD8, rWORD6
+ 	b	L(duP4e)
+ 
+ /* At this point we know rSTR1 is word aligned and the
+    compare length is at least 8 bytes.  */
+ 	.align	4
+ L(Wunaligned):
+-	stw	r27,32(r1)
+-	cfi_offset(r27,(32-64))
+-	clrrwi	rSTR2,rSTR2,2
+-	stw	r26,28(r1)
+-	cfi_offset(r26,(28-64))
+-	srwi	rTMP,rN,4	/* Divide by 16 */
+-	stw	r25,24(r1)
+-	cfi_offset(r25,(24-64))
+-	andi.	rBITDIF,rN,12	/* Get the W remainder */
+-	stw	r24,20(r1)
+-	cfi_offset(r24,(24-64))
+-	slwi	rSHL,rSHL,3
+-	lwz	rWORD6,0(rSTR2)
+-	lwzu	rWORD8,4(rSTR2)
+-	cmplwi	cr1,rBITDIF,8
+-	cmplwi	cr7,rN,16
+-	clrlwi	rN,rN,30
+-	subfic	rSHR,rSHL,32
+-	slw	rH,rWORD6,rSHL
++	stw	rWORD8_SHIFT, 32(r1)
++	cfi_offset(rWORD8_SHIFT, (32-64))
++	clrrwi	rSTR2, rSTR2, 2
++	stw	rWORD2_SHIFT, 28(r1)
++	cfi_offset(rWORD2_SHIFT, (28-64))
++	srwi	r0, rN, 4	/* Divide by 16 */
++	stw	rWORD4_SHIFT, 24(r1)
++	cfi_offset(rWORD4_SHIFT, (24-64))
++	andi.	r12, rN, 12	/* Get the W remainder */
++	stw	rWORD6_SHIFT, 20(r1)
++	cfi_offset(rWORD6_SHIFT, (20-64))
++	slwi	rSHL, rSHL, 3
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD6, 0(rSTR2)
++	lwzu	rWORD8, 4(rSTR2)
++#endif
++	cmplwi	cr1, r12, 8
++	cmplwi	cr7, rN, 16
++	clrlwi	rN, rN, 30
++	subfic	rSHR, rSHL, 32
++	slw	rWORD6_SHIFT, rWORD6, rSHL
+ 	beq	L(duP4)
+-	mtctr	rTMP
+-	bgt	cr1,L(duP3)
+-	beq	cr1,L(duP2)
++	mtctr	r0
++	bgt	cr1, L(duP3)
++	beq	cr1, L(duP2)
+ 
+ /* Remainder is 4 */
+ 	.align	4
+ L(duP1):
+-	srw	rG,rWORD8,rSHR
+-	lwz	rWORD7,0(rSTR1)
+-	slw	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	blt	cr7,L(duP1x)
++	srw	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
++	lwz	rWORD7, 0(rSTR1)
++#endif
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	blt	cr7, L(duP1x)
+ L(duP1e):
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	rWORD2,4(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	srw	rA,rWORD2,rSHR
+-	slw	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
+-	lwz	rWORD3,8(rSTR1)
+-	lwz	rWORD4,8(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
+-	srw	rC,rWORD4,rSHR
+-	slw	rF,rWORD4,rSHL
+-	bne	cr5,L(duLcr5)
+-	or	rWORD4,rC,rD
+-	lwz	rWORD5,12(rSTR1)
+-	lwz	rWORD6,12(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	srw	rE,rWORD6,rSHR
+-	slw	rH,rWORD6,rSHL
+-	bne	cr0,L(duLcr0)
+-	or	rWORD6,rE,rF
+-	cmplw	cr6,rWORD5,rWORD6
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 4(rSTR1)
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 8(rSTR1)
++	lwz	rWORD4, 8(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	bne	cr5, L(duLcr5)
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 12(rSTR1)
++	lwz	rWORD6, 12(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	bne	cr7, L(duLcr7)
++	or	rWORD6, r0, rWORD4_SHIFT
++	cmplw	cr6, rWORD5, rWORD6
+ 	b	L(duLoop3)
+ 	.align	4
+ /* At this point we exit early with the first word compare
+    complete and remainder of 0 to 3 bytes.  See L(du14) for details on
+    how we handle the remaining bytes.  */
+ L(duP1x):
+-	cmplw	cr5,rWORD7,rWORD8
+-	slwi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmplw	cr7,rN,rSHR
++	cmplw	cr5, rWORD7, rWORD8
++	slwi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	ld	rWORD2,8(rSTR2)
+-	srw	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD2, 8(rSTR2)
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 8 */
+ 	.align	4
+ L(duP2):
+-	srw	rE,rWORD8,rSHR
+-	lwz	rWORD5,0(rSTR1)
+-	or	rWORD6,rE,rH
+-	slw	rH,rWORD8,rSHL
++	srw	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
++	lwz	rWORD5, 0(rSTR1)
++#endif
++	or	rWORD6, r0, rWORD6_SHIFT
++	slw	rWORD6_SHIFT, rWORD8, rSHL
+ L(duP2e):
+-	lwz	rWORD7,4(rSTR1)
+-	lwz	rWORD8,4(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	srw	rG,rWORD8,rSHR
+-	slw	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	blt	cr7,L(duP2x)
+-	lwz	rWORD1,8(rSTR1)
+-	lwz	rWORD2,8(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	bne	cr6,L(duLcr6)
+-	srw	rA,rWORD2,rSHR
+-	slw	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
+-	lwz	rWORD3,12(rSTR1)
+-	lwz	rWORD4,12(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
+-	bne	cr5,L(duLcr5)
+-	srw	rC,rWORD4,rSHR
+-	slw	rF,rWORD4,rSHL
+-	or	rWORD4,rC,rD
+-	addi	rSTR1,rSTR1,4
+-	addi	rSTR2,rSTR2,4
+-	cmplw	cr1,rWORD3,rWORD4
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD7, 4(rSTR1)
++	lwz	rWORD8, 4(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	blt	cr7, L(duP2x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 8(rSTR1)
++	lwz	rWORD2, 8(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	bne	cr6, L(duLcr6)
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 12(rSTR1)
++	lwz	rWORD4, 12(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	bne	cr5, L(duLcr5)
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#endif
++	cmplw	cr1, rWORD3, rWORD4
+ 	b	L(duLoop2)
+ 	.align	4
+ L(duP2x):
+-	cmplw	cr5,rWORD7,rWORD8
+-	addi	rSTR1,rSTR1,4
+-	addi	rSTR2,rSTR2,4
+-	bne	cr6,L(duLcr6)
+-	slwi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmplw	cr7,rN,rSHR
++	cmplw	cr5, rWORD7, rWORD8
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#endif
++	bne	cr6, L(duLcr6)
++	slwi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	lwz	rWORD2,4(rSTR2)
+-	srw	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ 
+ /* Remainder is 12 */
+ 	.align	4
+ L(duP3):
+-	srw	rC,rWORD8,rSHR
+-	lwz	rWORD3,0(rSTR1)
+-	slw	rF,rWORD8,rSHL
+-	or	rWORD4,rC,rH
++	srw	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
++	lwz	rWORD3, 0(rSTR1)
++#endif
++	slw	rWORD4_SHIFT, rWORD8, rSHL
++	or	rWORD4, r12, rWORD6_SHIFT
+ L(duP3e):
+-	lwz	rWORD5,4(rSTR1)
+-	lwz	rWORD6,4(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	srw	rE,rWORD6,rSHR
+-	slw	rH,rWORD6,rSHL
+-	or	rWORD6,rE,rF
+-	lwz	rWORD7,8(rSTR1)
+-	lwz	rWORD8,8(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr1,L(duLcr1)
+-	srw	rG,rWORD8,rSHR
+-	slw	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	blt	cr7,L(duP3x)
+-	lwz	rWORD1,12(rSTR1)
+-	lwz	rWORD2,12(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	bne	cr6,L(duLcr6)
+-	srw	rA,rWORD2,rSHR
+-	slw	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	cmplw	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 4(rSTR1)
++	lwz	rWORD6, 4(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD7, 8(rSTR1)
++	lwz	rWORD8, 8(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr1, L(duLcr1)
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	blt	cr7, L(duP3x)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 12(rSTR1)
++	lwz	rWORD2, 12(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	bne	cr6, L(duLcr6)
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	cmplw	cr7, rWORD1, rWORD2
+ 	b	L(duLoop1)
+ 	.align	4
+ L(duP3x):
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	bne	cr1,L(duLcr1)
+-	cmplw	cr5,rWORD7,rWORD8
+-	bne	cr6,L(duLcr6)
+-	slwi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmplw	cr7,rN,rSHR
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++#if 0
++/* Huh?  We've already branched on cr1!  */
++	bne	cr1, L(duLcr1)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	bne	cr6, L(duLcr6)
++	slwi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	lwz	rWORD2,4(rSTR2)
+-	srw	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	srw	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ 
+ /* Count is a multiple of 16, remainder is 0 */
+ 	.align	4
+ L(duP4):
+-	mtctr	rTMP
+-	srw	rA,rWORD8,rSHR
+-	lwz	rWORD1,0(rSTR1)
+-	slw	rD,rWORD8,rSHL
+-	or	rWORD2,rA,rH
++	mtctr	r0
++	srw	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	addi	rSTR1, rSTR1, 4
++#else
++	lwz	rWORD1, 0(rSTR1)
++#endif
++	slw	rWORD2_SHIFT, rWORD8, rSHL
++	or	rWORD2, r0, rWORD6_SHIFT
+ L(duP4e):
+-	lwz	rWORD3,4(rSTR1)
+-	lwz	rWORD4,4(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
+-	srw	rC,rWORD4,rSHR
+-	slw	rF,rWORD4,rSHL
+-	or	rWORD4,rC,rD
+-	lwz	rWORD5,8(rSTR1)
+-	lwz	rWORD6,8(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	bne	cr0,L(duLcr0)
+-	srw	rE,rWORD6,rSHR
+-	slw	rH,rWORD6,rSHL
+-	or	rWORD6,rE,rF
+-	lwzu	rWORD7,12(rSTR1)
+-	lwzu	rWORD8,12(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr1,L(duLcr1)
+-	srw	rG,rWORD8,rSHR
+-	slw	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	cmplw	cr5,rWORD7,rWORD8
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 4(rSTR1)
++	lwz	rWORD4, 4(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 8(rSTR1)
++	lwz	rWORD6, 8(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	bne	cr7, L(duLcr7)
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwzu	rWORD7, 12(rSTR1)
++	lwzu	rWORD8, 12(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr1, L(duLcr1)
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	cmplw	cr5, rWORD7, rWORD8
+ 	bdz	L(du24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+ 	.align	4
+ L(duLoop):
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	rWORD2,4(rSTR2)
+-	cmplw	cr1,rWORD3,rWORD4
+-	bne	cr6,L(duLcr6)
+-	srw	rA,rWORD2,rSHR
+-	slw	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD1, 4(rSTR1)
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	bne	cr6, L(duLcr6)
++	srw	r0, rWORD2, rSHR
++	slw	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
+ L(duLoop1):
+-	lwz	rWORD3,8(rSTR1)
+-	lwz	rWORD4,8(rSTR2)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr5,L(duLcr5)
+-	srw	rC,rWORD4,rSHR
+-	slw	rF,rWORD4,rSHL
+-	or	rWORD4,rC,rD
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD3, 0, rSTR1
++	lwbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD3, 8(rSTR1)
++	lwz	rWORD4, 8(rSTR2)
++#endif
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr5, L(duLcr5)
++	srw	r12, rWORD4, rSHR
++	slw	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
+ L(duLoop2):
+-	lwz	rWORD5,12(rSTR1)
+-	lwz	rWORD6,12(rSTR2)
+-	cmplw	cr5,rWORD7,rWORD8
+-	bne	cr0,L(duLcr0)
+-	srw	rE,rWORD6,rSHR
+-	slw	rH,rWORD6,rSHL
+-	or	rWORD6,rE,rF
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD5, 0, rSTR1
++	lwbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD5, 12(rSTR1)
++	lwz	rWORD6, 12(rSTR2)
++#endif
++	cmplw	cr5, rWORD7, rWORD8
++	bne	cr7, L(duLcr7)
++	srw	r0, rWORD6, rSHR
++	slw	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
+ L(duLoop3):
+-	lwzu	rWORD7,16(rSTR1)
+-	lwzu	rWORD8,16(rSTR2)
+-	cmplw	cr0,rWORD1,rWORD2
+-	bne	cr1,L(duLcr1)
+-	srw	rG,rWORD8,rSHR
+-	slw	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD7, 0, rSTR1
++	lwbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 4
++	addi	rSTR2, rSTR2, 4
++#else
++	lwzu	rWORD7, 16(rSTR1)
++	lwzu	rWORD8, 16(rSTR2)
++#endif
++	cmplw	cr7, rWORD1, rWORD2
++	bne	cr1, L(duLcr1)
++	srw	r12, rWORD8, rSHR
++	slw	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	bdnz	L(duLoop)
+ 
+ L(duL4):
+-	bne	cr1,L(duLcr1)
+-	cmplw	cr1,rWORD3,rWORD4
+-	bne	cr6,L(duLcr6)
+-	cmplw	cr6,rWORD5,rWORD6
+-	bne	cr5,L(duLcr5)
+-	cmplw	cr5,rWORD7,rWORD8
++#if 0
++/* Huh?  We've already branched on cr1!  */
++	bne	cr1, L(duLcr1)
++#endif
++	cmplw	cr1, rWORD3, rWORD4
++	bne	cr6, L(duLcr6)
++	cmplw	cr6, rWORD5, rWORD6
++	bne	cr5, L(duLcr5)
++	cmplw	cr5, rWORD7, rWORD8
+ L(du44):
+-	bne	cr0,L(duLcr0)
++	bne	cr7, L(duLcr7)
+ L(du34):
+-	bne	cr1,L(duLcr1)
++	bne	cr1, L(duLcr1)
+ L(du24):
+-	bne	cr6,L(duLcr6)
++	bne	cr6, L(duLcr6)
+ L(du14):
+-	slwi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
++	slwi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
+ /* At this point we have a remainder of 1 to 3 bytes to compare.  We use
+    shift right to eliminate bits beyond the compare length.
++   This allows the use of word subtract to compute the final result.
+ 
+    However it may not be safe to load rWORD2 which may be beyond the
+    string length. So we compare the bit length of the remainder to
+    the right shift count (rSHR). If the bit count is less than or equal
+    we do not need to load rWORD2 (all significant bits are already in
+-   rB).  */
+-	cmplw	cr7,rN,rSHR
++   rWORD8_SHIFT).  */
++	cmplw	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	lwz	rWORD2,4(rSTR2)
+-	srw	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 4
++#else
++	lwz	rWORD2, 4(rSTR2)
++#endif
++	srw	r0, rWORD2, rSHR
+ 	.align	4
+ L(dutrim):
+-	lwz	rWORD1,4(rSTR1)
+-	lwz	r31,48(1)
+-	subfic	rN,rN,32	/* Shift count is 32 - (rN * 8).  */
+-	or	rWORD2,rA,rB
+-	lwz	r30,44(1)
+-	lwz	r29,40(r1)
+-	srw	rWORD1,rWORD1,rN
+-	srw	rWORD2,rWORD2,rN
+-	lwz	r28,36(r1)
+-	lwz	r27,32(r1)
+-	cmplw	rWORD1,rWORD2
+-	li	rRTN,0
+-	beq	L(dureturn26)
+-	li	rRTN,1
+-	bgt	L(dureturn26)
+-	li	rRTN,-1
++#ifdef __LITTLE_ENDIAN__
++	lwbrx	rWORD1, 0, rSTR1
++#else
++	lwz	rWORD1, 4(rSTR1)
++#endif
++	lwz	rWORD8, 48(r1)
++	subfic	rN, rN, 32	/* Shift count is 32 - (rN * 8).  */
++	or	rWORD2, r0, rWORD8_SHIFT
++	lwz	rWORD7, 44(r1)
++	lwz	rSHL, 40(r1)
++	srw	rWORD1, rWORD1, rN
++	srw	rWORD2, rWORD2, rN
++	lwz	rSHR, 36(r1)
++	lwz	rWORD8_SHIFT, 32(r1)
++	sub	rRTN, rWORD1, rWORD2
+ 	b	L(dureturn26)
+ 	.align	4
+-L(duLcr0):
+-	lwz	r31,48(1)
+-	lwz	r30,44(1)
+-	li	rRTN,1
+-	bgt	cr0,L(dureturn29)
+-	lwz	r29,40(r1)
+-	lwz	r28,36(r1)
+-	li	rRTN,-1
++L(duLcr7):
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
++	li	rRTN, 1
++	bgt	cr7, L(dureturn29)
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	4
+ L(duLcr1):
+-	lwz	r31,48(1)
+-	lwz	r30,44(1)
+-	li	rRTN,1
+-	bgt	cr1,L(dureturn29)
+-	lwz	r29,40(r1)
+-	lwz	r28,36(r1)
+-	li	rRTN,-1
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
++	li	rRTN, 1
++	bgt	cr1, L(dureturn29)
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	4
+ L(duLcr6):
+-	lwz	r31,48(1)
+-	lwz	r30,44(1)
+-	li	rRTN,1
+-	bgt	cr6,L(dureturn29)
+-	lwz	r29,40(r1)
+-	lwz	r28,36(r1)
+-	li	rRTN,-1
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
++	li	rRTN, 1
++	bgt	cr6, L(dureturn29)
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	4
+ L(duLcr5):
+-	lwz	r31,48(1)
+-	lwz	r30,44(1)
+-	li	rRTN,1
+-	bgt	cr5,L(dureturn29)
+-	lwz	r29,40(r1)
+-	lwz	r28,36(r1)
+-	li	rRTN,-1
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
++	li	rRTN, 1
++	bgt	cr5, L(dureturn29)
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	3
+ L(duZeroReturn):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	.align	4
+ L(dureturn):
+-	lwz	r31,48(1)
+-	lwz	r30,44(1)
++	lwz	rWORD8, 48(r1)
++	lwz	rWORD7, 44(r1)
+ L(dureturn29):
+-	lwz	r29,40(r1)
+-	lwz	r28,36(r1)
++	lwz	rSHL, 40(r1)
++	lwz	rSHR, 36(r1)
+ L(dureturn27):
+-	lwz	r27,32(r1)
++	lwz	rWORD8_SHIFT, 32(r1)
+ L(dureturn26):
+-	lwz	r26,28(r1)
++	lwz	rWORD2_SHIFT, 28(r1)
+ L(dureturn25):
+-	lwz	r25,24(r1)
+-	lwz	r24,20(r1)
+-	lwz	1,0(1)
++	lwz	rWORD4_SHIFT, 24(r1)
++	lwz	rWORD6_SHIFT, 20(r1)
++	addi	r1, r1, 64
++	cfi_adjust_cfa_offset(-64)
+ 	blr
+ END (BP_SYM (memcmp))
++
+ libc_hidden_builtin_def (memcmp)
+ weak_alias (memcmp,bcmp)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcmp.S	2014-05-28 19:22:37.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcmp.S	2014-05-29 09:35:25.000000000 -0500
+@@ -1,5 +1,5 @@
+-/* Optimized strcmp implementation for PowerPC64.
+-   Copyright (C) 2003, 2006, 2011 Free Software Foundation, Inc.
++/* Optimized memcmp implementation for PowerPC64.
++   Copyright (C) 2003-2014 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
+@@ -17,307 +17,492 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+-/* int [r3] memcmp (const char *s1 [r3], const char *s2 [r4], size_t size [r5])  */
++/* int [r3] memcmp (const char *s1 [r3],
++		    const char *s2 [r4],
++		    size_t size [r5])  */
+ 
+ 	.machine power4
+-EALIGN (BP_SYM(memcmp), 4, 0)
++EALIGN (memcmp, 4, 0)
+ 	CALL_MCOUNT 3
+ 
+-#define rTMP	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+ #define rN	r5	/* max string length */
+-/* Note:  The Bounded pointer support in this code is broken.  This code
+-   was inherited from PPC32 and that support was never completed.
+-   Current PPC gcc does not support -fbounds-check or -fbounded-pointers.  */
+ #define rWORD1	r6	/* current word in s1 */
+ #define rWORD2	r7	/* current word in s2 */
+ #define rWORD3	r8	/* next word in s1 */
+ #define rWORD4	r9	/* next word in s2 */
+ #define rWORD5	r10	/* next word in s1 */
+ #define rWORD6	r11	/* next word in s2 */
+-#define rBITDIF	r12	/* bits that differ in s1 & s2 words */
+ #define rWORD7	r30	/* next word in s1 */
+ #define rWORD8	r31	/* next word in s2 */
+ 
+-	xor	rTMP, rSTR2, rSTR1
++	xor	r0, rSTR2, rSTR1
+ 	cmpldi	cr6, rN, 0
+ 	cmpldi	cr1, rN, 12
+-	clrldi.	rTMP, rTMP, 61
+-	clrldi	rBITDIF, rSTR1, 61
+-	cmpldi	cr5, rBITDIF, 0
++	clrldi.	r0, r0, 61
++	clrldi	r12, rSTR1, 61
++	cmpldi	cr5, r12, 0
+ 	beq-	cr6, L(zeroLength)
+-	dcbt	0,rSTR1
+-	dcbt	0,rSTR2
+-/* If less than 8 bytes or not aligned, use the unalligned
++	dcbt	0, rSTR1
++	dcbt	0, rSTR2
++/* If less than 8 bytes or not aligned, use the unaligned
+    byte loop.  */
+ 	blt	cr1, L(bytealigned)
+-	std	rWORD8,-8(r1)	
+-	cfi_offset(rWORD8,-8)
+-	std	rWORD7,-16(r1)	
+-	cfi_offset(rWORD7,-16)
++	std	rWORD8, -8(r1)
++	cfi_offset(rWORD8, -8)
++	std	rWORD7, -16(r1)
++	cfi_offset(rWORD7, -16)
+ 	bne	L(unaligned)
+ /* At this point we know both strings have the same alignment and the
+-   compare length is at least 8 bytes.  rBITDIF containes the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    3 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then we are already double word 
+-   aligned and can perform the DWaligned loop.
+-  
++   of r12 to 0.  If r12 == 0 then we are already double word
++   aligned and can perform the DW aligned loop.
++
+    Otherwise we know the two strings have the same alignment (but not
+-   yet DW).  So we can force the string addresses to the next lower DW
+-   boundary and special case this first DW word using shift left to
+-   ellimiate bits preceeding the first byte.  Since we want to join the
+-   normal (DWaligned) compare loop, starting at the second double word,
++   yet DW).  So we force the string addresses to the next lower DW
++   boundary and special case this first DW using shift left to
++   eliminate bits preceding the first byte.  Since we want to join the
++   normal (DW aligned) compare loop, starting at the second double word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first DW. This insures that the loop count is
+-   correct and the first DW (shifted) is in the expected resister pair.  */
+-	.align 4
++   versioning for the first DW. This ensures that the loop count is
++   correct and the first DW (shifted) is in the expected register pair.  */
++	.align	4
+ L(samealignment):
+ 	clrrdi	rSTR1, rSTR1, 3
+ 	clrrdi	rSTR2, rSTR2, 3
+ 	beq	cr5, L(DWaligned)
+-	add	rN, rN, rBITDIF
+-	sldi	r11, rBITDIF, 3
+-	srdi	rTMP, rN, 5	/* Divide by 32 */
+-	andi.	rBITDIF, rN, 24	/* Get the DW remainder */
++	add	rN, rN, r12
++	sldi	rWORD6, r12, 3
++	srdi	r0, rN, 5	/* Divide by 32 */
++	andi.	r12, rN, 24	/* Get the DW remainder */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 0(rSTR1)
+ 	ld	rWORD2, 0(rSTR2)
+-	cmpldi	cr1, rBITDIF, 16
++#endif
++	cmpldi	cr1, r12, 16
+ 	cmpldi	cr7, rN, 32
+ 	clrldi	rN, rN, 61
+ 	beq	L(dPs4)
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
+ 	bgt	cr1, L(dPs3)
+ 	beq	cr1, L(dPs2)
+ 
+ /* Remainder is 8 */
+-	.align 3
++	.align	3
+ L(dsP1):
+-	sld	rWORD5, rWORD1, r11
+-	sld	rWORD6, rWORD2, r11
++	sld	rWORD5, rWORD1, rWORD6
++	sld	rWORD6, rWORD2, rWORD6
+ 	cmpld	cr5, rWORD5, rWORD6
+ 	blt	cr7, L(dP1x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 8(rSTR1)
+ 	ld	rWORD2, 8(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	b	L(dP1e)
+ /* Remainder is 16 */
+-	.align 4
++	.align	4
+ L(dPs2):
+-	sld	rWORD5, rWORD1, r11
+-	sld	rWORD6, rWORD2, r11
++	sld	rWORD5, rWORD1, rWORD6
++	sld	rWORD6, rWORD2, rWORD6
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	blt	cr7, L(dP2x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD7, 8(rSTR1)
+ 	ld	rWORD8, 8(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+ 	b	L(dP2e)
+ /* Remainder is 24 */
+-	.align 4
++	.align	4
+ L(dPs3):
+-	sld	rWORD3, rWORD1, r11
+-	sld	rWORD4, rWORD2, r11
++	sld	rWORD3, rWORD1, rWORD6
++	sld	rWORD4, rWORD2, rWORD6
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	b	L(dP3e)
+ /* Count is a multiple of 32, remainder is 0 */
+-	.align 4
++	.align	4
+ L(dPs4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	sld	rWORD1, rWORD1, r11
+-	sld	rWORD2, rWORD2, r11
+-	cmpld	cr0, rWORD1, rWORD2
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	sld	rWORD1, rWORD1, rWORD6
++	sld	rWORD2, rWORD2, rWORD6
++	cmpld	cr7, rWORD1, rWORD2
+ 	b	L(dP4e)
+ 
+ /* At this point we know both strings are double word aligned and the
+    compare length is at least 8 bytes.  */
+-	.align 4
++	.align	4
+ L(DWaligned):
+-	andi.	rBITDIF, rN, 24	/* Get the DW remainder */
+-	srdi	rTMP, rN, 5	/* Divide by 32 */
+-	cmpldi	cr1, rBITDIF, 16
++	andi.	r12, rN, 24	/* Get the DW remainder */
++	srdi	r0, rN, 5	/* Divide by 32 */
++	cmpldi	cr1, r12, 16
+ 	cmpldi	cr7, rN, 32
+ 	clrldi	rN, rN, 61
+ 	beq	L(dP4)
+ 	bgt	cr1, L(dP3)
+ 	beq	cr1, L(dP2)
+-		
++
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
+ L(dP1):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
+ /* Normally we'd use rWORD7/rWORD8 here, but since we might exit early
+-   (8-15 byte compare), we want to use only volitile registers.  This
+-   means we can avoid restoring non-volitile registers since we did not
++   (8-15 byte compare), we want to use only volatile registers.  This
++   means we can avoid restoring non-volatile registers since we did not
+    change any on the early exit path.  The key here is the non-early
+-   exit path only cares about the condition code (cr5), not about which 
++   exit path only cares about the condition code (cr5), not about which
+    register pair was used.  */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 0(rSTR1)
+ 	ld	rWORD6, 0(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD5, rWORD6
+ 	blt	cr7, L(dP1x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 8(rSTR1)
+ 	ld	rWORD2, 8(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ L(dP1e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 16(rSTR1)
+ 	ld	rWORD4, 16(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 24(rSTR1)
+ 	ld	rWORD6, 24(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+-	bne	cr5, L(dLcr5)
+-	bne	cr0, L(dLcr0)
+-	
++	bne	cr5, L(dLcr5x)
++	bne	cr7, L(dLcr7x)
++
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ldu	rWORD7, 32(rSTR1)
+ 	ldu	rWORD8, 32(rSTR2)
++#endif
+ 	bne	cr1, L(dLcr1)
+ 	cmpld	cr5, rWORD7, rWORD8
+ 	bdnz	L(dLoop)
+ 	bne	cr6, L(dLcr6)
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	.align 3
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	.align	3
+ L(dP1x):
+ 	sldi.	r12, rN, 3
+-	bne	cr5, L(dLcr5)
++	bne	cr5, L(dLcr5x)
+ 	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+ 	bne	L(d00)
+ 	li	rRTN, 0
+ 	blr
+-		
++
+ /* Remainder is 16 */
+-	.align 4
++	.align	4
+ L(dP2):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 0(rSTR1)
+ 	ld	rWORD6, 0(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	blt	cr7, L(dP2x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD7, 8(rSTR1)
+ 	ld	rWORD8, 8(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+ L(dP2e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 16(rSTR1)
+ 	ld	rWORD2, 16(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 24(rSTR1)
+ 	ld	rWORD4, 24(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
++#endif
+ 	bne	cr6, L(dLcr6)
+ 	bne	cr5, L(dLcr5)
+ 	b	L(dLoop2)
+ /* Again we are on a early exit path (16-23 byte compare), we want to
+-   only use volitile registers and avoid restoring non-volitile
++   only use volatile registers and avoid restoring non-volatile
+    registers.  */
+-	.align 4
++	.align	4
+ L(dP2x):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 8(rSTR1)
+ 	ld	rWORD4, 8(rSTR2)
+-	cmpld	cr5, rWORD3, rWORD4
++#endif
++	cmpld	cr1, rWORD3, rWORD4
+ 	sldi.	r12, rN, 3
+-	bne	cr6, L(dLcr6)
++	bne	cr6, L(dLcr6x)
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
+-	bne	cr5, L(dLcr5)
++#endif
++	bne	cr1, L(dLcr1x)
+ 	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+ 	bne	L(d00)
+ 	li	rRTN, 0
+ 	blr
+-		
++
+ /* Remainder is 24 */
+-	.align 4
++	.align	4
+ L(dP3):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 0(rSTR1)
+ 	ld	rWORD4, 0(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+ L(dP3e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 8(rSTR1)
+ 	ld	rWORD6, 8(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	blt	cr7, L(dP3x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD7, 16(rSTR1)
+ 	ld	rWORD8, 16(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 24(rSTR1)
+ 	ld	rWORD2, 24(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 16
+ 	addi	rSTR2, rSTR2, 16
++#endif
+ 	bne	cr1, L(dLcr1)
+ 	bne	cr6, L(dLcr6)
+ 	b	L(dLoop1)
+ /* Again we are on a early exit path (24-31 byte compare), we want to
+-   only use volitile registers and avoid restoring non-volitile
++   only use volatile registers and avoid restoring non-volatile
+    registers.  */
+-	.align 4
++	.align	4
+ L(dP3x):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 16(rSTR1)
+ 	ld	rWORD2, 16(rSTR2)
+-	cmpld	cr5, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	sldi.	r12, rN, 3
+-	bne	cr1, L(dLcr1)
++	bne	cr1, L(dLcr1x)
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 16
+ 	addi	rSTR2, rSTR2, 16
+-	bne	cr6, L(dLcr6)
++#endif
++	bne	cr6, L(dLcr6x)
+ 	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+-	bne	cr5, L(dLcr5)
++	bne	cr7, L(dLcr7x)
+ 	bne	L(d00)
+ 	li	rRTN, 0
+ 	blr
+-	
++
+ /* Count is a multiple of 32, remainder is 0 */
+-	.align 4
++	.align	4
+ L(dP4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 0(rSTR1)
+ 	ld	rWORD2, 0(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ L(dP4e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 8(rSTR1)
+ 	ld	rWORD4, 8(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 16(rSTR1)
+ 	ld	rWORD6, 16(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ldu	rWORD7, 24(rSTR1)
+ 	ldu	rWORD8, 24(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+-	bne	cr0, L(dLcr0)
++	bne	cr7, L(dLcr7)
+ 	bne	cr1, L(dLcr1)
+ 	bdz-	L(d24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+-	.align 4
++	.align	4
+ L(dLoop):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 8(rSTR1)
+ 	ld	rWORD2, 8(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(dLcr6)
+ L(dLoop1):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 16(rSTR1)
+ 	ld	rWORD4, 16(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	bne	cr5, L(dLcr5)
+ L(dLoop2):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 24(rSTR1)
+ 	ld	rWORD6, 24(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+-	bne	cr0, L(dLcr0)
++	bne	cr7, L(dLcr7)
+ L(dLoop3):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ldu	rWORD7, 32(rSTR1)
+ 	ldu	rWORD8, 32(rSTR2)
++#endif
+ 	bne-	cr1, L(dLcr1)
+-	cmpld	cr0, rWORD1, rWORD2
+-	bdnz+	L(dLoop)	
+-	
++	cmpld	cr7, rWORD1, rWORD2
++	bdnz+	L(dLoop)
++
+ L(dL4):
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(dLcr6)
+@@ -325,84 +510,98 @@
+ 	bne	cr5, L(dLcr5)
+ 	cmpld	cr5, rWORD7, rWORD8
+ L(d44):
+-	bne	cr0, L(dLcr0)
++	bne	cr7, L(dLcr7)
+ L(d34):
+ 	bne	cr1, L(dLcr1)
+ L(d24):
+ 	bne	cr6, L(dLcr6)
+ L(d14):
+ 	sldi.	r12, rN, 3
+-	bne	cr5, L(dLcr5) 
++	bne	cr5, L(dLcr5)
+ L(d04):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ 	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+ 	beq	L(zeroLength)
+ /* At this point we have a remainder of 1 to 7 bytes to compare.  Since
+    we are aligned it is safe to load the whole double word, and use
+-   shift right double to elliminate bits beyond the compare length.  */ 
++   shift right double to eliminate bits beyond the compare length.  */
+ L(d00):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 8(rSTR1)
+-	ld	rWORD2, 8(rSTR2) 
++	ld	rWORD2, 8(rSTR2)
++#endif
+ 	srd	rWORD1, rWORD1, rN
+ 	srd	rWORD2, rWORD2, rN
+-	cmpld	cr5, rWORD1, rWORD2
+- 	bne	cr5, L(dLcr5x)
++	cmpld	cr7, rWORD1, rWORD2
++	bne	cr7, L(dLcr7x)
+ 	li	rRTN, 0
+ 	blr
+-	.align 4
+-L(dLcr0):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++
++	.align	4
++L(dLcr7):
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dLcr7x):
+ 	li	rRTN, 1
+-	bgtlr	cr0
++	bgtlr	cr7
+ 	li	rRTN, -1
+ 	blr
+-	.align 4
++	.align	4
+ L(dLcr1):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dLcr1x):
+ 	li	rRTN, 1
+ 	bgtlr	cr1
+ 	li	rRTN, -1
+ 	blr
+-	.align 4
++	.align	4
+ L(dLcr6):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dLcr6x):
+ 	li	rRTN, 1
+ 	bgtlr	cr6
+ 	li	rRTN, -1
+ 	blr
+-	.align 4
++	.align	4
+ L(dLcr5):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ L(dLcr5x):
+ 	li	rRTN, 1
+ 	bgtlr	cr5
+ 	li	rRTN, -1
+ 	blr
+-	
+-	.align 4
++
++	.align	4
+ L(bytealigned):
+-	mtctr   rN	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	rN	/* Power4 wants mtctr 1st in dispatch group */
++#if 0
++/* Huh?  We've already branched on cr6!  */
+ 	beq-	cr6, L(zeroLength)
++#endif
+ 
+ /* We need to prime this loop.  This loop is swing modulo scheduled
+-   to avoid pipe delays.  The dependent instruction latencies (load to 
++   to avoid pipe delays.  The dependent instruction latencies (load to
+    compare to conditional branch) is 2 to 3 cycles.  In this loop each
+    dispatch group ends in a branch and takes 1 cycle.  Effectively
+-   the first iteration of the loop only serves to load operands and 
+-   branches based on compares are delayed until the next loop. 
++   the first iteration of the loop only serves to load operands and
++   branches based on compares are delayed until the next loop.
+ 
+    So we must precondition some registers and condition codes so that
+    we don't exit the loop early on the first iteration.  */
+-   
++
+ 	lbz	rWORD1, 0(rSTR1)
+ 	lbz	rWORD2, 0(rSTR2)
+ 	bdz-	L(b11)
+-	cmpld	cr0, rWORD1, rWORD2
++	cmpld	cr7, rWORD1, rWORD2
+ 	lbz	rWORD3, 1(rSTR1)
+ 	lbz	rWORD4, 1(rSTR2)
+ 	bdz-	L(b12)
+@@ -410,20 +609,20 @@
+ 	lbzu	rWORD5, 2(rSTR1)
+ 	lbzu	rWORD6, 2(rSTR2)
+ 	bdz-	L(b13)
+-	.align 4
++	.align	4
+ L(bLoop):
+ 	lbzu	rWORD1, 1(rSTR1)
+ 	lbzu	rWORD2, 1(rSTR2)
+-	bne-	cr0, L(bLcr0)
++	bne-	cr7, L(bLcr7)
+ 
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	bdz-	L(b3i)
+-	
++
+ 	lbzu	rWORD3, 1(rSTR1)
+ 	lbzu	rWORD4, 1(rSTR2)
+ 	bne-	cr1, L(bLcr1)
+ 
+-	cmpld	cr0, rWORD1, rWORD2
++	cmpld	cr7, rWORD1, rWORD2
+ 	bdz-	L(b2i)
+ 
+ 	lbzu	rWORD5, 1(rSTR1)
+@@ -432,31 +631,31 @@
+ 
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	bdnz+	L(bLoop)
+-	
++
+ /* We speculatively loading bytes before we have tested the previous
+    bytes.  But we must avoid overrunning the length (in the ctr) to
+-   prevent these speculative loads from causing a segfault.  In this 
++   prevent these speculative loads from causing a segfault.  In this
+    case the loop will exit early (before the all pending bytes are
+    tested.  In this case we must complete the pending operations
+    before returning.  */
+ L(b1i):
+-	bne-	cr0, L(bLcr0)
++	bne-	cr7, L(bLcr7)
+ 	bne-	cr1, L(bLcr1)
+ 	b	L(bx56)
+-	.align 4
++	.align	4
+ L(b2i):
+ 	bne-	cr6, L(bLcr6)
+-	bne-	cr0, L(bLcr0)
++	bne-	cr7, L(bLcr7)
+ 	b	L(bx34)
+-	.align 4
++	.align	4
+ L(b3i):
+ 	bne-	cr1, L(bLcr1)
+ 	bne-	cr6, L(bLcr6)
+ 	b	L(bx12)
+-	.align 4
+-L(bLcr0):
++	.align	4
++L(bLcr7):
+ 	li	rRTN, 1
+-	bgtlr	cr0
++	bgtlr	cr7
+ 	li	rRTN, -1
+ 	blr
+ L(bLcr1):
+@@ -471,116 +670,121 @@
+ 	blr
+ 
+ L(b13):
+-	bne-	cr0, L(bx12)
++	bne-	cr7, L(bx12)
+ 	bne-	cr1, L(bx34)
+ L(bx56):
+ 	sub	rRTN, rWORD5, rWORD6
+ 	blr
+ 	nop
+ L(b12):
+-	bne-	cr0, L(bx12)
+-L(bx34):	
++	bne-	cr7, L(bx12)
++L(bx34):
+ 	sub	rRTN, rWORD3, rWORD4
+ 	blr
+ L(b11):
+ L(bx12):
+ 	sub	rRTN, rWORD1, rWORD2
+ 	blr
+-	.align 4 
+-L(zeroLengthReturn):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	.align	4
+ L(zeroLength):
+ 	li	rRTN, 0
+ 	blr
+ 
+-	.align 4
++	.align	4
+ /* At this point we know the strings have different alignment and the
+-   compare length is at least 8 bytes.  rBITDIF containes the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    3 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then rStr1 is double word 
++   of r12 to 0.  If r12 == 0 then rStr1 is double word
+    aligned and can perform the DWunaligned loop.
+-  
+-   Otherwise we know that rSTR1 is not aready DW aligned yet.
++
++   Otherwise we know that rSTR1 is not already DW aligned yet.
+    So we can force the string addresses to the next lower DW
+-   boundary and special case this first DW word using shift left to
+-   ellimiate bits preceeding the first byte.  Since we want to join the
++   boundary and special case this first DW using shift left to
++   eliminate bits preceding the first byte.  Since we want to join the
+    normal (DWaligned) compare loop, starting at the second double word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first DW. This insures that the loop count is
++   versioning for the first DW. This ensures that the loop count is
+    correct and the first DW (shifted) is in the expected resister pair.  */
+-#define rSHL	r29	/* Unaligned shift left count.  */
+-#define rSHR	r28	/* Unaligned shift right count.  */
+-#define rB		r27	/* Left rotation temp for rWORD2.  */
+-#define rD		r26	/* Left rotation temp for rWORD4.  */
+-#define rF		r25	/* Left rotation temp for rWORD6.  */
+-#define rH		r24	/* Left rotation temp for rWORD8.  */
+-#define rA		r0	/* Right rotation temp for rWORD2.  */
+-#define rC		r12	/* Right rotation temp for rWORD4.  */
+-#define rE		r0	/* Right rotation temp for rWORD6.  */
+-#define rG		r12	/* Right rotation temp for rWORD8.  */
++#define rSHL		r29	/* Unaligned shift left count.  */
++#define rSHR		r28	/* Unaligned shift right count.  */
++#define rWORD8_SHIFT	r27	/* Left rotation temp for rWORD2.  */
++#define rWORD2_SHIFT	r26	/* Left rotation temp for rWORD4.  */
++#define rWORD4_SHIFT	r25	/* Left rotation temp for rWORD6.  */
++#define rWORD6_SHIFT	r24	/* Left rotation temp for rWORD8.  */
+ L(unaligned):
+-	std	r29,-24(r1)	
+-	cfi_offset(r29,-24)
++	std	rSHL, -24(r1)
++	cfi_offset(rSHL, -24)
+ 	clrldi	rSHL, rSTR2, 61
+ 	beq-	cr6, L(duzeroLength)
+-	std	r28,-32(r1)	
+-	cfi_offset(r28,-32)
++	std	rSHR, -32(r1)
++	cfi_offset(rSHR, -32)
+ 	beq	cr5, L(DWunaligned)
+-	std	r27,-40(r1)	
+-	cfi_offset(r27,-40)
+-/* Adjust the logical start of rSTR2 ro compensate for the extra bits
++	std	rWORD8_SHIFT, -40(r1)
++	cfi_offset(rWORD8_SHIFT, -40)
++/* Adjust the logical start of rSTR2 to compensate for the extra bits
+    in the 1st rSTR1 DW.  */
+-	sub	r27, rSTR2, rBITDIF
++	sub	rWORD8_SHIFT, rSTR2, r12
+ /* But do not attempt to address the DW before that DW that contains
+    the actual start of rSTR2.  */
+ 	clrrdi	rSTR2, rSTR2, 3
+-	std	r26,-48(r1)	
+-	cfi_offset(r26,-48)
+-/* Compute the leaft/right shift counts for the unalign rSTR2,
+-   compensating for the logical (DW aligned) start of rSTR1.  */ 
+-	clrldi	rSHL, r27, 61
+-	clrrdi	rSTR1, rSTR1, 3	
+-	std	r25,-56(r1)	
+-	cfi_offset(r25,-56)
++	std	rWORD2_SHIFT, -48(r1)
++	cfi_offset(rWORD2_SHIFT, -48)
++/* Compute the left/right shift counts for the unaligned rSTR2,
++   compensating for the logical (DW aligned) start of rSTR1.  */
++	clrldi	rSHL, rWORD8_SHIFT, 61
++	clrrdi	rSTR1, rSTR1, 3
++	std	rWORD4_SHIFT, -56(r1)
++	cfi_offset(rWORD4_SHIFT, -56)
+ 	sldi	rSHL, rSHL, 3
+-	cmpld	cr5, r27, rSTR2
+-	add	rN, rN, rBITDIF
+-	sldi	r11, rBITDIF, 3
+-	std	r24,-64(r1)	
+-	cfi_offset(r24,-64)
++	cmpld	cr5, rWORD8_SHIFT, rSTR2
++	add	rN, rN, r12
++	sldi	rWORD6, r12, 3
++	std	rWORD6_SHIFT, -64(r1)
++	cfi_offset(rWORD6_SHIFT, -64)
+ 	subfic	rSHR, rSHL, 64
+-	srdi	rTMP, rN, 5	/* Divide by 32 */
+-	andi.	rBITDIF, rN, 24	/* Get the DW remainder */
++	srdi	r0, rN, 5	/* Divide by 32 */
++	andi.	r12, rN, 24	/* Get the DW remainder */
+ /* We normally need to load 2 DWs to start the unaligned rSTR2, but in
+    this special case those bits may be discarded anyway.  Also we
+    must avoid loading a DW where none of the bits are part of rSTR2 as
+    this may cross a page boundary and cause a page fault.  */
+ 	li	rWORD8, 0
+ 	blt	cr5, L(dus0)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD8, 0(rSTR2)
+-	la	rSTR2, 8(rSTR2)
++	addi	rSTR2, rSTR2, 8
++#endif
+ 	sld	rWORD8, rWORD8, rSHL
+ 
+ L(dus0):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 0(rSTR1)
+ 	ld	rWORD2, 0(rSTR2)
+-	cmpldi	cr1, rBITDIF, 16
++#endif
++	cmpldi	cr1, r12, 16
+ 	cmpldi	cr7, rN, 32
+-	srd	rG, rWORD2, rSHR
++	srd	r12, rWORD2, rSHR
+ 	clrldi	rN, rN, 61
+ 	beq	L(duPs4)
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	or	rWORD8, rG, rWORD8
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	or	rWORD8, r12, rWORD8
+ 	bgt	cr1, L(duPs3)
+ 	beq	cr1, L(duPs2)
+ 
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
+ L(dusP1):
+-	sld	rB, rWORD2, rSHL
+-	sld	rWORD7, rWORD1, r11
+-	sld	rWORD8, rWORD8, r11
++	sld	rWORD8_SHIFT, rWORD2, rSHL
++	sld	rWORD7, rWORD1, rWORD6
++	sld	rWORD8, rWORD8, rWORD6
+ 	bge	cr7, L(duP1e)
+ /* At this point we exit early with the first double word compare
+    complete and remainder of 0 to 7 bytes.  See L(du14) for details on
+@@ -590,95 +794,133 @@
+ 	bne	cr5, L(duLcr5)
+ 	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD2, 8(rSTR2)
+-	srd	rA, rWORD2, rSHR
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 16 */
+-	.align 4
++	.align	4
+ L(duPs2):
+-	sld	rH, rWORD2, rSHL
+-	sld	rWORD5, rWORD1, r11
+-	sld	rWORD6, rWORD8, r11
++	sld	rWORD6_SHIFT, rWORD2, rSHL
++	sld	rWORD5, rWORD1, rWORD6
++	sld	rWORD6, rWORD8, rWORD6
+ 	b	L(duP2e)
+ /* Remainder is 24 */
+-	.align 4
++	.align	4
+ L(duPs3):
+-	sld	rF, rWORD2, rSHL
+-	sld	rWORD3, rWORD1, r11
+-	sld	rWORD4, rWORD8, r11
++	sld	rWORD4_SHIFT, rWORD2, rSHL
++	sld	rWORD3, rWORD1, rWORD6
++	sld	rWORD4, rWORD8, rWORD6
+ 	b	L(duP3e)
+ /* Count is a multiple of 32, remainder is 0 */
+-	.align 4
++	.align	4
+ L(duPs4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	or	rWORD8, rG, rWORD8
+-	sld	rD, rWORD2, rSHL
+-	sld	rWORD1, rWORD1, r11
+-	sld	rWORD2, rWORD8, r11
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	or	rWORD8, r12, rWORD8
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	sld	rWORD1, rWORD1, rWORD6
++	sld	rWORD2, rWORD8, rWORD6
+ 	b	L(duP4e)
+ 
+ /* At this point we know rSTR1 is double word aligned and the
+    compare length is at least 8 bytes.  */
+-	.align 4
++	.align	4
+ L(DWunaligned):
+-	std	r27,-40(r1)	
+-	cfi_offset(r27,-40)
++	std	rWORD8_SHIFT, -40(r1)
++	cfi_offset(rWORD8_SHIFT, -40)
+ 	clrrdi	rSTR2, rSTR2, 3
+-	std	r26,-48(r1)	
+-	cfi_offset(r26,-48)
+-	srdi	rTMP, rN, 5	/* Divide by 32 */
+-	std	r25,-56(r1)	
+-	cfi_offset(r25,-56)
+-	andi.	rBITDIF, rN, 24	/* Get the DW remainder */
+-	std	r24,-64(r1)	
+-	cfi_offset(r24,-64)
++	std	rWORD2_SHIFT, -48(r1)
++	cfi_offset(rWORD2_SHIFT, -48)
++	srdi	r0, rN, 5	/* Divide by 32 */
++	std	rWORD4_SHIFT, -56(r1)
++	cfi_offset(rWORD4_SHIFT, -56)
++	andi.	r12, rN, 24	/* Get the DW remainder */
++	std	rWORD6_SHIFT, -64(r1)
++	cfi_offset(rWORD6_SHIFT, -64)
+ 	sldi	rSHL, rSHL, 3
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD6, 0(rSTR2)
+ 	ldu	rWORD8, 8(rSTR2)
+-	cmpldi	cr1, rBITDIF, 16
++#endif
++	cmpldi	cr1, r12, 16
+ 	cmpldi	cr7, rN, 32
+ 	clrldi	rN, rN, 61
+ 	subfic	rSHR, rSHL, 64
+-	sld	rH, rWORD6, rSHL
++	sld	rWORD6_SHIFT, rWORD6, rSHL
+ 	beq	L(duP4)
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
+ 	bgt	cr1, L(duP3)
+ 	beq	cr1, L(duP2)
+-		
++
+ /* Remainder is 8 */
+-	.align 4
++	.align	4
+ L(duP1):
+-	srd	rG, rWORD8, rSHR
++	srd	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
+ 	ld	rWORD7, 0(rSTR1)
+-	sld	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++#endif
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	blt	cr7, L(duP1x)
+ L(duP1e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 8(rSTR1)
+ 	ld	rWORD2, 8(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+-	srd	rA, rWORD2, rSHR
+-	sld	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 16(rSTR1)
+ 	ld	rWORD4, 16(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
+-	srd	rC, rWORD4, rSHR
+-	sld	rF, rWORD4, rSHL
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
+ 	bne	cr5, L(duLcr5)
+-	or	rWORD4, rC, rD
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 24(rSTR1)
+ 	ld	rWORD6, 24(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+-	srd	rE, rWORD6, rSHR
+-	sld	rH, rWORD6, rSHL
+-	bne	cr0, L(duLcr0)
+-	or	rWORD6, rE, rF
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	bne	cr7, L(duLcr7)
++	or	rWORD6, r0, rWORD4_SHIFT
+ 	cmpld	cr6, rWORD5, rWORD6
+-	b	L(duLoop3)	
+-	.align 4
++	b	L(duLoop3)
++	.align	4
+ /* At this point we exit early with the first double word compare
+    complete and remainder of 0 to 7 bytes.  See L(du14) for details on
+    how we handle the remaining bytes.  */
+@@ -688,186 +930,321 @@
+ 	bne	cr5, L(duLcr5)
+ 	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD2, 8(rSTR2)
+-	srd	rA, rWORD2, rSHR
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 16 */
+-	.align 4
++	.align	4
+ L(duP2):
+-	srd	rE, rWORD8, rSHR
++	srd	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
+ 	ld	rWORD5, 0(rSTR1)
+-	or	rWORD6, rE, rH
+-	sld	rH, rWORD8, rSHL
++#endif
++	or	rWORD6, r0, rWORD6_SHIFT
++	sld	rWORD6_SHIFT, rWORD8, rSHL
+ L(duP2e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD7, 8(rSTR1)
+ 	ld	rWORD8, 8(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+-	srd	rG, rWORD8, rSHR
+-	sld	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	blt	cr7, L(duP2x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 16(rSTR1)
+ 	ld	rWORD2, 16(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+ 	bne	cr6, L(duLcr6)
+-	srd	rA, rWORD2, rSHR
+-	sld	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 24(rSTR1)
+ 	ld	rWORD4, 24(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	bne	cr5, L(duLcr5)
+-	srd	rC, rWORD4, rSHR
+-	sld	rF, rWORD4, rSHL
+-	or	rWORD4, rC, rD
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	b	L(duLoop2)
+-	.align 4
++	.align	4
+ L(duP2x):
+ 	cmpld	cr5, rWORD7, rWORD8
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 8
+ 	addi	rSTR2, rSTR2, 8
++#endif
+ 	bne	cr6, L(duLcr6)
+ 	sldi.	rN, rN, 3
+ 	bne	cr5, L(duLcr5)
+ 	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD2, 8(rSTR2)
+-	srd	rA, rWORD2, rSHR
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+-		
++
+ /* Remainder is 24 */
+-	.align 4
++	.align	4
+ L(duP3):
+-	srd	rC, rWORD8, rSHR
++	srd	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
+ 	ld	rWORD3, 0(rSTR1)
+-	sld	rF, rWORD8, rSHL
+-	or	rWORD4, rC, rH
++#endif
++	sld	rWORD4_SHIFT, rWORD8, rSHL
++	or	rWORD4, r12, rWORD6_SHIFT
+ L(duP3e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 8(rSTR1)
+ 	ld	rWORD6, 8(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+-	srd	rE, rWORD6, rSHR
+-	sld	rH, rWORD6, rSHL
+-	or	rWORD6, rE, rF
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD7, 16(rSTR1)
+ 	ld	rWORD8, 16(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	bne	cr1, L(duLcr1)
+-	srd	rG, rWORD8, rSHR
+-	sld	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	blt	cr7, L(duP3x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 24(rSTR1)
+ 	ld	rWORD2, 24(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+ 	bne	cr6, L(duLcr6)
+-	srd	rA, rWORD2, rSHR
+-	sld	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 16
+ 	addi	rSTR2, rSTR2, 16
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	b	L(duLoop1)
+-	.align 4
++	.align	4
+ L(duP3x):
++#ifndef __LITTLE_ENDIAN__
+ 	addi	rSTR1, rSTR1, 16
+ 	addi	rSTR2, rSTR2, 16
++#endif
++#if 0
++/* Huh?  We've already branched on cr1!  */
+ 	bne	cr1, L(duLcr1)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+ 	bne	cr6, L(duLcr6)
+ 	sldi.	rN, rN, 3
+ 	bne	cr5, L(duLcr5)
+ 	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD2, 8(rSTR2)
+-	srd	rA, rWORD2, rSHR
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+-	
++
+ /* Count is a multiple of 32, remainder is 0 */
+-	.align 4
++	.align	4
+ L(duP4):
+-	mtctr   rTMP	/* Power4 wants mtctr 1st in dispatch group */
+-	srd	rA, rWORD8, rSHR
++	mtctr	r0	/* Power4 wants mtctr 1st in dispatch group */
++	srd	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
+ 	ld	rWORD1, 0(rSTR1)
+-	sld	rD, rWORD8, rSHL
+-	or	rWORD2, rA, rH
++#endif
++	sld	rWORD2_SHIFT, rWORD8, rSHL
++	or	rWORD2, r0, rWORD6_SHIFT
+ L(duP4e):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 8(rSTR1)
+ 	ld	rWORD4, 8(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
+-	srd	rC, rWORD4, rSHR
+-	sld	rF, rWORD4, rSHL
+-	or	rWORD4, rC, rD
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 16(rSTR1)
+ 	ld	rWORD6, 16(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+-	bne	cr0, L(duLcr0)
+-	srd	rE, rWORD6, rSHR
+-	sld	rH, rWORD6, rSHL
+-	or	rWORD6, rE, rF
++	bne	cr7, L(duLcr7)
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ldu	rWORD7, 24(rSTR1)
+ 	ldu	rWORD8, 24(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	bne	cr1, L(duLcr1)
+-	srd	rG, rWORD8, rSHR
+-	sld	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	cmpld	cr5, rWORD7, rWORD8
+ 	bdz-	L(du24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+-	.align 4
++	.align	4
+ L(duLoop):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD1, 8(rSTR1)
+ 	ld	rWORD2, 8(rSTR2)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(duLcr6)
+-	srd	rA, rWORD2, rSHR
+-	sld	rD, rWORD2, rSHL
+-	or	rWORD2, rA, rB
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
+ L(duLoop1):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD3, 16(rSTR1)
+ 	ld	rWORD4, 16(rSTR2)
++#endif
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	bne	cr5, L(duLcr5)
+-	srd	rC, rWORD4, rSHR
+-	sld	rF, rWORD4, rSHL
+-	or	rWORD4, rC, rD
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
+ L(duLoop2):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD5, 24(rSTR1)
+ 	ld	rWORD6, 24(rSTR2)
++#endif
+ 	cmpld	cr5, rWORD7, rWORD8
+-	bne	cr0, L(duLcr0)
+-	srd	rE, rWORD6, rSHR
+-	sld	rH, rWORD6, rSHL
+-	or	rWORD6, rE, rF
++	bne	cr7, L(duLcr7)
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
+ L(duLoop3):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ldu	rWORD7, 32(rSTR1)
+ 	ldu	rWORD8, 32(rSTR2)
+-	cmpld	cr0, rWORD1, rWORD2
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	bne-	cr1, L(duLcr1)
+-	srd	rG, rWORD8, rSHR
+-	sld	rB, rWORD8, rSHL
+-	or	rWORD8, rG, rH
+-	bdnz+	L(duLoop)	
+-	
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	bdnz+	L(duLoop)
++
+ L(duL4):
++#if 0
++/* Huh?  We've already branched on cr1!  */
+ 	bne	cr1, L(duLcr1)
++#endif
+ 	cmpld	cr1, rWORD3, rWORD4
+ 	bne	cr6, L(duLcr6)
+ 	cmpld	cr6, rWORD5, rWORD6
+ 	bne	cr5, L(duLcr5)
+ 	cmpld	cr5, rWORD7, rWORD8
+ L(du44):
+-	bne	cr0, L(duLcr0)
++	bne	cr7, L(duLcr7)
+ L(du34):
+ 	bne	cr1, L(duLcr1)
+ L(du24):
+@@ -876,106 +1253,113 @@
+ 	sldi.	rN, rN, 3
+ 	bne	cr5, L(duLcr5)
+ /* At this point we have a remainder of 1 to 7 bytes to compare.  We use
+-   shift right double to elliminate bits beyond the compare length. 
+-   This allows the use of double word subtract to compute the final
+-   result.
++   shift right double to eliminate bits beyond the compare length.
+ 
+-   However it may not be safe to load rWORD2 which may be beyond the 
++   However it may not be safe to load rWORD2 which may be beyond the
+    string length. So we compare the bit length of the remainder to
+    the right shift count (rSHR). If the bit count is less than or equal
+    we do not need to load rWORD2 (all significant bits are already in
+-   rB).  */
++   rWORD8_SHIFT).  */
+ 	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA, 0
++	li	r0, 0
+ 	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
+ 	ld	rWORD2, 8(rSTR2)
+-	srd	rA, rWORD2, rSHR
+-	.align 4
++#endif
++	srd	r0, rWORD2, rSHR
++	.align	4
+ L(dutrim):
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++#else
+ 	ld	rWORD1, 8(rSTR1)
+-	ld	rWORD8,-8(r1)
+-	subfic	rN, rN, 64	/* Shift count is 64 - (rN * 8).  */ 
+-	or	rWORD2, rA, rB
+-	ld	rWORD7,-16(r1)	
+-	ld	r29,-24(r1)
++#endif
++	ld	rWORD8, -8(r1)
++	subfic	rN, rN, 64	/* Shift count is 64 - (rN * 8).  */
++	or	rWORD2, r0, rWORD8_SHIFT
++	ld	rWORD7, -16(r1)
++	ld	rSHL, -24(r1)
+ 	srd	rWORD1, rWORD1, rN
+ 	srd	rWORD2, rWORD2, rN
+-	ld	r28,-32(r1)	
+-	ld	r27,-40(r1)
++	ld	rSHR, -32(r1)
++	ld	rWORD8_SHIFT, -40(r1)
+ 	li	rRTN, 0
+-	cmpld	cr0, rWORD1, rWORD2	
+-	ld	r26,-48(r1)
+-	ld	r25,-56(r1)
+- 	beq	cr0, L(dureturn24)
+-	li	rRTN, 1
+-	ld	r24,-64(r1)
+-	bgtlr	cr0
+-	li	rRTN, -1
+-	blr
+-	.align 4
+-L(duLcr0):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN, 1
+-	bgt	cr0, L(dureturn29)	
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
++	cmpld	cr7, rWORD1, rWORD2
++	ld	rWORD2_SHIFT, -48(r1)
++	ld	rWORD4_SHIFT, -56(r1)
++	beq	cr7, L(dureturn24)
++	li	rRTN, 1
++	ld	rWORD6_SHIFT, -64(r1)
++	bgtlr	cr7
++	li	rRTN, -1
++	blr
++	.align	4
++L(duLcr7):
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	li	rRTN, 1
++	bgt	cr7, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+-	.align 4
++	.align	4
+ L(duLcr1):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ 	li	rRTN, 1
+-	bgt	cr1, L(dureturn29)	
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
++	bgt	cr1, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+-	.align 4
++	.align	4
+ L(duLcr6):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ 	li	rRTN, 1
+-	bgt	cr6, L(dureturn29)	
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
++	bgt	cr6, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+-	.align 4
++	.align	4
+ L(duLcr5):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ 	li	rRTN, 1
+-	bgt	cr5, L(dureturn29)	
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
++	bgt	cr5, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
+ 	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	3
+ L(duZeroReturn):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	.align	4
+ L(dureturn):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-L(dureturn29):	
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
+-L(dureturn27):	
+-	ld	r27,-40(r1)
+-L(dureturn26):	
+-	ld	r26,-48(r1)
+-L(dureturn25):	
+-	ld	r25,-56(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dureturn29):
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
++L(dureturn27):
++	ld	rWORD8_SHIFT, -40(r1)
++L(dureturn26):
++	ld	rWORD2_SHIFT, -48(r1)
++L(dureturn25):
++	ld	rWORD4_SHIFT, -56(r1)
+ L(dureturn24):
+-	ld	r24,-64(r1)
++	ld	rWORD6_SHIFT, -64(r1)
+ 	blr
+ L(duzeroLength):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+-END (BP_SYM (memcmp))
++END (memcmp)
+ libc_hidden_builtin_def (memcmp)
+ weak_alias (memcmp, bcmp)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcmp.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcmp.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcmp.S	2014-05-28 19:22:37.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcmp.S	2014-05-29 09:35:08.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memcmp implementation for POWER7/PowerPC64.
+-   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2010-2014 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
+@@ -17,379 +17,576 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* int [r3] memcmp (const char *s1 [r3],
+ 		    const char *s2 [r4],
+ 		    size_t size [r5])  */
+ 
+ 	.machine power7
+-EALIGN (BP_SYM(memcmp),4,0)
++EALIGN (memcmp, 4, 0)
+ 	CALL_MCOUNT 3
+ 
+-#define rTMP	r0
+ #define rRTN	r3
+ #define rSTR1	r3	/* first string arg */
+ #define rSTR2	r4	/* second string arg */
+ #define rN	r5	/* max string length */
+-/* Note:  The Bounded pointer support in this code is broken.  This code
+-   was inherited from PPC32 and that support was never completed.
+-   Current PPC gcc does not support -fbounds-check or -fbounded-pointers.  */
+ #define rWORD1	r6	/* current word in s1 */
+ #define rWORD2	r7	/* current word in s2 */
+ #define rWORD3	r8	/* next word in s1 */
+ #define rWORD4	r9	/* next word in s2 */
+ #define rWORD5	r10	/* next word in s1 */
+ #define rWORD6	r11	/* next word in s2 */
+-#define rBITDIF	r12	/* bits that differ in s1 & s2 words */
+ #define rWORD7	r30	/* next word in s1 */
+ #define rWORD8	r31	/* next word in s2 */
+ 
+-	xor	rTMP,rSTR2,rSTR1
+-	cmpldi	cr6,rN,0
+-	cmpldi	cr1,rN,12
+-	clrldi.	rTMP,rTMP,61
+-	clrldi	rBITDIF,rSTR1,61
+-	cmpldi	cr5,rBITDIF,0
+-	beq-	cr6,L(zeroLength)
+-	dcbt	0,rSTR1
+-	dcbt	0,rSTR2
+-/* If less than 8 bytes or not aligned, use the unalligned
++	xor	r0, rSTR2, rSTR1
++	cmpldi	cr6, rN, 0
++	cmpldi	cr1, rN, 12
++	clrldi.	r0, r0, 61
++	clrldi	r12, rSTR1, 61
++	cmpldi	cr5, r12, 0
++	beq-	cr6, L(zeroLength)
++	dcbt	0, rSTR1
++	dcbt	0, rSTR2
++/* If less than 8 bytes or not aligned, use the unaligned
+    byte loop.  */
+-	blt	cr1,L(bytealigned)
+-	std	rWORD8,-8(r1)
+-	cfi_offset(rWORD8,-8)
+-	std	rWORD7,-16(r1)
+-	cfi_offset(rWORD7,-16)
++	blt	cr1, L(bytealigned)
++	std	rWORD8, -8(r1)
++	cfi_offset(rWORD8, -8)
++	std	rWORD7, -16(r1)
++	cfi_offset(rWORD7, -16)
+ 	bne	L(unaligned)
+ /* At this point we know both strings have the same alignment and the
+-   compare length is at least 8 bytes.  rBITDIF containes the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    3 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then we are already double word
+-   aligned and can perform the DWaligned loop.
++   of r12 to 0.  If r12 == 0 then we are already double word
++   aligned and can perform the DW aligned loop.
+ 
+    Otherwise we know the two strings have the same alignment (but not
+-   yet DW).  So we can force the string addresses to the next lower DW
+-   boundary and special case this first DW word using shift left to
+-   ellimiate bits preceeding the first byte.  Since we want to join the
+-   normal (DWaligned) compare loop, starting at the second double word,
++   yet DW).  So we force the string addresses to the next lower DW
++   boundary and special case this first DW using shift left to
++   eliminate bits preceding the first byte.  Since we want to join the
++   normal (DW aligned) compare loop, starting at the second double word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first DW. This insures that the loop count is
+-   correct and the first DW (shifted) is in the expected resister pair.  */
++   versioning for the first DW. This ensures that the loop count is
++   correct and the first DW (shifted) is in the expected register pair.  */
+ 	.align	4
+ L(samealignment):
+-	clrrdi	rSTR1,rSTR1,3
+-	clrrdi	rSTR2,rSTR2,3
+-	beq	cr5,L(DWaligned)
+-	add	rN,rN,rBITDIF
+-	sldi	r11,rBITDIF,3
+-	srdi	rTMP,rN,5	/* Divide by 32 */
+-	andi.	rBITDIF,rN,24	/* Get the DW remainder */
+-	ld	rWORD1,0(rSTR1)
+-	ld	rWORD2,0(rSTR2)
+-	cmpldi	cr1,rBITDIF,16
+-	cmpldi	cr7,rN,32
+-	clrldi	rN,rN,61
++	clrrdi	rSTR1, rSTR1, 3
++	clrrdi	rSTR2, rSTR2, 3
++	beq	cr5, L(DWaligned)
++	add	rN, rN, r12
++	sldi	rWORD6, r12, 3
++	srdi	r0, rN, 5	/* Divide by 32 */
++	andi.	r12, rN, 24	/* Get the DW remainder */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 0(rSTR1)
++	ld	rWORD2, 0(rSTR2)
++#endif
++	cmpldi	cr1, r12, 16
++	cmpldi	cr7, rN, 32
++	clrldi	rN, rN, 61
+ 	beq	L(dPs4)
+-	mtctr	rTMP
+-	bgt	cr1,L(dPs3)
+-	beq	cr1,L(dPs2)
++	mtctr	r0
++	bgt	cr1, L(dPs3)
++	beq	cr1, L(dPs2)
+ 
+ /* Remainder is 8 */
+ 	.align	3
+ L(dsP1):
+-	sld	rWORD5,rWORD1,r11
+-	sld	rWORD6,rWORD2,r11
+-	cmpld	cr5,rWORD5,rWORD6
+-	blt	cr7,L(dP1x)
++	sld	rWORD5, rWORD1, rWORD6
++	sld	rWORD6, rWORD2, rWORD6
++	cmpld	cr5, rWORD5, rWORD6
++	blt	cr7, L(dP1x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD2,8(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 8(rSTR1)
++	ld	rWORD2, 8(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	b	L(dP1e)
+ /* Remainder is 16 */
+ 	.align	4
+ L(dPs2):
+-	sld	rWORD5,rWORD1,r11
+-	sld	rWORD6,rWORD2,r11
+-	cmpld	cr6,rWORD5,rWORD6
+-	blt	cr7,L(dP2x)
++	sld	rWORD5, rWORD1, rWORD6
++	sld	rWORD6, rWORD2, rWORD6
++	cmpld	cr6, rWORD5, rWORD6
++	blt	cr7, L(dP2x)
+ /* Do something useful in this cycle since we have to branch anyway.  */
+-	ld	rWORD7,8(rSTR1)
+-	ld	rWORD8,8(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD7, 8(rSTR1)
++	ld	rWORD8, 8(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
+ 	b	L(dP2e)
+ /* Remainder is 24 */
+ 	.align	4
+ L(dPs3):
+-	sld	rWORD3,rWORD1,r11
+-	sld	rWORD4,rWORD2,r11
+-	cmpld	cr1,rWORD3,rWORD4
++	sld	rWORD3, rWORD1, rWORD6
++	sld	rWORD4, rWORD2, rWORD6
++	cmpld	cr1, rWORD3, rWORD4
+ 	b	L(dP3e)
+ /* Count is a multiple of 32, remainder is 0 */
+ 	.align	4
+ L(dPs4):
+-	mtctr	rTMP
+-	sld	rWORD1,rWORD1,r11
+-	sld	rWORD2,rWORD2,r11
+-	cmpld	cr0,rWORD1,rWORD2
++	mtctr	r0
++	sld	rWORD1, rWORD1, rWORD6
++	sld	rWORD2, rWORD2, rWORD6
++	cmpld	cr7, rWORD1, rWORD2
+ 	b	L(dP4e)
+ 
+ /* At this point we know both strings are double word aligned and the
+    compare length is at least 8 bytes.  */
+ 	.align	4
+ L(DWaligned):
+-	andi.	rBITDIF,rN,24	/* Get the DW remainder */
+-	srdi	rTMP,rN,5	/* Divide by 32 */
+-	cmpldi	cr1,rBITDIF,16
+-	cmpldi	cr7,rN,32
+-	clrldi	rN,rN,61
++	andi.	r12, rN, 24	/* Get the DW remainder */
++	srdi	r0, rN, 5	/* Divide by 32 */
++	cmpldi	cr1, r12, 16
++	cmpldi	cr7, rN, 32
++	clrldi	rN, rN, 61
+ 	beq	L(dP4)
+-	bgt	cr1,L(dP3)
+-	beq	cr1,L(dP2)
++	bgt	cr1, L(dP3)
++	beq	cr1, L(dP2)
+ 
+ /* Remainder is 8 */
+ 	.align	4
+ L(dP1):
+-	mtctr	rTMP
++	mtctr	r0
+ /* Normally we'd use rWORD7/rWORD8 here, but since we might exit early
+-   (8-15 byte compare), we want to use only volitile registers.  This
+-   means we can avoid restoring non-volitile registers since we did not
++   (8-15 byte compare), we want to use only volatile registers.  This
++   means we can avoid restoring non-volatile registers since we did not
+    change any on the early exit path.  The key here is the non-early
+    exit path only cares about the condition code (cr5), not about which
+    register pair was used.  */
+-	ld	rWORD5,0(rSTR1)
+-	ld	rWORD6,0(rSTR2)
+-	cmpld	cr5,rWORD5,rWORD6
+-	blt	cr7,L(dP1x)
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD2,8(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 0(rSTR1)
++	ld	rWORD6, 0(rSTR2)
++#endif
++	cmpld	cr5, rWORD5, rWORD6
++	blt	cr7, L(dP1x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 8(rSTR1)
++	ld	rWORD2, 8(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ L(dP1e):
+-	ld	rWORD3,16(rSTR1)
+-	ld	rWORD4,16(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	ld	rWORD5,24(rSTR1)
+-	ld	rWORD6,24(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr5,L(dLcr5)
+-	bne	cr0,L(dLcr0)
+-
+-	ldu	rWORD7,32(rSTR1)
+-	ldu	rWORD8,32(rSTR2)
+-	bne	cr1,L(dLcr1)
+-	cmpld	cr5,rWORD7,rWORD8
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 16(rSTR1)
++	ld	rWORD4, 16(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 24(rSTR1)
++	ld	rWORD6, 24(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr5, L(dLcr5x)
++	bne	cr7, L(dLcr7x)
++
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ldu	rWORD7, 32(rSTR1)
++	ldu	rWORD8, 32(rSTR2)
++#endif
++	bne	cr1, L(dLcr1)
++	cmpld	cr5, rWORD7, rWORD8
+ 	bdnz	L(dLoop)
+-	bne	cr6,L(dLcr6)
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	bne	cr6, L(dLcr6)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ 	.align	3
+ L(dP1x):
+-	sldi.	r12,rN,3
+-	bne	cr5,L(dLcr5)
+-	subfic	rN,r12,64	/* Shift count is 64 - (rN * 8).  */
++	sldi.	r12, rN, 3
++	bne	cr5, L(dLcr5x)
++	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+ 	bne	L(d00)
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ /* Remainder is 16 */
+ 	.align	4
+ L(dP2):
+-	mtctr	rTMP
+-	ld	rWORD5,0(rSTR1)
+-	ld	rWORD6,0(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	blt	cr7,L(dP2x)
+-	ld	rWORD7,8(rSTR1)
+-	ld	rWORD8,8(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
++	mtctr	r0
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 0(rSTR1)
++	ld	rWORD6, 0(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	blt	cr7, L(dP2x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD7, 8(rSTR1)
++	ld	rWORD8, 8(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
+ L(dP2e):
+-	ld	rWORD1,16(rSTR1)
+-	ld	rWORD2,16(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
+-	ld	rWORD3,24(rSTR1)
+-	ld	rWORD4,24(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	bne	cr6,L(dLcr6)
+-	bne	cr5,L(dLcr5)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 16(rSTR1)
++	ld	rWORD2, 16(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 24(rSTR1)
++	ld	rWORD4, 24(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	bne	cr6, L(dLcr6)
++	bne	cr5, L(dLcr5)
+ 	b	L(dLoop2)
+ /* Again we are on a early exit path (16-23 byte compare), we want to
+-   only use volitile registers and avoid restoring non-volitile
++   only use volatile registers and avoid restoring non-volatile
+    registers.  */
+ 	.align	4
+ L(dP2x):
+-	ld	rWORD3,8(rSTR1)
+-	ld	rWORD4,8(rSTR2)
+-	cmpld	cr5,rWORD3,rWORD4
+-	sldi.	r12,rN,3
+-	bne	cr6,L(dLcr6)
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	bne	cr5,L(dLcr5)
+-	subfic	rN,r12,64	/* Shift count is 64 - (rN * 8).  */
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 8(rSTR1)
++	ld	rWORD4, 8(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	sldi.	r12, rN, 3
++	bne	cr6, L(dLcr6x)
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	bne	cr1, L(dLcr1x)
++	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+ 	bne	L(d00)
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ /* Remainder is 24 */
+ 	.align	4
+ L(dP3):
+-	mtctr	rTMP
+-	ld	rWORD3,0(rSTR1)
+-	ld	rWORD4,0(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
++	mtctr	r0
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 0(rSTR1)
++	ld	rWORD4, 0(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
+ L(dP3e):
+-	ld	rWORD5,8(rSTR1)
+-	ld	rWORD6,8(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	blt	cr7,L(dP3x)
+-	ld	rWORD7,16(rSTR1)
+-	ld	rWORD8,16(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	ld	rWORD1,24(rSTR1)
+-	ld	rWORD2,24(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
+-	addi	rSTR1,rSTR1,16
+-	addi	rSTR2,rSTR2,16
+-	bne	cr1,L(dLcr1)
+-	bne	cr6,L(dLcr6)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 8(rSTR1)
++	ld	rWORD6, 8(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	blt	cr7, L(dP3x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD7, 16(rSTR1)
++	ld	rWORD8, 16(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 24(rSTR1)
++	ld	rWORD2, 24(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 16
++	addi	rSTR2, rSTR2, 16
++#endif
++	bne	cr1, L(dLcr1)
++	bne	cr6, L(dLcr6)
+ 	b	L(dLoop1)
+ /* Again we are on a early exit path (24-31 byte compare), we want to
+-   only use volitile registers and avoid restoring non-volitile
++   only use volatile registers and avoid restoring non-volatile
+    registers.  */
+ 	.align	4
+ L(dP3x):
+-	ld	rWORD1,16(rSTR1)
+-	ld	rWORD2,16(rSTR2)
+-	cmpld	cr5,rWORD1,rWORD2
+-	sldi.	r12,rN,3
+-	bne	cr1,L(dLcr1)
+-	addi	rSTR1,rSTR1,16
+-	addi	rSTR2,rSTR2,16
+-	bne	cr6,L(dLcr6)
+-	subfic	rN,r12,64	/* Shift count is 64 - (rN * 8).  */
+-	bne	cr5,L(dLcr5)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 16(rSTR1)
++	ld	rWORD2, 16(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	sldi.	r12, rN, 3
++	bne	cr1, L(dLcr1x)
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 16
++	addi	rSTR2, rSTR2, 16
++#endif
++	bne	cr6, L(dLcr6x)
++	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
++	bne	cr7, L(dLcr7x)
+ 	bne	L(d00)
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ /* Count is a multiple of 32, remainder is 0 */
+ 	.align	4
+ L(dP4):
+-	mtctr	rTMP
+-	ld	rWORD1,0(rSTR1)
+-	ld	rWORD2,0(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
++	mtctr	r0
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 0(rSTR1)
++	ld	rWORD2, 0(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ L(dP4e):
+-	ld	rWORD3,8(rSTR1)
+-	ld	rWORD4,8(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	ld	rWORD5,16(rSTR1)
+-	ld	rWORD6,16(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	ldu	rWORD7,24(rSTR1)
+-	ldu	rWORD8,24(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	bne	cr0,L(dLcr0)
+-	bne	cr1,L(dLcr1)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 8(rSTR1)
++	ld	rWORD4, 8(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 16(rSTR1)
++	ld	rWORD6, 16(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ldu	rWORD7, 24(rSTR1)
++	ldu	rWORD8, 24(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	bne	cr7, L(dLcr7)
++	bne	cr1, L(dLcr1)
+ 	bdz-	L(d24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+ 	.align	4
+ L(dLoop):
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD2,8(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	bne	cr6,L(dLcr6)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 8(rSTR1)
++	ld	rWORD2, 8(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	bne	cr6, L(dLcr6)
+ L(dLoop1):
+-	ld	rWORD3,16(rSTR1)
+-	ld	rWORD4,16(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr5,L(dLcr5)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 16(rSTR1)
++	ld	rWORD4, 16(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr5, L(dLcr5)
+ L(dLoop2):
+-	ld	rWORD5,24(rSTR1)
+-	ld	rWORD6,24(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	bne	cr0,L(dLcr0)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 24(rSTR1)
++	ld	rWORD6, 24(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	bne	cr7, L(dLcr7)
+ L(dLoop3):
+-	ldu	rWORD7,32(rSTR1)
+-	ldu	rWORD8,32(rSTR2)
+-	bne	cr1,L(dLcr1)
+-	cmpld	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ldu	rWORD7, 32(rSTR1)
++	ldu	rWORD8, 32(rSTR2)
++#endif
++	bne	cr1, L(dLcr1)
++	cmpld	cr7, rWORD1, rWORD2
+ 	bdnz	L(dLoop)
+ 
+ L(dL4):
+-	cmpld	cr1,rWORD3,rWORD4
+-	bne	cr6,L(dLcr6)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr5,L(dLcr5)
+-	cmpld	cr5,rWORD7,rWORD8
++	cmpld	cr1, rWORD3, rWORD4
++	bne	cr6, L(dLcr6)
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr5, L(dLcr5)
++	cmpld	cr5, rWORD7, rWORD8
+ L(d44):
+-	bne	cr0,L(dLcr0)
++	bne	cr7, L(dLcr7)
+ L(d34):
+-	bne	cr1,L(dLcr1)
++	bne	cr1, L(dLcr1)
+ L(d24):
+-	bne	cr6,L(dLcr6)
++	bne	cr6, L(dLcr6)
+ L(d14):
+-	sldi.	r12,rN,3
+-	bne	cr5,L(dLcr5)
++	sldi.	r12, rN, 3
++	bne	cr5, L(dLcr5)
+ L(d04):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	subfic	rN,r12,64	/* Shift count is 64 - (rN * 8).  */
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	subfic	rN, r12, 64	/* Shift count is 64 - (rN * 8).  */
+ 	beq	L(zeroLength)
+ /* At this point we have a remainder of 1 to 7 bytes to compare.  Since
+    we are aligned it is safe to load the whole double word, and use
+-   shift right double to elliminate bits beyond the compare length.  */
++   shift right double to eliminate bits beyond the compare length.  */
+ L(d00):
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD2,8(rSTR2)
+-	srd	rWORD1,rWORD1,rN
+-	srd	rWORD2,rWORD2,rN
+-	cmpld	cr5,rWORD1,rWORD2
+-	bne	cr5,L(dLcr5x)
+-	li	rRTN,0
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 8(rSTR1)
++	ld	rWORD2, 8(rSTR2)
++#endif
++	srd	rWORD1, rWORD1, rN
++	srd	rWORD2, rWORD2, rN
++	cmpld	cr7, rWORD1, rWORD2
++	bne	cr7, L(dLcr7x)
++	li	rRTN, 0
+ 	blr
++
+ 	.align	4
+-L(dLcr0):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
+-	bgtlr	cr0
+-	li	rRTN,-1
++L(dLcr7):
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dLcr7x):
++	li	rRTN, 1
++	bgtlr	cr7
++	li	rRTN, -1
+ 	blr
+ 	.align	4
+ L(dLcr1):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dLcr1x):
++	li	rRTN, 1
+ 	bgtlr	cr1
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 	.align	4
+ L(dLcr6):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++L(dLcr6x):
++	li	rRTN, 1
+ 	bgtlr	cr6
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 	.align	4
+ L(dLcr5):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ L(dLcr5x):
+-	li	rRTN,1
++	li	rRTN, 1
+ 	bgtlr	cr5
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 
+ 	.align	4
+ L(bytealigned):
+ 	mtctr	rN
+-	beq	cr6,L(zeroLength)
++#if 0
++/* Huh?  We've already branched on cr6!  */
++	beq	cr6, L(zeroLength)
++#endif
+ 
+ /* We need to prime this loop.  This loop is swing modulo scheduled
+    to avoid pipe delays.  The dependent instruction latencies (load to
+@@ -401,38 +598,38 @@
+    So we must precondition some registers and condition codes so that
+    we don't exit the loop early on the first iteration.  */
+ 
+-	lbz	rWORD1,0(rSTR1)
+-	lbz	rWORD2,0(rSTR2)
++	lbz	rWORD1, 0(rSTR1)
++	lbz	rWORD2, 0(rSTR2)
+ 	bdz	L(b11)
+-	cmpld	cr0,rWORD1,rWORD2
+-	lbz	rWORD3,1(rSTR1)
+-	lbz	rWORD4,1(rSTR2)
++	cmpld	cr7, rWORD1, rWORD2
++	lbz	rWORD3, 1(rSTR1)
++	lbz	rWORD4, 1(rSTR2)
+ 	bdz	L(b12)
+-	cmpld	cr1,rWORD3,rWORD4
+-	lbzu	rWORD5,2(rSTR1)
+-	lbzu	rWORD6,2(rSTR2)
++	cmpld	cr1, rWORD3, rWORD4
++	lbzu	rWORD5, 2(rSTR1)
++	lbzu	rWORD6, 2(rSTR2)
+ 	bdz	L(b13)
+ 	.align	4
+ L(bLoop):
+-	lbzu	rWORD1,1(rSTR1)
+-	lbzu	rWORD2,1(rSTR2)
+-	bne	cr0,L(bLcr0)
++	lbzu	rWORD1, 1(rSTR1)
++	lbzu	rWORD2, 1(rSTR2)
++	bne	cr7, L(bLcr7)
+ 
+-	cmpld	cr6,rWORD5,rWORD6
++	cmpld	cr6, rWORD5, rWORD6
+ 	bdz	L(b3i)
+ 
+-	lbzu	rWORD3,1(rSTR1)
+-	lbzu	rWORD4,1(rSTR2)
+-	bne	cr1,L(bLcr1)
++	lbzu	rWORD3, 1(rSTR1)
++	lbzu	rWORD4, 1(rSTR2)
++	bne	cr1, L(bLcr1)
+ 
+-	cmpld	cr0,rWORD1,rWORD2
++	cmpld	cr7, rWORD1, rWORD2
+ 	bdz	L(b2i)
+ 
+-	lbzu	rWORD5,1(rSTR1)
+-	lbzu	rWORD6,1(rSTR2)
+-	bne	cr6,L(bLcr6)
++	lbzu	rWORD5, 1(rSTR1)
++	lbzu	rWORD6, 1(rSTR2)
++	bne	cr6, L(bLcr6)
+ 
+-	cmpld	cr1,rWORD3,rWORD4
++	cmpld	cr1, rWORD3, rWORD4
+ 	bdnz	L(bLoop)
+ 
+ /* We speculatively loading bytes before we have tested the previous
+@@ -442,542 +639,727 @@
+    tested.  In this case we must complete the pending operations
+    before returning.  */
+ L(b1i):
+-	bne	cr0,L(bLcr0)
+-	bne	cr1,L(bLcr1)
++	bne	cr7, L(bLcr7)
++	bne	cr1, L(bLcr1)
+ 	b	L(bx56)
+ 	.align	4
+ L(b2i):
+-	bne	cr6,L(bLcr6)
+-	bne	cr0,L(bLcr0)
++	bne	cr6, L(bLcr6)
++	bne	cr7, L(bLcr7)
+ 	b	L(bx34)
+ 	.align	4
+ L(b3i):
+-	bne	cr1,L(bLcr1)
+-	bne	cr6,L(bLcr6)
++	bne	cr1, L(bLcr1)
++	bne	cr6, L(bLcr6)
+ 	b	L(bx12)
+ 	.align	4
+-L(bLcr0):
+-	li	rRTN,1
+-	bgtlr	cr0
+-	li	rRTN,-1
++L(bLcr7):
++	li	rRTN, 1
++	bgtlr	cr7
++	li	rRTN, -1
+ 	blr
+ L(bLcr1):
+-	li	rRTN,1
++	li	rRTN, 1
+ 	bgtlr	cr1
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ L(bLcr6):
+-	li	rRTN,1
++	li	rRTN, 1
+ 	bgtlr	cr6
+-	li	rRTN,-1
++	li	rRTN, -1
+ 	blr
+ 
+ L(b13):
+-	bne	cr0,L(bx12)
+-	bne	cr1,L(bx34)
++	bne	cr7, L(bx12)
++	bne	cr1, L(bx34)
+ L(bx56):
+-	sub	rRTN,rWORD5,rWORD6
++	sub	rRTN, rWORD5, rWORD6
+ 	blr
+ 	nop
+ L(b12):
+-	bne	cr0,L(bx12)
++	bne	cr7, L(bx12)
+ L(bx34):
+-	sub	rRTN,rWORD3,rWORD4
++	sub	rRTN, rWORD3, rWORD4
+ 	blr
+ L(b11):
+ L(bx12):
+-	sub	rRTN,rWORD1,rWORD2
++	sub	rRTN, rWORD1, rWORD2
+ 	blr
+ 	.align	4
+-L(zeroLengthReturn):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+ L(zeroLength):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+ 	.align	4
+ /* At this point we know the strings have different alignment and the
+-   compare length is at least 8 bytes.  rBITDIF containes the low order
++   compare length is at least 8 bytes.  r12 contains the low order
+    3 bits of rSTR1 and cr5 contains the result of the logical compare
+-   of rBITDIF to 0.  If rBITDIF == 0 then rStr1 is double word
++   of r12 to 0.  If r12 == 0 then rStr1 is double word
+    aligned and can perform the DWunaligned loop.
+ 
+-   Otherwise we know that rSTR1 is not aready DW aligned yet.
++   Otherwise we know that rSTR1 is not already DW aligned yet.
+    So we can force the string addresses to the next lower DW
+-   boundary and special case this first DW word using shift left to
+-   ellimiate bits preceeding the first byte.  Since we want to join the
++   boundary and special case this first DW using shift left to
++   eliminate bits preceding the first byte.  Since we want to join the
+    normal (DWaligned) compare loop, starting at the second double word,
+    we need to adjust the length (rN) and special case the loop
+-   versioning for the first DW. This insures that the loop count is
++   versioning for the first DW. This ensures that the loop count is
+    correct and the first DW (shifted) is in the expected resister pair.  */
+-#define rSHL	r29	/* Unaligned shift left count.  */
+-#define rSHR	r28	/* Unaligned shift right count.  */
+-#define rB		r27	/* Left rotation temp for rWORD2.  */
+-#define rD		r26	/* Left rotation temp for rWORD4.  */
+-#define rF		r25	/* Left rotation temp for rWORD6.  */
+-#define rH		r24	/* Left rotation temp for rWORD8.  */
+-#define rA		r0	/* Right rotation temp for rWORD2.  */
+-#define rC		r12	/* Right rotation temp for rWORD4.  */
+-#define rE		r0	/* Right rotation temp for rWORD6.  */
+-#define rG		r12	/* Right rotation temp for rWORD8.  */
++#define rSHL		r29	/* Unaligned shift left count.  */
++#define rSHR		r28	/* Unaligned shift right count.  */
++#define rWORD8_SHIFT	r27	/* Left rotation temp for rWORD2.  */
++#define rWORD2_SHIFT	r26	/* Left rotation temp for rWORD4.  */
++#define rWORD4_SHIFT	r25	/* Left rotation temp for rWORD6.  */
++#define rWORD6_SHIFT	r24	/* Left rotation temp for rWORD8.  */
+ L(unaligned):
+-	std	r29,-24(r1)
+-	cfi_offset(r29,-24)
+-	clrldi	rSHL,rSTR2,61
+-	beq	cr6,L(duzeroLength)
+-	std	r28,-32(r1)
+-	cfi_offset(r28,-32)
+-	beq	cr5,L(DWunaligned)
+-	std	r27,-40(r1)
+-	cfi_offset(r27,-40)
+-/* Adjust the logical start of rSTR2 ro compensate for the extra bits
++	std	rSHL, -24(r1)
++	cfi_offset(rSHL, -24)
++	clrldi	rSHL, rSTR2, 61
++	beq	cr6, L(duzeroLength)
++	std	rSHR, -32(r1)
++	cfi_offset(rSHR, -32)
++	beq	cr5, L(DWunaligned)
++	std	rWORD8_SHIFT, -40(r1)
++	cfi_offset(rWORD8_SHIFT, -40)
++/* Adjust the logical start of rSTR2 to compensate for the extra bits
+    in the 1st rSTR1 DW.  */
+-	sub	r27,rSTR2,rBITDIF
++	sub	rWORD8_SHIFT, rSTR2, r12
+ /* But do not attempt to address the DW before that DW that contains
+    the actual start of rSTR2.  */
+-	clrrdi	rSTR2,rSTR2,3
+-	std	r26,-48(r1)
+-	cfi_offset(r26,-48)
+-/* Compute the leaft/right shift counts for the unalign rSTR2,
++	clrrdi	rSTR2, rSTR2, 3
++	std	rWORD2_SHIFT, -48(r1)
++	cfi_offset(rWORD2_SHIFT, -48)
++/* Compute the left/right shift counts for the unaligned rSTR2,
+    compensating for the logical (DW aligned) start of rSTR1.  */
+-	clrldi	rSHL,r27,61
+-	clrrdi	rSTR1,rSTR1,3
+-	std	r25,-56(r1)
+-	cfi_offset(r25,-56)
+-	sldi	rSHL,rSHL,3
+-	cmpld	cr5,r27,rSTR2
+-	add	rN,rN,rBITDIF
+-	sldi	r11,rBITDIF,3
+-	std	r24,-64(r1)
+-	cfi_offset(r24,-64)
+-	subfic	rSHR,rSHL,64
+-	srdi	rTMP,rN,5	/* Divide by 32 */
+-	andi.	rBITDIF,rN,24	/* Get the DW remainder */
++	clrldi	rSHL, rWORD8_SHIFT, 61
++	clrrdi	rSTR1, rSTR1, 3
++	std	rWORD4_SHIFT, -56(r1)
++	cfi_offset(rWORD4_SHIFT, -56)
++	sldi	rSHL, rSHL, 3
++	cmpld	cr5, rWORD8_SHIFT, rSTR2
++	add	rN, rN, r12
++	sldi	rWORD6, r12, 3
++	std	rWORD6_SHIFT, -64(r1)
++	cfi_offset(rWORD6_SHIFT, -64)
++	subfic	rSHR, rSHL, 64
++	srdi	r0, rN, 5	/* Divide by 32 */
++	andi.	r12, rN, 24	/* Get the DW remainder */
+ /* We normally need to load 2 DWs to start the unaligned rSTR2, but in
+    this special case those bits may be discarded anyway.  Also we
+    must avoid loading a DW where none of the bits are part of rSTR2 as
+    this may cross a page boundary and cause a page fault.  */
+-	li	rWORD8,0
+-	blt	cr5,L(dus0)
+-	ld	rWORD8,0(rSTR2)
+-	la	rSTR2,8(rSTR2)
+-	sld	rWORD8,rWORD8,rSHL
++	li	rWORD8, 0
++	blt	cr5, L(dus0)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD8, 0(rSTR2)
++	addi	rSTR2, rSTR2, 8
++#endif
++	sld	rWORD8, rWORD8, rSHL
+ 
+ L(dus0):
+-	ld	rWORD1,0(rSTR1)
+-	ld	rWORD2,0(rSTR2)
+-	cmpldi	cr1,rBITDIF,16
+-	cmpldi	cr7,rN,32
+-	srd	rG,rWORD2,rSHR
+-	clrldi	rN,rN,61
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 0(rSTR1)
++	ld	rWORD2, 0(rSTR2)
++#endif
++	cmpldi	cr1, r12, 16
++	cmpldi	cr7, rN, 32
++	srd	r12, rWORD2, rSHR
++	clrldi	rN, rN, 61
+ 	beq	L(duPs4)
+-	mtctr	rTMP
+-	or	rWORD8,rG,rWORD8
+-	bgt	cr1,L(duPs3)
+-	beq	cr1,L(duPs2)
++	mtctr	r0
++	or	rWORD8, r12, rWORD8
++	bgt	cr1, L(duPs3)
++	beq	cr1, L(duPs2)
+ 
+ /* Remainder is 8 */
+ 	.align	4
+ L(dusP1):
+-	sld	rB,rWORD2,rSHL
+-	sld	rWORD7,rWORD1,r11
+-	sld	rWORD8,rWORD8,r11
+-	bge	cr7,L(duP1e)
++	sld	rWORD8_SHIFT, rWORD2, rSHL
++	sld	rWORD7, rWORD1, rWORD6
++	sld	rWORD8, rWORD8, rWORD6
++	bge	cr7, L(duP1e)
+ /* At this point we exit early with the first double word compare
+    complete and remainder of 0 to 7 bytes.  See L(du14) for details on
+    how we handle the remaining bytes.  */
+-	cmpld	cr5,rWORD7,rWORD8
+-	sldi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmpld	cr7,rN,rSHR
++	cmpld	cr5, rWORD7, rWORD8
++	sldi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	ld	rWORD2,8(rSTR2)
+-	srd	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD2, 8(rSTR2)
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 16 */
+ 	.align	4
+ L(duPs2):
+-	sld	rH,rWORD2,rSHL
+-	sld	rWORD5,rWORD1,r11
+-	sld	rWORD6,rWORD8,r11
++	sld	rWORD6_SHIFT, rWORD2, rSHL
++	sld	rWORD5, rWORD1, rWORD6
++	sld	rWORD6, rWORD8, rWORD6
+ 	b	L(duP2e)
+ /* Remainder is 24 */
+ 	.align	4
+ L(duPs3):
+-	sld	rF,rWORD2,rSHL
+-	sld	rWORD3,rWORD1,r11
+-	sld	rWORD4,rWORD8,r11
++	sld	rWORD4_SHIFT, rWORD2, rSHL
++	sld	rWORD3, rWORD1, rWORD6
++	sld	rWORD4, rWORD8, rWORD6
+ 	b	L(duP3e)
+ /* Count is a multiple of 32, remainder is 0 */
+ 	.align	4
+ L(duPs4):
+-	mtctr	rTMP
+-	or	rWORD8,rG,rWORD8
+-	sld	rD,rWORD2,rSHL
+-	sld	rWORD1,rWORD1,r11
+-	sld	rWORD2,rWORD8,r11
++	mtctr	r0
++	or	rWORD8, r12, rWORD8
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	sld	rWORD1, rWORD1, rWORD6
++	sld	rWORD2, rWORD8, rWORD6
+ 	b	L(duP4e)
+ 
+ /* At this point we know rSTR1 is double word aligned and the
+    compare length is at least 8 bytes.  */
+ 	.align	4
+ L(DWunaligned):
+-	std	r27,-40(r1)
+-	cfi_offset(r27,-40)
+-	clrrdi	rSTR2,rSTR2,3
+-	std	r26,-48(r1)
+-	cfi_offset(r26,-48)
+-	srdi	rTMP,rN,5	/* Divide by 32 */
+-	std	r25,-56(r1)
+-	cfi_offset(r25,-56)
+-	andi.	rBITDIF,rN,24	/* Get the DW remainder */
+-	std	r24,-64(r1)
+-	cfi_offset(r24,-64)
+-	sldi	rSHL,rSHL,3
+-	ld	rWORD6,0(rSTR2)
+-	ldu	rWORD8,8(rSTR2)
+-	cmpldi	cr1,rBITDIF,16
+-	cmpldi	cr7,rN,32
+-	clrldi	rN,rN,61
+-	subfic	rSHR,rSHL,64
+-	sld	rH,rWORD6,rSHL
++	std	rWORD8_SHIFT, -40(r1)
++	cfi_offset(rWORD8_SHIFT, -40)
++	clrrdi	rSTR2, rSTR2, 3
++	std	rWORD2_SHIFT, -48(r1)
++	cfi_offset(rWORD2_SHIFT, -48)
++	srdi	r0, rN, 5	/* Divide by 32 */
++	std	rWORD4_SHIFT, -56(r1)
++	cfi_offset(rWORD4_SHIFT, -56)
++	andi.	r12, rN, 24	/* Get the DW remainder */
++	std	rWORD6_SHIFT, -64(r1)
++	cfi_offset(rWORD6_SHIFT, -64)
++	sldi	rSHL, rSHL, 3
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD6, 0(rSTR2)
++	ldu	rWORD8, 8(rSTR2)
++#endif
++	cmpldi	cr1, r12, 16
++	cmpldi	cr7, rN, 32
++	clrldi	rN, rN, 61
++	subfic	rSHR, rSHL, 64
++	sld	rWORD6_SHIFT, rWORD6, rSHL
+ 	beq	L(duP4)
+-	mtctr	rTMP
+-	bgt	cr1,L(duP3)
+-	beq	cr1,L(duP2)
++	mtctr	r0
++	bgt	cr1, L(duP3)
++	beq	cr1, L(duP2)
+ 
+ /* Remainder is 8 */
+ 	.align	4
+ L(duP1):
+-	srd	rG,rWORD8,rSHR
+-	ld	rWORD7,0(rSTR1)
+-	sld	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	blt	cr7,L(duP1x)
++	srd	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
++	ld	rWORD7, 0(rSTR1)
++#endif
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	blt	cr7, L(duP1x)
+ L(duP1e):
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD2,8(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	srd	rA,rWORD2,rSHR
+-	sld	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
+-	ld	rWORD3,16(rSTR1)
+-	ld	rWORD4,16(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
+-	srd	rC,rWORD4,rSHR
+-	sld	rF,rWORD4,rSHL
+-	bne	cr5,L(duLcr5)
+-	or	rWORD4,rC,rD
+-	ld	rWORD5,24(rSTR1)
+-	ld	rWORD6,24(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	srd	rE,rWORD6,rSHR
+-	sld	rH,rWORD6,rSHL
+-	bne	cr0,L(duLcr0)
+-	or	rWORD6,rE,rF
+-	cmpld	cr6,rWORD5,rWORD6
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 8(rSTR1)
++	ld	rWORD2, 8(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 16(rSTR1)
++	ld	rWORD4, 16(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	bne	cr5, L(duLcr5)
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 24(rSTR1)
++	ld	rWORD6, 24(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	bne	cr7, L(duLcr7)
++	or	rWORD6, r0, rWORD4_SHIFT
++	cmpld	cr6, rWORD5, rWORD6
+ 	b	L(duLoop3)
+ 	.align	4
+ /* At this point we exit early with the first double word compare
+    complete and remainder of 0 to 7 bytes.  See L(du14) for details on
+    how we handle the remaining bytes.  */
+ L(duP1x):
+-	cmpld	cr5,rWORD7,rWORD8
+-	sldi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmpld	cr7,rN,rSHR
++	cmpld	cr5, rWORD7, rWORD8
++	sldi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	ld	rWORD2,8(rSTR2)
+-	srd	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD2, 8(rSTR2)
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ /* Remainder is 16 */
+ 	.align	4
+ L(duP2):
+-	srd	rE,rWORD8,rSHR
+-	ld	rWORD5,0(rSTR1)
+-	or	rWORD6,rE,rH
+-	sld	rH,rWORD8,rSHL
++	srd	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
++	ld	rWORD5, 0(rSTR1)
++#endif
++	or	rWORD6, r0, rWORD6_SHIFT
++	sld	rWORD6_SHIFT, rWORD8, rSHL
+ L(duP2e):
+-	ld	rWORD7,8(rSTR1)
+-	ld	rWORD8,8(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	srd	rG,rWORD8,rSHR
+-	sld	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	blt	cr7,L(duP2x)
+-	ld	rWORD1,16(rSTR1)
+-	ld	rWORD2,16(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	bne	cr6,L(duLcr6)
+-	srd	rA,rWORD2,rSHR
+-	sld	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
+-	ld	rWORD3,24(rSTR1)
+-	ld	rWORD4,24(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
+-	bne	cr5,L(duLcr5)
+-	srd	rC,rWORD4,rSHR
+-	sld	rF,rWORD4,rSHL
+-	or	rWORD4,rC,rD
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	cmpld	cr1,rWORD3,rWORD4
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD7, 8(rSTR1)
++	ld	rWORD8, 8(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	blt	cr7, L(duP2x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 16(rSTR1)
++	ld	rWORD2, 16(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	bne	cr6, L(duLcr6)
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 24(rSTR1)
++	ld	rWORD4, 24(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	bne	cr5, L(duLcr5)
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	cmpld	cr1, rWORD3, rWORD4
+ 	b	L(duLoop2)
+ 	.align	4
+ L(duP2x):
+-	cmpld	cr5,rWORD7,rWORD8
+-	addi	rSTR1,rSTR1,8
+-	addi	rSTR2,rSTR2,8
+-	bne	cr6,L(duLcr6)
+-	sldi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmpld	cr7,rN,rSHR
++	cmpld	cr5, rWORD7, rWORD8
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#endif
++	bne	cr6, L(duLcr6)
++	sldi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	ld	rWORD2,8(rSTR2)
+-	srd	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD2, 8(rSTR2)
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ 
+ /* Remainder is 24 */
+ 	.align	4
+ L(duP3):
+-	srd	rC,rWORD8,rSHR
+-	ld	rWORD3,0(rSTR1)
+-	sld	rF,rWORD8,rSHL
+-	or	rWORD4,rC,rH
++	srd	r12, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
++	ld	rWORD3, 0(rSTR1)
++#endif
++	sld	rWORD4_SHIFT, rWORD8, rSHL
++	or	rWORD4, r12, rWORD6_SHIFT
+ L(duP3e):
+-	ld	rWORD5,8(rSTR1)
+-	ld	rWORD6,8(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	srd	rE,rWORD6,rSHR
+-	sld	rH,rWORD6,rSHL
+-	or	rWORD6,rE,rF
+-	ld	rWORD7,16(rSTR1)
+-	ld	rWORD8,16(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr1,L(duLcr1)
+-	srd	rG,rWORD8,rSHR
+-	sld	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	blt	cr7,L(duP3x)
+-	ld	rWORD1,24(rSTR1)
+-	ld	rWORD2,24(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	bne	cr6,L(duLcr6)
+-	srd	rA,rWORD2,rSHR
+-	sld	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
+-	addi	rSTR1,rSTR1,16
+-	addi	rSTR2,rSTR2,16
+-	cmpld	cr0,rWORD1,rWORD2
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 8(rSTR1)
++	ld	rWORD6, 8(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD7, 16(rSTR1)
++	ld	rWORD8, 16(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr1, L(duLcr1)
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	blt	cr7, L(duP3x)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 24(rSTR1)
++	ld	rWORD2, 24(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	bne	cr6, L(duLcr6)
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 16
++	addi	rSTR2, rSTR2, 16
++#endif
++	cmpld	cr7, rWORD1, rWORD2
+ 	b	L(duLoop1)
+ 	.align	4
+ L(duP3x):
+-	addi	rSTR1,rSTR1,16
+-	addi	rSTR2,rSTR2,16
+-	bne	cr1,L(duLcr1)
+-	cmpld	cr5,rWORD7,rWORD8
+-	bne	cr6,L(duLcr6)
+-	sldi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
+-	cmpld	cr7,rN,rSHR
++#ifndef __LITTLE_ENDIAN__
++	addi	rSTR1, rSTR1, 16
++	addi	rSTR2, rSTR2, 16
++#endif
++#if 0
++/* Huh?  We've already branched on cr1!  */
++	bne	cr1, L(duLcr1)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	bne	cr6, L(duLcr6)
++	sldi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
++	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	ld	rWORD2,8(rSTR2)
+-	srd	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD2, 8(rSTR2)
++#endif
++	srd	r0, rWORD2, rSHR
+ 	b	L(dutrim)
+ 
+ /* Count is a multiple of 32, remainder is 0 */
+ 	.align	4
+ L(duP4):
+-	mtctr	rTMP
+-	srd	rA,rWORD8,rSHR
+-	ld	rWORD1,0(rSTR1)
+-	sld	rD,rWORD8,rSHL
+-	or	rWORD2,rA,rH
++	mtctr	r0
++	srd	r0, rWORD8, rSHR
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	addi	rSTR1, rSTR1, 8
++#else
++	ld	rWORD1, 0(rSTR1)
++#endif
++	sld	rWORD2_SHIFT, rWORD8, rSHL
++	or	rWORD2, r0, rWORD6_SHIFT
+ L(duP4e):
+-	ld	rWORD3,8(rSTR1)
+-	ld	rWORD4,8(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
+-	srd	rC,rWORD4,rSHR
+-	sld	rF,rWORD4,rSHL
+-	or	rWORD4,rC,rD
+-	ld	rWORD5,16(rSTR1)
+-	ld	rWORD6,16(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	bne	cr0,L(duLcr0)
+-	srd	rE,rWORD6,rSHR
+-	sld	rH,rWORD6,rSHL
+-	or	rWORD6,rE,rF
+-	ldu	rWORD7,24(rSTR1)
+-	ldu	rWORD8,24(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr1,L(duLcr1)
+-	srd	rG,rWORD8,rSHR
+-	sld	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
+-	cmpld	cr5,rWORD7,rWORD8
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 8(rSTR1)
++	ld	rWORD4, 8(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 16(rSTR1)
++	ld	rWORD6, 16(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	bne	cr7, L(duLcr7)
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ldu	rWORD7, 24(rSTR1)
++	ldu	rWORD8, 24(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr1, L(duLcr1)
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
++	cmpld	cr5, rWORD7, rWORD8
+ 	bdz	L(du24)		/* Adjust CTR as we start with +4 */
+ /* This is the primary loop */
+ 	.align	4
+ L(duLoop):
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD2,8(rSTR2)
+-	cmpld	cr1,rWORD3,rWORD4
+-	bne	cr6,L(duLcr6)
+-	srd	rA,rWORD2,rSHR
+-	sld	rD,rWORD2,rSHL
+-	or	rWORD2,rA,rB
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD1, 8(rSTR1)
++	ld	rWORD2, 8(rSTR2)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	bne	cr6, L(duLcr6)
++	srd	r0, rWORD2, rSHR
++	sld	rWORD2_SHIFT, rWORD2, rSHL
++	or	rWORD2, r0, rWORD8_SHIFT
+ L(duLoop1):
+-	ld	rWORD3,16(rSTR1)
+-	ld	rWORD4,16(rSTR2)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr5,L(duLcr5)
+-	srd	rC,rWORD4,rSHR
+-	sld	rF,rWORD4,rSHL
+-	or	rWORD4,rC,rD
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD3, 0, rSTR1
++	ldbrx	rWORD4, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD3, 16(rSTR1)
++	ld	rWORD4, 16(rSTR2)
++#endif
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr5, L(duLcr5)
++	srd	r12, rWORD4, rSHR
++	sld	rWORD4_SHIFT, rWORD4, rSHL
++	or	rWORD4, r12, rWORD2_SHIFT
+ L(duLoop2):
+-	ld	rWORD5,24(rSTR1)
+-	ld	rWORD6,24(rSTR2)
+-	cmpld	cr5,rWORD7,rWORD8
+-	bne	cr0,L(duLcr0)
+-	srd	rE,rWORD6,rSHR
+-	sld	rH,rWORD6,rSHL
+-	or	rWORD6,rE,rF
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD5, 0, rSTR1
++	ldbrx	rWORD6, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD5, 24(rSTR1)
++	ld	rWORD6, 24(rSTR2)
++#endif
++	cmpld	cr5, rWORD7, rWORD8
++	bne	cr7, L(duLcr7)
++	srd	r0, rWORD6, rSHR
++	sld	rWORD6_SHIFT, rWORD6, rSHL
++	or	rWORD6, r0, rWORD4_SHIFT
+ L(duLoop3):
+-	ldu	rWORD7,32(rSTR1)
+-	ldu	rWORD8,32(rSTR2)
+-	cmpld	cr0,rWORD1,rWORD2
+-	bne-	cr1,L(duLcr1)
+-	srd	rG,rWORD8,rSHR
+-	sld	rB,rWORD8,rSHL
+-	or	rWORD8,rG,rH
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD7, 0, rSTR1
++	ldbrx	rWORD8, 0, rSTR2
++	addi	rSTR1, rSTR1, 8
++	addi	rSTR2, rSTR2, 8
++#else
++	ldu	rWORD7, 32(rSTR1)
++	ldu	rWORD8, 32(rSTR2)
++#endif
++	cmpld	cr7, rWORD1, rWORD2
++	bne	cr1, L(duLcr1)
++	srd	r12, rWORD8, rSHR
++	sld	rWORD8_SHIFT, rWORD8, rSHL
++	or	rWORD8, r12, rWORD6_SHIFT
+ 	bdnz	L(duLoop)
+ 
+ L(duL4):
+-	bne	cr1,L(duLcr1)
+-	cmpld	cr1,rWORD3,rWORD4
+-	bne	cr6,L(duLcr6)
+-	cmpld	cr6,rWORD5,rWORD6
+-	bne	cr5,L(duLcr5)
+-	cmpld	cr5,rWORD7,rWORD8
++#if 0
++/* Huh?  We've already branched on cr1!  */
++	bne	cr1, L(duLcr1)
++#endif
++	cmpld	cr1, rWORD3, rWORD4
++	bne	cr6, L(duLcr6)
++	cmpld	cr6, rWORD5, rWORD6
++	bne	cr5, L(duLcr5)
++	cmpld	cr5, rWORD7, rWORD8
+ L(du44):
+-	bne	cr0,L(duLcr0)
++	bne	cr7, L(duLcr7)
+ L(du34):
+-	bne	cr1,L(duLcr1)
++	bne	cr1, L(duLcr1)
+ L(du24):
+-	bne	cr6,L(duLcr6)
++	bne	cr6, L(duLcr6)
+ L(du14):
+-	sldi.	rN,rN,3
+-	bne	cr5,L(duLcr5)
++	sldi.	rN, rN, 3
++	bne	cr5, L(duLcr5)
+ /* At this point we have a remainder of 1 to 7 bytes to compare.  We use
+-   shift right double to elliminate bits beyond the compare length.
+-   This allows the use of double word subtract to compute the final
+-   result.
++   shift right double to eliminate bits beyond the compare length.
+ 
+    However it may not be safe to load rWORD2 which may be beyond the
+    string length. So we compare the bit length of the remainder to
+    the right shift count (rSHR). If the bit count is less than or equal
+    we do not need to load rWORD2 (all significant bits are already in
+-   rB).  */
+-	cmpld	cr7,rN,rSHR
++   rWORD8_SHIFT).  */
++	cmpld	cr7, rN, rSHR
+ 	beq	L(duZeroReturn)
+-	li	rA,0
+-	ble	cr7,L(dutrim)
+-	ld	rWORD2,8(rSTR2)
+-	srd	rA,rWORD2,rSHR
++	li	r0, 0
++	ble	cr7, L(dutrim)
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD2, 0, rSTR2
++	addi	rSTR2, rSTR2, 8
++#else
++	ld	rWORD2, 8(rSTR2)
++#endif
++	srd	r0, rWORD2, rSHR
+ 	.align	4
+ L(dutrim):
+-	ld	rWORD1,8(rSTR1)
+-	ld	rWORD8,-8(r1)
+-	subfic	rN,rN,64	/* Shift count is 64 - (rN * 8).  */
+-	or	rWORD2,rA,rB
+-	ld	rWORD7,-16(r1)
+-	ld	r29,-24(r1)
+-	srd	rWORD1,rWORD1,rN
+-	srd	rWORD2,rWORD2,rN
+-	ld	r28,-32(r1)
+-	ld	r27,-40(r1)
+-	li	rRTN,0
+-	cmpld	cr0,rWORD1,rWORD2
+-	ld	r26,-48(r1)
+-	ld	r25,-56(r1)
+-	beq	cr0,L(dureturn24)
+-	li	rRTN,1
+-	ld	r24,-64(r1)
+-	bgtlr	cr0
+-	li	rRTN,-1
+-	blr
+-	.align	4
+-L(duLcr0):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
+-	bgt	cr0,L(dureturn29)
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
+-	li	rRTN,-1
++#ifdef __LITTLE_ENDIAN__
++	ldbrx	rWORD1, 0, rSTR1
++#else
++	ld	rWORD1, 8(rSTR1)
++#endif
++	ld	rWORD8, -8(r1)
++	subfic	rN, rN, 64	/* Shift count is 64 - (rN * 8).  */
++	or	rWORD2, r0, rWORD8_SHIFT
++	ld	rWORD7, -16(r1)
++	ld	rSHL, -24(r1)
++	srd	rWORD1, rWORD1, rN
++	srd	rWORD2, rWORD2, rN
++	ld	rSHR, -32(r1)
++	ld	rWORD8_SHIFT, -40(r1)
++	li	rRTN, 0
++	cmpld	cr7, rWORD1, rWORD2
++	ld	rWORD2_SHIFT, -48(r1)
++	ld	rWORD4_SHIFT, -56(r1)
++	beq	cr7, L(dureturn24)
++	li	rRTN, 1
++	ld	rWORD6_SHIFT, -64(r1)
++	bgtlr	cr7
++	li	rRTN, -1
++	blr
++	.align	4
++L(duLcr7):
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	li	rRTN, 1
++	bgt	cr7, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	4
+ L(duLcr1):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
+-	bgt	cr1,L(dureturn29)
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
+-	li	rRTN,-1
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	li	rRTN, 1
++	bgt	cr1, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	4
+ L(duLcr6):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
+-	bgt	cr6,L(dureturn29)
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
+-	li	rRTN,-1
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	li	rRTN, 1
++	bgt	cr6, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	4
+ L(duLcr5):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
+-	li	rRTN,1
+-	bgt	cr5,L(dureturn29)
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
+-	li	rRTN,-1
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
++	li	rRTN, 1
++	bgt	cr5, L(dureturn29)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
++	li	rRTN, -1
+ 	b	L(dureturn27)
+ 	.align	3
+ L(duZeroReturn):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	.align	4
+ L(dureturn):
+-	ld	rWORD8,-8(r1)
+-	ld	rWORD7,-16(r1)
++	ld	rWORD8, -8(r1)
++	ld	rWORD7, -16(r1)
+ L(dureturn29):
+-	ld	r29,-24(r1)
+-	ld	r28,-32(r1)
++	ld	rSHL, -24(r1)
++	ld	rSHR, -32(r1)
+ L(dureturn27):
+-	ld	r27,-40(r1)
++	ld	rWORD8_SHIFT, -40(r1)
+ L(dureturn26):
+-	ld	r26,-48(r1)
++	ld	rWORD2_SHIFT, -48(r1)
+ L(dureturn25):
+-	ld	r25,-56(r1)
++	ld	rWORD4_SHIFT, -56(r1)
+ L(dureturn24):
+-	ld	r24,-64(r1)
++	ld	rWORD6_SHIFT, -64(r1)
+ 	blr
+ L(duzeroLength):
+-	li	rRTN,0
++	li	rRTN, 0
+ 	blr
+ 
+-END (BP_SYM (memcmp))
++END (memcmp)
+ libc_hidden_builtin_def (memcmp)
+-weak_alias (memcmp,bcmp)
++weak_alias (memcmp, bcmp)
diff --git a/SOURCES/glibc-ppc64le-31.patch b/SOURCES/glibc-ppc64le-31.patch
new file mode 100644
index 0000000..de90661
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-31.patch
@@ -0,0 +1,2943 @@
+# commit 759cfef3ac4c07dba1ece0bbc1207e099348816d
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:47:22 2013 +0930
+# 
+#     PowerPC LE memcpy
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00103.html
+#     
+#     LIttle-endian support for memcpy.  I spent some time cleaning up the
+#     64-bit power7 memcpy, in order to avoid the extra alignment traps
+#     power7 takes for little-endian.  It probably would have been better
+#     to copy the linux kernel version of memcpy.
+#     
+#         * sysdeps/powerpc/powerpc32/power4/memcpy.S: Add little endian support.
+#         * sysdeps/powerpc/powerpc32/power6/memcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/memcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/mempcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/memcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power4/memcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power6/memcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/memcpy.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/mempcpy.S: Likewise.  Make better
+#         use of regs.  Use power7 mtocrf.  Tidy function tails.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memcpy.S	2014-05-29 13:04:56.000000000 -0500
+@@ -205,15 +205,28 @@
+     blt   cr6,5f
+     srwi  7,6,16
+     bgt	  cr6,3f
++#ifdef __LITTLE_ENDIAN__
++    sth   7,0(3)
++#else
+     sth   6,0(3)
++#endif
+     b     7f
+     .align  4
+ 3:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,24
++    stb   6,0(3)
++    sth   7,1(3)
++#else
+     stb   7,0(3)
+     sth   6,1(3)
++#endif
+     b     7f
+     .align  4
+ 5:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,8
++#endif
+     stb   6,0(3)
+ 7:
+     cmplwi	cr1,10,16
+@@ -341,13 +354,23 @@
+     bf      30,1f
+ 
+     /* there are at least two words to copy, so copy them */
++#ifdef __LITTLE_ENDIAN__
++    srw   0,6,10
++    slw   8,7,9
++#else
+     slw   0,6,10  /* shift 1st src word to left align it in R0 */
+     srw   8,7,9   /* shift 2nd src word to right align it in R8 */
++#endif
+     or    0,0,8   /* or them to get word to store */
+     lwz   6,8(5)  /* load the 3rd src word */
+     stw   0,0(4)  /* store the 1st dst word */
++#ifdef __LITTLE_ENDIAN__
++    srw   0,7,10
++    slw   8,6,9
++#else
+     slw   0,7,10  /* now left align 2nd src word into R0 */
+     srw   8,6,9   /* shift 3rd src word to right align it in R8 */
++#endif
+     or    0,0,8   /* or them to get word to store */
+     lwz   7,12(5)
+     stw   0,4(4)  /* store the 2nd dst word */
+@@ -355,8 +378,13 @@
+     addi  5,5,16
+     bf    31,4f
+     /* there is a third word to copy, so copy it */
++#ifdef __LITTLE_ENDIAN__
++    srw   0,6,10
++    slw   8,7,9
++#else
+     slw   0,6,10  /* shift 3rd src word to left align it in R0 */
+     srw   8,7,9   /* shift 4th src word to right align it in R8 */
++#endif
+     or    0,0,8   /* or them to get word to store */
+     stw   0,0(4)  /* store 3rd dst word */
+     mr    6,7
+@@ -366,8 +394,13 @@
+     b     4f
+     .align 4
+ 1:
++#ifdef __LITTLE_ENDIAN__
++    srw     0,6,10
++    slw     8,7,9
++#else
+     slw     0,6,10  /* shift 1st src word to left align it in R0 */
+     srw     8,7,9   /* shift 2nd src word to right align it in R8 */
++#endif
+     addi  5,5,8
+     or    0,0,8   /* or them to get word to store */
+     bf    31,4f
+@@ -380,23 +413,43 @@
+     .align  4
+ 4:
+     /* copy 16 bytes at a time */
++#ifdef __LITTLE_ENDIAN__
++    srw   0,6,10
++    slw   8,7,9
++#else
+     slw   0,6,10
+     srw   8,7,9
++#endif
+     or    0,0,8
+     lwz   6,0(5)
+     stw   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srw   0,7,10
++    slw   8,6,9
++#else
+     slw   0,7,10
+     srw   8,6,9
++#endif
+     or    0,0,8
+     lwz   7,4(5)
+     stw   0,4(4)
++#ifdef __LITTLE_ENDIAN__
++    srw   0,6,10
++    slw   8,7,9
++#else
+     slw   0,6,10
+     srw   8,7,9
++#endif
+     or    0,0,8
+     lwz   6,8(5)
+     stw   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srw   0,7,10
++    slw   8,6,9
++#else
+     slw   0,7,10
+     srw   8,6,9
++#endif
+     or    0,0,8
+     lwz   7,12(5)
+     stw   0,12(4)
+@@ -405,8 +458,13 @@
+     bdnz+ 4b
+ 8:
+     /* calculate and store the final word */
++#ifdef __LITTLE_ENDIAN__
++    srw   0,6,10
++    slw   8,7,9
++#else
+     slw   0,6,10
+     srw   8,7,9
++#endif
+     or    0,0,8
+     stw   0,0(4)
+ 3:
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memcpy.S	2014-05-29 13:04:56.000000000 -0500
+@@ -221,15 +221,28 @@
+     blt   cr6,5f
+     srwi  7,6,16
+     bgt	  cr6,3f
++#ifdef __LITTLE_ENDIAN__
++    sth   7,0(3)
++#else
+     sth   6,0(3)
++#endif
+     b     7f
+     .align  4
+ 3:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,24
++    stb   6,0(3)
++    sth   7,1(3)
++#else
+     stb   7,0(3)
+     sth   6,1(3)
++#endif
+     b     7f
+     .align  4
+ 5:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,8
++#endif
+     stb   6,0(3)
+ 7:
+     cmplwi	cr1,10,16
+@@ -579,7 +592,11 @@
+     lwz     6,-1(4)
+     cmplwi  cr6,31,4
+     srwi    8,31,5    /* calculate the 32 byte loop count */
++#ifdef __LITTLE_ENDIAN__
++    srwi    6,6,8
++#else
+     slwi    6,6,8
++#endif
+     clrlwi  31,31,27   /* The remaining bytes, < 32.  */
+     blt     cr5,L(wdu1_32tail)
+     mtctr   8
+@@ -587,8 +604,12 @@
+ 
+     lwz   8,3(4)
+     lwz   7,4(4)
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,24,32
++#else
+ /*  Equivalent to: srwi   8,8,32-8;  or    6,6,8 */
+     rlwimi 6,8,8,(32-8),31
++#endif
+     b      L(wdu1_loop32x)
+     .align  4
+ L(wdu1_loop32):
+@@ -597,8 +618,12 @@
+     lwz   7,4(4)
+     stw   10,-8(3)
+     stw   11,-4(3)
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,24,32
++#else
+ /*  Equivalent to  srwi   8,8,32-8; or    6,6,8 */
+     rlwimi 6,8,8,(32-8),31
++#endif
+ L(wdu1_loop32x):
+     lwz   10,8(4)
+     lwz   11,12(4)
+@@ -615,7 +640,11 @@
+     stw   6,16(3)
+     stw   7,20(3)
+     addi  3,3,32
++#ifdef __LITTLE_ENDIAN__
++    srwi  6,8,8
++#else
+     slwi  6,8,8
++#endif
+     bdnz+ L(wdu1_loop32)
+     stw   10,-8(3)
+     stw   11,-4(3)
+@@ -626,8 +655,12 @@
+     blt     cr6,L(wdu_4tail)
+     /* calculate and store the final word */
+     lwz   8,3(4)
+-/*  Equivalent to: srwi   8,8,32-9;  or    6,6,8  */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,24,32
++#else
++/*  Equivalent to: srwi   8,8,32-8;  or    6,6,8  */
+     rlwimi 6,8,8,(32-8),31
++#endif
+     b     L(wdu_32tailx)
+ 
+ L(wdu2_32):
+@@ -635,7 +668,11 @@
+     lwz     6,-2(4)
+     cmplwi  cr6,31,4
+     srwi    8,31,5    /* calculate the 32 byte loop count */
++#ifdef __LITTLE_ENDIAN__
++    srwi    6,6,16
++#else
+     slwi    6,6,16
++#endif
+     clrlwi  31,31,27   /* The remaining bytes, < 32.  */
+     blt     cr5,L(wdu2_32tail)
+     mtctr   8
+@@ -643,8 +680,11 @@
+ 
+     lwz   8,2(4)
+     lwz   7,4(4)
+-/*  Equivalent to: srwi   8,8,32-8;  or    6,6,8 */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,16,32
++#else
+     rlwimi 6,8,16,(32-16),31
++#endif
+     b      L(wdu2_loop32x)
+     .align  4
+ L(wdu2_loop32):
+@@ -653,8 +693,11 @@
+     lwz   7,4(4)
+     stw   10,-8(3)
+     stw   11,-4(3)
+-/*  Equivalent to  srwi   8,8,32-8; or    6,6,8 */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,16,32
++#else
+     rlwimi 6,8,16,(32-16),31
++#endif
+ L(wdu2_loop32x):
+     lwz   10,8(4)
+     lwz   11,12(4)
+@@ -672,7 +715,11 @@
+     stw   6,16(3)
+     stw   7,20(3)
+     addi  3,3,32
++#ifdef __LITTLE_ENDIAN__
++    srwi  6,8,16
++#else
+     slwi  6,8,16
++#endif
+     bdnz+ L(wdu2_loop32)
+     stw   10,-8(3)
+     stw   11,-4(3)
+@@ -683,8 +730,11 @@
+     blt     cr6,L(wdu_4tail)
+     /* calculate and store the final word */
+     lwz   8,2(4)
+-/*  Equivalent to: srwi   8,8,32-9;  or    6,6,8  */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,16,32
++#else
+     rlwimi 6,8,16,(32-16),31
++#endif
+     b     L(wdu_32tailx)
+ 
+ L(wdu3_32):
+@@ -692,7 +742,11 @@
+     lwz     6,-3(4)
+     cmplwi  cr6,31,4
+     srwi    8,31,5    /* calculate the 32 byte loop count */
++#ifdef __LITTLE_ENDIAN__
++    srwi    6,6,24
++#else
+     slwi    6,6,24
++#endif
+     clrlwi  31,31,27   /* The remaining bytes, < 32.  */
+     blt     cr5,L(wdu3_32tail)
+     mtctr   8
+@@ -700,8 +754,11 @@
+ 
+     lwz   8,1(4)
+     lwz   7,4(4)
+-/*  Equivalent to: srwi   8,8,32-8;  or    6,6,8 */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,8,32
++#else
+     rlwimi 6,8,24,(32-24),31
++#endif
+     b      L(wdu3_loop32x)
+     .align  4
+ L(wdu3_loop32):
+@@ -710,8 +767,11 @@
+     lwz   7,4(4)
+     stw   10,-8(3)
+     stw   11,-4(3)
+-/*  Equivalent to  srwi   8,8,32-8; or    6,6,8 */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,8,32
++#else
+     rlwimi 6,8,24,(32-24),31
++#endif
+ L(wdu3_loop32x):
+     lwz   10,8(4)
+     lwz   11,12(4)
+@@ -728,7 +788,11 @@
+     stw   6,16(3)
+     stw   7,20(3)
+     addi  3,3,32
++#ifdef __LITTLE_ENDIAN__
++    srwi  6,8,24
++#else
+     slwi  6,8,24
++#endif
+     bdnz+ L(wdu3_loop32)
+     stw   10,-8(3)
+     stw   11,-4(3)
+@@ -739,8 +803,11 @@
+     blt     cr6,L(wdu_4tail)
+     /* calculate and store the final word */
+     lwz   8,1(4)
+-/*  Equivalent to: srwi   8,8,32-9;  or    6,6,8  */
++#ifdef __LITTLE_ENDIAN__
++    rldimi 6,8,8,32
++#else
+     rlwimi 6,8,24,(32-24),31
++#endif
+     b     L(wdu_32tailx)
+     .align  4
+ L(wdu_32tailx):
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memcpy.S	2014-05-29 13:04:56.000000000 -0500
+@@ -385,7 +385,7 @@
+ 
+ 	beq    L(copy_GE_32_unaligned_cont)
+ 
+-	/* SRC is not quadword aligned, get it aligned.  */
++	/* DST is not quadword aligned, get it aligned.  */
+ 
+ 	mtcrf   0x01,0
+ 	subf    31,0,5
+@@ -437,13 +437,21 @@
+ 	mr      11,12
+ 	mtcrf   0x01,9
+ 	cmplwi  cr6,9,1
++#ifdef __LITTLE_ENDIAN__
++	lvsr    5,0,12
++#else
+ 	lvsl    5,0,12
++#endif
+ 	lvx     3,0,12
+ 	bf      31,L(setup_unaligned_loop)
+ 
+ 	/* Copy another 16 bytes to align to 32-bytes due to the loop .  */
+ 	lvx     4,12,6
++#ifdef __LITTLE_ENDIAN__
++	vperm   6,4,3,5
++#else
+ 	vperm   6,3,4,5
++#endif
+ 	addi    11,12,16
+ 	addi    10,3,16
+ 	stvx    6,0,3
+@@ -463,11 +471,17 @@
+ 	vector instructions though.  */
+ 
+ 	lvx	4,11,6	      /* vr4 = r11+16.  */
+-	vperm   6,3,4,5	      /* Merge the correctly-aligned portions
+-			      of vr3/vr4 into vr6.  */
++#ifdef __LITTLE_ENDIAN__
++	vperm   6,4,3,5
++#else
++	vperm   6,3,4,5
++#endif
+ 	lvx	3,11,7	      /* vr3 = r11+32.  */
+-	vperm   10,4,3,5      /* Merge the correctly-aligned portions
+-			      of vr3/vr4 into vr10.  */
++#ifdef __LITTLE_ENDIAN__
++	vperm   10,3,4,5
++#else
++	vperm   10,4,3,5
++#endif
+ 	addi    11,11,32
+ 	stvx    6,0,10
+ 	stvx    10,10,6
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/mempcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/mempcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/mempcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/mempcpy.S	2014-05-29 13:04:56.000000000 -0500
+@@ -327,7 +327,7 @@
+ 
+ 	beq	L(copy_GE_32_unaligned_cont)
+ 
+-	/* SRC is not quadword aligned, get it aligned.  */
++	/* DST is not quadword aligned, get it aligned.  */
+ 
+ 	mtcrf	0x01,0
+ 	subf	31,0,5
+@@ -379,13 +379,21 @@
+ 	mr	11,12
+ 	mtcrf	0x01,9
+ 	cmplwi	cr6,9,1
+-	lvsl	5,0,12
++#ifdef __LITTLE_ENDIAN__
++	lvsr    5,0,12
++#else
++	lvsl    5,0,12
++#endif
+ 	lvx	3,0,12
+ 	bf	31,L(setup_unaligned_loop)
+ 
+ 	/* Copy another 16 bytes to align to 32-bytes due to the loop .  */
+ 	lvx	4,12,6
+-	vperm	6,3,4,5
++#ifdef __LITTLE_ENDIAN__
++	vperm   6,4,3,5
++#else
++	vperm   6,3,4,5
++#endif
+ 	addi	11,12,16
+ 	addi	10,3,16
+ 	stvx	6,0,3
+@@ -405,11 +413,17 @@
+ 	vector instructions though.  */
+ 
+ 	lvx	4,11,6	      /* vr4 = r11+16.  */
+-	vperm	6,3,4,5	      /* Merge the correctly-aligned portions
+-				 of vr3/vr4 into vr6.  */
++#ifdef __LITTLE_ENDIAN__
++	vperm   6,4,3,5
++#else
++	vperm   6,3,4,5
++#endif
+ 	lvx	3,11,7	      /* vr3 = r11+32.  */
+-	vperm	10,4,3,5      /* Merge the correctly-aligned portions
+-				 of vr3/vr4 into vr10.  */
++#ifdef __LITTLE_ENDIAN__
++	vperm   10,3,4,5
++#else
++	vperm   10,4,3,5
++#endif
+ 	addi	11,11,32
+ 	stvx	6,0,10
+ 	stvx	10,10,6
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memcpy.S	2014-05-29 13:04:56.000000000 -0500
+@@ -214,15 +214,28 @@
+     blt   cr6,5f
+     srdi  7,6,16
+     bgt	  cr6,3f
++#ifdef __LITTLE_ENDIAN__
++    sth   7,0(3)
++#else
+     sth   6,0(3)
++#endif
+     b     7f
+     .align  4
+ 3:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,24
++    stb   6,0(3)
++    sth   7,1(3)
++#else
+     stb   7,0(3)
+     sth   6,1(3)
++#endif
+     b     7f
+     .align  4
+ 5:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,8
++#endif
+     stb   6,0(3)
+ 7:
+     cmpldi	cr1,10,16
+@@ -330,7 +343,11 @@
+     ld    7,8(5)
+     subfic  9,10,64
+     beq   2f
++#ifdef __LITTLE_ENDIAN__
++    srd   0,6,10
++#else
+     sld   0,6,10
++#endif
+     cmpldi  11,1
+     mr    6,7
+     addi  4,4,-8
+@@ -338,15 +355,25 @@
+     b     1f
+ 2:  addi  5,5,8
+     .align  4
++#ifdef __LITTLE_ENDIAN__
++0:  srd   0,6,10
++    sld   8,7,9
++#else
+ 0:  sld   0,6,10
+     srd   8,7,9
++#endif
+     cmpldi  11,2
+     ld    6,8(5)
+     or    0,0,8
+     addi  11,11,-2
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srd   0,7,10
++1:  sld   8,6,9
++#else
+     sld   0,7,10
+ 1:  srd   8,6,9
++#endif
+     or    0,0,8
+     beq   8f
+     ld    7,16(5)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memcpy.S	2014-05-29 13:05:51.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memcpy implementation for PowerPC64.
+-   Copyright (C) 2003, 2006, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2003-2014 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
+@@ -17,26 +17,24 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
+    Returns 'dst'.
+ 
+-   Memcpy handles short copies (< 32-bytes) using a binary move blocks 
+-   (no loops) of lwz/stw.  The tail (remaining 1-3) bytes is handled 
+-   with the appropriate combination of byte and halfword load/stores. 
+-   There is minimal effort to optimize the alignment of short moves.  
++   Memcpy handles short copies (< 32-bytes) using a binary move blocks
++   (no loops) of lwz/stw.  The tail (remaining 1-3) bytes is handled
++   with the appropriate combination of byte and halfword load/stores.
++   There is minimal effort to optimize the alignment of short moves.
+    The 64-bit implementations of POWER3 and POWER4 do a reasonable job
+-   of handling unligned load/stores that do not cross 32-byte boundries.
++   of handling unaligned load/stores that do not cross 32-byte boundaries.
+ 
+    Longer moves (>= 32-bytes) justify the effort to get at least the
+    destination doubleword (8-byte) aligned.  Further optimization is
+-   posible when both source and destination are doubleword aligned.
++   possible when both source and destination are doubleword aligned.
+    Each case has a optimized unrolled loop.   */
+ 
+ 	.machine power4
+-EALIGN (BP_SYM (memcpy), 5, 0)
++EALIGN (memcpy, 5, 0)
+ 	CALL_MCOUNT 3
+ 
+     cmpldi cr1,5,31
+@@ -44,20 +42,20 @@
+     std   3,-16(1)
+     std   31,-8(1)
+     cfi_offset(31,-8)
+-    andi. 11,3,7	/* check alignement of dst.  */
++    andi. 11,3,7	/* check alignment of dst.  */
+     clrldi 0,0,61	/* Number of bytes until the 1st doubleword of dst.  */
+-    clrldi 10,4,61	/* check alignement of src.  */
++    clrldi 10,4,61	/* check alignment of src.  */
+     cmpldi cr6,5,8
+     ble-  cr1,.L2	/* If move < 32 bytes use short move code.  */
+-    cmpld cr6,10,11     
++    cmpld cr6,10,11
+     mr    12,4
+     srdi  9,5,3		/* Number of full double words remaining.  */
+     mtcrf 0x01,0
+     mr    31,5
+     beq   .L0
+-  
++
+     subf  31,0,5
+-  /* Move 0-7 bytes as needed to get the destination doubleword alligned.  */
++  /* Move 0-7 bytes as needed to get the destination doubleword aligned.  */
+ 1:  bf    31,2f
+     lbz   6,0(12)
+     addi  12,12,1
+@@ -74,17 +72,17 @@
+     stw   6,0(3)
+     addi  3,3,4
+ 0:
+-    clrldi 10,12,61	/* check alignement of src again.  */     
++    clrldi 10,12,61	/* check alignment of src again.  */
+     srdi  9,31,3	/* Number of full double words remaining.  */
+-    
+-  /* Copy doublewords from source to destination, assumpting the
++
++  /* Copy doublewords from source to destination, assuming the
+      destination is aligned on a doubleword boundary.
+ 
+      At this point we know there are at least 25 bytes left (32-7) to copy.
+-     The next step is to determine if the source is also doubleword aligned. 
++     The next step is to determine if the source is also doubleword aligned.
+      If not branch to the unaligned move code at .L6. which uses
+      a load, shift, store strategy.
+-     
++
+      Otherwise source and destination are doubleword aligned, and we can
+      the optimized doubleword copy loop.  */
+ .L0:
+@@ -97,14 +95,14 @@
+      Use a unrolled loop to copy 4 doubleword (32-bytes) per iteration.
+      If the copy is not an exact multiple of 32 bytes, 1-3
+      doublewords are copied as needed to set up the main loop.  After
+-     the main loop exits there may be a tail of 1-7 bytes. These byte are 
++     the main loop exits there may be a tail of 1-7 bytes. These byte are
+      copied a word/halfword/byte at a time as needed to preserve alignment.  */
+ 
+     srdi  8,31,5
+     cmpldi	cr1,9,4
+     cmpldi	cr6,11,0
+     mr    11,12
+-    
++
+     bf    30,1f
+     ld    6,0(12)
+     ld    7,8(12)
+@@ -115,7 +113,7 @@
+     addi  10,3,16
+     bf    31,4f
+     ld    0,16(12)
+-    std   0,16(3)    
++    std   0,16(3)
+     blt   cr1,3f
+     addi  11,12,24
+     addi  10,3,24
+@@ -129,7 +127,7 @@
+     addi  11,12,8
+     std   6,0(3)
+     addi  10,3,8
+-    
++
+     .align  4
+ 4:
+     ld    6,0(11)
+@@ -144,7 +142,7 @@
+     std   0,24(10)
+     addi  10,10,32
+     bdnz  4b
+-3:  
++3:
+ 
+     rldicr 0,31,0,60
+     mtcrf 0x01,31
+@@ -152,9 +150,9 @@
+ .L9:
+     add   3,3,0
+     add   12,12,0
+-    
++
+ /*  At this point we have a tail of 0-7 bytes and we know that the
+-    destiniation is double word aligned.  */
++    destination is double word aligned.  */
+ 4:  bf    29,2f
+     lwz   6,0(12)
+     addi  12,12,4
+@@ -173,29 +171,29 @@
+     ld 31,-8(1)
+     ld 3,-16(1)
+     blr
+-       
+-/* Copy up to 31 bytes.  This divided into two cases 0-8 bytes and 9-31 
+-   bytes.  Each case is handled without loops, using binary (1,2,4,8) 
+-   tests.  
+-   
++
++/* Copy up to 31 bytes.  This divided into two cases 0-8 bytes and 9-31
++   bytes.  Each case is handled without loops, using binary (1,2,4,8)
++   tests.
++
+    In the short (0-8 byte) case no attempt is made to force alignment
+-   of either source or destination.  The hardware will handle the 
+-   unaligned load/stores with small delays for crossing 32- 64-byte, and 
++   of either source or destination.  The hardware will handle the
++   unaligned load/stores with small delays for crossing 32- 64-byte, and
+    4096-byte boundaries. Since these short moves are unlikely to be
+-   unaligned or cross these boundaries, the overhead to force 
++   unaligned or cross these boundaries, the overhead to force
+    alignment is not justified.
+-   
++
+    The longer (9-31 byte) move is more likely to cross 32- or 64-byte
+    boundaries.  Since only loads are sensitive to the 32-/64-byte
+-   boundaries it is more important to align the source then the 
++   boundaries it is more important to align the source then the
+    destination.  If the source is not already word aligned, we first
+-   move 1-3 bytes as needed.  Since we are only word aligned we don't 
+-   use double word load/stores to insure that all loads are aligned. 
++   move 1-3 bytes as needed.  Since we are only word aligned we don't
++   use double word load/stores to insure that all loads are aligned.
+    While the destination and stores may still be unaligned, this
+    is only an issue for page (4096 byte boundary) crossing, which
+    should be rare for these short moves.  The hardware handles this
+-   case automatically with a small delay.  */ 
+-   
++   case automatically with a small delay.  */
++
+     .align  4
+ .L2:
+     mtcrf 0x01,5
+@@ -216,15 +214,28 @@
+     blt   cr6,5f
+     srdi  7,6,16
+     bgt	  cr6,3f
++#ifdef __LITTLE_ENDIAN__
++    sth   7,0(3)
++#else
+     sth   6,0(3)
++#endif
+     b     7f
+     .align  4
+ 3:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,24
++    stb   6,0(3)
++    sth   7,1(3)
++#else
+     stb   7,0(3)
+     sth   6,1(3)
++#endif
+     b     7f
+     .align  4
+ 5:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,8
++#endif
+     stb   6,0(3)
+ 7:
+     cmpldi	cr1,10,16
+@@ -258,11 +269,11 @@
+     lwz   6,0(12)
+     addi  12,12,4
+     stw   6,0(3)
+-    addi  3,3,4    
++    addi  3,3,4
+ 2:  /* Move 2-3 bytes.  */
+     bf    30,1f
+     lhz   6,0(12)
+-    sth   6,0(3) 
++    sth   6,0(3)
+     bf    31,0f
+     lbz   7,2(12)
+     stb   7,2(3)
+@@ -283,8 +294,8 @@
+     mr    12,4
+     bne   cr6,4f
+ /* Would have liked to use use ld/std here but the 630 processors are
+-   slow for load/store doubles that are not at least word aligned.  
+-   Unaligned Load/Store word execute with only a 1 cycle penaltity.  */
++   slow for load/store doubles that are not at least word aligned.
++   Unaligned Load/Store word execute with only a 1 cycle penalty.  */
+     lwz   6,0(4)
+     lwz   7,4(4)
+     stw   6,0(3)
+@@ -299,14 +310,14 @@
+ 6:
+     bf    30,5f
+     lhz   7,4(4)
+-    sth   7,4(3) 
++    sth   7,4(3)
+     bf    31,0f
+     lbz   8,6(4)
+     stb   8,6(3)
+     ld 3,-16(1)
+     blr
+     .align  4
+-5:  
++5:
+     bf    31,0f
+     lbz   6,4(4)
+     stb   6,4(3)
+@@ -336,13 +347,23 @@
+     bf      30,1f
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srd     0,6,10
++    sld     8,7,9
++#else
+     sld     0,6,10
+     srd     8,7,9
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srd     0,7,10
++    sld     8,6,9
++#else
+     sld     0,7,10
+     srd     8,6,9
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -351,8 +372,13 @@
+     blt     cr6,8f  /* if total DWs = 3, then bypass loop */
+     bf      31,4f
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srd     0,6,10
++    sld     8,7,9
++#else
+     sld     0,6,10
+     srd     8,7,9
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -363,8 +389,13 @@
+     b       4f
+     .align 4
+ 1:
++#ifdef __LITTLE_ENDIAN__
++    srd     0,6,10
++    sld     8,7,9
++#else
+     sld     0,6,10
+     srd     8,7,9
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,4f
+@@ -375,23 +406,44 @@
+     addi    4,4,8
+     .align 4
+ /* copy 32 bytes at a time */
+-4:  sld   0,6,10
++4:
++#ifdef __LITTLE_ENDIAN__
++    srd   0,6,10
++    sld   8,7,9
++#else
++    sld   0,6,10
+     srd   8,7,9
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srd   0,7,10
++    sld   8,6,9
++#else
+     sld   0,7,10
+     srd   8,6,9
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srd   0,6,10
++    sld   8,7,9
++#else
+     sld   0,6,10
+     srd   8,7,9
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srd   0,7,10
++    sld   8,6,9
++#else
+     sld   0,7,10
+     srd   8,6,9
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -401,9 +453,14 @@
+     .align 4
+ 8:
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srd   0,6,10
++    sld   8,7,9
++#else
+     sld   0,6,10
+     srd   8,7,9
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+ 3:
+     rldicr 0,31,0,60
+@@ -413,5 +470,5 @@
+     ld 31,-8(1)
+     ld 3,-16(1)
+     blr
+-END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS)
++END_GEN_TB (memcpy,TB_TOCLESS)
+ libc_hidden_builtin_def (memcpy)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memcpy.S	2014-05-29 13:05:27.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memcpy implementation for PowerPC64.
+-   Copyright (C) 2003, 2006, 2007, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2003-2014 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
+@@ -17,52 +17,50 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
+    Returns 'dst'.
+ 
+-   Memcpy handles short copies (< 32-bytes) using a binary move blocks 
+-   (no loops) of lwz/stw.  The tail (remaining 1-3) bytes is handled 
+-   with the appropriate combination of byte and halfword load/stores. 
+-   There is minimal effort to optimize the alignment of short moves.  
++   Memcpy handles short copies (< 32-bytes) using a binary move blocks
++   (no loops) of lwz/stw.  The tail (remaining 1-3) bytes is handled
++   with the appropriate combination of byte and halfword load/stores.
++   There is minimal effort to optimize the alignment of short moves.
+    The 64-bit implementations of POWER3 and POWER4 do a reasonable job
+-   of handling unligned load/stores that do not cross 32-byte boundries.
++   of handling unaligned load/stores that do not cross 32-byte boundaries.
+ 
+    Longer moves (>= 32-bytes) justify the effort to get at least the
+    destination doubleword (8-byte) aligned.  Further optimization is
+-   posible when both source and destination are doubleword aligned.
+-   Each case has a optimized unrolled loop.  
+-     
+-   For POWER6 unaligned loads will take a 20+ cycle hicup for any
++   possible when both source and destination are doubleword aligned.
++   Each case has a optimized unrolled loop.
++
++   For POWER6 unaligned loads will take a 20+ cycle hiccup for any
+    L1 cache miss that crosses a 32- or 128-byte boundary.  Store
+-   is more forgiving and does not take a hicup until page or 
+-   segment boundaries.  So we require doubleword alignment for 
++   is more forgiving and does not take a hiccup until page or
++   segment boundaries.  So we require doubleword alignment for
+    the source but may take a risk and only require word alignment
+    for the destination.  */
+ 
+ 	.machine	"power6"
+-EALIGN (BP_SYM (memcpy), 7, 0)
++EALIGN (memcpy, 7, 0)
+ 	CALL_MCOUNT 3
+ 
+     cmpldi cr1,5,31
+     neg   0,3
+     std   3,-16(1)
+     std   31,-8(1)
+-    andi. 11,3,7	/* check alignement of dst.  */
++    andi. 11,3,7	/* check alignment of dst.  */
+     clrldi 0,0,61	/* Number of bytes until the 1st doubleword of dst.  */
+-    clrldi 10,4,61	/* check alignement of src.  */
++    clrldi 10,4,61	/* check alignment of src.  */
+     cmpldi cr6,5,8
+     ble-  cr1,.L2	/* If move < 32 bytes use short move code.  */
+     mtcrf 0x01,0
+-    cmpld cr6,10,11  
++    cmpld cr6,10,11
+     srdi  9,5,3		/* Number of full double words remaining.  */
+     beq   .L0
+-  
++
+     subf  5,0,5
+-  /* Move 0-7 bytes as needed to get the destination doubleword alligned.
+-     Duplicate some code to maximize fall-throught and minimize agen delays.  */
++  /* Move 0-7 bytes as needed to get the destination doubleword aligned.
++     Duplicate some code to maximize fall-through and minimize agen delays.  */
+ 1:  bf    31,2f
+     lbz   6,0(4)
+     stb   6,0(3)
+@@ -78,7 +76,7 @@
+     lwz   6,1(4)
+     stw   6,1(3)
+     b     0f
+-    
++
+ 2:  bf    30,4f
+     lhz   6,0(4)
+     sth   6,0(3)
+@@ -86,26 +84,26 @@
+     lwz   6,2(4)
+     stw   6,2(3)
+     b     0f
+-    
++
+ 4:  bf    29,0f
+     lwz   6,0(4)
+     stw   6,0(3)
+-0: 
++0:
+ /* Add the number of bytes until the 1st doubleword of dst to src and dst.  */
+     add   4,4,0
+     add   3,3,0
+-    
+-    clrldi 10,4,61	/* check alignement of src again.  */     
++
++    clrldi 10,4,61	/* check alignment of src again.  */
+     srdi  9,5,3	/* Number of full double words remaining.  */
+-    
+-  /* Copy doublewords from source to destination, assumpting the
++
++  /* Copy doublewords from source to destination, assuming the
+      destination is aligned on a doubleword boundary.
+ 
+      At this point we know there are at least 25 bytes left (32-7) to copy.
+-     The next step is to determine if the source is also doubleword aligned. 
++     The next step is to determine if the source is also doubleword aligned.
+      If not branch to the unaligned move code at .L6. which uses
+      a load, shift, store strategy.
+-     
++
+      Otherwise source and destination are doubleword aligned, and we can
+      the optimized doubleword copy loop.  */
+     .align  4
+@@ -123,14 +121,14 @@
+      the main loop exits there may be a tail of 1-7 bytes. These byte
+      are copied a word/halfword/byte at a time as needed to preserve
+      alignment.
+-     
++
+      For POWER6 the L1 is store-through and the L2 is store-in.  The
+      L2 is clocked at half CPU clock so we can store 16 bytes every
+      other cycle.  POWER6 also has a load/store bypass so we can do
+-     load, load, store, store every 2 cycles.  
+-     
++     load, load, store, store every 2 cycles.
++
+      The following code is sensitive to cache line alignment.  Do not
+-     make any change with out first making sure thay don't result in
++     make any change with out first making sure they don't result in
+      splitting ld/std pairs across a cache line.  */
+ 
+     mtcrf 0x02,5
+@@ -273,7 +271,7 @@
+     std   8,16+96(10)
+     std   0,24+96(10)
+     ble   cr5,L(das_loop_e)
+-    
++
+     mtctr   12
+     .align  4
+ L(das_loop2):
+@@ -326,10 +324,10 @@
+     .align  4
+ L(das_tail):
+     beq   cr1,0f
+-    
++
+ L(das_tail2):
+ /*  At this point we have a tail of 0-7 bytes and we know that the
+-    destiniation is double word aligned.  */
++    destination is double word aligned.  */
+ 4:  bf    29,2f
+     lwz   6,0(4)
+     stw   6,0(3)
+@@ -344,7 +342,7 @@
+     lbz   6,4(4)
+     stb   6,4(3)
+     b     0f
+-  
++
+ 2:  bf    30,1f
+     lhz   6,0(4)
+     sth   6,0(3)
+@@ -352,7 +350,7 @@
+     lbz   6,2(4)
+     stb   6,2(3)
+     b     0f
+-    
++
+ 1:  bf    31,0f
+     lbz   6,0(4)
+     stb   6,0(3)
+@@ -361,7 +359,7 @@
+     ld 3,-16(1)
+     blr
+ 
+-/* Copy up to 31 bytes.  This divided into two cases 0-8 bytes and 9-31 
++/* Copy up to 31 bytes.  This divided into two cases 0-8 bytes and 9-31
+    bytes.  Each case is handled without loops, using binary (1,2,4,8)
+    tests.
+ 
+@@ -402,15 +400,28 @@
+     blt   cr6,5f
+     srdi  7,6,16
+     bgt	  cr6,3f
++#ifdef __LITTLE_ENDIAN__
++    sth   7,0(3)
++#else
+     sth   6,0(3)
++#endif
+     b     7f
+     .align  4
+ 3:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,24
++    stb   6,0(3)
++    sth   7,1(3)
++#else
+     stb   7,0(3)
+     sth   6,1(3)
++#endif
+     b     7f
+     .align  4
+ 5:
++#ifdef __LITTLE_ENDIAN__
++    rotlwi 6,6,8
++#endif
+     stb   6,0(3)
+ 7:
+     cmpldi	cr1,10,16
+@@ -421,7 +432,7 @@
+ /* At least 6 bytes left and the source is word aligned.  This allows
+    some speculative loads up front.  */
+ /* We need to special case the fall-through because the biggest delays
+-   are due to address computation not being ready in time for the 
++   are due to address computation not being ready in time for the
+    AGEN.  */
+     lwz   6,0(12)
+     lwz   7,4(12)
+@@ -452,7 +463,7 @@
+     ld    3,-16(1)
+     blr
+     .align  4
+-L(dus_tail16p8):  /* less then 8 bytes left.  */
++L(dus_tail16p8):  /* less than 8 bytes left.  */
+     beq   cr1,L(dus_tailX) /* exactly 16 bytes, early exit.  */
+     cmpldi	cr1,10,20
+     bf    29,L(dus_tail16p2)
+@@ -466,7 +477,7 @@
+     ld    3,-16(1)
+     blr
+     .align  4
+-L(dus_tail16p4):  /* less then 4 bytes left.  */
++L(dus_tail16p4):  /* less than 4 bytes left.  */
+     addi  12,12,24
+     addi  3,3,24
+     bgt   cr0,L(dus_tail2)
+@@ -474,7 +485,7 @@
+     ld    3,-16(1)
+     blr
+     .align  4
+-L(dus_tail16p2):  /* 16 bytes moved, less then 4 bytes left.  */
++L(dus_tail16p2):  /* 16 bytes moved, less than 4 bytes left.  */
+     addi  12,12,16
+     addi  3,3,16
+     b     L(dus_tail2)
+@@ -499,7 +510,7 @@
+     ld    3,-16(1)
+     blr
+     .align  4
+-L(dus_tail8p4):  /* less then 4 bytes left.  */
++L(dus_tail8p4):  /* less than 4 bytes left.  */
+     addi  12,12,8
+     addi  3,3,8
+     bgt   cr1,L(dus_tail2)
+@@ -510,14 +521,14 @@
+     .align  4
+ L(dus_tail4):  /* Move 4 bytes.  */
+ /*  r6 already loaded speculatively.  If we are here we know there is
+-    more then 4 bytes left.  So there is no need to test.  */
++    more than 4 bytes left.  So there is no need to test.  */
+     addi  12,12,4
+     stw   6,0(3)
+     addi  3,3,4
+ L(dus_tail2):  /* Move 2-3 bytes.  */
+     bf    30,L(dus_tail1)
+     lhz   6,0(12)
+-    sth   6,0(3) 
++    sth   6,0(3)
+     bf    31,L(dus_tailX)
+     lbz   7,2(12)
+     stb   7,2(3)
+@@ -537,7 +548,7 @@
+ .LE8:
+     mr    12,4
+     bne   cr6,L(dus_4)
+-/* Exactly 8 bytes.  We may cross a 32-/128-byte boundry and take a ~20
++/* Exactly 8 bytes.  We may cross a 32-/128-byte boundary and take a ~20
+    cycle delay.  This case should be rare and any attempt to avoid this
+    would take most of 20 cycles any way.  */
+     ld   6,0(4)
+@@ -552,7 +563,7 @@
+     stw   6,0(3)
+     bf    30,L(dus_5)
+     lhz   7,4(4)
+-    sth   7,4(3) 
++    sth   7,4(3)
+     bf    31,L(dus_0)
+     lbz   8,6(4)
+     stb   8,6(3)
+@@ -590,20 +601,31 @@
+     bge     cr0, L(du4_do)
+     blt     cr5, L(du1_do)
+     beq     cr5, L(du2_do)
+-    b       L(du3_do) 
+-       
++    b       L(du3_do)
++
+     .align 4
+ L(du1_do):
+     bf      30,L(du1_1dw)
+ 
+     /* there are at least two DWs to copy */
++    /* FIXME: can combine last shift and "or" into "rldimi" */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 8
++    sldi     8,7, 64-8
++#else
+     sldi     0,6, 8
+     srdi     8,7, 64-8
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 8
++    sldi     8,6, 64-8
++#else
+     sldi     0,7, 8
+     srdi     8,6, 64-8
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -612,8 +634,13 @@
+     blt     cr6,L(du1_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du1_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 8
++    sldi     8,7, 64-8
++#else
+     sldi     0,6, 8
+     srdi     8,7, 64-8
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -624,8 +651,13 @@
+     b       L(du1_loop)
+     .align 4
+ L(du1_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 8
++    sldi     8,7, 64-8
++#else
+     sldi     0,6, 8
+     srdi     8,7, 64-8
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du1_loop)
+@@ -637,23 +669,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du1_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 8
++    sldi   8,7, 64-8
++#else
+     sldi   0,6, 8
+     srdi   8,7, 64-8
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 8
++    sldi   8,6, 64-8
++#else
+     sldi   0,7, 8
+     srdi   8,6, 64-8
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 8
++    sldi   8,7, 64-8
++#else
+     sldi   0,6, 8
+     srdi   8,7, 64-8
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 8
++    sldi   8,6, 64-8
++#else
+     sldi   0,7, 8
+     srdi   8,6, 64-8
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -663,9 +715,14 @@
+     .align 4
+ L(du1_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 8
++    sldi   8,7, 64-8
++#else
+     sldi   0,6, 8
+     srdi   8,7, 64-8
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+ 
+@@ -674,13 +731,23 @@
+     bf      30,L(du2_1dw)
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 16
++    sldi     8,7, 64-16
++#else
+     sldi     0,6, 16
+     srdi     8,7, 64-16
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 16
++    sldi     8,6, 64-16
++#else
+     sldi     0,7, 16
+     srdi     8,6, 64-16
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -689,8 +756,13 @@
+     blt     cr6,L(du2_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du2_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 16
++    sldi     8,7, 64-16
++#else
+     sldi     0,6, 16
+     srdi     8,7, 64-16
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -701,8 +773,13 @@
+     b       L(du2_loop)
+     .align 4
+ L(du2_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 16
++    sldi     8,7, 64-16
++#else
+     sldi     0,6, 16
+     srdi     8,7, 64-16
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du2_loop)
+@@ -714,23 +791,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du2_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 16
++    sldi   8,7, 64-16
++#else
+     sldi   0,6, 16
+     srdi   8,7, 64-16
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 16
++    sldi   8,6, 64-16
++#else
+     sldi   0,7, 16
+     srdi   8,6, 64-16
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 16
++    sldi   8,7, 64-16
++#else
+     sldi   0,6, 16
+     srdi   8,7, 64-16
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 16
++    sldi   8,6, 64-16
++#else
+     sldi   0,7, 16
+     srdi   8,6, 64-16
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -740,9 +837,14 @@
+     .align 4
+ L(du2_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 16
++    sldi   8,7, 64-16
++#else
+     sldi   0,6, 16
+     srdi   8,7, 64-16
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+ 
+@@ -751,13 +853,23 @@
+     bf      30,L(du3_1dw)
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 24
++    sldi     8,7, 64-24
++#else
+     sldi     0,6, 24
+     srdi     8,7, 64-24
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 24
++    sldi     8,6, 64-24
++#else
+     sldi     0,7, 24
+     srdi     8,6, 64-24
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -766,8 +878,13 @@
+     blt     cr6,L(du3_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du3_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 24
++    sldi     8,7, 64-24
++#else
+     sldi     0,6, 24
+     srdi     8,7, 64-24
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -778,8 +895,13 @@
+     b       L(du3_loop)
+     .align 4
+ L(du3_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 24
++    sldi     8,7, 64-24
++#else
+     sldi     0,6, 24
+     srdi     8,7, 64-24
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du3_loop)
+@@ -791,23 +913,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du3_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 24
++    sldi   8,7, 64-24
++#else
+     sldi   0,6, 24
+     srdi   8,7, 64-24
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 24
++    sldi   8,6, 64-24
++#else
+     sldi   0,7, 24
+     srdi   8,6, 64-24
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 24
++    sldi   8,7, 64-24
++#else
+     sldi   0,6, 24
+     srdi   8,7, 64-24
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 24
++    sldi   8,6, 64-24
++#else
+     sldi   0,7, 24
+     srdi   8,6, 64-24
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -817,9 +959,14 @@
+     .align 4
+ L(du3_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 24
++    sldi   8,7, 64-24
++#else
+     sldi   0,6, 24
+     srdi   8,7, 64-24
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+ 
+@@ -834,13 +981,23 @@
+     bf      30,L(du4_1dw)
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 32
++    sldi     8,7, 64-32
++#else
+     sldi     0,6, 32
+     srdi     8,7, 64-32
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 32
++    sldi     8,6, 64-32
++#else
+     sldi     0,7, 32
+     srdi     8,6, 64-32
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -849,8 +1006,13 @@
+     blt     cr6,L(du4_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du4_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 32
++    sldi     8,7, 64-32
++#else
+     sldi     0,6, 32
+     srdi     8,7, 64-32
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -861,8 +1023,13 @@
+     b       L(du4_loop)
+     .align 4
+ L(du4_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 32
++    sldi     8,7, 64-32
++#else
+     sldi     0,6, 32
+     srdi     8,7, 64-32
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du4_loop)
+@@ -874,23 +1041,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du4_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 32
++    sldi   8,7, 64-32
++#else
+     sldi   0,6, 32
+     srdi   8,7, 64-32
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 32
++    sldi   8,6, 64-32
++#else
+     sldi   0,7, 32
+     srdi   8,6, 64-32
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 32
++    sldi   8,7, 64-32
++#else
+     sldi   0,6, 32
+     srdi   8,7, 64-32
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 32
++    sldi   8,6, 64-32
++#else
+     sldi   0,7, 32
+     srdi   8,6, 64-32
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -900,9 +1087,14 @@
+     .align 4
+ L(du4_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 32
++    sldi   8,7, 64-32
++#else
+     sldi   0,6, 32
+     srdi   8,7, 64-32
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+ 
+@@ -911,13 +1103,23 @@
+     bf      30,L(du5_1dw)
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 40
++    sldi     8,7, 64-40
++#else
+     sldi     0,6, 40
+     srdi     8,7, 64-40
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 40
++    sldi     8,6, 64-40
++#else
+     sldi     0,7, 40
+     srdi     8,6, 64-40
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -926,8 +1128,13 @@
+     blt     cr6,L(du5_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du5_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 40
++    sldi     8,7, 64-40
++#else
+     sldi     0,6, 40
+     srdi     8,7, 64-40
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -938,8 +1145,13 @@
+     b       L(du5_loop)
+     .align 4
+ L(du5_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 40
++    sldi     8,7, 64-40
++#else
+     sldi     0,6, 40
+     srdi     8,7, 64-40
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du5_loop)
+@@ -951,23 +1163,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du5_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 40
++    sldi   8,7, 64-40
++#else
+     sldi   0,6, 40
+     srdi   8,7, 64-40
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 40
++    sldi   8,6, 64-40
++#else
+     sldi   0,7, 40
+     srdi   8,6, 64-40
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 40
++    sldi   8,7, 64-40
++#else
+     sldi   0,6, 40
+     srdi   8,7, 64-40
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 40
++    sldi   8,6, 64-40
++#else
+     sldi   0,7, 40
+     srdi   8,6, 64-40
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -977,9 +1209,14 @@
+     .align 4
+ L(du5_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 40
++    sldi   8,7, 64-40
++#else
+     sldi   0,6, 40
+     srdi   8,7, 64-40
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+ 
+@@ -988,13 +1225,23 @@
+     bf      30,L(du6_1dw)
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 48
++    sldi     8,7, 64-48
++#else
+     sldi     0,6, 48
+     srdi     8,7, 64-48
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 48
++    sldi     8,6, 64-48
++#else
+     sldi     0,7, 48
+     srdi     8,6, 64-48
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -1003,8 +1250,13 @@
+     blt     cr6,L(du6_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du6_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 48
++    sldi     8,7, 64-48
++#else
+     sldi     0,6, 48
+     srdi     8,7, 64-48
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -1015,8 +1267,13 @@
+     b       L(du6_loop)
+     .align 4
+ L(du6_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 48
++    sldi     8,7, 64-48
++#else
+     sldi     0,6, 48
+     srdi     8,7, 64-48
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du6_loop)
+@@ -1028,23 +1285,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du6_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 48
++    sldi   8,7, 64-48
++#else
+     sldi   0,6, 48
+     srdi   8,7, 64-48
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 48
++    sldi   8,6, 64-48
++#else
+     sldi   0,7, 48
+     srdi   8,6, 64-48
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 48
++    sldi   8,7, 64-48
++#else
+     sldi   0,6, 48
+     srdi   8,7, 64-48
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 48
++    sldi   8,6, 64-48
++#else
+     sldi   0,7, 48
+     srdi   8,6, 64-48
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -1054,9 +1331,14 @@
+     .align 4
+ L(du6_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 48
++    sldi   8,7, 64-48
++#else
+     sldi   0,6, 48
+     srdi   8,7, 64-48
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+ 
+@@ -1065,13 +1347,23 @@
+     bf      30,L(du7_1dw)
+ 
+     /* there are at least two DWs to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 56
++    sldi     8,7, 64-56
++#else
+     sldi     0,6, 56
+     srdi     8,7, 64-56
++#endif
+     or      0,0,8
+     ld      6,16(5)
+     std     0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,7, 56
++    sldi     8,6, 64-56
++#else
+     sldi     0,7, 56
+     srdi     8,6, 64-56
++#endif
+     or      0,0,8
+     ld      7,24(5)
+     std     0,8(4)
+@@ -1080,8 +1372,13 @@
+     blt     cr6,L(du7_fini)  /* if total DWs = 3, then bypass loop */
+     bf      31,L(du7_loop)
+     /* there is a third DW to copy */
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 56
++    sldi     8,7, 64-56
++#else
+     sldi     0,6, 56
+     srdi     8,7, 64-56
++#endif
+     or      0,0,8
+     std     0,0(4)
+     mr      6,7
+@@ -1092,8 +1389,13 @@
+     b       L(du7_loop)
+     .align 4
+ L(du7_1dw):
++#ifdef __LITTLE_ENDIAN__
++    srdi     0,6, 56
++    sldi     8,7, 64-56
++#else
+     sldi     0,6, 56
+     srdi     8,7, 64-56
++#endif
+     addi    5,5,16
+     or      0,0,8
+     bf      31,L(du7_loop)
+@@ -1105,23 +1407,43 @@
+     .align 4
+ /* copy 32 bytes at a time */
+ L(du7_loop):
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 56
++    sldi   8,7, 64-56
++#else
+     sldi   0,6, 56
+     srdi   8,7, 64-56
++#endif
+     or    0,0,8
+     ld    6,0(5)
+     std   0,0(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 56
++    sldi   8,6, 64-56
++#else
+     sldi   0,7, 56
+     srdi   8,6, 64-56
++#endif
+     or    0,0,8
+     ld    7,8(5)
+     std   0,8(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 56
++    sldi   8,7, 64-56
++#else
+     sldi   0,6, 56
+     srdi   8,7, 64-56
++#endif
+     or    0,0,8
+     ld    6,16(5)
+     std   0,16(4)
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,7, 56
++    sldi   8,6, 64-56
++#else
+     sldi   0,7, 56
+     srdi   8,6, 64-56
++#endif
+     or    0,0,8
+     ld    7,24(5)
+     std   0,24(4)
+@@ -1131,12 +1453,17 @@
+     .align 4
+ L(du7_fini):
+     /* calculate and store the final DW */
++#ifdef __LITTLE_ENDIAN__
++    srdi   0,6, 56
++    sldi   8,7, 64-56
++#else
+     sldi   0,6, 56
+     srdi   8,7, 64-56
+-    or    0,0,8  
++#endif
++    or    0,0,8
+     std   0,0(4)
+     b     L(du_done)
+-    
++
+     .align 4
+ L(du_done):
+     rldicr 0,31,0,60
+@@ -1144,9 +1471,9 @@
+     beq   cr1,0f	/* If the tail is 0 bytes we are done!  */
+ 
+     add   3,3,0
+-    add   12,12,0    
++    add   12,12,0
+ /*  At this point we have a tail of 0-7 bytes and we know that the
+-    destiniation is double word aligned.  */
++    destination is double word aligned.  */
+ 4:  bf    29,2f
+     lwz   6,0(12)
+     addi  12,12,4
+@@ -1165,5 +1492,5 @@
+     ld 31,-8(1)
+     ld 3,-16(1)
+     blr
+-END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS)
++END_GEN_TB (memcpy,TB_TOCLESS)
+ libc_hidden_builtin_def (memcpy)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memcpy.S	2014-05-29 13:05:40.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memcpy implementation for PowerPC64/POWER7.
+-   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+    Contributed by Luis Machado <luisgpm@br.ibm.com>.
+    This file is part of the GNU C Library.
+ 
+@@ -18,425 +18,366 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ 
+ /* __ptr_t [r3] memcpy (__ptr_t dst [r3], __ptr_t src [r4], size_t len [r5]);
+    Returns 'dst'.  */
+ 
++#define dst 11		/* Use r11 so r3 kept unchanged.  */
++#define src 4
++#define cnt 5
++
+ 	.machine power7
+-EALIGN (BP_SYM (memcpy), 5, 0)
++EALIGN (memcpy, 5, 0)
+ 	CALL_MCOUNT 3
+ 
+-	cmpldi  cr1,5,31
++	cmpldi	cr1,cnt,31
+ 	neg	0,3
+-	std	3,-16(1)
+-	std	31,-8(1)
+-	cfi_offset(31,-8)
+ 	ble	cr1, L(copy_LT_32)  /* If move < 32 bytes use short move
+ 				    code.  */
+ 
+-	andi.   11,3,7	      /* Check alignment of DST.  */
+-
++#ifdef __LITTLE_ENDIAN__
++/* In little-endian mode, power7 takes an alignment trap on any lxvd2x
++   or stxvd2x crossing a 32-byte boundary, so ensure the aligned_copy
++   loop is only used for quadword aligned copies.  */
++	andi.	10,3,15
++	clrldi	11,4,60
++#else
++	andi.	10,3,7		/* Check alignment of DST.  */
++	clrldi	11,4,61		/* Check alignment of SRC.  */
++#endif
++	cmpld	cr6,10,11	/* SRC and DST alignments match?  */
+ 
+-	clrldi  10,4,61       /* Check alignment of SRC.  */
+-	cmpld   cr6,10,11     /* SRC and DST alignments match?  */
+-	mr	12,4
+-	mr	31,5
++	mr	dst,3
+ 	bne	cr6,L(copy_GE_32_unaligned)
++	beq	L(aligned_copy)
+ 
+-	srdi    9,5,3	      /* Number of full quadwords remaining.  */
+-
+-	beq    L(copy_GE_32_aligned_cont)
+-
+-	clrldi  0,0,61
+-	mtcrf   0x01,0
+-	subf    31,0,5
+-
+-	/* Get the SRC aligned to 8 bytes.  */
+-
+-1:	bf	31,2f
+-	lbz	6,0(12)
+-	addi    12,12,1
+-	stb	6,0(3)
+-	addi    3,3,1
+-2:	bf      30,4f
+-	lhz     6,0(12)
+-	addi    12,12,2
+-	sth     6,0(3)
+-	addi    3,3,2
+-4:	bf      29,0f
+-	lwz     6,0(12)
+-	addi    12,12,4
+-	stw     6,0(3)
+-	addi    3,3,4
+-0:
+-	clrldi  10,12,61      /* Check alignment of SRC again.  */
+-	srdi    9,31,3	      /* Number of full doublewords remaining.  */
+-
+-L(copy_GE_32_aligned_cont):
+-
+-	clrldi  11,31,61
+-	mtcrf   0x01,9
+-
+-	srdi    8,31,5
+-	cmpldi  cr1,9,4
+-	cmpldi  cr6,11,0
+-	mr	11,12
++	mtocrf	0x01,0
++#ifdef __LITTLE_ENDIAN__
++	clrldi	0,0,60
++#else
++	clrldi	0,0,61
++#endif
+ 
+-	/* Copy 1~3 doublewords so the main loop starts
+-	at a multiple of 32 bytes.  */
+-
+-	bf	30,1f
+-	ld      6,0(12)
+-	ld      7,8(12)
+-	addi    11,12,16
+-	mtctr   8
+-	std     6,0(3)
+-	std     7,8(3)
+-	addi    10,3,16
+-	bf      31,4f
+-	ld      0,16(12)
+-	std     0,16(3)
+-	blt     cr1,3f
+-	addi    11,12,24
+-	addi    10,3,24
+-	b       4f
+-
+-	.align  4
+-1:	/* Copy 1 doubleword and set the counter.  */
+-	mr	10,3
+-	mtctr   8
+-	bf      31,4f
+-	ld      6,0(12)
+-	addi    11,12,8
+-	std     6,0(3)
+-	addi    10,3,8
++/* Get the DST and SRC aligned to 8 bytes (16 for little-endian).  */
++1:
++	bf	31,2f
++	lbz	6,0(src)
++	addi	src,src,1
++	stb	6,0(dst)
++	addi	dst,dst,1
++2:
++	bf	30,4f
++	lhz	6,0(src)
++	addi	src,src,2
++	sth	6,0(dst)
++	addi	dst,dst,2
++4:
++	bf	29,8f
++	lwz	6,0(src)
++	addi	src,src,4
++	stw	6,0(dst)
++	addi	dst,dst,4
++8:
++#ifdef __LITTLE_ENDIAN__
++	bf	28,16f
++	ld	6,0(src)
++	addi	src,src,8
++	std	6,0(dst)
++	addi	dst,dst,8
++16:
++#endif
++	subf	cnt,0,cnt
+ 
++/* Main aligned copy loop. Copies 128 bytes at a time. */
+ L(aligned_copy):
+-	/* Main aligned copy loop. Copies up to 128-bytes at a time. */
+-	.align  4
+-4:
+-	/* check for any 32-byte or 64-byte lumps that are outside of a
+-	   nice 128-byte range.  R8 contains the number of 32-byte
+-	   lumps, so drop this into the CR, and use the SO/EQ bits to help
+-	   handle the 32- or 64- byte lumps.  Then handle the rest with an
+-	   unrolled 128-bytes-at-a-time copy loop. */
+-	mtocrf	1,8
+-	li	6,16	# 16() index
+-	li	7,32	# 32() index
+-	li	8,48	# 48() index
+-
+-L(aligned_32byte):
+-	/* if the SO bit (indicating a 32-byte lump) is not set, move along. */
+-	bns	cr7,L(aligned_64byte)
+-	lxvd2x	6,0,11
+-	lxvd2x	7,11,6
+-	addi	11,11,32
+-	stxvd2x	6,0,10
+-	stxvd2x	7,10,6
+-	addi	10,10,32
+-
+-L(aligned_64byte):
+-	/* if the EQ bit (indicating a 64-byte lump) is not set, move along. */
+-	bne	cr7,L(aligned_128setup)
+-	lxvd2x	6,0,11
+-	lxvd2x	7,11,6
+-	lxvd2x	8,11,7
+-	lxvd2x	9,11,8
+-	addi	11,11,64
+-	stxvd2x	6,0,10
+-	stxvd2x	7,10,6
+-	stxvd2x	8,10,7
+-	stxvd2x	9,10,8
+-	addi	10,10,64
+-
+-L(aligned_128setup):
+-	/* Set up for the 128-byte at a time copy loop.  */
+-	srdi	8,31,7
+-	cmpdi	8,0	# Any 4x lumps left?
+-	beq	3f	# if not, move along.
+-	lxvd2x	6,0,11
+-	lxvd2x	7,11,6
+-	mtctr	8	# otherwise, load the ctr and begin.
+-	li	8,48	# 48() index
++	li	6,16
++	li	7,32
++	li	8,48
++	mtocrf	0x02,cnt
++	srdi	12,cnt,7
++	cmpdi	12,0
++	beq	L(aligned_tail)
++	lxvd2x	6,0,src
++	lxvd2x	7,src,6
++	mtctr	12
+ 	b	L(aligned_128loop)
+ 
++	.align  4
+ L(aligned_128head):
+ 	/* for the 2nd + iteration of this loop. */
+-	lxvd2x	6,0,11
+-	lxvd2x	7,11,6
++	lxvd2x	6,0,src
++	lxvd2x	7,src,6
+ L(aligned_128loop):
+-	lxvd2x	8,11,7
+-	lxvd2x	9,11,8
+-	stxvd2x	6,0,10
+-	addi	11,11,64
+-	stxvd2x	7,10,6
+-	stxvd2x	8,10,7
+-	stxvd2x	9,10,8
+-	lxvd2x	6,0,11
+-	lxvd2x	7,11,6
+-	addi	10,10,64
+-	lxvd2x	8,11,7
+-	lxvd2x	9,11,8
+-	addi	11,11,64
+-	stxvd2x	6,0,10
+-	stxvd2x	7,10,6
+-	stxvd2x	8,10,7
+-	stxvd2x	9,10,8
+-	addi	10,10,64
++	lxvd2x	8,src,7
++	lxvd2x	9,src,8
++	stxvd2x	6,0,dst
++	addi	src,src,64
++	stxvd2x	7,dst,6
++	stxvd2x	8,dst,7
++	stxvd2x	9,dst,8
++	lxvd2x	6,0,src
++	lxvd2x	7,src,6
++	addi	dst,dst,64
++	lxvd2x	8,src,7
++	lxvd2x	9,src,8
++	addi	src,src,64
++	stxvd2x	6,0,dst
++	stxvd2x	7,dst,6
++	stxvd2x	8,dst,7
++	stxvd2x	9,dst,8
++	addi	dst,dst,64
+ 	bdnz	L(aligned_128head)
+ 
+-3:
+-	/* Check for tail bytes.  */
+-	rldicr  0,31,0,60
+-	mtcrf   0x01,31
+-	beq	cr6,0f
+-
+-.L9:
+-	add	3,3,0
+-	add	12,12,0
+-
+-	/*  At this point we have a tail of 0-7 bytes and we know that the
+-	destination is doubleword-aligned.  */
+-4:	/* Copy 4 bytes.  */
+-	bf	29,2f
+-
+-	lwz     6,0(12)
+-	addi    12,12,4
+-	stw     6,0(3)
+-	addi    3,3,4
+-2:	/* Copy 2 bytes.  */
+-	bf	30,1f
+-
+-	lhz     6,0(12)
+-	addi    12,12,2
+-	sth     6,0(3)
+-	addi    3,3,2
+-1:	/* Copy 1 byte.  */
+-	bf	31,0f
+-
+-	lbz	6,0(12)
+-	stb	6,0(3)
+-0:	/* Return original DST pointer.  */
+-	ld	31,-8(1)
+-	ld	3,-16(1)
++L(aligned_tail):
++	mtocrf	0x01,cnt
++	bf	25,32f
++	lxvd2x	6,0,src
++	lxvd2x	7,src,6
++	lxvd2x	8,src,7
++	lxvd2x	9,src,8
++	addi	src,src,64
++	stxvd2x	6,0,dst
++	stxvd2x	7,dst,6
++	stxvd2x	8,dst,7
++	stxvd2x	9,dst,8
++	addi	dst,dst,64
++32:
++	bf	26,16f
++	lxvd2x	6,0,src
++	lxvd2x	7,src,6
++	addi	src,src,32
++	stxvd2x	6,0,dst
++	stxvd2x	7,dst,6
++	addi	dst,dst,32
++16:
++	bf	27,8f
++	lxvd2x	6,0,src
++	addi	src,src,16
++	stxvd2x	6,0,dst
++	addi	dst,dst,16
++8:
++	bf	28,4f
++	ld	6,0(src)
++	addi	src,src,8
++	std     6,0(dst)
++	addi	dst,dst,8
++4:	/* Copies 4~7 bytes.  */
++	bf	29,L(tail2)
++	lwz	6,0(src)
++	stw     6,0(dst)
++	bf      30,L(tail5)
++	lhz     7,4(src)
++	sth     7,4(dst)
++	bflr	31
++	lbz     8,6(src)
++	stb     8,6(dst)
++	/* Return original DST pointer.  */
+ 	blr
+ 
+-	/* Handle copies of 0~31 bytes.  */
+-	.align  4
++
++/* Handle copies of 0~31 bytes.  */
++	.align	4
+ L(copy_LT_32):
+-	cmpldi  cr6,5,8
+-	mr	12,4
+-	mtcrf   0x01,5
++	mr	dst,3
++	cmpldi	cr6,cnt,8
++	mtocrf	0x01,cnt
+ 	ble	cr6,L(copy_LE_8)
+ 
+ 	/* At least 9 bytes to go.  */
+ 	neg	8,4
+-	clrrdi  11,4,2
+-	andi.   0,8,3
+-	cmpldi  cr1,5,16
+-	mr	10,5
++	andi.	0,8,3
++	cmpldi	cr1,cnt,16
+ 	beq	L(copy_LT_32_aligned)
+ 
+-	/* Force 4-bytes alignment for SRC.  */
+-	mtocrf  0x01,0
+-	subf    10,0,5
+-2:	bf	30,1f
+-
+-	lhz	6,0(12)
+-	addi    12,12,2
+-	sth	6,0(3)
+-	addi    3,3,2
+-1:	bf	31,L(end_4bytes_alignment)
+-
+-	lbz	6,0(12)
+-	addi    12,12,1
+-	stb	6,0(3)
+-	addi    3,3,1
++	/* Force 4-byte alignment for SRC.  */
++	mtocrf	0x01,0
++	subf	cnt,0,cnt
++2:
++	bf	30,1f
++	lhz	6,0(src)
++	addi	src,src,2
++	sth	6,0(dst)
++	addi	dst,dst,2
++1:
++	bf	31,L(end_4bytes_alignment)
++	lbz	6,0(src)
++	addi	src,src,1
++	stb	6,0(dst)
++	addi	dst,dst,1
+ 
+-	.align  4
++	.align	4
+ L(end_4bytes_alignment):
+-	cmpldi  cr1,10,16
+-	mtcrf   0x01,10
++	cmpldi	cr1,cnt,16
++	mtocrf	0x01,cnt
+ 
+ L(copy_LT_32_aligned):
+ 	/* At least 6 bytes to go, and SRC is word-aligned.  */
+ 	blt	cr1,8f
+ 
+ 	/* Copy 16 bytes.  */
+-	lwz	6,0(12)
+-	lwz     7,4(12)
+-	stw     6,0(3)
+-	lwz     8,8(12)
+-	stw     7,4(3)
+-	lwz     6,12(12)
+-	addi    12,12,16
+-	stw     8,8(3)
+-	stw     6,12(3)
+-	addi    3,3,16
++	lwz	6,0(src)
++	lwz	7,4(src)
++	stw	6,0(dst)
++	lwz	8,8(src)
++	stw	7,4(dst)
++	lwz	6,12(src)
++	addi	src,src,16
++	stw	8,8(dst)
++	stw	6,12(dst)
++	addi	dst,dst,16
+ 8:	/* Copy 8 bytes.  */
+-	bf	28,4f
++	bf	28,L(tail4)
++	lwz	6,0(src)
++	lwz	7,4(src)
++	addi	src,src,8
++	stw	6,0(dst)
++	stw	7,4(dst)
++	addi	dst,dst,8
++
++	.align	4
++/* Copies 4~7 bytes.  */
++L(tail4):
++	bf	29,L(tail2)
++	lwz	6,0(src)
++	stw	6,0(dst)
++	bf	30,L(tail5)
++	lhz	7,4(src)
++	sth	7,4(dst)
++	bflr	31
++	lbz	8,6(src)
++	stb	8,6(dst)
++	/* Return original DST pointer.  */
++	blr
+ 
+-	lwz     6,0(12)
+-	lwz     7,4(12)
+-	addi    12,12,8
+-	stw     6,0(3)
+-	stw     7,4(3)
+-	addi    3,3,8
+-4:	/* Copy 4 bytes.  */
+-	bf	29,2f
+-
+-	lwz     6,0(12)
+-	addi    12,12,4
+-	stw     6,0(3)
+-	addi    3,3,4
+-2:	/* Copy 2-3 bytes.  */
++	.align	4
++/* Copies 2~3 bytes.  */
++L(tail2):
+ 	bf	30,1f
+-
+-	lhz     6,0(12)
+-	sth     6,0(3)
+-	bf      31,0f
+-	lbz     7,2(12)
+-	stb     7,2(3)
+-	ld	3,-16(1)
++	lhz	6,0(src)
++	sth	6,0(dst)
++	bflr	31
++	lbz	7,2(src)
++	stb	7,2(dst)
+ 	blr
+ 
+-	.align  4
+-1:	/* Copy 1 byte.  */
+-	bf	31,0f
++	.align	4
++L(tail5):
++	bflr	31
++	lbz	6,4(src)
++	stb	6,4(dst)
++	blr
+ 
+-	lbz	6,0(12)
+-	stb	6,0(3)
+-0:	/* Return original DST pointer.  */
+-	ld	3,-16(1)
++	.align	4
++1:
++	bflr	31
++	lbz	6,0(src)
++	stb	6,0(dst)
++	/* Return original DST pointer.  */
+ 	blr
+ 
+-	/* Handles copies of 0~8 bytes.  */
+-	.align  4
++
++/* Handles copies of 0~8 bytes.  */
++	.align	4
+ L(copy_LE_8):
+-	bne	cr6,4f
++	bne	cr6,L(tail4)
+ 
+ 	/* Though we could've used ld/std here, they are still
+ 	slow for unaligned cases.  */
+ 
+-	lwz	6,0(4)
+-	lwz     7,4(4)
+-	stw     6,0(3)
+-	stw     7,4(3)
+-	ld      3,-16(1)      /* Return original DST pointers.  */
++	lwz	6,0(src)
++	lwz	7,4(src)
++	stw	6,0(dst)
++	stw	7,4(dst)
+ 	blr
+ 
+-	.align  4
+-4:	/* Copies 4~7 bytes.  */
+-	bf	29,2b
+ 
+-	lwz	6,0(4)
+-	stw     6,0(3)
+-	bf      30,5f
+-	lhz     7,4(4)
+-	sth     7,4(3)
+-	bf      31,0f
+-	lbz     8,6(4)
+-	stb     8,6(3)
+-	ld	3,-16(1)
+-	blr
+-
+-	.align  4
+-5:	/* Copy 1 byte.  */
+-	bf	31,0f
+-
+-	lbz	6,4(4)
+-	stb	6,4(3)
+-
+-0:	/* Return original DST pointer.  */
+-	ld	3,-16(1)
+-	blr
+-
+-	/* Handle copies of 32+ bytes where DST is aligned (to quadword) but
+-	SRC is not.  Use aligned quadword loads from SRC, shifted to realign
+-	the data, allowing for aligned DST stores.  */
+-	.align  4
++/* Handle copies of 32+ bytes where DST is aligned (to quadword) but
++   SRC is not.	Use aligned quadword loads from SRC, shifted to realign
++   the data, allowing for aligned DST stores.  */
++	.align	4
+ L(copy_GE_32_unaligned):
+-	clrldi  0,0,60	      /* Number of bytes until the 1st
+-			      quadword.  */
+-	andi.   11,3,15       /* Check alignment of DST (against
+-			      quadwords).  */
+-	srdi    9,5,4	      /* Number of full quadwords remaining.  */
++	clrldi	0,0,60	      /* Number of bytes until the 1st dst quadword.  */
++#ifndef __LITTLE_ENDIAN__
++	andi.	10,3,15	      /* Check alignment of DST (against quadwords).  */
++#endif
++	srdi	9,cnt,4	      /* Number of full quadwords remaining.  */
+ 
+ 	beq	L(copy_GE_32_unaligned_cont)
+ 
+-	/* SRC is not quadword aligned, get it aligned.  */
++	/* DST is not quadword aligned, get it aligned.  */
+ 
+-	mtcrf   0x01,0
+-	subf    31,0,5
++	mtocrf	0x01,0
++	subf	cnt,0,cnt
+ 
+ 	/* Vector instructions work best when proper alignment (16-bytes)
+ 	is present.  Move 0~15 bytes as needed to get DST quadword-aligned.  */
+-1:	/* Copy 1 byte.  */
++1:
+ 	bf	31,2f
+-
+-	lbz	6,0(12)
+-	addi    12,12,1
+-	stb	6,0(3)
+-	addi    3,3,1
+-2:	/* Copy 2 bytes.  */
++	lbz	6,0(src)
++	addi	src,src,1
++	stb	6,0(dst)
++	addi	dst,dst,1
++2:
+ 	bf	30,4f
+-
+-	lhz     6,0(12)
+-	addi    12,12,2
+-	sth     6,0(3)
+-	addi    3,3,2
+-4:	/* Copy 4 bytes.  */
++	lhz	6,0(src)
++	addi	src,src,2
++	sth	6,0(dst)
++	addi	dst,dst,2
++4:
+ 	bf	29,8f
+-
+-	lwz     6,0(12)
+-	addi    12,12,4
+-	stw     6,0(3)
+-	addi    3,3,4
+-8:	/* Copy 8 bytes.  */
++	lwz	6,0(src)
++	addi	src,src,4
++	stw	6,0(dst)
++	addi	dst,dst,4
++8:
+ 	bf	28,0f
+-
+-	ld	6,0(12)
+-	addi    12,12,8
+-	std	6,0(3)
+-	addi    3,3,8
++	ld	6,0(src)
++	addi	src,src,8
++	std	6,0(dst)
++	addi	dst,dst,8
+ 0:
+-	clrldi  10,12,60      /* Check alignment of SRC.  */
+-	srdi    9,31,4	      /* Number of full quadwords remaining.  */
++	srdi	9,cnt,4	      /* Number of full quadwords remaining.  */
+ 
+ 	/* The proper alignment is present, it is OK to copy the bytes now.  */
+ L(copy_GE_32_unaligned_cont):
+ 
+ 	/* Setup two indexes to speed up the indexed vector operations.  */
+-	clrldi  11,31,60
+-	li      6,16	      /* Index for 16-bytes offsets.  */
++	clrldi	10,cnt,60
++	li	6,16	      /* Index for 16-bytes offsets.  */
+ 	li	7,32	      /* Index for 32-bytes offsets.  */
+-	cmpldi  cr1,11,0
+-	srdi    8,31,5	      /* Setup the loop counter.  */
+-	mr      10,3
+-	mr      11,12
+-	mtcrf   0x01,9
+-	cmpldi  cr6,9,1
+-	lvsl    5,0,12
+-	lvx     3,0,12
+-	bf      31,L(setup_unaligned_loop)
+-
+-	/* Copy another 16 bytes to align to 32-bytes due to the loop .  */
+-	lvx     4,12,6
+-	vperm   6,3,4,5
+-	addi    11,12,16
+-	addi    10,3,16
+-	stvx    6,0,3
++	cmpldi	cr1,10,0
++	srdi	8,cnt,5	      /* Setup the loop counter.  */
++	mtocrf	0x01,9
++	cmpldi	cr6,9,1
++#ifdef __LITTLE_ENDIAN__
++	lvsr	5,0,src
++#else
++	lvsl	5,0,src
++#endif
++	lvx	3,0,src
++	li	0,0
++	bf	31,L(setup_unaligned_loop)
++
++	/* Copy another 16 bytes to align to 32-bytes due to the loop.  */
++	lvx	4,src,6
++#ifdef __LITTLE_ENDIAN__
++	vperm	6,4,3,5
++#else
++	vperm	6,3,4,5
++#endif
++	addi	src,src,16
++	stvx	6,0,dst
++	addi	dst,dst,16
+ 	vor	3,4,4
++	clrrdi	0,src,60
+ 
+ L(setup_unaligned_loop):
+-	mtctr   8
+-	ble     cr6,L(end_unaligned_loop)
++	mtctr	8
++	ble	cr6,L(end_unaligned_loop)
+ 
+ 	/* Copy 32 bytes at a time using vector instructions.  */
+-	.align  4
++	.align	4
+ L(unaligned_loop):
+ 
+ 	/* Note: vr6/vr10 may contain data that was already copied,
+@@ -444,63 +385,56 @@
+ 	some portions again. This is faster than having unaligned
+ 	vector instructions though.  */
+ 
+-	lvx	4,11,6	      /* vr4 = r11+16.  */
+-	vperm   6,3,4,5	      /* Merge the correctly-aligned portions
+-			      of vr3/vr4 into vr6.  */
+-	lvx	3,11,7	      /* vr3 = r11+32.  */
+-	vperm   10,4,3,5      /* Merge the correctly-aligned portions
+-			      of vr3/vr4 into vr10.  */
+-	addi    11,11,32
+-	stvx    6,0,10
+-	stvx    10,10,6
+-	addi    10,10,32
+-
++	lvx	4,src,6
++#ifdef __LITTLE_ENDIAN__
++	vperm	6,4,3,5
++#else
++	vperm	6,3,4,5
++#endif
++	lvx	3,src,7
++#ifdef __LITTLE_ENDIAN__
++	vperm	10,3,4,5
++#else
++	vperm	10,4,3,5
++#endif
++	addi	src,src,32
++	stvx	6,0,dst
++	stvx	10,dst,6
++	addi	dst,dst,32
+ 	bdnz	L(unaligned_loop)
+ 
+-	.align  4
++	clrrdi	0,src,60
++
++	.align	4
+ L(end_unaligned_loop):
+ 
+ 	/* Check for tail bytes.  */
+-	rldicr  0,31,0,59
+-	mtcrf   0x01,31
+-	beq	cr1,0f
++	mtocrf	0x01,cnt
++	beqlr	cr1
+ 
+-	add	3,3,0
+-	add	12,12,0
++	add	src,src,0
+ 
+ 	/*  We have 1~15 tail bytes to copy, and DST is quadword aligned.  */
+-8:	/* Copy 8 bytes.  */
++	/* Copy 8 bytes.  */
+ 	bf	28,4f
+-
+-	lwz	6,0(12)
+-	lwz	7,4(12)
+-	addi    12,12,8
+-	stw	6,0(3)
+-	stw	7,4(3)
+-	addi    3,3,8
+-4:	/* Copy 4 bytes.  */
+-	bf	29,2f
+-
+-	lwz	6,0(12)
+-	addi    12,12,4
+-	stw	6,0(3)
+-	addi    3,3,4
+-2:	/* Copy 2~3 bytes.  */
+-	bf	30,1f
+-
+-	lhz	6,0(12)
+-	addi    12,12,2
+-	sth	6,0(3)
+-	addi    3,3,2
+-1:	/* Copy 1 byte.  */
+-	bf	31,0f
+-
+-	lbz	6,0(12)
+-	stb	6,0(3)
+-0:	/* Return original DST pointer.  */
+-	ld	31,-8(1)
+-	ld	3,-16(1)
++	lwz	6,0(src)
++	lwz	7,4(src)
++	addi	src,src,8
++	stw	6,0(dst)
++	stw	7,4(dst)
++	addi	dst,dst,8
++4:	/* Copy 4~7 bytes.  */
++	bf	29,L(tail2)
++	lwz	6,0(src)
++	stw	6,0(dst)
++	bf	30,L(tail5)
++	lhz	7,4(src)
++	sth	7,4(dst)
++	bflr	31
++	lbz	8,6(src)
++	stb	8,6(dst)
++	/* Return original DST pointer.  */
+ 	blr
+ 
+-END_GEN_TB (BP_SYM (memcpy),TB_TOCLESS)
++END_GEN_TB (memcpy,TB_TOCLESS)
+ libc_hidden_builtin_def (memcpy)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/mempcpy.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/mempcpy.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/mempcpy.S	2014-05-29 13:04:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/mempcpy.S	2014-05-29 13:04:56.000000000 -0500
+@@ -367,13 +367,21 @@
+ 	mr	11,12
+ 	mtcrf	0x01,9
+ 	cmpldi	cr6,9,1
+-	lvsl	5,0,12
++#ifdef __LITTLE_ENDIAN__
++	lvsr    5,0,12
++#else
++	lvsl    5,0,12
++#endif
+ 	lvx	3,0,12
+ 	bf	31,L(setup_unaligned_loop)
+ 
+ 	/* Copy another 16 bytes to align to 32-bytes due to the loop .  */
+ 	lvx	4,12,6
+-	vperm	6,3,4,5
++#ifdef __LITTLE_ENDIAN__
++	vperm   6,4,3,5
++#else
++	vperm   6,3,4,5
++#endif
+ 	addi	11,12,16
+ 	addi	10,3,16
+ 	stvx	6,0,3
+@@ -393,11 +401,17 @@
+ 	vector instructions though.  */
+ 
+ 	lvx	4,11,6	      /* vr4 = r11+16.  */
+-	vperm	6,3,4,5	      /* Merge the correctly-aligned portions
+-				 of vr3/vr4 into vr6.  */
++#ifdef __LITTLE_ENDIAN__
++	vperm   6,4,3,5
++#else
++	vperm   6,3,4,5
++#endif
+ 	lvx	3,11,7	      /* vr3 = r11+32.  */
+-	vperm	10,4,3,5      /* Merge the correctly-aligned portions
+-				 of vr3/vr4 into vr10.  */
++#ifdef __LITTLE_ENDIAN__
++	vperm   10,3,4,5
++#else
++	vperm   10,4,3,5
++#endif
+ 	addi	11,11,32
+ 	stvx	6,0,10
+ 	stvx	10,10,6
diff --git a/SOURCES/glibc-ppc64le-32.patch b/SOURCES/glibc-ppc64le-32.patch
new file mode 100644
index 0000000..058d53a
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-32.patch
@@ -0,0 +1,272 @@
+# commit 3be87c77d24c4456ccca4034363b6d1814cd0c84
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:47:59 2013 +0930
+# 
+#     PowerPC LE memset
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00104.html
+#     
+#     One of the things I noticed when looking at power7 timing is that rlwimi
+#     is cracked and the two resulting insns have a register dependency.
+#     That makes it a little slower than the equivalent rldimi.
+#     
+#         * sysdeps/powerpc/powerpc64/memset.S: Replace rlwimi with
+#             insrdi.  Formatting.
+#         * sysdeps/powerpc/powerpc64/power4/memset.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power6/memset.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/memset.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power4/memset.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power6/memset.S: Likewise.
+#         * sysdeps/powerpc/powerpc32/power7/memset.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -52,7 +52,7 @@
+ 
+ /* Align to word boundary.  */
+ 	cmplwi	cr5, rLEN, 31
+-	rlwimi	rCHR, rCHR, 8, 16, 23 /* Replicate byte to halfword.  */
++	insrdi	rCHR, rCHR, 8, 48     /* Replicate byte to halfword.  */
+ 	beq+	L(aligned)
+ 	mtcrf	0x01, rMEMP0
+ 	subfic	rALIGN, rALIGN, 4
+@@ -67,7 +67,7 @@
+ /* Handle the case of size < 31.  */
+ L(aligned):
+ 	mtcrf	0x01, rLEN
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32    /* Replicate halfword to word.  */
+ 	ble	cr5, L(medium)
+ /* Align to 32-byte boundary.  */
+ 	andi.	rALIGN, rMEMP, 0x1C
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power6/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -50,7 +50,7 @@
+ 	ble-	cr1, L(small)
+ /* Align to word boundary.  */
+ 	cmplwi	cr5, rLEN, 31
+-	rlwimi	rCHR, rCHR, 8, 16, 23 /* Replicate byte to halfword.  */
++	insrdi	rCHR, rCHR, 8, 48	/* Replicate byte to halfword.  */
+ 	beq+	L(aligned)
+ 	mtcrf	0x01, rMEMP0
+ 	subfic	rALIGN, rALIGN, 4
+@@ -66,7 +66,7 @@
+ /* Handle the case of size < 31.  */
+ L(aligned):
+ 	mtcrf	0x01, rLEN
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ 	ble	cr5, L(medium)
+ /* Align to 32-byte boundary.  */
+ 	andi.	rALIGN, rMEMP, 0x1C
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -37,8 +37,8 @@
+ 	cfi_offset(31,-8)
+ 
+ 	/* Replicate byte to word.  */
+-	rlwimi	4,4,8,16,23
+-	rlwimi	4,4,16,0,15
++	insrdi	4,4,8,48
++	insrdi	4,4,16,32
+ 
+ 	ble	cr6,L(small)	/* If length <= 8, use short copy code.  */
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -73,14 +73,14 @@
+ 
+ /* Align to doubleword boundary.  */
+ 	cmpldi	cr5, rLEN, 31
+-	rlwimi	rCHR, rCHR, 8, 16, 23 /* Replicate byte to halfword.  */
++	insrdi	rCHR, rCHR, 8, 48	/* Replicate byte to halfword.  */
+ 	beq+	L(aligned2)
+ 	mtcrf	0x01, rMEMP0
+ 	subfic	rALIGN, rALIGN, 8
+ 	cror	28,30,31		/* Detect odd word aligned.  */
+ 	add	rMEMP, rMEMP, rALIGN
+ 	sub	rLEN, rLEN, rALIGN
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ 	bt	29, L(g4)
+ /* Process the even word of doubleword.  */
+ 	bf+	31, L(g2)
+@@ -102,14 +102,14 @@
+ 
+ /* Handle the case of size < 31.  */
+ L(aligned2):
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ L(aligned):
+ 	mtcrf	0x01, rLEN
+ 	ble	cr5, L(medium)
+ /* Align to 32-byte boundary.  */
+ 	andi.	rALIGN, rMEMP, 0x18
+ 	subfic	rALIGN, rALIGN, 0x20
+-	insrdi	rCHR,rCHR,32,0 /* Replicate word to double word. */
++	insrdi	rCHR, rCHR, 32, 0	/* Replicate word to double word. */
+ 	beq	L(caligned)
+ 	mtcrf	0x01, rALIGN
+ 	add	rMEMP, rMEMP, rALIGN
+@@ -230,7 +230,7 @@
+ /* Memset of 0-31 bytes.  */
+ 	.align 5
+ L(medium):
+-	insrdi	rCHR,rCHR,32,0 /* Replicate word to double word.  */
++	insrdi	rCHR, rCHR, 32, 0	/* Replicate word to double word.  */
+ 	cmpldi	cr1, rLEN, 16
+ L(medium_tail2):
+ 	add	rMEMP, rMEMP, rLEN
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power4/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -68,14 +68,14 @@
+ 
+ /* Align to doubleword boundary.  */
+ 	cmpldi	cr5, rLEN, 31
+-	rlwimi	rCHR, rCHR, 8, 16, 23 /* Replicate byte to halfword.  */
++	insrdi	rCHR, rCHR, 8, 48	/* Replicate byte to halfword.  */
+ 	beq+	L(aligned2)
+ 	mtcrf	0x01, rMEMP0
+ 	subfic	rALIGN, rALIGN, 8
+ 	cror	28,30,31		/* Detect odd word aligned.  */
+ 	add	rMEMP, rMEMP, rALIGN
+ 	sub	rLEN, rLEN, rALIGN
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ 	bt	29, L(g4)
+ /* Process the even word of doubleword.  */
+ 	bf+	31, L(g2)
+@@ -97,14 +97,14 @@
+ 
+ /* Handle the case of size < 31.  */
+ L(aligned2):
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ L(aligned):
+ 	mtcrf	0x01, rLEN
+ 	ble	cr5, L(medium)
+ /* Align to 32-byte boundary.  */
+ 	andi.	rALIGN, rMEMP, 0x18
+ 	subfic	rALIGN, rALIGN, 0x20
+-	insrdi	rCHR,rCHR,32,0 /* Replicate word to double word. */
++	insrdi	rCHR, rCHR, 32, 0	/* Replicate word to double word. */
+ 	beq	L(caligned)
+ 	mtcrf	0x01, rALIGN
+ 	add	rMEMP, rMEMP, rALIGN
+@@ -164,24 +164,24 @@
+ L(getCacheAligned):
+ 	cmpldi	cr1,rLEN,32
+ 	andi.	rTMP,rMEMP,127
+-	blt		cr1,L(handletail32)
+-	beq		L(cacheAligned)
++	blt	cr1,L(handletail32)
++	beq	L(cacheAligned)
+ 	addi	rMEMP,rMEMP,32
+ 	addi	rLEN,rLEN,-32
+-	std		rCHR,-32(rMEMP)
+-	std		rCHR,-24(rMEMP)
+-	std		rCHR,-16(rMEMP)
+-	std		rCHR,-8(rMEMP)
+-	b		L(getCacheAligned)
++	std	rCHR,-32(rMEMP)
++	std	rCHR,-24(rMEMP)
++	std	rCHR,-16(rMEMP)
++	std	rCHR,-8(rMEMP)
++	b	L(getCacheAligned)
+ 
+ /* Now we are aligned to the cache line and can use dcbz.  */
+ L(cacheAligned):
+ 	cmpld	cr1,rLEN,rCLS
+-	blt		cr1,L(handletail32)
++	blt	cr1,L(handletail32)
+ 	dcbz	0,rMEMP
+ 	subf	rLEN,rCLS,rLEN
+-	add		rMEMP,rMEMP,rCLS
+-	b		L(cacheAligned)
++	add	rMEMP,rMEMP,rCLS
++	b	L(cacheAligned)
+ 
+ /* We are here because the cache line size was set and was not 32-bytes
+    and the remainder (rLEN) is less than the actual cache line size.
+@@ -218,7 +218,7 @@
+ /* Memset of 0-31 bytes.  */
+ 	.align 5
+ L(medium):
+-	insrdi	rCHR,rCHR,32,0 /* Replicate word to double word.  */
++	insrdi	rCHR, rCHR, 32, 0	/* Replicate word to double word.  */
+ 	cmpldi	cr1, rLEN, 16
+ L(medium_tail2):
+ 	add	rMEMP, rMEMP, rLEN
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power6/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -65,14 +65,14 @@
+ 
+ /* Align to doubleword boundary.  */
+ 	cmpldi	cr5, rLEN, 31
+-	rlwimi	rCHR, rCHR, 8, 16, 23 /* Replicate byte to halfword.  */
++	insrdi	rCHR, rCHR, 8, 48	/* Replicate byte to halfword.  */
+ 	beq+	L(aligned2)
+ 	mtcrf	0x01, rMEMP0
+ 	subfic	rALIGN, rALIGN, 8
+ 	cror	28,30,31		/* Detect odd word aligned.  */
+ 	add	rMEMP, rMEMP, rALIGN
+ 	sub	rLEN, rLEN, rALIGN
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ 	bt	29, L(g4)
+ /* Process the even word of doubleword.  */
+ 	bf+	31, L(g2)
+@@ -94,14 +94,14 @@
+ 
+ /* Handle the case of size < 31.  */
+ L(aligned2):
+-	rlwimi	rCHR, rCHR, 16, 0, 15 /* Replicate halfword to word.  */
++	insrdi	rCHR, rCHR, 16, 32	/* Replicate halfword to word.  */
+ L(aligned):
+ 	mtcrf	0x01, rLEN
+ 	ble	cr5, L(medium)
+ /* Align to 32-byte boundary.  */
+ 	andi.	rALIGN, rMEMP, 0x18
+ 	subfic	rALIGN, rALIGN, 0x20
+-	insrdi	rCHR,rCHR,32,0 /* Replicate word to double word. */
++	insrdi	rCHR, rCHR, 32, 0	/* Replicate word to double word. */
+ 	beq	L(caligned)
+ 	mtcrf	0x01, rALIGN
+ 	add	rMEMP, rMEMP, rALIGN
+@@ -362,7 +362,7 @@
+ /* Memset of 0-31 bytes.  */
+ 	.align 5
+ L(medium):
+-	insrdi	rCHR,rCHR,32,0 /* Replicate word to double word.  */
++	insrdi	rCHR, rCHR, 32, 0	/* Replicate word to double word.  */
+ 	cmpldi	cr1, rLEN, 16
+ L(medium_tail2):
+ 	add	rMEMP, rMEMP, rLEN
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memset.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memset.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memset.S	2014-05-29 13:07:41.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memset.S	2014-05-29 13:07:46.000000000 -0500
+@@ -34,8 +34,8 @@
+ 	mr	10,3
+ 
+ 	/* Replicate byte to word.  */
+-	rlwimi	4,4,8,16,23
+-	rlwimi	4,4,16,0,15
++	insrdi	4,4,8,48
++	insrdi	4,4,16,32
+ 	ble	cr6,L(small)	/* If length <= 8, use short copy code.  */
+ 
+ 	neg	0,3
+@@ -323,7 +323,7 @@
+ 	clrldi	0,0,62
+ 	beq	L(medium_aligned)
+ 
+-	/* Force 4-bytes alignment for SRC.  */
++	/* Force 4-bytes alignment for DST.  */
+ 	mtocrf	0x01,0
+ 	subf	5,0,5
+ 1:	/* Copy 1 byte.  */
diff --git a/SOURCES/glibc-ppc64le-33.patch b/SOURCES/glibc-ppc64le-33.patch
new file mode 100644
index 0000000..9da11df
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-33.patch
@@ -0,0 +1,1255 @@
+# commit 466b03933234017473c12dd1d92bda5e7fe49df7
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:48:36 2013 +0930
+# 
+#     PowerPC LE memchr and memrchr
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00105.html
+#     
+#     Like strnlen, memchr and memrchr had a number of defects fixed by this
+#     patch as well as adding little-endian support.  The first one I
+#     noticed was that the entry to the main loop needlessly checked for
+#     "are we done yet?" when we know the size is large enough that we can't
+#     be done.  The second defect I noticed was that the main loop count was
+#     wrong, which in turn meant that the small loop needed to handle an
+#     extra word.  Thirdly, there is nothing to say that the string can't
+#     wrap around zero, except of course that we'd normally hit a segfault
+#     on trying to read from address zero.  Fixing that simplified a number
+#     of places:
+#     
+#     -   /* Are we done already?  */
+#     -   addi    r9,r8,8
+#     -   cmpld   r9,r7
+#     -   bge     L(null)
+#     
+#     becomes
+#     
+#     +   cmpld   r8,r7
+#     +   beqlr
+#     
+#     However, the exit gets an extra test because I test for being on the
+#     last word then if so whether the byte offset is less than the end.
+#     Overall, the change is a win.
+#     
+#     Lastly, memrchr used the wrong cache hint.
+#     
+#         * sysdeps/powerpc/powerpc64/power7/memchr.S: Replace rlwimi with
+#         insrdi.  Make better use of reg selection to speed exit slightly.
+#         Schedule entry path a little better.  Remove useless "are we done"
+#         checks on entry to main loop.  Handle wrapping around zero address.
+#         Correct main loop count.  Handle single left-over word from main
+#         loop inline rather than by using loop_small.  Remove extra word
+#         case in loop_small caused by wrong loop count.  Add little-endian
+#         support.
+#         * sysdeps/powerpc/powerpc32/power7/memchr.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/memrchr.S: Likewise.  Use proper
+#         cache hint.
+#         * sysdeps/powerpc/powerpc32/power7/memrchr.S: Likewise.
+#         * sysdeps/powerpc/powerpc64/power7/rawmemchr.S: Add little-endian
+#         support.  Avoid rlwimi.
+#         * sysdeps/powerpc/powerpc32/power7/rawmemchr.S: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memchr.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memchr.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memchr.S	2014-05-29 13:09:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memchr.S	2014-05-29 13:13:37.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memchr implementation for PowerPC32/POWER7 using cmpb insn.
+-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
++   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+    Contributed by Luis Machado <luisgpm@br.ibm.com>.
+    This file is part of the GNU C Library.
+ 
+@@ -18,116 +18,118 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* int [r3] memchr (char *s [r3], int byte [r4], int size [r5])  */
+ 	.machine  power7
+-ENTRY (BP_SYM (__memchr))
++ENTRY (__memchr)
+ 	CALL_MCOUNT
+ 	dcbt	0,r3
+ 	clrrwi  r8,r3,2
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrwi	r4,r4,8,16    /* Replicate byte to word.  */
+ 	add	r7,r3,r5      /* Calculate the last acceptable address.  */
++	insrwi	r4,r4,16,0
+ 	cmplwi	r5,16
++	li	r9, -1
++	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
++	addi	r7,r7,-1
++#ifdef __LITTLE_ENDIAN__
++	slw	r9,r9,r6
++#else
++	srw	r9,r9,r6
++#endif
+ 	ble	L(small_range)
+ 
+-	cmplw	cr7,r3,r7     /* Compare the starting address (r3) with the
+-				 ending address (r7).  If (r3 >= r7), the size
+-				 passed in is zero or negative.  */
+-	ble	cr7,L(proceed)
+-
+-	li	r7,-1	      /* Artificially set our ending address (r7)
+-				 such that we will exit early. */
+-L(proceed):
+-	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
+-	cmpli	cr6,r6,0      /* cr6 == Do we have padding?  */
+ 	lwz	r12,0(r8)     /* Load word from memory.  */
+-	cmpb	r10,r12,r4    /* Check for BYTE's in WORD1.  */
+-	beq	cr6,L(proceed_no_padding)
+-	slw	r10,r10,r6
+-	srw	r10,r10,r6
+-L(proceed_no_padding):
+-	cmplwi	cr7,r10,0     /* If r10 == 0, no BYTEs have been found.  */
++	cmpb	r3,r12,r4     /* Check for BYTEs in WORD1.  */
++	and	r3,r3,r9
++	clrlwi	r5,r7,30      /* Byte count - 1 in last word.  */
++	clrrwi	r7,r7,2       /* Address of last word.  */
++	cmplwi	cr7,r3,0      /* If r3 == 0, no BYTEs have been found.  */
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,4
+-	cmplw	cr6,r9,r7
+-	bge	cr6,L(null)
+-
+ 	mtcrf   0x01,r8
+ 	/* Are we now aligned to a doubleword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+-
+ 	bt	29,L(loop_setup)
+ 
+ 	/* Handle WORD2 of pair.  */
+ 	lwzu	r12,4(r8)
+-	cmpb	r10,r12,r4
+-	cmplwi	cr7,r10,0
++	cmpb	r3,r12,r4
++	cmplwi	cr7,r3,0
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,4
+-	cmplw	cr6,r9,r7
+-	bge	cr6,L(null)
+-
+ L(loop_setup):
+-	sub	r5,r7,r9
+-	srwi	r6,r5,3	      /* Number of loop iterations.  */
++	/* The last word we want to read in the loop below is the one
++	   containing the last byte of the string, ie. the word at
++	   (s + size - 1) & ~3, or r7.  The first word read is at
++	   r8 + 4, we read 2 * cnt words, so the last word read will
++	   be at r8 + 4 + 8 * cnt - 4.  Solving for cnt gives
++	   cnt = (r7 - r8) / 8  */
++	sub	r6,r7,r8
++	srwi	r6,r6,3	      /* Number of loop iterations.  */
+ 	mtctr	r6            /* Setup the counter.  */
+-	b	L(loop)
+-	/* Main loop to look for BYTE backwards in the string.  Since
+-	   it's a small loop (< 8 instructions), align it to 32-bytes.  */
+-	.p2align  5
++
++	/* Main loop to look for BYTE in the string.  Since
++	   it's a small loop (8 instructions), align it to 32-bytes.  */
++	.align	5
+ L(loop):
+ 	/* Load two words, compare and merge in a
+ 	   single register for speed.  This is an attempt
+ 	   to speed up the byte-checking process for bigger strings.  */
+ 	lwz	r12,4(r8)
+ 	lwzu	r11,8(r8)
+-	cmpb	r10,r12,r4
++	cmpb	r3,r12,r4
+ 	cmpb	r9,r11,r4
+-	or	r5,r9,r10     /* Merge everything in one word.  */
+-	cmplwi	cr7,r5,0
++	or	r6,r9,r3      /* Merge everything in one word.  */
++	cmplwi	cr7,r6,0
+ 	bne	cr7,L(found)
+ 	bdnz	L(loop)
+ 
+-	/* We're here because the counter reached 0, and that means we
+-	   didn't have any matches for BYTE in the whole range.  */
+-	subi	r11,r7,4
+-	cmplw	cr6,r8,r11
+-	blt	cr6,L(loop_small)
+-	b	L(null)
++	/* We may have one more dword to read.  */
++	cmplw	r8,r7
++	beqlr
+ 
++	lwzu	r12,4(r8)
++	cmpb	r3,r12,r4
++	cmplwi	cr6,r3,0
++	bne	cr6,L(done)
++	blr
++
++	.align	4
++L(found):
+ 	/* OK, one (or both) of the words contains BYTE.  Check
+ 	   the first word and decrement the address in case the first
+ 	   word really contains BYTE.  */
+-	.align	4
+-L(found):
+-	cmplwi	cr6,r10,0
++	cmplwi	cr6,r3,0
+ 	addi	r8,r8,-4
+ 	bne	cr6,L(done)
+ 
+ 	/* BYTE must be in the second word.  Adjust the address
+-	   again and move the result of cmpb to r10 so we can calculate the
++	   again and move the result of cmpb to r3 so we can calculate the
+ 	   pointer.  */
+ 
+-	mr	r10,r9
++	mr	r3,r9
+ 	addi	r8,r8,4
+ 
+-	/* r10 has the output of the cmpb instruction, that is, it contains
++	/* r3 has the output of the cmpb instruction, that is, it contains
+ 	   0xff in the same position as BYTE in the original
+ 	   word from the string.  Use that to calculate the pointer.
+ 	   We need to make sure BYTE is *before* the end of the range.  */
+ L(done):
+-	cntlzw	r0,r10	      /* Count leading zeroes before the match.  */
+-	srwi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r3,-1
++	andc    r0,r0,r3
++	popcntw	r0,r0	      /* Count trailing zeros.  */
++#else
++	cntlzw	r0,r3	      /* Count leading zeros before the match.  */
++#endif
++	cmplw	r8,r7         /* Are we on the last word?  */
++	srwi	r0,r0,3	      /* Convert leading/trailing zeros to bytes.  */
+ 	add	r3,r8,r0
+-	cmplw	r3,r7
+-	bge	L(null)
++	cmplw	cr7,r0,r5     /* If on the last dword, check byte offset.  */
++	bnelr
++	blelr	cr7
++	li	r3,0
+ 	blr
+ 
+ 	.align	4
+@@ -139,69 +141,44 @@
+ 	.align	4
+ L(small_range):
+ 	cmplwi	r5,0
+-	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
+-	beq	L(null)       /* This branch is for the cmplwi r5,0 above */
++	beq	L(null)
+ 	lwz	r12,0(r8)     /* Load word from memory.  */
+-	cmplwi	cr6,r6,0      /* cr6 == Do we have padding?  */
+-	cmpb	r10,r12,r4    /* Check for BYTE in DWORD1.  */
+-	beq	cr6,L(small_no_padding)
+-	slw	r10,r10,r6
+-	srw	r10,r10,r6
+-L(small_no_padding):
+-	cmplwi	cr7,r10,0
++	cmpb	r3,r12,r4     /* Check for BYTE in DWORD1.  */
++	and	r3,r3,r9
++	cmplwi	cr7,r3,0
++	clrlwi	r5,r7,30      /* Byte count - 1 in last word.  */
++	clrrwi	r7,r7,2       /* Address of last word.  */
++	cmplw	r8,r7         /* Are we done already?  */
+ 	bne	cr7,L(done)
++	beqlr
+ 
+-	/* Are we done already?  */
+-	addi    r9,r8,4
+-	cmplw	r9,r7
+-	bge	L(null)
+-
+-L(loop_small):                /* loop_small has been unrolled.  */
+ 	lwzu	r12,4(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,4
+-	cmplwi	cr6,r10,0
+-	cmplw	r9,r7
++	cmpb	r3,r12,r4
++	cmplwi	cr6,r3,0
++	cmplw	r8,r7
+ 	bne	cr6,L(done)
+-	bge	L(null)
++	beqlr
+ 
+ 	lwzu	r12,4(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,4
+-	cmplwi	cr6,r10,0
+-	cmplw	r9,r7
++	cmpb	r3,r12,r4
++	cmplwi	cr6,r3,0
++	cmplw	r8,r7
+ 	bne	cr6,L(done)
+-	bge	L(null)
++	beqlr
+ 
+ 	lwzu	r12,4(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,4
+-	cmplwi	cr6,r10,0
+-	cmplw	r9,r7
++	cmpb	r3,r12,r4
++	cmplwi	cr6,r3,0
++	cmplw	r8,r7
+ 	bne	cr6,L(done)
+-	bge	L(null)
++	beqlr
+ 
+ 	lwzu	r12,4(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,4
+-	cmplwi	cr6,r10,0
+-	cmplw	r9,r7
++	cmpb	r3,r12,r4
++	cmplwi	cr6,r3,0
+ 	bne	cr6,L(done)
+-	bge	L(null)
+-
+-	/* For most cases we will never get here.  Under some combinations of
+-	   padding + length there is a leftover word that still needs to be
+-	   checked.  */
+-	lwzu	r12,4(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,4
+-	cmplwi	cr6,r10,0
+-	bne	cr6,L(done)
+-
+-	/* save a branch and exit directly */
+-	li	r3,0
+ 	blr
+ 
+-END (BP_SYM (__memchr))
+-weak_alias (BP_SYM (__memchr), BP_SYM(memchr))
++END (__memchr)
++weak_alias (__memchr, memchr)
+ libc_hidden_builtin_def (memchr)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memrchr.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memrchr.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memrchr.S	2014-05-29 13:09:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/memrchr.S	2014-05-29 13:13:47.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memrchr implementation for PowerPC32/POWER7 using cmpb insn.
+-   Copyright (C) 2010 Free Software Foundation, Inc.
++   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+    Contributed by Luis Machado <luisgpm@br.ibm.com>.
+    This file is part of the GNU C Library.
+ 
+@@ -18,124 +18,136 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5])  */
+ 	.machine  power7
+-ENTRY (BP_SYM (__memrchr))
++ENTRY (__memrchr)
+ 	CALL_MCOUNT
+-	dcbt	0,r3
+-	mr	r7,r3
+-	add	r3,r7,r5      /* Calculate the last acceptable address.  */
+-	cmplw	cr7,r3,r7     /* Is the address equal or less than r3?  */
++	add	r7,r3,r5      /* Calculate the last acceptable address.  */
++	neg	r0,r7
++	addi	r7,r7,-1
++	mr	r10,r3
++	clrrwi	r6,r7,7
++	li	r9,3<<5
++	dcbt	r9,r6,16      /* Stream hint, decreasing addresses.  */
+ 
+ 	/* Replicate BYTE to word.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
+-	bge	cr7,L(proceed)
+-
+-	li	r3,-1	      /* Make r11 the biggest if r4 <= 0.  */
+-L(proceed):
++	insrwi	r4,r4,8,16
++	insrwi	r4,r4,16,0
+ 	li	r6,-4
+-	addi	r9,r3,-1
+-	clrrwi  r8,r9,2
+-	addi	r8,r8,4
+-	neg	r0,r3
++	li	r9,-1
+ 	rlwinm	r0,r0,3,27,28 /* Calculate padding.  */
+-
++	clrrwi	r8,r7,2
++	srw	r9,r9,r0
+ 	cmplwi	r5,16
++	clrrwi	r0,r10,2
+ 	ble	L(small_range)
+ 
+-	lwbrx	r12,r8,r6     /* Load reversed word from memory.  */
+-	cmpb	r10,r12,r4    /* Check for BYTE in WORD1.  */
+-	slw	r10,r10,r0
+-	srw	r10,r10,r0
+-	cmplwi	cr7,r10,0     /* If r10 == 0, no BYTE's have been found.  */
++#ifdef __LITTLE_ENDIAN__
++	lwzx	r12,0,r8
++#else
++	lwbrx	r12,0,r8      /* Load reversed word from memory.  */
++#endif
++	cmpb	r3,r12,r4     /* Check for BYTE in WORD1.  */
++	and	r3,r3,r9
++	cmplwi	cr7,r3,0      /* If r3 == 0, no BYTEs have been found.  */
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,-4
+-	cmplw	cr6,r9,r7
+-	ble	cr6,L(null)
+-
+ 	mtcrf   0x01,r8
+ 	/* Are we now aligned to a doubleword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+-	mr	r8,r9
+-	bt	29,L(loop_setup)
++	bf	29,L(loop_setup)
+ 
+ 	/* Handle WORD2 of pair.  */
++#ifdef __LITTLE_ENDIAN__
++	lwzx	r12,r8,r6
++#else
+ 	lwbrx	r12,r8,r6
+-	cmpb	r10,r12,r4
+-	cmplwi	cr7,r10,0
+-	bne	cr7,L(done)
+-
+-	/* Are we done already?  */
++#endif
+ 	addi	r8,r8,-4
+-	cmplw	cr6,r8,r7
+-	ble	cr6,L(null)
++	cmpb	r3,r12,r4
++	cmplwi	cr7,r3,0
++	bne	cr7,L(done)
+ 
+ L(loop_setup):
+-	li	r0,-8
+-	sub	r5,r8,r7
+-	srwi	r9,r5,3	      /* Number of loop iterations.  */
++	/* The last word we want to read in the loop below is the one
++	   containing the first byte of the string, ie. the word at
++	   s & ~3, or r0.  The first word read is at r8 - 4, we
++	   read 2 * cnt words, so the last word read will be at
++	   r8 - 4 - 8 * cnt + 4.  Solving for cnt gives
++	   cnt = (r8 - r0) / 8  */
++	sub	r5,r8,r0
++	addi	r8,r8,-4
++	srwi	r9,r5,3       /* Number of loop iterations.  */
+ 	mtctr	r9	      /* Setup the counter.  */
+-	b	L(loop)
+-	/* Main loop to look for BYTE backwards in the string.  Since it's a
+-	   small loop (< 8 instructions), align it to 32-bytes.  */
+-	.p2align  5
++
++	/* Main loop to look for BYTE backwards in the string.
++	   FIXME: Investigate whether 32 byte align helps with this
++	   9 instruction loop.  */
++	.align	5
+ L(loop):
+ 	/* Load two words, compare and merge in a
+ 	   single register for speed.  This is an attempt
+ 	   to speed up the byte-checking process for bigger strings.  */
+ 
+-	lwbrx	r12,r8,r6
+-	lwbrx	r11,r8,r0
+-	addi	r8,r8,-4
+-	cmpb	r10,r12,r4
++#ifdef __LITTLE_ENDIAN__
++	lwzx	r12,0,r8
++	lwzx	r11,r8,r6
++#else
++	lwbrx	r12,0,r8
++	lwbrx	r11,r8,r6
++#endif
++	cmpb	r3,r12,r4
+ 	cmpb	r9,r11,r4
+-	or	r5,r9,r10     /* Merge everything in one word.  */
++	or	r5,r9,r3      /* Merge everything in one word.  */
+ 	cmplwi	cr7,r5,0
+ 	bne	cr7,L(found)
+-	addi	r8,r8,-4
++	addi	r8,r8,-8
+ 	bdnz	L(loop)
+-	/* We're here because the counter reached 0, and that means we
+-	   didn't have any matches for BYTE in the whole range.  Just return
+-	   the original range.  */
+-	addi	r9,r8,4
+-	cmplw	cr6,r9,r7
+-	bgt	cr6,L(loop_small)
+-	b	L(null)
+ 
+-	/* OK, one (or both) of the words contains BYTE.  Check
+-	   the first word and decrement the address in case the first
+-	   word really contains BYTE.  */
++	/* We may have one more word to read.  */
++	cmplw	r8,r0
++	bnelr
++
++#ifdef __LITTLE_ENDIAN__
++	lwzx	r12,0,r8
++#else
++	lwbrx	r12,0,r8
++#endif
++	cmpb	r3,r12,r4
++	cmplwi	cr7,r3,0
++	bne	cr7,L(done)
++	blr
++
+ 	.align	4
+ L(found):
+-	cmplwi	cr6,r10,0
+-	addi	r8,r8,4
++	/* OK, one (or both) of the words contains BYTE.  Check
++	   the first word.  */
++	cmplwi	cr6,r3,0
+ 	bne	cr6,L(done)
+ 
+ 	/* BYTE must be in the second word.  Adjust the address
+-	   again and move the result of cmpb to r10 so we can calculate the
++	   again and move the result of cmpb to r3 so we can calculate the
+ 	   pointer.  */
+ 
+-	mr	r10,r9
++	mr	r3,r9
+ 	addi	r8,r8,-4
+ 
+-	/* r10 has the output of the cmpb instruction, that is, it contains
++	/* r3 has the output of the cmpb instruction, that is, it contains
+ 	   0xff in the same position as BYTE in the original
+ 	   word from the string.  Use that to calculate the pointer.
+ 	   We need to make sure BYTE is *before* the end of the
+ 	   range.  */
+ L(done):
+-	cntlzw	r0,r10	      /* Count leading zeroes before the match.  */
+-	srwi	r6,r0,3	      /* Convert leading zeroes to bytes.  */
+-	addi	r0,r6,1
++	cntlzw	r9,r3	      /* Count leading zeros before the match.  */
++	cmplw	r8,r0         /* Are we on the last word?  */
++	srwi	r6,r9,3	      /* Convert leading zeros to bytes.  */
++	addi	r0,r6,-3
+ 	sub	r3,r8,r0
+-	cmplw	r3,r7
+-	blt	L(null)
++	cmplw	cr7,r3,r10
++	bnelr
++	bgelr	cr7
++	li	r3,0
+ 	blr
+ 
+ 	.align	4
+@@ -149,29 +161,36 @@
+ 	cmplwi	r5,0
+ 	beq	L(null)
+ 
+-	lwbrx	r12,r8,r6     /* Load reversed word from memory.  */
+-	cmpb	r10,r12,r4    /* Check for null bytes in WORD1.  */
+-	slw	r10,r10,r0
+-	srw	r10,r10,r0
+-	cmplwi	cr7,r10,0
++#ifdef __LITTLE_ENDIAN__
++	lwzx	r12,0,r8
++#else
++	lwbrx	r12,0,r8      /* Load reversed word from memory.  */
++#endif
++	cmpb	r3,r12,r4     /* Check for BYTE in WORD1.  */
++	and	r3,r3,r9
++	cmplwi	cr7,r3,0
+ 	bne	cr7,L(done)
+ 
++	/* Are we done already?  */
++	cmplw	r8,r0
+ 	addi	r8,r8,-4
+-	cmplw	r8,r7
+-	ble	L(null)
+-	b	L(loop_small)
++	beqlr
+ 
+-	.p2align  5
++	.align	5
+ L(loop_small):
+-	lwbrx	r12,r8,r6
+-	cmpb	r10,r12,r4
+-	cmplwi	cr6,r10,0
+-	bne	cr6,L(done)
++#ifdef __LITTLE_ENDIAN__
++	lwzx	r12,0,r8
++#else
++	lwbrx	r12,0,r8
++#endif
++	cmpb	r3,r12,r4
++	cmplw	r8,r0
++	cmplwi	cr7,r3,0
++	bne	cr7,L(done)
+ 	addi	r8,r8,-4
+-	cmplw	r8,r7
+-	ble	L(null)
+-	b	L(loop_small)
++	bne	L(loop_small)
++	blr
+ 
+-END (BP_SYM (__memrchr))
+-weak_alias (BP_SYM (__memrchr), BP_SYM(memrchr))
++END (__memrchr)
++weak_alias (__memrchr, memrchr)
+ libc_hidden_builtin_def (memrchr)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/rawmemchr.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/rawmemchr.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/rawmemchr.S	2014-05-29 13:09:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power7/rawmemchr.S	2014-05-29 13:09:19.000000000 -0500
+@@ -29,16 +29,21 @@
+ 	clrrwi	r8,r3,2	      /* Align the address to word boundary.  */
+ 
+ 	/* Replicate byte to word.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	rldimi	r4,r4,8,48
++	rldimi	r4,r4,16,32
+ 
+ 	/* Now r4 has a word of c bytes.  */
+ 
+ 	rlwinm	r6,r3,3,27,28 /* Calculate padding.  */
+ 	lwz	r12,0(r8)     /* Load word from memory.  */
+ 	cmpb	r5,r12,r4     /* Compare each byte against c byte.  */
++#ifdef __LITTLE_ENDIAN__
++	srw	r5,r5,r6
++	slw	r5,r5,r6
++#else
+ 	slw	r5,r5,r6      /* Move left to discard ignored bits.  */
+ 	srw	r5,r5,r6      /* Bring the bits back as zeros.  */
++#endif
+ 	cmpwi	cr7,r5,0      /* If r5 == 0, no c bytes have been found.  */
+ 	bne	cr7,L(done)
+ 
+@@ -92,8 +97,14 @@
+ 	   word from the string.  Use that fact to find out what is
+ 	   the position of the byte inside the string.  */
+ L(done):
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r5,-1
++	andc    r0,r0,r5
++	popcntw	r0,r0
++#else
+ 	cntlzw	r0,r5	      /* Count leading zeros before the match.  */
+-	srwi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
++#endif
++	srwi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of the matching char.  */
+ 	blr
+ END (BP_SYM (__rawmemchr))
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memchr.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memchr.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memchr.S	2014-05-29 13:09:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memchr.S	2014-05-29 13:13:57.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memchr implementation for PowerPC64/POWER7 using cmpb insn.
+-   Copyright (C) 2010-2012 Free Software Foundation, Inc.
++   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+    Contributed by Luis Machado <luisgpm@br.ibm.com>.
+    This file is part of the GNU C Library.
+ 
+@@ -18,118 +18,119 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* int [r3] memchr (char *s [r3], int byte [r4], int size [r5])  */
+ 	.machine  power7
+-ENTRY (BP_SYM (__memchr))
+-	CALL_MCOUNT 2
++ENTRY (__memchr)
++	CALL_MCOUNT 3
+ 	dcbt	0,r3
+ 	clrrdi  r8,r3,3
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
+ 	add	r7,r3,r5      /* Calculate the last acceptable address.  */
++	insrdi	r4,r4,16,32
+ 	cmpldi	r5,32
++	li	r9, -1
++	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+ 	insrdi  r4,r4,32,0
++	addi	r7,r7,-1
++#ifdef __LITTLE_ENDIAN__
++	sld	r9,r9,r6
++#else
++	srd	r9,r9,r6
++#endif
+ 	ble	L(small_range)
+ 
+-	cmpld	cr7,r3,r7     /* Compare the starting address (r3) with the
+-				 ending address (r7).  If (r3 >= r7),
+-				 the size passed in was zero or negative.  */
+-	ble	cr7,L(proceed)
+-
+-	li	r7,-1         /* Artificially set our ending address (r7)
+-				 such that we will exit early.  */
+-
+-L(proceed):
+-	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+-	cmpldi	cr6,r6,0      /* cr6 == Do we have padding?  */
+ 	ld	r12,0(r8)     /* Load doubleword from memory.  */
+-	cmpb	r10,r12,r4    /* Check for BYTEs in DWORD1.  */
+-	beq	cr6,L(proceed_no_padding)
+-	sld	r10,r10,r6
+-	srd	r10,r10,r6
+-L(proceed_no_padding):
+-	cmpldi	cr7,r10,0     /* Does r10 indicate we got a hit?  */
++	cmpb	r3,r12,r4     /* Check for BYTEs in DWORD1.  */
++	and	r3,r3,r9
++	clrldi	r5,r7,61      /* Byte count - 1 in last dword.  */
++	clrrdi	r7,r7,3       /* Address of last doubleword.  */
++	cmpldi	cr7,r3,0      /* Does r3 indicate we got a hit?  */
+ 	bne	cr7,L(done)
+ 
+-	/* See if we are at the last acceptable address yet.  */
+-	addi	r9,r8,8
+-	cmpld	cr6,r9,r7
+-	bge	cr6,L(null)
+-
+ 	mtcrf   0x01,r8
+ 	/* Are we now aligned to a quadword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+-
+ 	bt	28,L(loop_setup)
+ 
+ 	/* Handle DWORD2 of pair.  */
+ 	ldu	r12,8(r8)
+-	cmpb	r10,r12,r4
+-	cmpldi	cr7,r10,0
++	cmpb	r3,r12,r4
++	cmpldi	cr7,r3,0
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,8
+-	cmpld	cr6,r9,r7
+-	bge	cr6,L(null)
+-
+ L(loop_setup):
+-	sub	r5,r7,r9
+-	srdi	r6,r5,4	      /* Number of loop iterations.  */
++	/* The last dword we want to read in the loop below is the one
++	   containing the last byte of the string, ie. the dword at
++	   (s + size - 1) & ~7, or r7.  The first dword read is at
++	   r8 + 8, we read 2 * cnt dwords, so the last dword read will
++	   be at r8 + 8 + 16 * cnt - 8.  Solving for cnt gives
++	   cnt = (r7 - r8) / 16  */
++	sub	r6,r7,r8
++	srdi	r6,r6,4	      /* Number of loop iterations.  */
+ 	mtctr	r6            /* Setup the counter.  */
+-	b	L(loop)
+-	/* Main loop to look for BYTE backwards in the string.  Since
+-	   it's a small loop (< 8 instructions), align it to 32-bytes.  */
+-	.p2align  5
++
++	/* Main loop to look for BYTE in the string.  Since
++	   it's a small loop (8 instructions), align it to 32-bytes.  */
++	.align	5
+ L(loop):
+ 	/* Load two doublewords, compare and merge in a
+ 	   single register for speed.  This is an attempt
+ 	   to speed up the byte-checking process for bigger strings.  */
+ 	ld	r12,8(r8)
+ 	ldu	r11,16(r8)
+-	cmpb	r10,r12,r4
++	cmpb	r3,r12,r4
+ 	cmpb	r9,r11,r4
+-	or	r5,r9,r10     /* Merge everything in one doubleword.  */
+-	cmpldi	cr7,r5,0
++	or	r6,r9,r3      /* Merge everything in one doubleword.  */
++	cmpldi	cr7,r6,0
+ 	bne	cr7,L(found)
+ 	bdnz	L(loop)
+ 
+-	/* We're here because the counter reached 0, and that means we
+-	   didn't have any matches for BYTE in the whole range.  */
+-	subi	r11,r7,8
+-	cmpld	cr6,r8,r11
+-	blt	cr6,L(loop_small)
+-	b	L(null)
++	/* We may have one more dword to read.  */
++	cmpld	r8,r7
++	beqlr
+ 
++	ldu	r12,8(r8)
++	cmpb	r3,r12,r4
++	cmpldi	cr6,r3,0
++	bne	cr6,L(done)
++	blr
++
++	.align	4
++L(found):
+ 	/* OK, one (or both) of the doublewords contains BYTE.  Check
+ 	   the first doubleword and decrement the address in case the first
+ 	   doubleword really contains BYTE.  */
+-	.align	4
+-L(found):
+-	cmpldi	cr6,r10,0
++	cmpldi	cr6,r3,0
+ 	addi	r8,r8,-8
+ 	bne	cr6,L(done)
+ 
+ 	/* BYTE must be in the second doubleword.  Adjust the address
+-	   again and move the result of cmpb to r10 so we can calculate the
++	   again and move the result of cmpb to r3 so we can calculate the
+ 	   pointer.  */
+ 
+-	mr	r10,r9
++	mr	r3,r9
+ 	addi	r8,r8,8
+ 
+-	/* r10 has the output of the cmpb instruction, that is, it contains
++	/* r3 has the output of the cmpb instruction, that is, it contains
+ 	   0xff in the same position as BYTE in the original
+ 	   doubleword from the string.  Use that to calculate the pointer.
+ 	   We need to make sure BYTE is *before* the end of the range.  */
+ L(done):
+-	cntlzd	r0,r10	      /* Count leading zeroes before the match.  */
+-	srdi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r3,-1
++	andc    r0,r0,r3
++	popcntd	r0,r0	      /* Count trailing zeros.  */
++#else
++	cntlzd	r0,r3	      /* Count leading zeros before the match.  */
++#endif
++	cmpld	r8,r7         /* Are we on the last dword?  */
++	srdi	r0,r0,3	      /* Convert leading/trailing zeros to bytes.  */
+ 	add	r3,r8,r0
+-	cmpld	r3,r7
+-	bge	L(null)
++	cmpld	cr7,r0,r5     /* If on the last dword, check byte offset.  */
++	bnelr
++	blelr	cr7
++	li	r3,0
+ 	blr
+ 
+ 	.align	4
+@@ -141,67 +142,44 @@
+ 	.align	4
+ L(small_range):
+ 	cmpldi	r5,0
+-	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+-	beq	L(null)       /* This branch is for the cmpldi r5,0 above.  */
++	beq	L(null)
+ 	ld	r12,0(r8)     /* Load word from memory.  */
+-	cmpldi	cr6,r6,0      /* cr6 == Do we have padding?  */
+-	cmpb	r10,r12,r4    /* Check for BYTE in DWORD1.  */
+-			      /* If no padding, skip the shifts.  */
+-	beq	cr6,L(small_no_padding)
+-	sld	r10,r10,r6
+-	srd	r10,r10,r6
+-L(small_no_padding):
+-	cmpldi	cr7,r10,0
++	cmpb	r3,r12,r4     /* Check for BYTE in DWORD1.  */
++	and	r3,r3,r9
++	cmpldi	cr7,r3,0
++	clrldi	r5,r7,61      /* Byte count - 1 in last dword.  */
++	clrrdi	r7,r7,3       /* Address of last doubleword.  */
++	cmpld	r8,r7         /* Are we done already?  */
+ 	bne	cr7,L(done)
+-
+-	/* Are we done already?  */
+-	addi    r9,r8,8
+-	cmpld	r9,r7
+-	bge	L(null)
+-	/* If we're not done, drop through into loop_small.  */
+-
+-L(loop_small):                /* loop_small has been unrolled.  */
+-	ldu	r12,8(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,8
+-	cmpldi	cr6,r10,0
+-	cmpld	r9,r7
+-	bne	cr6,L(done)   /* Found something.  */
+-	bge	L(null)       /* Hit end of string (length).  */
++	beqlr
+ 
+ 	ldu	r12,8(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,8
+-	cmpldi	cr6,r10,0
+-	cmpld	r9,r7
++	cmpb	r3,r12,r4
++	cmpldi	cr6,r3,0
++	cmpld	r8,r7
+ 	bne	cr6,L(done)   /* Found something.  */
+-	bge	L(null)
++	beqlr		      /* Hit end of string (length).  */
+ 
+ 	ldu	r12,8(r8)
+-	subi	r11,r7,8
+-	cmpb	r10,r12,r4
+-	cmpldi	cr6,r10,0
+-	ori	r2,r2,0       /* Force a dispatch group.  */
++	cmpb	r3,r12,r4
++	cmpldi	cr6,r3,0
++	cmpld	r8,r7
+ 	bne	cr6,L(done)
++	beqlr
+ 
+-	cmpld	r8,r11        /* At end of range?  */
+-	bge	L(null)
+-
+-	/* For most cases we will never get here.  Under some combinations of
+-	   padding + length there is a leftover double that still needs to be
+-	   checked.  */
+-	ldu	r12,8(r8)
+-	cmpb	r10,r12,r4
+-	addi	r9,r8,8
+-	cmpldi	cr6,r10,0
+-	cmpld	r9,r7
+-	bne	cr6,L(done)   /* Found something.  */
++	ldu	r12,8(r8)
++	cmpb	r3,r12,r4
++	cmpldi	cr6,r3,0
++	cmpld	r8,r7
++	bne	cr6,L(done)
++	beqlr
+ 
+-	/* Save a branch and exit directly.  */
+-	li	r3,0
++	ldu	r12,8(r8)
++	cmpb	r3,r12,r4
++	cmpldi	cr6,r3,0
++	bne	cr6,L(done)
+ 	blr
+ 
+-
+-END (BP_SYM (__memchr))
+-weak_alias (BP_SYM (__memchr), BP_SYM(memchr))
++END (__memchr)
++weak_alias (__memchr, memchr)
+ libc_hidden_builtin_def (memchr)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memrchr.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memrchr.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memrchr.S	2014-05-29 13:09:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/memrchr.S	2014-05-29 13:14:06.000000000 -0500
+@@ -1,5 +1,5 @@
+ /* Optimized memrchr implementation for PowerPC64/POWER7 using cmpb insn.
+-   Copyright (C) 2010 Free Software Foundation, Inc.
++   Copyright (C) 2010-2014 Free Software Foundation, Inc.
+    Contributed by Luis Machado <luisgpm@br.ibm.com>.
+    This file is part of the GNU C Library.
+ 
+@@ -18,125 +18,137 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <sysdep.h>
+-#include <bp-sym.h>
+-#include <bp-asm.h>
+ 
+ /* int [r3] memrchr (char *s [r3], int byte [r4], int size [r5])  */
+ 	.machine  power7
+-ENTRY (BP_SYM (__memrchr))
+-	CALL_MCOUNT
+-	dcbt	0,r3
+-	mr	r7,r3
+-	add	r3,r7,r5      /* Calculate the last acceptable address.  */
+-	cmpld	cr7,r3,r7     /* Is the address equal or less than r3?  */
++ENTRY (__memrchr)
++	CALL_MCOUNT 3
++	add	r7,r3,r5      /* Calculate the last acceptable address.  */
++	neg	r0,r7
++	addi	r7,r7,-1
++	mr	r10,r3
++	clrrdi	r6,r7,7
++	li	r9,3<<5
++	dcbt	r9,r6,8       /* Stream hint, decreasing addresses.  */
+ 
+ 	/* Replicate BYTE to doubleword.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
++	insrdi	r4,r4,16,32
+ 	insrdi  r4,r4,32,0
+-	bge	cr7,L(proceed)
+-
+-	li	r3,-1	      /* Make r11 the biggest if r4 <= 0.  */
+-L(proceed):
+ 	li	r6,-8
+-	addi	r9,r3,-1
+-	clrrdi  r8,r9,3
+-	addi	r8,r8,8
+-	neg	r0,r3
++	li	r9,-1
+ 	rlwinm	r0,r0,3,26,28 /* Calculate padding.  */
+-
++	clrrdi	r8,r7,3
++	srd	r9,r9,r0
+ 	cmpldi	r5,32
++	clrrdi	r0,r10,3
+ 	ble	L(small_range)
+ 
+-	ldbrx	r12,r8,r6     /* Load reversed doubleword from memory.  */
+-	cmpb	r10,r12,r4    /* Check for BYTE in DWORD1.  */
+-	sld	r10,r10,r0
+-	srd	r10,r10,r0
+-	cmpldi	cr7,r10,0     /* If r10 == 0, no BYTE's have been found.  */
++#ifdef __LITTLE_ENDIAN__
++	ldx	r12,0,r8
++#else
++	ldbrx	r12,0,r8      /* Load reversed doubleword from memory.  */
++#endif
++	cmpb	r3,r12,r4     /* Check for BYTE in DWORD1.  */
++	and	r3,r3,r9
++	cmpldi	cr7,r3,0      /* If r3 == 0, no BYTEs have been found.  */
+ 	bne	cr7,L(done)
+ 
+-	/* Are we done already?  */
+-	addi	r9,r8,-8
+-	cmpld	cr6,r9,r7
+-	ble	cr6,L(null)
+-
+ 	mtcrf   0x01,r8
+-	/* Are we now aligned to a doubleword boundary?  If so, skip to
++	/* Are we now aligned to a quadword boundary?  If so, skip to
+ 	   the main loop.  Otherwise, go through the alignment code.  */
+-	mr	r8,r9
+-	bt	28,L(loop_setup)
++	bf	28,L(loop_setup)
+ 
+ 	/* Handle DWORD2 of pair.  */
++#ifdef __LITTLE_ENDIAN__
++	ldx	r12,r8,r6
++#else
+ 	ldbrx	r12,r8,r6
+-	cmpb	r10,r12,r4
+-	cmpldi	cr7,r10,0
+-	bne	cr7,L(done)
+-
+-	/* Are we done already.  */
++#endif
+ 	addi	r8,r8,-8
+-	cmpld	cr6,r8,r7
+-	ble	cr6,L(null)
++	cmpb	r3,r12,r4
++	cmpldi	cr7,r3,0
++	bne	cr7,L(done)
+ 
+ L(loop_setup):
+-	li	r0,-16
+-	sub	r5,r8,r7
+-	srdi	r9,r5,4	      /* Number of loop iterations.  */
++	/* The last dword we want to read in the loop below is the one
++	   containing the first byte of the string, ie. the dword at
++	   s & ~7, or r0.  The first dword read is at r8 - 8, we
++	   read 2 * cnt dwords, so the last dword read will be at
++	   r8 - 8 - 16 * cnt + 8.  Solving for cnt gives
++	   cnt = (r8 - r0) / 16  */
++	sub	r5,r8,r0
++	addi	r8,r8,-8
++	srdi	r9,r5,4       /* Number of loop iterations.  */
+ 	mtctr	r9	      /* Setup the counter.  */
+-	b	L(loop)
+-	/* Main loop to look for BYTE backwards in the string.  Since it's a
+-	   small loop (< 8 instructions), align it to 32-bytes.  */
+-	.p2align  5
++
++	/* Main loop to look for BYTE backwards in the string.
++	   FIXME: Investigate whether 32 byte align helps with this
++	   9 instruction loop.  */
++	.align	5
+ L(loop):
+ 	/* Load two doublewords, compare and merge in a
+ 	   single register for speed.  This is an attempt
+ 	   to speed up the byte-checking process for bigger strings.  */
+ 
+-	ldbrx	r12,r8,r6
+-	ldbrx	r11,r8,r0
+-	addi	r8,r8,-8
+-	cmpb	r10,r12,r4
++#ifdef __LITTLE_ENDIAN__
++	ldx	r12,0,r8
++	ldx	r11,r8,r6
++#else
++	ldbrx	r12,0,r8
++	ldbrx	r11,r8,r6
++#endif
++	cmpb	r3,r12,r4
+ 	cmpb	r9,r11,r4
+-	or	r5,r9,r10     /* Merge everything in one doubleword.  */
++	or	r5,r9,r3      /* Merge everything in one doubleword.  */
+ 	cmpldi	cr7,r5,0
+ 	bne	cr7,L(found)
+-	addi	r8,r8,-8
++	addi	r8,r8,-16
+ 	bdnz	L(loop)
+-	/* We're here because the counter reached 0, and that means we
+-	   didn't have any matches for BYTE in the whole range.  Just return
+-	   the original range.  */
+-	addi	r9,r8,8
+-	cmpld	cr6,r9,r7
+-	bgt	cr6,L(loop_small)
+-	b	L(null)
+-
+-	/* OK, one (or both) of the words contains BYTE.  Check
+-	   the first word and decrement the address in case the first
+-	   word really contains BYTE.  */
++
++	/* We may have one more word to read.  */
++	cmpld	r8,r0
++	bnelr
++
++#ifdef __LITTLE_ENDIAN__
++	ldx	r12,0,r8
++#else
++	ldbrx	r12,0,r8
++#endif
++	cmpb	r3,r12,r4
++	cmpldi	cr7,r3,0
++	bne	cr7,L(done)
++	blr
++
+ 	.align	4
+ L(found):
+-	cmpldi	cr6,r10,0
+-	addi	r8,r8,8
++	/* OK, one (or both) of the dwords contains BYTE.  Check
++	   the first dword.  */
++	cmpldi	cr6,r3,0
+ 	bne	cr6,L(done)
+ 
+ 	/* BYTE must be in the second word.  Adjust the address
+-	   again and move the result of cmpb to r10 so we can calculate the
++	   again and move the result of cmpb to r3 so we can calculate the
+ 	   pointer.  */
+ 
+-	mr	r10,r9
++	mr	r3,r9
+ 	addi	r8,r8,-8
+ 
+-	/* r10 has the output of the cmpb instruction, that is, it contains
+-	   0xff in the same position as the BYTE in the original
++	/* r3 has the output of the cmpb instruction, that is, it contains
++	   0xff in the same position as BYTE in the original
+ 	   word from the string.  Use that to calculate the pointer.
+ 	   We need to make sure BYTE is *before* the end of the
+ 	   range.  */
+ L(done):
+-	cntlzd	r0,r10	      /* Count leading zeroes before the match.  */
+-	srdi	r6,r0,3	      /* Convert leading zeroes to bytes.  */
+-	addi	r0,r6,1
++	cntlzd	r9,r3	      /* Count leading zeros before the match.  */
++	cmpld	r8,r0         /* Are we on the last word?  */
++	srdi	r6,r9,3	      /* Convert leading zeros to bytes.  */
++	addi	r0,r6,-7
+ 	sub	r3,r8,r0
+-	cmpld	r3,r7
+-	blt	L(null)
++	cmpld	cr7,r3,r10
++	bnelr
++	bgelr	cr7
++	li	r3,0
+ 	blr
+ 
+ 	.align	4
+@@ -150,30 +162,36 @@
+ 	cmpldi	r5,0
+ 	beq	L(null)
+ 
+-	ldbrx	r12,r8,r6     /* Load reversed doubleword from memory.  */
+-	cmpb	r10,r12,r4    /* Check for BYTE in DWORD1.  */
+-	sld	r10,r10,r0
+-	srd	r10,r10,r0
+-	cmpldi	cr7,r10,0
++#ifdef __LITTLE_ENDIAN__
++	ldx	r12,0,r8
++#else
++	ldbrx	r12,0,r8      /* Load reversed doubleword from memory.  */
++#endif
++	cmpb	r3,r12,r4     /* Check for BYTE in DWORD1.  */
++	and	r3,r3,r9
++	cmpldi	cr7,r3,0
+ 	bne	cr7,L(done)
+ 
+ 	/* Are we done already?  */
++	cmpld	r8,r0
+ 	addi	r8,r8,-8
+-	cmpld	r8,r7
+-	ble	L(null)
+-	b	L(loop_small)
++	beqlr
+ 
+-	.p2align  5
++	.align	5
+ L(loop_small):
+-	ldbrx	r12,r8,r6
+-	cmpb	r10,r12,r4
+-	cmpldi	cr6,r10,0
+-	bne	cr6,L(done)
++#ifdef __LITTLE_ENDIAN__
++	ldx	r12,0,r8
++#else
++	ldbrx	r12,0,r8
++#endif
++	cmpb	r3,r12,r4
++	cmpld	r8,r0
++	cmpldi	cr7,r3,0
++	bne	cr7,L(done)
+ 	addi	r8,r8,-8
+-	cmpld	r8,r7
+-	ble	L(null)
+-	b	L(loop_small)
++	bne	L(loop_small)
++	blr
+ 
+-END (BP_SYM (__memrchr))
+-weak_alias (BP_SYM (__memrchr), BP_SYM(memrchr))
++END (__memrchr)
++weak_alias (__memrchr, memrchr)
+ libc_hidden_builtin_def (memrchr)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/rawmemchr.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/rawmemchr.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/rawmemchr.S	2014-05-29 13:09:17.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/power7/rawmemchr.S	2014-05-29 13:09:19.000000000 -0500
+@@ -29,8 +29,8 @@
+ 	clrrdi	r8,r3,3	      /* Align the address to doubleword boundary.  */
+ 
+ 	/* Replicate byte to doubleword.  */
+-	rlwimi	r4,r4,8,16,23
+-	rlwimi	r4,r4,16,0,15
++	insrdi	r4,r4,8,48
++	insrdi	r4,r4,16,32
+ 	insrdi	r4,r4,32,0
+ 
+ 	/* Now r4 has a doubleword of c bytes.  */
+@@ -38,8 +38,13 @@
+ 	rlwinm	r6,r3,3,26,28 /* Calculate padding.  */
+ 	ld	r12,0(r8)     /* Load doubleword from memory.  */
+ 	cmpb	r5,r12,r4     /* Compare each byte against c byte.  */
++#ifdef __LITTLE_ENDIAN__
++	srd	r5,r5,r6
++	sld	r5,r5,r6
++#else
+ 	sld	r5,r5,r6      /* Move left to discard ignored bits.  */
+ 	srd	r5,r5,r6      /* Bring the bits back as zeros.  */
++#endif
+ 	cmpdi	cr7,r5,0      /* If r5 == 0, no c bytes have been found.  */
+ 	bne	cr7,L(done)
+ 
+@@ -93,8 +98,14 @@
+ 	   doubleword from the string.  Use that fact to find out what is
+ 	   the position of the byte inside the string.  */
+ L(done):
++#ifdef __LITTLE_ENDIAN__
++	addi    r0,r5,-1
++	andc    r0,r0,r5
++	popcntd	r0,r0	      /* Count trailing zeros.  */
++#else
+ 	cntlzd	r0,r5	      /* Count leading zeros before the match.  */
+-	srdi	r0,r0,3	      /* Convert leading zeroes to bytes.  */
++#endif
++	srdi	r0,r0,3	      /* Convert leading zeros to bytes.  */
+ 	add	r3,r8,r0      /* Return address of the matching char.  */
+ 	blr
+ END (BP_SYM (__rawmemchr))
diff --git a/SOURCES/glibc-ppc64le-34.patch b/SOURCES/glibc-ppc64le-34.patch
new file mode 100644
index 0000000..ef6362d
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-34.patch
@@ -0,0 +1,68 @@
+# commit 8f9ebb08af1368962d9f24c4cfacb55cf8eee560
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Thu Oct 3 14:03:03 2013 +0930
+# 
+#     PowerPC LE configury
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00096.html
+#     
+#     This adds the basic configury bits for powerpc64le and powerpcle.
+#     
+#         * configure.in: Map powerpc64le and powerpcle to base_machine/machine.
+#         * configure: Regenerate.
+#         * nptl/shlib-versions: Powerpc*le starts at 2.18.
+#         * shlib-versions: Likewise.
+# 
+# commit 0ff8246327401ae8779e2697d5c7348611cdbf8a
+# Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+# Date:   Tue Feb 4 09:49:08 2014 -0200
+# 
+#     PowerPC: Change powerpc64le start ABI to 2.17.
+# 
+diff -urN glibc-2.17-c758a686/configure glibc-2.17-c758a686/configure
+--- glibc-2.17-c758a686/configure	2014-05-26 19:52:31.000000000 -0500
++++ glibc-2.17-c758a686/configure	2014-05-26 19:54:13.000000000 -0500
+@@ -4195,8 +4195,8 @@
+ # base_machine, we don't change it.
+ test -n "$base_machine" || case "$machine" in
+ i[34567]86)	base_machine=i386 machine=i386/$machine ;;
+-powerpc)	base_machine=powerpc machine=powerpc/powerpc32 ;;
+-powerpc64)	base_machine=powerpc machine=powerpc/powerpc64 ;;
++powerpc64*)	base_machine=powerpc machine=powerpc/powerpc64 ;;
++powerpc*)	base_machine=powerpc machine=powerpc/powerpc32 ;;
+ s390)           base_machine=s390 machine=s390/s390-32 ;;
+ s390x)          base_machine=s390 machine=s390/s390-64 ;;
+ sh3*)		base_machine=sh machine=sh/sh3 ;;
+diff -urN glibc-2.17-c758a686/configure.in glibc-2.17-c758a686/configure.in
+--- glibc-2.17-c758a686/configure.in	2014-05-26 19:52:30.000000000 -0500
++++ glibc-2.17-c758a686/configure.in	2014-05-26 19:54:45.000000000 -0500
+@@ -549,8 +549,8 @@
+ # base_machine, we don't change it.
+ test -n "$base_machine" || case "$machine" in
+ i[34567]86)	base_machine=i386 machine=i386/$machine ;;
+-powerpc)	base_machine=powerpc machine=powerpc/powerpc32 ;;
+-powerpc64)	base_machine=powerpc machine=powerpc/powerpc64 ;;
++powerpc64*)	base_machine=powerpc machine=powerpc/powerpc64 ;;
++powerpc*)	base_machine=powerpc machine=powerpc/powerpc32 ;;
+ s390)           base_machine=s390 machine=s390/s390-32 ;;
+ s390x)          base_machine=s390 machine=s390/s390-64 ;;
+ sh3*)		base_machine=sh machine=sh/sh3 ;;
+diff -urN glibc-2.17-c758a686/nptl/shlib-versions glibc-2.17-c758a686/nptl/shlib-versions
+--- glibc-2.17-c758a686/nptl/shlib-versions	2014-05-26 19:52:31.000000000 -0500
++++ glibc-2.17-c758a686/nptl/shlib-versions	2014-05-26 19:53:31.000000000 -0500
+@@ -2,4 +2,5 @@
+ sh.*-.*-linux.*		libpthread=0		GLIBC_2.2
+ s390x-.*-linux.*	libpthread=0		GLIBC_2.2
+ powerpc64-.*-linux.*	libpthread=0		GLIBC_2.3
++powerpc.*le-.*-linux.*	libpthread=0		GLIBC_2.17
+ .*-.*-linux.*		libpthread=0
+diff -urN glibc-2.17-c758a686/shlib-versions glibc-2.17-c758a686/shlib-versions
+--- glibc-2.17-c758a686/shlib-versions	2014-05-26 19:52:31.000000000 -0500
++++ glibc-2.17-c758a686/shlib-versions	2014-05-26 19:53:31.000000000 -0500
+@@ -23,6 +23,7 @@
+ 
+ s390x-.*-linux.*        DEFAULT			GLIBC_2.2
+ powerpc64-.*-linux.*	DEFAULT			GLIBC_2.3
++powerpc.*le-.*-linux.*	DEFAULT			GLIBC_2.17
+ .*-.*-gnu-gnu.*		DEFAULT			GLIBC_2.2.6
+ 
+ # Configuration		ABI			Identifier for ABI data files
diff --git a/SOURCES/glibc-ppc64le-35.patch b/SOURCES/glibc-ppc64le-35.patch
new file mode 100644
index 0000000..17434b9
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-35.patch
@@ -0,0 +1,106 @@
+# commit 5162e7dd96efcd9b45c1dc1471a964d45278b1e1
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:41:52 2013 -0600
+# 
+#     PowerPC64: Fix incorrect CFI in *context routines
+#     
+#     The context established by "makecontext" has a link register pointing
+#     back to an error path within the makecontext routine.  This is currently
+#     covered by the CFI FDE for makecontext itself, which is simply wrong
+#     for the stack frame *inside* the context.  When trying to unwind (e.g.
+#     doing a backtrace) in a routine inside a context created by makecontext,
+#     this can lead to uninitialized stack slots being accessed, causing the
+#     unwinder to crash in the worst case.
+#     
+#     Similarly, during parts of the "setcontext" routine, when the stack
+#     pointer has already been switched to point to the new context, the
+#     address range is still covered by the CFI FDE for setcontext.  When
+#     trying to unwind in that situation (e.g. backtrace from an async
+#     signal handler for profiling), it is again possible that the unwinder
+#     crashes.
+#     
+#     Theses are all problems in existing code, but the changes in stack
+#     frame layout appear to make the "worst case" much more likely in
+#     the ELFv2 ABI context.  This causes regressions e.g. in the libgo
+#     testsuite on ELFv2.
+#     
+#     This patch fixes this by ending the makecontext/setcontext FDEs
+#     before those problematic parts of the assembler, similar to what
+#     is already done on other platforms.   This fixes the libgo
+#     regression on ELFv2.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S	2014-05-29 13:16:16.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S	2014-05-29 13:16:17.000000000 -0500
+@@ -129,6 +129,10 @@
+      the cpu link stack used to predict blr return addresses.  */
+   bcl	20,31,L(gotexitcodeaddr);
+ 
++  /* End FDE now, because while executing on the context's stack
++     the unwind info would be wrong otherwise.  */
++  cfi_endproc
++
+ 	/* This is the helper code which gets called if a function which
+ 	   is registered with 'makecontext' returns.  In this case we
+ 	   have to install the context listed in the uc_link element of
+@@ -157,6 +161,11 @@
+ #endif
+ 	b    L(do_exit)
+ 
++  /* Re-establish FDE for the rest of the actual makecontext routine.  */
++  cfi_startproc
++  cfi_offset (lr, FRAME_LR_SAVE)
++  cfi_adjust_cfa_offset (128)
++
+   /* The address of the exit code is in the link register.  Store the lr
+      in the ucontext as LNK so the target function will return to our
+      exit code.  */
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S	2014-05-29 13:16:16.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S	2014-05-29 13:16:17.000000000 -0500
+@@ -129,6 +129,10 @@
+   lfd  fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r31)
+   lfd  fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r31)
+ 
++  /* End FDE now, because the unwind info would be wrong while
++     we're reloading registers to switch to the new context.  */
++  cfi_endproc
++
+   ld   r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r31)
+   ld   r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r31)
+   mtlr r0
+@@ -177,6 +181,11 @@
+   ld   r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r31)
+   bctr
+ 
++  /* Re-establish FDE for the rest of the actual setcontext routine.  */
++  cfi_startproc
++  cfi_offset (lr, FRAME_LR_SAVE)
++  cfi_adjust_cfa_offset (128)
++
+ L(nv_error_exit):
+   ld   r0,128+FRAME_LR_SAVE(r1)
+   addi r1,r1,128
+@@ -403,6 +412,10 @@
+   lfd  fp1,(SIGCONTEXT_FP_REGS+(PT_R1*8))(r31)
+   lfd  fp0,(SIGCONTEXT_FP_REGS+(PT_R0*8))(r31)
+ 
++  /* End FDE now, because the unwind info would be wrong while
++     we're reloading registers to switch to the new context.  */
++  cfi_endproc
++
+   ld   r0,(SIGCONTEXT_GP_REGS+(PT_LNK*8))(r31)
+   ld   r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r31)
+   mtlr r0
+@@ -451,6 +464,11 @@
+   ld   r31,(SIGCONTEXT_GP_REGS+(PT_R31*8))(r31)
+   bctr
+ 
++  /* Re-establish FDE for the rest of the actual setcontext routine.  */
++  cfi_startproc
++  cfi_offset (lr, FRAME_LR_SAVE)
++  cfi_adjust_cfa_offset (128)
++
+ L(error_exit):
+   ld   r0,128+FRAME_LR_SAVE(r1)
+   addi r1,r1,128
diff --git a/SOURCES/glibc-ppc64le-36.patch b/SOURCES/glibc-ppc64le-36.patch
new file mode 100644
index 0000000..fbe351c
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-36.patch
@@ -0,0 +1,105 @@
+# commit 7ec07d9a7b501f1b7d740fda02ba5f39d6d684e5
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Wed Dec 4 06:44:06 2013 -0600
+# 
+#     PowerPC64: Report overflow on @h and @ha relocations
+#     
+#     This patch updates glibc in accordance with the binutils patch checked in here:
+#     https://sourceware.org/ml/binutils/2013-10/msg00372.html
+#     
+#     This changes the various R_PPC64_..._HI and _HA relocations to report
+#     32-bit overflows.  The motivation is that existing uses of @h / @ha
+#     are to build up 32-bit offsets (for the "medium model" TOC access
+#     that GCC now defaults to), and we'd really like to see failures at
+#     link / load time rather than silent truncations.
+#     
+#     For those rare cases where a modifier is needed to build up a 64-bit
+#     constant, new relocations _HIGH / _HIGHA are supported.
+#     
+#     The patch also fixes a bug in overflow checking for the R_PPC64_ADDR30
+#     and R_PPC64_ADDR32 relocations.
+# 
+diff -urN glibc-2.17-c758a686/elf/elf.h glibc-2.17-c758a686/elf/elf.h
+--- glibc-2.17-c758a686/elf/elf.h	2014-05-29 13:17:35.000000000 -0500
++++ glibc-2.17-c758a686/elf/elf.h	2014-05-29 13:17:35.000000000 -0500
+@@ -2243,6 +2243,17 @@
+ #define R_PPC64_DTPREL16_HIGHERA 104 /* half16	(sym+add)@dtprel@highera */
+ #define R_PPC64_DTPREL16_HIGHEST 105 /* half16	(sym+add)@dtprel@highest */
+ #define R_PPC64_DTPREL16_HIGHESTA 106 /* half16	(sym+add)@dtprel@highesta */
++#define R_PPC64_TLSGD		107 /* none	(sym+add)@tlsgd */
++#define R_PPC64_TLSLD		108 /* none	(sym+add)@tlsld */
++#define R_PPC64_TOCSAVE		109 /* none */
++
++/* Added when HA and HI relocs were changed to report overflows.  */
++#define R_PPC64_ADDR16_HIGH	110
++#define R_PPC64_ADDR16_HIGHA	111
++#define R_PPC64_TPREL16_HIGH	112
++#define R_PPC64_TPREL16_HIGHA	113
++#define R_PPC64_DTPREL16_HIGH	114
++#define R_PPC64_DTPREL16_HIGHA	115
+ 
+ /* GNU extension to support local ifunc.  */
+ #define R_PPC64_JMP_IREL	247
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 13:17:34.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 13:17:35.000000000 -0500
+@@ -663,11 +663,25 @@
+ 
+     case R_PPC64_TPREL16_HI:
+       value = elf_machine_tprel (map, sym_map, sym, reloc);
++      if (dont_expect (value + 0x80000000 >= 0x100000000LL))
++	_dl_reloc_overflow (map, "R_PPC64_TPREL16_HI", reloc_addr, refsym);
++      *(Elf64_Half *) reloc_addr = PPC_HI (value);
++      break;
++
++    case R_PPC64_TPREL16_HIGH:
++      value = elf_machine_tprel (map, sym_map, sym, reloc);
+       *(Elf64_Half *) reloc_addr = PPC_HI (value);
+       break;
+ 
+     case R_PPC64_TPREL16_HA:
+       value = elf_machine_tprel (map, sym_map, sym, reloc);
++      if (dont_expect (value + 0x80008000 >= 0x100000000LL))
++	_dl_reloc_overflow (map, "R_PPC64_TPREL16_HA", reloc_addr, refsym);
++      *(Elf64_Half *) reloc_addr = PPC_HA (value);
++      break;
++
++    case R_PPC64_TPREL16_HIGHA:
++      value = elf_machine_tprel (map, sym_map, sym, reloc);
+       *(Elf64_Half *) reloc_addr = PPC_HA (value);
+       break;
+ 
+@@ -703,17 +717,23 @@
+       break;
+ 
+     case R_PPC64_ADDR16_HI:
++      if (dont_expect (value + 0x80000000 >= 0x100000000LL))
++	_dl_reloc_overflow (map, "R_PPC64_ADDR16_HI", reloc_addr, refsym);
++    case R_PPC64_ADDR16_HIGH:
+       *(Elf64_Half *) reloc_addr = PPC_HI (value);
+       break;
+ 
+     case R_PPC64_ADDR16_HA:
++      if (dont_expect (value + 0x80008000 >= 0x100000000LL))
++	_dl_reloc_overflow (map, "R_PPC64_ADDR16_HA", reloc_addr, refsym);
++    case R_PPC64_ADDR16_HIGHA:
+       *(Elf64_Half *) reloc_addr = PPC_HA (value);
+       break;
+ 
+     case R_PPC64_ADDR30:
+       {
+ 	Elf64_Addr delta = value - (Elf64_Xword) reloc_addr;
+-	if (dont_expect ((delta + 0x80000000) >= 0x10000000
++	if (dont_expect ((delta + 0x80000000) >= 0x100000000LL
+ 			 || (delta & 3) != 0))
+ 	  _dl_reloc_overflow (map, "R_PPC64_ADDR30", reloc_addr, refsym);
+ 	BIT_INSERT (*(Elf64_Word *) reloc_addr, delta, 0xfffffffc);
+@@ -762,7 +782,7 @@
+       return;
+ 
+     case R_PPC64_ADDR32:
+-      if (dont_expect ((value + 0x80000000) >= 0x10000000))
++      if (dont_expect ((value + 0x80000000) >= 0x100000000LL))
+ 	_dl_reloc_overflow (map, "R_PPC64_ADDR32", reloc_addr, refsym);
+       *(Elf64_Word *) reloc_addr = value;
+       return;
diff --git a/SOURCES/glibc-ppc64le-37.patch b/SOURCES/glibc-ppc64le-37.patch
new file mode 100644
index 0000000..dad59a6
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-37.patch
@@ -0,0 +1,31 @@
+# commit b525166bb93b060e1146f0263b76a9c1e7455b06
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:45:56 2013 -0600
+# 
+#     PowerPC64: Add __private_ss field to TCB header
+#     
+#     The TCB header on Intel contains a field __private_ss that is used
+#     to efficiently implement the -fsplit-stack GCC feature.
+#     
+#     In order to prepare for a possible future implementation of that
+#     feature on powerpc64, we'd like to reserve a similar field in
+#     the TCB header as well.  (It would be good if this went in with
+#     or before the ELFv2 patches to ensure that this field will be
+#     available always in the ELFv2 environment.)
+#     
+#     The field needs to be added at the front of tcbhead_t structure
+#     to avoid changing the ABI; see the recent discussion when adding
+#     the EBB fields.
+# 
+diff -urN glibc-2.17-c758a686/nptl/sysdeps/powerpc/tls.h glibc-2.17-c758a686/nptl/sysdeps/powerpc/tls.h
+--- glibc-2.17-c758a686/nptl/sysdeps/powerpc/tls.h	2014-05-29 13:19:25.000000000 -0500
++++ glibc-2.17-c758a686/nptl/sysdeps/powerpc/tls.h	2014-05-29 13:19:25.000000000 -0500
+@@ -61,6 +61,8 @@
+    are private.  */
+ typedef struct
+ {
++  /* GCC split stack support.  */
++  void *__private_ss;
+   /* Reservation for the Event-Based Branching ABI.  */
+   uintptr_t ebb_handler;
+   uintptr_t ebb_ctx_pointer;
diff --git a/SOURCES/glibc-ppc64le-38.patch b/SOURCES/glibc-ppc64le-38.patch
new file mode 100644
index 0000000..196f0ad
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-38.patch
@@ -0,0 +1,262 @@
+# commit d31beafa8e4ca69faa4cf362784796ef17299341
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:49:15 2013 -0600
+# 
+#     PowerPC64 ELFv2 ABI 1/6: Code refactoring
+#     
+#     This is the first patch to support the new ELFv2 ABI in glibc.
+#     
+#     As preparation, this patch simply refactors some of the powerpc64 assembler
+#     code to move all code related to creating function descriptors (.opd section)
+#     or using function descriptors (function pointer call) into a central place
+#     in sysdep.h.
+#     
+#     Note that most locations creating .opd entries were already using macros
+#     in sysdep.h, this patch simply extends this to the remaining places.
+#     
+#     No relevant change in generated code expected.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S	2014-05-29 13:56:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S	2014-05-29 13:56:37.000000000 -0500
+@@ -60,18 +60,8 @@
+ .LC0:
+ 	.tc PREINIT_FUNCTION[TC], PREINIT_FUNCTION
+ #endif
+-	.type BODY_LABEL (_init), @function
+-	.globl _init
+-	.section ".opd", "aw"
+-	.align 3
+-_init:	OPD_ENT (_init)
+-#ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-	.globl BODY_LABEL (_init)
+-	.size _init, 24
+-#else
+-	.type _init, @function
+-#endif
+ 	.section ".init", "ax", @progbits
++	ENTRY_2(_init)
+ 	.align ALIGNARG (2)
+ BODY_LABEL (_init):
+ 	mflr 0
+@@ -87,18 +77,8 @@
+ 	nop
+ 1:
+ 
+-	.type BODY_LABEL (_fini), @function
+-	.globl _fini
+-	.section ".opd", "aw"
+-	.align 3
+-_fini:	OPD_ENT (_fini)
+-#ifdef HAVE_ASM_GLOBAL_DOT_NAME
+-	.globl BODY_LABEL (_fini)
+-	.size _fini, 24
+-#else
+-	.type _fini, @function
+-#endif
+ 	.section ".fini", "ax", @progbits
++	ENTRY_2(_fini)
+ 	.align ALIGNARG (2)
+ BODY_LABEL (_fini):
+ 	mflr 0
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 13:56:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 13:56:37.000000000 -0500
+@@ -122,14 +122,7 @@
+ #define RTLD_START \
+   asm (".pushsection \".text\"\n"					\
+ "	.align	2\n"							\
+-"	.type	" BODY_PREFIX "_start,@function\n"			\
+-"	.pushsection \".opd\",\"aw\"\n"					\
+-"	.align	3\n"							\
+-"	.globl	_start\n"						\
+ "	" ENTRY_2(_start) "\n"						\
+-"_start:\n"								\
+-"	" OPD_ENT(_start) "\n"						\
+-"	.popsection\n"							\
+ BODY_PREFIX "_start:\n"							\
+ /* We start with the following on the stack, from top:			\
+    argc (4 bytes);							\
+@@ -154,11 +147,6 @@
+ ".LT__start_name_end:\n"						\
+ "	.align 2\n"							\
+ "	" END_2(_start) "\n"						\
+-"	.globl	_dl_start_user\n"					\
+-"	.pushsection \".opd\",\"aw\"\n"					\
+-"_dl_start_user:\n"							\
+-"	" OPD_ENT(_dl_start_user) "\n"					\
+-"	.popsection\n"							\
+ "	.pushsection	\".toc\",\"aw\"\n"				\
+ DL_STARTING_UP_DEF							\
+ ".LC__rtld_local:\n"							\
+@@ -170,7 +158,6 @@
+ ".LC__dl_fini:\n"							\
+ "	.tc _dl_fini[TC],_dl_fini\n"					\
+ "	.popsection\n"							\
+-"	.type	" BODY_PREFIX "_dl_start_user,@function\n"		\
+ "	" ENTRY_2(_dl_start_user) "\n"					\
+ /* Now, we do our main work of calling initialisation procedures.	\
+    The ELF ABI doesn't say anything about parameters for these,		\
+@@ -228,10 +215,7 @@
+ /* Now, call the start function descriptor at r30...  */		\
+ "	.globl	._dl_main_dispatch\n"					\
+ "._dl_main_dispatch:\n"							\
+-"	ld	0,0(30)\n"						\
+-"	ld	2,8(30)\n"						\
+-"	mtctr	0\n"							\
+-"	ld	11,16(30)\n"						\
++"	" PPC64_LOAD_FUNCPTR(30) "\n"					\
+ "	bctr\n"								\
+ ".LT__dl_start_user:\n"							\
+ "	.long 0\n"							\
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 13:56:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 13:56:37.000000000 -0500
+@@ -71,12 +71,8 @@
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+ 	mtcrf	0xFF,r0
+-/* Load the target address, toc and static chain reg from the function
+-   descriptor returned by fixup.  */
+-	ld	r0,0(r3)
+-	ld	r2,8(r3)
+-	mtctr	r0
+-	ld	r11,16(r3)
++/* Prepare for calling the function returned by fixup.  */
++	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
+ /* Unwind the stack frame, and jump.  */
+ 	addi	r1,r1,FRAME_SIZE
+@@ -322,13 +318,9 @@
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+ 	mtcrf	0xFF,r0
+-/* Load the target address, toc and static chain reg from the function
+-   descriptor returned by fixup.  */
+-	ld	r0,0(r3)
+-	ld	r2,8(r3)
+-	ld	r11,16(r3)
++/* Prepare for calling the function returned by fixup.  */
++	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
+-	mtctr	r0
+ /* Load the floating point registers.  */
+ 	lfd	fp1,FPR_PARMS+0(r1)
+ 	lfd	fp2,FPR_PARMS+8(r1)
+@@ -386,14 +378,10 @@
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+ 	mtcrf	0xFF,r0
+-/* Load the target address, toc and static chain reg from the function
+-   descriptor returned by fixup.  */
+-	ld	r0,0(r3)
++/* Prepare for calling the function returned by fixup.  */
+ 	std	r2,40(r1)
+-	ld	r2,8(r3)
+-	ld	r11,16(r3)
++	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
+-	mtctr	r0
+ /* Load the floating point registers.  */
+ 	lfd	fp1,FPR_PARMS+0(r1)
+ 	lfd	fp2,FPR_PARMS+8(r1)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h	2014-05-29 13:56:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h	2014-05-29 13:56:37.000000000 -0500
+@@ -74,6 +74,14 @@
+ #endif
+ 	.endm
+ 
++/* Macro to prepare for calling via a function pointer.  */
++	.macro PPC64_LOAD_FUNCPTR PTR
++	ld      r12,0(\PTR)
++	ld      r2,8(\PTR)
++	mtctr   r12
++	ld      r11,16(\PTR)
++	.endm
++
+ #ifdef USE_PPC64_OVERLAPPING_OPD
+ # define OPD_ENT(name)	.quad BODY_LABEL (name), .TOC.@tocbase
+ #else
+@@ -81,7 +89,6 @@
+ #endif
+ 
+ #define ENTRY_1(name)	\
+-	.section	".text";		\
+ 	.type BODY_LABEL(name),@function;	\
+ 	.globl name;				\
+ 	.section ".opd","aw";			\
+@@ -110,6 +117,7 @@
+ #endif
+ 
+ #define ENTRY(name)	\
++	.section	".text";		\
+ 	ENTRY_2(name)				\
+ 	.align ALIGNARG(2);			\
+ BODY_LABEL(name):				\
+@@ -127,6 +135,7 @@
+ /* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes
+    past a 2^alignt boundary.  */
+ #define EALIGN(name, alignt, words) \
++	.section	".text";		\
+ 	ENTRY_2(name)				\
+ 	.align ALIGNARG(alignt);		\
+ 	EALIGN_W_##words;			\
+@@ -286,24 +295,42 @@
+ 
+ #else /* !__ASSEMBLER__ */
+ 
++#define PPC64_LOAD_FUNCPTR(ptr) \
++	"ld 	12,0(" #ptr ");\n"					\
++	"ld	2,8(" #ptr ");\n"					\
++	"mtctr	12;\n"							\
++	"ld	11,16(" #ptr ");"
++
+ #ifdef USE_PPC64_OVERLAPPING_OPD
+ # define OPD_ENT(name)	".quad " BODY_PREFIX #name ", .TOC.@tocbase;"
+ #else
+ # define OPD_ENT(name)	".quad " BODY_PREFIX #name ", .TOC.@tocbase, 0;"
+ #endif
+ 
++#define ENTRY_1(name)	\
++	".type   " BODY_PREFIX #name ",@function;\n"			\
++	".globl " #name ";\n"						\
++	".pushsection \".opd\",\"aw\";\n"				\
++	".align  3;\n"							\
++#name ":\n"								\
++	OPD_ENT (name) "\n"						\
++	".popsection;"
++
+ #ifdef HAVE_ASM_GLOBAL_DOT_NAME
+ # define DOT_PREFIX "."
+ # define BODY_PREFIX "."
+ # define ENTRY_2(name)	\
+ 	".globl " BODY_PREFIX #name ";\n"				\
++	ENTRY_1(name) "\n"						\
+ 	".size  " #name ", 24;"
+ # define END_2(name)	\
+ 	".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
+ #else
+ # define DOT_PREFIX ""
+ # define BODY_PREFIX ".LY"
+-# define ENTRY_2(name) ".type " #name ",@function;"
++# define ENTRY_2(name)	\
++	".type " #name ",@function;\n"					\
++	ENTRY_1(name)
+ # define END_2(name)	\
+ 	".size " #name ",.-" BODY_PREFIX #name ";\n"			\
+ 	".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S	2014-05-29 13:56:35.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S	2014-05-29 13:56:37.000000000 -0500
+@@ -104,9 +104,7 @@
+ 
+ 	std	r2,40(r1)
+ 	/* Call procedure.  */
+-	ld	r0,0(r30)
+-	ld	r2,8(r30)
+-	mtctr	r0
++	PPC64_LOAD_FUNCPTR r30
+ 	mr	r3,r31
+ 	bctrl
+ 	ld	r2,40(r1)
diff --git a/SOURCES/glibc-ppc64le-39.patch b/SOURCES/glibc-ppc64le-39.patch
new file mode 100644
index 0000000..f837d99
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-39.patch
@@ -0,0 +1,508 @@
+# commit 696caf1d002ff059ddd20fd5eaccd76229c14850
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:51:11 2013 -0600
+# 
+#     PowerPC64 ELFv2 ABI 2/6: Remove function descriptors
+#     
+#     This patch adds support for the ELFv2 ABI feature to remove function
+#     descriptors.  See this GCC patch for in-depth discussion:
+#     http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01141.html
+#     
+#     This mostly involves two types of changes: updating assembler source
+#     files to the new logic, and updating the dynamic loader.
+#     
+#     After the refactoring in the previous patch, most of the assembler source
+#     changes can be handled simply by providing ELFv2 versions of the
+#     macros in sysdep.h.   One somewhat non-obvious change is in __GI__setjmp:
+#     this used to "fall through" to the immediately following __setjmp ENTRY
+#     point.  This is no longer safe in the ELFv2 since ENTRY defines both
+#     a global and a local entry point, and you cannot simply fall through
+#     to a global entry point as it requires r12 to be set up.
+#     
+#     Also, makecontext needs to be updated to set up registers according to
+#     the new ABI for calling into the context's start routine.
+#     
+#     The dynamic linker changes mostly consist of removing special code
+#     to handle function descriptors.  We also need to support the new PLT
+#     and glink format used by the the ELFv2 linker, see:
+#     https://sourceware.org/ml/binutils/2013-10/msg00376.html
+#     
+#     In addition, the dynamic linker now verifies that the dynamic libraries
+#     it loads match its own ABI.
+#     
+#     The hack in VDSO_IFUNC_RET to "synthesize" a function descriptor
+#     for vDSO routines is also no longer necessary for ELFv2.
+# 
+diff -urN glibc-2.17-c758a686/elf/elf.h glibc-2.17-c758a686/elf/elf.h
+--- glibc-2.17-c758a686/elf/elf.h	2014-05-29 13:58:25.000000000 -0500
++++ glibc-2.17-c758a686/elf/elf.h	2014-05-29 13:58:25.000000000 -0500
+@@ -2263,6 +2263,12 @@
+ #define R_PPC64_REL16_HI	251	/* half16   (sym+add-.)@h */
+ #define R_PPC64_REL16_HA	252	/* half16   (sym+add-.)@ha */
+ 
++/* e_flags bits specifying ABI.
++   1 for original function descriptor using ABI,
++   2 for revised ABI without function descriptors,
++   0 for unspecified or not using any features affected by the differences.  */
++#define EF_PPC64_ABI	3
++
+ /* PowerPC64 specific values for the Dyn d_tag field.  */
+ #define DT_PPC64_GLINK  (DT_LOPROC + 0)
+ #define DT_PPC64_OPD	(DT_LOPROC + 1)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S	2014-05-29 13:58:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S	2014-05-29 13:58:25.000000000 -0500
+@@ -64,6 +64,7 @@
+ 	ENTRY_2(_init)
+ 	.align ALIGNARG (2)
+ BODY_LABEL (_init):
++	LOCALENTRY(_init)
+ 	mflr 0
+ 	std 0, 16(r1)
+ 	stdu r1, -112(r1)
+@@ -81,6 +82,7 @@
+ 	ENTRY_2(_fini)
+ 	.align ALIGNARG (2)
+ BODY_LABEL (_fini):
++	LOCALENTRY(_fini)
+ 	mflr 0
+ 	std 0, 16(r1)
+ 	stdu r1, -112(r1)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-irel.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-irel.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-irel.h	2014-05-29 13:58:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-irel.h	2014-05-29 13:58:25.000000000 -0500
+@@ -50,7 +50,11 @@
+     {
+       Elf64_Addr *const reloc_addr = (void *) reloc->r_offset;
+       Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend);
++#if _CALL_ELF != 2
+       *(Elf64_FuncDesc *) reloc_addr = *(Elf64_FuncDesc *) value;
++#else
++      *reloc_addr = value;
++#endif
+     }
+   else
+     __libc_fatal ("unexpected reloc type in static binary");
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 13:58:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 14:05:46.000000000 -0500
+@@ -31,6 +31,7 @@
+    in l_info array.  */
+ #define DT_PPC64(x) (DT_PPC64_##x - DT_LOPROC + DT_NUM)
+ 
++#if _CALL_ELF != 2
+ /* A PowerPC64 function descriptor.  The .plt (procedure linkage
+    table) and .opd (official procedure descriptor) sections are
+    arrays of these.  */
+@@ -40,6 +41,7 @@
+   Elf64_Addr fd_toc;
+   Elf64_Addr fd_aux;
+ } Elf64_FuncDesc;
++#endif
+ 
+ #define ELF_MULT_MACHINES_SUPPORTED
+ 
+@@ -47,6 +49,18 @@
+ static inline int
+ elf_machine_matches_host (const Elf64_Ehdr *ehdr)
+ {
++  /* Verify that the binary matches our ABI version.  */
++  if ((ehdr->e_flags & EF_PPC64_ABI) != 0)
++    {
++#if _CALL_ELF != 2
++      if ((ehdr->e_flags & EF_PPC64_ABI) != 1)
++        return 0;
++#else
++      if ((ehdr->e_flags & EF_PPC64_ABI) != 2)
++        return 0;
++#endif
++    }
++
+   return ehdr->e_machine == EM_PPC64;
+ }
+ 
+@@ -124,6 +138,7 @@
+ "	.align	2\n"							\
+ "	" ENTRY_2(_start) "\n"						\
+ BODY_PREFIX "_start:\n"							\
++"	" LOCALENTRY(_start) "\n"						\
+ /* We start with the following on the stack, from top:			\
+    argc (4 bytes);							\
+    arguments for program (terminated by NULL);				\
+@@ -165,6 +180,7 @@
+    Changing these is strongly discouraged (not least because argc is	\
+    passed by value!).  */						\
+ BODY_PREFIX "_dl_start_user:\n"						\
++"	" LOCALENTRY(_dl_start_user) "\n"				\
+ /* the address of _start in r30.  */					\
+ "	mr	30,3\n"							\
+ /* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28.  */		\
+@@ -256,8 +272,22 @@
+    relocations behave "normally", ie. always use the real address
+    like PLT relocations.  So always set ELF_RTYPE_CLASS_PLT.  */
+ 
++#if _CALL_ELF != 2
+ #define elf_machine_type_class(type) \
+   (ELF_RTYPE_CLASS_PLT | (((type) == R_PPC64_COPY) * ELF_RTYPE_CLASS_COPY))
++#else
++/* And now that you have read that large comment, you can disregard it
++   all for ELFv2.  ELFv2 does need the special SHN_UNDEF treatment.  */
++#define IS_PPC64_TLS_RELOC(R)						\
++  (((R) >= R_PPC64_TLS && (R) <= R_PPC64_DTPREL16_HIGHESTA)		\
++   || ((R) >= R_PPC64_TPREL16_HIGH && (R) <= R_PPC64_DTPREL16_HIGHA))
++
++#define elf_machine_type_class(type) \
++  ((((type) == R_PPC64_JMP_SLOT					\
++     || (type) == R_PPC64_ADDR24				\
++     || IS_PPC64_TLS_RELOC (type)) * ELF_RTYPE_CLASS_PLT)	\
++   | (((type) == R_PPC64_COPY) * ELF_RTYPE_CLASS_COPY))
++#endif
+ 
+ /* A reloc type used for ld.so cmdline arg lookups to reject PLT entries.  */
+ #define ELF_MACHINE_JMP_SLOT	R_PPC64_JMP_SLOT
+@@ -266,8 +296,19 @@
+ #define ELF_MACHINE_NO_REL 1
+ 
+ /* Stuff for the PLT.  */
++#if _CALL_ELF != 2
+ #define PLT_INITIAL_ENTRY_WORDS 3
++#define PLT_ENTRY_WORDS 3
+ #define GLINK_INITIAL_ENTRY_WORDS 8
++/* The first 32k entries of glink can set an index and branch using two
++   instructions; past that point, glink uses three instructions.  */
++#define GLINK_ENTRY_WORDS(I) (((I) < 0x8000)? 2 : 3)
++#else
++#define PLT_INITIAL_ENTRY_WORDS 2
++#define PLT_ENTRY_WORDS 1
++#define GLINK_INITIAL_ENTRY_WORDS 8
++#define GLINK_ENTRY_WORDS(I) 1
++#endif
+ 
+ #define PPC_DCBST(where) asm volatile ("dcbst 0,%0" : : "r"(where) : "memory")
+ #define PPC_DCBT(where) asm volatile ("dcbt 0,%0" : : "r"(where) : "memory")
+@@ -312,17 +353,12 @@
+ 
+       if (lazy)
+ 	{
+-	  /* The function descriptor of the appropriate trampline
+-	     routine is used to set the 1st and 2nd doubleword of the
+-	     plt_reserve.  */
+-	  Elf64_FuncDesc *resolve_fd;
+ 	  Elf64_Word glink_offset;
+-	  /* the plt_reserve area is the 1st 3 doublewords of the PLT */
+-	  Elf64_FuncDesc *plt_reserve = (Elf64_FuncDesc *) plt;
+ 	  Elf64_Word offset;
++	  Elf64_Addr dlrr;
+ 
+-	  resolve_fd = (Elf64_FuncDesc *) (profile ? _dl_profile_resolve
+-					   : _dl_runtime_resolve);
++	  dlrr = (Elf64_Addr) (profile ? _dl_profile_resolve
++				       : _dl_runtime_resolve);
+ 	  if (profile && GLRO(dl_profile) != NULL
+ 	      && _dl_name_match_p (GLRO(dl_profile), map))
+ 	    /* This is the object we are looking for.  Say that we really
+@@ -330,20 +366,33 @@
+ 	    GL(dl_profile_map) = map;
+ 
+ 
++#if _CALL_ELF != 2
+ 	  /* We need to stuff the address/TOC of _dl_runtime_resolve
+ 	     into doublewords 0 and 1 of plt_reserve.  Then we need to
+ 	     stuff the map address into doubleword 2 of plt_reserve.
+ 	     This allows the GLINK0 code to transfer control to the
+ 	     correct trampoline which will transfer control to fixup
+ 	     in dl-machine.c.  */
+-	  plt_reserve->fd_func = resolve_fd->fd_func;
+-	  plt_reserve->fd_toc  = resolve_fd->fd_toc;
+-	  plt_reserve->fd_aux  = (Elf64_Addr) map;
++	  {
++	    /* The plt_reserve area is the 1st 3 doublewords of the PLT.  */
++	    Elf64_FuncDesc *plt_reserve = (Elf64_FuncDesc *) plt;
++	    Elf64_FuncDesc *resolve_fd = (Elf64_FuncDesc *) dlrr;
++	    plt_reserve->fd_func = resolve_fd->fd_func;
++	    plt_reserve->fd_toc  = resolve_fd->fd_toc;
++	    plt_reserve->fd_aux  = (Elf64_Addr) map;
+ #ifdef RTLD_BOOTSTRAP
+-	  /* When we're bootstrapping, the opd entry will not have
+-	     been relocated yet.  */
+-	  plt_reserve->fd_func += l_addr;
+-	  plt_reserve->fd_toc  += l_addr;
++	    /* When we're bootstrapping, the opd entry will not have
++	       been relocated yet.  */
++	    plt_reserve->fd_func += l_addr;
++	    plt_reserve->fd_toc  += l_addr;
++#endif
++	  }
++#else
++	  /* When we don't have function descriptors, the first doubleword
++	     of the PLT holds the address of _dl_runtime_resolve, and the
++	     second doubleword holds the map address.  */
++	  plt[0] = dlrr;
++	  plt[1] = (Elf64_Addr) map;
+ #endif
+ 
+ 	  /* Set up the lazy PLT entries.  */
+@@ -354,14 +403,8 @@
+ 	    {
+ 
+ 	      plt[offset] = (Elf64_Xword) &glink[glink_offset];
+-	      offset += 3;
+-	      /* The first 32k entries of glink can set an index and
+-		 branch using two instructions;  Past that point,
+-		 glink uses three instructions.  */
+-	      if (i < 0x8000)
+-		glink_offset += 2;
+-	      else
+-		glink_offset += 3;
++	      offset += PLT_ENTRY_WORDS;
++	      glink_offset += GLINK_ENTRY_WORDS (i);
+ 	    }
+ 
+ 	  /* Now, we've modified data.  We need to write the changes from
+@@ -389,6 +432,7 @@
+ 		       const Elf64_Rela *reloc,
+ 		       Elf64_Addr *reloc_addr, Elf64_Addr finaladdr)
+ {
++#if _CALL_ELF != 2
+   Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr;
+   Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr;
+   Elf64_Addr offset = 0;
+@@ -426,6 +470,9 @@
+   plt->fd_func = rel->fd_func + offset;
+   PPC_DCBST (&plt->fd_func);
+   PPC_ISYNC;
++#else
++  *reloc_addr = finaladdr;
++#endif
+ 
+   return finaladdr;
+ }
+@@ -433,6 +480,7 @@
+ static inline void __attribute__ ((always_inline))
+ elf_machine_plt_conflict (Elf64_Addr *reloc_addr, Elf64_Addr finaladdr)
+ {
++#if _CALL_ELF != 2
+   Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr;
+   Elf64_FuncDesc *rel = (Elf64_FuncDesc *) finaladdr;
+ 
+@@ -443,6 +491,9 @@
+   PPC_DCBST (&plt->fd_aux);
+   PPC_DCBST (&plt->fd_toc);
+   PPC_SYNC;
++#else
++  *reloc_addr = finaladdr;
++#endif
+ }
+ 
+ /* Return the final value of a plt relocation.  */
+@@ -512,6 +563,7 @@
+ resolve_ifunc (Elf64_Addr value,
+ 	       const struct link_map *map, const struct link_map *sym_map)
+ {
++#if _CALL_ELF != 2
+ #ifndef RESOLVE_CONFLICT_FIND_MAP
+   /* The function we are calling may not yet have its opd entry relocated.  */
+   Elf64_FuncDesc opd;
+@@ -529,6 +581,7 @@
+       value = (Elf64_Addr) &opd;
+     }
+ #endif
++#endif
+   return ((Elf64_Addr (*) (unsigned long int)) value) (GLRO(dl_hwcap));
+ }
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S	2014-05-29 13:58:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S	2014-05-29 14:00:27.000000000 -0500
+@@ -55,21 +55,22 @@
+    that saves r2 since the call won't go via a plt call stub.  See
+    bugz #269.  __GI__setjmp is used in csu/libc-start.c when
+    HAVE_CLEANUP_JMP_BUF is defined.  */
+-ENTRY (BP_SYM (__GI__setjmp))
++ENTRY (__GI__setjmp)
+ 	std r2,40(r1)		/* Save the callers TOC in the save area.  */
+-	cfi_endproc
+-END_2 (BP_SYM (__GI__setjmp))
+-/* Fall thru. */
++	CALL_MCOUNT 1
++	li r4,0			/* Set second argument to 0.  */
++	b JUMPTARGET (GLUE(__sigsetjmp,_ent))
++END (__GI__setjmp)
+ #endif
+ 
+-ENTRY (BP_SYM (_setjmp))
++ENTRY (_setjmp)
+ 	CALL_MCOUNT 1
+ 	li r4,0			/* Set second argument to 0.  */
+ 	b JUMPTARGET (GLUE(__sigsetjmp,_ent))
+-END (BP_SYM (_setjmp))
++END (_setjmp)
+ libc_hidden_def (_setjmp)
+ 
+-ENTRY (BP_SYM (__sigsetjmp))
++ENTRY (__sigsetjmp)
+ 	CALL_MCOUNT 2
+ JUMPTARGET(GLUE(__sigsetjmp,_ent)):
+ 	CHECK_BOUNDS_BOTH_WIDE_LIT (r3, r8, r9, JB_SIZE)
+@@ -215,18 +216,18 @@
+ 	li	r3,0
+ 	blr
+ #elif defined SHARED
+-	b	JUMPTARGET (BP_SYM (__sigjmp_save))
++	b	JUMPTARGET (__sigjmp_save)
+ #else
+ 	mflr	r0
+ 	std	r0,16(r1)
+ 	stdu	r1,-112(r1)
+ 	cfi_adjust_cfa_offset(112)
+ 	cfi_offset(lr,16)
+-	bl	JUMPTARGET (BP_SYM (__sigjmp_save))
++	bl	JUMPTARGET (__sigjmp_save)
+ 	nop
+ 	ld	r0,112+16(r1)
+ 	addi	r1,r1,112
+ 	mtlr	r0
+ 	blr
+ #endif
+-END (BP_SYM (__sigsetjmp))
++END (__sigsetjmp)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h	2014-05-29 13:58:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h	2014-05-29 13:58:25.000000000 -0500
+@@ -74,6 +74,8 @@
+ #endif
+ 	.endm
+ 
++#if _CALL_ELF != 2
++
+ /* Macro to prepare for calling via a function pointer.  */
+ 	.macro PPC64_LOAD_FUNCPTR PTR
+ 	ld      r12,0(\PTR)
+@@ -115,13 +117,37 @@
+ 	.size name,.-BODY_LABEL(name);		\
+ 	.size BODY_LABEL(name),.-BODY_LABEL(name);
+ #endif
++#define LOCALENTRY(name)
++
++#else /* _CALL_ELF */
++
++/* Macro to prepare for calling via a function pointer.  */
++	.macro PPC64_LOAD_FUNCPTR PTR
++	mr	r12,\PTR
++	mtctr   r12
++	.endm
++
++#define DOT_LABEL(X) X
++#define BODY_LABEL(X) X
++#define ENTRY_2(name)	\
++	.globl name;				\
++	.type name,@function;
++#define END_2(name)	\
++	.size name,.-name;
++#define LOCALENTRY(name)	\
++1:      addis	r2,r12,.TOC.-1b@ha; \
++        addi	r2,r2,.TOC.-1b@l; \
++	.localentry name,.-name;
++
++#endif /* _CALL_ELF */
+ 
+ #define ENTRY(name)	\
+ 	.section	".text";		\
+ 	ENTRY_2(name)				\
+ 	.align ALIGNARG(2);			\
+ BODY_LABEL(name):				\
+-	cfi_startproc;
++	cfi_startproc;				\
++	LOCALENTRY(name)
+ 
+ #define EALIGN_W_0  /* No words to insert.  */
+ #define EALIGN_W_1  nop
+@@ -140,7 +166,8 @@
+ 	.align ALIGNARG(alignt);		\
+ 	EALIGN_W_##words;			\
+ BODY_LABEL(name):				\
+-	cfi_startproc;
++	cfi_startproc;				\
++	LOCALENTRY(name)
+ 
+ /* Local labels stripped out by the linker.  */
+ #undef L
+@@ -295,6 +322,8 @@
+ 
+ #else /* !__ASSEMBLER__ */
+ 
++#if _CALL_ELF != 2
++
+ #define PPC64_LOAD_FUNCPTR(ptr) \
+ 	"ld 	12,0(" #ptr ");\n"					\
+ 	"ld	2,8(" #ptr ");\n"					\
+@@ -335,5 +364,26 @@
+ 	".size " #name ",.-" BODY_PREFIX #name ";\n"			\
+ 	".size " BODY_PREFIX #name ",.-" BODY_PREFIX #name ";"
+ #endif
++#define LOCALENTRY(name)
++
++#else /* _CALL_ELF */
++
++#define PPC64_LOAD_FUNCPTR(ptr) \
++	"mr	12," #ptr ";\n"						\
++	"mtctr 	12;"
++
++#define DOT_PREFIX ""
++#define BODY_PREFIX ""
++#define ENTRY_2(name)	\
++	".type " #name ",@function;\n"					\
++	".globl " #name ";"
++#define END_2(name)	\
++	".size " #name ",.-" #name ";"
++#define LOCALENTRY(name)	\
++	"1: addis 2,12,.TOC.-1b@ha;\n"					\
++	"addi	2,2,.TOC.-1b@l;\n"					\
++	".localentry " #name ",.-" #name ";"
++
++#endif /* _CALL_ELF */
+ 
+ #endif	/* __ASSEMBLER__ */
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h	2014-05-29 13:58:24.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ldsodefs.h	2014-05-29 13:58:25.000000000 -0500
+@@ -23,6 +23,8 @@
+ 
+ /* Now define our stuff.  */
+ 
++#if _CALL_ELF != 2
++
+ static __always_inline bool
+ _dl_ppc64_is_opd_sym (const struct link_map *l, const ElfW(Sym) *sym)
+ {
+@@ -73,4 +75,6 @@
+ #define DL_ADDR_SYM_MATCH(L, SYM, MATCHSYM, ADDR) \
+   _dl_ppc64_addr_sym_match (L, SYM, MATCHSYM, ADDR)
+ 
++#endif
++
+ #endif /* ldsodefs.h */
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S	2014-05-29 13:58:24.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S	2014-05-29 13:58:25.000000000 -0500
+@@ -111,6 +111,7 @@
+ 
+ L(noparms):
+ 
++#if _CALL_ELF != 2
+   /* Load the function address and TOC from the function descriptor
+      and store them in the ucontext as NIP and r2.  Store the 3rd
+      field of the function descriptor into the ucontext as r11 in case
+@@ -121,6 +122,12 @@
+   std   r0,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3)
+   std   r10,(SIGCONTEXT_GP_REGS+(PT_R2*8))(r3)
+   std   r9,(SIGCONTEXT_GP_REGS+(PT_R11*8))(r3)
++#else
++  /* In the ELFv2 ABI, the function pointer is already the address.
++     Store it as NIP and r12 as required by the ABI.  */
++  std   r4,(SIGCONTEXT_GP_REGS+(PT_NIP*8))(r3)
++  std   r4,(SIGCONTEXT_GP_REGS+(PT_R12*8))(r3)
++#endif
+ 
+   /* If the target function returns we need to do some cleanup.  We use a
+      code trick to get the address of our cleanup function into the link
diff --git a/SOURCES/glibc-ppc64le-40.patch b/SOURCES/glibc-ppc64le-40.patch
new file mode 100644
index 0000000..663d2f3
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-40.patch
@@ -0,0 +1,159 @@
+# commit 122b66defdb9e4ded3ccc5c2b290f0520c6fa3cd
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:52:40 2013 -0600
+# 
+#     PowerPC64 ELFv2 ABI 3/6: PLT local entry point optimization
+#     
+#     This is a follow-on to the previous patch to support the ELFv2 ABI in the
+#     dynamic loader, split off into its own patch since it is just an optional
+#     optimization.
+#     
+#     In the ELFv2 ABI, most functions define both a global and a local entry
+#     point; the local entry requires r2 to be already set up by the caller
+#     to point to the callee's TOC; while the global entry does not require
+#     the caller to know about the callee's TOC, but it needs to set up r12
+#     to the callee's entry point address.
+#     
+#     Now, when setting up a PLT slot, the dynamic linker will usually need
+#     to enter the target function's global entry point.  However, if the
+#     linker can prove that the target function is in the same DSO as the
+#     PLT slot itself, and the whole DSO only uses a single TOC (which the
+#     linker will let ld.so know via a DT_PPC64_OPT entry), then it is
+#     possible to actually enter the local entry point address into the
+#     PLT slot, for a slight improvement in performance.
+#     
+#     Note that this uncovered a problem on the first call via _dl_runtime_resolve,
+#     because that routine neglected to restore the caller's TOC before calling
+#     the target function for the first time, since it assumed that function
+#     would always reload its own TOC anyway ...
+# 
+diff -urN glibc-2.17-c758a686/elf/elf.h glibc-2.17-c758a686/elf/elf.h
+--- glibc-2.17-c758a686/elf/elf.h	2014-05-29 14:08:44.000000000 -0500
++++ glibc-2.17-c758a686/elf/elf.h	2014-05-29 14:08:44.000000000 -0500
+@@ -2273,8 +2273,19 @@
+ #define DT_PPC64_GLINK  (DT_LOPROC + 0)
+ #define DT_PPC64_OPD	(DT_LOPROC + 1)
+ #define DT_PPC64_OPDSZ	(DT_LOPROC + 2)
++#define DT_PPC64_OPT	(DT_LOPROC + 3)
+ #define DT_PPC64_NUM    3
+ 
++/* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry.  */
++#define PPC64_OPT_TLS		1
++#define PPC64_OPT_MULTI_TOC	2
++
++/* PowerPC64 specific values for the Elf64_Sym st_other field.  */
++#define STO_PPC64_LOCAL_BIT	5
++#define STO_PPC64_LOCAL_MASK	(7 << STO_PPC64_LOCAL_BIT)
++#define PPC64_LOCAL_ENTRY_OFFSET(other)				\
++ (((1 << (((other) & STO_PPC64_LOCAL_MASK) >> STO_PPC64_LOCAL_BIT)) >> 2) << 2)
++
+ 
+ /* ARM specific declarations */
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 14:08:40.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 14:08:44.000000000 -0500
+@@ -425,6 +425,42 @@
+   return lazy;
+ }
+ 
++#if _CALL_ELF == 2
++/* If the PLT entry whose reloc is 'reloc' resolves to a function in
++   the same object, return the target function's local entry point
++   offset if usable.  */
++static inline Elf64_Addr __attribute__ ((always_inline))
++ppc64_local_entry_offset (struct link_map *map, lookup_t sym_map,
++			  const Elf64_Rela *reloc)
++{
++  const Elf64_Sym *symtab;
++  const Elf64_Sym *sym;
++
++  /* If the target function is in a different object, we cannot
++     use the local entry point.  */
++  if (sym_map != map)
++    return 0;
++
++  /* If the linker inserted multiple TOCs, we cannot use the
++     local entry point.  */
++  if (map->l_info[DT_PPC64(OPT)]
++      && (map->l_info[DT_PPC64(OPT)]->d_un.d_val & PPC64_OPT_MULTI_TOC))
++    return 0;
++
++  /* Otherwise, we can use the local entry point.  Retrieve its offset
++     from the symbol's ELF st_other field.  */
++  symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]);
++  sym = &symtab[ELFW(R_SYM) (reloc->r_info)];
++
++  /* If the target function is an ifunc then the local entry offset is
++     for the resolver, not the final destination.  */
++  if (__builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0))
++    return 0;
++
++  return PPC64_LOCAL_ENTRY_OFFSET (sym->st_other);
++}
++#endif
++
+ /* Change the PLT entry whose reloc is 'reloc' to call the actual
+    routine.  */
+ static inline Elf64_Addr __attribute__ ((always_inline))
+@@ -471,6 +507,7 @@
+   PPC_DCBST (&plt->fd_func);
+   PPC_ISYNC;
+ #else
++  finaladdr += ppc64_local_entry_offset (map, sym_map, reloc);
+   *reloc_addr = finaladdr;
+ #endif
+ 
+@@ -478,7 +515,9 @@
+ }
+ 
+ static inline void __attribute__ ((always_inline))
+-elf_machine_plt_conflict (Elf64_Addr *reloc_addr, Elf64_Addr finaladdr)
++elf_machine_plt_conflict (struct link_map *map, lookup_t sym_map,
++			  const Elf64_Rela *reloc,
++			  Elf64_Addr *reloc_addr, Elf64_Addr finaladdr)
+ {
+ #if _CALL_ELF != 2
+   Elf64_FuncDesc *plt = (Elf64_FuncDesc *) reloc_addr;
+@@ -492,6 +531,7 @@
+   PPC_DCBST (&plt->fd_toc);
+   PPC_SYNC;
+ #else
++  finaladdr += ppc64_local_entry_offset (map, sym_map, reloc);
+   *reloc_addr = finaladdr;
+ #endif
+ }
+@@ -641,7 +681,7 @@
+       /* Fall thru */
+     case R_PPC64_JMP_SLOT:
+ #ifdef RESOLVE_CONFLICT_FIND_MAP
+-      elf_machine_plt_conflict (reloc_addr, value);
++      elf_machine_plt_conflict (map, sym_map, reloc, reloc_addr, value);
+ #else
+       elf_machine_fixup_plt (map, sym_map, reloc, reloc_addr, value);
+ #endif
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 14:08:40.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 14:08:44.000000000 -0500
+@@ -74,6 +74,10 @@
+ /* Prepare for calling the function returned by fixup.  */
+ 	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
++#if _CALL_ELF == 2
++/* Restore the caller's TOC in case we jump to a local entry point.  */
++	ld	r2,FRAME_SIZE+40(r1)
++#endif
+ /* Unwind the stack frame, and jump.  */
+ 	addi	r1,r1,FRAME_SIZE
+ 	bctr
+@@ -321,6 +325,10 @@
+ /* Prepare for calling the function returned by fixup.  */
+ 	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
++#if _CALL_ELF == 2
++/* Restore the caller's TOC in case we jump to a local entry point.  */
++	ld	r2,FRAME_SIZE+40(r1)
++#endif
+ /* Load the floating point registers.  */
+ 	lfd	fp1,FPR_PARMS+0(r1)
+ 	lfd	fp2,FPR_PARMS+8(r1)
diff --git a/SOURCES/glibc-ppc64le-41.patch b/SOURCES/glibc-ppc64le-41.patch
new file mode 100644
index 0000000..506d761
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-41.patch
@@ -0,0 +1,764 @@
+# commit 8b8a692cfd7d80f1ee7c8b9ab356a259367dd187
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:55:03 2013 -0600
+# 
+#     PowerPC64 ELFv2 ABI 4/6: Stack frame layout changes
+#     
+#     This updates glibc for the changes in the ELFv2 relating to the
+#     stack frame layout.  These are described in more detail here:
+#     http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01149.html
+#     http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01146.html
+#     
+#     Specifically, the "compiler and linker doublewords" were removed,
+#     which has the effect that the save slot for the TOC register is
+#     now at offset 24 rather than 40 to the stack pointer.
+#     
+#     In addition, a function may now no longer necessarily assume that
+#     its caller has set up a 64-byte register save area its use.
+#     
+#     To address the first change, the patch goes through all assembler
+#     files and replaces immediate offsets in instructions accessing the
+#     ABI-defined stack slots by symbolic offsets.  Those already were
+#     defined in ucontext_i.sym and used in some of the context routines,
+#     but that doesn't really seem like the right place for those defines.
+#     
+#     The patch instead defines those symbolic offsets in sysdeps.h,
+#     in two variants for the old and new ABI, and uses them systematically
+#     in all assembler files, not just the context routines.
+#     
+#     The second change only affected a few assembler files that used
+#     the save area to temporarily store some registers.  In those
+#     cases where this happens within a leaf function, this patch
+#     changes the code to store those registers to the "red zone"
+#     below the stack pointer.  Otherwise, the functions already allocate
+#     a stack frame, and the patch changes them to add extra space in
+#     these frames as temporary space for the ELFv2 ABI.
+# 
+diff -urN glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h	2014-05-29 14:10:00.000000000 -0500
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h	2014-05-29 14:10:00.000000000 -0500
+@@ -31,6 +31,14 @@
+ #  define DASHDASHPFX(str) __##str
+ # endif
+ 
++#if _CALL_ELF == 2
++#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16+48)
++#define CANCEL_PARM_SAVE (FRAME_MIN_SIZE+16)
++#else
++#define CANCEL_FRAMESIZE (FRAME_MIN_SIZE+16)
++#define CANCEL_PARM_SAVE (CANCEL_FRAMESIZE+FRAME_PARM_SAVE)
++#endif
++
+ # undef PSEUDO
+ # define PSEUDO(name, syscall_name, args)				\
+   .section ".text";							\
+@@ -44,52 +52,52 @@
+     PSEUDO_RET;								\
+   .size DASHDASHPFX(syscall_name##_nocancel),.-DASHDASHPFX(syscall_name##_nocancel);	\
+   .Lpseudo_cancel:							\
+-    stdu 1,-128(1);							\
+-    cfi_adjust_cfa_offset (128);					\
++    stdu 1,-CANCEL_FRAMESIZE(1);					\
++    cfi_adjust_cfa_offset (CANCEL_FRAMESIZE);				\
+     mflr 9;								\
+-    std  9,128+16(1);							\
+-    cfi_offset (lr, 16);						\
++    std  9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\
++    cfi_offset (lr, FRAME_LR_SAVE);					\
+     DOCARGS_##args;	/* save syscall args around CENABLE.  */	\
+     CENABLE;								\
+-    std  3,112(1);	/* store CENABLE return value (MASK).  */	\
++    std  3,FRAME_MIN_SIZE(1); /* store CENABLE return value (MASK).  */	\
+     UNDOCARGS_##args;	/* restore syscall args.  */			\
+     DO_CALL (SYS_ify (syscall_name));					\
+     mfcr 0;		/* save CR/R3 around CDISABLE.  */		\
+-    std  3,120(1);							\
+-    std  0,128+8(1);							\
+-    cfi_offset (cr, 8);							\
+-    ld   3,112(1);	/* pass MASK to CDISABLE.  */			\
++    std  3,FRAME_MIN_SIZE+8(1);						\
++    std  0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1);				\
++    cfi_offset (cr, FRAME_CR_SAVE);					\
++    ld   3,FRAME_MIN_SIZE(1); /* pass MASK to CDISABLE.  */		\
+     CDISABLE;								\
+-    ld   9,128+16(1);							\
+-    ld   0,128+8(1);	/* restore CR/R3. */				\
+-    ld   3,120(1);							\
++    ld   9,CANCEL_FRAMESIZE+FRAME_LR_SAVE(1);				\
++    ld   0,CANCEL_FRAMESIZE+FRAME_CR_SAVE(1); /* restore CR/R3. */	\
++    ld   3,FRAME_MIN_SIZE+8(1);						\
+     mtlr 9;								\
+     mtcr 0;								\
+-    addi 1,1,128;							\
+-    cfi_adjust_cfa_offset (-128);					\
++    addi 1,1,CANCEL_FRAMESIZE;						\
++    cfi_adjust_cfa_offset (-CANCEL_FRAMESIZE);				\
+     cfi_restore (lr);							\
+     cfi_restore (cr)
+ 
+ # define DOCARGS_0
+ # define UNDOCARGS_0
+ 
+-# define DOCARGS_1	std 3,128+48(1); DOCARGS_0
+-# define UNDOCARGS_1	ld 3,128+48(1); UNDOCARGS_0
++# define DOCARGS_1	std 3,CANCEL_PARM_SAVE(1); DOCARGS_0
++# define UNDOCARGS_1	ld 3,CANCEL_PARM_SAVE(1); UNDOCARGS_0
+ 
+-# define DOCARGS_2	std 4,128+56(1); DOCARGS_1
+-# define UNDOCARGS_2	ld 4,128+56(1); UNDOCARGS_1
++# define DOCARGS_2	std 4,CANCEL_PARM_SAVE+8(1); DOCARGS_1
++# define UNDOCARGS_2	ld 4,CANCEL_PARM_SAVE+8(1); UNDOCARGS_1
+ 
+-# define DOCARGS_3	std 5,128+64(1); DOCARGS_2
+-# define UNDOCARGS_3	ld 5,128+64(1); UNDOCARGS_2
++# define DOCARGS_3	std 5,CANCEL_PARM_SAVE+16(1); DOCARGS_2
++# define UNDOCARGS_3	ld 5,CANCEL_PARM_SAVE+16(1); UNDOCARGS_2
+ 
+-# define DOCARGS_4	std 6,128+72(1); DOCARGS_3
+-# define UNDOCARGS_4	ld 6,128+72(1); UNDOCARGS_3
++# define DOCARGS_4	std 6,CANCEL_PARM_SAVE+24(1); DOCARGS_3
++# define UNDOCARGS_4	ld 6,CANCEL_PARM_SAVE+24(1); UNDOCARGS_3
+ 
+-# define DOCARGS_5	std 7,128+80(1); DOCARGS_4
+-# define UNDOCARGS_5	ld 7,128+80(1); UNDOCARGS_4
++# define DOCARGS_5	std 7,CANCEL_PARM_SAVE+32(1); DOCARGS_4
++# define UNDOCARGS_5	ld 7,CANCEL_PARM_SAVE+32(1); UNDOCARGS_4
+ 
+-# define DOCARGS_6	std 8,128+88(1); DOCARGS_5
+-# define UNDOCARGS_6	ld 8,128+88(1); UNDOCARGS_5
++# define DOCARGS_6	std 8,CANCEL_PARM_SAVE+40(1); DOCARGS_5
++# define UNDOCARGS_6	ld 8,CANCEL_PARM_SAVE+40(1); UNDOCARGS_5
+ 
+ # ifdef IS_IN_libpthread
+ #  ifdef SHARED
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/__longjmp-common.S	2014-05-29 14:10:00.000000000 -0500
+@@ -133,7 +133,7 @@
+ 	ld r14,((JB_GPRS+0)*8)(r3)
+ 	lfd fp14,((JB_FPRS+0)*8)(r3)
+ #if defined SHARED && !defined IS_IN_rtld
+-	std r2,40(r1)	/* Restore the callers TOC save area.  */
++	std r2,FRAME_TOC_SAVE(r1)	/* Restore the callers TOC save area.  */
+ #endif
+ 	ld r15,((JB_GPRS+1)*8)(r3)
+ 	lfd fp15,((JB_FPRS+1)*8)(r3)
+@@ -151,7 +151,7 @@
+ 	PTR_DEMANGLE2 (r0, r25)
+ #endif
+ 	mtlr r0
+-/* 	std r2,40(r1)	Restore the TOC save area.  */
++/* 	std r2,FRAME_TOC_SAVE(r1)	Restore the TOC save area.  */
+ 	ld r21,((JB_GPRS+7)*8)(r3)
+ 	lfd fp21,((JB_FPRS+7)*8)(r3)
+ 	ld r22,((JB_GPRS+8)*8)(r3)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crti.S	2014-05-29 14:10:00.000000000 -0500
+@@ -66,8 +66,8 @@
+ BODY_LABEL (_init):
+ 	LOCALENTRY(_init)
+ 	mflr 0
+-	std 0, 16(r1)
+-	stdu r1, -112(r1)
++	std 0, FRAME_LR_SAVE(r1)
++	stdu r1, -FRAME_MIN_SIZE_PARM(r1)
+ #if PREINIT_FUNCTION_WEAK
+ 	addis r9, r2, .LC0@toc@ha
+ 	ld r0, .LC0@toc@l(r9)
+@@ -84,5 +84,5 @@
+ BODY_LABEL (_fini):
+ 	LOCALENTRY(_fini)
+ 	mflr 0
+-	std 0, 16(r1)
+-	stdu r1, -112(r1)
++	std 0, FRAME_LR_SAVE(r1)
++	stdu r1, -FRAME_MIN_SIZE_PARM(r1)
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crtn.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crtn.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crtn.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/crtn.S	2014-05-29 14:10:00.000000000 -0500
+@@ -39,13 +39,13 @@
+ #include <sysdep.h>
+ 
+ 	.section .init,"ax",@progbits
+-	addi r1, r1, 112
+-	ld r0, 16(r1)
++	addi r1, r1, FRAME_MIN_SIZE_PARM
++	ld r0, FRAME_LR_SAVE(r1)
+ 	mtlr r0
+ 	blr
+ 
+ 	.section .fini,"ax",@progbits
+-	addi r1, r1, 112
+-	ld r0, 16(r1)
++	addi r1, r1, FRAME_MIN_SIZE_PARM
++	ld r0, FRAME_LR_SAVE(r1)
+ 	mtlr r0
+ 	blr
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 14:10:00.000000000 -0500
+@@ -26,13 +26,13 @@
+    parm1 (r3) and the index (r0) need to be converted to an offset
+    (index * 24) in parm2 (r4).  */
+ 
+-#define FRAME_SIZE 176
++#define FRAME_SIZE (FRAME_MIN_SIZE+64)
+ /* We need to save the registers used to pass parameters, ie. r3 thru
+    r10;  Use local var space rather than the parameter save area,
+    because gcc as of 2010/05 doesn't allocate a proper stack frame for
+    a function that makes no calls except for __tls_get_addr and we
+    might be here resolving the __tls_get_addr call.  */
+-#define INT_PARMS 112
++#define INT_PARMS FRAME_MIN_SIZE
+ EALIGN(_dl_runtime_resolve, 4, 0)
+ 	stdu	r1,-FRAME_SIZE(r1)
+ 	cfi_adjust_cfa_offset (FRAME_SIZE)
+@@ -48,25 +48,25 @@
+ 	mflr	r0
+ 	std	r8,INT_PARMS+40(r1)
+ /* Store the LR in the LR Save area.  */
+-	std	r0,FRAME_SIZE+16(r1)
+-	cfi_offset (lr, 16)
++	std	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
++	cfi_offset (lr, FRAME_LR_SAVE)
+ 	mfcr	r0
+ 	std	r9,INT_PARMS+48(r1)
+ 	std	r10,INT_PARMS+56(r1)
+ /* I'm almost certain we don't have to save cr...  be safe.  */
+-	std	r0,FRAME_SIZE+8(r1)
++	std	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	bl	JUMPTARGET(_dl_fixup)
+ #ifndef SHARED
+ 	nop
+ #endif
+ /* Put the registers back.  */
+-	ld	r0,FRAME_SIZE+16(r1)
++	ld	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
+ 	ld	r10,INT_PARMS+56(r1)
+ 	ld	r9,INT_PARMS+48(r1)
+ 	ld	r8,INT_PARMS+40(r1)
+ 	ld	r7,INT_PARMS+32(r1)
+ 	mtlr	r0
+-	ld	r0,FRAME_SIZE+8(r1)
++	ld	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r6,INT_PARMS+24(r1)
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+@@ -76,7 +76,7 @@
+ 	ld	r3,INT_PARMS+0(r1)
+ #if _CALL_ELF == 2
+ /* Restore the caller's TOC in case we jump to a local entry point.  */
+-	ld	r2,FRAME_SIZE+40(r1)
++	ld	r2,FRAME_SIZE+FRAME_TOC_SAVE(r1)
+ #endif
+ /* Unwind the stack frame, and jump.  */
+ 	addi	r1,r1,FRAME_SIZE
+@@ -86,6 +86,7 @@
+ #undef INT_PARMS
+ 
+ 	/* Stack layout:
++	   (Note: some of these are not required for the ELFv2 ABI.)
+ 	  +592   previous backchain
+ 	  +584   spill_r31
+ 	  +576   spill_r30
+@@ -147,10 +148,11 @@
+ 	  +64    parm3
+ 	  +56    parm2
+ 	  +48    parm1
+-	 * Parameter save area, Allocated by the call, at least 8 double words
+-	  +40    TOC save area
+-	  +32    Reserved for linker
+-	  +24    Reserved for compiler
++	 * Parameter save area
++	 * (v1 ABI: Allocated by the call, at least 8 double words)
++	  +40    v1 ABI: TOC save area
++	  +32    v1 ABI: Reserved for linker
++	  +24    v1 ABI: Reserved for compiler / v2 ABI: TOC save area
+ 	  +16    LR save area
+ 	  +8     CR save area
+ 	r1+0     stack back chain
+@@ -206,15 +208,15 @@
+ /* Store the LR in the LR Save area of the previous frame.  */
+ /* XXX Do we have to do this?  */
+ 	la	r8,FRAME_SIZE(r1)
+-	std	r5,FRAME_SIZE+16(r1)
+-	cfi_offset (lr, 16)
++	std	r5,FRAME_SIZE+FRAME_LR_SAVE(r1)
++	cfi_offset (lr, FRAME_LR_SAVE)
+ 	std	r5,CALLING_LR(r1)
+ 	mfcr	r0
+ 	std	r9,INT_PARMS+48(r1)
+ 	std	r10,INT_PARMS+56(r1)
+ 	std	r8,CALLING_SP(r1)
+ /* I'm almost certain we don't have to save cr...  be safe.  */
+-	std	r0,FRAME_SIZE+8(r1)
++	std	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r12,.LC__dl_hwcap@toc(r2)
+ #ifdef SHARED
+ 	/* Load _rtld_local_ro._dl_hwcap.  */
+@@ -311,13 +313,13 @@
+ 	lvx	v12,r11,r10
+ 	lvx	v13,r11,r9
+ L(restoreFXR):
+-	ld	r0,FRAME_SIZE+16(r1)
++	ld	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
+ 	ld	r10,INT_PARMS+56(r1)
+ 	ld	r9,INT_PARMS+48(r1)
+ 	ld	r8,INT_PARMS+40(r1)
+ 	ld	r7,INT_PARMS+32(r1)
+ 	mtlr	r0
+-	ld	r0,FRAME_SIZE+8(r1)
++	ld	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r6,INT_PARMS+24(r1)
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+@@ -327,7 +329,7 @@
+ 	ld	r3,INT_PARMS+0(r1)
+ #if _CALL_ELF == 2
+ /* Restore the caller's TOC in case we jump to a local entry point.  */
+-	ld	r2,FRAME_SIZE+40(r1)
++	ld	r2,FRAME_SIZE+FRAME_TOC_SAVE(r1)
+ #endif
+ /* Load the floating point registers.  */
+ 	lfd	fp1,FPR_PARMS+0(r1)
+@@ -375,19 +377,19 @@
+ 	lvx	v12,r11,r10
+ 	lvx	v13,r11,r9
+ L(restoreFXR2):
+-	ld	r0,FRAME_SIZE+16(r1)
++	ld	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
+ 	ld	r10,INT_PARMS+56(r1)
+ 	ld	r9,INT_PARMS+48(r1)
+ 	ld	r8,INT_PARMS+40(r1)
+ 	ld	r7,INT_PARMS+32(r1)
+ 	mtlr	r0
+-	ld	r0,FRAME_SIZE+8(r1)
++	ld	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r6,INT_PARMS+24(r1)
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+ 	mtcrf	0xFF,r0
+ /* Prepare for calling the function returned by fixup.  */
+-	std	r2,40(r1)
++	std	r2,FRAME_TOC_SAVE(r1)
+ 	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
+ /* Load the floating point registers.  */
+@@ -406,7 +408,7 @@
+ 	lfd	fp13,FPR_PARMS+96(r1)
+ /* Call the target function.  */
+ 	bctrl
+-	ld	r2,40(r1)
++	ld	r2,FRAME_TOC_SAVE(r1)
+ 	lwz	r12,VR_VRSAVE(r1)
+ /* But return here and store the return values.  */
+ 	std	r3,INT_RTN(r1)
+@@ -441,7 +443,7 @@
+ 	beq	L(pltexitreturn)
+ 	lvx	v2,0,r10
+ L(pltexitreturn):
+-	ld	r0,FRAME_SIZE+16(r1)
++	ld	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
+ 	ld	r31,584(r1)
+ 	ld	r30,576(r1)
+ 	mtlr	r0
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/ppc-mcount.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/ppc-mcount.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/ppc-mcount.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/ppc-mcount.S	2014-05-29 14:10:00.000000000 -0500
+@@ -24,16 +24,16 @@
+ ENTRY(_mcount)
+ 	mflr		 r4
+ 	ld		 r11, 0(r1)
+-	stdu		 r1,-112(r1)
+-	cfi_adjust_cfa_offset (112)
+-	std		 r4, 128(r1)
+-	cfi_offset (lr, 16)
+-	ld		 r3, 16(r11)
++	stdu		 r1,-FRAME_MIN_SIZE(r1)
++	cfi_adjust_cfa_offset (FRAME_MIN_SIZE)
++	std		 r4, FRAME_MIN_SIZE+FRAME_LR_SAVE(r1)
++	cfi_offset (lr, FRAME_LR_SAVE)
++	ld		 r3, FRAME_LR_SAVE(r11)
+ 	bl		 JUMPTARGET(__mcount_internal)
+ 	nop
+-	ld		 r0, 128(r1)
++	ld		 r0, FRAME_MIN_SIZE+FRAME_LR_SAVE(r1)
+ 	mtlr		 r0
+-	addi		 r1,r1,112
++	addi		 r1,r1,FRAME_MIN_SIZE
+ 	blr
+ END(_mcount)
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/setjmp-common.S	2014-05-29 14:10:00.000000000 -0500
+@@ -56,7 +56,7 @@
+    bugz #269.  __GI__setjmp is used in csu/libc-start.c when
+    HAVE_CLEANUP_JMP_BUF is defined.  */
+ ENTRY (__GI__setjmp)
+-	std r2,40(r1)		/* Save the callers TOC in the save area.  */
++	std r2,FRAME_TOC_SAVE(r1)		/* Save the callers TOC in the save area.  */
+ 	CALL_MCOUNT 1
+ 	li r4,0			/* Set second argument to 0.  */
+ 	b JUMPTARGET (GLUE(__sigsetjmp,_ent))
+@@ -83,7 +83,7 @@
+ #endif
+ 	mflr r0
+ #if defined SHARED && !defined IS_IN_rtld
+-	ld   r5,40(r1)	/* Retrieve the callers TOC.  */
++	ld   r5,FRAME_TOC_SAVE(r1)	/* Retrieve the callers TOC.  */
+ 	std  r5,(JB_GPR2*8)(3)
+ #else
+ 	std  r2,(JB_GPR2*8)(3)
+@@ -219,14 +219,14 @@
+ 	b	JUMPTARGET (__sigjmp_save)
+ #else
+ 	mflr	r0
+-	std	r0,16(r1)
+-	stdu	r1,-112(r1)
+-	cfi_adjust_cfa_offset(112)
+-	cfi_offset(lr,16)
++	std	r0,FRAME_LR_SAVE(r1)
++	stdu	r1,-FRAME_MIN_SIZE(r1)
++	cfi_adjust_cfa_offset(FRAME_MIN_SIZE)
++	cfi_offset(lr,FRAME_LR_SAVE)
+ 	bl	JUMPTARGET (__sigjmp_save)
+ 	nop
+-	ld	r0,112+16(r1)
+-	addi	r1,r1,112
++	ld	r0,FRAME_MIN_SIZE+FRAME_LR_SAVE(r1)
++	addi	r1,r1,FRAME_MIN_SIZE
+ 	mtlr	r0
+ 	blr
+ #endif
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/sysdep.h	2014-05-29 14:10:00.000000000 -0500
+@@ -20,25 +20,67 @@
+ 
+ #ifdef __ASSEMBLER__
+ 
++/* Stack frame offsets.  */
++#if _CALL_ELF != 2
++#define FRAME_MIN_SIZE		112
++#define FRAME_MIN_SIZE_PARM	112
++#define FRAME_BACKCHAIN		0
++#define FRAME_CR_SAVE		8
++#define FRAME_LR_SAVE		16
++#define FRAME_TOC_SAVE		40
++#define FRAME_PARM_SAVE		48
++#define FRAME_PARM1_SAVE	48
++#define FRAME_PARM2_SAVE	56
++#define FRAME_PARM3_SAVE	64
++#define FRAME_PARM4_SAVE	72
++#define FRAME_PARM5_SAVE	80
++#define FRAME_PARM6_SAVE	88
++#define FRAME_PARM7_SAVE	96
++#define FRAME_PARM8_SAVE	104
++#define FRAME_PARM9_SAVE	112
++#else
++#define FRAME_MIN_SIZE		32
++#define FRAME_MIN_SIZE_PARM	96
++#define FRAME_BACKCHAIN		0
++#define FRAME_CR_SAVE		8
++#define FRAME_LR_SAVE		16
++#define FRAME_TOC_SAVE		24
++#define FRAME_PARM_SAVE		32
++#define FRAME_PARM1_SAVE	32
++#define FRAME_PARM2_SAVE	40
++#define FRAME_PARM3_SAVE	48
++#define FRAME_PARM4_SAVE	56
++#define FRAME_PARM5_SAVE	64
++#define FRAME_PARM6_SAVE	72
++#define FRAME_PARM7_SAVE	80
++#define FRAME_PARM8_SAVE	88
++#define FRAME_PARM9_SAVE	96
++#endif
++
+ /* Support macros for CALL_MCOUNT.  */
++#if _CALL_ELF == 2
++#define call_mcount_parm_offset (-64)
++#else
++#define call_mcount_parm_offset FRAME_PARM_SAVE
++#endif
+ 	.macro SAVE_ARG NARG
+ 	.if \NARG
+ 	SAVE_ARG \NARG-1
+-	std	2+\NARG,40+8*(\NARG)(1)
++	std	2+\NARG,call_mcount_parm_offset-8+8*(\NARG)(1)
+ 	.endif
+ 	.endm
+ 
+ 	.macro REST_ARG NARG
+ 	.if \NARG
+ 	REST_ARG \NARG-1
+-	ld	2+\NARG,112+40+8*(\NARG)(1)
++	ld	2+\NARG,FRAME_MIN_SIZE_PARM+call_mcount_parm_offset-8+8*(\NARG)(1)
+ 	.endif
+ 	.endm
+ 
+ 	.macro CFI_SAVE_ARG NARG
+ 	.if \NARG
+ 	CFI_SAVE_ARG \NARG-1
+-	cfi_offset(2+\NARG,40+8*(\NARG))
++	cfi_offset(2+\NARG,call_mcount_parm_offset-8+8*(\NARG))
+ 	.endif
+ 	.endm
+ 
+@@ -55,20 +97,20 @@
+ #ifdef	PROF
+ 	mflr	r0
+ 	SAVE_ARG \NARG
+-	std	r0,16(r1)
+-	stdu	r1,-112(r1)
+-	cfi_adjust_cfa_offset(112)
+-	cfi_offset(lr,16)
++	std	r0,FRAME_LR_SAVE(r1)
++	stdu	r1,-FRAME_MIN_SIZE_PARM(r1)
++	cfi_adjust_cfa_offset(FRAME_MIN_SIZE_PARM)
++	cfi_offset(lr,FRAME_LR_SAVE)
+ 	CFI_SAVE_ARG \NARG
+ 	bl	JUMPTARGET (_mcount)
+ #ifndef SHARED
+ 	nop
+ #endif
+-	ld	r0,128(r1)
++	ld	r0,FRAME_MIN_SIZE_PARM+FRAME_LR_SAVE(r1)
+ 	REST_ARG \NARG
+ 	mtlr	r0
+-	addi	r1,r1,112
+-	cfi_adjust_cfa_offset(-112)
++	addi	r1,r1,FRAME_MIN_SIZE_PARM
++	cfi_adjust_cfa_offset(-FRAME_MIN_SIZE_PARM)
+ 	cfi_restore(lr)
+ 	CFI_REST_ARG \NARG
+ #endif
+@@ -267,15 +309,15 @@
+     .else; \
+ .Local_syscall_error: \
+     mflr 0; \
+-    std 0,16(1); \
+-    stdu 1,-112(1); \
+-    cfi_adjust_cfa_offset(112); \
+-    cfi_offset(lr,16); \
++    std 0,FRAME_LR_SAVE(1); \
++    stdu 1,-FRAME_MIN_SIZE(1); \
++    cfi_adjust_cfa_offset(FRAME_MIN_SIZE); \
++    cfi_offset(lr,FRAME_LR_SAVE); \
+     bl JUMPTARGET(__syscall_error); \
+     nop; \
+-    ld 0,112+16(1); \
+-    addi 1,1,112; \
+-    cfi_adjust_cfa_offset(-112); \
++    ld 0,FRAME_MIN_SIZE+FRAME_LR_SAVE(1); \
++    addi 1,1,FRAME_MIN_SIZE; \
++    cfi_adjust_cfa_offset(-FRAME_MIN_SIZE); \
+     mtlr 0; \
+     cfi_restore(lr); \
+     blr; \
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/____longjmp_chk.S	2014-05-29 14:10:00.000000000 -0500
+@@ -33,24 +33,24 @@
+ 	cmpld	reg, r1;				\
+ 	bge+	.Lok;					\
+ 	mflr	r0;					\
+-	std	r0,16(r1);				\
++	std	r0,FRAME_LR_SAVE(r1);			\
+ 	mr	r31,r3;					\
+ 	mr	r30,r4;					\
+-	stdu	r1,-144(r1);				\
++	stdu	r1,-FRAME_MIN_SIZE-32(r1);		\
+ 	cfi_remember_state;				\
+-	cfi_adjust_cfa_offset (144);			\
+-	cfi_offset (lr, 16);				\
++	cfi_adjust_cfa_offset (FRAME_MIN_SIZE+32);	\
++	cfi_offset (lr, FRAME_LR_SAVE);			\
+ 	li	r3,0;					\
+-	addi	r4,r1,112;				\
++	addi	r4,r1,FRAME_MIN_SIZE;			\
+ 	li	r0,__NR_sigaltstack;			\
+ 	sc;						\
+ 	/* Without working sigaltstack we cannot perform the test.  */ \
+ 	bso	.Lok2;					\
+-	lwz	r0,112+8(r1);				\
++	lwz	r0,FRAME_MIN_SIZE+8(r1);		\
+ 	andi.	r4,r0,1;				\
+ 	beq	.Lfail;					\
+-	ld	r0,112+16(r1);				\
+-	ld	r4,112(r1);				\
++	ld	r0,FRAME_MIN_SIZE+16(r1);		\
++	ld	r4,FRAME_MIN_SIZE(r1);			\
+ 	add	r4,r4,r0;				\
+ 	sub	r3,r3,reg;				\
+ 	cmpld	r3,r0;					\
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/brk.S	2014-05-29 14:10:00.000000000 -0500
+@@ -31,9 +31,9 @@
+ 	CALL_MCOUNT 1
+ 	DISCARD_BOUNDS (r3)	/* the bounds are meaningless, so toss 'em.  */
+ 
+-	std	r3,48(r1)
++	std	r3,-8(r1)
+ 	DO_CALL(SYS_ify(brk))
+-	ld	r6,48(r1)
++	ld	r6,-8(r1)
+ 	ld	r5,.LC__curbrk@toc(r2)
+ 	std     r3,0(r5)
+ 	cmpld   r6,r3
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/clone.S	2014-05-29 14:10:00.000000000 -0500
+@@ -45,22 +45,22 @@
+ 	cror	cr0*4+eq,cr1*4+eq,cr0*4+eq
+ 	beq-	cr0,L(badargs)
+ 
+-	/* Save some regs in parm save area.  */
++	/* Save some regs in the "red zone".  */
+ #ifdef RESET_PID
+-	std	r29,48(r1)
++	std	r29,-24(r1)
+ #endif
+-	std	r30,56(r1)
+-	std	r31,64(r1)
++	std	r30,-16(r1)
++	std	r31,-8(r1)
+ #ifdef RESET_PID
+-	cfi_offset(r29,48)
++	cfi_offset(r29,-24)
+ #endif
+-	cfi_offset(r30,56)
+-	cfi_offset(r31,64)
++	cfi_offset(r30,-16)
++	cfi_offset(r31,-8)
+ 
+ 	/* Set up stack frame for child.  */
+ 	clrrdi	r4,r4,4
+ 	li	r0,0
+-	stdu	r0,-112(r4) /* min stack frame is 112 bytes per ABI */
++	stdu	r0,-FRAME_MIN_SIZE_PARM(r4)
+ 
+ 	/* Save fn, args, stack across syscall.  */
+ 	mr	r30,r3			/* Function in r30.  */
+@@ -102,12 +102,12 @@
+ L(oldpid):
+ #endif
+ 
+-	std	r2,40(r1)
++	std	r2,FRAME_TOC_SAVE(r1)
+ 	/* Call procedure.  */
+ 	PPC64_LOAD_FUNCPTR r30
+ 	mr	r3,r31
+ 	bctrl
+-	ld	r2,40(r1)
++	ld	r2,FRAME_TOC_SAVE(r1)
+ 	/* Call _exit with result from procedure.  */
+ #ifdef SHARED
+ 	b	JUMPTARGET(__GI__exit)
+@@ -126,15 +126,15 @@
+ L(parent):
+ 	/* Parent.  Restore registers & return.  */
+ #ifdef RESET_PID
+-	cfi_offset(r29,48)
++	cfi_offset(r29,-24)
+ #endif
+-	cfi_offset(r30,56)
+-	cfi_offset(r31,64)
++	cfi_offset(r30,-16)
++	cfi_offset(r31,-8)
+ #ifdef RESET_PID
+-	ld	r29,48(r1)
++	ld	r29,-24(r1)
+ #endif
+-	ld	r30,56(r1)
+-	ld	r31,64(r1)
++	ld	r30,-16(r1)
++	ld	r31,-8(r1)
+ #ifdef RESET_PID
+ 	cfi_restore(r29)
+ #endif
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S	2014-05-29 14:10:00.000000000 -0500
+@@ -46,8 +46,13 @@
+ # endif
+ #endif
+ 
+-#define FRAMESIZE 128
+-#define stackblock FRAMESIZE+48 /* offset to parm save area.  */
++#if _CALL_ELF == 2
++#define FRAMESIZE (FRAME_MIN_SIZE+16+64)
++#define stackblock (FRAME_MIN_SIZE+16)
++#else
++#define FRAMESIZE (FRAME_MIN_SIZE+16)
++#define stackblock (FRAMESIZE+FRAME_PARM_SAVE) /* offset to parm save area.  */
++#endif
+ 
+ 	.text
+ ENTRY(__socket)
+@@ -98,22 +103,22 @@
+ .Lsocket_cancel:
+ 	cfi_adjust_cfa_offset(FRAMESIZE)
+ 	mflr	r9
+-	std	r9,FRAMESIZE+16(r1)
+-	cfi_offset (lr, 16)
++	std	r9,FRAMESIZE+FRAME_LR_SAVE(r1)
++	cfi_offset (lr, FRAME_LR_SAVE)
+ 	CENABLE
+-	std	r3,120(r1)
++	std	r3,FRAME_MIN_SIZE+8(r1)
+ 	li	r3,P(SOCKOP_,socket)
+ 	addi	r4,r1,stackblock
+ 	DO_CALL(SYS_ify(socketcall))
+ 	mfcr	r0
+-	std	r3,112(r1)
+-	std	r0,FRAMESIZE+8(r1)
+-	cfi_offset (cr, 8)
+-	ld  	r3,120(r1)
++	std	r3,FRAME_MIN_SIZE(r1)
++	std	r0,FRAMESIZE+FRAME_CR_SAVE(r1)
++	cfi_offset (cr, FRAME_CR_SAVE)
++	ld  	r3,FRAME_MIN_SIZE+8(r1)
+ 	CDISABLE
+-	ld	r4,FRAMESIZE+16(r1)
+-	ld	r0,FRAMESIZE+8(r1)
+-	ld	r3,112(r1)
++	ld	r4,FRAMESIZE+FRAME_LR_SAVE(r1)
++	ld	r0,FRAMESIZE+FRAME_CR_SAVE(r1)
++	ld	r3,FRAME_MIN_SIZE(r1)
+ 	mtlr	r4
+ 	mtcr	r0
+ 	addi	r1,r1,FRAMESIZE
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym	2014-05-29 14:09:56.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/ucontext_i.sym	2014-05-29 14:10:00.000000000 -0500
+@@ -8,27 +8,6 @@
+ SIG_SETMASK
+ 
+ 
+--- Offsets of the fields in the powerpc64 ABI stack frame.
+--- XXX Do these correspond to some struct?
+-
+-FRAME_BACKCHAIN		0
+-FRAME_CR_SAVE		8
+-FRAME_LR_SAVE		16
+-FRAME_COMPILER_DW	24
+-FRAME_LINKER_DW		32
+-FRAME_TOC_SAVE		40
+-FRAME_PARM_SAVE		48
+-FRAME_PARM1_SAVE	48
+-FRAME_PARM2_SAVE	56
+-FRAME_PARM3_SAVE	64
+-FRAME_PARM4_SAVE	72
+-FRAME_PARM5_SAVE	80
+-FRAME_PARM6_SAVE	88
+-FRAME_PARM7_SAVE	96
+-FRAME_PARM8_SAVE	104
+-FRAME_PARM9_SAVE	112
+-
+-
+ -- Offsets of the fields in the ucontext_t structure.
+ #define ucontext(member)	offsetof (ucontext_t, member)
+ #define mcontext(member)	ucontext (uc_mcontext.member)
diff --git a/SOURCES/glibc-ppc64le-42.patch b/SOURCES/glibc-ppc64le-42.patch
new file mode 100644
index 0000000..f5fa53e
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-42.patch
@@ -0,0 +1,404 @@
+# commit 61cd8fe4017c251617dd300818917e61a12ab48e
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 06:59:37 2013 -0600
+# 
+#     PowerPC64 ELFv2 ABI 5/6: LD_AUDIT interface changes
+#     
+#     The ELFv2 ABI changes the calling convention by passing and returning
+#     structures in registers in more cases than the old ABI:
+#     http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01145.html
+#     http://gcc.gnu.org/ml/gcc-patches/2013-11/msg01147.html
+#     
+#     For the most part, this does not affect glibc, since glibc assembler
+#     files do not use structure parameters / return values.  However, one
+#     place is affected: the LD_AUDIT interface provides a structure to
+#     the audit routine that contains all registers holding function
+#     argument and return values for the intercepted PLT call.
+#     
+#     Since the new ABI now sometimes uses registers to return values
+#     that were never used for this purpose in the old ABI, this structure
+#     has to be extended.  To force audit routines to be modified for the
+#     new ABI if necessary, the patch defines v2 variants of the la_ppc64
+#     types and routines.
+#     
+#     In addition, the patch contains two unrelated changes to the
+#     PLT trampoline routines: it fixes a bug where FPR return values
+#     were stored in the wrong place, and it removes the unnecessary
+#     save/restore of CR.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/bits/link.h glibc-2.17-c758a686/sysdeps/powerpc/bits/link.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/bits/link.h	2014-05-29 14:11:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/bits/link.h	2014-05-29 14:11:20.000000000 -0500
+@@ -63,7 +63,7 @@
+ 
+ __END_DECLS
+ 
+-#else
++#elif _CALL_ELF != 2
+ 
+ /* Registers for entry into PLT on PPC64.  */
+ typedef struct La_ppc64_regs
+@@ -107,4 +107,48 @@
+ 
+ __END_DECLS
+ 
++#else
++
++/* Registers for entry into PLT on PPC64 in the ELFv2 ABI.  */
++typedef struct La_ppc64v2_regs
++{
++  uint64_t lr_reg[8];
++  double lr_fp[13];
++  uint32_t __padding;
++  uint32_t lr_vrsave;
++  uint32_t lr_vreg[12][4] __attribute__ ((aligned (16)));
++  uint64_t lr_r1;
++  uint64_t lr_lr;
++} La_ppc64v2_regs;
++
++/* Return values for calls from PLT on PPC64 in the ELFv2 ABI.  */
++typedef struct La_ppc64v2_retval
++{
++  uint64_t lrv_r3;
++  uint64_t lrv_r4;
++  double lrv_fp[10];
++  uint32_t lrv_vreg[8][4] __attribute__ ((aligned (16)));
++} La_ppc64v2_retval;
++
++
++__BEGIN_DECLS
++
++extern Elf64_Addr la_ppc64v2_gnu_pltenter (Elf64_Sym *__sym,
++					   unsigned int __ndx,
++					   uintptr_t *__refcook,
++					   uintptr_t *__defcook,
++					   La_ppc64v2_regs *__regs,
++					   unsigned int *__flags,
++					   const char *__symname,
++					   long int *__framesizep);
++extern unsigned int la_ppc64v2_gnu_pltexit (Elf64_Sym *__sym,
++					    unsigned int __ndx,
++					    uintptr_t *__refcook,
++					    uintptr_t *__defcook,
++					    const La_ppc64v2_regs *__inregs,
++					    La_ppc64v2_retval *__outregs,
++					    const char *__symname);
++
++__END_DECLS
++
+ #endif
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/ldsodefs.h glibc-2.17-c758a686/sysdeps/powerpc/ldsodefs.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/ldsodefs.h	2014-05-29 14:11:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/ldsodefs.h	2014-05-29 14:11:20.000000000 -0500
+@@ -25,6 +25,8 @@
+ struct La_ppc32_retval;
+ struct La_ppc64_regs;
+ struct La_ppc64_retval;
++struct La_ppc64v2_regs;
++struct La_ppc64v2_retval;
+ 
+ #define ARCH_PLTENTER_MEMBERS						\
+     Elf32_Addr (*ppc32_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \
+@@ -34,7 +36,12 @@
+     Elf64_Addr (*ppc64_gnu_pltenter) (Elf64_Sym *, unsigned int, uintptr_t *, \
+ 				      uintptr_t *, struct La_ppc64_regs *, \
+ 				      unsigned int *, const char *name,	\
+-				      long int *framesizep)
++				      long int *framesizep);		\
++    Elf64_Addr (*ppc64v2_gnu_pltenter) (Elf64_Sym *, unsigned int,	\
++					uintptr_t *,  uintptr_t *,	\
++					struct La_ppc64v2_regs *,	\
++					unsigned int *, const char *name, \
++					long int *framesizep)
+ 
+ #define ARCH_PLTEXIT_MEMBERS						\
+     unsigned int (*ppc32_gnu_pltexit) (Elf32_Sym *, unsigned int,	\
+@@ -47,7 +54,14 @@
+ 				       uintptr_t *,			\
+ 				       uintptr_t *,			\
+ 				       const struct La_ppc64_regs *,	\
+-				       struct La_ppc64_retval *, const char *)
++				       struct La_ppc64_retval *,	\
++				       const char *);			\
++    unsigned int (*ppc64v2_gnu_pltexit) (Elf64_Sym *, unsigned int,	\
++					 uintptr_t *,			\
++					 uintptr_t *,			\
++					 const struct La_ppc64v2_regs *,\
++					 struct La_ppc64v2_retval *,	\
++					 const char *)
+ 
+ #include_next <ldsodefs.h>
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 14:11:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-05-29 14:11:20.000000000 -0500
+@@ -546,8 +546,13 @@
+ 
+ 
+ /* Names of the architecture-specific auditing callback functions.  */
++#if _CALL_ELF != 2
+ #define ARCH_LA_PLTENTER ppc64_gnu_pltenter
+ #define ARCH_LA_PLTEXIT ppc64_gnu_pltexit
++#else
++#define ARCH_LA_PLTENTER ppc64v2_gnu_pltenter
++#define ARCH_LA_PLTEXIT ppc64v2_gnu_pltexit
++#endif
+ 
+ #endif /* dl_machine_h */
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 14:11:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-trampoline.S	2014-05-29 14:11:20.000000000 -0500
+@@ -50,11 +50,8 @@
+ /* Store the LR in the LR Save area.  */
+ 	std	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
+ 	cfi_offset (lr, FRAME_LR_SAVE)
+-	mfcr	r0
+ 	std	r9,INT_PARMS+48(r1)
+ 	std	r10,INT_PARMS+56(r1)
+-/* I'm almost certain we don't have to save cr...  be safe.  */
+-	std	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	bl	JUMPTARGET(_dl_fixup)
+ #ifndef SHARED
+ 	nop
+@@ -66,11 +63,9 @@
+ 	ld	r8,INT_PARMS+40(r1)
+ 	ld	r7,INT_PARMS+32(r1)
+ 	mtlr	r0
+-	ld	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r6,INT_PARMS+24(r1)
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+-	mtcrf	0xFF,r0
+ /* Prepare for calling the function returned by fixup.  */
+ 	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
+@@ -85,18 +80,30 @@
+ #undef FRAME_SIZE
+ #undef INT_PARMS
+ 
+-	/* Stack layout:
+-	   (Note: some of these are not required for the ELFv2 ABI.)
+-	  +592   previous backchain
+-	  +584   spill_r31
+-	  +576   spill_r30
+-	  +560   v1
+-	  +552   fp4
+-	  +544   fp3
+-	  +536   fp2
+-	  +528   fp1
+-	  +520   r4
+-	  +512   r3
++	/* Stack layout:		ELFv2 ABI.
++					+752   previous backchain
++					+744   spill_r31
++					+736   spill_r30
++					+720   v8
++					+704   v7
++					+688   v6
++					+672   v5
++					+656   v4
++					+640   v3
++					+624   v2
++					+608   v1
++					+600   fp10
++	  ELFv1 ABI			+592   fp9
++	  +592   previous backchain	+584   fp8
++	  +584   spill_r31		+576   fp7
++	  +576   spill_r30		+568   fp6
++	  +560   v1			+560   fp5
++	  +552   fp4			+552   fp4
++	  +544   fp3			+544   fp3
++	  +536   fp2			+536   fp2
++	  +528   fp1			+528   fp1
++	  +520   r4			+520   r4
++	  +512   r3			+512   r3
+ 	   return values
+           +504   free
+ 	  +496   stackframe
+@@ -157,10 +164,15 @@
+ 	  +8     CR save area
+ 	r1+0     stack back chain
+ 	*/
+-#define FRAME_SIZE 592
++#if _CALL_ELF == 2
++# define FRAME_SIZE 752
++# define VR_RTN 608
++#else
++# define FRAME_SIZE 592
++# define VR_RTN 560
++#endif
+ #define INT_RTN 512
+ #define FPR_RTN 528
+-#define VR_RTN 560
+ #define STACK_FRAME 496
+ #define CALLING_LR 488
+ #define CALLING_SP 480
+@@ -205,18 +217,14 @@
+ 	mflr	r5
+ 	std	r7,INT_PARMS+32(r1)
+ 	std	r8,INT_PARMS+40(r1)
+-/* Store the LR in the LR Save area of the previous frame.  */
+-/* XXX Do we have to do this?  */
++/* Store the LR in the LR Save area.  */
+ 	la	r8,FRAME_SIZE(r1)
+ 	std	r5,FRAME_SIZE+FRAME_LR_SAVE(r1)
+ 	cfi_offset (lr, FRAME_LR_SAVE)
+ 	std	r5,CALLING_LR(r1)
+-	mfcr	r0
+ 	std	r9,INT_PARMS+48(r1)
+ 	std	r10,INT_PARMS+56(r1)
+ 	std	r8,CALLING_SP(r1)
+-/* I'm almost certain we don't have to save cr...  be safe.  */
+-	std	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r12,.LC__dl_hwcap@toc(r2)
+ #ifdef SHARED
+ 	/* Load _rtld_local_ro._dl_hwcap.  */
+@@ -319,11 +327,9 @@
+ 	ld	r8,INT_PARMS+40(r1)
+ 	ld	r7,INT_PARMS+32(r1)
+ 	mtlr	r0
+-	ld	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r6,INT_PARMS+24(r1)
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+-	mtcrf	0xFF,r0
+ /* Prepare for calling the function returned by fixup.  */
+ 	PPC64_LOAD_FUNCPTR r3
+ 	ld	r3,INT_PARMS+0(r1)
+@@ -346,10 +352,11 @@
+ 	lfd	fp12,FPR_PARMS+88(r1)
+ 	lfd	fp13,FPR_PARMS+96(r1)
+ /* Unwind the stack frame, and jump.  */
+-	ld	r31,584(r1)
+-	ld	r30,576(r1)
++	ld	r31,FRAME_SIZE-8(r1)
++	ld	r30,FRAME_SIZE-16(r1)
+ 	addi	r1,r1,FRAME_SIZE
+ 	bctr
++
+ L(do_pltexit):
+ 	la	r10,(VR_PARMS+0)(r1)
+ 	la	r9,(VR_PARMS+16)(r1)
+@@ -383,11 +390,9 @@
+ 	ld	r8,INT_PARMS+40(r1)
+ 	ld	r7,INT_PARMS+32(r1)
+ 	mtlr	r0
+-	ld	r0,FRAME_SIZE+FRAME_CR_SAVE(r1)
+ 	ld	r6,INT_PARMS+24(r1)
+ 	ld	r5,INT_PARMS+16(r1)
+ 	ld	r4,INT_PARMS+8(r1)
+-	mtcrf	0xFF,r0
+ /* Prepare for calling the function returned by fixup.  */
+ 	std	r2,FRAME_TOC_SAVE(r1)
+ 	PPC64_LOAD_FUNCPTR r3
+@@ -413,16 +418,37 @@
+ /* But return here and store the return values.  */
+ 	std	r3,INT_RTN(r1)
+ 	std	r4,INT_RTN+8(r1)
+-	stfd	fp1,FPR_PARMS+0(r1)
+-	stfd	fp2,FPR_PARMS+8(r1)
++	stfd	fp1,FPR_RTN+0(r1)
++	stfd	fp2,FPR_RTN+8(r1)
+ 	cmpdi	cr0,r12,0
+ 	la	r10,VR_RTN(r1)
+-	stfd	fp3,FPR_PARMS+16(r1)
+-	stfd	fp4,FPR_PARMS+24(r1)
++	stfd	fp3,FPR_RTN+16(r1)
++	stfd	fp4,FPR_RTN+24(r1)
++#if _CALL_ELF == 2
++	la	r12,VR_RTN+16(r1)
++	stfd	fp5,FPR_RTN+32(r1)
++	stfd	fp6,FPR_RTN+40(r1)
++	li	r5,32
++	li	r6,64
++	stfd	fp7,FPR_RTN+48(r1)
++	stfd	fp8,FPR_RTN+56(r1)
++	stfd	fp9,FPR_RTN+64(r1)
++	stfd	fp10,FPR_RTN+72(r1)
++#endif
+ 	mr	r3,r31
+ 	mr	r4,r30
+ 	beq	L(callpltexit)
+ 	stvx	v2,0,r10
++#if _CALL_ELF == 2
++	stvx	v3,0,r12
++	stvx	v4,r5,r10
++	stvx	v5,r5,r12
++	addi	r5,r5,64
++	stvx	v6,r6,r10
++	stvx	v7,r6,r12
++	stvx	v8,r5,r10
++	stvx	v9,r5,r12
++#endif
+ L(callpltexit):
+ 	addi	r5,r1,INT_PARMS
+ 	addi	r6,r1,INT_RTN
+@@ -434,18 +460,39 @@
+ 	lwz	r12,VR_VRSAVE(r1)
+ 	ld	r3,INT_RTN(r1)
+ 	ld	r4,INT_RTN+8(r1)
+-	lfd	fp1,FPR_PARMS+0(r1)
+-	lfd	fp2,FPR_PARMS+8(r1)
++	lfd	fp1,FPR_RTN+0(r1)
++	lfd	fp2,FPR_RTN+8(r1)
+ 	cmpdi	cr0,r12,0
+-	la	r10,VR_RTN(r1)
+-	lfd	fp3,FPR_PARMS+16(r1)
+-	lfd	fp4,FPR_PARMS+24(r1)
++	la	r11,VR_RTN(r1)
++	lfd	fp3,FPR_RTN+16(r1)
++	lfd	fp4,FPR_RTN+24(r1)
++#if _CALL_ELF == 2
++	la	r12,VR_RTN+16(r1)
++	lfd	fp5,FPR_RTN+32(r1)
++	lfd	fp6,FPR_RTN+40(r1)
++	li	r30,32
++	li	r31,64
++	lfd	fp7,FPR_RTN+48(r1)
++	lfd	fp8,FPR_RTN+56(r1)
++	lfd	fp9,FPR_RTN+64(r1)
++	lfd	fp10,FPR_RTN+72(r1)
++#endif
+ 	beq	L(pltexitreturn)
+-	lvx	v2,0,r10
++	lvx	v2,0,r11
++#if _CALL_ELF == 2
++	lvx	v3,0,r12
++	lvx	v4,r30,r11
++	lvx	v5,r30,r12
++	addi	r30,r30,64
++	lvx	v6,r31,r11
++	lvx	v7,r31,r12
++	lvx	v8,r30,r11
++	lvx	v9,r30,r12
++#endif
+ L(pltexitreturn):
+ 	ld	r0,FRAME_SIZE+FRAME_LR_SAVE(r1)
+-	ld	r31,584(r1)
+-	ld	r30,576(r1)
++	ld	r31,FRAME_SIZE-8(r1)
++	ld	r30,FRAME_SIZE-16(r1)
+ 	mtlr	r0
+ 	ld	r1,0(r1)
+ 	blr
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/tst-audit.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/tst-audit.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/tst-audit.h	2014-05-29 14:11:12.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/tst-audit.h	2014-05-29 14:11:20.000000000 -0500
+@@ -18,8 +18,16 @@
+    License along with the GNU C Library.  If not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
++#if _CALL_ELF != 2
+ #define pltenter la_ppc64_gnu_pltenter
+ #define pltexit la_ppc64_gnu_pltexit
+ #define La_regs La_ppc64_regs
+ #define La_retval La_ppc64_retval
+ #define int_retval lrv_r3
++#else
++#define pltenter la_ppc64v2_gnu_pltenter
++#define pltexit la_ppc64v2_gnu_pltexit
++#define La_regs La_ppc64v2_regs
++#define La_retval La_ppc64v2_retval
++#define int_retval lrv_r3
++#endif
diff --git a/SOURCES/glibc-ppc64le-43.patch b/SOURCES/glibc-ppc64le-43.patch
new file mode 100644
index 0000000..8c43abb
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-43.patch
@@ -0,0 +1,248 @@
+# commit 5b118558f9fb0620508d51c34c2cb5ba4f1f01c2
+# Author: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
+# Date:   Wed Dec 4 07:08:48 2013 -0600
+# 
+#     PowerPC64 ELFv2 ABI 6/6: Bump ld.so soname version number
+#     
+#     To avoid having a ELFv2 binary accidentally picking up an old ABI ld.so,
+#     this patch bumps the soname to ld64.so.2.
+#     
+#     In theory (or for testing purposes) this will also allow co-installing
+#     ld.so versions for both ABIs on the same system.  Note that the kernel
+#     will already be able to load executables of both ABIs.  However, there
+#     is currently no plan to use that theoretical possibility in a any
+#     supported distribution environment ...
+#     
+#     Note that in order to check which ABI to use, we need to invoke the
+#     compiler to check the _CALL_ELF macro; this is done in a new configure
+#     check in sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac,
+#     replacing the hard-coded value of default-abi in the Makefile.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/Makefile glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/Makefile
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/Makefile	2014-05-29 14:12:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/Makefile	2014-05-29 14:12:30.000000000 -0500
+@@ -1,9 +1,12 @@
+-abi-variants := 32 64
++abi-variants := 32 64-v1 64-v2
+ abi-32-options := -U__powerpc64__
+ abi-32-condition := __WORDSIZE == 32
+-abi-64-options := -D__powerpc64__
+-abi-64-condition := __WORDSIZE == 64
+-abi-64-ld-soname := ld64.so.1
++abi-64-v1-options := -D__powerpc64__ -U_CALL_ELF -D_CALL_ELF=1
++abi-64-v1-condition := __WORDSIZE == 64 && _CALL_ELF != 2
++abi-64-v1-ld-soname := ld64.so.1
++abi-64-v2-options := -D__powerpc64__ -U_CALL_ELF -D_CALL_ELF=2
++abi-64-v2-condition := __WORDSIZE == 64 && _CALL_ELF == 2
++abi-64-v2-ld-soname := ld64.so.2
+ 
+ ifeq ($(subdir),rt)
+ librt-routines += rt-sysdep
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/ldconfig.h glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/ldconfig.h
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/ldconfig.h	2014-05-29 14:12:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/ldconfig.h	2014-05-29 14:12:30.000000000 -0500
+@@ -20,7 +20,8 @@
+ 
+ #define SYSDEP_KNOWN_INTERPRETER_NAMES \
+   { "/lib/ld.so.1", FLAG_ELF_LIBC6 },	\
+-  { "/lib64/ld64.so.1", FLAG_ELF_LIBC6 },
++  { "/lib64/ld64.so.1", FLAG_ELF_LIBC6 }, \
++  { "/lib64/ld64.so.2", FLAG_ELF_LIBC6 },
+ #define SYSDEP_KNOWN_LIBRARY_NAMES \
+   { "libc.so.6", FLAG_ELF_LIBC6 },	\
+   { "libm.so.6", FLAG_ELF_LIBC6 },
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/Makefile glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/Makefile
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/Makefile	2014-05-29 14:12:25.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/Makefile	1969-12-31 18:00:00.000000000 -0600
+@@ -1,2 +0,0 @@
+-# See Makeconfig regarding the use of default-abi.
+-default-abi := 64
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure	1969-12-31 18:00:00.000000000 -0600
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure	2014-05-29 14:12:30.000000000 -0500
+@@ -0,0 +1,166 @@
++# This file is generated from configure.ac by Autoconf.  DO NOT EDIT!
++ # Local configure fragment for sysdeps/unix/sysv/linux/powerpc/powerpc64/.
++
++# Define default-abi according to compiler flags.
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
++$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
++if ${ac_cv_path_GREP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if test -z "$GREP"; then
++  ac_path_GREP_found=false
++  # Loop through the user's path and test for each of PROGNAME-LIST
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_prog in grep ggrep; do
++    for ac_exec_ext in '' $ac_executable_extensions; do
++      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
++      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++# Check for GNU ac_path_GREP and select it if it is found.
++  # Check for GNU $ac_path_GREP
++case `"$ac_path_GREP" --version 2>&1` in
++*GNU*)
++  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
++*)
++  ac_count=0
++  $as_echo_n 0123456789 >"conftest.in"
++  while :
++  do
++    cat "conftest.in" "conftest.in" >"conftest.tmp"
++    mv "conftest.tmp" "conftest.in"
++    cp "conftest.in" "conftest.nl"
++    $as_echo 'GREP' >> "conftest.nl"
++    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++    as_fn_arith $ac_count + 1 && ac_count=$as_val
++    if test $ac_count -gt ${ac_path_GREP_max-0}; then
++      # Best one so far, save it but keep looking for a better one
++      ac_cv_path_GREP="$ac_path_GREP"
++      ac_path_GREP_max=$ac_count
++    fi
++    # 10*(2^10) chars as input seems more than enough
++    test $ac_count -gt 10 && break
++  done
++  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++      $ac_path_GREP_found && break 3
++    done
++  done
++  done
++IFS=$as_save_IFS
++  if test -z "$ac_cv_path_GREP"; then
++    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++  fi
++else
++  ac_cv_path_GREP=$GREP
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
++$as_echo "$ac_cv_path_GREP" >&6; }
++ GREP="$ac_cv_path_GREP"
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
++$as_echo_n "checking for egrep... " >&6; }
++if ${ac_cv_path_EGREP+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
++   then ac_cv_path_EGREP="$GREP -E"
++   else
++     if test -z "$EGREP"; then
++  ac_path_EGREP_found=false
++  # Loop through the user's path and test for each of PROGNAME-LIST
++  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++  IFS=$as_save_IFS
++  test -z "$as_dir" && as_dir=.
++    for ac_prog in egrep; do
++    for ac_exec_ext in '' $ac_executable_extensions; do
++      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
++      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++# Check for GNU ac_path_EGREP and select it if it is found.
++  # Check for GNU $ac_path_EGREP
++case `"$ac_path_EGREP" --version 2>&1` in
++*GNU*)
++  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
++*)
++  ac_count=0
++  $as_echo_n 0123456789 >"conftest.in"
++  while :
++  do
++    cat "conftest.in" "conftest.in" >"conftest.tmp"
++    mv "conftest.tmp" "conftest.in"
++    cp "conftest.in" "conftest.nl"
++    $as_echo 'EGREP' >> "conftest.nl"
++    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++    as_fn_arith $ac_count + 1 && ac_count=$as_val
++    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
++      # Best one so far, save it but keep looking for a better one
++      ac_cv_path_EGREP="$ac_path_EGREP"
++      ac_path_EGREP_max=$ac_count
++    fi
++    # 10*(2^10) chars as input seems more than enough
++    test $ac_count -gt 10 && break
++  done
++  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++      $ac_path_EGREP_found && break 3
++    done
++  done
++  done
++IFS=$as_save_IFS
++  if test -z "$ac_cv_path_EGREP"; then
++    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++  fi
++else
++  ac_cv_path_EGREP=$EGREP
++fi
++
++   fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
++$as_echo "$ac_cv_path_EGREP" >&6; }
++ EGREP="$ac_cv_path_EGREP"
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler is using the PowerPC64 ELFv2 ABI" >&5
++$as_echo_n "checking whether the compiler is using the PowerPC64 ELFv2 ABI... " >&6; }
++if ${libc_cv_ppc64_elfv2_abi+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++#if _CALL_ELF == 2
++                      yes
++                     #endif
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++  $EGREP "yes" >/dev/null 2>&1; then :
++  libc_cv_ppc64_elfv2_abi=yes
++else
++  libc_cv_ppc64_elfv2_abi=no
++fi
++rm -f conftest*
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ppc64_elfv2_abi" >&5
++$as_echo "$libc_cv_ppc64_elfv2_abi" >&6; }
++if test $libc_cv_ppc64_elfv2_abi = yes; then
++  config_vars="$config_vars
++default-abi = 64-v2"
++else
++  config_vars="$config_vars
++default-abi = 64-v1"
++fi
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac	1969-12-31 18:00:00.000000000 -0600
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/configure.ac	2014-05-29 14:12:30.000000000 -0500
+@@ -0,0 +1,15 @@
++GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory.
++# Local configure fragment for sysdeps/unix/sysv/linux/powerpc/powerpc64/.
++
++# Define default-abi according to compiler flags.
++AC_CACHE_CHECK([whether the compiler is using the PowerPC64 ELFv2 ABI],
++  [libc_cv_ppc64_elfv2_abi],
++  [AC_EGREP_CPP(yes,[#if _CALL_ELF == 2
++                      yes
++                     #endif
++  ], libc_cv_ppc64_elfv2_abi=yes, libc_cv_ppc64_elfv2_abi=no)])
++if test $libc_cv_ppc64_elfv2_abi = yes; then
++  LIBC_CONFIG_VAR([default-abi], [64-v2])
++else
++  LIBC_CONFIG_VAR([default-abi], [64-v1])
++fi
diff --git a/SOURCES/glibc-ppc64le-44.patch b/SOURCES/glibc-ppc64le-44.patch
new file mode 100644
index 0000000..e074cb9
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-44.patch
@@ -0,0 +1,26 @@
+# commit c859b32e9d76afe8a3f20bb9528961a573c06937
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Tue Apr 1 14:07:42 2014 +1030
+# 
+#     Fix s_copysign stack temp for PowerPC64 ELFv2
+# 
+#         [BZ #16786]
+#         * sysdeps/powerpc/powerpc64/fpu/s_copysign.S: Don't trash stack.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_copysign.S glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_copysign.S
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_copysign.S	2014-05-29 14:13:47.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/fpu/s_copysign.S	2014-05-29 14:13:50.000000000 -0500
+@@ -27,11 +27,11 @@
+ /* double [f1] copysign (double [f1] x, double [f2] y);
+    copysign(x,y) returns a value with the magnitude of x and
+    with the sign bit of y.  */
+-	stfd	fp2,56(r1)
++	stfd	fp2,-8(r1)
+ 	nop
+ 	nop
+ 	nop
+-	ld	r3,56(r1)
++	ld	r3,-8(r1)
+ 	cmpdi   r3,0
+ 	blt     L(0)
+ 	fabs    fp1,fp1
diff --git a/SOURCES/glibc-ppc64le-45.patch b/SOURCES/glibc-ppc64le-45.patch
new file mode 100644
index 0000000..9030fc2
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-45.patch
@@ -0,0 +1,33 @@
+#
+# For PPC64LE only!
+#
+# This is fixed upstream by the removal of Versions.def
+# and auto-generation of the SHLIB_COMPAT required entries.
+# See: https://sourceware.org/ml/libc-alpha/2014-02/msg00818.html
+# Backporting that infrastructure to RHEL 7.x is too much work
+# at this junction for little reward. Instead we simply fix up
+# the Versions.def to include GLIBC_2.3 which is used by
+# nptl/old_pthread_atfork.c, otherwise ppc64le will get
+# pthread_atfork in libpthread.so.0 when it should not.
+#
+# The ABI testing for libpthread.so now passes for ppc64le.
+#
+diff -urN glibc-2.17-c758a686/Versions.def glibc-2.17-c758a686/Versions.def
+--- glibc-2.17-c758a686/Versions.def	2014-06-02 21:13:12.000000000 +0000
++++ glibc-2.17-c758a686/Versions.def	2014-06-02 21:14:38.000000000 +0000
+@@ -92,6 +92,7 @@
+   GLIBC_2.2
+   GLIBC_2.2.3
+   GLIBC_2.2.6
++  GLIBC_2.3
+   GLIBC_2.3.2
+   GLIBC_2.3.3
+   GLIBC_2.3.4
+@@ -99,6 +100,7 @@
+   GLIBC_2.6
+   GLIBC_2.11
+   GLIBC_2.12
++  GLIBC_2.17
+   GLIBC_PRIVATE
+ }
+ libresolv {
diff --git a/SOURCES/glibc-ppc64le-46.patch b/SOURCES/glibc-ppc64le-46.patch
new file mode 100644
index 0000000..6f3d1d9
--- /dev/null
+++ b/SOURCES/glibc-ppc64le-46.patch
@@ -0,0 +1,22 @@
+#
+# On POWER this patch also fixes test-ildoubl and test-ldouble failures where tan
+# rounded toward zero had acceptable 1 ULP error. Upstream is using 3 ULP, but
+# we prefer to keep the bound tighter unless we have a reason not to.
+#
+# This is the ppc64le version which is required becuase it applies *after* another
+# ppc64le patch that touches the same ULPs file. See glibc-power-libm-test-ulps.patch
+# for the ppc64/ppc version.
+#
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps
+--- glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps	2014-07-25 22:07:06.280020855 -0400
++++ glibc-2.17-c758a686/sysdeps/powerpc/fpu/libm-test-ulps	2014-07-25 22:26:54.650021033 -0400
+@@ -2644,6 +2644,9 @@
+ Test "tan_towardzero (2)":
+ ildouble: 1
+ ldouble: 1
++Test "tan_towardzero (2) == -2.1850398632615189916433061023136825434320":
++ildouble: 1
++ldouble: 1
+ Test "tan_towardzero (3) == -0.1425465430742778052956354105339134932261":
+ float: 1
+ ifloat: 1
diff --git a/SOURCES/glibc-rh1000923.patch b/SOURCES/glibc-rh1000923.patch
new file mode 100644
index 0000000..afc6f63
--- /dev/null
+++ b/SOURCES/glibc-rh1000923.patch
@@ -0,0 +1,32 @@
+commit 595aba70a4c676f7efaf6a012f54cd22aa189c5b
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Mon Aug 26 15:42:29 2013 +0530
+
+    Initialize res_hconf in nscd
+    
+    Fixes BZ #15890.
+
+diff -pruN glibc-2.17-c758a686/nscd/aicache.c glibc-2.17-c758a686/nscd/aicache.c
+--- glibc-2.17-c758a686/nscd/aicache.c	2013-08-11 04:22:55.000000000 +0530
++++ glibc-2.17-c758a686/nscd/aicache.c	2013-08-26 11:10:25.843470413 +0530
+@@ -25,6 +25,7 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include <sys/mman.h>
++#include <resolv/res_hconf.h>
+ 
+ #include "dbg_log.h"
+ #include "nscd.h"
+@@ -100,8 +101,11 @@ addhstaiX (struct database_dyn *db, int
+     no_more = __nss_database_lookup ("hosts", NULL,
+ 				     "dns [!UNAVAIL=return] files", &nip);
+ 
++  /* Initialize configurations.  */
++  if (__builtin_expect (!_res_hconf.initialized, 0))
++    _res_hconf_init ();
+   if (__res_maybe_init (&_res, 0) == -1)
+-	    no_more = 1;
++    no_more = 1;
+ 
+   /* If we are looking for both IPv4 and IPv6 address we don't want
+      the lookup functions to automatically promote IPv4 addresses to
diff --git a/SOURCES/glibc-rh1008298.patch b/SOURCES/glibc-rh1008298.patch
new file mode 100644
index 0000000..9d7b35c
--- /dev/null
+++ b/SOURCES/glibc-rh1008298.patch
@@ -0,0 +1,46 @@
+diff --git glibc-2.17-c758a686/malloc/malloc.c glibc-2.17-c758a686/malloc/malloc.c
+index 3148c5f..f7718a9 100644
+--- glibc-2.17-c758a686/malloc/malloc.c
++++ glibc-2.17-c758a686/malloc/malloc.c
+@@ -3015,6 +3015,13 @@ __libc_memalign(size_t alignment, size_t bytes)
+   /* Otherwise, ensure that it is at least a minimum chunk size */
+   if (alignment <  MINSIZE) alignment = MINSIZE;
+ 
++  /* Check for overflow.  */
++  if (bytes > SIZE_MAX - alignment - MINSIZE)
++    {
++      __set_errno (ENOMEM);
++      return 0;
++    }
++
+   arena_get(ar_ptr, bytes + alignment + MINSIZE);
+   if(!ar_ptr)
+     return 0;
+@@ -3046,6 +3046,13 @@ __libc_valloc(size_t bytes)
+ 
+   size_t pagesz = GLRO(dl_pagesize);
+ 
++  /* Check for overflow.  */
++  if (bytes > SIZE_MAX - pagesz - MINSIZE)
++    {
++      __set_errno (ENOMEM);
++      return 0;
++    }
++
+   __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
+ 					const __malloc_ptr_t)) =
+     force_reg (__memalign_hook);
+@@ -3082,6 +3082,13 @@ __libc_pvalloc(size_t bytes)
+   size_t page_mask = GLRO(dl_pagesize) - 1;
+   size_t rounded_bytes = (bytes + page_mask) & ~(page_mask);
+ 
++  /* Check for overflow.  */
++  if (bytes > SIZE_MAX - 2*pagesz - MINSIZE)
++    {
++      __set_errno (ENOMEM);
++      return 0;
++    }
++
+   __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
+ 					const __malloc_ptr_t)) =
+     force_reg (__memalign_hook);
diff --git a/SOURCES/glibc-rh1020637.patch b/SOURCES/glibc-rh1020637.patch
new file mode 100644
index 0000000..9d4561a
--- /dev/null
+++ b/SOURCES/glibc-rh1020637.patch
@@ -0,0 +1,128 @@
+commit acd98a8ed1460497e788c701eb92616f1df9b446
+Author: Andreas Krebbel <krebbel@linux.vnet.ibm.com>
+Date:   Fri Nov 29 09:57:04 2013 +0100
+
+    [BZ #16214] S/390: Fix TLS GOT pointer setup.
+
+diff --git glibc-2.17-c758a686/sysdeps/s390/Versions glibc-2.17-c758a686/sysdeps/s390/Versions
+index e18617c..baf9842 100644
+--- glibc-2.17-c758a686/sysdeps/s390/Versions
++++ glibc-2.17-c758a686/sysdeps/s390/Versions
+@@ -3,4 +3,8 @@ ld {
+     # runtime interface to TLS
+     __tls_get_offset;
+   }
++  GLIBC_PRIVATE {
++    # Exported by ld used by libc.
++    __tls_get_addr_internal;
++  }
+ }
+diff --git glibc-2.17-c758a686/sysdeps/s390/dl-tls.h glibc-2.17-c758a686/sysdeps/s390/dl-tls.h
+index 68a5af4..52192a2 100644
+--- glibc-2.17-c758a686/sysdeps/s390/dl-tls.h
++++ glibc-2.17-c758a686/sysdeps/s390/dl-tls.h
+@@ -26,11 +26,26 @@ typedef struct
+ 
+ 
+ #ifdef SHARED
+-/* This is the prototype for the GNU version.  */
+-extern void *__tls_get_addr (tls_index *ti) attribute_hidden;
++
+ extern unsigned long __tls_get_offset (unsigned long got_offset);
+ 
+ # ifdef IS_IN_rtld
++
++#  include <shlib-compat.h>
++
++extern void *__tls_get_addr (tls_index *ti) attribute_hidden;
++/* Make a temporary alias of __tls_get_addr to remove the hidden
++   attribute.  Then export __tls_get_addr as __tls_get_addr_internal
++   for use from libc.  We do not want to export __tls_get_addr, but we
++   do need to use it from libc when looking up the address of a TLS
++   variable. We don't use __tls_get_offset because it requires r12 to
++   be setup and that might not always be true. Either way it's more
++   optimal to use __tls_get_addr directly (that's what
++   __tls_get_offset does anyways).  */
++strong_alias (__tls_get_addr, __tls_get_addr_internal_tmp);
++versioned_symbol (ld, __tls_get_addr_internal_tmp,
++		  __tls_get_addr_internal, GLIBC_PRIVATE);
++
+ /* The special thing about the s390 TLS ABI is that we do not have the
+    standard __tls_get_addr function but the __tls_get_offset function
+    which differs in two important aspects:
+@@ -63,15 +78,21 @@ __tls_get_offset:\n\
+ 1:	.long	__tls_get_addr - 0b\n\
+ ");
+ #  endif
+-# endif
++# else /* IS_IN_rtld */
++extern void *__tls_get_addr_internal (tls_index *ti);
++# endif /* !IS_IN_rtld */
+ 
+ # define GET_ADDR_OFFSET \
+   (ti->ti_offset - (unsigned long) __builtin_thread_pointer ())
+ 
+-# define __TLS_GET_ADDR(__ti) \
+-  ({ extern char _GLOBAL_OFFSET_TABLE_[] attribute_hidden;		  \
+-     (void *) __tls_get_offset ((char *) (__ti) - _GLOBAL_OFFSET_TABLE_)  \
+-     + (unsigned long) __builtin_thread_pointer (); })
++/* Use the privately exported __tls_get_addr_internal instead of
++   __tls_get_offset in order to avoid the __tls_get_offset special
++   linkage requiring the GOT pointer to be set up in r12.  The
++   compiler will take care of setting up r12 only if itself issued the
++   __tls_get_offset call.  */
++# define __TLS_GET_ADDR(__ti)					\
++  ({ (void *) __tls_get_addr_internal ((char *) (__ti))		\
++      + (unsigned long) __builtin_thread_pointer (); })
+ 
+ #endif
+ 
+diff --git glibc-2.17-c758a686/sysdeps/s390/s390-32/tls-macros.h glibc-2.17-c758a686/sysdeps/s390/s390-32/tls-macros.h
+index 8a0ad58..a592d81 100644
+--- glibc-2.17-c758a686/sysdeps/s390/s390-32/tls-macros.h
++++ glibc-2.17-c758a686/sysdeps/s390/s390-32/tls-macros.h
+@@ -8,12 +8,15 @@
+ 
+ #ifdef PIC
+ # define TLS_IE(x) \
+-  ({ unsigned long __offset;						      \
++  ({ unsigned long __offset, __got;					      \
+      asm ("bras %0,1f\n"						      \
+-	  "0:\t.long " #x "@gotntpoff\n"				      \
+-	  "1:\tl %0,0(%0)\n\t"						      \
+-	  "l %0,0(%0,%%r12):tls_load:" #x				      \
+-	  : "=&a" (__offset) : : "cc" );				      \
++	  "0:\t.long _GLOBAL_OFFSET_TABLE_-0b\n\t"			      \
++	  ".long " #x "@gotntpoff\n"					      \
++	  "1:\tl %1,0(%0)\n\t"						      \
++	  "la %1,0(%1,%0)\n\t"						      \
++	  "l %0,4(%0)\n\t"						      \
++	  "l %0,0(%0,%1):tls_load:" #x "\n"				      \
++	  : "=&a" (__offset), "=&a" (__got) : : "cc" );			      \
+      (int *) (__builtin_thread_pointer() + __offset); })
+ #else
+ # define TLS_IE(x) \
+diff --git glibc-2.17-c758a686/sysdeps/s390/s390-64/tls-macros.h glibc-2.17-c758a686/sysdeps/s390/s390-64/tls-macros.h
+index be8aa6c..3c59436 100644
+--- glibc-2.17-c758a686/sysdeps/s390/s390-64/tls-macros.h
++++ glibc-2.17-c758a686/sysdeps/s390/s390-64/tls-macros.h
+@@ -8,12 +8,13 @@
+ 
+ #ifdef PIC
+ # define TLS_IE(x) \
+-  ({ unsigned long __offset;						      \
+-     asm ("bras %0,1f\n"						      \
+-	  "0:\t.quad " #x "@gotntpoff\n"				      \
+-	  "1:\tlg %0,0(%0)\n\t"						      \
+-	  "lg %0,0(%0,%%r12):tls_load:" #x				      \
+-	  : "=&a" (__offset) : : "cc" );				      \
++  ({ unsigned long __offset, __got;					      \
++     asm ("bras %0,0f\n\t"						      \
++	  ".quad " #x "@gotntpoff\n"					      \
++	  "0:\tlarl %1,_GLOBAL_OFFSET_TABLE_\n\t"			      \
++	  "lg %0,0(%0)\n\t"						      \
++	  "lg %0,0(%0,%1):tls_load:" #x	"\n"				      \
++	  : "=&a" (__offset), "=&a" (__got) : : "cc" );			      \
+      (int *) (__builtin_thread_pointer() + __offset); })
+ #else
+ # define TLS_IE(x) \
diff --git a/SOURCES/glibc-rh1025612.patch b/SOURCES/glibc-rh1025612.patch
new file mode 100644
index 0000000..93ab27d
--- /dev/null
+++ b/SOURCES/glibc-rh1025612.patch
@@ -0,0 +1,50 @@
+commit 7cbcdb3699584db8913ca90f705d6337633ee10f
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Fri Oct 25 10:22:12 2013 +0530
+
+    Fix stack overflow due to large AF_INET6 requests
+    
+    Resolves #16072 (CVE-2013-4458).
+    
+    This patch fixes another stack overflow in getaddrinfo when it is
+    called with AF_INET6.  The AF_UNSPEC case was fixed as CVE-2013-1914,
+    but the AF_INET6 case went undetected back then.
+
+diff --git glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
+index e6ce4cf..8ff74b4 100644
+--- glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
++++ glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
+@@ -197,7 +197,22 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
+ 				&rc, &herrno, NULL, &localcanon));	      \
+     if (rc != ERANGE || herrno != NETDB_INTERNAL)			      \
+       break;								      \
+-    tmpbuf = extend_alloca (tmpbuf, tmpbuflen, 2 * tmpbuflen);		      \
++    if (!malloc_tmpbuf && __libc_use_alloca (alloca_used + 2 * tmpbuflen))    \
++      tmpbuf = extend_alloca_account (tmpbuf, tmpbuflen, 2 * tmpbuflen,	      \
++				      alloca_used);			      \
++    else								      \
++      {									      \
++	char *newp = realloc (malloc_tmpbuf ? tmpbuf : NULL,		      \
++			      2 * tmpbuflen);				      \
++	if (newp == NULL)						      \
++	  {								      \
++	    result = -EAI_MEMORY;					      \
++	    goto free_and_return;					      \
++	  }								      \
++	tmpbuf = newp;							      \
++	malloc_tmpbuf = true;						      \
++	tmpbuflen = 2 * tmpbuflen;					      \
++      }									      \
+   }									      \
+   if (status == NSS_STATUS_SUCCESS && rc == 0)				      \
+     h = &th;								      \
+@@ -209,7 +224,8 @@ gaih_inet_serv (const char *servicename, const struct gaih_typeproto *tp,
+ 	{								      \
+ 	  __set_h_errno (herrno);					      \
+ 	  _res.options |= old_res_options & RES_USE_INET6;		      \
+-	  return -EAI_SYSTEM;						      \
++	  result = -EAI_SYSTEM;						      \
++	  goto free_and_return;						      \
+ 	}								      \
+       if (herrno == TRY_AGAIN)						      \
+ 	no_data = EAI_AGAIN;						      \
diff --git a/SOURCES/glibc-rh1025934.patch b/SOURCES/glibc-rh1025934.patch
new file mode 100644
index 0000000..37758d9
--- /dev/null
+++ b/SOURCES/glibc-rh1025934.patch
@@ -0,0 +1,143 @@
+Mostly equivalent upstream commit:
+
+commit 0699f766b10c86912b75f35bef697106b70c1cf6
+Author: Carlos O'Donell <carlos@redhat.com>
+Date:   Thu Apr 10 18:31:53 2014 -0400
+
+    nscd: Make SELinux checks dynamic.
+
+diff --git glibc-2.17-c758a686/nscd/selinux.c glibc-2.17-c758a686/nscd/selinux.c
+index 0866c44..ba55b04 100644
+--- glibc-2.17-c758a686/nscd/selinux.c
++++ glibc-2.17-c758a686/nscd/selinux.c
+@@ -44,35 +44,31 @@
+ /* Global variable to tell if the kernel has SELinux support.  */
+ int selinux_enabled;
+ 
+-/* Define mappings of access vector permissions to request types.  */
+-static const access_vector_t perms[LASTREQ] =
++/* Define mappings of request type to AVC permission name.  */
++static const char *perms[LASTREQ] =
+ {
+-  [GETPWBYNAME] = NSCD__GETPWD,
+-  [GETPWBYUID] = NSCD__GETPWD,
+-  [GETGRBYNAME] = NSCD__GETGRP,
+-  [GETGRBYGID] = NSCD__GETGRP,
+-  [GETHOSTBYNAME] = NSCD__GETHOST,
+-  [GETHOSTBYNAMEv6] = NSCD__GETHOST,
+-  [GETHOSTBYADDR] = NSCD__GETHOST,
+-  [GETHOSTBYADDRv6] = NSCD__GETHOST,
+-  [GETSTAT] = NSCD__GETSTAT,
+-  [SHUTDOWN] = NSCD__ADMIN,
+-  [INVALIDATE] = NSCD__ADMIN,
+-  [GETFDPW] = NSCD__SHMEMPWD,
+-  [GETFDGR] = NSCD__SHMEMGRP,
+-  [GETFDHST] = NSCD__SHMEMHOST,
+-  [GETAI] = NSCD__GETHOST,
+-  [INITGROUPS] = NSCD__GETGRP,
+-#ifdef NSCD__GETSERV
+-  [GETSERVBYNAME] = NSCD__GETSERV,
+-  [GETSERVBYPORT] = NSCD__GETSERV,
+-  [GETFDSERV] = NSCD__SHMEMSERV,
+-#endif
+-#ifdef NSCD__GETNETGRP
+-  [GETNETGRENT] = NSCD__GETNETGRP,
+-  [INNETGR] = NSCD__GETNETGRP,
+-  [GETFDNETGR] = NSCD__SHMEMNETGRP,
+-#endif
++  [GETPWBYNAME] = "getpwd",
++  [GETPWBYUID] = "getpwd",
++  [GETGRBYNAME] = "getgrp",
++  [GETGRBYGID] = "getgrp",
++  [GETHOSTBYNAME] = "gethost",
++  [GETHOSTBYNAMEv6] = "gethost",
++  [GETHOSTBYADDR] = "gethost",
++  [GETHOSTBYADDRv6] = "gethost",
++  [SHUTDOWN] = "admin",
++  [GETSTAT] = "getstat",
++  [INVALIDATE] = "admin",
++  [GETFDPW] = "shmempwd",
++  [GETFDGR] = "shmemgrp",
++  [GETFDHST] = "shmemhost",
++  [GETAI] = "gethost",
++  [INITGROUPS] = "getgrp",
++  [GETSERVBYNAME] = "getserv",
++  [GETSERVBYPORT] = "getserv",
++  [GETFDSERV] = "shmemserv",
++  [GETNETGRENT] = "getnetgrp",
++  [INNETGR] = "getnetgrp",
++  [GETFDNETGR] = "shmemnetgrp",
+ };
+ 
+ /* Store an entry ref to speed AVC decisions.  */
+@@ -344,7 +340,18 @@ nscd_avc_init (void)
+ 
+ 
+ /* Check the permission from the caller (via getpeercon) to nscd.
+-   Returns 0 if access is allowed, 1 if denied, and -1 on error.  */
++   Returns 0 if access is allowed, 1 if denied, and -1 on error.
++
++   Implementation note:
++   The SELinux policy, enablement, and permission bits are all dynamic
++   and the caching done by glibc is not entirely correct.  This nscd
++   support should be rewritten to use selinux_check_permission.
++   A rewrite is risky though and requires some refactoring fist.
++   Instead we use symbolic mappings instead of compile time
++   constants (which selinux upstream says are going away), and use
++   security_deny_unknown to determine what to do if selinux-policy
++   doesn't have a definition for the the permission or object class
++   we are looking up.  */
+ int
+ nscd_request_avc_has_perm (int fd, request_type req)
+ {
+@@ -354,6 +361,33 @@ nscd_request_avc_has_perm (int fd, request_type req)
+   security_id_t ssid = NULL;
+   security_id_t tsid = NULL;
+   int rc = -1;
++  security_class_t sc_nscd = 0;
++  access_vector_t perm = 0;
++  int avc_deny_unknown = 0;
++
++  /* Check if SELinux denys or allows unknown object classes
++     and permissions.  It is 0 if they are allowed, 1 if they
++     are not allowed and -1 on error.  */
++  if ((avc_deny_unknown = security_deny_unknown ()) == -1)
++    dbg_log (_("Error querying policy for undefined object classes "
++	       "or permissions."));
++
++  /* Get the security class for nscd.  If this fails we will likely be
++     unable to do anything unless avc_deny_unknown is 0.  */
++  if ((sc_nscd = string_to_security_class ("nscd")) == 0
++      && avc_deny_unknown == 1)
++    dbg_log (_("Error getting security class for nscd."));
++
++  /* Convert permission to AVC bits.  */
++  perm = string_to_av_perm (sc_nscd, perms[req]);
++  if (perm == 0 && avc_deny_unknown == 1)
++      dbg_log (_("Error translating permission name "
++		 "\"%s\" to access vector bit."), perms[req]);
++
++  /* If the nscd security class was not found or perms were not
++     found and AVC does not deny unknown values then allow it.  */
++  if ((sc_nscd == 0 || perm == 0) && avc_deny_unknown == 0)
++    return 0;
+ 
+   if (getpeercon (fd, &scon) < 0)
+     {
+@@ -372,15 +406,7 @@ nscd_request_avc_has_perm (int fd, request_type req)
+       goto out;
+     }
+ 
+-#ifndef NSCD__GETSERV
+-  if (perms[req] == 0)
+-    {
+-      dbg_log (_("compile-time support for database policy missing"));
+-      goto out;
+-    }
+-#endif
+-
+-  rc = avc_has_perm (ssid, tsid, SECCLASS_NSCD, perms[req], &aeref, NULL) < 0;
++  rc = avc_has_perm (ssid, tsid, sc_nscd, perm, &aeref, NULL) < 0;
+ 
+ out:
+   if (scon)
diff --git a/SOURCES/glibc-rh1027101.patch b/SOURCES/glibc-rh1027101.patch
new file mode 100644
index 0000000..2b419c9
--- /dev/null
+++ b/SOURCES/glibc-rh1027101.patch
@@ -0,0 +1,58 @@
+commit 362b47fe09ca9a928d444c7e2f7992f7f61bfc3e
+Author: Maxim Kuvyrkov <maxim@kugelworks.com>
+Date:   Tue Dec 24 09:44:50 2013 +1300
+
+    Fix race in free() of fastbin chunk: BZ #15073
+    
+    Perform sanity check only if we have_lock.  Due to lockless nature of fastbins
+    we need to be careful derefencing pointers to fastbin entries (chunksize(old)
+    in this case) in multithreaded environments.
+    
+    The fix is to add have_lock to the if-condition checks.  The rest of the patch
+    only makes code more readable.
+    
+    	* malloc/malloc.c (_int_free): Perform sanity check only if we
+    	have_lock.
+
+Index: b/malloc/malloc.c
+===================================================================
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -3909,25 +3909,29 @@ _int_free(mstate av, mchunkptr p, int ha
+     unsigned int idx = fastbin_index(size);
+     fb = &fastbin (av, idx);
+ 
+-    mchunkptr fd;
+-    mchunkptr old = *fb;
++    /* Atomically link P to its fastbin: P->FD = *FB; *FB = P;  */
++    mchunkptr old = *fb, old2;
+     unsigned int old_idx = ~0u;
+     do
+       {
+-	/* Another simple check: make sure the top of the bin is not the
+-	   record we are going to add (i.e., double free).  */
++	/* Check that the top of the bin is not the record we are going to add
++	   (i.e., double free).  */
+ 	if (__builtin_expect (old == p, 0))
+ 	  {
+ 	    errstr = "double free or corruption (fasttop)";
+ 	    goto errout;
+ 	  }
+-	if (old != NULL)
++	/* Check that size of fastbin chunk at the top is the same as
++	   size of the chunk that we are adding.  We can dereference OLD
++	   only if we have the lock, otherwise it might have already been
++	   deallocated.  See use of OLD_IDX below for the actual check.  */
++	if (have_lock && old != NULL)
+ 	  old_idx = fastbin_index(chunksize(old));
+-	p->fd = fd = old;
++	p->fd = old2 = old;
+       }
+-    while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd);
++    while ((old = catomic_compare_and_exchange_val_rel (fb, p, old2)) != old2);
+ 
+-    if (fd != NULL && __builtin_expect (old_idx != idx, 0))
++    if (have_lock && old != NULL && __builtin_expect (old_idx != idx, 0))
+       {
+ 	errstr = "invalid fastbin entry (free)";
+ 	goto errout;
diff --git a/SOURCES/glibc-rh1027348-1.patch b/SOURCES/glibc-rh1027348-1.patch
new file mode 100644
index 0000000..363a3af
--- /dev/null
+++ b/SOURCES/glibc-rh1027348-1.patch
@@ -0,0 +1,280 @@
+Backporting the C11 atomic support will allow future algorithms
+to be more easily backported to RHEL7. This is initially backported
+to support the new semaphore algorithm which is now in RHEL7
+(rhbz#1027348).
+
+commit 1ea339b69725cb2f30b5a84cb7ca96111c9a637b
+Author: Torvald Riegel <triegel@redhat.com>
+Date:   Sat Oct 18 01:02:59 2014 +0200
+
+    Add arch-specific configuration for C11 atomics support.
+    
+    This sets __HAVE_64B_ATOMICS if provided.  It also sets
+    USE_ATOMIC_COMPILER_BUILTINS to true if the existing atomic ops use the
+    __atomic* builtins (aarch64, mips partially) or if this has been
+    tested (x86_64); otherwise, this is set to false so that C11 atomics will
+    be based on the existing atomic operations.
+
+Index: glibc-2.17-c758a686/ports/sysdeps/aarch64/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/aarch64/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/bits/atomic.h
+@@ -36,6 +36,8 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 1
+ 
+ /* Compare and exchange.
+    For all "bool" routines, we return FALSE if exchange succesful.  */
+Index: glibc-2.17-c758a686/ports/sysdeps/alpha/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/alpha/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/alpha/bits/atomic.h
+@@ -42,6 +42,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ #ifdef UP
+ # define __MB		/* nothing */
+Index: glibc-2.17-c758a686/ports/sysdeps/arm/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/arm/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/arm/bits/atomic.h
+@@ -33,6 +33,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 0
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ void __arm_link_error (void);
+ 
+ /* Use the atomic builtins provided by GCC in case the backend provides
+Index: glibc-2.17-c758a686/sysdeps/i386/i486/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/i386/i486/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/i386/i486/bits/atomic.h
+@@ -54,6 +54,9 @@ typedef uintmax_t uatomic_max_t;
+ # endif
+ #endif
+ 
++#define __HAVE_64B_ATOMICS 0
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ #define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
+   __sync_val_compare_and_swap (mem, oldval, newval)
+Index: glibc-2.17-c758a686/ports/sysdeps/ia64/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/ia64/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/ia64/bits/atomic.h
+@@ -43,6 +43,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ #define __arch_compare_and_exchange_bool_8_acq(mem, newval, oldval) \
+   (abort (), 0)
+Index: glibc-2.17-c758a686/ports/sysdeps/m68k/coldfire/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/m68k/coldfire/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/m68k/coldfire/bits/atomic.h
+@@ -49,6 +49,10 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++/* If we have just non-atomic operations, we can as well make them wide.  */
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ /* The only basic operation needed is compare and exchange.  */
+ #define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
+   ({ __typeof (mem) __gmemp = (mem);				      \
+Index: glibc-2.17-c758a686/ports/sysdeps/m68k/m680x0/m68020/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/m68k/m680x0/m68020/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/m68k/m680x0/m68020/bits/atomic.h
+@@ -44,6 +44,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ #define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
+   ({ __typeof (*(mem)) __ret;						      \
+      __asm __volatile ("cas%.b %0,%2,%1"				      \
+Index: glibc-2.17-c758a686/ports/sysdeps/mips/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/mips/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/mips/bits/atomic.h
+@@ -43,6 +43,12 @@ typedef uintmax_t uatomic_max_t;
+ #define MIPS_PUSH_MIPS2
+ #endif
+ 
++#if _MIPS_SIM == _ABIO32
++#define __HAVE_64B_ATOMICS 0
++#else
++#define __HAVE_64B_ATOMICS 1
++#endif
++
+ /* See the comments in <sys/asm.h> about the use of the sync instruction.  */
+ #ifndef MIPS_SYNC
+ # define MIPS_SYNC	sync
+@@ -82,6 +88,8 @@ typedef uintmax_t uatomic_max_t;
+ /* The __atomic_* builtins are available in GCC 4.7 and later, but MIPS
+    support for their efficient implementation was added only in GCC 4.8.  */
+ 
++#define USE_ATOMIC_COMPILER_BUILTINS 1
++
+ /* Compare and exchange.
+    For all "bool" routines, we return FALSE if exchange succesful.  */
+ 
+@@ -204,6 +212,8 @@ typedef uintmax_t uatomic_max_t;
+ /* This implementation using inline assembly will be removed once glibc
+    requires GCC 4.8 or later to build.  */
+ 
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ /* Compare and exchange.  For all of the "xxx" routines, we expect a
+    "__prev" and a "__cmp" variable to be provided by the enclosing scope,
+    in which values are returned.  */
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/powerpc/powerpc32/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/bits/atomic.h
+@@ -33,6 +33,9 @@
+ # define MUTEX_HINT_REL
+ #endif
+ 
++#define __HAVE_64B_ATOMICS 0
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ /*
+  * The 32-bit exchange_bool is different on powerpc64 because the subf
+  * does signed 64-bit arthmatic while the lwarx is 32-bit unsigned
+Index: glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/powerpc/powerpc64/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/bits/atomic.h
+@@ -33,6 +33,9 @@
+ # define MUTEX_HINT_REL
+ #endif
+ 
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ /* The 32-bit exchange_bool is different on powerpc64 because the subf
+    does signed 64-bit arthmatic while the lwarx is 32-bit unsigned
+    (a load word and zero (high 32) form) load.
+Index: glibc-2.17-c758a686/sysdeps/s390/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/s390/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/s390/bits/atomic.h
+@@ -43,6 +43,8 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ #define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
+   (abort (), (__typeof (*mem)) 0)
+@@ -59,6 +61,7 @@ typedef uintmax_t uatomic_max_t;
+      __archold; })
+ 
+ #ifdef __s390x__
++# define __HAVE_64B_ATOMICS 1
+ # define __arch_compare_and_exchange_val_64_acq(mem, newval, oldval) \
+   ({ __typeof (mem) __archmem = (mem);					      \
+      __typeof (*mem) __archold = (oldval);				      \
+@@ -67,6 +70,7 @@ typedef uintmax_t uatomic_max_t;
+ 		       : "d" ((long) (newval)), "m" (*__archmem) : "cc", "memory" );    \
+      __archold; })
+ #else
++# define __HAVE_64B_ATOMICS 0
+ /* For 31 bit we do not really need 64-bit compare-and-exchange. We can
+    implement them by use of the csd instruction. The straightforward
+    implementation causes warnings so we skip the definition for now.  */
+Index: glibc-2.17-c758a686/sysdeps/sparc/sparc32/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/sparc/sparc32/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc32/bits/atomic.h
+@@ -47,6 +47,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 0
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ /* We have no compare and swap, just test and set.
+    The following implementation contends on 64 global locks
+Index: glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/bits/atomic.h
+@@ -44,6 +44,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 0
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ #define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
+   (abort (), (__typeof (*mem)) 0)
+Index: glibc-2.17-c758a686/sysdeps/sparc/sparc64/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/sparc/sparc64/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc64/bits/atomic.h
+@@ -44,6 +44,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 1
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ 
+ #define __arch_compare_and_exchange_val_8_acq(mem, newval, oldval) \
+   (abort (), (__typeof (*mem)) 0)
+Index: glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h
+@@ -44,6 +44,9 @@ typedef uintptr_t uatomicptr_t;
+ typedef intmax_t atomic_max_t;
+ typedef uintmax_t uatomic_max_t;
+ 
++#define __HAVE_64B_ATOMICS 0
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++
+ /* prev = *addr;
+    if (prev == old)
+      *addr = new;
+Index: glibc-2.17-c758a686/sysdeps/x86_64/bits/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/sysdeps/x86_64/bits/atomic.h
++++ glibc-2.17-c758a686/sysdeps/x86_64/bits/atomic.h
+@@ -55,6 +55,12 @@ typedef uintmax_t uatomic_max_t;
+ # endif
+ #endif
+ 
++#define __HAVE_64B_ATOMICS 1
++#if __GNUC_PREREQ (4, 7)
++#define USE_ATOMIC_COMPILER_BUILTINS 1
++#else
++#define USE_ATOMIC_COMPILER_BUILTINS 0
++#endif
+ 
+ #define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
+   __sync_val_compare_and_swap (mem, oldval, newval)
diff --git a/SOURCES/glibc-rh1027348-2.patch b/SOURCES/glibc-rh1027348-2.patch
new file mode 100644
index 0000000..ca54870
--- /dev/null
+++ b/SOURCES/glibc-rh1027348-2.patch
@@ -0,0 +1,229 @@
+commit ff8714269c9312d9164456279a56b6f6c47e2771
+Author: Torvald Riegel <triegel@redhat.com>
+Date:   Sun Sep 14 20:04:54 2014 +0200
+
+    Add atomic operations similar to those provided by C11.
+
+Index: glibc-2.17-c758a686/include/atomic.h
+===================================================================
+--- glibc-2.17-c758a686.orig/include/atomic.h
++++ glibc-2.17-c758a686/include/atomic.h
+@@ -542,6 +542,218 @@
+   ({ __typeof (x) __x; __asm ("" : "=r" (__x) : "0" (x)); __x; })
+ #endif
+ 
++/* This is equal to 1 iff the architecture supports 64b atomic operations.  */
++#ifndef __HAVE_64B_ATOMICS
++#error Unable to determine if 64-bit atomics are present.
++#endif
++
++/* The following functions are a subset of the atomic operations provided by
++   C11.  Usually, a function named atomic_OP_MO(args) is equivalent to C11's
++   atomic_OP_explicit(args, memory_order_MO); exceptions noted below.  */
++
++/* Each arch can request to use compiler built-ins for C11 atomics.  If it
++   does, all atomics will be based on these.  */
++#if USE_ATOMIC_COMPILER_BUILTINS
++
++/* We require 32b atomic operations; some archs also support 64b atomic
++   operations.  */
++void __atomic_link_error (void);
++# if __HAVE_64B_ATOMICS == 1
++#  define __atomic_check_size(mem) \
++   if ((sizeof (*mem) != 4) && (sizeof (*mem) != 8))			      \
++     __atomic_link_error ();
++# else
++#  define __atomic_check_size(mem) \
++   if (sizeof (*mem) != 4)						      \
++     __atomic_link_error ();
++# endif
++
++# define atomic_thread_fence_acquire() \
++  __atomic_thread_fence (__ATOMIC_ACQUIRE)
++# define atomic_thread_fence_release() \
++  __atomic_thread_fence (__ATOMIC_RELEASE)
++# define atomic_thread_fence_seq_cst() \
++  __atomic_thread_fence (__ATOMIC_SEQ_CST)
++
++# define atomic_load_relaxed(mem) \
++  ({ __atomic_check_size((mem)); __atomic_load_n ((mem), __ATOMIC_RELAXED); })
++# define atomic_load_acquire(mem) \
++  ({ __atomic_check_size((mem)); __atomic_load_n ((mem), __ATOMIC_ACQUIRE); })
++
++# define atomic_store_relaxed(mem, val) \
++  do {									      \
++    __atomic_check_size((mem));						      \
++    __atomic_store_n ((mem), (val), __ATOMIC_RELAXED);			      \
++  } while (0)
++# define atomic_store_release(mem, val) \
++  do {									      \
++    __atomic_check_size((mem));						      \
++    __atomic_store_n ((mem), (val), __ATOMIC_RELEASE);			      \
++  } while (0)
++
++/* On failure, this CAS has memory_order_relaxed semantics.  */
++# define atomic_compare_exchange_weak_relaxed(mem, expected, desired) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_compare_exchange_n ((mem), (expected), (desired), 1,		      \
++    __ATOMIC_RELAXED, __ATOMIC_RELAXED); })
++# define atomic_compare_exchange_weak_acquire(mem, expected, desired) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_compare_exchange_n ((mem), (expected), (desired), 1,		      \
++    __ATOMIC_ACQUIRE, __ATOMIC_RELAXED); })
++# define atomic_compare_exchange_weak_release(mem, expected, desired) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_compare_exchange_n ((mem), (expected), (desired), 1,		      \
++    __ATOMIC_RELEASE, __ATOMIC_RELAXED); })
++
++# define atomic_exchange_acquire(mem, desired) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_exchange_n ((mem), (desired), __ATOMIC_ACQUIRE); })
++# define atomic_exchange_release(mem, desired) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_exchange_n ((mem), (desired), __ATOMIC_RELEASE); })
++
++# define atomic_fetch_add_relaxed(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_add ((mem), (operand), __ATOMIC_RELAXED); })
++# define atomic_fetch_add_acquire(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_add ((mem), (operand), __ATOMIC_ACQUIRE); })
++# define atomic_fetch_add_release(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_add ((mem), (operand), __ATOMIC_RELEASE); })
++# define atomic_fetch_add_acq_rel(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_add ((mem), (operand), __ATOMIC_ACQ_REL); })
++
++# define atomic_fetch_and_acquire(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_and ((mem), (operand), __ATOMIC_ACQUIRE); })
++
++# define atomic_fetch_or_relaxed(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_or ((mem), (operand), __ATOMIC_RELAXED); })
++# define atomic_fetch_or_acquire(mem, operand) \
++  ({ __atomic_check_size((mem));					      \
++  __atomic_fetch_or ((mem), (operand), __ATOMIC_ACQUIRE); })
++
++#else /* !USE_ATOMIC_COMPILER_BUILTINS  */
++
++/* By default, we assume that read, write, and full barriers are equivalent
++   to acquire, release, and seq_cst barriers.  Archs for which this does not
++   hold have to provide custom definitions of the fences.  */
++# ifndef atomic_thread_fence_acquire
++#  define atomic_thread_fence_acquire() atomic_read_barrier ()
++# endif
++# ifndef atomic_thread_fence_release
++#  define atomic_thread_fence_release() atomic_write_barrier ()
++# endif
++# ifndef atomic_thread_fence_seq_cst
++#  define atomic_thread_fence_seq_cst() atomic_full_barrier ()
++# endif
++
++# ifndef atomic_load_relaxed
++#  define atomic_load_relaxed(mem) \
++   ({ __typeof (*(mem)) __atg100_val;					      \
++   __asm ("" : "=r" (__atg100_val) : "0" (*(mem)));			      \
++   __atg100_val; })
++# endif
++# ifndef atomic_load_acquire
++#  define atomic_load_acquire(mem) \
++   ({ __typeof (*(mem)) __atg101_val = atomic_load_relaxed (mem);	      \
++   atomic_thread_fence_acquire ();					      \
++   __atg101_val; })
++# endif
++
++# ifndef atomic_store_relaxed
++/* XXX Use inline asm here?  */
++#  define atomic_store_relaxed(mem, val) do { *(mem) = (val); } while (0)
++# endif
++# ifndef atomic_store_release
++#  define atomic_store_release(mem, val) \
++   do {									      \
++     atomic_thread_fence_release ();					      \
++     atomic_store_relaxed ((mem), (val));				      \
++   } while (0)
++# endif
++
++/* On failure, this CAS has memory_order_relaxed semantics.  */
++/* XXX This potentially has one branch more than necessary, but archs
++   currently do not define a CAS that returns both the previous value and
++   the success flag.  */
++# ifndef atomic_compare_exchange_weak_acquire
++#  define atomic_compare_exchange_weak_acquire(mem, expected, desired) \
++   ({ typeof (*(expected)) __atg102_expected = *(expected);		      \
++   *(expected) =							      \
++     atomic_compare_and_exchange_val_acq ((mem), (desired), *(expected));     \
++   *(expected) == __atg102_expected; })
++# endif
++# ifndef atomic_compare_exchange_weak_relaxed
++/* XXX Fall back to CAS with acquire MO because archs do not define a weaker
++   CAS.  */
++#  define atomic_compare_exchange_weak_relaxed(mem, expected, desired) \
++   atomic_compare_exchange_weak_acquire ((mem), (expected), (desired))
++# endif
++# ifndef atomic_compare_exchange_weak_release
++#  define atomic_compare_exchange_weak_release(mem, expected, desired) \
++   ({ typeof (*(expected)) __atg103_expected = *(expected);		      \
++   *(expected) =							      \
++     atomic_compare_and_exchange_val_rel ((mem), (desired), *(expected));     \
++   *(expected) == __atg103_expected; })
++# endif
++
++# ifndef atomic_exchange_acquire
++#  define atomic_exchange_acquire(mem, val) \
++   atomic_exchange_acq ((mem), (val))
++# endif
++# ifndef atomic_exchange_release
++#  define atomic_exchange_release(mem, val) \
++   atomic_exchange_rel ((mem), (val))
++# endif
++
++# ifndef atomic_fetch_add_acquire
++#  define atomic_fetch_add_acquire(mem, operand) \
++   atomic_exchange_and_add_acq ((mem), (operand))
++# endif
++# ifndef atomic_fetch_add_relaxed
++/* XXX Fall back to acquire MO because the MO semantics of
++   atomic_exchange_and_add are not documented; the generic version falls back
++   to atomic_exchange_and_add_acq if atomic_exchange_and_add is not defined,
++   and vice versa.  */
++#  define atomic_fetch_add_relaxed(mem, operand) \
++   atomic_fetch_add_acquire ((mem), (operand))
++# endif
++# ifndef atomic_fetch_add_release
++#  define atomic_fetch_add_release(mem, operand) \
++   atomic_exchange_and_add_rel ((mem), (operand))
++# endif
++# ifndef atomic_fetch_add_acq_rel
++#  define atomic_fetch_add_acq_rel(mem, operand) \
++   ({ atomic_thread_fence_release ();					      \
++   atomic_exchange_and_add_acq ((mem), (operand)); })
++# endif
++
++/* XXX The default for atomic_and_val has acquire semantics, but this is not
++   documented.  */
++# ifndef atomic_fetch_and_acquire
++#  define atomic_fetch_and_acquire(mem, operand) \
++   atomic_and_val ((mem), (operand))
++# endif
++
++/* XXX The default for atomic_or_val has acquire semantics, but this is not
++   documented.  */
++# ifndef atomic_fetch_or_acquire
++#  define atomic_fetch_or_acquire(mem, operand) \
++   atomic_or_val ((mem), (operand))
++# endif
++/* XXX Fall back to acquire MO because archs do not define a weaker
++   atomic_or_val.  */
++# ifndef atomic_fetch_or_relaxed
++#  define atomic_fetch_or_relaxed(mem, operand) \
++   atomic_fetch_or_acquire ((mem), (operand))
++# endif
++
++#endif /* !USE_ATOMIC_COMPILER_BUILTINS  */
++
+ 
+ #ifndef atomic_delay
+ # define atomic_delay() do { /* nothing */ } while (0)
diff --git a/SOURCES/glibc-rh1027348-3.patch b/SOURCES/glibc-rh1027348-3.patch
new file mode 100644
index 0000000..b2040fe
--- /dev/null
+++ b/SOURCES/glibc-rh1027348-3.patch
@@ -0,0 +1,144 @@
+commit 88ed594f5d431d855256edbe7e886c8cf4b575dc
+Author: Roland McGrath <roland@hack.frob.com>
+Date:   Tue May 19 15:04:41 2015 -0700
+
+    BZ#18434: Fix sem_post EOVERFLOW check for [!__HAVE_64B_ATOMICS].
+
+Index: glibc-2.17-c758a686/nptl/Makefile
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/Makefile
++++ glibc-2.17-c758a686/nptl/Makefile
+@@ -224,6 +224,7 @@ tests = tst-typesizes \
+ 	tst-key1 tst-key2 tst-key3 tst-key4 \
+ 	tst-sem1 tst-sem2 tst-sem3 tst-sem4 tst-sem5 tst-sem6 tst-sem7 \
+ 	tst-sem8 tst-sem9 tst-sem10 tst-sem11 tst-sem12 tst-sem13 tst-sem14 \
++	tst-sem15 \
+ 	tst-barrier1 tst-barrier2 tst-barrier3 tst-barrier4 \
+ 	tst-align tst-align2 tst-align3 \
+ 	tst-basic1 tst-basic2 tst-basic3 tst-basic4 tst-basic5 tst-basic6 \
+Index: glibc-2.17-c758a686/nptl/tst-sem15.c
+===================================================================
+--- /dev/null
++++ glibc-2.17-c758a686/nptl/tst-sem15.c
+@@ -0,0 +1,99 @@
++/* Test for SEM_VALUE_MAX overflow detection: BZ #18434.
++   Copyright (C) 2015 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 <limits.h>
++#include <semaphore.h>
++#include <stdio.h>
++#include <string.h>
++#include <unistd.h>
++
++
++static int
++do_test (void)
++{
++  sem_t s;
++
++  if (sem_init (&s, 0, SEM_VALUE_MAX))
++    {
++      printf ("sem_init: %m\n");
++      return 1;
++    }
++
++  int result = 0;
++
++  int value = 0xdeadbeef;
++  if (sem_getvalue (&s, &value))
++    {
++      printf ("sem_getvalue: %m\n");
++      result = 1;
++    }
++  else
++    {
++      printf ("sem_getvalue after init: %d\n", value);
++      if (value != SEM_VALUE_MAX)
++	{
++	  printf ("\tshould be %d\n", SEM_VALUE_MAX);
++	  result = 1;
++	}
++    }
++
++  errno = 0;
++  if (sem_post(&s) == 0)
++    {
++      puts ("sem_post at SEM_VALUE_MAX succeeded!");
++      result = 1;
++    }
++  else
++    {
++      printf ("sem_post at SEM_VALUE_MAX: %m (%d)\n", errno);
++      if (errno != EOVERFLOW)
++	{
++	  printf ("\tshould be %s (EOVERFLOW = %d)\n",
++		  strerror (EOVERFLOW), EOVERFLOW);
++	  result = 1;
++	}
++    }
++
++  value = 0xbad1d00d;
++  if (sem_getvalue (&s, &value))
++    {
++      printf ("sem_getvalue: %m\n");
++      result = 1;
++    }
++  else
++    {
++      printf ("sem_getvalue after post: %d\n", value);
++      if (value != SEM_VALUE_MAX)
++	{
++	  printf ("\tshould be %d\n", SEM_VALUE_MAX);
++	  result = 1;
++	}
++    }
++
++  if (sem_destroy (&s))
++    {
++      printf ("sem_destroy: %m\n");
++      result = 1;
++    }
++
++  return result;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_post.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sem_post.c
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_post.c
+@@ -83,14 +83,14 @@ __new_sem_post (sem_t *sem)
+   unsigned int v = atomic_load_relaxed (&isem->value);
+   do
+     {
+-      if ((v << SEM_VALUE_SHIFT) == SEM_VALUE_MAX)
++      if ((v >> SEM_VALUE_SHIFT) == SEM_VALUE_MAX)
+ 	{
+ 	  __set_errno (EOVERFLOW);
+ 	  return -1;
+ 	}
+     }
+-  while (!atomic_compare_exchange_weak_release (&isem->value,
+-      &v, v + (1 << SEM_VALUE_SHIFT)));
++  while (!atomic_compare_exchange_weak_release
++	 (&isem->value, &v, v + (1 << SEM_VALUE_SHIFT)));
+ 
+   /* If there is any potentially blocked waiter, wake one of them.  */
+   if ((v & SEM_NWAITERS_MASK) != 0)
diff --git a/SOURCES/glibc-rh1027348-4.patch b/SOURCES/glibc-rh1027348-4.patch
new file mode 100644
index 0000000..27f6115
--- /dev/null
+++ b/SOURCES/glibc-rh1027348-4.patch
@@ -0,0 +1,105 @@
+commit c2f5813ae0a68f6c6d69e66dac2da6e46b9df034
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Wed Mar 18 17:05:38 2015 +0000
+
+    Make sem_timedwait use FUTEX_CLOCK_REALTIME (bug 18138).
+    
+    sem_timedwait converts absolute timeouts to relative to pass them to
+    the futex syscall.  (Before the recent reimplementation, on x86_64 it
+    used FUTEX_CLOCK_REALTIME, but not on other architectures.)
+    
+    Correctly implementing POSIX requirements, however, requires use of
+    FUTEX_CLOCK_REALTIME; passing a relative timeout to the kernel does
+    not conform to POSIX.  The POSIX specification for sem_timedwait says
+    "The timeout shall be based on the CLOCK_REALTIME clock.".  The POSIX
+    specification for clock_settime says "If the value of the
+    CLOCK_REALTIME clock is set via clock_settime(), the new value of the
+    clock shall be used to determine the time of expiration for absolute
+    time services based upon the CLOCK_REALTIME clock. This applies to the
+    time at which armed absolute timers expire. If the absolute time
+    requested at the invocation of such a time service is before the new
+    value of the clock, the time service shall expire immediately as if
+    the clock had reached the requested time normally.".  If a relative
+    timeout is passed to the kernel, it is interpreted according to the
+    CLOCK_MONOTONIC clock, and so fails to meet that POSIX requirement in
+    the event of clock changes.
+    
+    This patch makes sem_timedwait use lll_futex_timed_wait_bitset with
+    FUTEX_CLOCK_REALTIME when possible, as done in some other places in
+    NPTL.  FUTEX_CLOCK_REALTIME is always available for supported Linux
+    kernel versions; unavailability of lll_futex_timed_wait_bitset is only
+    an issue for hppa (an issue noted in
+    <https://sourceware.org/glibc/wiki/PortStatus>, and fixed by the
+    unreviewed
+    <https://sourceware.org/ml/libc-alpha/2014-12/msg00655.html> that
+    removes the hppa lowlevellock.h completely).
+    
+    In the FUTEX_CLOCK_REALTIME case, the glibc code still needs to check
+    for negative tv_sec and handle that as timeout, because the Linux
+    kernel returns EINVAL not ETIMEDOUT for that case, so resulting in
+    failures of nptl/tst-abstime and nptl/tst-sem13 in the absence of that
+    check.  If we're trying to distinguish between Linux-specific and
+    generic-futex NPTL code, I suppose having this in an nptl/ file isn't
+    ideal, but there doesn't seem to be any better place at present.
+    
+    It's not possible to add a testcase for this issue to the testsuite
+    because of the requirement to change the system clock as part of a
+    test (this is a case where testing would require some form of
+    container, with root in that container, and one whose CLOCK_REALTIME
+    is isolated from that of the host; I'm not sure what forms of
+    containers, short of a full virtual machine, provide that clock
+    isolation).
+    
+    Tested for x86_64.  Also tested for powerpc with the testcase included
+    in the bug.
+    
+        [BZ #18138]
+        * nptl/sem_waitcommon.c: Include <kernel-features.h>.
+        (futex_abstimed_wait)
+        [__ASSUME_FUTEX_CLOCK_REALTIME && lll_futex_timed_wait_bitset]:
+        Use lll_futex_timed_wait_bitset with FUTEX_CLOCK_REALTIME instead
+        of lll_futex_timed_wait.
+
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_waitcommon.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sem_waitcommon.c
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_waitcommon.c
+@@ -17,6 +17,7 @@
+    License along with the GNU C Library; if not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
++#include <kernel-features.h>
+ #include <errno.h>
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+@@ -45,6 +46,13 @@ futex_abstimed_wait (unsigned int* futex
+     }
+   else
+     {
++#if (defined __ASSUME_FUTEX_CLOCK_REALTIME	\
++     && defined lll_futex_timed_wait_bitset)
++      /* The Linux kernel returns EINVAL for this, but in userspace
++	 such a value is valid.  */
++      if (abstime->tv_sec < 0)
++	return ETIMEDOUT;
++#else
+       struct timeval tv;
+       struct timespec rt;
+       int sec, nsec;
+@@ -68,9 +76,16 @@ futex_abstimed_wait (unsigned int* futex
+       /* Do wait.  */
+       rt.tv_sec = sec;
+       rt.tv_nsec = nsec;
++#endif
+       if (cancel)
+ 	oldtype = __pthread_enable_asynccancel ();
++#if (defined __ASSUME_FUTEX_CLOCK_REALTIME	\
++     && defined lll_futex_timed_wait_bitset)
++      err = lll_futex_timed_wait_bitset (futex, expected, abstime,
++					 FUTEX_CLOCK_REALTIME, private);
++#else
+       err = lll_futex_timed_wait (futex, expected, &rt, private);
++#endif
+       if (cancel)
+ 	__pthread_disable_asynccancel (oldtype);
+     }
diff --git a/SOURCES/glibc-rh1027348.patch b/SOURCES/glibc-rh1027348.patch
new file mode 100644
index 0000000..4aca8a2
--- /dev/null
+++ b/SOURCES/glibc-rh1027348.patch
@@ -0,0 +1,3917 @@
+Torvald Riegel's semaphore reimplemenation to fix upstream swbz#12674.
+
+commit 042e1521c794a945edc43b5bfa7e69ad70420524
+Author: Carlos O'Donell <carlos@systemhalted.org>
+Date:   Wed Jan 21 00:46:16 2015 -0500
+
+    Fix semaphore destruction (bug 12674).
+    
+    This commit fixes semaphore destruction by either using 64b atomic
+    operations (where available), or by using two separate fields when only
+    32b atomic operations are available.  In the latter case, we keep a
+    conservative estimate of whether there are any waiting threads in one
+    bit of the field that counts the number of available tokens, thus
+    allowing sem_post to atomically both add a token and determine whether
+    it needs to call futex_wake.
+    
+    See:
+    https://sourceware.org/ml/libc-alpha/2014-12/msg00155.html 
+
+Notes:
+* For x86_64 and i686, rather than movign to the generic lll_futex_wake
+  we fix the existing versions to return the syscall result and to be
+  usable as an R-value.
+* We also backport fixes for swbz#18434, and swbz#18138.
+* We ignore swbz#17870 because it applies only to x32.
+
+Index: glibc-2.17-c758a686/nptl/DESIGN-sem.txt
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/DESIGN-sem.txt
++++ /dev/null
+@@ -1,46 +0,0 @@
+-Semaphores pseudocode
+-==============================
+-
+-       int sem_wait(sem_t * sem);
+-       int sem_trywait(sem_t * sem);
+-       int sem_post(sem_t * sem);
+-       int sem_getvalue(sem_t * sem, int * sval);
+-
+-struct sem_t {
+-
+-   unsigned int count;
+-         - current semaphore count, also used as a futex
+-}
+-
+-sem_wait(sem_t *sem)
+-{
+-  for (;;) {
+-
+-    if (atomic_decrement_if_positive(sem->count))
+-      break;
+-
+-    futex_wait(&sem->count, 0)
+-  }
+-}
+-
+-sem_post(sem_t *sem)
+-{
+-  n = atomic_increment(sem->count);
+-  // Pass the new value of sem->count
+-  futex_wake(&sem->count, n + 1);
+-}
+-
+-sem_trywait(sem_t *sem)
+-{
+-  if (atomic_decrement_if_positive(sem->count)) {
+-    return 0;
+-  } else {
+-    return EAGAIN;
+-  }
+-}
+-
+-sem_getvalue(sem_t *sem, int *sval)
+-{
+-  *sval = sem->count;
+-  read_barrier();
+-}
+Index: glibc-2.17-c758a686/nptl/Makefile
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/Makefile
++++ glibc-2.17-c758a686/nptl/Makefile
+@@ -95,7 +95,7 @@ libpthread-routines = nptl-init vars eve
+ 		      sem_init sem_destroy \
+ 		      sem_open sem_close sem_unlink \
+ 		      sem_getvalue \
+-		      sem_wait sem_trywait sem_timedwait sem_post \
++		      sem_wait sem_timedwait sem_post \
+ 		      cleanup cleanup_defer cleanup_compat \
+ 		      cleanup_defer_compat unwind \
+ 		      pt-longjmp pt-cleanup\
+Index: glibc-2.17-c758a686/nptl/sem_getvalue.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sem_getvalue.c
++++ glibc-2.17-c758a686/nptl/sem_getvalue.c
+@@ -19,23 +19,37 @@
+ #include <semaphore.h>
+ #include <shlib-compat.h>
+ #include "semaphoreP.h"
++#include <atomic.h>
+ 
+ 
+ int
+-__new_sem_getvalue (sem, sval)
+-     sem_t *sem;
+-     int *sval;
++__new_sem_getvalue (sem_t *sem, int *sval)
+ {
+   struct new_sem *isem = (struct new_sem *) sem;
+ 
+   /* XXX Check for valid SEM parameter.  */
++  /* FIXME This uses relaxed MO, even though POSIX specifies that this function
++     should be linearizable.  However, its debatable whether linearizability
++     is the right requirement.  We need to follow up with POSIX and, if
++     necessary, use a stronger MO here and elsewhere (e.g., potentially
++     release MO in all places where we consume a token).  */
+ 
+-  *sval = isem->value;
++#if __HAVE_64B_ATOMICS
++  *sval = atomic_load_relaxed (&isem->data) & SEM_VALUE_MASK;
++#else
++  *sval = atomic_load_relaxed (&isem->value) >> SEM_VALUE_SHIFT;
++#endif
+ 
+   return 0;
+ }
+ versioned_symbol (libpthread, __new_sem_getvalue, sem_getvalue, GLIBC_2_1);
+ #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
+-strong_alias (__new_sem_getvalue, __old_sem_getvalue)
++int
++__old_sem_getvalue (sem_t *sem, int *sval)
++{
++  struct old_sem *isem = (struct old_sem *) sem;
++  *sval = isem->value;
++  return 0;
++}
+ compat_symbol (libpthread, __old_sem_getvalue, sem_getvalue, GLIBC_2_0);
+ #endif
+Index: glibc-2.17-c758a686/nptl/sem_init.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sem_init.c
++++ glibc-2.17-c758a686/nptl/sem_init.c
+@@ -18,17 +18,28 @@
+ 
+ #include <errno.h>
+ #include <semaphore.h>
+-#include <lowlevellock.h>
+ #include <shlib-compat.h>
+ #include "semaphoreP.h"
+ #include <kernel-features.h>
+ 
++/* Returns FUTEX_PRIVATE if pshared is zero and private futexes are supported;
++   returns FUTEX_SHARED otherwise.
++   TODO Remove when cleaning up the futex API throughout glibc.  */
++static __always_inline int
++futex_private_if_supported (int pshared)
++{
++  if (pshared != 0)
++    return LLL_SHARED;
++#ifdef __ASSUME_PRIVATE_FUTEX
++  return LLL_PRIVATE;
++#else
++  return THREAD_GETMEM (THREAD_SELF, header.private_futex)
++      ^ FUTEX_PRIVATE_FLAG;
++#endif
++}
+ 
+ int
+-__new_sem_init (sem, pshared, value)
+-     sem_t *sem;
+-     int pshared;
+-     unsigned int value;
++__new_sem_init (sem_t *sem, int pshared, unsigned int value)
+ {
+   /* Parameter sanity check.  */
+   if (__builtin_expect (value > SEM_VALUE_MAX, 0))
+@@ -40,16 +51,15 @@ __new_sem_init (sem, pshared, value)
+   /* Map to the internal type.  */
+   struct new_sem *isem = (struct new_sem *) sem;
+ 
+-  /* Use the values the user provided.  */
+-  isem->value = value;
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-  isem->private = pshared ? 0 : FUTEX_PRIVATE_FLAG;
++  /* Use the values the caller provided.  */
++#if __HAVE_64B_ATOMICS
++  isem->data = value;
+ #else
+-  isem->private = pshared ? 0 : THREAD_GETMEM (THREAD_SELF,
+-					       header.private_futex);
++  isem->value = value << SEM_VALUE_SHIFT;
++  isem->nwaiters = 0;
+ #endif
+ 
+-  isem->nwaiters = 0;
++  isem->private = futex_private_if_supported (pshared);
+ 
+   return 0;
+ }
+Index: glibc-2.17-c758a686/nptl/sem_open.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sem_open.c
++++ glibc-2.17-c758a686/nptl/sem_open.c
+@@ -307,9 +307,14 @@ sem_open (const char *name, int oflag, .
+ 	struct new_sem newsem;
+       } sem;
+ 
+-      sem.newsem.value = value;
+-      sem.newsem.private = 0;
++#if __HAVE_64B_ATOMICS
++      sem.newsem.data = value;
++#else
++      sem.newsem.value = value << SEM_VALUE_SHIFT;
+       sem.newsem.nwaiters = 0;
++#endif
++      /* This always is a shared semaphore.  */
++      sem.newsem.private = LLL_SHARED;
+ 
+       /* Initialize the remaining bytes as well.  */
+       memset ((char *) &sem.initsem + sizeof (struct new_sem), '\0',
+Index: glibc-2.17-c758a686/nptl/tst-sem11.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/tst-sem11.c
++++ glibc-2.17-c758a686/nptl/tst-sem11.c
+@@ -34,8 +34,11 @@ main (void)
+       puts ("sem_init failed");
+       return 1;
+     }
+-
++#if __HAVE_64B_ATOMICS
++  if ((u.ns.data >> SEM_NWAITERS_SHIFT) != 0)
++#else
+   if (u.ns.nwaiters != 0)
++#endif
+     {
+       puts ("nwaiters not initialized");
+       return 1;
+@@ -68,7 +71,11 @@ main (void)
+       goto again;
+     }
+ 
++#if __HAVE_64B_ATOMICS
++  if ((u.ns.data >> SEM_NWAITERS_SHIFT) != 0)
++#else
+   if (u.ns.nwaiters != 0)
++#endif
+     {
+       puts ("nwaiters not reset");
+       return 1;
+Index: glibc-2.17-c758a686/nptl/tst-sem13.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/tst-sem13.c
++++ glibc-2.17-c758a686/nptl/tst-sem13.c
+@@ -33,9 +33,14 @@ do_test (void)
+       perror ("sem_timedwait did not fail with EINVAL");
+       return 1;
+     }
+-  if (u.ns.nwaiters != 0)
++#if __HAVE_64B_ATOMICS
++  unsigned int nwaiters = (u.ns.data >> SEM_NWAITERS_SHIFT);
++#else
++  unsigned int nwaiters = u.ns.nwaiters;
++#endif
++  if (nwaiters != 0)
+     {
+-      printf ("sem_timedwait modified nwaiters: %ld\n", u.ns.nwaiters);
++      printf ("sem_timedwait modified nwaiters: %d\n", nwaiters);
+       return 1;
+     }
+ 
+@@ -52,9 +57,14 @@ do_test (void)
+       perror ("2nd sem_timedwait did not fail with ETIMEDOUT");
+       return 1;
+     }
+-  if (u.ns.nwaiters != 0)
++#if __HAVE_64B_ATOMICS
++  nwaiters = (u.ns.data >> SEM_NWAITERS_SHIFT);
++#else
++  nwaiters = u.ns.nwaiters;
++#endif
++  if (nwaiters != 0)
+     {
+-      printf ("2nd sem_timedwait modified nwaiters: %ld\n", u.ns.nwaiters);
++      printf ("2nd sem_timedwait modified nwaiters: %d\n", nwaiters);
+       return 1;
+     }
+ 
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_post.S
++++ /dev/null
+@@ -1,151 +0,0 @@
+-/* Copyright (C) 2002,2003,2005,2007,2008,2011-2012
+-   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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-#include <lowlevellock.h>
+-
+-
+-	.text
+-
+-	.globl	__new_sem_post
+-	.type	__new_sem_post,@function
+-	.align	16
+-__new_sem_post:
+-	cfi_startproc
+-	pushl	%ebx
+-	cfi_adjust_cfa_offset(4)
+-	cfi_offset(%ebx, -8)
+-
+-	movl	8(%esp), %ebx
+-
+-#if VALUE == 0
+-	movl	(%ebx), %eax
+-#else
+-	movl	VALUE(%ebx), %eax
+-#endif
+-0:	cmpl	$SEM_VALUE_MAX, %eax
+-	je	3f
+-	leal	1(%eax), %edx
+-	LOCK
+-#if VALUE == 0
+-	cmpxchgl %edx, (%ebx)
+-#else
+-	cmpxchgl %edx, VALUE(%ebx)
+-#endif
+-	jnz	0b
+-
+-	cmpl	$0, NWAITERS(%ebx)
+-	je	2f
+-
+-	movl	$FUTEX_WAKE, %ecx
+-	orl	PRIVATE(%ebx), %ecx
+-	movl	$1, %edx
+-	movl	$SYS_futex, %eax
+-	ENTER_KERNEL
+-
+-	testl	%eax, %eax
+-	js	1f
+-
+-2:	xorl	%eax, %eax
+-	popl	%ebx
+-	cfi_adjust_cfa_offset(-4)
+-	cfi_restore(%ebx)
+-	ret
+-
+-	cfi_adjust_cfa_offset(4)
+-	cfi_offset(%ebx, -8)
+-1:
+-#ifdef PIC
+-	SETUP_PIC_REG(bx)
+-#else
+-	movl	$4f, %ebx
+-4:
+-#endif
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+-#ifdef NO_TLS_DIRECT_SEG_REFS
+-	movl	errno@gotntpoff(%ebx), %edx
+-	addl	%gs:0, %edx
+-	movl	$EINVAL, (%edx)
+-#else
+-	movl	errno@gotntpoff(%ebx), %edx
+-	movl	$EINVAL, %gs:(%edx)
+-#endif
+-
+-	orl	$-1, %eax
+-	popl	%ebx
+-	ret
+-
+-3:
+-#ifdef PIC
+-	SETUP_PIC_REG(bx)
+-#else
+-	movl	$5f, %ebx
+-5:
+-#endif
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+-#ifdef NO_TLS_DIRECT_SEG_REFS
+-	movl	errno@gotntpoff(%ebx), %edx
+-	addl	%gs:0, %edx
+-	movl	$EOVERFLOW, (%edx)
+-#else
+-	movl	errno@gotntpoff(%ebx), %edx
+-	movl	$EOVERFLOW, %gs:(%edx)
+-#endif
+-
+-	orl	$-1, %eax
+-	popl	%ebx
+-	cfi_adjust_cfa_offset(-4)
+-	cfi_restore(%ebx)
+-	ret
+-	cfi_endproc
+-	.size	__new_sem_post,.-__new_sem_post
+-	versioned_symbol(libpthread, __new_sem_post, sem_post, GLIBC_2_1)
+-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
+-	.global	__old_sem_post
+-	.type	__old_sem_post,@function
+-__old_sem_post:
+-	cfi_startproc
+-	pushl	%ebx
+-	cfi_adjust_cfa_offset(4)
+-	cfi_offset(%ebx, -8)
+-
+-	movl	8(%esp), %ebx
+-	LOCK
+-	addl	$1, (%ebx)
+-
+-	movl	$SYS_futex, %eax
+-	movl	$FUTEX_WAKE, %ecx
+-	movl	$1, %edx
+-	ENTER_KERNEL
+-
+-	testl	%eax, %eax
+-	js	1b
+-
+-	xorl	%eax, %eax
+-	popl	%ebx
+-	cfi_adjust_cfa_offset(-4)
+-	cfi_restore(%ebx)
+-	ret
+-	cfi_endproc
+-	.size	__old_sem_post,.-__old_sem_post
+-	compat_symbol(libpthread, __old_sem_post, sem_post, GLIBC_2_0)
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_timedwait.S
++++ /dev/null
+@@ -1,327 +0,0 @@
+-/* Copyright (C) 2002-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-#include <lowlevellock.h>
+-
+-
+-#if VALUE != 0
+-# error "code needs to be rewritten for VALUE != 0"
+-#endif
+-
+-
+-	.text
+-
+-	.globl	sem_timedwait
+-	.type	sem_timedwait,@function
+-	.align	16
+-sem_timedwait:
+-.LSTARTCODE:
+-	movl	4(%esp), %ecx
+-
+-	movl	(%ecx), %eax
+-2:	testl	%eax, %eax
+-	je	1f
+-
+-	leal	-1(%eax), %edx
+-	LOCK
+-	cmpxchgl %edx, (%ecx)
+-	jne	2b
+-
+-	xorl	%eax, %eax
+-	ret
+-
+-	/* Check whether the timeout value is valid.  */
+-1:	pushl	%esi
+-.Lpush_esi:
+-	pushl	%edi
+-.Lpush_edi:
+-	pushl	%ebx
+-.Lpush_ebx:
+-	subl	$12, %esp
+-.Lsub_esp:
+-
+-	movl	32(%esp), %edi
+-
+-	/* Check for invalid nanosecond field.  */
+-	cmpl	$1000000000, 4(%edi)
+-	movl	$EINVAL, %esi
+-	jae	.Lerrno_exit
+-
+-	LOCK
+-	incl	NWAITERS(%ecx)
+-
+-7:	xorl	%ecx, %ecx
+-	movl	%esp, %ebx
+-	movl	%ecx, %edx
+-	movl	$__NR_gettimeofday, %eax
+-	ENTER_KERNEL
+-
+-	/* Compute relative timeout.  */
+-	movl	4(%esp), %eax
+-	movl	$1000, %edx
+-	mul	%edx		/* Milli seconds to nano seconds.  */
+-	movl	(%edi), %ecx
+-	movl	4(%edi), %edx
+-	subl	(%esp), %ecx
+-	subl	%eax, %edx
+-	jns	5f
+-	addl	$1000000000, %edx
+-	subl	$1, %ecx
+-5:	testl	%ecx, %ecx
+-	movl	$ETIMEDOUT, %esi
+-	js	6f		/* Time is already up.  */
+-
+-	movl	%ecx, (%esp)	/* Store relative timeout.  */
+-	movl	%edx, 4(%esp)
+-
+-.LcleanupSTART:
+-	call	__pthread_enable_asynccancel
+-	movl	%eax, 8(%esp)
+-
+-	movl	28(%esp), %ebx	/* Load semaphore address.  */
+-#if FUTEX_WAIT == 0
+-	movl	PRIVATE(%ebx), %ecx
+-#else
+-	movl	$FUTEX_WAIT, %ecx
+-	orl	PRIVATE(%ebx), %ecx
+-#endif
+-	movl	%esp, %esi
+-	xorl	%edx, %edx
+-	movl	$SYS_futex, %eax
+-	ENTER_KERNEL
+-	movl	%eax, %esi
+-
+-	movl	8(%esp), %eax
+-	call	__pthread_disable_asynccancel
+-.LcleanupEND:
+-
+-	testl	%esi, %esi
+-	je	9f
+-	cmpl	$-EWOULDBLOCK, %esi
+-	jne	3f
+-
+-9:	movl	(%ebx), %eax
+-8:	testl	%eax, %eax
+-	je	7b
+-
+-	leal	-1(%eax), %ecx
+-	LOCK
+-	cmpxchgl %ecx, (%ebx)
+-	jne	8b
+-
+-	xorl	%eax, %eax
+-
+-	LOCK
+-	decl	NWAITERS(%ebx)
+-
+-10:	addl	$12, %esp
+-.Ladd_esp:
+-	popl	%ebx
+-.Lpop_ebx:
+-	popl	%edi
+-.Lpop_edi:
+-	popl	%esi
+-.Lpop_esi:
+-	ret
+-
+-.Lafter_ret:
+-3:	negl	%esi
+-6:
+-	movl	28(%esp), %ebx	/* Load semaphore address.  */
+-	LOCK
+-	decl	NWAITERS(%ebx)
+-.Lerrno_exit:
+-#ifdef PIC
+-	SETUP_PIC_REG(bx)
+-#else
+-	movl	$4f, %ebx
+-4:
+-#endif
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+-#ifdef NO_TLS_DIRECT_SEG_REFS
+-	movl	errno@gotntpoff(%ebx), %edx
+-	addl	%gs:0, %edx
+-	movl	%esi, (%edx)
+-#else
+-	movl	errno@gotntpoff(%ebx), %edx
+-	movl	%esi, %gs:(%edx)
+-#endif
+-
+-	orl	$-1, %eax
+-	jmp	10b
+-	.size	sem_timedwait,.-sem_timedwait
+-
+-
+-	.type	sem_wait_cleanup,@function
+-sem_wait_cleanup:
+-	LOCK
+-	decl	NWAITERS(%ebx)
+-	movl	%eax, (%esp)
+-.LcallUR:
+-	call	_Unwind_Resume@PLT
+-	hlt
+-.LENDCODE:
+-	.size	sem_wait_cleanup,.-sem_wait_cleanup
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	0xff				# @LPStart format (omit)
+-	.byte	0xff				# @TType format (omit)
+-	.byte	0x01				# call-site format
+-						# DW_EH_PE_uleb128
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 sem_wait_cleanup-.LSTARTCODE
+-	.uleb128  0
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-.Lcstend:
+-
+-
+-	.section .eh_frame,"a",@progbits
+-.LSTARTFRAME:
+-	.long	.LENDCIE-.LSTARTCIE		# Length of the CIE.
+-.LSTARTCIE:
+-	.long	0				# CIE ID.
+-	.byte	1				# Version number.
+-#ifdef SHARED
+-	.string	"zPLR"				# NUL-terminated augmentation
+-						# string.
+-#else
+-	.string	"zPL"				# NUL-terminated augmentation
+-						# string.
+-#endif
+-	.uleb128 1				# Code alignment factor.
+-	.sleb128 -4				# Data alignment factor.
+-	.byte	8				# Return address register
+-						# column.
+-#ifdef SHARED
+-	.uleb128 7				# Augmentation value length.
+-	.byte	0x9b				# Personality: DW_EH_PE_pcrel
+-						# + DW_EH_PE_sdata4
+-						# + DW_EH_PE_indirect
+-	.long	DW.ref.__gcc_personality_v0-.
+-	.byte	0x1b				# LSDA Encoding: DW_EH_PE_pcrel
+-						# + DW_EH_PE_sdata4.
+-	.byte	0x1b				# FDE Encoding: DW_EH_PE_pcrel
+-						# + DW_EH_PE_sdata4.
+-#else
+-	.uleb128 6				# Augmentation value length.
+-	.byte	0x0				# Personality: absolute
+-	.long	__gcc_personality_v0
+-	.byte	0x0				# LSDA Encoding: absolute
+-#endif
+-	.byte 0x0c				# DW_CFA_def_cfa
+-	.uleb128 4
+-	.uleb128 4
+-	.byte	0x88				# DW_CFA_offset, column 0x10
+-	.uleb128 1
+-	.align 4
+-.LENDCIE:
+-
+-	.long	.LENDFDE-.LSTARTFDE		# Length of the FDE.
+-.LSTARTFDE:
+-	.long	.LSTARTFDE-.LSTARTFRAME		# CIE pointer.
+-#ifdef SHARED
+-	.long	.LSTARTCODE-.			# PC-relative start address
+-						# of the code.
+-#else
+-	.long	.LSTARTCODE			# Start address of the code.
+-#endif
+-	.long	.LENDCODE-.LSTARTCODE		# Length of the code.
+-	.uleb128 4				# Augmentation size
+-#ifdef SHARED
+-	.long	.LexceptSTART-.
+-#else
+-	.long	.LexceptSTART
+-#endif
+-
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpush_esi-.LSTARTCODE
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 8
+-	.byte   0x86				# DW_CFA_offset %esi
+-	.uleb128 2
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpush_edi-.Lpush_esi
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 12
+-	.byte   0x87				# DW_CFA_offset %edi
+-	.uleb128 3
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpush_ebx-.Lpush_edi
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 16
+-	.byte   0x83				# DW_CFA_offset %ebx
+-	.uleb128 4
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lsub_esp-.Lpush_ebx
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 28
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Ladd_esp-.Lsub_esp
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 16
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpop_ebx-.Ladd_esp
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 12
+-	.byte	0xc3				# DW_CFA_restore %ebx
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpop_edi-.Lpop_ebx
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 8
+-	.byte	0xc7				# DW_CFA_restore %edi
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpop_esi-.Lpop_edi
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 4
+-	.byte	0xc6				# DW_CFA_restore %esi
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lafter_ret-.Lpop_esi
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 28
+-	.byte   0x86				# DW_CFA_offset %esi
+-	.uleb128 2
+-	.byte   0x87				# DW_CFA_offset %edi
+-	.uleb128 3
+-	.byte   0x83				# DW_CFA_offset %ebx
+-	.uleb128 4
+-	.align	4
+-.LENDFDE:
+-
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	4
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, 4
+-DW.ref.__gcc_personality_v0:
+-	.long	__gcc_personality_v0
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S
++++ /dev/null
+@@ -1,67 +0,0 @@
+-/* Copyright (C) 2002-2003, 2005, 2007, 2011-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <lowlevellock.h>
+-
+-	.text
+-
+-	.globl	__new_sem_trywait
+-	.type	__new_sem_trywait,@function
+-	.align	16
+-__new_sem_trywait:
+-	movl	4(%esp), %ecx
+-
+-	movl	(%ecx), %eax
+-2:	testl	%eax, %eax
+-	jz	1f
+-
+-	leal	-1(%eax), %edx
+-	LOCK
+-	cmpxchgl %edx, (%ecx)
+-	jne	2b
+-	xorl	%eax, %eax
+-	ret
+-
+-1:
+-#ifdef PIC
+-	SETUP_PIC_REG(cx)
+-#else
+-	movl	$3f, %ecx
+-3:
+-#endif
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ecx
+-#ifdef NO_TLS_DIRECT_SEG_REFS
+-	movl	errno@gotntpoff(%ecx), %edx
+-	addl	%gs:0, %edx
+-	movl	$EAGAIN, (%edx)
+-#else
+-	movl	errno@gotntpoff(%ecx), %edx
+-	movl	$EAGAIN, %gs:(%edx)
+-#endif
+-	orl	$-1, %eax
+-	ret
+-	.size	__new_sem_trywait,.-__new_sem_trywait
+-	versioned_symbol(libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1)
+-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
+-	.global	__old_sem_trywait
+-__old_sem_trywait = __new_sem_trywait
+-	compat_symbol(libpthread, __old_sem_trywait, sem_trywait, GLIBC_2_0)
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i486/sem_wait.S
++++ /dev/null
+@@ -1,343 +0,0 @@
+-/* Copyright (C) 2002-2003, 2005, 2007, 2011-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-#include <lowlevellock.h>
+-
+-
+-#if VALUE != 0
+-# error "code needs to be rewritten for VALUE != 0"
+-#endif
+-
+-	.text
+-
+-	.globl	__new_sem_wait
+-	.type	__new_sem_wait,@function
+-	.align	16
+-__new_sem_wait:
+-.LSTARTCODE:
+-	pushl	%ebx
+-.Lpush_ebx:
+-	pushl	%esi
+-.Lpush_esi:
+-	subl	$4, %esp
+-.Lsub_esp:
+-
+-	movl	16(%esp), %ebx
+-
+-	movl	(%ebx), %eax
+-2:	testl	%eax, %eax
+-	je	1f
+-
+-	leal	-1(%eax), %edx
+-	LOCK
+-	cmpxchgl %edx, (%ebx)
+-	jne	2b
+-7:	xorl	%eax, %eax
+-
+-9:	movl	4(%esp), %esi
+-	movl	8(%esp), %ebx
+-	addl	$12, %esp
+-.Ladd_esp:
+-	ret
+-
+-.Lafter_ret:
+-1:	LOCK
+-	incl	NWAITERS(%ebx)
+-
+-.LcleanupSTART:
+-6:	call	__pthread_enable_asynccancel
+-	movl	%eax, (%esp)
+-
+-#if FUTEX_WAIT == 0
+-	movl	PRIVATE(%ebx), %ecx
+-#else
+-	movl	$FUTEX_WAIT, %ecx
+-	orl	PRIVATE(%ebx), %ecx
+-#endif
+-	xorl	%esi, %esi
+-	xorl	%edx, %edx
+-	movl	$SYS_futex, %eax
+-	ENTER_KERNEL
+-	movl	%eax, %esi
+-
+-	movl	(%esp), %eax
+-	call	__pthread_disable_asynccancel
+-.LcleanupEND:
+-
+-	testl	%esi, %esi
+-	je	3f
+-	cmpl	$-EWOULDBLOCK, %esi
+-	jne	4f
+-
+-3:
+-	movl	(%ebx), %eax
+-5:	testl	%eax, %eax
+-	je	6b
+-
+-	leal	-1(%eax), %edx
+-	LOCK
+-	cmpxchgl %edx, (%ebx)
+-	jne	5b
+-
+-	LOCK
+-	decl	NWAITERS(%ebx)
+-	jmp	7b
+-
+-4:	LOCK
+-	decl	NWAITERS(%ebx)
+-
+-	negl	%esi
+-#ifdef PIC
+-	SETUP_PIC_REG(bx)
+-#else
+-	movl	$8f, %ebx
+-8:
+-#endif
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+-#ifdef NO_TLS_DIRECT_SEG_REFS
+-	movl	errno@gotntpoff(%ebx), %edx
+-	addl	%gs:0, %edx
+-	movl	%esi, (%edx)
+-#else
+-	movl	errno@gotntpoff(%ebx), %edx
+-	movl	%esi, %gs:(%edx)
+-#endif
+-	orl	$-1, %eax
+-
+-	jmp	9b
+-	.size	__new_sem_wait,.-__new_sem_wait
+-	versioned_symbol(libpthread, __new_sem_wait, sem_wait, GLIBC_2_1)
+-
+-
+-	.type	sem_wait_cleanup,@function
+-sem_wait_cleanup:
+-	LOCK
+-	decl	NWAITERS(%ebx)
+-	movl	%eax, (%esp)
+-.LcallUR:
+-	call	_Unwind_Resume@PLT
+-	hlt
+-.LENDCODE:
+-	.size	sem_wait_cleanup,.-sem_wait_cleanup
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	0xff				# @LPStart format (omit)
+-	.byte	0xff				# @TType format (omit)
+-	.byte	0x01				# call-site format
+-						# DW_EH_PE_uleb128
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 sem_wait_cleanup-.LSTARTCODE
+-	.uleb128  0
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-.Lcstend:
+-
+-
+-	.section .eh_frame,"a",@progbits
+-.LSTARTFRAME:
+-	.long	.LENDCIE-.LSTARTCIE		# Length of the CIE.
+-.LSTARTCIE:
+-	.long	0				# CIE ID.
+-	.byte	1				# Version number.
+-#ifdef SHARED
+-	.string	"zPLR"				# NUL-terminated augmentation
+-						# string.
+-#else
+-	.string	"zPL"				# NUL-terminated augmentation
+-						# string.
+-#endif
+-	.uleb128 1				# Code alignment factor.
+-	.sleb128 -4				# Data alignment factor.
+-	.byte	8				# Return address register
+-						# column.
+-#ifdef SHARED
+-	.uleb128 7				# Augmentation value length.
+-	.byte	0x9b				# Personality: DW_EH_PE_pcrel
+-						# + DW_EH_PE_sdata4
+-						# + DW_EH_PE_indirect
+-	.long	DW.ref.__gcc_personality_v0-.
+-	.byte	0x1b				# LSDA Encoding: DW_EH_PE_pcrel
+-						# + DW_EH_PE_sdata4.
+-	.byte	0x1b				# FDE Encoding: DW_EH_PE_pcrel
+-						# + DW_EH_PE_sdata4.
+-#else
+-	.uleb128 6				# Augmentation value length.
+-	.byte	0x0				# Personality: absolute
+-	.long	__gcc_personality_v0
+-	.byte	0x0				# LSDA Encoding: absolute
+-#endif
+-	.byte 0x0c				# DW_CFA_def_cfa
+-	.uleb128 4
+-	.uleb128 4
+-	.byte	0x88				# DW_CFA_offset, column 0x10
+-	.uleb128 1
+-	.align 4
+-.LENDCIE:
+-
+-	.long	.LENDFDE-.LSTARTFDE		# Length of the FDE.
+-.LSTARTFDE:
+-	.long	.LSTARTFDE-.LSTARTFRAME		# CIE pointer.
+-#ifdef SHARED
+-	.long	.LSTARTCODE-.			# PC-relative start address
+-						# of the code.
+-#else
+-	.long	.LSTARTCODE			# Start address of the code.
+-#endif
+-	.long	.LENDCODE-.LSTARTCODE		# Length of the code.
+-	.uleb128 4				# Augmentation size
+-#ifdef SHARED
+-	.long	.LexceptSTART-.
+-#else
+-	.long	.LexceptSTART
+-#endif
+-
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpush_ebx-.LSTARTCODE
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 8
+-	.byte   0x83				# DW_CFA_offset %ebx
+-	.uleb128 2
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lpush_esi-.Lpush_ebx
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 12
+-	.byte   0x86				# DW_CFA_offset %esi
+-	.uleb128 3
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lsub_esp-.Lpush_esi
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 16
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Ladd_esp-.Lsub_esp
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 4
+-	.byte	0xc3				# DW_CFA_restore %ebx
+-	.byte	0xc6				# DW_CFA_restore %esi
+-	.byte	4				# DW_CFA_advance_loc4
+-	.long	.Lafter_ret-.Ladd_esp
+-	.byte	14				# DW_CFA_def_cfa_offset
+-	.uleb128 16
+-	.byte   0x83				# DW_CFA_offset %ebx
+-	.uleb128 2
+-	.byte   0x86				# DW_CFA_offset %esi
+-	.uleb128 3
+-	.align	4
+-.LENDFDE:
+-
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	4
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, 4
+-DW.ref.__gcc_personality_v0:
+-	.long	__gcc_personality_v0
+-#endif
+-
+-
+-#if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
+-	.section ".text.compat", "ax"
+-	.global	__old_sem_wait
+-	.type	__old_sem_wait,@function
+-	.align	16
+-	cfi_startproc
+-__old_sem_wait:
+-	pushl	%ebx
+-	cfi_adjust_cfa_offset(4)
+-	pushl	%esi
+-	cfi_adjust_cfa_offset(4)
+-	subl	$4, %esp
+-	cfi_adjust_cfa_offset(4)
+-
+-	movl	16(%esp), %ebx
+-	cfi_offset(ebx, -8)
+-
+-	cfi_offset(esi, -12)
+-3:	movl	(%ebx), %eax
+-2:	testl	%eax, %eax
+-	je	1f
+-
+-	leal	-1(%eax), %edx
+-	LOCK
+-	cmpxchgl %edx, (%ebx)
+-	jne	2b
+-	xorl	%eax, %eax
+-
+-5:	movl	4(%esp), %esi
+-	movl	8(%esp), %ebx
+-	addl	$12, %esp
+-	cfi_restore(ebx)
+-	cfi_restore(esi)
+-	cfi_adjust_cfa_offset(-12)
+-	ret
+-
+-	cfi_adjust_cfa_offset(12)
+-	cfi_offset(ebx, -8)
+-	cfi_offset(esi, -12)
+-1:	call	__pthread_enable_asynccancel
+-	movl	%eax, (%esp)
+-
+-	xorl	%esi, %esi
+-	movl	$SYS_futex, %eax
+-	movl	%esi, %ecx
+-	movl	%esi, %edx
+-	ENTER_KERNEL
+-	movl	%eax, %esi
+-
+-	movl	(%esp), %eax
+-	call	__pthread_disable_asynccancel
+-
+-	testl	%esi, %esi
+-	je	3b
+-	cmpl	$-EWOULDBLOCK, %esi
+-	je	3b
+-	negl	%esi
+-#ifdef PIC
+-	SETUP_PIC_REG(bx)
+-#else
+-	movl	$4f, %ebx
+-4:
+-#endif
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
+-#ifdef NO_TLS_DIRECT_SEG_REFS
+-	movl	errno@gotntpoff(%ebx), %edx
+-	addl	%gs:0, %edx
+-	movl	%esi, (%edx)
+-#else
+-	movl	errno@gotntpoff(%ebx), %edx
+-	movl	%esi, %gs:(%edx)
+-#endif
+-	orl	$-1, %eax
+-	jmp	5b
+-	cfi_endproc
+-	.size	__old_sem_wait,.-__old_sem_wait
+-	compat_symbol(libpthread, __old_sem_wait, sem_wait, GLIBC_2_0)
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_post.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_post.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_post.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_timedwait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_timedwait.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_timedwait.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_trywait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_trywait.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_trywait.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_wait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i586/sem_wait.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_wait.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_post.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_post.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_post.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_timedwait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_timedwait.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_timedwait.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_trywait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_trywait.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_trywait.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_wait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/i686/sem_wait.S
++++ /dev/null
+@@ -1,19 +0,0 @@
+-/* Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "../i486/sem_wait.S"
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/internaltypes.h
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/internaltypes.h
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/internaltypes.h
+@@ -20,6 +20,8 @@
+ #define _INTERNALTYPES_H	1
+ 
+ #include <stdint.h>
++#include <atomic.h>
++#include <endian.h>
+ 
+ 
+ struct pthread_attr
+@@ -141,9 +143,29 @@ struct pthread_key_struct
+ /* Semaphore variable structure.  */
+ struct new_sem
+ {
++#if __HAVE_64B_ATOMICS
++  /* The data field holds both value (in the least-significant 32 bytes) and
++     nwaiters.  */
++# if __BYTE_ORDER == __LITTLE_ENDIAN
++#  define SEM_VALUE_OFFSET 0
++# elif __BYTE_ORDER == __BIG_ENDIAN
++#  define SEM_VALUE_OFFSET 1
++# else
++# error Unsupported byte order.
++# endif
++# define SEM_NWAITERS_SHIFT 32
++# define SEM_VALUE_MASK (~(unsigned int)0)
++  unsigned long int data;
++  int private;
++  int pad;
++#else
++# define SEM_VALUE_SHIFT 1
++# define SEM_NWAITERS_MASK ((unsigned int)1)
+   unsigned int value;
+   int private;
+-  unsigned long int nwaiters;
++  int pad;
++  unsigned int nwaiters;
++#endif
+ };
+ 
+ struct old_sem
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/powerpc/sem_post.c
++++ /dev/null
+@@ -1,71 +0,0 @@
+-/* sem_post -- post to a POSIX semaphore.  Powerpc version.
+-   Copyright (C) 2003-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 <sysdep.h>
+-#include <lowlevellock.h>
+-#include <internaltypes.h>
+-#include <semaphore.h>
+-
+-#include <shlib-compat.h>
+-
+-int
+-__new_sem_post (sem_t *sem)
+-{
+-  struct new_sem *isem = (struct new_sem *) sem;
+-
+-  __asm __volatile (__lll_rel_instr ::: "memory");
+-  atomic_increment (&isem->value);
+-  __asm __volatile (__lll_acq_instr ::: "memory");
+-  if (isem->nwaiters > 0)
+-    {
+-      int err = lll_futex_wake (&isem->value, 1,
+-				isem->private ^ FUTEX_PRIVATE_FLAG);
+-      if (__builtin_expect (err, 0) < 0)
+-	{
+-	  __set_errno (-err);
+-	  return -1;
+-	}
+-    }
+-  return 0;
+-}
+-versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1);
+-
+-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1)
+-
+-int
+-attribute_compat_text_section
+-__old_sem_post (sem_t *sem)
+-{
+-  int *futex = (int *) sem;
+-
+-  __asm __volatile (__lll_rel_instr ::: "memory");
+-  (void) atomic_increment_val (futex);
+-  /* We always have to assume it is a shared semaphore.  */
+-  int err = lll_futex_wake (futex, 1, LLL_SHARED);
+-  if (__builtin_expect (err, 0) < 0)
+-    {
+-      __set_errno (-err);
+-      return -1;
+-    }
+-  return 0;
+-}
+-
+-compat_symbol (libpthread, __old_sem_post, sem_post, GLIBC_2_0);
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_post.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sem_post.c
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_post.c
+@@ -25,34 +25,78 @@
+ 
+ #include <shlib-compat.h>
+ 
++/* Wrapper for lll_futex_wake, with error checking.
++   TODO Remove when cleaning up the futex API throughout glibc.  */
++static __always_inline void
++futex_wake (unsigned int* futex, int processes_to_wake, int private)
++{
++  int res = lll_futex_wake (futex, processes_to_wake, private);
++  /* No error.  Ignore the number of woken processes.  */
++  if (res >= 0)
++    return;
++  switch (res)
++    {
++    case -EFAULT: /* Could have happened due to memory reuse.  */
++    case -EINVAL: /* Could be either due to incorrect alignment (a bug in
++		     glibc or in the application) or due to memory being
++		     reused for a PI futex.  We cannot distinguish between the
++		     two causes, and one of them is correct use, so we do not
++		     act in this case.  */
++      return;
++    case -ENOSYS: /* Must have been caused by a glibc bug.  */
++    /* No other errors are documented at this time.  */
++    default:
++      abort ();
++    }
++}
++
++
++/* See sem_wait for an explanation of the algorithm.  */
+ int
+ __new_sem_post (sem_t *sem)
+ {
+   struct new_sem *isem = (struct new_sem *) sem;
++  int private = isem->private;
+ 
+-  __typeof (isem->value) cur;
++#if __HAVE_64B_ATOMICS
++  /* Add a token to the semaphore.  We use release MO to make sure that a
++     thread acquiring this token synchronizes with us and other threads that
++     added tokens before (the release sequence includes atomic RMW operations
++     by other threads).  */
++  /* TODO Use atomic_fetch_add to make it scale better than a CAS loop?  */
++  unsigned long int d = atomic_load_relaxed (&isem->data);
+   do
+     {
+-      cur = isem->value;
+-      if (isem->value == SEM_VALUE_MAX)
++      if ((d & SEM_VALUE_MASK) == SEM_VALUE_MAX)
+ 	{
+ 	  __set_errno (EOVERFLOW);
+ 	  return -1;
+ 	}
+     }
+-  while (atomic_compare_and_exchange_bool_rel (&isem->value, cur + 1, cur));
++  while (!atomic_compare_exchange_weak_release (&isem->data, &d, d + 1));
+ 
+-  atomic_full_barrier ();
+-  if (isem->nwaiters > 0)
++  /* If there is any potentially blocked waiter, wake one of them.  */
++  if ((d >> SEM_NWAITERS_SHIFT) > 0)
++    futex_wake (((unsigned int *) &isem->data) + SEM_VALUE_OFFSET, 1, private);
++#else
++  /* Add a token to the semaphore.  Similar to 64b version.  */
++  unsigned int v = atomic_load_relaxed (&isem->value);
++  do
+     {
+-      int err = lll_futex_wake (&isem->value, 1,
+-				isem->private ^ FUTEX_PRIVATE_FLAG);
+-      if (__builtin_expect (err, 0) < 0)
++      if ((v << SEM_VALUE_SHIFT) == SEM_VALUE_MAX)
+ 	{
+-	  __set_errno (-err);
++	  __set_errno (EOVERFLOW);
+ 	  return -1;
+ 	}
+     }
++  while (!atomic_compare_exchange_weak_release (&isem->value,
++      &v, v + (1 << SEM_VALUE_SHIFT)));
++
++  /* If there is any potentially blocked waiter, wake one of them.  */
++  if ((v & SEM_NWAITERS_MASK) != 0)
++    futex_wake (&isem->value, 1, private);
++#endif
++
+   return 0;
+ }
+ versioned_symbol (libpthread, __new_sem_post, sem_post, GLIBC_2_1);
+@@ -65,6 +109,9 @@ __old_sem_post (sem_t *sem)
+ {
+   int *futex = (int *) sem;
+ 
++  /* We must need to synchronize with consumers of this token, so the atomic
++     increment must have release MO semantics.  */
++  atomic_write_barrier ();
+   (void) atomic_increment_val (futex);
+   /* We always have to assume it is a shared semaphore.  */
+   int err = lll_futex_wake (futex, 1, LLL_SHARED);
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_timedwait.c
+@@ -1,5 +1,5 @@
+-/* sem_timedwait -- wait on a semaphore.  Generic futex-using version.
+-   Copyright (C) 2003, 2007, 2012 Free Software Foundation, Inc.
++/* sem_timedwait -- wait on a semaphore with timeout.
++   Copyright (C) 2003-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
+ 
+@@ -17,42 +17,13 @@
+    License along with the GNU C Library; if not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+-#include <errno.h>
+-#include <sysdep.h>
+-#include <lowlevellock.h>
+-#include <internaltypes.h>
+-#include <semaphore.h>
+-
+-#include <pthreadP.h>
+-#include <shlib-compat.h>
+-
+-
+-extern void __sem_wait_cleanup (void *arg) attribute_hidden;
+-
+-/* This is in a seperate function in order to make sure gcc
+-   puts the call site into an exception region, and thus the
+-   cleanups get properly run.  */
+-static int
+-__attribute__ ((noinline))
+-do_futex_timed_wait (struct new_sem *isem, struct timespec *rt)
+-{
+-  int err, oldtype = __pthread_enable_asynccancel ();
+-
+-  err = lll_futex_timed_wait (&isem->value, 0, rt,
+-			      isem->private ^ FUTEX_PRIVATE_FLAG);
+-
+-  __pthread_disable_asynccancel (oldtype);
+-  return err;
+-}
++#include "sem_waitcommon.c"
+ 
++/* This is in a separate file because because sem_timedwait is only provided
++   if __USE_XOPEN2K is defined.  */
+ int
+ sem_timedwait (sem_t *sem, const struct timespec *abstime)
+ {
+-  struct new_sem *isem = (struct new_sem *) sem;
+-  int err;
+-
+-  if (atomic_decrement_if_positive (&isem->value) > 0)
+-    return 0;
+ 
+   if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000)
+     {
+@@ -60,57 +31,8 @@ sem_timedwait (sem_t *sem, const struct
+       return -1;
+     }
+ 
+-  atomic_increment (&isem->nwaiters);
+-
+-  pthread_cleanup_push (__sem_wait_cleanup, isem);
+-
+-  while (1)
+-    {
+-      struct timeval tv;
+-      struct timespec rt;
+-      int sec, nsec;
+-
+-      /* Get the current time.  */
+-      __gettimeofday (&tv, NULL);
+-
+-      /* Compute relative timeout.  */
+-      sec = abstime->tv_sec - tv.tv_sec;
+-      nsec = abstime->tv_nsec - tv.tv_usec * 1000;
+-      if (nsec < 0)
+-	{
+-	  nsec += 1000000000;
+-	  --sec;
+-	}
+-
+-      /* Already timed out?  */
+-      if (sec < 0)
+-	{
+-	  __set_errno (ETIMEDOUT);
+-	  err = -1;
+-	  break;
+-	}
+-
+-      /* Do wait.  */
+-      rt.tv_sec = sec;
+-      rt.tv_nsec = nsec;
+-      err = do_futex_timed_wait(isem, &rt);
+-      if (err != 0 && err != -EWOULDBLOCK)
+-	{
+-	  __set_errno (-err);
+-	  err = -1;
+-	  break;
+-	}
+-
+-      if (atomic_decrement_if_positive (&isem->value) > 0)
+-	{
+-	  err = 0;
+-	  break;
+-	}
+-    }
+-
+-  pthread_cleanup_pop (0);
+-
+-  atomic_decrement (&isem->nwaiters);
+-
+-  return err;
++  if (__new_sem_wait_fast ((struct new_sem *) sem, 0) == 0)
++    return 0;
++  else
++    return __new_sem_wait_slow((struct new_sem *) sem, abstime);
+ }
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_trywait.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sem_trywait.c
++++ /dev/null
+@@ -1,49 +0,0 @@
+-/* sem_trywait -- wait on a semaphore.  Generic futex-using version.
+-   Copyright (C) 2003 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 <sysdep.h>
+-#include <lowlevellock.h>
+-#include <internaltypes.h>
+-#include <semaphore.h>
+-
+-#include <shlib-compat.h>
+-
+-
+-int
+-__new_sem_trywait (sem_t *sem)
+-{
+-  int *futex = (int *) sem;
+-  int val;
+-
+-  if (*futex > 0)
+-    {
+-      val = atomic_decrement_if_positive (futex);
+-      if (val > 0)
+-	return 0;
+-    }
+-
+-  __set_errno (EAGAIN);
+-  return -1;
+-}
+-versioned_symbol (libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1);
+-#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1)
+-strong_alias (__new_sem_trywait, __old_sem_trywait)
+-compat_symbol (libpthread, __old_sem_trywait, sem_trywait, GLIBC_2_0);
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_wait.c
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sem_wait.c
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_wait.c
+@@ -17,79 +17,18 @@
+    License along with the GNU C Library; if not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+-#include <errno.h>
+-#include <sysdep.h>
+-#include <lowlevellock.h>
+-#include <internaltypes.h>
+-#include <semaphore.h>
+-
+-#include <pthreadP.h>
+-#include <shlib-compat.h>
+-
+-
+-void
+-attribute_hidden
+-__sem_wait_cleanup (void *arg)
+-{
+-  struct new_sem *isem = (struct new_sem *) arg;
+-
+-  atomic_decrement (&isem->nwaiters);
+-}
+-
+-/* This is in a seperate function in order to make sure gcc
+-   puts the call site into an exception region, and thus the
+-   cleanups get properly run.  */
+-static int
+-__attribute__ ((noinline))
+-do_futex_wait (struct new_sem *isem)
+-{
+-  int err, oldtype = __pthread_enable_asynccancel ();
+-
+-  err = lll_futex_wait (&isem->value, 0, isem->private ^ FUTEX_PRIVATE_FLAG);
+-
+-  __pthread_disable_asynccancel (oldtype);
+-  return err;
+-}
++#include "sem_waitcommon.c"
+ 
+ int
+ __new_sem_wait (sem_t *sem)
+ {
+-  struct new_sem *isem = (struct new_sem *) sem;
+-  int err;
+-
+-  if (atomic_decrement_if_positive (&isem->value) > 0)
++  if (__new_sem_wait_fast ((struct new_sem *) sem, 0) == 0)
+     return 0;
+-
+-  atomic_increment (&isem->nwaiters);
+-
+-  pthread_cleanup_push (__sem_wait_cleanup, isem);
+-
+-  while (1)
+-    {
+-      err = do_futex_wait(isem);
+-      if (err != 0 && err != -EWOULDBLOCK)
+-	{
+-	  __set_errno (-err);
+-	  err = -1;
+-	  break;
+-	}
+-
+-      if (atomic_decrement_if_positive (&isem->value) > 0)
+-	{
+-	  err = 0;
+-	  break;
+-	}
+-    }
+-
+-  pthread_cleanup_pop (0);
+-
+-  atomic_decrement (&isem->nwaiters);
+-
+-  return err;
++  else
++    return __new_sem_wait_slow((struct new_sem *) sem, NULL);
+ }
+ versioned_symbol (libpthread, __new_sem_wait, sem_wait, GLIBC_2_1);
+ 
+-
+ #if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1)
+ int
+ attribute_compat_text_section
+@@ -120,3 +59,34 @@ __old_sem_wait (sem_t *sem)
+ 
+ compat_symbol (libpthread, __old_sem_wait, sem_wait, GLIBC_2_0);
+ #endif
++
++int
++__new_sem_trywait (sem_t *sem)
++{
++  /* We must not fail spuriously, so require a definitive result even if this
++     may lead to a long execution time.  */
++  if (__new_sem_wait_fast ((struct new_sem *) sem, 1) == 0)
++    return 0;
++  __set_errno (EAGAIN);
++  return -1;
++}
++versioned_symbol (libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1);
++#if SHLIB_COMPAT (libpthread, GLIBC_2_0, GLIBC_2_1)
++int
++__old_sem_trywait (sem_t *sem)
++{
++  int *futex = (int *) sem;
++  int val;
++
++  if (*futex > 0)
++    {
++      val = atomic_decrement_if_positive (futex);
++      if (val > 0)
++	return 0;
++    }
++
++  __set_errno (EAGAIN);
++  return -1;
++}
++compat_symbol (libpthread, __old_sem_trywait, sem_trywait, GLIBC_2_0);
++#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_waitcommon.c
+===================================================================
+--- /dev/null
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sem_waitcommon.c
+@@ -0,0 +1,467 @@
++/* sem_waitcommon -- wait on a semaphore, shared code.
++   Copyright (C) 2003-2015 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
++   Lesser General Public License for more details.
++
++   You should have 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 <sysdep.h>
++#include <lowlevellock.h>
++#include <internaltypes.h>
++#include <semaphore.h>
++#include <sys/time.h>
++
++#include <pthreadP.h>
++#include <shlib-compat.h>
++#include <atomic.h>
++
++/* Wrapper for lll_futex_wait with absolute timeout and error checking.
++   TODO Remove when cleaning up the futex API throughout glibc.  */
++static __always_inline int
++futex_abstimed_wait (unsigned int* futex, unsigned int expected,
++		     const struct timespec* abstime, int private, bool cancel)
++{
++  int err, oldtype;
++  if (abstime == NULL)
++    {
++      if (cancel)
++	oldtype = __pthread_enable_asynccancel ();
++      err = lll_futex_wait (futex, expected, private);
++      if (cancel)
++	__pthread_disable_asynccancel (oldtype);
++    }
++  else
++    {
++      struct timeval tv;
++      struct timespec rt;
++      int sec, nsec;
++
++      /* Get the current time.  */
++      __gettimeofday (&tv, NULL);
++
++      /* Compute relative timeout.  */
++      sec = abstime->tv_sec - tv.tv_sec;
++      nsec = abstime->tv_nsec - tv.tv_usec * 1000;
++      if (nsec < 0)
++        {
++          nsec += 1000000000;
++          --sec;
++        }
++
++      /* Already timed out?  */
++      if (sec < 0)
++        return ETIMEDOUT;
++
++      /* Do wait.  */
++      rt.tv_sec = sec;
++      rt.tv_nsec = nsec;
++      if (cancel)
++	oldtype = __pthread_enable_asynccancel ();
++      err = lll_futex_timed_wait (futex, expected, &rt, private);
++      if (cancel)
++	__pthread_disable_asynccancel (oldtype);
++    }
++  switch (err)
++    {
++    case 0:
++    case -EAGAIN:
++    case -EINTR:
++    case -ETIMEDOUT:
++      return -err;
++
++    case -EFAULT: /* Must have been caused by a glibc or application bug.  */
++    case -EINVAL: /* Either due to wrong alignment or due to the timeout not
++		     being normalized.  Must have been caused by a glibc or
++		     application bug.  */
++    case -ENOSYS: /* Must have been caused by a glibc bug.  */
++    /* No other errors are documented at this time.  */
++    default:
++      abort ();
++    }
++}
++
++/* Wrapper for lll_futex_wake, with error checking.
++   TODO Remove when cleaning up the futex API throughout glibc.  */
++static __always_inline void
++futex_wake (unsigned int* futex, int processes_to_wake, int private)
++{
++  int res = lll_futex_wake (futex, processes_to_wake, private);
++  /* No error.  Ignore the number of woken processes.  */
++  if (res >= 0)
++    return;
++  switch (res)
++    {
++    case -EFAULT: /* Could have happened due to memory reuse.  */
++    case -EINVAL: /* Could be either due to incorrect alignment (a bug in
++		     glibc or in the application) or due to memory being
++		     reused for a PI futex.  We cannot distinguish between the
++		     two causes, and one of them is correct use, so we do not
++		     act in this case.  */
++      return;
++    case -ENOSYS: /* Must have been caused by a glibc bug.  */
++    /* No other errors are documented at this time.  */
++    default:
++      abort ();
++    }
++}
++
++
++/* The semaphore provides two main operations: sem_post adds a token to the
++   semaphore; sem_wait grabs a token from the semaphore, potentially waiting
++   until there is a token available.  A sem_wait needs to synchronize with
++   the sem_post that provided the token, so that whatever lead to the sem_post
++   happens before the code after sem_wait.
++
++   Conceptually, available tokens can simply be counted; let's call that the
++   value of the semaphore.  However, we also want to know whether there might
++   be a sem_wait that is blocked on the value because it was zero (using a
++   futex with the value being the futex variable); if there is no blocked
++   sem_wait, sem_post does not need to execute a futex_wake call.  Therefore,
++   we also need to count the number of potentially blocked sem_wait calls
++   (which we call nwaiters).
++
++   What makes this tricky is that POSIX requires that a semaphore can be
++   destroyed as soon as the last remaining sem_wait has returned, and no
++   other sem_wait or sem_post calls are executing concurrently.  However, the
++   sem_post call whose token was consumed by the last sem_wait is considered
++   to have finished once it provided the token to the sem_wait.
++   Thus, sem_post must not access the semaphore struct anymore after it has
++   made a token available; IOW, it needs to be able to atomically provide
++   a token and check whether any blocked sem_wait calls might exist.
++
++   This is straightforward to do if the architecture provides 64b atomics
++   because we can just put both the value and nwaiters into one variable that
++   we access atomically: This is the data field, the value is in the
++   least-significant 32 bits, and nwaiters in the other bits.  When sem_post
++   makes a value available, it can atomically check nwaiters.
++
++   If we have only 32b atomics available, we cannot put both nwaiters and
++   value into one 32b value because then we might have too few bits for both
++   of those counters.  Therefore, we need to use two distinct fields.
++
++   To allow sem_post to atomically make a token available and check for
++   blocked sem_wait calls, we use one bit in value to indicate whether
++   nwaiters is nonzero.  That allows sem_post to use basically the same
++   algorithm as with 64b atomics, but requires sem_wait to update the bit; it
++   can't do this atomically with another access to nwaiters, but it can compute
++   a conservative value for the bit because it's benign if the bit is set
++   even if nwaiters is zero (all we get is an unnecessary futex wake call by
++   sem_post).
++   Specifically, sem_wait will unset the bit speculatively if it believes that
++   there is no other concurrently executing sem_wait.  If it misspeculated,
++   it will have to clean up by waking any other sem_wait call (i.e., what
++   sem_post would do otherwise).  This does not conflict with the destruction
++   requirement because the semaphore must not be destructed while any sem_wait
++   is still executing.  */
++
++/* Set this to true if you assume that, in contrast to current Linux futex
++   documentation, lll_futex_wake can return -EINTR only if interrupted by a
++   signal, not spuriously due to some other reason.
++   TODO Discuss EINTR conditions with the Linux kernel community.  For
++   now, we set this to true to not change behavior of semaphores compared
++   to previous glibc builds.  */
++static const int sem_assume_only_signals_cause_futex_EINTR = 1;
++
++#if !__HAVE_64B_ATOMICS
++static void
++__sem_wait_32_finish (struct new_sem *sem);
++#endif
++
++static void
++__sem_wait_cleanup (void *arg)
++{
++  struct new_sem *sem = (struct new_sem *) arg;
++
++#if __HAVE_64B_ATOMICS
++  /* Stop being registered as a waiter.  See below for MO.  */
++  atomic_fetch_add_relaxed (&sem->data, -(1UL << SEM_NWAITERS_SHIFT));
++#else
++  __sem_wait_32_finish (sem);
++#endif
++}
++
++/* Wait until at least one token is available, possibly with a timeout.
++   This is in a separate function in order to make sure gcc
++   puts the call site into an exception region, and thus the
++   cleanups get properly run.  TODO still necessary?  Other futex_wait
++   users don't seem to need it.  */
++static int
++__attribute__ ((noinline))
++do_futex_wait (struct new_sem *sem, const struct timespec *abstime)
++{
++  int err;
++
++#if __HAVE_64B_ATOMICS
++  err = futex_abstimed_wait ((unsigned int *) &sem->data + SEM_VALUE_OFFSET, 0,
++			     abstime, sem->private, true);
++#else
++  err = futex_abstimed_wait (&sem->value, SEM_NWAITERS_MASK, abstime,
++			     sem->private, true);
++#endif
++
++  return err;
++}
++
++/* Fast path: Try to grab a token without blocking.  */
++static int
++__new_sem_wait_fast (struct new_sem *sem, int definitive_result)
++{
++  /* We need acquire MO if we actually grab a token, so that this
++     synchronizes with all token providers (i.e., the RMW operation we read
++     from or all those before it in modification order; also see sem_post).
++     We do not need to guarantee any ordering if we observed that there is
++     no token (POSIX leaves it unspecified whether functions that fail
++     synchronize memory); thus, relaxed MO is sufficient for the initial load
++     and the failure path of the CAS.  If the weak CAS fails and we need a
++     definitive result, retry.  */
++#if __HAVE_64B_ATOMICS
++  unsigned long d = atomic_load_relaxed (&sem->data);
++  do
++    {
++      if ((d & SEM_VALUE_MASK) == 0)
++	break;
++      if (atomic_compare_exchange_weak_acquire (&sem->data, &d, d - 1))
++	return 0;
++    }
++  while (definitive_result);
++  return -1;
++#else
++  unsigned int v = atomic_load_relaxed (&sem->value);
++  do
++    {
++      if ((v >> SEM_VALUE_SHIFT) == 0)
++	break;
++      if (atomic_compare_exchange_weak_acquire (&sem->value,
++	  &v, v - (1 << SEM_VALUE_SHIFT)))
++	return 0;
++    }
++  while (definitive_result);
++  return -1;
++#endif
++}
++
++/* Slow path that blocks.  */
++static int
++__attribute__ ((noinline))
++__new_sem_wait_slow (struct new_sem *sem, const struct timespec *abstime)
++{
++  int err = 0;
++
++#if __HAVE_64B_ATOMICS
++  /* Add a waiter.  Relaxed MO is sufficient because we can rely on the
++     ordering provided by the RMW operations we use.  */
++  unsigned long d = atomic_fetch_add_relaxed (&sem->data,
++      1UL << SEM_NWAITERS_SHIFT);
++
++  pthread_cleanup_push (__sem_wait_cleanup, sem);
++
++  /* Wait for a token to be available.  Retry until we can grab one.  */
++  for (;;)
++    {
++      /* If there is no token available, sleep until there is.  */
++      if ((d & SEM_VALUE_MASK) == 0)
++	{
++	  err = do_futex_wait (sem, abstime);
++	  /* A futex return value of 0 or EAGAIN is due to a real or spurious
++	     wake-up, or due to a change in the number of tokens.  We retry in
++	     these cases.
++	     If we timed out, forward this to the caller.
++	     EINTR could be either due to being interrupted by a signal, or
++	     due to a spurious wake-up.  Thus, we cannot distinguish between
++	     both, and are not allowed to return EINTR to the caller but have
++	     to retry; this is because we may not have been interrupted by a
++	     signal.  However, if we assume that only signals cause a futex
++	     return of EINTR, we forward EINTR to the caller.
++
++	     Retrying on EINTR is technically always allowed because to
++	     reliably interrupt sem_wait with a signal, the signal handler
++	     must call sem_post (which is AS-Safe).  In executions where the
++	     signal handler does not do that, the implementation can correctly
++	     claim that sem_wait hadn't actually started to execute yet, and
++	     thus the signal never actually interrupted sem_wait.  We make no
++	     timing guarantees, so the program can never observe that sem_wait
++	     actually did start to execute.  Thus, in a correct program, we
++	     can expect a signal that wanted to interrupt the sem_wait to have
++	     provided a token, and can just try to grab this token if
++	     futex_wait returns EINTR.  */
++	  if (err == ETIMEDOUT ||
++	      (err == EINTR && sem_assume_only_signals_cause_futex_EINTR))
++	    {
++	      __set_errno (err);
++	      err = -1;
++	      /* Stop being registered as a waiter.  */
++	      atomic_fetch_add_relaxed (&sem->data,
++		  -(1UL << SEM_NWAITERS_SHIFT));
++	      break;
++	    }
++	  /* Relaxed MO is sufficient; see below.  */
++	  d = atomic_load_relaxed (&sem->data);
++	}
++      else
++	{
++	  /* Try to grab both a token and stop being a waiter.  We need
++	     acquire MO so this synchronizes with all token providers (i.e.,
++	     the RMW operation we read from or all those before it in
++	     modification order; also see sem_post).  On the failure path,
++	     relaxed MO is sufficient because we only eventually need the
++	     up-to-date value; the futex_wait or the CAS perform the real
++	     work.  */
++	  if (atomic_compare_exchange_weak_acquire (&sem->data,
++	      &d, d - 1 - (1UL << SEM_NWAITERS_SHIFT)))
++	    {
++	      err = 0;
++	      break;
++	    }
++	}
++    }
++
++  pthread_cleanup_pop (0);
++#else
++  /* The main difference to the 64b-atomics implementation is that we need to
++     access value and nwaiters in separate steps, and that the nwaiters bit
++     in the value can temporarily not be set even if nwaiters is nonzero.
++     We work around incorrectly unsetting the nwaiters bit by letting sem_wait
++     set the bit again and waking the number of waiters that could grab a
++     token.  There are two additional properties we need to ensure:
++     (1) We make sure that whenever unsetting the bit, we see the increment of
++     nwaiters by the other thread that set the bit.  IOW, we will notice if
++     we make a mistake.
++     (2) When setting the nwaiters bit, we make sure that we see the unsetting
++     of the bit by another waiter that happened before us.  This avoids having
++     to blindly set the bit whenever we need to block on it.  We set/unset
++     the bit while having incremented nwaiters (i.e., are a registered
++     waiter), and the problematic case only happens when one waiter indeed
++     followed another (i.e., nwaiters was never larger than 1); thus, this
++     works similarly as with a critical section using nwaiters (see the MOs
++     and related comments below).
++
++     An alternative approach would be to unset the bit after decrementing
++     nwaiters; however, that would result in needing Dekker-like
++     synchronization and thus full memory barriers.  We also would not be able
++     to prevent misspeculation, so this alternative scheme does not seem
++     beneficial.  */
++  unsigned int v;
++
++  /* Add a waiter.  We need acquire MO so this synchronizes with the release
++     MO we use when decrementing nwaiters below; it ensures that if another
++     waiter unset the bit before us, we see that and set it again.  Also see
++     property (2) above.  */
++  atomic_fetch_add_acquire (&sem->nwaiters, 1);
++
++  pthread_cleanup_push (__sem_wait_cleanup, sem);
++
++  /* Wait for a token to be available.  Retry until we can grab one.  */
++  /* We do not need any ordering wrt. to this load's reads-from, so relaxed
++     MO is sufficient.  The acquire MO above ensures that in the problematic
++     case, we do see the unsetting of the bit by another waiter.  */
++  v = atomic_load_relaxed (&sem->value);
++  do
++    {
++      do
++	{
++	  /* We are about to block, so make sure that the nwaiters bit is
++	     set.  We need release MO on the CAS to ensure that when another
++	     waiter unsets the nwaiters bit, it will also observe that we
++	     incremented nwaiters in the meantime (also see the unsetting of
++	     the bit below).  Relaxed MO on CAS failure is sufficient (see
++	     above).  */
++	  do
++	    {
++	      if ((v & SEM_NWAITERS_MASK) != 0)
++		break;
++	    }
++	  while (!atomic_compare_exchange_weak_release (&sem->value,
++	      &v, v | SEM_NWAITERS_MASK));
++	  /* If there is no token, wait.  */
++	  if ((v >> SEM_VALUE_SHIFT) == 0)
++	    {
++	      /* See __HAVE_64B_ATOMICS variant.  */
++	      err = do_futex_wait(sem, abstime);
++	      if (err == ETIMEDOUT ||
++		  (err == EINTR && sem_assume_only_signals_cause_futex_EINTR))
++		{
++		  __set_errno (err);
++		  err = -1;
++		  goto error;
++		}
++	      err = 0;
++	      /* We blocked, so there might be a token now.  Relaxed MO is
++		 sufficient (see above).  */
++	      v = atomic_load_relaxed (&sem->value);
++	    }
++	}
++      /* If there is no token, we must not try to grab one.  */
++      while ((v >> SEM_VALUE_SHIFT) == 0);
++    }
++  /* Try to grab a token.  We need acquire MO so this synchronizes with
++     all token providers (i.e., the RMW operation we read from or all those
++     before it in modification order; also see sem_post).  */
++  while (!atomic_compare_exchange_weak_acquire (&sem->value,
++      &v, v - (1 << SEM_VALUE_SHIFT)));
++
++error:
++  pthread_cleanup_pop (0);
++
++  __sem_wait_32_finish (sem);
++#endif
++
++  return err;
++}
++
++/* Stop being a registered waiter (non-64b-atomics code only).  */
++#if !__HAVE_64B_ATOMICS
++static void
++__sem_wait_32_finish (struct new_sem *sem)
++{
++  /* The nwaiters bit is still set, try to unset it now if this seems
++     necessary.  We do this before decrementing nwaiters so that the unsetting
++     is visible to other waiters entering after us.  Relaxed MO is sufficient
++     because we are just speculating here; a stronger MO would not prevent
++     misspeculation.  */
++  unsigned int wguess = atomic_load_relaxed (&sem->nwaiters);
++  if (wguess == 1)
++    /* We might be the last waiter, so unset.  This needs acquire MO so that
++       it syncronizes with the release MO when setting the bit above; if we
++       overwrite someone else that set the bit, we'll read in the following
++       decrement of nwaiters at least from that release sequence, so we'll
++       see if the other waiter is still active or if another writer entered
++       in the meantime (i.e., using the check below).  */
++    atomic_fetch_and_acquire (&sem->value, ~SEM_NWAITERS_MASK);
++
++  /* Now stop being a waiter, and see whether our guess was correct.
++     This needs release MO so that it synchronizes with the acquire MO when
++     a waiter increments nwaiters; this makes sure that newer writers see that
++     we reset the waiters_present bit.  */
++  unsigned int wfinal = atomic_fetch_add_release (&sem->nwaiters, -1);
++  if (wfinal > 1 && wguess == 1)
++    {
++      /* We guessed wrong, and so need to clean up after the mistake and
++         unblock any waiters that could have not been woken.  There is no
++         additional ordering that we need to set up, so relaxed MO is
++         sufficient.  */
++      unsigned int v = atomic_fetch_or_relaxed (&sem->value,
++						SEM_NWAITERS_MASK);
++      /* If there are available tokens, then wake as many waiters.  If there
++         aren't any, then there is no need to wake anyone because there is
++         none to grab for another waiter.  If tokens become available
++         subsequently, then the respective sem_post calls will do the wake-up
++         due to us having set the nwaiters bit again.  */
++      v >>= SEM_VALUE_SHIFT;
++      if (v > 0)
++	futex_wake (&sem->value, v, sem->private);
++    }
++}
++#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/structsem.sym
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/structsem.sym
++++ /dev/null
+@@ -1,12 +0,0 @@
+-#include <limits.h>
+-#include <stddef.h>
+-#include <sched.h>
+-#include <bits/pthreadtypes.h>
+-#include "internaltypes.h"
+-
+---
+-
+-VALUE		offsetof (struct new_sem, value)
+-PRIVATE		offsetof (struct new_sem, private)
+-NWAITERS	offsetof (struct new_sem, nwaiters)
+-SEM_VALUE_MAX	SEM_VALUE_MAX
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/x86_64/sem_post.S
++++ /dev/null
+@@ -1,75 +0,0 @@
+-/* Copyright (C) 2002,2003,2005,2007,2008,2011 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 <sysdep.h>
+-#include <lowlevellock.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-
+-
+-	.text
+-
+-	.globl	sem_post
+-	.type	sem_post,@function
+-	.align	16
+-sem_post:
+-#if VALUE == 0
+-	movl	(%rdi), %eax
+-#else
+-	movl	VALUE(%rdi), %eax
+-#endif
+-0:	cmpl	$SEM_VALUE_MAX, %eax
+-	je	3f
+-	leal	1(%rax), %esi
+-	LOCK
+-#if VALUE == 0
+-	cmpxchgl %esi, (%rdi)
+-#else
+-	cmpxchgl %esi, VALUE(%rdi)
+-#endif
+-	jnz	0b
+-
+-	LP_OP(cmp) $0, NWAITERS(%rdi)
+-	je	2f
+-
+-	movl	$SYS_futex, %eax
+-	movl	$FUTEX_WAKE, %esi
+-	orl	PRIVATE(%rdi), %esi
+-	movl	$1, %edx
+-	syscall
+-
+-	testq	%rax, %rax
+-	js	1f
+-
+-2:	xorl	%eax, %eax
+-	retq
+-
+-1:
+-	movl	$EINVAL, %eax
+-	jmp	4f
+-
+-3:
+-	movl	$EOVERFLOW, %eax
+-
+-4:
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	%eax, %fs:(%rdx)
+-	orl	$-1, %eax
+-	retq
+-	.size	sem_post,.-sem_post
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/x86_64/sem_timedwait.S
++++ /dev/null
+@@ -1,380 +0,0 @@
+-/* Copyright (C) 2002,2003,2005,2007,2009,2010,2011 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 <sysdep.h>
+-#include <kernel-features.h>
+-#include <lowlevellock.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-
+-	.text
+-
+-	.globl	sem_timedwait
+-	.type	sem_timedwait,@function
+-	.align	16
+-sem_timedwait:
+-.LSTARTCODE:
+-	cfi_startproc
+-#ifdef SHARED
+-	cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
+-			DW.ref.__gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
+-#else
+-	cfi_personality(DW_EH_PE_udata4, __gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
+-#endif
+-#if VALUE == 0
+-	movl	(%rdi), %eax
+-#else
+-	movl	VALUE(%rdi), %eax
+-#endif
+-2:	testl	%eax, %eax
+-	je	1f
+-
+-	leaq	-1(%rax), %rdx
+-	LOCK
+-#if VALUE == 0
+-	cmpxchgl %edx, (%rdi)
+-#else
+-	cmpxchgl %edx, VALUE(%rdi)
+-#endif
+-	jne	2b
+-
+-	xorl	%eax, %eax
+-	retq
+-
+-	/* Check whether the timeout value is valid.  */
+-1:	cmpq	$1000000000, 8(%rsi)
+-	jae	6f
+-
+-#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+-#  ifdef PIC
+-	cmpl	$0, __have_futex_clock_realtime(%rip)
+-#  else
+-	cmpl	$0, __have_futex_clock_realtime
+-#  endif
+-	je	.Lreltmo
+-#endif
+-
+-	cmpq	$0, (%rsi)
+-	js	16f
+-
+-	/* This push is only needed to store the sem_t pointer for the
+-	   exception handler.  */
+-	pushq	%rdi
+-	cfi_adjust_cfa_offset(8)
+-
+-	movq	%rsi, %r10
+-
+-	LOCK
+-	LP_OP(add) $1, NWAITERS(%rdi)
+-
+-.LcleanupSTART:
+-13:	call	__pthread_enable_asynccancel
+-	movl	%eax, %r8d
+-
+-#if VALUE != 0
+-	leaq	VALUE(%rdi), %rdi
+-#endif
+-	movl	$0xffffffff, %r9d
+-	movl	$FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi
+-	orl	PRIVATE(%rdi), %esi
+-	movl	$SYS_futex, %eax
+-	xorl	%edx, %edx
+-	syscall
+-	movq	%rax, %r9
+-#if VALUE != 0
+-	leaq	-VALUE(%rdi), %rdi
+-#endif
+-
+-	xchgq	%r8, %rdi
+-	call	__pthread_disable_asynccancel
+-.LcleanupEND:
+-	movq	%r8, %rdi
+-
+-	testq	%r9, %r9
+-	je	11f
+-	cmpq	$-EWOULDBLOCK, %r9
+-	jne	3f
+-
+-11:
+-#if VALUE == 0
+-	movl	(%rdi), %eax
+-#else
+-	movl	VALUE(%rdi), %eax
+-#endif
+-14:	testl	%eax, %eax
+-	je	13b
+-
+-	leaq	-1(%rax), %rcx
+-	LOCK
+-#if VALUE == 0
+-	cmpxchgl %ecx, (%rdi)
+-#else
+-	cmpxchgl %ecx, VALUE(%rdi)
+-#endif
+-	jne	14b
+-
+-	xorl	%eax, %eax
+-
+-15:	LOCK
+-	LP_OP(sub) $1, NWAITERS(%rdi)
+-
+-	leaq	8(%rsp), %rsp
+-	cfi_adjust_cfa_offset(-8)
+-	retq
+-
+-	cfi_adjust_cfa_offset(8)
+-3:	negq	%r9
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	%r9d, %fs:(%rdx)
+-
+-	orl	$-1, %eax
+-	jmp	15b
+-
+-	cfi_adjust_cfa_offset(-8)
+-6:
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	$EINVAL, %fs:(%rdx)
+-
+-	orl	$-1, %eax
+-
+-	retq
+-
+-16:
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	$ETIMEDOUT, %fs:(%rdx)
+-
+-	orl	$-1, %eax
+-
+-	retq
+-
+-#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+-.Lreltmo:
+-	pushq	%r12
+-	cfi_adjust_cfa_offset(8)
+-	cfi_rel_offset(%r12, 0)
+-	pushq	%r13
+-	cfi_adjust_cfa_offset(8)
+-	cfi_rel_offset(%r13, 0)
+-	pushq	%r14
+-	cfi_adjust_cfa_offset(8)
+-	cfi_rel_offset(%r14, 0)
+-
+-#ifdef __ASSUME_FUTEX_CLOCK_REALTIME
+-# define STACKFRAME 8
+-#else
+-# define STACKFRAME 24
+-#endif
+-	subq	$STACKFRAME, %rsp
+-	cfi_adjust_cfa_offset(STACKFRAME)
+-
+-	movq	%rdi, %r12
+-	movq	%rsi, %r13
+-
+-	LOCK
+-	LP_OP(add) $1, NWAITERS(%r12)
+-
+-7:	xorl	%esi, %esi
+-	movq	%rsp,%rdi
+-	/* This call works because we directly jump to a system call entry
+-	   which preserves all the registers.  */
+-	call	JUMPTARGET(__gettimeofday)
+-
+-	/* Compute relative timeout.  */
+-	movq	8(%rsp), %rax
+-	movl	$1000, %edi
+-	mul	%rdi		/* Milli seconds to nano seconds.  */
+-	movq	(%r13), %rdi
+-	movq	8(%r13), %rsi
+-	subq	(%rsp), %rdi
+-	subq	%rax, %rsi
+-	jns	5f
+-	addq	$1000000000, %rsi
+-	decq	%rdi
+-5:	testq	%rdi, %rdi
+-	movl	$ETIMEDOUT, %r14d
+-	js	36f		/* Time is already up.  */
+-
+-	movq	%rdi, (%rsp)	/* Store relative timeout.  */
+-	movq	%rsi, 8(%rsp)
+-
+-.LcleanupSTART2:
+-	call	__pthread_enable_asynccancel
+-	movl	%eax, 16(%rsp)
+-
+-	movq	%rsp, %r10
+-# if VALUE == 0
+-	movq	%r12, %rdi
+-# else
+-	leaq	VALUE(%r12), %rdi
+-# endif
+-# if FUTEX_WAIT == 0
+-	movl	PRIVATE(%rdi), %esi
+-# else
+-	movl	$FUTEX_WAIT, %esi
+-	orl	PRIVATE(%rdi), %esi
+-# endif
+-	movl	$SYS_futex, %eax
+-	xorl	%edx, %edx
+-	syscall
+-	movq	%rax, %r14
+-
+-	movl	16(%rsp), %edi
+-	call	__pthread_disable_asynccancel
+-.LcleanupEND2:
+-
+-	testq	%r14, %r14
+-	je	9f
+-	cmpq	$-EWOULDBLOCK, %r14
+-	jne	33f
+-
+-9:
+-# if VALUE == 0
+-	movl	(%r12), %eax
+-# else
+-	movl	VALUE(%r12), %eax
+-# endif
+-8:	testl	%eax, %eax
+-	je	7b
+-
+-	leaq	-1(%rax), %rcx
+-	LOCK
+-# if VALUE == 0
+-	cmpxchgl %ecx, (%r12)
+-# else
+-	cmpxchgl %ecx, VALUE(%r12)
+-# endif
+-	jne	8b
+-
+-	xorl	%eax, %eax
+-
+-45:	LOCK
+-	LP_OP(sub) $1, NWAITERS(%r12)
+-
+-	addq	$STACKFRAME, %rsp
+-	cfi_adjust_cfa_offset(-STACKFRAME)
+-	popq	%r14
+-	cfi_adjust_cfa_offset(-8)
+-	cfi_restore(%r14)
+-	popq	%r13
+-	cfi_adjust_cfa_offset(-8)
+-	cfi_restore(%r13)
+-	popq	%r12
+-	cfi_adjust_cfa_offset(-8)
+-	cfi_restore(%r12)
+-	retq
+-
+-	cfi_adjust_cfa_offset(STACKFRAME + 3 * 8)
+-	cfi_rel_offset(%r12, STACKFRAME + 2 * 8)
+-	cfi_rel_offset(%r13, STACKFRAME + 1 * 8)
+-	cfi_rel_offset(%r14, STACKFRAME)
+-33:	negq	%r14
+-36:
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	%r14d, %fs:(%rdx)
+-
+-	orl	$-1, %eax
+-	jmp	45b
+-#endif
+-	cfi_endproc
+-	.size	sem_timedwait,.-sem_timedwait
+-
+-
+-	.type	sem_timedwait_cleanup,@function
+-sem_timedwait_cleanup:
+-	cfi_startproc
+-	cfi_adjust_cfa_offset(8)
+-
+-	movq	(%rsp), %rdi
+-	LOCK
+-	LP_OP(sub) $1, NWAITERS(%rdi)
+-	movq	%rax, %rdi
+-.LcallUR:
+-	call	_Unwind_Resume@PLT
+-	hlt
+-.LENDCODE:
+-	cfi_endproc
+-	.size	sem_timedwait_cleanup,.-sem_timedwait_cleanup
+-
+-
+-#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+-	.type	sem_timedwait_cleanup2,@function
+-sem_timedwait_cleanup2:
+-	cfi_startproc
+-	cfi_adjust_cfa_offset(STACKFRAME + 3 * 8)
+-	cfi_rel_offset(%r12, STACKFRAME + 2 * 8)
+-	cfi_rel_offset(%r13, STACKFRAME + 1 * 8)
+-	cfi_rel_offset(%r14, STACKFRAME)
+-
+-	LOCK
+-	LP_OP(sub) $1, NWAITERS(%r12)
+-	movq	%rax, %rdi
+-	movq	STACKFRAME(%rsp), %r14
+-	movq	STACKFRAME+8(%rsp), %r13
+-	movq	STACKFRAME+16(%rsp), %r12
+-.LcallUR2:
+-	call	_Unwind_Resume@PLT
+-	hlt
+-.LENDCODE2:
+-	cfi_endproc
+-	.size	sem_timedwait_cleanup2,.-sem_timedwait_cleanup2
+-#endif
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	DW_EH_PE_omit			# @LPStart format
+-	.byte	DW_EH_PE_omit			# @TType format
+-	.byte	DW_EH_PE_uleb128		# call-site format
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 sem_timedwait_cleanup-.LSTARTCODE
+-	.uleb128  0
+-#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+-	.uleb128 .LcleanupSTART2-.LSTARTCODE
+-	.uleb128 .LcleanupEND2-.LcleanupSTART2
+-	.uleb128 sem_timedwait_cleanup2-.LSTARTCODE
+-	.uleb128  0
+-#endif
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
+-	.uleb128 .LcallUR2-.LSTARTCODE
+-	.uleb128 .LENDCODE2-.LcallUR2
+-	.uleb128 0
+-	.uleb128  0
+-#endif
+-.Lcstend:
+-
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	LP_SIZE
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, LP_SIZE
+-DW.ref.__gcc_personality_v0:
+-	ASM_ADDR __gcc_personality_v0
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/x86_64/sem_trywait.S
++++ /dev/null
+@@ -1,47 +0,0 @@
+-/* Copyright (C) 2002, 2003, 2005, 2007, 2011 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 <sysdep.h>
+-#include <lowlevellock.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-
+-	.text
+-
+-	.globl	sem_trywait
+-	.type	sem_trywait,@function
+-	.align	16
+-sem_trywait:
+-	movl	(%rdi), %eax
+-2:	testl	%eax, %eax
+-	jz	1f
+-
+-	leal	-1(%rax), %edx
+-	LOCK
+-	cmpxchgl %edx, (%rdi)
+-	jne	2b
+-
+-	xorl	%eax, %eax
+-	retq
+-
+-1:
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	$EAGAIN, %fs:(%rdx)
+-	orl	$-1, %eax
+-	retq
+-	.size	sem_trywait,.-sem_trywait
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S
++++ /dev/null
+@@ -1,176 +0,0 @@
+-/* Copyright (C) 2002, 2003, 2005, 2007, 2009, 2011 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 <sysdep.h>
+-#include <lowlevellock.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-
+-
+-	.text
+-
+-	.globl	sem_wait
+-	.type	sem_wait,@function
+-	.align	16
+-sem_wait:
+-.LSTARTCODE:
+-	cfi_startproc
+-#ifdef SHARED
+-	cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
+-			DW.ref.__gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
+-#else
+-	cfi_personality(DW_EH_PE_udata4, __gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
+-#endif
+-
+-#if VALUE == 0
+-	movl	(%rdi), %eax
+-#else
+-	movl	VALUE(%rdi), %eax
+-#endif
+-2:	testl	%eax, %eax
+-	je	1f
+-
+-	leal	-1(%rax), %edx
+-	LOCK
+-#if VALUE == 0
+-	cmpxchgl %edx, (%rdi)
+-#else
+-	cmpxchgl %edx, VALUE(%rdi)
+-#endif
+-	jne	2b
+-
+-	xorl	%eax, %eax
+-	retq
+-
+-	/* This push is only needed to store the sem_t pointer for the
+-	   exception handler.  */
+-1:	pushq	%rdi
+-	cfi_adjust_cfa_offset(8)
+-
+-	LOCK
+-	LP_OP(add) $1, NWAITERS(%rdi)
+-
+-.LcleanupSTART:
+-6:	call	__pthread_enable_asynccancel
+-	movl	%eax, %r8d
+-
+-	xorq	%r10, %r10
+-	movl	$SYS_futex, %eax
+-#if FUTEX_WAIT == 0
+-	movl	PRIVATE(%rdi), %esi
+-#else
+-	movl	$FUTEX_WAIT, %esi
+-	orl	PRIVATE(%rdi), %esi
+-#endif
+-	xorl	%edx, %edx
+-	syscall
+-	movq	%rax, %rcx
+-
+-	xchgq	%r8, %rdi
+-	call	__pthread_disable_asynccancel
+-.LcleanupEND:
+-	movq	%r8, %rdi
+-
+-	testq	%rcx, %rcx
+-	je	3f
+-	cmpq	$-EWOULDBLOCK, %rcx
+-	jne	4f
+-
+-3:
+-#if VALUE == 0
+-	movl	(%rdi), %eax
+-#else
+-	movl	VALUE(%rdi), %eax
+-#endif
+-5:	testl	%eax, %eax
+-	je	6b
+-
+-	leal	-1(%rax), %edx
+-	LOCK
+-#if VALUE == 0
+-	cmpxchgl %edx, (%rdi)
+-#else
+-	cmpxchgl %edx, VALUE(%rdi)
+-#endif
+-	jne	5b
+-
+-	xorl	%eax, %eax
+-
+-9:	LOCK
+-	LP_OP(sub) $1, NWAITERS(%rdi)
+-
+-	leaq	8(%rsp), %rsp
+-	cfi_adjust_cfa_offset(-8)
+-
+-	retq
+-
+-	cfi_adjust_cfa_offset(8)
+-4:	negq	%rcx
+-	movq	errno@gottpoff(%rip), %rdx
+-	movl	%ecx, %fs:(%rdx)
+-	orl	$-1, %eax
+-
+-	jmp 9b
+-	.size	sem_wait,.-sem_wait
+-
+-
+-	.type	sem_wait_cleanup,@function
+-sem_wait_cleanup:
+-	movq	(%rsp), %rdi
+-	LOCK
+-	LP_OP(sub) $1, NWAITERS(%rdi)
+-	movq	%rax, %rdi
+-.LcallUR:
+-	call	_Unwind_Resume@PLT
+-	hlt
+-.LENDCODE:
+-	cfi_endproc
+-	.size	sem_wait_cleanup,.-sem_wait_cleanup
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	DW_EH_PE_omit			# @LPStart format
+-	.byte	DW_EH_PE_omit			# @TType format
+-	.byte	DW_EH_PE_uleb128		# call-site format
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 sem_wait_cleanup-.LSTARTCODE
+-	.uleb128  0
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-.Lcstend:
+-
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	LP_SIZE
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, LP_SIZE
+-DW.ref.__gcc_personality_v0:
+-	ASM_ADDR __gcc_personality_v0
+-#endif
+Index: glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/alpha/nptl/sem_post.c
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/unix/sysv/linux/alpha/nptl/sem_post.c
++++ /dev/null
+@@ -1,5 +0,0 @@
+-/* ??? This is an ass-backwards way to do this.  We should simply define
+-   the acquire/release semantics of atomic_exchange_and_add.  And even if
+-   we don't do this, we should be using atomic_full_barrier or otherwise.  */
+-#define __lll_rel_instr  "mb"
+-#include <nptl/sysdeps/unix/sysv/linux/sem_post.c>
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S
++++ /dev/null
+@@ -1,111 +0,0 @@
+-/* Copyright (C) 2003-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <structsem.h>
+-#include <lowlevellock.h>
+-#include "lowlevel-atomic.h"
+-
+-
+-	.text
+-
+-	.globl	__new_sem_post
+-	.type	__new_sem_post,@function
+-	.align	5
+-	cfi_startproc
+-__new_sem_post:
+-	mov.l	@(VALUE,r4), r2
+-0:
+-	mov.l	.Lmax, r1
+-	cmp/eq	r1, r2
+-	bt/s	3f
+-	 mov	r2, r3
+-	mov	r3, r5
+-	add	#1, r5
+-	CMPXCHG (r3, @(VALUE,r4), r5, r2)
+-	bf	0b
+-	mov.l	@(NWAITERS,r4), r2
+-	tst	r2, r2
+-	bt	2f
+-	mov	#FUTEX_WAKE, r5
+-	mov.l	@(PRIVATE,r4), r1
+-	or	r1, r5
+-	mov	#1, r6
+-	mov	#0, r7
+-	mov	#SYS_futex, r3
+-	extu.b	r3, r3
+-	trapa	#0x14
+-	SYSCALL_INST_PAD
+-
+-	cmp/pz	r0
+-	bf	1f
+-2:
+-	rts
+-	 mov	#0, r0
+-
+-1:
+-	bra	4f
+-	 mov	#EINVAL, r2
+-
+-3:
+-	mov	#EOVERFLOW, r2
+-4:
+-	mov.l	r12, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r12, 0)
+-	mov.l	r8, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r8, 0)
+-	sts.l	pr, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (pr, 0)
+-	mova	.Lgot3, r0
+-	mov.l	.Lgot3, r12
+-	add	r0, r12
+-
+-	mov.l	.Lerrno3, r0
+-	stc	gbr, r1
+-	mov.l	@(r0, r12), r0
+-	bra	.Lexit
+-	 add	r1, r0
+-	.align	2
+-.Lerrno3:
+-	.long	errno@GOTTPOFF
+-.Lexit:
+-	mov.l	r2, @r0
+-	lds.l	@r15+, pr
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (pr)
+-	mov.l	@r15+, r8
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r8)
+-	mov.l	@r15+, r12
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r12)
+-	rts
+-	 mov	#-1, r0
+-	cfi_endproc
+-
+-	.align	2
+-.Lmax:
+-	.long	SEM_VALUE_MAX
+-.Lgot3:
+-	.long	_GLOBAL_OFFSET_TABLE_
+-	.size	__new_sem_post,.-__new_sem_post
+-	versioned_symbol(libpthread, __new_sem_post, sem_post, GLIBC_2_1)
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sh/sem_timedwait.S
++++ /dev/null
+@@ -1,281 +0,0 @@
+-/* Copyright (C) 2003-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <tcb-offsets.h>
+-#include <structsem.h>
+-#include <lowlevellock.h>
+-#include "lowlevel-atomic.h"
+-
+-
+-#if VALUE != 0
+-# error "code needs to be rewritten for VALUE != 0"
+-#endif
+-
+-	.text
+-
+-	.globl	sem_timedwait
+-	.type	sem_timedwait,@function
+-	.align	5
+-	cfi_startproc
+-sem_timedwait:
+-.LSTARTCODE:
+-#ifdef SHARED
+-	cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
+-			DW.ref.__gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
+-#else
+-	cfi_personality(DW_EH_PE_absptr, __gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_absptr, .LexceptSTART)
+-#endif
+-	mov.l	@r4, r0
+-2:
+-	tst	r0, r0
+-	bt	1f
+-	mov	r0, r3
+-	mov	r0, r6
+-	add	#-1, r3
+-	CMPXCHG (r6, @r4, r3, r2)
+-	bf/s	2b
+-	 mov	r2, r0
+-	rts
+-	 mov	#0, r0
+-
+-1:
+-	/* Check whether the timeout value is valid.  */
+-	mov.l	r8, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r8, 0)
+-	mov.l	r9, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r9, 0)
+-	mov.l	r10, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r10, 0)
+-	mov.l	r12, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r12, 0)
+-	sts.l	pr, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (pr, 0)
+-	add	#-8, r15
+-	cfi_adjust_cfa_offset (8)
+-
+-	mov	r4, r8
+-	mov	r5, r9
+-
+-	/* Check for invalid nanosecond field.  */
+-	mov.l	@(4,r9), r0
+-	mov.l	.L1g, r1
+-	cmp/hs	r1, r0
+-	bt/s	.Lerrno_exit
+-	 mov	#EINVAL, r10
+-	INC (@(NWAITERS,r8),r2)
+-
+-7:
+-	/* Compute relative timeout.  */
+-	mov	r15, r4
+-	mov	#0, r5
+-	mov	#__NR_gettimeofday, r3
+-	trapa	#0x12
+-	SYSCALL_INST_PAD
+-
+-	mov.l	@(4,r15), r0
+-	mov.w	.L1k, r1
+-	dmulu.l	r0, r1		/* Milli seconds to nano seconds.  */
+-	mov.l	@r9, r2
+-	mov.l	@(4,r9), r3
+-	mov.l	@r15, r0
+-	sts	macl, r1
+-	sub	r0, r2
+-	clrt
+-	subc	r1, r3
+-	bf	5f
+-	mov.l	.L1g, r1
+-	add	r1, r3
+-	add	#-1, r2
+-5:
+-	cmp/pz	r2
+-	bf/s	6f		/* Time is already up.  */
+-	 mov	#ETIMEDOUT, r0
+-
+-	/* Store relative timeout.  */
+-	mov.l	r2, @r15
+-	mov.l	r3, @(4,r15)
+-
+-.LcleanupSTART:
+-	mov.l	.Lenable0, r1
+-	bsrf	r1
+-	 nop
+-.Lenable0b:
+-	mov	r0, r10
+-
+-	mov	r8, r4
+-#if FUTEX_WAIT == 0
+-	mov.l	@(PRIVATE,r8), r5
+-#else
+-	mov.l	@(PRIVATE,r8), r5
+-	mov	#FUTEX_WAIT, r0
+-	or	r0, r5
+-#endif
+-	mov	#0, r6
+-	mov	r15, r7
+-	mov	#SYS_futex, r3
+-	extu.b	r3, r3
+-	trapa	#0x14
+-	SYSCALL_INST_PAD
+-
+-	mov.l	.Ldisable0, r1
+-	mov	r10, r4
+-	bsrf	r1
+-	 mov	r0, r10
+-.Ldisable0b:
+-	mov	r10, r0
+-.LcleanupEND:
+-
+-	tst	r0, r0
+-	bt	9f
+-	cmp/eq	#-EWOULDBLOCK, r0
+-	bf	3f
+-9:
+-	mov.l	@r8, r0
+-8:
+-	tst	r0, r0
+-	bt	7b
+-
+-	mov	r0, r3
+-	mov	r0, r4
+-	add	#-1, r3
+-	CMPXCHG (r4, @r8, r3, r2)
+-	bf/s	8b
+-	 mov	r2, r0
+-
+-	DEC (@(NWAITERS,r8), r2)
+-	mov	#0, r0
+-
+-10:
+-	cfi_remember_state
+-	add	#8, r15
+-	cfi_adjust_cfa_offset (-8)
+-	lds.l	@r15+, pr
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (pr)
+-	mov.l	@r15+, r12
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r12)
+-	mov.l	@r15+, r10
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r10)
+-	mov.l	@r15+, r9
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r9)
+-	mov.l	@r15+, r8
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r8)
+-	rts
+-	 nop
+-	cfi_restore_state
+-
+-3:
+-	neg	r0, r0
+-6:
+-	mov	r0, r10
+-	DEC (@(NWAITERS,r8), r2)
+-.Lerrno_exit:
+-	mova	.Lgot2, r0
+-	mov.l	.Lgot2, r12
+-	add	r0, r12
+-
+-	mov.l	.Lerrno2, r0
+-	stc	gbr, r1
+-	mov.l	@(r0, r12), r0
+-	bra	.Lexit
+-	 add	r1, r0
+-	.align	2
+-.Lerrno2:
+-	.long	errno@GOTTPOFF
+-.Lexit:
+-	mov.l	r10, @r0
+-	bra	10b
+-	 mov	#-1, r0
+-
+-.L1k:
+-	.word	1000
+-	.align	2
+-.L1g:
+-	.long	1000000000
+-.Lgot2:
+-	.long	_GLOBAL_OFFSET_TABLE_
+-.Lenable0:
+-	.long	__pthread_enable_asynccancel-.Lenable0b
+-.Ldisable0:
+-	.long	__pthread_disable_asynccancel-.Ldisable0b
+-	.size	sem_timedwait,.-sem_timedwait
+-
+-	.type	sem_wait_cleanup,@function
+-sem_wait_cleanup:
+-	DEC (@(NWAITERS,r8), r2)
+-.LcallUR:
+-	mov.l	.Lresume, r1
+-#ifdef PIC
+-	add	r12, r1
+-#endif
+-	jsr	@r1
+-	 nop
+-	sleep
+-
+-	.align	2
+-.Lresume:
+-#ifdef PIC
+-	.long	_Unwind_Resume@GOTOFF
+-#else
+-	.long	_Unwind_Resume
+-#endif
+-.LENDCODE:
+-	cfi_endproc
+-	.size	sem_wait_cleanup,.-sem_wait_cleanup
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	DW_EH_PE_omit			! @LPStart format (omit)
+-	.byte	DW_EH_PE_omit			! @TType format (omit)
+-	.byte	DW_EH_PE_uleb128		! call-site format
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 sem_wait_cleanup-.LSTARTCODE
+-	.uleb128  0
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-.Lcstend:
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	4
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, 4
+-DW.ref.__gcc_personality_v0:
+-	.long	__gcc_personality_v0
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sh/sem_trywait.S
++++ /dev/null
+@@ -1,102 +0,0 @@
+-/* Copyright (C) 2003-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <lowlevellock.h>
+-#include "lowlevel-atomic.h"
+-
+-
+-	.text
+-
+-	.globl	__new_sem_trywait
+-	.type	__new_sem_trywait,@function
+-	.align	5
+-	cfi_startproc
+-__new_sem_trywait:
+-	mov.l	r12, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r12, 0)
+-	mov.l	r8, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r8, 0)
+-	sts.l	pr, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (pr, 0)
+-	mov	r4, r8
+-	mov.l	@r8, r0
+-2:
+-	tst	r0, r0
+-	bt	1f
+-
+-	mov	r0, r3
+-	mov	r0, r4
+-	add	#-1, r3
+-	CMPXCHG (r4, @r8, r3, r2)
+-	bf/s	2b
+-	 mov	r2, r0
+-
+-	cfi_remember_state
+-	lds.l	@r15+, pr
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (pr)
+-	mov.l	@r15+, r8
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r8)
+-	mov.l	@r15+, r12
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r12)
+-	rts
+-	 mov	#0, r0
+-	cfi_restore_state
+-
+-1:
+-	mov	#EAGAIN, r8
+-	mova	.Lgot1, r0
+-	mov.l	.Lgot1, r12
+-	add	r0, r12
+-
+-	mov.l	.Lerrno1, r0
+-	stc	gbr, r1
+-	mov.l	@(r0, r12), r0
+-	bra	.Lexit
+-	 add	r1, r0
+-	.align	2
+-.Lerrno1:
+-	.long	errno@GOTTPOFF
+-.Lexit:
+-	mov.l	r8, @r0
+-	lds.l	@r15+, pr
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (pr)
+-	mov.l	@r15+, r8
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r8)
+-	mov.l	@r15+, r12
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r12)
+-	rts
+-	 mov	#-1, r0
+-
+-	cfi_endproc
+-
+-	.align	2
+-.Lgot1:
+-	.long	_GLOBAL_OFFSET_TABLE_
+-	.size	__new_sem_trywait,.-__new_sem_trywait
+-	versioned_symbol(libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1)
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/sh/sem_wait.S
++++ /dev/null
+@@ -1,229 +0,0 @@
+-/* Copyright (C) 2003-2012 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 <sysdep.h>
+-#include <shlib-compat.h>
+-#include <pthread-errnos.h>
+-#include <tcb-offsets.h>
+-#include <structsem.h>
+-#include <lowlevellock.h>
+-#include "lowlevel-atomic.h"
+-
+-
+-#if VALUE != 0
+-# error "code needs to be rewritten for VALUE != 0"
+-#endif
+-
+-	.text
+-
+-	.globl	__new_sem_wait
+-	.type	__new_sem_wait,@function
+-	.align	5
+-	cfi_startproc
+-__new_sem_wait:
+-.LSTARTCODE:
+-#ifdef SHARED
+-	cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
+-			DW.ref.__gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
+-#else
+-	cfi_personality(DW_EH_PE_absptr, __gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_absptr, .LexceptSTART)
+-#endif
+-	mov.l	r8, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r8, 0)
+-	mov.l	r10, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r10, 0)
+-	mov.l	r12, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r12, 0)
+-	sts.l	pr, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (pr, 0)
+-
+-	mov	r4, r8
+-	mov.l	@r8, r0
+-2:
+-	tst	r0, r0
+-	bt	1f
+-	mov	r0, r3
+-	mov	r0, r4
+-	add	#-1, r3
+-	CMPXCHG (r4, @r8, r3, r2)
+-	bf/s	2b
+-	 mov	r2, r0
+-7:
+-	mov	#0, r0
+-9:
+-	cfi_remember_state
+-	lds.l	@r15+, pr
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (pr)
+-	mov.l	@r15+, r12
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r12)
+-	mov.l	@r15+, r10
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r10)
+-	rts
+-	 mov.l	@r15+, r8
+-	/* Omit CFI for restore in delay slot.  */
+-	cfi_restore_state
+-
+-.Lafter_ret:
+-1:
+-	INC (@(NWAITERS,r8),r2)
+-
+-.LcleanupSTART:
+-6:
+-	mov.l	.Lenable0, r1
+-	bsrf	r1
+-	 nop
+-.Lenable0b:
+-	mov	r0, r10
+-
+-	mov	r8, r4
+-#if FUTEX_WAIT == 0
+-	mov.l	@(PRIVATE,r8), r5
+-#else
+-	mov.l	@(PRIVATE,r8), r5
+-	mov	#FUTEX_WAIT, r0
+-	or	r0, r5
+-#endif
+-	mov	#0, r6
+-	mov	#0, r7
+-	mov	#SYS_futex, r3
+-	extu.b	r3, r3
+-	trapa	#0x14
+-	SYSCALL_INST_PAD
+-
+-	mov.l	.Ldisable0, r1
+-	mov	r10, r4
+-	bsrf	r1
+-	 mov	r0, r10
+-.Ldisable0b:
+-	mov	r10, r0
+-.LcleanupEND:
+-
+-	tst	r0, r0
+-	bt	3f
+-	cmp/eq	#-EWOULDBLOCK, r0
+-	bf	4f
+-
+-3:
+-	mov.l	@r8, r0
+-5:
+-	tst	r0, r0
+-	bt	6b
+-
+-	mov	r0, r3
+-	mov	r0, r4
+-	add	#-1, r3
+-	CMPXCHG (r4, @r8, r3, r2)
+-	bf/s	5b
+-	 mov	r2, r0
+-
+-	DEC (@(NWAITERS,r8), r2)
+-	bra	7b
+-	 nop
+-
+-4:
+-	neg	r0, r0
+-	mov	r0, r4
+-	DEC (@(NWAITERS,r8), r2)
+-	mov	r4, r8
+-	mova	.Lgot0, r0
+-	mov.l	.Lgot0, r12
+-	add	r0, r12
+-
+-	mov.l	.Lerrno0, r0
+-	stc	gbr, r1
+-	mov.l	@(r0, r12), r0
+-	bra	.Lexit
+-	 add	r1, r0
+-	.align	2
+-.Lerrno0:
+-	.long	errno@GOTTPOFF
+-.Lexit:
+-	mov.l	r8, @r0
+-	bra	9b
+-	 mov	#-1, r0
+-
+-	.align	2
+-.Lgot0:
+-	.long	_GLOBAL_OFFSET_TABLE_
+-.Lenable0:
+-	.long	__pthread_enable_asynccancel-.Lenable0b
+-.Ldisable0:
+-	.long	__pthread_disable_asynccancel-.Ldisable0b
+-	.size	__new_sem_wait,.-__new_sem_wait
+-	versioned_symbol(libpthread, __new_sem_wait, sem_wait, GLIBC_2_1)
+-
+-
+-	.type	sem_wait_cleanup,@function
+-sem_wait_cleanup:
+-	DEC (@(NWAITERS,r8), r2)
+-.LcallUR:
+-	mov.l	.Lresume, r1
+-#ifdef PIC
+-	add	r12, r1
+-#endif
+-	jsr	@r1
+-	 nop
+-	sleep
+-
+-	.align	2
+-.Lresume:
+-#ifdef PIC
+-	.long	_Unwind_Resume@GOTOFF
+-#else
+-	.long	_Unwind_Resume
+-#endif
+-.LENDCODE:
+-	cfi_endproc
+-	.size	sem_wait_cleanup,.-sem_wait_cleanup
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	DW_EH_PE_omit			! @LPStart format (omit)
+-	.byte	DW_EH_PE_omit			! @TType format (omit)
+-	.byte	DW_EH_PE_uleb128		! call-site format
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 sem_wait_cleanup-.LSTARTCODE
+-	.uleb128  0
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-.Lcstend:
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	4
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, 4
+-DW.ref.__gcc_personality_v0:
+-	.long	__gcc_personality_v0
+-#endif
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/Makefile
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/Makefile
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/Makefile
+@@ -24,8 +24,7 @@ libpthread-sysdep_routines += pt-fork pt
+ 
+ gen-as-const-headers += lowlevelcond.sym lowlevelrwlock.sym \
+ 			lowlevelbarrier.sym unwindbuf.sym \
+-			lowlevelrobustlock.sym pthread-pi-defines.sym \
+-			structsem.sym
++			lowlevelrobustlock.sym pthread-pi-defines.sym
+ endif
+ 
+ ifeq ($(subdir),posix)
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
+@@ -225,17 +225,18 @@ LLL_STUB_UNWIND_INFO_END
+ 
+ 
+ #define lll_futex_wake(futex, nr, private) \
+-  do {									      \
+-    int __ignore;							      \
++  ({									      \
++    int __status;							      \
+     register __typeof (nr) _nr __asm ("edx") = (nr);			      \
+     LIBC_PROBE (lll_futex_wake, 3, futex, nr, private);                       \
+     __asm __volatile ("syscall"						      \
+-		      : "=a" (__ignore)					      \
++		      : "=a" (__status)					      \
+ 		      : "0" (SYS_futex), "D" (futex),			      \
+ 			"S" (__lll_private_flag (FUTEX_WAKE, private)),	      \
+ 			"d" (_nr)					      \
+ 		      : "memory", "cc", "r10", "r11", "cx");		      \
+-  } while (0)
++    __status;								      \
++  })
+ 
+ 
+ /* NB: in the lll_trylock macro we simply return the value in %eax
+Index: glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+===================================================================
+--- glibc-2.17-c758a686.orig/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+@@ -224,20 +224,21 @@ LLL_STUB_UNWIND_INFO_END
+ 
+ 
+ #define lll_futex_wake(futex, nr, private) \
+-  do {									      \
+-    int __ignore;							      \
++  ({									      \
++    int __status;							      \
+     register __typeof (nr) _nr asm ("edx") = (nr);			      \
+     LIBC_PROBE (lll_futex_wake, 3, futex, nr, private);                       \
+     __asm __volatile (LLL_EBX_LOAD					      \
+ 		      LLL_ENTER_KERNEL					      \
+ 		      LLL_EBX_LOAD					      \
+-		      : "=a" (__ignore)					      \
++		      : "=a" (__status)					      \
+ 		      : "0" (SYS_futex), LLL_EBX_REG (futex),		      \
+ 			"c" (__lll_private_flag (FUTEX_WAKE, private)),	      \
+ 			"d" (_nr),					      \
+ 			"i" (0) /* phony, to align next arg's number */,      \
+ 			"i" (offsetof (tcbhead_t, sysinfo)));		      \
+-  } while (0)
++    __status;								      \
++  })
+ 
+ 
+ /* NB: in the lll_trylock macro we simply return the value in %eax
diff --git a/SOURCES/glibc-rh1028652.patch b/SOURCES/glibc-rh1028652.patch
new file mode 100644
index 0000000..0717f71
--- /dev/null
+++ b/SOURCES/glibc-rh1028652.patch
@@ -0,0 +1,96 @@
+#
+# Upstream power patch to increase MINSIGSTKSZ and SIGSTKSZ to
+# account for the kernel signal frame size increase.
+#
+# commit f7c399cff5bd04ee9dc117fb6b0f39597dc047c6
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Sat Aug 17 18:37:18 2013 +0930
+# 
+#     PowerPC SIGSTKSZ
+#     http://sourceware.org/ml/libc-alpha/2013-08/msg00093.html
+#     
+#     This copies the sparc version of sigstack.h, which gives powerpc
+#      #define MINSIGSTKSZ     4096
+#      #define SIGSTKSZ        16384
+#     
+#     Before the VSX changes, struct rt_sigframe size was 1920 plus 128 for
+#     __SIGNAL_FRAMESIZE giving ppc64 exactly the default MINSIGSTKSZ of
+#     2048.
+#     
+#     After VSX, ucontext increased by 256 bytes.  Oops, we're over
+#     MINSIGSTKSZ, so powerpc has been using the wrong value for quite a
+#     while.  Add another ucontext for TM and rt_sigframe is now at 3872,
+#     giving actual MINSIGSTKSZ of 4000.
+#     
+#     The glibc testcase that I was looking at was tst-cancel21, which
+#     allocates 2*SIGSTKSZ (not because the test is trying to be
+#     conservative, but because the test actually has nested signal stack
+#     frames).  We blew the allocation by 48 bytes when using current
+#     mainline gcc to compile glibc (le ppc64).
+#     
+#     The required stack depth in _dl_lookup_symbol_x from the top of the
+#     next signal frame was 10944 bytes.  I guess you'd want to add 288 to
+#     that, implying an actual SIGSTKSZ of 11232.
+#     
+#         * sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h: New file.
+# 
+diff --git glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
+new file mode 100644
+index 0000000..33be9e8
+--- /dev/null
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/sigstack.h
+@@ -0,0 +1,54 @@
++/* sigstack, sigaltstack definitions.
++   Copyright (C) 1998-2013 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 _SIGNAL_H
++# error "Never include this file directly.  Use <signal.h> instead"
++#endif
++
++
++/* Structure describing a signal stack (obsolete).  */
++struct sigstack
++  {
++    void *ss_sp;		/* Signal stack pointer.  */
++    int ss_onstack;		/* Nonzero if executing on this stack.  */
++  };
++
++
++/* Possible values for `ss_flags.'.  */
++enum
++{
++  SS_ONSTACK = 1,
++#define SS_ONSTACK	SS_ONSTACK
++  SS_DISABLE
++#define SS_DISABLE	SS_DISABLE
++};
++
++/* Minimum stack size for a signal handler.  */
++#define MINSIGSTKSZ	4096
++
++/* System default stack size.  */
++#define SIGSTKSZ	16384
++
++
++/* Alternate, preferred interface.  */
++typedef struct sigaltstack
++  {
++    void *ss_sp;
++    int ss_flags;
++    size_t ss_size;
++  } stack_t;
diff --git a/SOURCES/glibc-rh1032435.patch b/SOURCES/glibc-rh1032435.patch
new file mode 100644
index 0000000..694bec2
--- /dev/null
+++ b/SOURCES/glibc-rh1032435.patch
@@ -0,0 +1,390 @@
+commit 977f4b31b7ca4a4e498c397f3fd70510694bbd86
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Oct 30 16:13:37 2013 +0530
+
+    Fix reads for sizes larger than INT_MAX in AF_INET lookup
+    
+    Currently for AF_INET lookups from the hosts file, buffer sizes larger
+    than INT_MAX silently overflow and may result in access beyond bounds
+    of a buffer.  This happens when the number of results in an AF_INET
+    lookup in /etc/hosts are very large.
+    
+    There are two aspects to the problem.  One problem is that the size
+    computed from the buffer size is stored into an int, which results in
+    overflow for large sizes.  Additionally, even if this size was
+    expanded, the function used to read content into the buffer (fgets)
+    accepts only int sizes.  As a result, the fix is to have a function
+    wrap around fgets that calls it multiple times with int sizes if
+    necessary.
+
+(The previous commit fixes upstream bug 16071.)
+
+commit ac60763eac3d43b7234dd21286ad3ec3f17957fc
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon Jun 23 10:24:45 2014 +0200
+
+    Don't ignore too long lines in nss_files (BZ #17079)
+
+commit e07aabba73ea62e7dfa0512507c92efb851fbdbe
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Sep 22 13:20:18 2015 +0200
+
+    Add test case for bug 18287
+
+commit 90fa42a1d7b78de0d75f7e3af362275b2abe807f
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Sep 22 13:40:17 2015 +0200
+
+    Test in commit e07aabba73ea62e7dfa0512507c92efb851fbdbe is for bug 17079
+
+diff -u b/nss/nss_files/files-XXX.c b/nss/nss_files/files-XXX.c
+--- b/nss/nss_files/files-XXX.c
++++ b/nss/nss_files/files-XXX.c
+@@ -179,8 +179,53 @@
+   return NSS_STATUS_SUCCESS;
+ }
+ 
+-/* Parsing the database file into `struct STRUCTURE' data structures.  */
+ 
++typedef enum
++{
++  gcr_ok = 0,
++  gcr_error = -1,
++  gcr_overflow = -2
++} get_contents_ret;
++
++/* Hack around the fact that fgets only accepts int sizes.  */
++static get_contents_ret
++get_contents (char *linebuf, size_t len, FILE *stream)
++{
++  size_t remaining_len = len;
++  char *curbuf = linebuf;
++
++  do
++    {
++      int curlen = ((remaining_len > (size_t) INT_MAX) ? INT_MAX
++		    : remaining_len);
++
++      /* Terminate the line so that we can test for overflow.  */
++      ((unsigned char *) curbuf)[curlen - 1] = 0xff;
++
++      char *p = fgets_unlocked (curbuf, curlen, stream);
++
++      /* EOF or read error.  */
++      if (p == NULL)
++        return gcr_error;
++
++      /* Done reading in the line.  */
++      if (((unsigned char *) curbuf)[curlen - 1] == 0xff)
++        return gcr_ok;
++
++      /* Drop the terminating '\0'.  */
++      remaining_len -= curlen - 1;
++      curbuf += curlen - 1;
++    }
++  /* fgets copies one less than the input length.  Our last iteration is of
++     REMAINING_LEN and once that is done, REMAINING_LEN is decremented by
++     REMAINING_LEN - 1, leaving the result as 1.  */
++  while (remaining_len > 1);
++
++  /* This means that the current buffer was not large enough.  */
++  return gcr_overflow;
++}
++
++/* Parsing the database file into `struct STRUCTURE' data structures.  */
+ static enum nss_status
+ internal_getent (struct STRUCTURE *result,
+ 		 char *buffer, size_t buflen, int *errnop H_ERRNO_PROTO
+@@ -188,7 +233,7 @@
+ {
+   char *p;
+   struct parser_data *data = (void *) buffer;
+-  int linebuflen = buffer + buflen - data->linebuffer;
++  size_t linebuflen = buffer + buflen - data->linebuffer;
+   int parse_result;
+ 
+   if (buflen < sizeof *data + 2)
+@@ -200,17 +245,16 @@
+ 
+   do
+     {
+-      /* Terminate the line so that we can test for overflow.  */
+-      ((unsigned char *) data->linebuffer)[linebuflen - 1] = '\xff';
++      get_contents_ret r = get_contents (data->linebuffer, linebuflen, stream);
+ 
+-      p = fgets_unlocked (data->linebuffer, linebuflen, stream);
+-      if (p == NULL)
++      if (r == gcr_error)
+ 	{
+ 	  /* End of file or read error.  */
+ 	  H_ERRNO_SET (HOST_NOT_FOUND);
+ 	  return NSS_STATUS_NOTFOUND;
+ 	}
+-      else if (((unsigned char *) data->linebuffer)[linebuflen - 1] != 0xff)
++
++      if (r == gcr_overflow)
+ 	{
+ 	  /* The line is too long.  Give the user the opportunity to
+ 	     enlarge the buffer.  */
+@@ -219,7 +263,8 @@
+ 	  return NSS_STATUS_TRYAGAIN;
+ 	}
+ 
+-      /* Skip leading blanks.  */
++      /* Everything OK.  Now skip leading blanks.  */
++      p = data->linebuffer;
+       while (isspace (*p))
+ 	++p;
+     }
+
+diff a/nss/bug17079.c b/nss/bug17079.c
+--- /dev/null
++++ b/nss/bug17079.c
+@@ -0,0 +1,236 @@
++/* Test for bug 17079: heap overflow in NSS with small buffers.
++   Copyright (C) 2015 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 <pwd.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++/* Check if two passwd structs contain the same data.  */
++static bool
++equal (const struct passwd *a, const struct passwd *b)
++{
++  return strcmp (a->pw_name, b->pw_name) == 0
++    && strcmp (a->pw_passwd, b->pw_passwd) == 0
++    && a->pw_uid == b->pw_uid
++    && a->pw_gid == b->pw_gid
++    && strcmp (a->pw_gecos, b->pw_gecos) == 0
++    && strcmp (a->pw_dir, b->pw_dir) == 0
++    && strcmp (a->pw_shell, b->pw_shell) == 0;
++}
++
++enum { MAX_TEST_ITEMS = 10 };
++static struct passwd test_items[MAX_TEST_ITEMS];
++static int test_count;
++
++/* Initialize test_items and test_count above, with data from the
++   passwd database.  */
++static bool
++init_test_items (void)
++{
++  setpwent ();
++  do
++    {
++      struct passwd *pwd = getpwent ();
++      if (pwd == NULL)
++        break;
++      struct passwd *target = test_items + test_count;
++      target->pw_name = strdup (pwd->pw_name);
++      target->pw_passwd = strdup (pwd->pw_passwd);
++      target->pw_uid = pwd->pw_uid;
++      target->pw_gid = pwd->pw_gid;
++      target->pw_gecos = strdup (pwd->pw_gecos);
++      target->pw_dir = strdup (pwd->pw_dir);
++      target->pw_shell = strdup (pwd->pw_shell);
++    }
++  while (++test_count < MAX_TEST_ITEMS);
++  endpwent ();
++
++  /* Filter out those test items which cannot be looked up by name or
++     UID.  */
++  bool found = false;
++  for (int i = 0; i < test_count; ++i)
++    {
++      struct passwd *pwd1 = getpwnam (test_items[i].pw_name);
++      struct passwd *pwd2 = getpwuid (test_items[i].pw_uid);
++      if (pwd1 == NULL || !equal (pwd1, test_items + i)
++          || pwd2 == NULL || !equal (pwd2, test_items + i))
++        test_items[i].pw_name = NULL;
++      else
++        found = true;
++    }
++
++  if (!found)
++    puts ("error: no accounts found which can be looked up by name and UID.");
++  return found;
++}
++
++/* Set to true if an error is encountered.  */
++static bool errors;
++
++/* Return true if the padding has not been tampered with.  */
++static bool
++check_padding (char *buffer, size_t size, char pad)
++{
++  char *end = buffer + size;
++  while (buffer < end)
++    {
++      if (*buffer != pad)
++        return false;
++      ++buffer;
++    }
++  return true;
++}
++
++/* Test one buffer size and padding combination.  */
++static void
++test_one (const struct passwd *item, size_t buffer_size,
++           char pad, size_t padding_size)
++{
++  char *buffer = malloc (buffer_size + padding_size);
++  if (buffer == NULL)
++    {
++      puts ("error: malloc failure");
++      errors = true;
++      return;
++    }
++
++  struct passwd pwd;
++  struct passwd *result;
++  int ret;
++
++  /* Test getpwname_r.  */
++  memset (buffer, pad, buffer_size + padding_size);
++  pwd = (struct passwd) {};
++  ret = getpwnam_r (item->pw_name, &pwd, buffer, buffer_size, &result);
++  if (!check_padding (buffer + buffer_size, padding_size, pad))
++    {
++      printf ("error: padding change: "
++              "name \"%s\", buffer size %zu, padding size %zu, pad 0x%02x\n",
++              item->pw_name, buffer_size, padding_size, (unsigned char) pad);
++      errors = true;
++    }
++  if (ret == 0)
++    {
++      if (result == NULL)
++        {
++          printf ("error: no data: name \"%s\", buffer size %zu\n",
++                  item->pw_name, buffer_size);
++          errors = true;
++        }
++      else if (!equal (item, result))
++        {
++          printf ("error: lookup mismatch: name \"%s\", buffer size %zu\n",
++                  item->pw_name, buffer_size);
++          errors = true;
++        }
++    }
++  else if (ret != ERANGE)
++    {
++      errno = ret;
++      printf ("error: lookup failure for name \"%s\": %m (%d)\n",
++              item->pw_name, ret);
++      errors = true;
++    }
++
++  /* Test getpwuid_r.  */
++  memset (buffer, pad, buffer_size + padding_size);
++  pwd = (struct passwd) {};
++  ret = getpwuid_r (item->pw_uid, &pwd, buffer, buffer_size, &result);
++  if (!check_padding (buffer + buffer_size, padding_size, pad))
++    {
++      printf ("error: padding change: "
++              "UID %ld, buffer size %zu, padding size %zu, pad 0x%02x\n",
++              (long) item->pw_uid, buffer_size, padding_size,
++              (unsigned char) pad);
++      errors = true;
++    }
++  if (ret == 0)
++    {
++      if (result == NULL)
++        {
++          printf ("error: no data: UID %ld, buffer size %zu\n",
++                  (long) item->pw_uid, buffer_size);
++          errors = true;
++        }
++      else if (!equal (item, result))
++        {
++          printf ("error: lookup mismatch: UID %ld, buffer size %zu\n",
++                  (long) item->pw_uid, buffer_size);
++          errors = true;
++        }
++    }
++  else if (ret != ERANGE)
++    {
++      errno = ret;
++      printf ("error: lookup failure for UID \"%ld\": %m (%d)\n",
++              (long) item->pw_uid, ret);
++      errors = true;
++    }
++
++  free (buffer);
++}
++
++/* Test one buffer size with different paddings.  */
++static void
++test_buffer_size (size_t buffer_size)
++{
++  for (int i = 0; i < test_count; ++i)
++    for (size_t padding_size = 0; padding_size < 3; ++padding_size)
++      {
++        test_one (test_items + i, buffer_size, '\0', padding_size);
++        if (padding_size > 0)
++          {
++            test_one (test_items + i, buffer_size, ':', padding_size);
++            test_one (test_items + i, buffer_size, '\n', padding_size);
++            test_one (test_items + i, buffer_size, '\xff', padding_size);
++            test_one (test_items + i, buffer_size, '@', padding_size);
++          }
++      }
++}
++
++int
++do_test (void)
++{
++  if (!init_test_items ())
++    return 1;
++  printf ("info: %d test items\n", test_count);
++
++  for (size_t buffer_size = 0; buffer_size <= 65; ++buffer_size)
++    test_buffer_size (buffer_size);
++  for (size_t buffer_size = 64 + 4; buffer_size < 256; buffer_size += 4)
++    test_buffer_size (buffer_size);
++  test_buffer_size (255);
++  test_buffer_size (257);
++  for (size_t buffer_size = 256; buffer_size < 512; buffer_size += 8)
++    test_buffer_size (buffer_size);
++  test_buffer_size (511);
++  test_buffer_size (513);
++  test_buffer_size (1024);
++  test_buffer_size (2048);
++
++  if (errors)
++    return 1;
++  else
++    return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff a/nss/Makefile b/nss/Makefile
+--- a/nss/Makefile
++++ b/nss/Makefile
+@@ -39,6 +39,6 @@
+ extra-objs		+= $(makedb-modules:=.o)
+ 
+-tests			= test-netdb tst-nss-test1
++tests			= test-netdb tst-nss-test1 bug17079
+ xtests			= bug-erange
+ 
+ include ../Makeconfig
diff --git a/SOURCES/glibc-rh1039304-1.patch b/SOURCES/glibc-rh1039304-1.patch
new file mode 100644
index 0000000..f2bbe6e
--- /dev/null
+++ b/SOURCES/glibc-rh1039304-1.patch
@@ -0,0 +1,185 @@
+commit 5c1a69238fcb87ff7f916a5ce7960b2864afb3a1
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Sat Nov 11 11:23:40 2017 +0100
+
+    resolv: Add tst-res_hnok
+
+diff --git a/resolv/Makefile b/resolv/Makefile
+index 988871086a70b291..b1fd2e2db8736f9b 100644
+--- a/resolv/Makefile
++++ b/resolv/Makefile
+@@ -50,6 +50,7 @@ tests += \
+   tst-ns_name \
+   tst-ns_name_compress \
+   tst-res_hconf_reorder \
++  tst-res_hnok \
+   tst-res_use_inet6 \
+   tst-resolv-basic \
+   tst-resolv-edns \
+@@ -182,6 +183,7 @@ $(objpfx)tst-resolv-canonname: \
+ $(objpfx)tst-ns_name: $(objpfx)libresolv.so
+ $(objpfx)tst-ns_name.out: tst-ns_name.data
+ $(objpfx)tst-ns_name_compress: $(objpfx)libresolv.so
++$(objpfx)tst-res_hnok: $(objpfx)libresolv.so
+ 
+ 
+ # This test case uses the deprecated RES_USE_INET6 resolver option.
+diff --git a/resolv/tst-res_hnok.c b/resolv/tst-res_hnok.c
+new file mode 100644
+index 0000000000000000..9c923038218e965c
+--- /dev/null
++++ b/resolv/tst-res_hnok.c
+@@ -0,0 +1,153 @@
++/* Tests for res_hnok and related functions.
++   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/>.  */
++
++#include <array_length.h>
++#include <resolv.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/test-driver.h>
++
++/* Bits which indicate which functions are supposed to report
++   success.  */
++enum
++  {
++    hnok = 1,
++    dnok = 2,
++    mailok = 4,
++    ownok = 8,
++    allnomailok = hnok | dnok | ownok,
++    allok = hnok | dnok | mailok | ownok
++  };
++
++/* A string of 60 characters.  */
++#define STRING60 "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
++
++/* A string of 63 characters (maximum label length).  */
++#define STRING63 STRING60 "zzz"
++
++/* Combines a test name with the expected results.  */
++struct test_case
++{
++  const char *dn;
++  unsigned int result;          /* Combination of the *ok flags.  */
++};
++
++static const struct test_case tests[] =
++  {
++    { "", allok },
++    { ".", allok },
++    { "www", allnomailok },
++    { "example", allnomailok },
++    { "example.com", allok },
++    { "www.example.com", allok },
++    { "www.example.com.", allok },
++    { "*.example.com", dnok | mailok | ownok },
++    { "-v", dnok },
++    { "-v.example.com", mailok | dnok },
++    { "**.example.com", dnok | mailok },
++    { STRING63, allnomailok },
++    { STRING63 ".example.com", allok },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "z", allok },
++    { "hostmaster@mail.example.com", dnok | mailok },
++    { "with whitespace", 0 },
++    { "with\twhitespace", 0 },
++    { "with\nwhitespace", 0 },
++    { "with.whitespace ", 0 },
++    { "with.whitespace\t", 0 },
++    { "with.whitespace\n", 0 },
++    { "with\\ whitespace", 0 },
++    { "with\\\twhitespace", 0 },
++    { "with\\\nwhitespace", 0 },
++    { "with.whitespace\\ ", 0 },
++    { "with.whitespace\\\t", 0 },
++    { "with.whitespace\\\n", 0 },
++  };
++
++/* Run test case *TEST with FUNC (named FUNCNAME) and report an error
++   if the result does not match the result flag at BIT.  */
++static void
++one_test (const struct test_case *test, const char *funcname,
++          int (*func) (const char *), unsigned int bit)
++{
++  int expected = (test->result & bit) != 0;
++  int actual = func (test->dn);
++  if (actual != expected)
++    {
++      support_record_failure ();
++      printf ("error: %s (\"%s\"): expected=%d, actual=%d\n",
++              funcname, test->dn, expected, actual);
++    }
++}
++
++/* Run 255 tests using all the bytes from 1 to 255, surround the byte
++   with the strings PREFIX and SUFFIX, and check that FUNC (named
++   FUNCNAME) accepts only those bytes listed in ACCEPTED.  */
++static void
++one_char (const char *prefix, const char *accepted, const char *suffix,
++          const char *funcname, int (*func) (const char *))
++{
++  for (int ch = 1; ch <= 255; ++ch)
++    {
++      char dn[1024];
++      snprintf (dn, sizeof (dn), "%s%c%s", prefix, ch, suffix);
++      int expected = strchr (accepted, ch) != NULL;
++      int actual = func (dn);
++      if (actual != expected)
++        {
++          support_record_failure ();
++          printf ("error: %s (\"%s\"): expected=%d, actual=%d\n",
++                  funcname, dn, expected, actual);
++        }
++    }
++}
++
++static int
++do_test (void)
++{
++  for (const struct test_case *test = tests; test < array_end (tests); ++test)
++    {
++      if (test_verbose)
++        printf ("info: testing domain name [[[%s]]] (0x%x)\n",
++                test->dn, test->result);
++      one_test (test, "res_hnok", res_hnok, hnok);
++      one_test (test, "res_dnok", res_dnok, dnok);
++      one_test (test, "res_mailok", res_mailok, mailok);
++      one_test (test, "res_ownok", res_ownok, ownok);
++    }
++
++  one_char
++    ("", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.",
++     "", "res_hnok", res_hnok);
++  one_char
++    ("middle",
++     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",
++     "suffix", "res_hnok", res_hnok);
++  one_char
++    ("middle",
++     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_"
++     "!\"#$%&'()*+,/:;<=>?@[\\]^`{|}~",
++     "suffix.example", "res_mailok", res_mailok);
++  one_char
++    ("mailbox.middle",
++     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",
++     "suffix.example", "res_mailok", res_mailok);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1039304-2.patch b/SOURCES/glibc-rh1039304-2.patch
new file mode 100644
index 0000000..7bea4a3
--- /dev/null
+++ b/SOURCES/glibc-rh1039304-2.patch
@@ -0,0 +1,235 @@
+commit e2a9fca8101443076235a8dbcfceaa2d96bf4801
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Sat Nov 11 11:33:32 2017 +0100
+
+    resolv: Add tst-ns_name_pton
+
+diff --git a/resolv/Makefile b/resolv/Makefile
+index b1fd2e2db8736f9b..0130a09db2d69451 100644
+--- a/resolv/Makefile
++++ b/resolv/Makefile
+@@ -49,6 +49,7 @@ tests += \
+   tst-bug18665-tcp \
+   tst-ns_name \
+   tst-ns_name_compress \
++  tst-ns_name_pton \
+   tst-res_hconf_reorder \
+   tst-res_hnok \
+   tst-res_use_inet6 \
+@@ -183,6 +184,7 @@ $(objpfx)tst-resolv-canonname: \
+ $(objpfx)tst-ns_name: $(objpfx)libresolv.so
+ $(objpfx)tst-ns_name.out: tst-ns_name.data
+ $(objpfx)tst-ns_name_compress: $(objpfx)libresolv.so
++$(objpfx)tst-ns_name_pton: $(objpfx)libresolv.so
+ $(objpfx)tst-res_hnok: $(objpfx)libresolv.so
+ 
+ 
+diff --git a/resolv/tst-ns_name_pton.c b/resolv/tst-ns_name_pton.c
+new file mode 100644
+index 0000000000000000..879d97c9d3816210
+--- /dev/null
++++ b/resolv/tst-ns_name_pton.c
+@@ -0,0 +1,203 @@
++/* Tests for ns_name_pton.
++   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/>.  */
++
++#include <arpa/nameser.h>
++#include <array_length.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/support.h>
++#include <support/test-driver.h>
++
++/* Bits which indicate which functions are supposed to report
++   success.  */
++enum
++  {
++    hnok = 1,
++    dnok = 2,
++    mailok = 4,
++    ownok = 8,
++    allnomailok = hnok | dnok | ownok,
++    allok = hnok | dnok | mailok | ownok
++  };
++
++/* A string of 60 characters.  */
++#define STRING60 "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
++
++/* A string of 63 characters (maximum label length).  */
++#define STRING63 STRING60 "zzz"
++
++/* A string of 60 bytes (non-ASCII).  */
++#define STRING60OCT \
++  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
++  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
++  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" \
++  "\377\377\377\377\377\377\377\377\377"
++
++/* A string of 63 bytes (non-ASCII).  */
++#define STRING63OCT STRING60OCT "\377\377\377"
++
++/* A string of 60 bytes (non-ASCII, quoted decimal).  */
++#define STRING60DEC \
++  "\\255\\255\\255\\255\\255\\255\\255\\255\\255\\255" \
++  "\\255\\255\\255\\255\\255\\255\\255\\255\\255\\255" \
++  "\\255\\255\\255\\255\\255\\255\\255\\255\\255\\255" \
++  "\\255\\255\\255\\255\\255\\255\\255\\255\\255\\255" \
++  "\\255\\255\\255\\255\\255\\255\\255\\255\\255\\255" \
++  "\\255\\255\\255\\255\\255\\255\\255\\255\\255\\255"
++
++/* A string of 63 bytes (non-ASCII, quoted decimal).  */
++#define STRING63DEC STRING60DEC "\\255\\255\\255"
++
++/* Combines a test name with the expected results.  */
++struct test_case
++{
++  const char *dn;
++  const char *back; /* Expected test result converted using ns_name_ntop.  */
++  bool fully_qualified; /* True if the domain name has a trailing dot.  */
++};
++
++static const struct test_case tests[] =
++  {
++    { "", ".", false },
++    { ".", ".", true },
++    { "..", NULL, },
++    { "www", "www", false },
++    { "www.", "www", true },
++    { "www\\.", "www\\.", false },
++    { ".www", NULL, },
++    { ".www\\.", NULL, },
++    { "example.com", "example.com", false },
++    { "example.com.", "example.com", true },
++    { ".example.com", NULL, },
++    { ".example.com.", NULL, },
++    { "example\\.com", "example\\.com", false },
++    { "example\\.com.", "example\\.com", true },
++    { "example..", NULL, },
++    { "example..com", NULL, },
++    { "example..com", NULL, },
++    { "\\0", NULL, },
++    { "\\00", NULL, },
++    { "\\000", "\\000", false },
++    { "\\1", NULL, },
++    { "\\01", NULL, },
++    { "\\001", "\\001", false },
++    { "\\1x", NULL, },
++    { "\\01x", NULL, },
++    { "\\001x", "\\001x", false },
++    { "\\256", NULL, },
++    { "\\0641", "\\@1", false },
++    { "\\0011", "\\0011", false },
++    { STRING63, STRING63, false },
++    { STRING63 ".", STRING63, true },
++    { STRING63 "z", NULL, },
++    { STRING63 "\\.", NULL, },
++    { STRING60 "zz\\.", STRING60 "zz\\.", false },
++    { STRING60 "zz\\..", STRING60 "zz\\.", true },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "z",
++      STRING63 "." STRING63 "." STRING63 "." STRING60 "z", false },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "z.",
++      STRING63 "." STRING63 "." STRING63 "." STRING60 "z", true },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "zz", NULL, },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "zzz", NULL, },
++    { STRING63OCT "." STRING63OCT "." STRING63OCT "." STRING60OCT "\377",
++      STRING63DEC "." STRING63DEC "." STRING63DEC "." STRING60DEC "\\255",
++      false },
++    { STRING63OCT "." STRING63OCT "." STRING63OCT "." STRING60OCT "\377.",
++      STRING63DEC "." STRING63DEC "." STRING63DEC "." STRING60DEC "\\255",
++      true },
++    { STRING63OCT "." STRING63OCT "." STRING63OCT "." STRING60OCT
++      "\377\377", NULL, },
++    { STRING63OCT "." STRING63OCT "." STRING63OCT "." STRING60OCT
++      "\377\377\377", NULL, },
++  };
++
++static int
++do_test (void)
++{
++  unsigned char *wire = xmalloc (NS_MAXCDNAME);
++  char *text = xmalloc (NS_MAXDNAME);
++  for (const struct test_case *test = tests; test < array_end (tests); ++test)
++    {
++      if (test_verbose)
++        printf ("info: testing domain name [[[%s]]]\n", test->dn);
++      int ret = ns_name_pton (test->dn, wire, NS_MAXCDNAME);
++      if (ret == -1)
++        {
++          if (test->back != NULL)
++            {
++              support_record_failure ();
++              printf ("error: unexpected decoding failure for [[%s]]\n",
++                      test->dn);
++            }
++          /* Otherwise, we have an expected decoding failure.  */
++          continue;
++        }
++
++      if (ret < -1 || ret > 1)
++        {
++          support_record_failure ();
++          printf ("error: invalid return value %d for [[%s]]\n",
++                  ret, test->dn);
++          continue;
++        }
++
++      int ret2 = ns_name_ntop (wire, text, NS_MAXDNAME);
++
++      if (ret2 < 0)
++        {
++          support_record_failure ();
++          printf ("error: failure to convert back [[%s]]\n", test->dn);
++        }
++
++      if (test->back == NULL)
++        {
++          support_record_failure ();
++          printf ("error: unexpected success converting [[%s]]\n", test->dn);
++          if (ret2 >= 1)
++            printf ("error:   result converts back to [[%s]]\n", test->dn);
++          continue;
++        }
++
++      if (strcmp (text, test->back) != 0)
++        {
++          support_record_failure ();
++          printf ("error: back-conversion of [[%s]] did not match\n",
++                  test->dn);
++          printf ("error:   expected: [[%s]]\n", test->back);
++          printf ("error:     actual: [[%s]]\n", text);
++        }
++
++      if (ret != test->fully_qualified)
++        {
++          support_record_failure ();
++          printf ("error: invalid fully-qualified status for [[%s]]\n",
++                  test->dn);
++          printf ("error:   expected: %d\n", (int) test->fully_qualified);
++          printf ("error:     actual: %d\n", ret);
++        }
++    }
++
++  free (text);
++  free (wire);
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1039304-3.patch b/SOURCES/glibc-rh1039304-3.patch
new file mode 100644
index 0000000..d39d4d2
--- /dev/null
+++ b/SOURCES/glibc-rh1039304-3.patch
@@ -0,0 +1,40 @@
+commit 9e0ad3049dbae88d615bfb038e53bf365a39a634
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Sat Nov 11 11:41:45 2017 +0100
+
+    resolv: ns_name_pton should report trailing \ as error [BZ #22413]
+
+diff --git a/resolv/ns_name.c b/resolv/ns_name.c
+index 08a75e2fe0b4edd6..73213fee2dca530b 100644
+--- a/resolv/ns_name.c
++++ b/resolv/ns_name.c
+@@ -222,6 +222,11 @@ ns_name_pton(const char *src, u_char *dst, size_t dstsiz)
+ 		}
+ 		*bp++ = (u_char)c;
+ 	}
++	if (escaped) {
++		/* Trailing backslash.  */
++		__set_errno (EMSGSIZE);
++		return -1;
++	}
+ 	c = (bp - label - 1);
+ 	if ((c & NS_CMPRSFLGS) != 0) {		/*%< Label too big. */
+ 		__set_errno (EMSGSIZE);
+diff --git a/resolv/tst-ns_name_pton.c b/resolv/tst-ns_name_pton.c
+index 879d97c9d3816210..73bdb05e08e405dc 100644
+--- a/resolv/tst-ns_name_pton.c
++++ b/resolv/tst-ns_name_pton.c
+@@ -127,6 +127,13 @@ static const struct test_case tests[] =
+       "\377\377", NULL, },
+     { STRING63OCT "." STRING63OCT "." STRING63OCT "." STRING60OCT
+       "\377\377\377", NULL, },
++    { "\\", NULL, },
++    { "\\\\", "\\\\", false },
++    { "\\\\.", "\\\\", true },
++    { "\\\\\\", NULL, },
++    { "a\\", NULL, },
++    { "a.\\", NULL, },
++    { "a.b\\", NULL, },
+   };
+ 
+ static int
diff --git a/SOURCES/glibc-rh1039304-4.patch b/SOURCES/glibc-rh1039304-4.patch
new file mode 100644
index 0000000..e67eab1
--- /dev/null
+++ b/SOURCES/glibc-rh1039304-4.patch
@@ -0,0 +1,322 @@
+commit c0a25aa92b612786f4e45292c4aee1d7d47123f8
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Sat Nov 11 11:51:08 2017 +0100
+
+    resolv: More precise checks in res_hnok, res_dnok [BZ #22409] [BZ #22412]
+    
+    res_hnok rejected some host names used on the Internet, such as
+    www-.example.com.  res_hnok and res_dnok failed to perform basic syntax
+    checking on DNS domain names.
+    
+    Also fix res_mailok, res_ownok.
+
+diff --git a/resolv/res_comp.c b/resolv/res_comp.c
+index ffb2ed59147d3680..79760e891f607daa 100644
+--- a/resolv/res_comp.c
++++ b/resolv/res_comp.c
+@@ -1,3 +1,21 @@
++/* Domain name processing functions.
++   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/>.  */
++
+ /*
+  * Copyright (c) 1985, 1993
+  *    The Regents of the University of California.  All rights reserved.
+@@ -121,110 +139,118 @@ dn_skipname(const u_char *ptr, const u_char *eom) {
+ }
+ libresolv_hidden_def (dn_skipname)
+ 
+-/*
+- * Verify that a domain name uses an acceptable character set.
+- */
++/* Return true if the string consists of printable ASCII characters
++   only.  */
++static bool
++printable_string (const char *dn)
++{
++  while (true)
++    {
++      char ch = *dn;
++      if (ch == '\0')
++	return true;
++      if (ch <= ' ' || ch > '~')
++	return false;
++      ++dn;
++    }
++}
+ 
+-/*
+- * Note the conspicuous absence of ctype macros in these definitions.  On
+- * non-ASCII hosts, we can't depend on string literals or ctype macros to
+- * tell us anything about network-format data.  The rest of the BIND system
+- * is not careful about this, but for some reason, we're doing it right here.
+- */
+-#define PERIOD 0x2e
+-#define	hyphenchar(c) ((c) == 0x2d)
+-#define	underscorechar(c) ((c) == 0x5f)
+-#define bslashchar(c) ((c) == 0x5c)
+-#define periodchar(c) ((c) == PERIOD)
+-#define asterchar(c) ((c) == 0x2a)
+-#define alphachar(c) (((c) >= 0x41 && (c) <= 0x5a) \
+-		   || ((c) >= 0x61 && (c) <= 0x7a))
+-#define digitchar(c) ((c) >= 0x30 && (c) <= 0x39)
+-
+-#define borderchar(c) (alphachar(c) || digitchar(c))
+-#define middlechar(c) (borderchar(c) || hyphenchar(c) || underscorechar(c))
+-#define	domainchar(c) ((c) > 0x20 && (c) < 0x7f)
++/* Return true if DN points to a name consisting only of [0-9a-zA-Z_-]
++   characters.  DN must be in DNS wire format, without
++   compression.  */
++static bool
++binary_hnok (const unsigned char *dn)
++{
++  while (true)
++    {
++      size_t label_length = *dn;
++      if (label_length == 0)
++	break;
++      ++dn;
++      const unsigned char *label_end = dn + label_length;
++      do
++	{
++	  unsigned char ch = *dn;
++	  if (!(('0' <= ch && ch <= '9')
++		|| ('A' <= ch && ch <= 'Z')
++		|| ('a' <= ch && ch <= 'z')
++		|| ch == '-' || ch == '_'))
++	    return false;
++	  ++dn;
++	}
++      while (dn < label_end);
++    }
++  return true;
++}
++
++/* Return true if the binary domain name has a first labels which
++   starts with '-'.  */
++static inline bool
++binary_leading_dash (const unsigned char *dn)
++{
++  return dn[0] > 0 && dn[1] == '-';
++}
+ 
++/* Return 1 if res_hnok is a valid host name.  Labels must only
++   contain [0-9a-zA-Z_-] characters, and the name must not start with
++   a '-'.  The latter is to avoid confusion with program options.  */
+ int
+-res_hnok(const char *dn) {
+-	int pch = PERIOD, ch = *dn++;
+-
+-	while (ch != '\0') {
+-		int nch = *dn++;
+-
+-		if (periodchar(ch)) {
+-			(void)NULL;
+-		} else if (periodchar(pch)) {
+-			if (!borderchar(ch))
+-				return (0);
+-		} else if (periodchar(nch) || nch == '\0') {
+-			if (!borderchar(ch))
+-				return (0);
+-		} else {
+-			if (!middlechar(ch))
+-				return (0);
+-		}
+-		pch = ch, ch = nch;
+-	}
+-	return (1);
++res_hnok (const char *dn)
++{
++  unsigned char buf[NS_MAXCDNAME];
++  if (!printable_string (dn)
++      || ns_name_pton (dn, buf, sizeof (buf)) < 0
++      || binary_leading_dash (buf))
++    return 0;
++  return binary_hnok (buf);
+ }
+ libresolv_hidden_def (res_hnok)
+ 
+-/*
+- * hostname-like (A, MX, WKS) owners can have "*" as their first label
+- * but must otherwise be as a host name.
+- */
++/* Hostname-like (A, MX, WKS) owners can have "*" as their first label
++   but must otherwise be as a host name.  */
+ int
+-res_ownok(const char *dn) {
+-	if (asterchar(dn[0])) {
+-		if (periodchar(dn[1]))
+-			return (res_hnok(dn+2));
+-		if (dn[1] == '\0')
+-			return (1);
+-	}
+-	return (res_hnok(dn));
++res_ownok (const char *dn)
++{
++  unsigned char buf[NS_MAXCDNAME];
++  if (!printable_string (dn)
++      || ns_name_pton (dn, buf, sizeof (buf)) < 0
++      || binary_leading_dash (buf))
++    return 0;
++  if (buf[0] == 1 && buf [1] == '*')
++    /* Skip over the leading "*." part.  */
++    return binary_hnok (buf + 2);
++  else
++    return binary_hnok (buf);
+ }
+ 
+-/*
+- * SOA RNAMEs and RP RNAMEs can have any printable character in their first
+- * label, but the rest of the name has to look like a host name.
+- */
++/* SOA RNAMEs and RP RNAMEs can have any byte in their first label,
++   but the rest of the name has to look like a host name.  */
+ int
+-res_mailok(const char *dn) {
+-	int ch, escaped = 0;
+-
+-	/* "." is a valid missing representation */
+-	if (*dn == '\0')
+-		return (1);
+-
+-	/* otherwise <label>.<hostname> */
+-	while ((ch = *dn++) != '\0') {
+-		if (!domainchar(ch))
+-			return (0);
+-		if (!escaped && periodchar(ch))
+-			break;
+-		if (escaped)
+-			escaped = 0;
+-		else if (bslashchar(ch))
+-			escaped = 1;
+-	}
+-	if (periodchar(ch))
+-		return (res_hnok(dn));
+-	return (0);
++res_mailok (const char *dn)
++{
++  unsigned char buf[NS_MAXCDNAME];
++  if (!printable_string (dn)
++      || ns_name_pton (dn, buf, sizeof (buf)) < 0)
++    return 0;
++  unsigned char label_length = buf[0];
++  /* "." is a valid missing representation */
++  if (label_length == 0)
++    return 1;
++  /* Skip over the first label.  */
++  unsigned char *tail = buf + 1 + label_length;
++  if (*tail == 0)
++    /* More than one label is required (except for ".").  */
++    return 0;
++  return binary_hnok (tail);
+ }
+ 
+-/*
+- * This function is quite liberal, since RFC 1034's character sets are only
+- * recommendations.
+- */
++/* Return 1 if DN is a syntactically valid domain name.  Empty names
++   are accepted.  */
+ int
+-res_dnok(const char *dn) {
+-	int ch;
+-
+-	while ((ch = *dn++) != '\0')
+-		if (!domainchar(ch))
+-			return (0);
+-	return (1);
++res_dnok (const char *dn)
++{
++  unsigned char buf[NS_MAXCDNAME];
++  return printable_string (dn) && ns_name_pton (dn, buf, sizeof (buf)) >= 0;
+ }
+ libresolv_hidden_def (res_dnok)
+ 
+diff --git a/resolv/tst-res_hnok.c b/resolv/tst-res_hnok.c
+index 9c923038218e965c..314477a2ce2661c0 100644
+--- a/resolv/tst-res_hnok.c
++++ b/resolv/tst-res_hnok.c
+@@ -51,19 +51,31 @@ static const struct test_case tests[] =
+   {
+     { "", allok },
+     { ".", allok },
++    { "..", 0 },
+     { "www", allnomailok },
++    { "www.", allnomailok },
+     { "example", allnomailok },
+     { "example.com", allok },
+     { "www.example.com", allok },
+     { "www.example.com.", allok },
++    { "www-.example.com.", allok },
++    { "www.-example.com.", allok },
+     { "*.example.com", dnok | mailok | ownok },
+     { "-v", dnok },
+     { "-v.example.com", mailok | dnok },
+     { "**.example.com", dnok | mailok },
++    { "www.example.com\\", 0 },
+     { STRING63, allnomailok },
++    { STRING63 ".", allnomailok },
++    { STRING63 "\\.", 0 },
++    { STRING63 "z", 0 },
+     { STRING63 ".example.com", allok },
+     { STRING63 "." STRING63 "." STRING63 "." STRING60 "z", allok },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "z.", allok },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "zz", 0 },
++    { STRING63 "." STRING63 "." STRING63 "." STRING60 "zzz", 0 },
+     { "hostmaster@mail.example.com", dnok | mailok },
++    { "hostmaster\\@mail.example.com", dnok | mailok },
+     { "with whitespace", 0 },
+     { "with\twhitespace", 0 },
+     { "with\nwhitespace", 0 },
+@@ -116,6 +128,12 @@ one_char (const char *prefix, const char *accepted, const char *suffix,
+     }
+ }
+ 
++#define LETTERSDIGITS \
++  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
++
++#define PRINTABLE \
++  "!\"#$%&'()*+,/:;<=>?@[\\]^`{|}~"
++
+ static int
+ do_test (void)
+ {
+@@ -131,20 +149,18 @@ do_test (void)
+     }
+ 
+   one_char
+-    ("", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.",
+-     "", "res_hnok", res_hnok);
++    ("", LETTERSDIGITS "._", "", "res_hnok", res_hnok);
+   one_char
+     ("middle",
+-     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",
++     LETTERSDIGITS ".-_\\", /* "middle\\suffix" == "middlesuffix", so good.  */
+      "suffix", "res_hnok", res_hnok);
+   one_char
+     ("middle",
+-     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_"
+-     "!\"#$%&'()*+,/:;<=>?@[\\]^`{|}~",
++     LETTERSDIGITS ".-_" PRINTABLE,
+      "suffix.example", "res_mailok", res_mailok);
+   one_char
+     ("mailbox.middle",
+-     "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_",
++     LETTERSDIGITS ".-_\\",
+      "suffix.example", "res_mailok", res_mailok);
+ 
+   return 0;
diff --git a/SOURCES/glibc-rh1039496.patch b/SOURCES/glibc-rh1039496.patch
new file mode 100644
index 0000000..1243bbb
--- /dev/null
+++ b/SOURCES/glibc-rh1039496.patch
@@ -0,0 +1,102 @@
+diff -urNglibc-2.17-c758a686/libio/tst-widetext.inputglibc-2.17-c758a686/libio/tst-widetext.input
+--- glibc-2.17-c758a686/libio/tst-widetext.input	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/libio/tst-widetext.input	2013-12-11 09:48:30.760084849 -0500
+@@ -126,7 +126,7 @@
+ ઀◌ઁ◌ંઃ઄અઆઇઈઉઊઋઌઍ઎એઐઑ઒ઓઔકખગઘઙચછજઝઞટઠડઢણતથદધન઩પફબભમયર઱લળ઴વશષસહ઺઻◌઼ઽાિ
+ ી◌ુ◌ૂ◌ૃ◌ૄ◌ૅ૆◌ે◌ૈૉ૊ોૌ◌્૎૏ૐ૑૒૓૔૕૖૗૘૙૚૛૜૝૞૟ૠૡૢૣ૤૥૦૧૨૩૪૫૬૭૮૯૰૱૲૳૴૵૶૷૸ૹૺૻૼ૽૾૿
+ 
+-Oriya (U+0B00-U+0B7F):
++Odia (U+0B00-U+0B7F):
+ 
+ ଀◌ଁଂଃ଄ଅଆଇଈଉଊଋଌ଍଎ଏଐ଑଒ଓଔକଖଗଘଙଚଛଜଝଞଟଠଡଢଣତଥଦଧନ଩ପଫବଭମଯର଱ଲଳ଴ଵଶଷସହ଺଻◌଼ଽା◌ି
+ ୀ◌ୁ◌ୂ◌ୃୄ୅୆େୈ୉୊ୋୌ◌୍୎୏୐୑୒୓୔୕◌ୖୗ୘୙୚୛ଡ଼ଢ଼୞ୟୠୡୢୣ୤୥୦୧୨୩୪୫୬୭୮୯୰ୱ୲୳୴୵୶୷୸୹୺୻୼୽୾୿
+diff -urNglibc-2.17-c758a686/locale/iso-639.defglibc-2.17-c758a686/locale/iso-639.def
+--- glibc-2.17-c758a686/locale/iso-639.def	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/locale/iso-639.def	2013-12-11 09:58:58.414959856 -0500
+@@ -181,7 +181,7 @@
+ DEFINE_LANGUAGE_CODE ("Greek, Modern (1453-)", el, ell, gre)
+ DEFINE_LANGUAGE_CODE ("Guarani", gn, grn, grn)
+ DEFINE_LANGUAGE_CODE ("Gujarati", gu, guj, guj)
+-DEFINE_LANGUAGE_CODE3 ("Gwich�in", gwi, gwi)
++DEFINE_LANGUAGE_CODE3 ("Gwich´in", gwi, gwi)
+ DEFINE_LANGUAGE_CODE3 ("Haida", hai, hai)
+ DEFINE_LANGUAGE_CODE ("Haitian; Haitian Creole", ht, hat, hat)
+ DEFINE_LANGUAGE_CODE ("Hausa", ha, hau, hau)
+@@ -337,7 +337,7 @@
+ DEFINE_LANGUAGE_CODE3 ("North American Indian", nai, nai)
+ DEFINE_LANGUAGE_CODE ("Northern Sami", se, sme, sme)
+ DEFINE_LANGUAGE_CODE3 ("Northern Sotho; Pedi; Sepedi", nso, nso)
+-DEFINE_LANGUAGE_CODE ("Norwegian Bokm�l", nb, nob, nob)
++DEFINE_LANGUAGE_CODE ("Norwegian Bokmål", nb, nob, nob)
+ DEFINE_LANGUAGE_CODE ("Norwegian Nynorsk", nn, nno, nno)
+ DEFINE_LANGUAGE_CODE ("Norwegian", no, nor, nor)
+ DEFINE_LANGUAGE_CODE3 ("Nubian languages", nub, nub)
+@@ -345,9 +345,9 @@
+ DEFINE_LANGUAGE_CODE3 ("Nyankole", nyn, nyn)
+ DEFINE_LANGUAGE_CODE3 ("Nyoro", nyo, nyo)
+ DEFINE_LANGUAGE_CODE3 ("Nzima", nzi, nzi)
+-DEFINE_LANGUAGE_CODE ("Occitan (post 1500); Proven�al", oc, oci, oci)
++DEFINE_LANGUAGE_CODE ("Occitan (post 1500); Provençal", oc, oci, oci)
+ DEFINE_LANGUAGE_CODE ("Ojibwa", oj, oji, oji)
+-DEFINE_LANGUAGE_CODE ("Oriya", or, ori, ori)
++DEFINE_LANGUAGE_CODE ("Odia", or, ori, ori)
+ DEFINE_LANGUAGE_CODE ("Oromo", om, orm, orm)
+ DEFINE_LANGUAGE_CODE3 ("Osage", osa, osa)
+ DEFINE_LANGUAGE_CODE ("Ossetian; Ossetic", os, oss, oss)
+@@ -368,7 +368,7 @@
+ DEFINE_LANGUAGE_CODE ("Polish", pl, pol, pol)
+ DEFINE_LANGUAGE_CODE ("Portuguese", pt, por, por)
+ DEFINE_LANGUAGE_CODE3 ("Prakrit languages", pra, pra)
+-DEFINE_LANGUAGE_CODE3 ("Proven�al, Old (to 1500)", pro, pro)
++DEFINE_LANGUAGE_CODE3 ("Provençal, Old (to 1500)", pro, pro)
+ DEFINE_LANGUAGE_CODE ("Pushto", ps, pus, pus)
+ DEFINE_LANGUAGE_CODE ("Quechua", qu, que, que)
+ DEFINE_LANGUAGE_CODE ("Raeto-Romance", rm, roh, roh)
+@@ -476,7 +476,7 @@
+ DEFINE_LANGUAGE_CODE3 ("Vai", vai, vai)
+ DEFINE_LANGUAGE_CODE ("Venda", ve, ven, ven)
+ DEFINE_LANGUAGE_CODE ("Vietnamese", vi, vie, vie)
+-DEFINE_LANGUAGE_CODE ("Volap�k", vo, vol, vol)
++DEFINE_LANGUAGE_CODE ("Volapük", vo, vol, vol)
+ DEFINE_LANGUAGE_CODE3 ("Votic", vot, vot)
+ DEFINE_LANGUAGE_CODE3 ("Wakashan languages", wak, wak)
+ DEFINE_LANGUAGE_CODE3 ("Walser", wae, wae)
+diff -urNglibc-2.17-c758a686/localedata/locales/or_INglibc-2.17-c758a686/localedata/locales/or_IN
+--- glibc-2.17-c758a686/localedata/locales/or_IN	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/localedata/locales/or_IN	2013-12-11 09:52:26.932931534 -0500
+@@ -1,19 +1,19 @@
+ comment_char %
+ escape_char /
+ 
+-% Oriya locale for India.
++% Odia locale for India.
+ % Contributed by Masahide Washizawa <washi at jp ibm com>
+ 
+ %%%%%%%%%%%%%
+ LC_IDENTIFICATION
+-title       "Oriya language locale for India"
++title       "Odia language locale for India"
+ source      "IBM AP Linux Technology Center, Yamato Software Laboratory"
+ address     "1623-14, Shimotsuruma, Yamato-shi, Kanagawa-ken, 242-8502, Japan"
+ contact     ""
+ email       "bug-glibc@gnu.org"
+ tel         ""
+ fax         ""
+-language    "Oriya"
++language    "Odia"
+ territory   "India"
+ revision    "1.0"
+ date        "2006-05-25"
+@@ -35,10 +35,10 @@
+ LC_CTYPE
+ copy "i18n"
+ 
+-% Oriya uses the alternate digits U+0B66..U+0B6F
++% Odia uses the alternate digits U+0B66..U+0B6F
+ outdigit <U0B66>..<U0B6F>
+ 
+-% This is used in the scanf family of functions to read Oriya numbers
++% This is used in the scanf family of functions to read Odia numbers
+ % using "%Id" and such.
+ map to_inpunct; /
+   (<U0030>,<U0B66>); /
diff --git a/SOURCES/glibc-rh1039970.patch b/SOURCES/glibc-rh1039970.patch
new file mode 100644
index 0000000..85f8b91
--- /dev/null
+++ b/SOURCES/glibc-rh1039970.patch
@@ -0,0 +1,135 @@
+commit 9a3c6a6ff602c88d7155139a7d7d0000b7b7e946
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Jan 2 10:05:27 2014 +0530
+
+    Fix return code from getent netgroup when the netgroup is not found (bz #16366)
+
+diff -pruN glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+--- glibc-2.17-c758a686/nscd/netgroupcache.c	2013-12-03 20:41:12.000000000 -0500
++++ glibc-2.17-c758a686/nscd/netgroupcache.c	2013-12-19 08:36:52.253000000 -0500
+@@ -65,6 +65,55 @@ struct dataset
+   char strdata[0];
+ };
+ 
++/* Sends a notfound message and prepares a notfound dataset to write to the
++   cache.  Returns true if there was enough memory to allocate the dataset and
++   returns the dataset in DATASETP, total bytes to write in TOTALP and the
++   timeout in TIMEOUTP.  KEY_COPY is set to point to the copy of the key in the
++   dataset. */
++static bool
++do_notfound (struct database_dyn *db, int fd, request_header *req,
++	       const char *key, struct dataset **datasetp, ssize_t *totalp,
++	       time_t *timeoutp, char **key_copy)
++{
++  struct dataset *dataset;
++  ssize_t total;
++  time_t timeout;
++  bool cacheable = false;
++
++  total = sizeof (notfound);
++  timeout = time (NULL) + db->negtimeout;
++
++  if (fd != -1)
++    TEMP_FAILURE_RETRY (send (fd, &notfound, total, MSG_NOSIGNAL));
++
++  dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1);
++  /* If we cannot permanently store the result, so be it.  */
++  if (dataset != NULL)
++    {
++      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
++      dataset->head.recsize = total;
++      dataset->head.notfound = true;
++      dataset->head.nreloads = 0;
++      dataset->head.usable = true;
++
++      /* Compute the timeout time.  */
++      timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
++      dataset->head.ttl = db->negtimeout;
++
++      /* This is the reply.  */
++      memcpy (&dataset->resp, &notfound, total);
++
++      /* Copy the key data.  */
++      memcpy (dataset->strdata, key, req->key_len);
++      *key_copy = dataset->strdata;
++
++      cacheable = true;
++    }
++  *timeoutp = timeout;
++  *totalp = total;
++  *datasetp = dataset;
++  return cacheable;
++}
+ 
+ static time_t
+ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+@@ -84,6 +133,7 @@ addgetnetgrentX (struct database_dyn *db
+   struct dataset *dataset;
+   bool cacheable = false;
+   ssize_t total;
++  bool found = false;
+ 
+   char *key_copy = NULL;
+   struct __netgrent data;
+@@ -103,35 +153,8 @@ addgetnetgrentX (struct database_dyn *db
+       && __nss_database_lookup ("netgroup", NULL, NULL, &netgroup_database))
+     {
+       /* No such service.  */
+-      total = sizeof (notfound);
+-      timeout = time (NULL) + db->negtimeout;
+-
+-      if (fd != -1)
+-	TEMP_FAILURE_RETRY (send (fd, &notfound, total, MSG_NOSIGNAL));
+-
+-      dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1);
+-      /* If we cannot permanently store the result, so be it.  */
+-      if (dataset != NULL)
+-	{
+-	  dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	  dataset->head.recsize = total;
+-	  dataset->head.notfound = true;
+-	  dataset->head.nreloads = 0;
+-	  dataset->head.usable = true;
+-
+-	  /* Compute the timeout time.  */
+-	  timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
+-	  dataset->head.ttl = db->negtimeout;
+-
+-	  /* This is the reply.  */
+-	  memcpy (&dataset->resp, &notfound, total);
+-
+-	  /* Copy the key data.  */
+-	  memcpy (dataset->strdata, key, req->key_len);
+-
+-	  cacheable = true;
+-	}
+-
++      cacheable = do_notfound (db, fd, req, key, &dataset, &total, &timeout,
++			       &key_copy);
+       goto writeout;
+     }
+ 
+@@ -167,6 +190,7 @@ addgetnetgrentX (struct database_dyn *db
+ 
+ 	  if (status == NSS_STATUS_SUCCESS)
+ 	    {
++	      found = true;
+ 	      union
+ 	      {
+ 		enum nss_status (*f) (struct __netgrent *, char *, size_t,
+@@ -325,6 +349,15 @@ addgetnetgrentX (struct database_dyn *db
+ 	}
+     }
+ 
++  /* No results.  Return a failure and write out a notfound record in the
++     cache.  */
++  if (!found)
++    {
++      cacheable = do_notfound (db, fd, req, key, &dataset, &total, &timeout,
++			       &key_copy);
++      goto writeout;
++    }
++
+   total = buffilled;
+ 
+   /* Fill in the dataset.  */
diff --git a/SOURCES/glibc-rh1046199.patch b/SOURCES/glibc-rh1046199.patch
new file mode 100644
index 0000000..b00c985
--- /dev/null
+++ b/SOURCES/glibc-rh1046199.patch
@@ -0,0 +1,23 @@
+commit d41242129ba693cdbc8db85b846fcaccf9f0b7c4
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Jan 2 10:03:12 2014 +0530
+
+    Fix infinite loop in nscd when netgroup is empty (bz #16365)
+
+diff -pruN glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+--- glibc-2.17-c758a686/nscd/netgroupcache.c	2013-12-20 04:38:40.432000000 -0500
++++ glibc-2.17-c758a686/nscd/netgroupcache.c	2013-12-20 04:37:29.945000000 -0500
+@@ -204,9 +204,10 @@ addgetnetgrentX (struct database_dyn *db
+ 		    int e;
+ 		    status = getfct.f (&data, buffer + buffilled,
+ 				       buflen - buffilled, &e);
+-		    if (status == NSS_STATUS_RETURN)
+-		      /* This was the last one for this group.  Look
+-			 at next group if available.  */
++		    if (status == NSS_STATUS_RETURN
++			|| status == NSS_STATUS_NOTFOUND)
++		      /* This was either the last one for this group or the
++			 group was empty.  Look at next group if available.  */
+ 		      break;
+ 		    if (status == NSS_STATUS_SUCCESS)
+ 		      {
diff --git a/SOURCES/glibc-rh1047983.patch b/SOURCES/glibc-rh1047983.patch
new file mode 100644
index 0000000..a5877cd
--- /dev/null
+++ b/SOURCES/glibc-rh1047983.patch
@@ -0,0 +1,555 @@
+commit 5a4c6d53f50b264d60cf6453576ca2810c7890b7
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Nov 28 17:18:12 2013 +0530
+
+    Get canonical name in getaddrinfo from hosts file for AF_INET (fixes 16077)
+    
+    AF_INET lookup in hosts file uses _nss_files_gethostbyname2_r, which
+    is not capable of returning a canonical name if it has found one.
+    This change adds _nss_files_gethostbyname3_r, which wraps around
+    _nss_files_gethostbyname2_r and then returns result.h_name as the
+    canonical name.
+
+diff --git glibc-2.17-c758a686/nss/Versions glibc-2.17-c758a686/nss/Versions
+index d13d570..f8ababc 100644
+--- glibc-2.17-c758a686/nss/Versions
++++ glibc-2.17-c758a686/nss/Versions
+@@ -40,6 +40,7 @@ libnss_files {
+     _nss_files_endhostent;
+     _nss_files_gethostbyaddr_r;
+     _nss_files_gethostbyname2_r;
++    _nss_files_gethostbyname3_r;
+     _nss_files_gethostbyname4_r;
+     _nss_files_gethostbyname_r;
+     _nss_files_gethostent_r;
+diff --git glibc-2.17-c758a686/nss/nss_files/files-hosts.c glibc-2.17-c758a686/nss/nss_files/files-hosts.c
+index 6db2535..957c9aa 100644
+--- glibc-2.17-c758a686/nss/nss_files/files-hosts.c
++++ glibc-2.17-c758a686/nss/nss_files/files-hosts.c
+@@ -97,262 +97,12 @@ LINE_PARSER
+    STRING_FIELD (result->h_name, isspace, 1);
+  })
+ 
+-
+-
+-#define HOST_DB_LOOKUP(name, keysize, keypattern, break_if_match, proto...) \
+-enum nss_status								      \
+-_nss_files_get##name##_r (proto,					      \
+-			  struct STRUCTURE *result, char *buffer,	      \
+-			  size_t buflen, int *errnop H_ERRNO_PROTO)	      \
+-{									      \
+-  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct hostent_data);    \
+-  buffer += pad;							      \
+-  buflen = buflen > pad ? buflen - pad : 0;				      \
+-									      \
+-  __libc_lock_lock (lock);						      \
+-									      \
+-  /* Reset file pointer to beginning or open file.  */			      \
+-  enum nss_status status = internal_setent (keep_stream);		      \
+-									      \
+-  if (status == NSS_STATUS_SUCCESS)					      \
+-    {									      \
+-      /* Tell getent function that we have repositioned the file pointer.  */ \
+-      last_use = getby;							      \
+-									      \
+-      while ((status = internal_getent (result, buffer, buflen, errnop	      \
+-					H_ERRNO_ARG EXTRA_ARGS_VALUE))	      \
+-	     == NSS_STATUS_SUCCESS)					      \
+-	{ break_if_match }						      \
+-									      \
+-      if (status == NSS_STATUS_SUCCESS					      \
+-	  && _res_hconf.flags & HCONF_FLAG_MULTI)			      \
+-	{								      \
+-	  /* We have to get all host entries from the file.  */		      \
+-	  size_t tmp_buflen = MIN (buflen, 4096);			      \
+-	  char tmp_buffer_stack[tmp_buflen]				      \
+-	    __attribute__ ((__aligned__ (__alignof__ (struct hostent_data))));\
+-	  char *tmp_buffer = tmp_buffer_stack;				      \
+-	  struct hostent tmp_result_buf;				      \
+-	  int naddrs = 1;						      \
+-	  int naliases = 0;						      \
+-	  char *bufferend;						      \
+-	  bool tmp_buffer_malloced = false;				      \
+-									      \
+-	  while (result->h_aliases[naliases] != NULL)			      \
+-	    ++naliases;							      \
+-									      \
+-	  bufferend = (char *) &result->h_aliases[naliases + 1];	      \
+-									      \
+-	again:								      \
+-	  while ((status = internal_getent (&tmp_result_buf, tmp_buffer,      \
+-					    tmp_buflen, errnop H_ERRNO_ARG    \
+-					    EXTRA_ARGS_VALUE))		      \
+-		 == NSS_STATUS_SUCCESS)					      \
+-	    {								      \
+-	      int matches = 1;						      \
+-	      struct hostent *old_result = result;			      \
+-	      result = &tmp_result_buf;					      \
+-	      /* The following piece is a bit clumsy but we want to use the   \
+-		 `break_if_match' value.  The optimizer should do its	      \
+-		 job.  */						      \
+-	      do							      \
+-		{							      \
+-		  break_if_match					      \
+-		  result = old_result;					      \
+-		}							      \
+-	      while ((matches = 0));					      \
+-									      \
+-	      if (matches)						      \
+-		{							      \
+-		  /* We could be very clever and try to recycle a few bytes   \
+-		     in the buffer instead of generating new arrays.  But     \
+-		     we are not doing this here since it's more work than     \
+-		     it's worth.  Simply let the user provide a bit bigger    \
+-		     buffer.  */					      \
+-		  char **new_h_addr_list;				      \
+-		  char **new_h_aliases;					      \
+-		  int newaliases = 0;					      \
+-		  size_t newstrlen = 0;					      \
+-		  int cnt;						      \
+-									      \
+-		  /* Count the new aliases and the length of the strings.  */ \
+-		  while (tmp_result_buf.h_aliases[newaliases] != NULL)	      \
+-		    {							      \
+-		      char *cp = tmp_result_buf.h_aliases[newaliases];	      \
+-		      ++newaliases;					      \
+-		      newstrlen += strlen (cp) + 1;			      \
+-		    }							      \
+-		  /* If the real name is different add it also to the	      \
+-		     aliases.  This means that there is a duplication	      \
+-		     in the alias list but this is really the user's	      \
+-		     problem.  */					      \
+-		  if (strcmp (old_result->h_name,			      \
+-			      tmp_result_buf.h_name) != 0)		      \
+-		    {							      \
+-		      ++newaliases;					      \
+-		      newstrlen += strlen (tmp_result_buf.h_name) + 1;	      \
+-		    }							      \
+-									      \
+-		  /* Make sure bufferend is aligned.  */		      \
+-		  assert ((bufferend - (char *) 0) % sizeof (char *) == 0);   \
+-									      \
+-		  /* Now we can check whether the buffer is large enough.     \
+-		     16 is the maximal size of the IP address.  */	      \
+-		  if (bufferend + 16 + (naddrs + 2) * sizeof (char *)	      \
+-		      + roundup (newstrlen, sizeof (char *))		      \
+-		      + (naliases + newaliases + 1) * sizeof (char *)	      \
+-		      >= buffer + buflen)				      \
+-		    {							      \
+-		      *errnop = ERANGE;					      \
+-		      *herrnop = NETDB_INTERNAL;			      \
+-		      status = NSS_STATUS_TRYAGAIN;			      \
+-		      goto out;						      \
+-		    }							      \
+-									      \
+-		  new_h_addr_list =					      \
+-		    (char **) (bufferend				      \
+-			       + roundup (newstrlen, sizeof (char *))	      \
+-			       + 16);					      \
+-		  new_h_aliases =					      \
+-		    (char **) ((char *) new_h_addr_list			      \
+-			       + (naddrs + 2) * sizeof (char *));	      \
+-									      \
+-		  /* Copy the old data in the new arrays.  */		      \
+-		  for (cnt = 0; cnt < naddrs; ++cnt)			      \
+-		    new_h_addr_list[cnt] = old_result->h_addr_list[cnt];      \
+-									      \
+-		  for (cnt = 0; cnt < naliases; ++cnt)			      \
+-		    new_h_aliases[cnt] = old_result->h_aliases[cnt];	      \
+-									      \
+-		  /* Store the new strings.  */				      \
+-		  cnt = 0;						      \
+-		  while (tmp_result_buf.h_aliases[cnt] != NULL)		      \
+-		    {							      \
+-		      new_h_aliases[naliases++] = bufferend;		      \
+-		      bufferend = (__stpcpy (bufferend,			      \
+-					     tmp_result_buf.h_aliases[cnt])   \
+-				   + 1);				      \
+-		      ++cnt;						      \
+-		    }							      \
+-									      \
+-		  if (cnt < newaliases)					      \
+-		    {							      \
+-		      new_h_aliases[naliases++] = bufferend;		      \
+-		      bufferend = __stpcpy (bufferend,			      \
+-					    tmp_result_buf.h_name) + 1;	      \
+-		    }							      \
+-									      \
+-		  /* Final NULL pointer.  */				      \
+-		  new_h_aliases[naliases] = NULL;			      \
+-									      \
+-		  /* Round up the buffer end address.  */		      \
+-		  bufferend += (sizeof (char *)				      \
+-				- ((bufferend - (char *) 0)		      \
+-				   % sizeof (char *))) % sizeof (char *);     \
+-									      \
+-		  /* Now the new address.  */				      \
+-		  new_h_addr_list[naddrs++] =				      \
+-		    memcpy (bufferend, tmp_result_buf.h_addr,		      \
+-			    tmp_result_buf.h_length);			      \
+-									      \
+-		  /* Also here a final NULL pointer.  */		      \
+-		  new_h_addr_list[naddrs] = NULL;			      \
+-									      \
+-		  /* Store the new array pointers.  */			      \
+-		  old_result->h_aliases = new_h_aliases;		      \
+-		  old_result->h_addr_list = new_h_addr_list;		      \
+-									      \
+-		  /* Compute the new buffer end.  */			      \
+-		  bufferend = (char *) &new_h_aliases[naliases + 1];	      \
+-		  assert (bufferend <= buffer + buflen);		      \
+-									      \
+-		  result = old_result;					      \
+-		}							      \
+-	    }								      \
+-									      \
+-	  if (status == NSS_STATUS_TRYAGAIN)				      \
+-	    {								      \
+-	      size_t newsize = 2 * tmp_buflen;				      \
+-	      if (tmp_buffer_malloced)					      \
+-		{							      \
+-		  char *newp = realloc (tmp_buffer, newsize);		      \
+-		  if (newp != NULL)					      \
+-		    {							      \
+-		      assert ((((uintptr_t) newp)			      \
+-			       & (__alignof__ (struct hostent_data) - 1))     \
+-			      == 0);					      \
+-		      tmp_buffer = newp;				      \
+-		      tmp_buflen = newsize;				      \
+-		      goto again;					      \
+-		    }							      \
+-		}							      \
+-	      else if (!__libc_use_alloca (buflen + newsize))		      \
+-		{							      \
+-		  tmp_buffer = malloc (newsize);			      \
+-		  if (tmp_buffer != NULL)				      \
+-		    {							      \
+-		      assert ((((uintptr_t) tmp_buffer)			      \
+-			       & (__alignof__ (struct hostent_data) - 1))     \
+-			      == 0);					      \
+-		      tmp_buffer_malloced = true;			      \
+-		      tmp_buflen = newsize;				      \
+-		      goto again;					      \
+-		    }							      \
+-		}							      \
+-	      else							      \
+-		{							      \
+-		  tmp_buffer						      \
+-		    = extend_alloca (tmp_buffer, tmp_buflen,		      \
+-				     newsize				      \
+-				     + __alignof__ (struct hostent_data));    \
+-		  tmp_buffer = (char *) (((uintptr_t) tmp_buffer	      \
+-					  + __alignof__ (struct hostent_data) \
+-					  - 1)				      \
+-					 & ~(__alignof__ (struct hostent_data)\
+-					     - 1));			      \
+-		  goto again;						      \
+-		}							      \
+-	    }								      \
+-	  else								      \
+-	    status = NSS_STATUS_SUCCESS;				      \
+-	out:								      \
+-	  if (tmp_buffer_malloced)					      \
+-	    free (tmp_buffer);						      \
+-	}								      \
+-									      \
+-									      \
+-      if (! keep_stream)						      \
+-	internal_endent ();						      \
+-    }									      \
+-									      \
+-  __libc_lock_unlock (lock);						      \
+-									      \
+-  return status;							      \
+-}
+-
+-
+ #define EXTRA_ARGS_VALUE \
+   , ((_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET),		      \
+   ((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0)
+ #include "files-XXX.c"
+-HOST_DB_LOOKUP (hostbyname, ,,
+-		{
+-		  LOOKUP_NAME_CASE (h_name, h_aliases)
+-		}, const char *name)
+ #undef EXTRA_ARGS_VALUE
+ 
+-
+-/* XXX Is using _res to determine whether we want to convert IPv4 addresses
+-   to IPv6 addresses really the right thing to do?  */
+-#define EXTRA_ARGS_VALUE \
+-  , af, ((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0)
+-HOST_DB_LOOKUP (hostbyname2, ,,
+-		{
+-		  LOOKUP_NAME_CASE (h_name, h_aliases)
+-		}, const char *name, int af)
+-#undef EXTRA_ARGS_VALUE
+-
+-
+ /* We only need to consider IPv4 mapped addresses if the input to the
+    gethostbyaddr() function is an IPv6 address.  */
+ #define EXTRA_ARGS_VALUE \
+@@ -365,6 +115,263 @@ DB_LOOKUP (hostbyaddr, ,,,
+ 	   }, const void *addr, socklen_t len, int af)
+ #undef EXTRA_ARGS_VALUE
+ 
++enum nss_status
++_nss_files_gethostbyname3_r (const char *name, int af, struct hostent *result,
++			     char *buffer, size_t buflen, int *errnop,
++			     int *herrnop, int32_t *ttlp, char **canonp)
++{
++  uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct hostent_data);
++  buffer += pad;
++  buflen = buflen > pad ? buflen - pad : 0;
++
++  __libc_lock_lock (lock);
++
++  /* Reset file pointer to beginning or open file.  */
++  enum nss_status status = internal_setent (keep_stream);
++
++  if (status == NSS_STATUS_SUCCESS)
++    {
++      /* XXX Is using _res to determine whether we want to convert IPv4
++         addresses to IPv6 addresses really the right thing to do?  */
++      int flags = ((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0);
++
++      /* Tell getent function that we have repositioned the file pointer.  */
++      last_use = getby;
++
++      while ((status = internal_getent (result, buffer, buflen, errnop,
++					herrnop, af, flags))
++	     == NSS_STATUS_SUCCESS)
++	{
++	  LOOKUP_NAME_CASE (h_name, h_aliases)
++	}
++
++      if (status == NSS_STATUS_SUCCESS
++	  && _res_hconf.flags & HCONF_FLAG_MULTI)
++	{
++	  /* We have to get all host entries from the file.  */
++	  size_t tmp_buflen = MIN (buflen, 4096);
++	  char tmp_buffer_stack[tmp_buflen]
++	    __attribute__ ((__aligned__ (__alignof__ (struct hostent_data))));
++	  char *tmp_buffer = tmp_buffer_stack;
++	  struct hostent tmp_result_buf;
++	  int naddrs = 1;
++	  int naliases = 0;
++	  char *bufferend;
++	  bool tmp_buffer_malloced = false;
++
++	  while (result->h_aliases[naliases] != NULL)
++	    ++naliases;
++
++	  bufferend = (char *) &result->h_aliases[naliases + 1];
++
++	again:
++	  while ((status = internal_getent (&tmp_result_buf, tmp_buffer,
++					    tmp_buflen, errnop, herrnop, af,
++					    flags))
++		 == NSS_STATUS_SUCCESS)
++	    {
++	      int matches = 1;
++	      struct hostent *old_result = result;
++	      result = &tmp_result_buf;
++	      /* The following piece is a bit clumsy but we want to use the
++		 `LOOKUP_NAME_CASE' value.  The optimizer should do its
++		 job.  */
++	      do
++		{
++		  LOOKUP_NAME_CASE (h_name, h_aliases)
++		  result = old_result;
++		}
++	      while ((matches = 0));
++
++	      if (matches)
++		{
++		  /* We could be very clever and try to recycle a few bytes
++		     in the buffer instead of generating new arrays.  But
++		     we are not doing this here since it's more work than
++		     it's worth.  Simply let the user provide a bit bigger
++		     buffer.  */
++		  char **new_h_addr_list;
++		  char **new_h_aliases;
++		  int newaliases = 0;
++		  size_t newstrlen = 0;
++		  int cnt;
++
++		  /* Count the new aliases and the length of the strings.  */
++		  while (tmp_result_buf.h_aliases[newaliases] != NULL)
++		    {
++		      char *cp = tmp_result_buf.h_aliases[newaliases];
++		      ++newaliases;
++		      newstrlen += strlen (cp) + 1;
++		    }
++		  /* If the real name is different add it also to the
++		     aliases.  This means that there is a duplication
++		     in the alias list but this is really the user's
++		     problem.  */
++		  if (strcmp (old_result->h_name,
++			      tmp_result_buf.h_name) != 0)
++		    {
++		      ++newaliases;
++		      newstrlen += strlen (tmp_result_buf.h_name) + 1;
++		    }
++
++		  /* Make sure bufferend is aligned.  */
++		  assert ((bufferend - (char *) 0) % sizeof (char *) == 0);
++
++		  /* Now we can check whether the buffer is large enough.
++		     16 is the maximal size of the IP address.  */
++		  if (bufferend + 16 + (naddrs + 2) * sizeof (char *)
++		      + roundup (newstrlen, sizeof (char *))
++		      + (naliases + newaliases + 1) * sizeof (char *)
++		      >= buffer + buflen)
++		    {
++		      *errnop = ERANGE;
++		      *herrnop = NETDB_INTERNAL;
++		      status = NSS_STATUS_TRYAGAIN;
++		      goto out;
++		    }
++
++		  new_h_addr_list =
++		    (char **) (bufferend
++			       + roundup (newstrlen, sizeof (char *))
++			       + 16);
++		  new_h_aliases =
++		    (char **) ((char *) new_h_addr_list
++			       + (naddrs + 2) * sizeof (char *));
++
++		  /* Copy the old data in the new arrays.  */
++		  for (cnt = 0; cnt < naddrs; ++cnt)
++		    new_h_addr_list[cnt] = old_result->h_addr_list[cnt];
++
++		  for (cnt = 0; cnt < naliases; ++cnt)
++		    new_h_aliases[cnt] = old_result->h_aliases[cnt];
++
++		  /* Store the new strings.  */
++		  cnt = 0;
++		  while (tmp_result_buf.h_aliases[cnt] != NULL)
++		    {
++		      new_h_aliases[naliases++] = bufferend;
++		      bufferend = (__stpcpy (bufferend,
++					     tmp_result_buf.h_aliases[cnt])
++				   + 1);
++		      ++cnt;
++		    }
++
++		  if (cnt < newaliases)
++		    {
++		      new_h_aliases[naliases++] = bufferend;
++		      bufferend = __stpcpy (bufferend,
++					    tmp_result_buf.h_name) + 1;
++		    }
++
++		  /* Final NULL pointer.  */
++		  new_h_aliases[naliases] = NULL;
++
++		  /* Round up the buffer end address.  */
++		  bufferend += (sizeof (char *)
++				- ((bufferend - (char *) 0)
++				   % sizeof (char *))) % sizeof (char *);
++
++		  /* Now the new address.  */
++		  new_h_addr_list[naddrs++] =
++		    memcpy (bufferend, tmp_result_buf.h_addr,
++			    tmp_result_buf.h_length);
++
++		  /* Also here a final NULL pointer.  */
++		  new_h_addr_list[naddrs] = NULL;
++
++		  /* Store the new array pointers.  */
++		  old_result->h_aliases = new_h_aliases;
++		  old_result->h_addr_list = new_h_addr_list;
++
++		  /* Compute the new buffer end.  */
++		  bufferend = (char *) &new_h_aliases[naliases + 1];
++		  assert (bufferend <= buffer + buflen);
++
++		  result = old_result;
++		}
++	    }
++
++	  if (status == NSS_STATUS_TRYAGAIN)
++	    {
++	      size_t newsize = 2 * tmp_buflen;
++	      if (tmp_buffer_malloced)
++		{
++		  char *newp = realloc (tmp_buffer, newsize);
++		  if (newp != NULL)
++		    {
++		      assert ((((uintptr_t) newp)
++			       & (__alignof__ (struct hostent_data) - 1))
++			      == 0);
++		      tmp_buffer = newp;
++		      tmp_buflen = newsize;
++		      goto again;
++		    }
++		}
++	      else if (!__libc_use_alloca (buflen + newsize))
++		{
++		  tmp_buffer = malloc (newsize);
++		  if (tmp_buffer != NULL)
++		    {
++		      assert ((((uintptr_t) tmp_buffer)
++			       & (__alignof__ (struct hostent_data) - 1))
++			      == 0);
++		      tmp_buffer_malloced = true;
++		      tmp_buflen = newsize;
++		      goto again;
++		    }
++		}
++	      else
++		{
++		  tmp_buffer
++		    = extend_alloca (tmp_buffer, tmp_buflen,
++				     newsize
++				     + __alignof__ (struct hostent_data));
++		  tmp_buffer = (char *) (((uintptr_t) tmp_buffer
++					  + __alignof__ (struct hostent_data)
++					  - 1)
++					 & ~(__alignof__ (struct hostent_data)
++					     - 1));
++		  goto again;
++		}
++	    }
++	  else
++	    status = NSS_STATUS_SUCCESS;
++	out:
++	  if (tmp_buffer_malloced)
++	    free (tmp_buffer);
++	}
++
++      if (! keep_stream)
++	internal_endent ();
++    }
++
++  if (canonp && status == NSS_STATUS_SUCCESS)
++    *canonp = result->h_name;
++
++  __libc_lock_unlock (lock);
++
++  return status;
++}
++
++enum nss_status
++_nss_files_gethostbyname_r (const char *name, struct hostent *result,
++			    char *buffer, size_t buflen, int *errnop,
++			    int *herrnop)
++{
++  int af = ((_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET);
++
++  return _nss_files_gethostbyname3_r (name, af, result, buffer, buflen,
++				      errnop, herrnop, NULL, NULL);
++}
++
++enum nss_status
++_nss_files_gethostbyname2_r (const char *name, int af, struct hostent *result,
++			     char *buffer, size_t buflen, int *errnop,
++			     int *herrnop)
++{
++  return _nss_files_gethostbyname3_r (name, af, result, buffer, buflen,
++				      errnop, herrnop, NULL, NULL);
++}
+ 
+ enum nss_status
+ _nss_files_gethostbyname4_r (const char *name, struct gaih_addrtuple **pat,
diff --git a/SOURCES/glibc-rh1048036.patch b/SOURCES/glibc-rh1048036.patch
new file mode 100644
index 0000000..5d8836e
--- /dev/null
+++ b/SOURCES/glibc-rh1048036.patch
@@ -0,0 +1,29 @@
+diff --git glibc-2.17-c758a686/libio/wfileops.c glibc-2.17-c758a686/libio/wfileops.c
+index 87d3cdc..877fc1f 100644
+--- glibc-2.17-c758a686/libio/wfileops.c
++++ glibc-2.17-c758a686/libio/wfileops.c
+@@ -715,7 +715,7 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+ 		       - fp->_wide_data->_IO_write_base) / clen;
+ 	  else
+ 	    {
+-	      enum __codecvt_result status;
++	      enum __codecvt_result status = __codecvt_ok;
+ 	      delta = (fp->_wide_data->_IO_write_ptr
+ 		       - fp->_wide_data->_IO_write_base);
+ 	      const wchar_t *write_base = fp->_wide_data->_IO_write_base;
+@@ -728,9 +728,12 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+ 		 flush buffers for every ftell.  */
+ 	      do
+ 		{
+-		  /* Ugh, no point trying to avoid the flush.  Just do it
+-		     and go back to how it was with the read mode.  */
+-		  if (delta > 0 && new_write_ptr == fp->_IO_buf_end)
++		  /* There is not enough space in the buffer to do the entire
++		     conversion, so there is no point trying to avoid the
++		     buffer flush.  Just do it and go back to how it was with
++		     the read mode.  */
++		  if (status == __codecvt_partial
++		      || (delta > 0 && new_write_ptr == fp->_IO_buf_end))
+ 		    {
+ 		      if (_IO_switch_to_wget_mode (fp))
+ 			return WEOF;
diff --git a/SOURCES/glibc-rh1048123.patch b/SOURCES/glibc-rh1048123.patch
new file mode 100644
index 0000000..a90ffaa
--- /dev/null
+++ b/SOURCES/glibc-rh1048123.patch
@@ -0,0 +1,515 @@
+commit 0582f6b3d6fab2128ee43a06250571922ee7c1e3
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Sun Dec 23 09:45:07 2012 +0100
+
+    nscd: don't fork twice
+
+commit 532a60357ef4c5852cc1bf836cfd9d6f093ef204
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Mon Mar 3 22:51:39 2014 +0530
+
+    nscd: Improved support for tracking startup failure in nscd service (BZ #16639)
+    
+    Currently, the nscd parent process parses commandline options and
+    configuration, forks on startup and immediately exits with a success.
+    If the child process encounters some error after this, it goes
+    undetected and any services started up after it may have to repeatedly
+    check to make sure that the nscd service did actually start up and is
+    serving requests.
+    
+    To make this process more reliable, I have added a pipe between the
+    parent and child process, through which the child process sends a
+    notification to the parent informing it of its status.  The parent
+    waits for this status and once it receives it, exits with the
+    corresponding exit code.  So if the child service sends a success
+    status (0), the parent exits with a success status.  Similarly for
+    error conditions, the child sends the non-zero status code, which the
+    parent passes on as the exit code.
+    
+    This, along with setting the nscd service type to forking in its
+    systemd configuration file, allows systemd to be certain that the nscd
+    service is ready and is accepting connections.
+
+
+diff --git glibc-2.17-c758a686/nscd/connections.c glibc-2.17-c758a686/nscd/connections.c
+index f463f45..180ae77 100644
+--- glibc-2.17-c758a686/nscd/connections.c
++++ glibc-2.17-c758a686/nscd/connections.c
+@@ -649,8 +649,8 @@ cannot create read-only descriptor for \"%s\"; no mmap"),
+ 		  close (fd);
+ 	      }
+ 	    else if (errno == EACCES)
+-	      error (EXIT_FAILURE, 0, _("cannot access '%s'"),
+-		     dbs[cnt].db_filename);
++	      do_exit (EXIT_FAILURE, 0, _("cannot access '%s'"),
++		       dbs[cnt].db_filename);
+ 	  }
+ 
+ 	if (dbs[cnt].head == NULL)
+@@ -699,8 +699,7 @@ cannot create read-only descriptor for \"%s\"; no mmap"),
+ 		  {
+ 		    dbg_log (_("database for %s corrupted or simultaneously used; remove %s manually if necessary and restart"),
+ 			     dbnames[cnt], dbs[cnt].db_filename);
+-		    // XXX Correct way to terminate?
+-		    exit (1);
++		    do_exit (1, 0, NULL);
+ 		  }
+ 
+ 		if  (dbs[cnt].persistent)
+@@ -867,7 +866,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"),
+   if (sock < 0)
+     {
+       dbg_log (_("cannot open socket: %s"), strerror (errno));
+-      exit (errno == EACCES ? 4 : 1);
++      do_exit (errno == EACCES ? 4 : 1, 0, NULL);
+     }
+   /* Bind a name to the socket.  */
+   struct sockaddr_un sock_addr;
+@@ -876,7 +875,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"),
+   if (bind (sock, (struct sockaddr *) &sock_addr, sizeof (sock_addr)) < 0)
+     {
+       dbg_log ("%s: %s", _PATH_NSCDSOCKET, strerror (errno));
+-      exit (errno == EACCES ? 4 : 1);
++      do_exit (errno == EACCES ? 4 : 1, 0, NULL);
+     }
+ 
+ #ifndef __ASSUME_SOCK_CLOEXEC
+@@ -888,7 +887,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"),
+ 	{
+ 	  dbg_log (_("cannot change socket to nonblocking mode: %s"),
+ 		   strerror (errno));
+-	  exit (1);
++	  do_exit (1, 0, NULL);
+ 	}
+ 
+       /* The descriptor needs to be closed on exec.  */
+@@ -896,7 +895,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"),
+ 	{
+ 	  dbg_log (_("cannot set socket to close on exec: %s"),
+ 		   strerror (errno));
+-	  exit (1);
++	  do_exit (1, 0, NULL);
+ 	}
+     }
+ #endif
+@@ -909,7 +908,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"),
+     {
+       dbg_log (_("cannot enable socket to accept connections: %s"),
+ 	       strerror (errno));
+-      exit (1);
++      do_exit (1, 0, NULL);
+     }
+ 
+ #ifdef HAVE_NETLINK
+@@ -953,7 +952,7 @@ cannot set socket to close on exec: %s; disabling paranoia mode"),
+ 		      dbg_log (_("\
+ cannot change socket to nonblocking mode: %s"),
+ 			       strerror (errno));
+-		      exit (1);
++		      do_exit (1, 0, NULL);
+ 		    }
+ 
+ 		  /* The descriptor needs to be closed on exec.  */
+@@ -962,7 +961,7 @@ cannot change socket to nonblocking mode: %s"),
+ 		    {
+ 		      dbg_log (_("cannot set socket to close on exec: %s"),
+ 			       strerror (errno));
+-		      exit (1);
++		      do_exit (1, 0, NULL);
+ 		    }
+ 		}
+ # endif
+@@ -2392,7 +2391,7 @@ start_threads (void)
+       if (pthread_cond_init (&dbs[i].prune_cond, &condattr) != 0)
+ 	{
+ 	  dbg_log (_("could not initialize conditional variable"));
+-	  exit (1);
++	  do_exit (1, 0, NULL);
+ 	}
+ 
+       pthread_t th;
+@@ -2400,7 +2399,7 @@ start_threads (void)
+ 	  && pthread_create (&th, &attr, nscd_run_prune, (void *) i) != 0)
+ 	{
+ 	  dbg_log (_("could not start clean-up thread; terminating"));
+-	  exit (1);
++	  do_exit (1, 0, NULL);
+ 	}
+     }
+ 
+@@ -2414,13 +2413,17 @@ start_threads (void)
+ 	  if (i == 0)
+ 	    {
+ 	      dbg_log (_("could not start any worker thread; terminating"));
+-	      exit (1);
++	      do_exit (1, 0, NULL);
+ 	    }
+ 
+ 	  break;
+ 	}
+     }
+ 
++  /* Now it is safe to let the parent know that we're doing fine and it can
++     exit.  */
++  notify_parent (0);
++
+   /* Determine how much room for descriptors we should initially
+      allocate.  This might need to change later if we cap the number
+      with MAXCONN.  */
+@@ -2465,8 +2468,8 @@ begin_drop_privileges (void)
+   if (pwd == NULL)
+     {
+       dbg_log (_("Failed to run nscd as user '%s'"), server_user);
+-      error (EXIT_FAILURE, 0, _("Failed to run nscd as user '%s'"),
+-	     server_user);
++      do_exit (EXIT_FAILURE, 0,
++	       _("Failed to run nscd as user '%s'"), server_user);
+     }
+ 
+   server_uid = pwd->pw_uid;
+@@ -2483,7 +2486,8 @@ begin_drop_privileges (void)
+     {
+       /* This really must never happen.  */
+       dbg_log (_("Failed to run nscd as user '%s'"), server_user);
+-      error (EXIT_FAILURE, errno, _("initial getgrouplist failed"));
++      do_exit (EXIT_FAILURE, errno,
++	       _("initial getgrouplist failed"));
+     }
+ 
+   server_groups = (gid_t *) xmalloc (server_ngroups * sizeof (gid_t));
+@@ -2492,7 +2496,7 @@ begin_drop_privileges (void)
+       == -1)
+     {
+       dbg_log (_("Failed to run nscd as user '%s'"), server_user);
+-      error (EXIT_FAILURE, errno, _("getgrouplist failed"));
++      do_exit (EXIT_FAILURE, errno, _("getgrouplist failed"));
+     }
+ }
+ 
+@@ -2510,7 +2514,7 @@ finish_drop_privileges (void)
+   if (setgroups (server_ngroups, server_groups) == -1)
+     {
+       dbg_log (_("Failed to run nscd as user '%s'"), server_user);
+-      error (EXIT_FAILURE, errno, _("setgroups failed"));
++      do_exit (EXIT_FAILURE, errno, _("setgroups failed"));
+     }
+ 
+   int res;
+@@ -2521,8 +2525,7 @@ finish_drop_privileges (void)
+   if (res == -1)
+     {
+       dbg_log (_("Failed to run nscd as user '%s'"), server_user);
+-      perror ("setgid");
+-      exit (4);
++      do_exit (4, errno, "setgid");
+     }
+ 
+   if (paranoia)
+@@ -2532,8 +2535,7 @@ finish_drop_privileges (void)
+   if (res == -1)
+     {
+       dbg_log (_("Failed to run nscd as user '%s'"), server_user);
+-      perror ("setuid");
+-      exit (4);
++      do_exit (4, errno, "setuid");
+     }
+ 
+ #if defined HAVE_LIBAUDIT && defined HAVE_LIBCAP
+diff --git glibc-2.17-c758a686/nscd/nscd.c glibc-2.17-c758a686/nscd/nscd.c
+index 63d9d83..5680378 100644
+--- glibc-2.17-c758a686/nscd/nscd.c
++++ glibc-2.17-c758a686/nscd/nscd.c
+@@ -39,6 +39,8 @@
+ #include <sys/stat.h>
+ #include <sys/uio.h>
+ #include <sys/un.h>
++#include <sys/wait.h>
++#include <stdarg.h>
+ 
+ #include "dbg_log.h"
+ #include "nscd.h"
+@@ -101,6 +103,7 @@ gid_t old_gid;
+ 
+ static int check_pid (const char *file);
+ static int write_pid (const char *file);
++static int monitor_child (int fd);
+ 
+ /* Name and version of program.  */
+ static void print_version (FILE *stream, struct argp_state *state);
+@@ -142,6 +145,7 @@ static struct argp argp =
+ 
+ /* True if only statistics are requested.  */
+ static bool get_stats;
++static int parent_fd = -1;
+ 
+ int
+ main (int argc, char **argv)
+@@ -196,11 +200,27 @@ main (int argc, char **argv)
+       /* Behave like a daemon.  */
+       if (run_mode == RUN_DAEMONIZE)
+ 	{
++	  int fd[2];
++
++	  if (pipe (fd) != 0)
++	    error (EXIT_FAILURE, errno,
++		   _("cannot create a pipe to talk to the child"));
++
+ 	  pid = fork ();
+ 	  if (pid == -1)
+ 	    error (EXIT_FAILURE, errno, _("cannot fork"));
+ 	  if (pid != 0)
+-	    exit (0);
++	    {
++	      /* The parent only reads from the child.  */
++	      close (fd[1]);
++	      exit (monitor_child (fd[0]));
++	    }
++	  else
++	    {
++	      /* The child only writes to the parent.  */
++	      close (fd[0]);
++	      parent_fd = fd[1];
++	    }
+ 	}
+ 
+       int nullfd = open (_PATH_DEVNULL, O_RDWR);
+@@ -242,7 +262,8 @@ main (int argc, char **argv)
+ 	      char *endp;
+ 	      long int fdn = strtol (dirent->d_name, &endp, 10);
+ 
+-	      if (*endp == '\0' && fdn != dfdn && fdn >= min_close_fd)
++	      if (*endp == '\0' && fdn != dfdn && fdn >= min_close_fd
++		  && fdn != parent_fd)
+ 		close ((int) fdn);
+ 	    }
+ 
+@@ -250,22 +271,14 @@ main (int argc, char **argv)
+ 	}
+       else
+ 	for (i = min_close_fd; i < getdtablesize (); i++)
+-	  close (i);
++	  if (i != parent_fd)
++	    close (i);
+ 
+-      if (run_mode == RUN_DAEMONIZE)
+-	{
+-	  pid = fork ();
+-	  if (pid == -1)
+-	    error (EXIT_FAILURE, errno, _("cannot fork"));
+-	  if (pid != 0)
+-	    exit (0);
+-	}
+-
+       setsid ();
+ 
+       if (chdir ("/") != 0)
+-	error (EXIT_FAILURE, errno,
+-	       _("cannot change current working directory to \"/\""));
++	do_exit (EXIT_FAILURE, errno,
++		 _("cannot change current working directory to \"/\""));
+ 
+       openlog ("nscd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
+ 
+@@ -592,3 +614,79 @@ write_pid (const char *file)
+ 
+   return result;
+ }
++
++static int
++monitor_child (int fd)
++{
++  int child_ret = 0;
++  int ret = read (fd, &child_ret, sizeof (child_ret));
++
++  /* The child terminated with an error, either via exit or some other abnormal
++     method, like a segfault.  */
++  if (ret <= 0 || child_ret != 0)
++    {
++      int err = wait (&child_ret);
++
++      if (err < 0)
++	{
++	  fprintf (stderr, _("wait failed"));
++	  return 1;
++	}
++
++      fprintf (stderr, _("child exited with status %d"),
++	       WEXITSTATUS (child_ret));
++      if (WIFSIGNALED (child_ret))
++	fprintf (stderr, _(", terminated by signal %d.\n"),
++		 WTERMSIG (child_ret));
++      else
++	fprintf (stderr, ".\n");
++    }
++
++  /* We have the child status, so exit with that code.  */
++  close (fd);
++
++  return child_ret;
++}
++
++void
++do_exit (int child_ret, int errnum, const char *format, ...)
++{
++  if (parent_fd != -1)
++    {
++      int ret = write (parent_fd, &child_ret, sizeof (child_ret));
++      assert (ret == sizeof (child_ret));
++      close (parent_fd);
++    }
++
++  if (format != NULL)
++    {
++      /* Emulate error() since we don't have a va_list variant for it.  */
++      va_list argp;
++
++      fflush (stdout);
++
++      fprintf (stderr, "%s: ", program_invocation_name);
++
++      va_start (argp, format);
++      vfprintf (stderr, format, argp);
++      va_end (argp);
++
++      fprintf (stderr, ": %s\n", strerror (errnum));
++      fflush (stderr);
++    }
++
++  /* Finally, exit.  */
++  exit (child_ret);
++}
++
++void
++notify_parent (int child_ret)
++{
++  if (parent_fd == -1)
++    return;
++
++  int ret = write (parent_fd, &child_ret, sizeof (child_ret));
++  assert (ret == sizeof (child_ret));
++  close (parent_fd);
++  parent_fd = -1;
++}
+diff --git glibc-2.17-c758a686/nscd/nscd.h glibc-2.17-c758a686/nscd/nscd.h
+index 972f462..529b3f5 100644
+--- glibc-2.17-c758a686/nscd/nscd.h
++++ glibc-2.17-c758a686/nscd/nscd.h
+@@ -205,6 +205,8 @@ extern gid_t old_gid;
+ /* nscd.c */
+ extern void termination_handler (int signum) __attribute__ ((__noreturn__));
+ extern int nscd_open_socket (void);
++void notify_parent (int child_ret);
++void do_exit (int child_ret, int errnum, const char *format, ...);
+ 
+ /* connections.c */
+ extern void nscd_init (void);
+diff --git glibc-2.17-c758a686/nscd/selinux.c glibc-2.17-c758a686/nscd/selinux.c
+index e477254..46b0ea9 100644
+--- glibc-2.17-c758a686/nscd/selinux.c
++++ glibc-2.17-c758a686/nscd/selinux.c
+@@ -179,7 +179,7 @@ preserve_capabilities (void)
+   if (prctl (PR_SET_KEEPCAPS, 1) == -1)
+     {
+       dbg_log (_("Failed to set keep-capabilities"));
+-      error (EXIT_FAILURE, errno, _("prctl(KEEPCAPS) failed"));
++      do_exit (EXIT_FAILURE, errno, _("prctl(KEEPCAPS) failed"));
+       /* NOTREACHED */
+     }
+ 
+@@ -194,7 +194,7 @@ preserve_capabilities (void)
+ 	cap_free (tmp_caps);
+ 
+       dbg_log (_("Failed to initialize drop of capabilities"));
+-      error (EXIT_FAILURE, 0, _("cap_init failed"));
++      do_exit (EXIT_FAILURE, 0, _("cap_init failed"));
+     }
+ 
+   /* There is no reason why these should not work.  */
+@@ -216,7 +216,7 @@ preserve_capabilities (void)
+     {
+       cap_free (new_caps);
+       dbg_log (_("Failed to drop capabilities"));
+-      error (EXIT_FAILURE, 0, _("cap_set_proc failed"));
++      do_exit (EXIT_FAILURE, 0, _("cap_set_proc failed"));
+     }
+ 
+   return new_caps;
+@@ -233,7 +233,7 @@ install_real_capabilities (cap_t new_caps)
+     {
+       cap_free (new_caps);
+       dbg_log (_("Failed to drop capabilities"));
+-      error (EXIT_FAILURE, 0, _("cap_set_proc failed"));
++      do_exit (EXIT_FAILURE, 0, _("cap_set_proc failed"));
+       /* NOTREACHED */
+     }
+ 
+@@ -242,7 +242,7 @@ install_real_capabilities (cap_t new_caps)
+   if (prctl (PR_SET_KEEPCAPS, 0) == -1)
+     {
+       dbg_log (_("Failed to unset keep-capabilities"));
+-      error (EXIT_FAILURE, errno, _("prctl(KEEPCAPS) failed"));
++      do_exit (EXIT_FAILURE, errno, _("prctl(KEEPCAPS) failed"));
+       /* NOTREACHED */
+     }
+ }
+@@ -258,7 +258,7 @@ nscd_selinux_enabled (int *selinux_enabled)
+   if (*selinux_enabled < 0)
+     {
+       dbg_log (_("Failed to determine if kernel supports SELinux"));
+-      exit (EXIT_FAILURE);
++      do_exit (EXIT_FAILURE, 0, NULL);
+     }
+ }
+ 
+@@ -272,7 +272,7 @@ avc_create_thread (void (*run) (void))
+   rc =
+     pthread_create (&avc_notify_thread, NULL, (void *(*) (void *)) run, NULL);
+   if (rc != 0)
+-    error (EXIT_FAILURE, rc, _("Failed to start AVC thread"));
++    do_exit (EXIT_FAILURE, rc, _("Failed to start AVC thread"));
+ 
+   return &avc_notify_thread;
+ }
+@@ -294,7 +294,7 @@ avc_alloc_lock (void)
+ 
+   avc_mutex = malloc (sizeof (pthread_mutex_t));
+   if (avc_mutex == NULL)
+-    error (EXIT_FAILURE, errno, _("Failed to create AVC lock"));
++    do_exit (EXIT_FAILURE, errno, _("Failed to create AVC lock"));
+   pthread_mutex_init (avc_mutex, NULL);
+ 
+   return avc_mutex;
+@@ -334,7 +334,7 @@ nscd_avc_init (void)
+   avc_entry_ref_init (&aeref);
+ 
+   if (avc_init ("avc", NULL, &log_cb, &thread_cb, &lock_cb) < 0)
+-    error (EXIT_FAILURE, errno, _("Failed to start AVC"));
++    do_exit (EXIT_FAILURE, errno, _("Failed to start AVC"));
+   else
+     dbg_log (_("Access Vector Cache (AVC) started"));
+ #ifdef HAVE_LIBAUDIT
+--- glibc-2.17-c758a686/releng/nscd.service	2012-11-06 03:03:19.000000000 +0530
++++ glibc-2.17-c758a686/releng/nscd.service	2014-02-28 16:59:51.096630222 +0530
+@@ -1,10 +1,13 @@
++# systemd service file for nscd
++
+ [Unit]
+ Description=Name Service Cache Daemon
+ After=syslog.target
+ 
+ [Service]
++Type=forking
+ EnvironmentFile=-/etc/sysconfig/nscd
+-ExecStart=/usr/sbin/nscd --foreground $NSCD_OPTIONS
++ExecStart=/usr/sbin/nscd $NSCD_OPTIONS
+ ExecStop=/usr/sbin/nscd --shutdown
+ ExecReload=/usr/sbin/nscd -i passwd
+ ExecReload=/usr/sbin/nscd -i group
+@@ -12,6 +14,7 @@
+ ExecReload=/usr/sbin/nscd -i services
+ ExecReload=/usr/sbin/nscd -i netgroup
+ Restart=always
++PIDFile=/run/nscd/nscd.pid
+ 
+ [Install]
+ WantedBy=multi-user.target
diff --git a/SOURCES/glibc-rh1063681.patch b/SOURCES/glibc-rh1063681.patch
new file mode 100644
index 0000000..c8ad2c2
--- /dev/null
+++ b/SOURCES/glibc-rh1063681.patch
@@ -0,0 +1,948 @@
+diff --git glibc-2.17-c758a686/libio/Makefile glibc-2.17-c758a686/libio/Makefile
+index 22dbcae..488ee51 100644
+--- glibc-2.17-c758a686/libio/Makefile
++++ glibc-2.17-c758a686/libio/Makefile
+@@ -60,7 +60,7 @@ tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc   \
+ 	tst-wmemstream1 tst-wmemstream2 \
+ 	bug-memstream1 bug-wmemstream1 \
+ 	tst-setvbuf1 tst-popen1 tst-fgetwc bug-wsetpos tst-fseek \
+-	tst-fwrite-error
++	tst-fwrite-error tst-ftell-active-handler
+ ifeq (yes,$(build-shared))
+ # Add test-fopenloc only if shared library is enabled since it depends on
+ # shared localedata objects.
+diff --git glibc-2.17-c758a686/libio/fileops.c glibc-2.17-c758a686/libio/fileops.c
+index a3499be..2e7bc8d 100644
+--- glibc-2.17-c758a686/libio/fileops.c
++++ glibc-2.17-c758a686/libio/fileops.c
+@@ -929,6 +929,93 @@ _IO_file_sync_mmap (_IO_FILE *fp)
+   return 0;
+ }
+ 
++/* Get the current file offset using a system call.  This is the safest method
++   to get the current file offset, since we are sure that we get the current
++   state of the file.  Before the stream handle is activated (by using fread,
++   fwrite, etc.), an application may alter the state of the file descriptor
++   underlying it by calling read/write/lseek on it.  Using a cached offset at
++   this point will result in returning the incorrect value.  Same is the case
++   when one switches from reading in a+ mode to writing, where the buffer has
++   not been flushed - the cached offset would reflect the reading position
++   while the actual write position would be at the end of the file.
++
++   do_ftell and do_ftell_wide may resort to using the cached offset in some
++   special cases instead of calling get_file_offset, but those cases should be
++   thoroughly described.  */
++_IO_off64_t
++get_file_offset (_IO_FILE *fp)
++{
++  if ((fp->_flags & _IO_IS_APPENDING) == _IO_IS_APPENDING)
++    {
++      struct stat64 st;
++      bool ret = (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode));
++      if (ret)
++	return st.st_size;
++      else
++	return EOF;
++    }
++  else
++    return _IO_SYSSEEK (fp, 0, _IO_seek_cur);
++}
++
++
++/* ftell{,o} implementation.  Don't modify any state of the file pointer while
++   we try to get the current state of the stream.  */
++static _IO_off64_t
++do_ftell (_IO_FILE *fp)
++{
++  _IO_off64_t result = 0;
++  bool use_cached_offset = false;
++
++  /* No point looking at unflushed data if we haven't allocated buffers
++     yet.  */
++  if (fp->_IO_buf_base != NULL)
++    {
++      bool was_writing = (fp->_IO_write_ptr > fp->_IO_write_base
++			  || _IO_in_put_mode (fp));
++
++      /* Adjust for unflushed data.  */
++      if (!was_writing)
++	result -= fp->_IO_read_end - fp->_IO_read_ptr;
++      else
++	result += fp->_IO_write_ptr - fp->_IO_read_end;
++
++      /* It is safe to use the cached offset when available if there is
++	 unbuffered data (indicating that the file handle is active) and the
++	 handle is not for a file open in a+ mode.  The latter condition is
++	 because there could be a scenario where there is a switch from read
++	 mode to write mode using an fseek to an arbitrary position.  In this
++	 case, there would be unbuffered data due to be appended to the end of
++	 the file, but the offset may not necessarily be the end of the
++	 file.  It is fine to use the cached offset when the a+ stream is in
++	 read mode though, since the offset is maintained correctly in that
++	 case.  Note that this is not a comprehensive set of cases when the
++	 offset is reliable.  The offset may be reliable even in some cases
++	 where there is no unflushed input and the handle is active, but it's
++	 just that we don't have a way to identify that condition reliably.  */
++      use_cached_offset = (result != 0 && fp->_offset != _IO_pos_BAD
++			   && ((fp->_flags & (_IO_IS_APPENDING | _IO_NO_READS))
++			       == (_IO_IS_APPENDING | _IO_NO_READS)
++			       && was_writing));
++    }
++
++  if (use_cached_offset)
++    result += fp->_offset;
++  else
++    result += get_file_offset (fp);
++
++  if (result == EOF)
++    return result;
++
++  if (result < 0)
++    {
++      __set_errno (EINVAL);
++      return EOF;
++    }
++
++  return result;
++}
++
+ 
+ _IO_off64_t
+ _IO_new_file_seekoff (fp, offset, dir, mode)
+@@ -940,6 +1027,13 @@ _IO_new_file_seekoff (fp, offset, dir, mode)
+   _IO_off64_t result;
+   _IO_off64_t delta, new_offset;
+   long count;
++
++  /* Short-circuit into a separate function.  We don't want to mix any
++     functionality and we don't want to touch anything inside the FILE
++     object. */
++  if (mode == 0)
++    return do_ftell (fp);
++
+   /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
+      offset of the underlying file must be exact.  */
+   int must_be_exact = (fp->_IO_read_base == fp->_IO_read_end
+@@ -948,9 +1042,6 @@ _IO_new_file_seekoff (fp, offset, dir, mode)
+   bool was_writing = (fp->_IO_write_ptr > fp->_IO_write_base
+ 		      || _IO_in_put_mode (fp));
+ 
+-  if (mode == 0)
+-    dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
+-
+   /* Flush unwritten characters.
+      (This may do an unneeded write if we seek within the buffer.
+      But to be able to switch to reading, we would need to set
+@@ -958,7 +1049,7 @@ _IO_new_file_seekoff (fp, offset, dir, mode)
+      which assumes file_ptr() is eGptr.  Anyway, since we probably
+      end up flushing when we close(), it doesn't make much difference.)
+      FIXME: simulate mem-mapped files. */
+-  else if (was_writing && _IO_switch_to_get_mode (fp))
++  if (was_writing && _IO_switch_to_get_mode (fp))
+     return EOF;
+ 
+   if (fp->_IO_buf_base == NULL)
+@@ -978,30 +1069,10 @@ _IO_new_file_seekoff (fp, offset, dir, mode)
+     {
+     case _IO_seek_cur:
+       /* Adjust for read-ahead (bytes is buffer). */
+-      if (mode != 0 || !was_writing)
+-	offset -= fp->_IO_read_end - fp->_IO_read_ptr;
+-      else
+-	{
+-	  /* _IO_read_end coincides with fp._offset, so the actual file position
+-	     is fp._offset - (_IO_read_end - new_write_ptr).  This is fine
+-	     even if fp._offset is not set, since fp->_IO_read_end is then at
+-	     _IO_buf_base and this adjustment is for unbuffered output.  */
+-	  offset -= fp->_IO_read_end - fp->_IO_write_ptr;
+-	}
++      offset -= fp->_IO_read_end - fp->_IO_read_ptr;
+ 
+       if (fp->_offset == _IO_pos_BAD)
+-	{
+-	  if (mode != 0)
+-	    goto dumb;
+-	  else
+-	    {
+-	      result = _IO_SYSSEEK (fp, 0, dir);
+-	      if (result == EOF)
+-		return result;
+-
+-	      fp->_offset = result;
+-	    }
+-	}
++	goto dumb;
+       /* Make offset absolute, assuming current pointer is file_ptr(). */
+       offset += fp->_offset;
+       if (offset < 0)
+@@ -1028,10 +1099,6 @@ _IO_new_file_seekoff (fp, offset, dir, mode)
+     }
+   /* At this point, dir==_IO_seek_set. */
+ 
+-  /* If we are only interested in the current position we've found it now.  */
+-  if (mode == 0)
+-    return offset;
+-
+   /* If destination is within current buffer, optimize: */
+   if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
+       && !_IO_in_backup (fp))
+diff --git glibc-2.17-c758a686/libio/iofdopen.c glibc-2.17-c758a686/libio/iofdopen.c
+index 066ff19..3f266f7 100644
+--- glibc-2.17-c758a686/libio/iofdopen.c
++++ glibc-2.17-c758a686/libio/iofdopen.c
+@@ -141,9 +141,6 @@ _IO_new_fdopen (fd, mode)
+ #ifdef _IO_MTSAFE_IO
+   new_f->fp.file._lock = &new_f->lock;
+ #endif
+-  /* Set up initially to use the `maybe_mmap' jump tables rather than using
+-     __fopen_maybe_mmap to do it, because we need them in place before we
+-     call _IO_file_attach or else it will allocate a buffer immediately.  */
+   _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd,
+ #ifdef _G_HAVE_MMAP
+ 	       (use_mmap && (read_write & _IO_NO_WRITES))
+@@ -159,13 +156,12 @@ _IO_new_fdopen (fd, mode)
+ #if  !_IO_UNIFIED_JUMPTABLES
+   new_f->fp.vtable = NULL;
+ #endif
+-  if (_IO_file_attach ((_IO_FILE *) &new_f->fp, fd) == NULL)
+-    {
+-      _IO_setb (&new_f->fp.file, NULL, NULL, 0);
+-      _IO_un_link (&new_f->fp);
+-      free (new_f);
+-      return NULL;
+-    }
++  /* We only need to record the fd because _IO_file_init will have unset the
++     offset.  It is important to unset the cached offset because the real
++     offset in the file could change between now and when the handle is
++     activated and we would then mislead ftell into believing that we have a
++     valid offset.  */
++  new_f->fp.file._fileno = fd;
+   new_f->fp.file._flags &= ~_IO_DELETE_DONT_CLOSE;
+ 
+   _IO_mask_flags (&new_f->fp.file, read_write,
+diff --git glibc-2.17-c758a686/libio/iofwide.c glibc-2.17-c758a686/libio/iofwide.c
+index 5cff632..64187e4 100644
+--- glibc-2.17-c758a686/libio/iofwide.c
++++ glibc-2.17-c758a686/libio/iofwide.c
+@@ -199,12 +199,6 @@ _IO_fwide (fp, mode)
+ 
+       /* From now on use the wide character callback functions.  */
+       ((struct _IO_FILE_plus *) fp)->vtable = fp->_wide_data->_wide_vtable;
+-
+-      /* One last twist: we get the current stream position.  The wide
+-	 char streams have much more problems with not knowing the
+-	 current position and so we should disable the optimization
+-	 which allows the functions without knowing the position.  */
+-      fp->_offset = _IO_SYSSEEK (fp, 0, _IO_seek_cur);
+     }
+ 
+   /* Set the mode now.  */
+diff --git glibc-2.17-c758a686/libio/libioP.h glibc-2.17-c758a686/libio/libioP.h
+index 4ca723c..8a7b85b 100644
+--- glibc-2.17-c758a686/libio/libioP.h
++++ glibc-2.17-c758a686/libio/libioP.h
+@@ -397,6 +397,7 @@ extern void _IO_wdoallocbuf (_IO_FILE *) __THROW;
+ libc_hidden_proto (_IO_wdoallocbuf)
+ extern void _IO_unsave_wmarkers (_IO_FILE *) __THROW;
+ extern unsigned _IO_adjust_wcolumn (unsigned, const wchar_t *, int) __THROW;
++extern _IO_off64_t get_file_offset (_IO_FILE *fp);
+ 
+ /* Marker-related function. */
+ 
+diff --git glibc-2.17-c758a686/libio/tst-ftell-active-handler.c glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
+new file mode 100644
+index 0000000..175e904
+--- /dev/null
++++ glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
+@@ -0,0 +1,384 @@
++/* Verify that ftell returns the correct value at various points before and
++   after the handler on which it is called becomes active.
++   Copyright (C) 2014 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 <errno.h>
++#include <unistd.h>
++#include <fcntl.h>
++#include <locale.h>
++#include <wchar.h>
++
++static int do_test (void);
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
++
++#define get_handles_fdopen(filename, fd, fp, fd_mode, mode) \
++({									      \
++  int ret = 0;								      \
++  (fd) = open ((filename), (fd_mode), 0);				      \
++  if ((fd) == -1)							      \
++    {									      \
++      printf ("open failed: %m\n");					      \
++      ret = 1;								      \
++    }									      \
++  else									      \
++    {									      \
++      (fp) = fdopen ((fd), (mode));					      \
++      if ((fp) == NULL)							      \
++        {								      \
++          printf ("fdopen failed: %m\n");				      \
++          close (fd);							      \
++          ret = 1;							      \
++        }								      \
++    }									      \
++  ret;									      \
++})
++
++#define get_handles_fopen(filename, fd, fp, mode) \
++({									      \
++  int ret = 0;								      \
++  (fp) = fopen ((filename), (mode));					      \
++  if ((fp) == NULL)							      \
++    {									      \
++      printf ("fopen failed: %m\n");					      \
++      ret = 1;								      \
++    }									      \
++  else									      \
++    {									      \
++      (fd) = fileno (fp);						      \
++      if ((fd) == -1)							      \
++        {								      \
++	  printf ("fileno failed: %m\n");				      \
++	  ret = 1;							      \
++	}								      \
++    }									      \
++  ret;									      \
++})
++
++/* data points to either char_data or wide_data, depending on whether we're
++   testing regular file mode or wide mode respectively.  Similarly,
++   fputs_func points to either fputs or fputws.  data_len keeps track of the
++   length of the current data and file_len maintains the current file
++   length.  */
++static const void *data;
++static const char *char_data = "abcdef";
++static const wchar_t *wide_data = L"abcdef";
++static size_t data_len;
++static size_t file_len;
++
++typedef int (*fputs_func_t) (const void *data, FILE *fp);
++fputs_func_t fputs_func;
++
++/* Test that the value of ftell is not cached when the stream handle is not
++   active.  */
++static int
++do_ftell_test (const char *filename)
++{
++  int ret = 0;
++  struct test
++    {
++      const char *mode;
++      int fd_mode;
++      size_t old_off;
++      size_t new_off;
++    } test_modes[] = {
++	  /* In w, w+ and r+ modes, the file position should be at the
++	     beginning of the file.  After the write, the offset should be
++	     updated to data_len.  */
++	  {"w", O_WRONLY, 0, data_len},
++	  {"w+", O_RDWR, 0, data_len},
++	  {"r+", O_RDWR, 0, data_len},
++	  /* For 'a' and 'a+' modes, the initial file position should be the
++	     current end of file. After the write, the offset has data_len
++	     added to the old value.  */
++	  {"a", O_WRONLY, data_len, 2 * data_len},
++	  {"a+", O_RDWR, 2 * data_len, 3 * data_len},
++    };
++  for (int j = 0; j < 2; j++)
++    {
++      for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
++	{
++	  FILE *fp;
++	  int fd;
++	  printf ("\tftell: %s (file, \"%s\"): ", j == 0 ? "fdopen" : "fopen",
++		  test_modes[i].mode);
++
++	  if (j == 0)
++	    ret = get_handles_fdopen (filename, fd, fp, test_modes[i].fd_mode,
++				      test_modes[i].mode);
++	  else
++	    ret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++
++	  if (ret != 0)
++	    return ret;
++
++	  long off = ftell (fp);
++	  if (off != test_modes[i].old_off)
++	    {
++	      printf ("Incorrect old offset.  Expected %zu but got %ld, ",
++		      test_modes[i].old_off, off);
++	      ret |= 1;
++	    }
++	  else
++	    printf ("old offset = %ld, ", off);
++
++	  /* The effect of this write on the offset should be seen in the ftell
++	     call that follows it.  */
++	  int ret = write (fd, data, data_len);
++	  off = ftell (fp);
++
++	  if (off != test_modes[i].new_off)
++	    {
++	      printf ("Incorrect new offset.  Expected %zu but got %ld\n",
++		      test_modes[i].old_off, off);
++	      ret |= 1;
++	    }
++	  else
++	    printf ("new offset = %ld\n", off);
++
++	  fclose (fp);
++	}
++    }
++
++  return ret;
++}
++
++/* This test opens the file for writing, moves the file offset of the
++   underlying file, writes out data and then checks if ftell trips on it.  */
++static int
++do_write_test (const char *filename)
++{
++  FILE *fp = NULL;
++  int fd;
++  int ret = 0;
++  struct test
++    {
++      const char *mode;
++      int fd_mode;
++    } test_modes[] = {
++	  {"w", O_WRONLY},
++	  {"w+", O_RDWR},
++	  {"r+", O_RDWR}
++    };
++
++  for (int j = 0; j < 2; j++)
++    {
++      for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
++	{
++	  printf ("\twrite: %s (file, \"%s\"): ", j == 0 ? "fopen" : "fdopen",
++		  test_modes[i].mode);
++
++	  if (j == 0)
++	    ret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++	  else
++	    ret = get_handles_fdopen (filename, fd, fp, test_modes[i].fd_mode,
++				      test_modes[i].mode);
++
++	  if (ret != 0)
++	    return ret;
++
++	  /* Move offset to just before the end of the file.  */
++	  off_t ret = lseek (fd, file_len - 1, SEEK_SET);
++	  if (ret == -1)
++	    {
++	      printf ("lseek failed: %m\n");
++	      ret |= 1;
++	    }
++
++	  /* Write some data.  */
++	  size_t written = fputs_func (data, fp);
++
++	  if (written == EOF)
++	    {
++	      printf ("fputs[1] failed to write data\n");
++	      ret |= 1;
++	    }
++
++	  /* Verify that the offset points to the end of the file.  The length
++	     of the file would be the original length + the length of data
++	     written to it - the amount by which we moved the offset using
++	     lseek.  */
++	  long offset = ftell (fp);
++	  file_len = file_len - 1 + data_len;
++
++	  if (offset != file_len)
++	    {
++	      printf ("Incorrect offset.  Expected %zu, but got %ld\n",
++		      file_len, offset);
++
++	      ret |= 1;
++	    }
++
++	  printf ("offset = %ld\n", offset);
++	  fclose (fp);
++        }
++    }
++
++  return ret;
++}
++
++/* This test opens a file in append mode, writes some data, and then verifies
++   that ftell does not trip over it.  */
++static int
++do_append_test (const char *filename)
++{
++  FILE *fp = NULL;
++  int ret = 0;
++  int fd;
++
++  struct test
++    {
++      const char *mode;
++      int fd_mode;
++    } test_modes[] = {
++	  {"a", O_WRONLY},
++	  {"a+", O_RDWR}
++    };
++
++  for (int j = 0; j < 2; j++)
++    {
++      for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
++	{
++	  printf ("\tappend: %s (file, \"%s\"): ", j == 0 ? "fopen" : "fdopen",
++		  test_modes[i].mode);
++
++	  if (j == 0)
++	    ret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++	  else
++	    ret = get_handles_fdopen (filename, fd, fp, test_modes[i].fd_mode,
++				      test_modes[i].mode);
++
++	  if (ret != 0)
++	    return ret;
++
++	  /* Write some data.  */
++	  size_t written = fputs_func (data, fp);
++
++	  if (written == EOF)
++	    {
++	      printf ("fputs[1] failed to write all data\n");
++	      ret |= 1;
++	    }
++
++	  /* Verify that the offset points to the end of the file.  The file
++	     len is maintained by adding data_len each time to reflect the data
++	     written to it.  */
++	  long offset = ftell (fp);
++	  file_len += data_len;
++
++	  if (offset != file_len)
++	    {
++	      printf ("Incorrect offset.  Expected %zu, but got %ld\n",
++		      file_len, offset);
++
++	      ret |= 1;
++	    }
++
++	  printf ("offset = %ld\n", offset);
++	  fclose (fp);
++	}
++    }
++
++  return ret;
++}
++
++static int
++do_one_test (const char *filename)
++{
++  int ret = 0;
++
++  ret |= do_ftell_test (filename);
++  ret |= do_write_test (filename);
++  ret |= do_append_test (filename);
++
++  return ret;
++}
++
++/* Run a set of tests for ftell for regular files and wide mode files.  */
++static int
++do_test (void)
++{
++  int ret = 0;
++  FILE *fp = NULL;
++  char *filename;
++  size_t written;
++  int fd = create_temp_file ("tst-active-handler-tmp.", &filename);
++
++  if (fd == -1)
++    {
++      printf ("create_temp_file: %m\n");
++      return 1;
++    }
++
++  fp = fdopen (fd, "w");
++  if (fp == NULL)
++    {
++      printf ("fdopen[0]: %m\n");
++      close (fd);
++      return 1;
++    }
++
++  data = char_data;
++  data_len = strlen (char_data);
++  file_len = strlen (char_data);
++  written = fputs (data, fp);
++
++  if (written == EOF)
++    {
++      printf ("fputs[1] failed to write data\n");
++      ret = 1;
++    }
++
++  fclose (fp);
++  if (ret)
++    return ret;
++
++  /* Tests for regular files.  */
++  puts ("Regular mode:");
++  fputs_func = (fputs_func_t) fputs;
++  data = char_data;
++  data_len = strlen (char_data);
++  ret |= do_one_test (filename);
++
++  /* Truncate the file before repeating the tests in wide mode.  */
++  fp = fopen (filename, "w");
++  if (fp == NULL)
++    {
++      printf ("fopen failed %m\n");
++      return 1;
++    }
++  fclose (fp);
++
++  /* Tests for wide files.  */
++  puts ("Wide mode:");
++  if (setlocale (LC_ALL, "en_US.UTF-8") == NULL)
++    {
++      printf ("Cannot set en_US.UTF-8 locale.\n");
++      return 1;
++    }
++  fputs_func = (fputs_func_t) fputws;
++  data = wide_data;
++  data_len = wcslen (wide_data);
++  ret |= do_one_test (filename);
++
++  return ret;
++}
+diff --git glibc-2.17-c758a686/libio/wfileops.c glibc-2.17-c758a686/libio/wfileops.c
+index 9cebe77..8b2e108 100644
+--- glibc-2.17-c758a686/libio/wfileops.c
++++ glibc-2.17-c758a686/libio/wfileops.c
+@@ -596,29 +596,25 @@ done:
+   return 0;
+ }
+ 
+-_IO_off64_t
+-_IO_wfile_seekoff (fp, offset, dir, mode)
+-     _IO_FILE *fp;
+-     _IO_off64_t offset;
+-     int dir;
+-     int mode;
++/* ftell{,o} implementation for wide mode.  Don't modify any state of the file
++   pointer while we try to get the current state of the stream.  */
++static _IO_off64_t
++do_ftell_wide (_IO_FILE *fp)
+ {
+-  _IO_off64_t result;
+-  _IO_off64_t delta, new_offset;
+-  long int count;
+-  /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
+-     offset of the underlying file must be exact.  */
+-  int must_be_exact = ((fp->_wide_data->_IO_read_base
+-			== fp->_wide_data->_IO_read_end)
+-		       && (fp->_wide_data->_IO_write_base
+-			   == fp->_wide_data->_IO_write_ptr));
++  _IO_off64_t result, offset = 0;
++  bool use_cached_offset = false;
+ 
+-  bool was_writing = ((fp->_wide_data->_IO_write_ptr
+-		       > fp->_wide_data->_IO_write_base)
+-		      || _IO_in_put_mode (fp));
+-
+-  if (mode == 0)
++  /* No point looking for offsets in the buffer if it hasn't even been
++     allocated.  */
++  if (fp->_wide_data->_IO_buf_base != NULL)
+     {
++      const wchar_t *wide_read_base;
++      const wchar_t *wide_read_ptr;
++      const wchar_t *wide_read_end;
++      bool was_writing = ((fp->_wide_data->_IO_write_ptr
++			   > fp->_wide_data->_IO_write_base)
++			  || _IO_in_put_mode (fp));
++
+       /* XXX For wide stream with backup store it is not very
+ 	 reasonable to determine the offset.  The pushed-back
+ 	 character might require a state change and we need not be
+@@ -633,14 +629,142 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+ 	      return -1;
+ 	    }
+ 
+-	  /* There is no more data in the backup buffer.  We can
+-	     switch back.  */
+-	  _IO_switch_to_main_wget_area (fp);
++	  /* Nothing in the backup store, so note the backed up pointers
++	     without changing the state.  */
++	  wide_read_base = fp->_wide_data->_IO_save_base;
++	  wide_read_ptr = wide_read_base;
++	  wide_read_end = fp->_wide_data->_IO_save_end;
++	}
++      else
++	{
++	  wide_read_base = fp->_wide_data->_IO_read_base;
++	  wide_read_ptr = fp->_wide_data->_IO_read_ptr;
++	  wide_read_end = fp->_wide_data->_IO_read_end;
++	}
++
++      struct _IO_codecvt *cv = fp->_codecvt;
++      int clen = (*cv->__codecvt_do_encoding) (cv);
++
++      if (!was_writing)
++	{
++	  if (clen > 0)
++	    {
++	      offset -= (wide_read_end - wide_read_ptr) * clen;
++	      offset -= fp->_IO_read_end - fp->_IO_read_ptr;
++	    }
++	  else
++	    {
++	      int nread;
++
++	      size_t delta = wide_read_ptr - wide_read_base;
++	      __mbstate_t state = fp->_wide_data->_IO_last_state;
++	      nread = (*cv->__codecvt_do_length) (cv, &state,
++						  fp->_IO_read_base,
++						  fp->_IO_read_end, delta);
++	      offset -= fp->_IO_read_end - fp->_IO_read_base - nread;
++	    }
++	}
++      else
++	{
++	  if (clen > 0)
++	    offset += (fp->_wide_data->_IO_write_ptr
++		       - fp->_wide_data->_IO_write_base) * clen;
++	  else
++	    {
++	      size_t delta = (fp->_wide_data->_IO_write_ptr
++			      - fp->_wide_data->_IO_write_base);
++
++	      /* Allocate enough space for the conversion.  */
++	      size_t outsize = delta * sizeof (wchar_t);
++	      char *out = malloc (outsize);
++	      char *outstop = out;
++	      const wchar_t *in = fp->_wide_data->_IO_write_base;
++
++	      enum __codecvt_result status;
++
++	      __mbstate_t state = fp->_wide_data->_IO_last_state;
++	      status = (*cv->__codecvt_do_out) (cv, &state,
++						in, in + delta, &in,
++						out, out + outsize, &outstop);
++
++	      /* We don't check for __codecvt_partial because it can be
++		 returned on one of two conditions: either the output
++		 buffer is full or the input sequence is incomplete.  We
++		 take care to allocate enough buffer and our input
++		 sequences must be complete since they are accepted as
++		 wchar_t; if not, then that is an error.  */
++	      if (__glibc_unlikely (status != __codecvt_ok))
++		return WEOF;
++
++	      offset += outstop - out;
++	    }
++
++	  /* _IO_read_end coincides with fp._offset, so the actual file
++	     position is fp._offset - (_IO_read_end - new_write_ptr).  */
++	  offset -= fp->_IO_read_end - fp->_IO_write_ptr;
+ 	}
+ 
+-      dir = _IO_seek_cur, offset = 0; /* Don't move any pointers. */
++      /* It is safe to use the cached offset when available if there is
++	 unbuffered data (indicating that the file handle is active) and
++	 the handle is not for a file open in a+ mode.  The latter
++	 condition is because there could be a scenario where there is a
++	 switch from read mode to write mode using an fseek to an arbitrary
++	 position.  In this case, there would be unbuffered data due to be
++	 appended to the end of the file, but the offset may not
++	 necessarily be the end of the file.  It is fine to use the cached
++	 offset when the a+ stream is in read mode though, since the offset
++	 is maintained correctly in that case.  Note that this is not a
++	 comprehensive set of cases when the offset is reliable.  The
++	 offset may be reliable even in some cases where there is no
++	 unflushed input and the handle is active, but it's just that we
++	 don't have a way to identify that condition reliably.  */
++      use_cached_offset = (offset != 0 && fp->_offset != _IO_pos_BAD
++			   && ((fp->_flags & (_IO_IS_APPENDING | _IO_NO_READS))
++			       == (_IO_IS_APPENDING | _IO_NO_READS)
++			       && was_writing));
+     }
+ 
++  if (use_cached_offset)
++    result = fp->_offset;
++  else
++    result = get_file_offset (fp);
++
++  if (result == EOF)
++    return result;
++
++  result += offset;
++
++  return result;
++}
++
++_IO_off64_t
++_IO_wfile_seekoff (fp, offset, dir, mode)
++     _IO_FILE *fp;
++     _IO_off64_t offset;
++     int dir;
++     int mode;
++{
++  _IO_off64_t result;
++  _IO_off64_t delta, new_offset;
++  long int count;
++
++  /* Short-circuit into a separate function.  We don't want to mix any
++     functionality and we don't want to touch anything inside the FILE
++     object. */
++  if (mode == 0)
++    return do_ftell_wide (fp);
++
++  /* POSIX.1 8.2.3.7 says that after a call the fflush() the file
++     offset of the underlying file must be exact.  */
++  int must_be_exact = ((fp->_wide_data->_IO_read_base
++			== fp->_wide_data->_IO_read_end)
++		       && (fp->_wide_data->_IO_write_base
++			   == fp->_wide_data->_IO_write_ptr));
++
++  bool was_writing = ((fp->_wide_data->_IO_write_ptr
++		       > fp->_wide_data->_IO_write_base)
++		      || _IO_in_put_mode (fp));
++
+   /* Flush unwritten characters.
+      (This may do an unneeded write if we seek within the buffer.
+      But to be able to switch to reading, we would need to set
+@@ -648,7 +772,7 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+      which assumes file_ptr() is eGptr.  Anyway, since we probably
+      end up flushing when we close(), it doesn't make much difference.)
+      FIXME: simulate mem-mapped files. */
+-  else if (was_writing && _IO_switch_to_wget_mode (fp))
++  if (was_writing && _IO_switch_to_wget_mode (fp))
+     return WEOF;
+ 
+   if (fp->_wide_data->_IO_buf_base == NULL)
+@@ -693,7 +817,6 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+ 	    {
+ 	      int nread;
+ 
+-	    flushed:
+ 	      delta = (fp->_wide_data->_IO_read_ptr
+ 		       - fp->_wide_data->_IO_read_base);
+ 	      fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
+@@ -706,80 +829,9 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+ 	      offset -= fp->_IO_read_end - fp->_IO_read_base - nread;
+ 	    }
+ 	}
+-      else
+-	{
+-	  char *new_write_ptr = fp->_IO_write_ptr;
+-
+-	  if (clen > 0)
+-	    offset += (fp->_wide_data->_IO_write_ptr
+-		       - fp->_wide_data->_IO_write_base) / clen;
+-	  else
+-	    {
+-	      enum __codecvt_result status = __codecvt_ok;
+-	      delta = (fp->_wide_data->_IO_write_ptr
+-		       - fp->_wide_data->_IO_write_base);
+-	      const wchar_t *write_base = fp->_wide_data->_IO_write_base;
+-
+-	      /* FIXME: This actually ends up in two iterations of conversion,
+-		 one here and the next when the buffer actually gets flushed.
+-		 It may be possible to optimize this in future so that
+-		 wdo_write identifies already converted content and does not
+-		 redo it.  In any case, this is much better than having to
+-		 flush buffers for every ftell.  */
+-	      do
+-		{
+-		  /* There is not enough space in the buffer to do the entire
+-		     conversion, so there is no point trying to avoid the
+-		     buffer flush.  Just do it and go back to how it was with
+-		     the read mode.  */
+-		  if (status == __codecvt_partial
+-		      || (delta > 0 && new_write_ptr == fp->_IO_buf_end))
+-		    {
+-		      if (_IO_switch_to_wget_mode (fp))
+-			return WEOF;
+-		      goto flushed;
+-		    }
+-
+-		  const wchar_t *new_wbase = fp->_wide_data->_IO_write_base;
+-		  fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
+-		  status = (*cv->__codecvt_do_out) (cv,
+-						    &fp->_wide_data->_IO_state,
+-						    write_base,
+-						    write_base + delta,
+-						    &new_wbase,
+-						    new_write_ptr,
+-						    fp->_IO_buf_end,
+-						    &new_write_ptr);
+-
+-		  delta -= new_wbase - write_base;
+-
+-		  /* If there was an error, then return WEOF.
+-		     TODO: set buffer state.  */
+-		  if (__builtin_expect (status == __codecvt_error, 0))
+-		      return WEOF;
+-		}
+-	      while (delta > 0);
+-	    }
+-
+-	  /* _IO_read_end coincides with fp._offset, so the actual file position
+-	     is fp._offset - (_IO_read_end - new_write_ptr).  This is fine
+-	     even if fp._offset is not set, since fp->_IO_read_end is then at
+-	     _IO_buf_base and this adjustment is for unbuffered output.  */
+-	  offset -= fp->_IO_read_end - new_write_ptr;
+-	}
+ 
+       if (fp->_offset == _IO_pos_BAD)
+-	{
+-	  if (mode != 0)
+-	    goto dumb;
+-	  else
+-	    {
+-	      result = _IO_SYSSEEK (fp, 0, dir);
+-	      if (result == EOF)
+-		return result;
+-	      fp->_offset = result;
+-	    }
+-	}
++	goto dumb;
+ 
+       /* Make offset absolute, assuming current pointer is file_ptr(). */
+       offset += fp->_offset;
+@@ -802,10 +854,6 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
+     }
+   /* At this point, dir==_IO_seek_set. */
+ 
+-  /* If we are only interested in the current position we've found it now.  */
+-  if (mode == 0)
+-    return offset;
+-
+   /* If destination is within current buffer, optimize: */
+   if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
+       && !_IO_in_backup (fp))
diff --git a/SOURCES/glibc-rh1064063.patch b/SOURCES/glibc-rh1064063.patch
new file mode 100644
index 0000000..154ab66
--- /dev/null
+++ b/SOURCES/glibc-rh1064063.patch
@@ -0,0 +1,70 @@
+commit a3e5b4feeb54cb92657ec2bc6d9be1fcef9e8575
+Author: Paul E. Murphy <murphyp@linux.vnet.ibm.com>
+Date:   Mon Jan 11 17:24:04 2016 -0500
+
+    Fix race in tst-mqueue5
+    
+    The check is done on line 117 by a thread spawned
+    from do_child(), forked from do_test().  This test
+    generates a signal in the forked process.
+    
+    Either thread may handle the signal, and on ppc,
+    it happens to be done on do_child, on the thread
+    which is not doing the check on line 117.
+    
+    This exposes a race condition whereby the test
+    incorrectly fails as the signal is caught during
+    or after the check.
+    
+    This is mitigated by ensuring the signal is blocked
+    in the child thread while thread is running.
+
+ 2016-01-15  Martin Sebor  <msebor@redhat.com>
+ 
+ 	[BZ #19432]
+diff --git a/rt/tst-mqueue5.c b/rt/tst-mqueue5.c
+index aa74fa3..25042bc 100644
+--- a/rt/tst-mqueue5.c
++++ b/rt/tst-mqueue5.c
+@@ -116,7 +116,7 @@ thr (void *arg)
+ 
+   if (rtmin_cnt != 2)
+     {
+-      puts ("SIGRTMIN signal in child did not arrive");
++      puts ("SIGRTMIN signal in thread did not arrive");
+       result = 1;
+     }
+   else if (rtmin_pid != getppid ()
+@@ -403,6 +403,16 @@ do_child (const char *name, pthread_barrier_t *b2, pthread_barrier_t *b3,
+       result = 1;
+     }
+ 
++  /* Ensure the thr thread gets the signal, not us.  */
++  sigset_t set;
++  sigemptyset (&set);
++  sigaddset (&set, SIGRTMIN);
++  if (pthread_sigmask (SIG_BLOCK, &set, NULL))
++    {
++      printf ("Failed to block SIGRTMIN in child: %m\n");
++      result = 1;
++    }
++
+   (void) pthread_barrier_wait (b2);
+ 
+   /* Parent calls mqsend (q), which should wake up mqrecv (q)
+@@ -514,7 +524,14 @@ do_child (const char *name, pthread_barrier_t *b2, pthread_barrier_t *b3,
+       result = 1;
+     }
+ 
+- void *thr_ret;
++  /* Reenable test signals before cleaning up the thread.  */
++  if (pthread_sigmask (SIG_UNBLOCK, &set, NULL))
++    {
++      printf ("Failed to unblock SIGRTMIN in child: %m\n");
++      result = 1;
++    }
++
++  void *thr_ret;
+   ret = pthread_join (th, &thr_ret);
+   if (ret)
+     {
diff --git a/SOURCES/glibc-rh1064066.patch b/SOURCES/glibc-rh1064066.patch
new file mode 100644
index 0000000..bdac2bb
--- /dev/null
+++ b/SOURCES/glibc-rh1064066.patch
@@ -0,0 +1,32 @@
+--- /var/lib/mock/glibc-2.17-79.el7/root/builddir/build/BUILD/glibc-2.17-c758a686/math/libm-test.inc	2015-04-06 17:36:33.268209956 -0400
++++ glibc-2.17-c758a686/math/libm-test.inc	2015-04-07 12:00:03.102360299 -0400
+@@ -521,7 +521,8 @@
+ }
+ 
+ 
+-static void __attribute__ ((noinline))
++/* Attributes work around suspected gcc 4.8 bug #1209619.  */
++static void __attribute__ ((noclone, noinline))
+ check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
+ 		      FLOAT max_ulp, int xfail, int exceptions,
+ 		      FLOAT *curr_max_error)
+@@ -610,7 +611,8 @@
+ }
+ 
+ 
+-static void __attribute__ ((noinline))
++/* Attributes work around suspected gcc 4.8 bug #1209619.  */
++static void __attribute__ ((noclone, noinline))
+ check_float (const char *test_name, FLOAT computed, FLOAT expected,
+ 	     FLOAT max_ulp, int xfail, int exceptions)
+ {
+@@ -619,7 +621,8 @@
+ }
+ 
+ 
+-static void __attribute__ ((noinline))
++/* Attributes work around suspected gcc 4.8 bug #1209619.  */
++static void __attribute__ ((noclone, noinline))
+ check_complex (const char *test_name, __complex__ FLOAT computed,
+ 	       __complex__ FLOAT expected,
+ 	       __complex__ FLOAT max_ulp, __complex__ int xfail,
diff --git a/SOURCES/glibc-rh1064945.patch b/SOURCES/glibc-rh1064945.patch
new file mode 100644
index 0000000..69a5b2a
--- /dev/null
+++ b/SOURCES/glibc-rh1064945.patch
@@ -0,0 +1,78 @@
+commit 736c304a1ab4cee36a2f3343f1698bc0abae4608
+Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+Date:   Thu Jan 16 06:53:18 2014 -0600
+
+    PowerPC: Fix ftime gettimeofday internal call returning bogus data
+    
+    This patches fixes BZ#16430 by setting a different symbol for internal
+    GLIBC calls that points to ifunc resolvers. For PPC32, if the symbol
+    is defined as hidden (which is the case for gettimeofday and time) the
+    compiler will create local branches (symbol@local) and linker will not
+    create PLT calls (required for IFUNC). This will leads to internal symbol
+    calling the IFUNC resolver instead of the resolved symbol.
+    For PPC64 this behavior does not occur because a call to a function in
+    another translation unit might use a different toc pointer thus requiring
+    a PLT call.
+
+diff --git glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
+index 29a5e08..2085b68 100644
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
+@@ -44,8 +44,24 @@ asm (".type __gettimeofday, %gnu_indirect_function");
+ /* This is doing "libc_hidden_def (__gettimeofday)" but the compiler won't
+    let us do it in C because it doesn't know we're defining __gettimeofday
+    here in this file.  */
+-asm (".globl __GI___gettimeofday\n"
+-     "__GI___gettimeofday = __gettimeofday");
++asm (".globl __GI___gettimeofday");
++
++/* __GI___gettimeofday is defined as hidden and for ppc32 it enables the
++   compiler make a local call (symbol@local) for internal GLIBC usage. It
++   means the PLT won't be used and the ifunc resolver will be called directly.
++   For ppc64 a call to a function in another translation unit might use a
++   different toc pointer thus disallowing direct branchess and making internal
++   ifuncs calls safe.  */
++#ifdef __powerpc64__
++asm ("__GI___gettimeofday = __gettimeofday");
++#else
++int
++__gettimeofday_vsyscall (struct timeval *tv, struct timezone *tz)
++{
++  return INLINE_VSYSCALL (gettimeofday, 2, tv, tz);
++}
++asm ("__GI___gettimeofday = __gettimeofday_vsyscall");
++#endif
+ 
+ #else
+ 
+diff --git glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c
+index 089d0b6..023bc02 100644
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c
+@@ -54,8 +54,24 @@ asm (".type time, %gnu_indirect_function");
+ /* This is doing "libc_hidden_def (time)" but the compiler won't
+  * let us do it in C because it doesn't know we're defining time
+  * here in this file.  */
+-asm (".globl __GI_time\n"
+-     "__GI_time = time");
++asm (".globl __GI_time");
++
++/* __GI_time is defined as hidden and for ppc32 it enables the
++   compiler make a local call (symbol@local) for internal GLIBC usage. It
++   means the PLT won't be used and the ifunc resolver will be called directly.
++   For ppc64 a call to a function in another translation unit might use a
++   different toc pointer thus disallowing direct branchess and making internal
++   ifuncs calls safe.  */
++#ifdef __powerpc64__
++asm ("__GI_time = time");
++#else
++time_t
++__time_vsyscall (time_t *t)
++{
++  return INLINE_VSYSCALL (time, 1, t);
++}
++asm ("__GI_time = __time_vsyscall");
++#endif
+ 
+ #else
+ 
diff --git a/SOURCES/glibc-rh1065574-1.patch b/SOURCES/glibc-rh1065574-1.patch
new file mode 100644
index 0000000..99b157e
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-1.patch
@@ -0,0 +1,38 @@
+commit 8b35e35d0f4eae28a47c23e2aa15ddf570fa86ef
+Author: Ondřej Bílka <neleai@seznam.cz>
+Date:   Fri Nov 1 15:39:26 2013 +0100
+
+    Fix malloc_info statistic. Fixes bug 16112
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index b47d99ac65344c82..c98b3f79ed38b4f0 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5068,23 +5068,11 @@ malloc_info (int options, FILE *fp)
+ 	sizes[i].total = sizes[i].count * sizes[i].to;
+       }
+ 
+-    mbinptr bin = bin_at (ar_ptr, 1);
+-    struct malloc_chunk *r = bin->fd;
+-    if (r != NULL)
+-      {
+-	while (r != bin)
+-	  {
+-	    ++sizes[NFASTBINS].count;
+-	    sizes[NFASTBINS].total += r->size;
+-	    sizes[NFASTBINS].from = MIN (sizes[NFASTBINS].from, r->size);
+-	    sizes[NFASTBINS].to = MAX (sizes[NFASTBINS].to, r->size);
+-	    r = r->fd;
+-	  }
+-	nblocks += sizes[NFASTBINS].count;
+-	avail += sizes[NFASTBINS].total;
+-      }
+ 
+-    for (size_t i = 2; i < NBINS; ++i)
++    mbinptr bin;
++    struct malloc_chunk *r;
++
++    for (size_t i = 1; i < NBINS; ++i)
+       {
+ 	bin = bin_at (ar_ptr, i);
+ 	r = bin->fd;
diff --git a/SOURCES/glibc-rh1065574-2.patch b/SOURCES/glibc-rh1065574-2.patch
new file mode 100644
index 0000000..77d6b50
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-2.patch
@@ -0,0 +1,236 @@
+This is a partial recreation of this upstream commit, restricted to
+the malloc_info function:
+
+commit 6c8dbf00f536d78b1937b5af6f57be47fd376344
+Author: Ondřej Bílka <neleai@seznam.cz>
+Date:   Thu Jan 2 09:38:18 2014 +0100
+
+    Reformat malloc to gnu style.
+
+It is not an exact copy because glibc-rh1103856.patch backported
+commit 4d653a59ffeae0f46f76a40230e2cfa9587b7e7e ("Add mmap usage in
+malloc_info output"), which came after the reformatting upstream.
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index c98b3f79ed38b4f0..5c7a27129d66e06a 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5023,7 +5023,8 @@ malloc_info (int options, FILE *fp)
+   size_t total_aspace = 0;
+   size_t total_aspace_mprotect = 0;
+ 
+-  void mi_arena (mstate ar_ptr)
++  void
++  mi_arena (mstate ar_ptr)
+   {
+     fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
+ 
+@@ -5044,28 +5045,28 @@ malloc_info (int options, FILE *fp)
+ 
+     for (size_t i = 0; i < NFASTBINS; ++i)
+       {
+-	mchunkptr p = fastbin (ar_ptr, i);
+-	if (p != NULL)
+-	  {
+-	    size_t nthissize = 0;
+-	    size_t thissize = chunksize (p);
+-
+-	    while (p != NULL)
+-	      {
+-		++nthissize;
+-		p = p->fd;
+-	      }
+-
+-	    fastavail += nthissize * thissize;
+-	    nfastblocks += nthissize;
+-	    sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
+-	    sizes[i].to = thissize;
+-	    sizes[i].count = nthissize;
+-	  }
+-	else
+-	  sizes[i].from = sizes[i].to = sizes[i].count = 0;
+-
+-	sizes[i].total = sizes[i].count * sizes[i].to;
++        mchunkptr p = fastbin (ar_ptr, i);
++        if (p != NULL)
++          {
++            size_t nthissize = 0;
++            size_t thissize = chunksize (p);
++
++            while (p != NULL)
++              {
++                ++nthissize;
++                p = p->fd;
++              }
++
++            fastavail += nthissize * thissize;
++            nfastblocks += nthissize;
++            sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
++            sizes[i].to = thissize;
++            sizes[i].count = nthissize;
++          }
++        else
++          sizes[i].from = sizes[i].to = sizes[i].count = 0;
++
++        sizes[i].total = sizes[i].count * sizes[i].to;
+       }
+ 
+ 
+@@ -5074,29 +5075,29 @@ malloc_info (int options, FILE *fp)
+ 
+     for (size_t i = 1; i < NBINS; ++i)
+       {
+-	bin = bin_at (ar_ptr, i);
+-	r = bin->fd;
+-	sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
+-	sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
+-	  = sizes[NFASTBINS - 1 + i].count = 0;
+-
+-	if (r != NULL)
+-	  while (r != bin)
+-	    {
+-	      ++sizes[NFASTBINS - 1 + i].count;
+-	      sizes[NFASTBINS - 1 + i].total += r->size;
+-	      sizes[NFASTBINS - 1 + i].from
+-		= MIN (sizes[NFASTBINS - 1 + i].from, r->size);
+-	      sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
+-						 r->size);
+-
+-	      r = r->fd;
+-	    }
+-
+-	if (sizes[NFASTBINS - 1 + i].count == 0)
+-	  sizes[NFASTBINS - 1 + i].from = 0;
+-	nblocks += sizes[NFASTBINS - 1 + i].count;
+-	avail += sizes[NFASTBINS - 1 + i].total;
++        bin = bin_at (ar_ptr, i);
++        r = bin->fd;
++        sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
++        sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
++                                        = sizes[NFASTBINS - 1 + i].count = 0;
++
++        if (r != NULL)
++          while (r != bin)
++            {
++              ++sizes[NFASTBINS - 1 + i].count;
++              sizes[NFASTBINS - 1 + i].total += r->size;
++              sizes[NFASTBINS - 1 + i].from
++                = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
++              sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
++                                                 r->size);
++
++              r = r->fd;
++            }
++
++        if (sizes[NFASTBINS - 1 + i].count == 0)
++          sizes[NFASTBINS - 1 + i].from = 0;
++        nblocks += sizes[NFASTBINS - 1 + i].count;
++        avail += sizes[NFASTBINS - 1 + i].total;
+       }
+ 
+     mutex_unlock (&ar_ptr->mutex);
+@@ -5109,51 +5110,51 @@ malloc_info (int options, FILE *fp)
+ 
+     for (size_t i = 0; i < nsizes; ++i)
+       if (sizes[i].count != 0 && i != NFASTBINS)
+-	fprintf (fp, "\
++        fprintf (fp, "							      \
+ <size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+-		 sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
++                 sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
+ 
+     if (sizes[NFASTBINS].count != 0)
+       fprintf (fp, "\
+ <unsorted from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+-	       sizes[NFASTBINS].from, sizes[NFASTBINS].to,
+-	       sizes[NFASTBINS].total, sizes[NFASTBINS].count);
++               sizes[NFASTBINS].from, sizes[NFASTBINS].to,
++               sizes[NFASTBINS].total, sizes[NFASTBINS].count);
+ 
+     total_system += ar_ptr->system_mem;
+     total_max_system += ar_ptr->max_system_mem;
+ 
+     fprintf (fp,
+-	     "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
+-	     "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
+-	     "<system type=\"current\" size=\"%zu\"/>\n"
+-	     "<system type=\"max\" size=\"%zu\"/>\n",
+-	     nfastblocks, fastavail, nblocks, avail,
+-	     ar_ptr->system_mem, ar_ptr->max_system_mem);
++             "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
++             "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
++             "<system type=\"current\" size=\"%zu\"/>\n"
++             "<system type=\"max\" size=\"%zu\"/>\n",
++             nfastblocks, fastavail, nblocks, avail,
++             ar_ptr->system_mem, ar_ptr->max_system_mem);
+ 
+     if (ar_ptr != &main_arena)
+       {
+-	heap_info *heap = heap_for_ptr(top(ar_ptr));
+-	fprintf (fp,
+-		 "<aspace type=\"total\" size=\"%zu\"/>\n"
+-		 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+-		 heap->size, heap->mprotect_size);
+-	total_aspace += heap->size;
+-	total_aspace_mprotect += heap->mprotect_size;
++        heap_info *heap = heap_for_ptr (top (ar_ptr));
++        fprintf (fp,
++                 "<aspace type=\"total\" size=\"%zu\"/>\n"
++                 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
++                 heap->size, heap->mprotect_size);
++        total_aspace += heap->size;
++        total_aspace_mprotect += heap->mprotect_size;
+       }
+     else
+       {
+-	fprintf (fp,
+-		 "<aspace type=\"total\" size=\"%zu\"/>\n"
+-		 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+-		 ar_ptr->system_mem, ar_ptr->system_mem);
+-	total_aspace += ar_ptr->system_mem;
+-	total_aspace_mprotect += ar_ptr->system_mem;
++        fprintf (fp,
++                 "<aspace type=\"total\" size=\"%zu\"/>\n"
++                 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
++                 ar_ptr->system_mem, ar_ptr->system_mem);
++        total_aspace += ar_ptr->system_mem;
++        total_aspace_mprotect += ar_ptr->system_mem;
+       }
+ 
+     fputs ("</heap>\n", fp);
+   }
+ 
+-  if(__malloc_initialized < 0)
++  if (__malloc_initialized < 0)
+     ptmalloc_init ();
+ 
+   fputs ("<malloc version=\"1\">\n", fp);
+@@ -5168,18 +5169,18 @@ malloc_info (int options, FILE *fp)
+   while (ar_ptr != &main_arena);
+ 
+   fprintf (fp,
+-	   "<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
+-	   "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
++           "<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
++           "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
+ 	   "<total type=\"mmap\" count=\"%d\" size=\"%zu\"/>\n"
+-	   "<system type=\"current\" size=\"%zu\"/>\n"
+-	   "<system type=\"max\" size=\"%zu\"/>\n"
+-	   "<aspace type=\"total\" size=\"%zu\"/>\n"
+-	   "<aspace type=\"mprotect\" size=\"%zu\"/>\n"
+-	   "</malloc>\n",
+-	   total_nfastblocks, total_fastavail, total_nblocks, total_avail,
++           "<system type=\"current\" size=\"%zu\"/>\n"
++           "<system type=\"max\" size=\"%zu\"/>\n"
++           "<aspace type=\"total\" size=\"%zu\"/>\n"
++           "<aspace type=\"mprotect\" size=\"%zu\"/>\n"
++           "</malloc>\n",
++           total_nfastblocks, total_fastavail, total_nblocks, total_avail,
+ 	   mp_.n_mmaps, mp_.mmapped_mem,
+-	   total_system, total_max_system,
+-	   total_aspace, total_aspace_mprotect);
++           total_system, total_max_system,
++           total_aspace, total_aspace_mprotect);
+ 
+   return 0;
+ }
diff --git a/SOURCES/glibc-rh1065574-3.patch b/SOURCES/glibc-rh1065574-3.patch
new file mode 100644
index 0000000..aff8bf3
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-3.patch
@@ -0,0 +1,276 @@
+commit 987c02692a88b8c9024cb99187434aad02c3c047
+Author: Ondřej Bílka <neleai@seznam.cz>
+Date:   Fri May 30 13:24:56 2014 +0200
+
+    Remove mi_arena nested function.
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index 5c7a27129d66e06a..c99b26d4a85e1b22 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5023,147 +5023,143 @@ malloc_info (int options, FILE *fp)
+   size_t total_aspace = 0;
+   size_t total_aspace_mprotect = 0;
+ 
+-  void
+-  mi_arena (mstate ar_ptr)
+-  {
+-    fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
+ 
+-    size_t nblocks = 0;
+-    size_t nfastblocks = 0;
+-    size_t avail = 0;
+-    size_t fastavail = 0;
+-    struct
+-    {
+-      size_t from;
+-      size_t to;
+-      size_t total;
+-      size_t count;
+-    } sizes[NFASTBINS + NBINS - 1];
+-#define nsizes (sizeof (sizes) / sizeof (sizes[0]))
+ 
+-    mutex_lock (&ar_ptr->mutex);
++  if (__malloc_initialized < 0)
++    ptmalloc_init ();
++
++  fputs ("<malloc version=\"1\">\n", fp);
++
++  /* Iterate over all arenas currently in use.  */
++  mstate ar_ptr = &main_arena;
++  do
++    {
++      fprintf (fp, "<heap nr=\"%d\">\n<sizes>\n", n++);
+ 
+-    for (size_t i = 0; i < NFASTBINS; ++i)
++      size_t nblocks = 0;
++      size_t nfastblocks = 0;
++      size_t avail = 0;
++      size_t fastavail = 0;
++      struct
+       {
+-        mchunkptr p = fastbin (ar_ptr, i);
+-        if (p != NULL)
+-          {
+-            size_t nthissize = 0;
+-            size_t thissize = chunksize (p);
+-
+-            while (p != NULL)
+-              {
+-                ++nthissize;
+-                p = p->fd;
+-              }
+-
+-            fastavail += nthissize * thissize;
+-            nfastblocks += nthissize;
+-            sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
+-            sizes[i].to = thissize;
+-            sizes[i].count = nthissize;
+-          }
+-        else
+-          sizes[i].from = sizes[i].to = sizes[i].count = 0;
+-
+-        sizes[i].total = sizes[i].count * sizes[i].to;
+-      }
++	size_t from;
++	size_t to;
++	size_t total;
++	size_t count;
++      } sizes[NFASTBINS + NBINS - 1];
++#define nsizes (sizeof (sizes) / sizeof (sizes[0]))
+ 
++      mutex_lock (&ar_ptr->mutex);
+ 
+-    mbinptr bin;
+-    struct malloc_chunk *r;
++      for (size_t i = 0; i < NFASTBINS; ++i)
++	{
++	  mchunkptr p = fastbin (ar_ptr, i);
++	  if (p != NULL)
++	    {
++	      size_t nthissize = 0;
++	      size_t thissize = chunksize (p);
++
++	      while (p != NULL)
++		{
++		  ++nthissize;
++		  p = p->fd;
++		}
++
++	      fastavail += nthissize * thissize;
++	      nfastblocks += nthissize;
++	      sizes[i].from = thissize - (MALLOC_ALIGNMENT - 1);
++	      sizes[i].to = thissize;
++	      sizes[i].count = nthissize;
++	    }
++	  else
++	    sizes[i].from = sizes[i].to = sizes[i].count = 0;
+ 
+-    for (size_t i = 1; i < NBINS; ++i)
+-      {
+-        bin = bin_at (ar_ptr, i);
+-        r = bin->fd;
+-        sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
+-        sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
+-                                        = sizes[NFASTBINS - 1 + i].count = 0;
+-
+-        if (r != NULL)
+-          while (r != bin)
+-            {
+-              ++sizes[NFASTBINS - 1 + i].count;
+-              sizes[NFASTBINS - 1 + i].total += r->size;
+-              sizes[NFASTBINS - 1 + i].from
+-                = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
+-              sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
+-                                                 r->size);
+-
+-              r = r->fd;
+-            }
+-
+-        if (sizes[NFASTBINS - 1 + i].count == 0)
+-          sizes[NFASTBINS - 1 + i].from = 0;
+-        nblocks += sizes[NFASTBINS - 1 + i].count;
+-        avail += sizes[NFASTBINS - 1 + i].total;
+-      }
++	  sizes[i].total = sizes[i].count * sizes[i].to;
++	}
+ 
+-    mutex_unlock (&ar_ptr->mutex);
+ 
+-    total_nfastblocks += nfastblocks;
+-    total_fastavail += fastavail;
++      mbinptr bin;
++      struct malloc_chunk *r;
+ 
+-    total_nblocks += nblocks;
+-    total_avail += avail;
++      for (size_t i = 1; i < NBINS; ++i)
++	{
++	  bin = bin_at (ar_ptr, i);
++	  r = bin->fd;
++	  sizes[NFASTBINS - 1 + i].from = ~((size_t) 0);
++	  sizes[NFASTBINS - 1 + i].to = sizes[NFASTBINS - 1 + i].total
++					  = sizes[NFASTBINS - 1 + i].count = 0;
++
++	  if (r != NULL)
++	    while (r != bin)
++	      {
++		++sizes[NFASTBINS - 1 + i].count;
++		sizes[NFASTBINS - 1 + i].total += r->size;
++		sizes[NFASTBINS - 1 + i].from
++		  = MIN (sizes[NFASTBINS - 1 + i].from, r->size);
++		sizes[NFASTBINS - 1 + i].to = MAX (sizes[NFASTBINS - 1 + i].to,
++						   r->size);
++
++		r = r->fd;
++	      }
+ 
+-    for (size_t i = 0; i < nsizes; ++i)
+-      if (sizes[i].count != 0 && i != NFASTBINS)
+-        fprintf (fp, "							      \
+-<size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+-                 sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
++	  if (sizes[NFASTBINS - 1 + i].count == 0)
++	    sizes[NFASTBINS - 1 + i].from = 0;
++	  nblocks += sizes[NFASTBINS - 1 + i].count;
++	  avail += sizes[NFASTBINS - 1 + i].total;
++	}
+ 
+-    if (sizes[NFASTBINS].count != 0)
+-      fprintf (fp, "\
+-<unsorted from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+-               sizes[NFASTBINS].from, sizes[NFASTBINS].to,
+-               sizes[NFASTBINS].total, sizes[NFASTBINS].count);
++      mutex_unlock (&ar_ptr->mutex);
+ 
+-    total_system += ar_ptr->system_mem;
+-    total_max_system += ar_ptr->max_system_mem;
++      total_nfastblocks += nfastblocks;
++      total_fastavail += fastavail;
+ 
+-    fprintf (fp,
+-             "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
+-             "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
+-             "<system type=\"current\" size=\"%zu\"/>\n"
+-             "<system type=\"max\" size=\"%zu\"/>\n",
+-             nfastblocks, fastavail, nblocks, avail,
+-             ar_ptr->system_mem, ar_ptr->max_system_mem);
++      total_nblocks += nblocks;
++      total_avail += avail;
+ 
+-    if (ar_ptr != &main_arena)
+-      {
+-        heap_info *heap = heap_for_ptr (top (ar_ptr));
+-        fprintf (fp,
+-                 "<aspace type=\"total\" size=\"%zu\"/>\n"
+-                 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+-                 heap->size, heap->mprotect_size);
+-        total_aspace += heap->size;
+-        total_aspace_mprotect += heap->mprotect_size;
+-      }
+-    else
+-      {
+-        fprintf (fp,
+-                 "<aspace type=\"total\" size=\"%zu\"/>\n"
+-                 "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+-                 ar_ptr->system_mem, ar_ptr->system_mem);
+-        total_aspace += ar_ptr->system_mem;
+-        total_aspace_mprotect += ar_ptr->system_mem;
+-      }
++      for (size_t i = 0; i < nsizes; ++i)
++	if (sizes[i].count != 0 && i != NFASTBINS)
++	  fprintf (fp, "							      \
++  <size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
++		   sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
+ 
+-    fputs ("</heap>\n", fp);
+-  }
++      if (sizes[NFASTBINS].count != 0)
++	fprintf (fp, "\
++  <unsorted from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
++		 sizes[NFASTBINS].from, sizes[NFASTBINS].to,
++		 sizes[NFASTBINS].total, sizes[NFASTBINS].count);
+ 
+-  if (__malloc_initialized < 0)
+-    ptmalloc_init ();
++      total_system += ar_ptr->system_mem;
++      total_max_system += ar_ptr->max_system_mem;
+ 
+-  fputs ("<malloc version=\"1\">\n", fp);
++      fprintf (fp,
++	       "</sizes>\n<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
++	       "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
++	       "<system type=\"current\" size=\"%zu\"/>\n"
++	       "<system type=\"max\" size=\"%zu\"/>\n",
++	       nfastblocks, fastavail, nblocks, avail,
++	       ar_ptr->system_mem, ar_ptr->max_system_mem);
+ 
+-  /* Iterate over all arenas currently in use.  */
+-  mstate ar_ptr = &main_arena;
+-  do
+-    {
+-      mi_arena (ar_ptr);
++      if (ar_ptr != &main_arena)
++	{
++	  heap_info *heap = heap_for_ptr (top (ar_ptr));
++	  fprintf (fp,
++		   "<aspace type=\"total\" size=\"%zu\"/>\n"
++		   "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
++		   heap->size, heap->mprotect_size);
++	  total_aspace += heap->size;
++	  total_aspace_mprotect += heap->mprotect_size;
++	}
++      else
++	{
++	  fprintf (fp,
++		   "<aspace type=\"total\" size=\"%zu\"/>\n"
++		   "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
++		   ar_ptr->system_mem, ar_ptr->system_mem);
++	  total_aspace += ar_ptr->system_mem;
++	  total_aspace_mprotect += ar_ptr->system_mem;
++	}
++
++      fputs ("</heap>\n", fp);
+       ar_ptr = ar_ptr->next;
+     }
+   while (ar_ptr != &main_arena);
diff --git a/SOURCES/glibc-rh1065574-4.patch b/SOURCES/glibc-rh1065574-4.patch
new file mode 100644
index 0000000..c50a3c7
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-4.patch
@@ -0,0 +1,38 @@
+commit c52ff39e8ee052e4a57676d65a27f09bd0a859ad
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Wed Nov 12 22:31:38 2014 +0000
+
+    Fix malloc_info namespace (bug 17570).
+    
+    malloc_info is defined in the same file as malloc and free, but is not
+    an ISO C function, so should be a weak symbol.  This patch makes it
+    so.
+    
+    Tested for x86_64 (testsuite, and that disassembly of installed shared
+    libraries is unchanged by the patch).
+    
+            [BZ #17570]
+            * malloc/malloc.c (malloc_info): Rename to __malloc_info and
+            define as weak alias of __malloc_info.
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index c99b26d4a85e1b22..18e00315c6edba4d 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5007,7 +5007,7 @@ weak_alias (__posix_memalign, posix_memalign)
+ 
+ 
+ int
+-malloc_info (int options, FILE *fp)
++__malloc_info (int options, FILE *fp)
+ {
+   /* For now, at least.  */
+   if (options != 0)
+@@ -5180,6 +5180,7 @@ malloc_info (int options, FILE *fp)
+ 
+   return 0;
+ }
++weak_alias (__malloc_info, malloc_info)
+ 
+ 
+ strong_alias (__libc_calloc, __calloc) weak_alias (__libc_calloc, calloc)
diff --git a/SOURCES/glibc-rh1065574-5.patch b/SOURCES/glibc-rh1065574-5.patch
new file mode 100644
index 0000000..133d422
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-5.patch
@@ -0,0 +1,31 @@
+This is a partial recreation of this upstream commit, restricted to
+the __malloc_info function:
+
+commit 4bf5f2224baa1590f92f7a26930928fe9f7e4b57
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Sep 6 12:49:54 2016 +0200
+
+    malloc: Automated part of conversion to __libc_lock
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index 18e00315c6edba4d..d2a5e251da4f1191 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5049,7 +5049,7 @@ __malloc_info (int options, FILE *fp)
+       } sizes[NFASTBINS + NBINS - 1];
+ #define nsizes (sizeof (sizes) / sizeof (sizes[0]))
+ 
+-      mutex_lock (&ar_ptr->mutex);
++      __libc_lock_lock (ar_ptr->mutex);
+ 
+       for (size_t i = 0; i < NFASTBINS; ++i)
+ 	{
+@@ -5108,7 +5108,7 @@ __malloc_info (int options, FILE *fp)
+ 	  avail += sizes[NFASTBINS - 1 + i].total;
+ 	}
+ 
+-      mutex_unlock (&ar_ptr->mutex);
++      __libc_lock_unlock (ar_ptr->mutex);
+ 
+       total_nfastblocks += nfastblocks;
+       total_fastavail += fastavail;
diff --git a/SOURCES/glibc-rh1065574-6.patch b/SOURCES/glibc-rh1065574-6.patch
new file mode 100644
index 0000000..6ca5491
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-6.patch
@@ -0,0 +1,175 @@
+commit 7a9368a1174cb15b9f1d6342e0e10dd90dae238d
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed Nov 15 11:39:01 2017 +0100
+
+    malloc: Add missing arena lock in malloc_info [BZ #22408]
+    
+    Obtain the size information while the arena lock is acquired, and only
+    print it later.
+
+Conflicts:
+	malloc/Makefile
+	  (Differences in available tests.)
+
+diff --git a/malloc/Makefile b/malloc/Makefile
+index 992cec6b03115a76..6f216f423293dc6c 100644
+--- a/malloc/Makefile
++++ b/malloc/Makefile
+@@ -31,6 +31,7 @@ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
+ 	 tst-malloc-thread-fail tst-malloc-fork-deadlock \
+ 	 tst-interpose-nothread \
+ 	 tst-interpose-thread \
++	 tst-malloc_info \
+ 	 tst-interpose-static-nothread \
+ 	 tst-interpose-static-thread \
+ 	 tst-scratch_buffer \
+@@ -214,3 +215,5 @@ $(objpfx)tst-dynarray-mem: $(objpfx)tst-dynarray.out
+ tst-dynarray-fail-ENV = MALLOC_TRACE=$(objpfx)tst-dynarray-fail.mtrace
+ $(objpfx)tst-dynarray-fail-mem: $(objpfx)tst-dynarray-fail.out
+ 	$(common-objpfx)malloc/mtrace $(objpfx)tst-dynarray-fail.mtrace > $@
++
++$(objpfx)tst-malloc_info: $(shared-thread-library)
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index d2a5e251da4f1191..035f2167be7019d8 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5108,6 +5108,15 @@ __malloc_info (int options, FILE *fp)
+ 	  avail += sizes[NFASTBINS - 1 + i].total;
+ 	}
+ 
++      size_t heap_size = 0;
++      size_t heap_mprotect_size = 0;
++      if (ar_ptr != &main_arena)
++	{
++	  heap_info *heap = heap_for_ptr (top (ar_ptr));
++	  heap_size = heap->size;
++	  heap_mprotect_size = heap->mprotect_size;
++	}
++
+       __libc_lock_unlock (ar_ptr->mutex);
+ 
+       total_nfastblocks += nfastblocks;
+@@ -5141,13 +5150,12 @@ __malloc_info (int options, FILE *fp)
+ 
+       if (ar_ptr != &main_arena)
+ 	{
+-	  heap_info *heap = heap_for_ptr (top (ar_ptr));
+ 	  fprintf (fp,
+ 		   "<aspace type=\"total\" size=\"%zu\"/>\n"
+ 		   "<aspace type=\"mprotect\" size=\"%zu\"/>\n",
+-		   heap->size, heap->mprotect_size);
+-	  total_aspace += heap->size;
+-	  total_aspace_mprotect += heap->mprotect_size;
++		   heap_size, heap_mprotect_size);
++	  total_aspace += heap_size;
++	  total_aspace_mprotect += heap_mprotect_size;
+ 	}
+       else
+ 	{
+diff --git a/malloc/tst-malloc_info.c b/malloc/tst-malloc_info.c
+new file mode 100644
+index 0000000000000000..a25b8cbeae78e710
+--- /dev/null
++++ b/malloc/tst-malloc_info.c
+@@ -0,0 +1,101 @@
++/* Smoke test for malloc_info.
++   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 purpose of this test is to provide a quick way to run
++   malloc_info in a multi-threaded process.  */
++
++#include <array_length.h>
++#include <malloc.h>
++#include <stdlib.h>
++#include <support/support.h>
++#include <support/xthread.h>
++
++/* This barrier is used to have the main thread wait until the helper
++   threads have performed their allocations.  */
++static pthread_barrier_t barrier;
++
++enum
++  {
++    /* Number of threads performing allocations.  */
++    thread_count  = 4,
++
++    /* Amount of memory allocation per thread.  This should be large
++       enough to cause the allocation of multiple heaps per arena.  */
++    per_thread_allocations
++      = sizeof (void *) == 4 ? 16 * 1024 * 1024 : 128 * 1024 * 1024,
++  };
++
++static void *
++allocation_thread_function (void *closure)
++{
++  struct list
++  {
++    struct list *next;
++    long dummy[4];
++  };
++
++  struct list *head = NULL;
++  size_t allocated = 0;
++  while (allocated < per_thread_allocations)
++    {
++      struct list *new_head = xmalloc (sizeof (*new_head));
++      allocated += sizeof (*new_head);
++      new_head->next = head;
++      head = new_head;
++    }
++
++  xpthread_barrier_wait (&barrier);
++
++  /* Main thread prints first statistics here.  */
++
++  xpthread_barrier_wait (&barrier);
++
++  while (head != NULL)
++    {
++      struct list *next_head = head->next;
++      free (head);
++      head = next_head;
++    }
++
++  return NULL;
++}
++
++static int
++do_test (void)
++{
++  xpthread_barrier_init (&barrier, NULL, thread_count + 1);
++
++  pthread_t threads[thread_count];
++  for (size_t i = 0; i < array_length (threads); ++i)
++    threads[i] = xpthread_create (NULL, allocation_thread_function, NULL);
++
++  xpthread_barrier_wait (&barrier);
++  puts ("info: After allocation:");
++  malloc_info (0, stdout);
++
++  xpthread_barrier_wait (&barrier);
++  for (size_t i = 0; i < array_length (threads); ++i)
++    xpthread_join (threads[i]);
++
++  puts ("\ninfo: After deallocation:");
++  malloc_info (0, stdout);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
diff --git a/SOURCES/glibc-rh1065574-7.patch b/SOURCES/glibc-rh1065574-7.patch
new file mode 100644
index 0000000..b3340c0
--- /dev/null
+++ b/SOURCES/glibc-rh1065574-7.patch
@@ -0,0 +1,24 @@
+commit b0f6679bcd738ea244a14acd879d974901e56c8e
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Thu Aug 1 14:06:24 2019 +0200
+
+    malloc: Remove unwanted leading whitespace in malloc_info [BZ #24867]
+    
+    It was introduced in commit 6c8dbf00f536d78b1937b5af6f57be47fd376344
+    ("Reformat malloc to gnu style.").
+    
+    Reviewed-by: Carlos O'Donell <carlos@redhat.com>
+
+diff --git a/malloc/malloc.c b/malloc/malloc.c
+index 035f2167be7019d8..ffa0f7f00152f339 100644
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -5127,7 +5127,7 @@ __malloc_info (int options, FILE *fp)
+ 
+       for (size_t i = 0; i < nsizes; ++i)
+ 	if (sizes[i].count != 0 && i != NFASTBINS)
+-	  fprintf (fp, "							      \
++	  fprintf (fp, "\
+   <size from=\"%zu\" to=\"%zu\" total=\"%zu\" count=\"%zu\"/>\n",
+ 		   sizes[i].from, sizes[i].to, sizes[i].total, sizes[i].count);
+ 
diff --git a/SOURCES/glibc-rh1067755.patch b/SOURCES/glibc-rh1067755.patch
new file mode 100644
index 0000000..9aa89d9
--- /dev/null
+++ b/SOURCES/glibc-rh1067755.patch
@@ -0,0 +1,123 @@
+diff --git glibc-2.17-c758a686/elf/tst-stackguard1.c glibc-2.17-c758a686/elf/tst-stackguard1.c
+index 2b4fd9a..fba60bd 100644
+--- glibc-2.17-c758a686/elf/tst-stackguard1.c
++++ glibc-2.17-c758a686/elf/tst-stackguard1.c
+@@ -23,6 +23,7 @@
+ #include <string.h>
+ #include <sys/wait.h>
+ #include <stackguard-macros.h>
++#include <tls.h>
+ #include <unistd.h>
+ 
+ static const char *command;
+diff --git glibc-2.17-c758a686/include/errno.h glibc-2.17-c758a686/include/errno.h
+index 98c6080..f1b93a8 100644
+--- glibc-2.17-c758a686/include/errno.h
++++ glibc-2.17-c758a686/include/errno.h
+@@ -17,7 +17,7 @@
+ #  define errno rtld_errno
+ extern int rtld_errno attribute_hidden;
+ 
+-# else
++# elif !defined NOT_IN_libc || defined IN_LIB
+ 
+ #  include <tls.h>
+ 
+@@ -29,7 +29,7 @@ extern int rtld_errno attribute_hidden;
+ #  endif
+ extern __thread int errno attribute_tls_model_ie;
+ 
+-# endif	/* RTLD_PRIVATE_ERRNO */
++# endif	/* !NOT_IN_libc || IN_LIB */
+ 
+ # define __set_errno(val) (errno = (val))
+ 
+diff --git glibc-2.17-c758a686/include/netdb.h glibc-2.17-c758a686/include/netdb.h
+index 3f2ae06..8a569ba 100644
+--- glibc-2.17-c758a686/include/netdb.h
++++ glibc-2.17-c758a686/include/netdb.h
+@@ -3,18 +3,20 @@
+ 
+ #ifndef _ISOMAC
+ /* Macros for accessing h_errno from inside libc.  */
+-# undef  h_errno
+-# ifdef _LIBC_REENTRANT
+-#  include <tls.h>
+-#  ifndef NOT_IN_libc
+-#   define h_errno __libc_h_errno
+-#  else
+-#   define h_errno h_errno	/* For #ifndef h_errno tests.  */
+-#  endif
++# if !defined NOT_IN_libc || defined IN_LIB
++#  undef  h_errno
++#  ifdef _LIBC_REENTRANT
++#   include <tls.h>
++#   ifndef NOT_IN_libc
++#    define h_errno __libc_h_errno
++#   else
++#    define h_errno h_errno	/* For #ifndef h_errno tests.  */
++#   endif
+ extern __thread int h_errno attribute_tls_model_ie;
+-# else
++#  else
+ extern int h_errno;
+-# endif	/* _LIBC_REENTRANT */
++#  endif	/* _LIBC_REENTRANT */
++# endif /* !NOT_IN_libc || IN_LIB */
+ # define __set_h_errno(x) (h_errno = (x))
+ 
+ libc_hidden_proto (hstrerror)
+diff --git glibc-2.17-c758a686/nptl/tst-cancel14.c glibc-2.17-c758a686/nptl/tst-cancel14.c
+index fbaed49..ca9042d 100644
+--- glibc-2.17-c758a686/nptl/tst-cancel14.c
++++ glibc-2.17-c758a686/nptl/tst-cancel14.c
+@@ -23,6 +23,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <sys/time.h>
+ 
+ 
+ static pthread_barrier_t bar;
+diff --git glibc-2.17-c758a686/nptl/tst-cancel15.c glibc-2.17-c758a686/nptl/tst-cancel15.c
+index 0119cc7..3f320ad 100644
+--- glibc-2.17-c758a686/nptl/tst-cancel15.c
++++ glibc-2.17-c758a686/nptl/tst-cancel15.c
+@@ -23,6 +23,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
++#include <sys/time.h>
+ 
+ 
+ static pthread_barrier_t bar;
+diff --git glibc-2.17-c758a686/nptl/tst-mutex9.c glibc-2.17-c758a686/nptl/tst-mutex9.c
+index adb3b61..1d689bd 100644
+--- glibc-2.17-c758a686/nptl/tst-mutex9.c
++++ glibc-2.17-c758a686/nptl/tst-mutex9.c
+@@ -18,10 +18,13 @@
+ 
+ #include <errno.h>
+ #include <pthread.h>
++#include <stdint.h>
+ #include <stdio.h>
++#include <stdlib.h>
+ #include <string.h>
+ #include <unistd.h>
+ #include <sys/mman.h>
++#include <sys/time.h>
+ #include <sys/wait.h>
+ 
+ 
+diff --git glibc-2.17-c758a686/nptl/tst-stackguard1.c glibc-2.17-c758a686/nptl/tst-stackguard1.c
+index f0f707f..57a48ad 100644
+--- glibc-2.17-c758a686/nptl/tst-stackguard1.c
++++ glibc-2.17-c758a686/nptl/tst-stackguard1.c
+@@ -24,6 +24,7 @@
+ #include <string.h>
+ #include <sys/wait.h>
+ #include <stackguard-macros.h>
++#include <tls.h>
+ #include <unistd.h>
+ 
+ static const char *command;
diff --git a/SOURCES/glibc-rh1070458.patch b/SOURCES/glibc-rh1070458.patch
new file mode 100644
index 0000000..31b2966
--- /dev/null
+++ b/SOURCES/glibc-rh1070458.patch
@@ -0,0 +1,124 @@
+Backport of commit f8b4877a75765b14432a6f83ead11dcecc5b1985
+Author: Marcus Shawcroft <marcus.shawcroft@linaro.org>
+Date:   Fri Jul 26 08:29:17 2013 +0100
+
+    [AArch64] Provide symbol version for _mcount.
+
+2013-07-26  Marcus Shawcroft  <marcus.shawcroft@linaro.org>
+
+       * sysdeps/aarch64/Versions: New file.
+       * sysdeps/aarch64/machine-gmon.h: New file.
+       * sysdeps/aarch64/mcount.c: New file.
+       * sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist (_mcount): Add.
+
+
+
+diff -ruNp glibc-2.17-c758a686/ports/sysdeps/aarch64/machine-gmon.h glibc-2.17-c758a686/ports/sysdeps/aarch64/machine-gmon.h
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/machine-gmon.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/machine-gmon.h	2014-03-27 12:06:51.361046886 -0400
+@@ -1,5 +1,5 @@
+-/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
+-
++/* AArch64 definitions for profiling support.
++   Copyright (C) 1996-2014 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
+@@ -13,13 +13,22 @@
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+-   License along with the GNU C Library.  If not, see
++   License along with the GNU C Library; if not, see
+    <http://www.gnu.org/licenses/>.  */
+ 
+-#define _MCOUNT_DECL(from, self) \
+- void __mcount_internal (u_long from, u_long self)
+-
+-/* Call __mcount_internal with our the return PC for our caller, and
+-   the return PC our caller will return to.  Empty since we use an
+-   assembly stub instead. */
+-#define MCOUNT
++/* Accept 'frompc' address as argument from the function that calls
++   __mcount for profiling.  Use  __builtin_return_address (0)
++   for the 'selfpc' address.  */
++
++#include <sysdep.h>
++
++static void mcount_internal (u_long frompc, u_long selfpc);
++
++#define _MCOUNT_DECL(frompc, selfpc) \
++static inline void mcount_internal (u_long frompc, u_long selfpc)
++
++#define MCOUNT                                                    \
++void __mcount (void *frompc)                                      \
++{                                                                 \
++  mcount_internal ((u_long) frompc, (u_long) RETURN_ADDRESS (0)); \
++}
+diff -ruNp glibc-2.17-c758a686/ports/sysdeps/aarch64/mcount.c glibc-2.17-c758a686/ports/sysdeps/aarch64/mcount.c
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/mcount.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/mcount.c	2014-03-27 11:54:54.435418262 -0400
+@@ -0,0 +1,33 @@
++/* Copyright (C) 2013 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 <shlib-compat.h>
++
++#include <gmon/mcount.c>
++
++/* We forgot to add _mcount in glibc 2.17.  We added it in 2.18
++   therefore we want it to be added with version GLIBC_2_18.  However,
++   setting the version is not straight forward because a generic
++   Version file includes an earlier 2.xx version for each this symbol
++   and the linker uses the first version it sees.  */
++
++#if SHLIB_COMPAT (libc, GLIBC_2_17, GLIBC_2_18)
++versioned_symbol (libc, __mcount, _mcount, GLIBC_2_18);
++#else
++strong_alias (__mcount, _mcount);
++#endif
+diff -ruNp glibc-2.17-c758a686/ports/sysdeps/aarch64/Versions glibc-2.17-c758a686/ports/sysdeps/aarch64/Versions
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/Versions	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/Versions	2014-03-27 11:54:54.435418262 -0400
+@@ -0,0 +1,5 @@
++libc {
++  GLIBC_2.18 {
++    _mcount;
++  }
++}
+diff -ruNp glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/nptl/libc.abilist	2014-03-27 11:54:54.495412015 -0400
+@@ -2077,3 +2077,6 @@ GLIBC_2.17
+  xencrypt F
+  xprt_register F
+  xprt_unregister F
++GLIBC_2.18
++ GLIBC_2.18 A
++ _mcount F
+diff -ruNp glibc-2.17-c758a686/Versions.def glibc-2.17-c758a686/Versions.def
+--- glibc-2.17-c758a686/Versions.def	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/Versions.def	2014-03-27 11:54:54.535407851 -0400
+@@ -34,6 +34,7 @@ libc {
+   GLIBC_2.15
+   GLIBC_2.16
+   GLIBC_2.17
++  GLIBC_2.18
+   HURD_CTHREADS_0.3
+ %ifdef EXPORT_UNWIND_FIND_FDE
+   GCC_3.0
diff --git a/SOURCES/glibc-rh1070471.patch b/SOURCES/glibc-rh1070471.patch
new file mode 100644
index 0000000..0e38ad6
--- /dev/null
+++ b/SOURCES/glibc-rh1070471.patch
@@ -0,0 +1,53 @@
+Backport of commit 052aff95782fefe9c63566471063e8b20836bfb8
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Wed Jan 23 00:42:51 2013 +0000
+
+    Make bits/wchar.h correct for all architectures (bug 15036).
+
+2013-01-23  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #15036]
+	* bits/wchar.h (__WCHAR_MAX): Define based on __WCHAR_MAX__, or
+	based on [L'\0' - 1 > 0] if [!__WCHAR_MAX__].
+	(__WCHAR_MIN): Likewise, using __WCHAR_MIN__.
+	* sysdeps/unix/sysv/linux/x86/bits/wchar.h: Remove.
+
+
+
+diff -ruNp glibc-2.17-c758a686/bits/wchar.h glibc-2.17-c758a686/bits/wchar.h
+--- glibc-2.17-c758a686/bits/wchar.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/bits/wchar.h	2014-03-27 14:53:45.940914030 -0400
+@@ -19,7 +19,31 @@
+ #ifndef _BITS_WCHAR_H
+ #define _BITS_WCHAR_H	1
+ 
+-#define __WCHAR_MIN	(-2147483647 - 1)
+-#define __WCHAR_MAX	(2147483647)
++/* The fallback definitions, for when __WCHAR_MAX__ or __WCHAR_MIN__
++   are not defined, give the right value and type as long as both int
++   and wchar_t are 32-bit types.  Adding L'\0' to a constant value
++   ensures that the type is correct; it is necessary to use (L'\0' +
++   0) rather than just L'\0' so that the type in C++ is the promoted
++   version of wchar_t rather than the distinct wchar_t type itself.
++   Because wchar_t in preprocessor #if expressions is treated as
++   intmax_t or uintmax_t, the expression (L'\0' - 1) would have the
++   wrong value for WCHAR_MAX in such expressions and so cannot be used
++   to define __WCHAR_MAX in the unsigned case.  */
++
++#ifdef __WCHAR_MAX__
++# define __WCHAR_MAX	__WCHAR_MAX__
++#elif L'\0' - 1 > 0
++# define __WCHAR_MAX	(0xffffffffu + L'\0')
++#else
++# define __WCHAR_MAX	(0x7fffffff + L'\0')
++#endif
++
++#ifdef __WCHAR_MIN__
++# define __WCHAR_MIN	__WCHAR_MIN__
++#elif L'\0' - 1 > 0
++# define __WCHAR_MIN	(L'\0' + 0)
++#else
++# define __WCHAR_MIN	(-__WCHAR_MAX - 1)
++#endif
+ 
+ #endif	/* bits/wchar.h */
diff --git a/SOURCES/glibc-rh1070806.patch b/SOURCES/glibc-rh1070806.patch
new file mode 100644
index 0000000..9f5fa3d
--- /dev/null
+++ b/SOURCES/glibc-rh1070806.patch
@@ -0,0 +1,118 @@
+Comprehensive stack protector support was added to upstream glibc with
+this commit:
+
+commit cecbc7967f0bcac718b6f8f8942b58403c0e917c
+Author: Nick Alcock <nick.alcock@oracle.com>
+Date:   Mon Dec 26 10:09:10 2016 +0100
+
+    Enable -fstack-protector=* when requested by configure [BZ #7065]
+
+It is a superset of the functionality in this patch.
+
+diff -urN glibc-2.17-c758a686/config.make.in glibc-2.17-c758a686/config.make.in
+--- glibc-2.17-c758a686/config.make.in	2014-02-27 10:33:11.466763885 -0500
++++ glibc-2.17-c758a686/config.make.in	2014-02-27 10:36:44.481320149 -0500
+@@ -62,6 +62,7 @@
+ have-as-vis3 = @libc_cv_sparc_as_vis3@
+ gnu89-inline-CFLAGS = @gnu89_inline@
+ have-ssp = @libc_cv_ssp@
++have-ssp-strong = @libc_cv_ssp_strong@
+ have-selinux = @have_selinux@
+ have-libaudit = @have_libaudit@
+ have-libcap = @have_libcap@
+diff -urN glibc-2.17-c758a686/configure glibc-2.17-c758a686/configure
+--- glibc-2.17-c758a686/configure	2014-02-27 10:33:11.561763687 -0500
++++ glibc-2.17-c758a686/configure	2014-02-27 10:32:28.885852593 -0500
+@@ -610,6 +610,7 @@
+ libc_cv_cc_submachine
+ exceptions
+ gnu89_inline
++libc_cv_ssp_strong
+ libc_cv_ssp
+ fno_unit_at_a_time
+ libc_cv_output_format
+@@ -6758,6 +6759,27 @@
+ $as_echo "$libc_cv_ssp" >&6; }
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fstack-protector-strong" >&5
++$as_echo_n "checking for -fstack-protector-strong... " >&6; }
++if ${libc_cv_ssp_strong+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Werror -fstack-protector-strong -xc /dev/null -S -o /dev/null'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }; then :
++  libc_cv_ssp_strong=yes
++else
++  libc_cv_ssp_strong=no
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ssp_strong" >&5
++$as_echo "$libc_cv_ssp_strong" >&6; }
++
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -fgnu89-inline" >&5
+ $as_echo_n "checking for -fgnu89-inline... " >&6; }
+ if ${libc_cv_gnu89_inline+:} false; then :
+diff -urN glibc-2.17-c758a686/configure.in glibc-2.17-c758a686/configure.in
+--- glibc-2.17-c758a686/configure.in	2014-02-27 10:33:11.469763878 -0500
++++ glibc-2.17-c758a686/configure.in	2014-02-27 10:32:09.171893663 -0500
+@@ -1682,6 +1682,13 @@
+ ])
+ AC_SUBST(libc_cv_ssp)
+ 
++AC_CACHE_CHECK(for -fstack-protector-strong, libc_cv_ssp_strong, [dnl
++LIBC_TRY_CC_OPTION([$CFLAGS $CPPFLAGS -Werror -fstack-protector-strong],
++		   [libc_cv_ssp_strong=yes],
++		   [libc_cv_ssp_strong=no])
++])
++AC_SUBST(libc_cv_ssp_strong)
++
+ AC_CACHE_CHECK(for -fgnu89-inline, libc_cv_gnu89_inline, [dnl
+ cat > conftest.c <<EOF
+ int foo;
+diff -urN glibc-2.17-c758a686/login/Makefile glibc-2.17-c758a686/login/Makefile
+--- glibc-2.17-c758a686/login/Makefile	2014-02-27 10:33:11.325764178 -0500
++++ glibc-2.17-c758a686/login/Makefile	2014-02-27 10:35:30.785473661 -0500
+@@ -60,6 +60,9 @@
+ ifeq (yes,$(have-ssp))
+ pt_chown-cflags += -fstack-protector
+ endif
++ifeq (yes,$(have-ssp-strong))
++pt_chown-cflags += -fstack-protector-strong
++endif
+ ifeq (yes,$(have-libcap))
+ libcap = -lcap
+ endif
+diff -urN glibc-2.17-c758a686/nscd/Makefile glibc-2.17-c758a686/nscd/Makefile
+--- glibc-2.17-c758a686/nscd/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nscd/Makefile	2014-02-27 10:36:00.017412769 -0500
+@@ -87,6 +87,9 @@
+ ifeq (yes,$(have-ssp))
+ CFLAGS-nonlib += -fstack-protector
+ endif
++ifeq (yes,$(have-ssp-strong))
++CFLAGS-nonlib += -fstack-protector-strong
++endif
+ 
+ ifeq (yesyes,$(have-fpie)$(build-shared))
+ LDFLAGS-nscd = -Wl,-z,now
+diff -urN glibc-2.17-c758a686/resolv/Makefile glibc-2.17-c758a686/resolv/Makefile
+--- glibc-2.17-c758a686/resolv/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/resolv/Makefile	2014-02-27 10:36:29.449351461 -0500
+@@ -79,6 +79,10 @@
+ ifeq (yes,$(have-ssp))
+ CFLAGS-libresolv += -fstack-protector
+ endif
++ifeq (yes,$(have-ssp-strong))
++CFLAGS-libresolv += -fstack-protector-strong
++endif
++
+ CFLAGS-res_hconf.c = -fexceptions
+ 
+ # The BIND code elicits some harmless warnings.
diff --git a/SOURCES/glibc-rh1073667.patch b/SOURCES/glibc-rh1073667.patch
new file mode 100644
index 0000000..46657cf
--- /dev/null
+++ b/SOURCES/glibc-rh1073667.patch
@@ -0,0 +1,91 @@
+commit e39adf43c7d1979884dd304ed1250baf1f78fadc
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon May 20 10:19:31 2013 +0200
+
+    AArch64: Don't clobber argument for tail call to __sigjmp_save in sigsetjmp
+
+diff --git glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S
+index cff81c7..10e0709 100644
+--- glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S
++++ glibc-2.17-c758a686/ports/sysdeps/aarch64/setjmp.S
+@@ -44,8 +44,14 @@ ENTRY (__sigsetjmp)
+ 	stp	d10, d11, [x0, #JB_D10<<3]
+ 	stp	d12, d13, [x0, #JB_D12<<3]
+ 	stp	d14, d15, [x0, #JB_D14<<3]
+-	mov	x1,  sp
+-	str	x1,  [x0, #JB_SP<<3]
++	mov	x2,  sp
++	str	x2,  [x0, #JB_SP<<3]
++#if defined NOT_IN_libc && defined IS_IN_rtld
++	/* In ld.so we never save the signal mask */
++	mov	w0, #0
++	RET
++#else
+ 	b	C_SYMBOL_NAME(__sigjmp_save)
++#endif
+ END (__sigsetjmp)
+ hidden_def (__sigsetjmp)
+diff --git glibc-2.17-c758a686/setjmp/Makefile glibc-2.17-c758a686/setjmp/Makefile
+index 6124333..913359c 100644
+--- glibc-2.17-c758a686/setjmp/Makefile
++++ glibc-2.17-c758a686/setjmp/Makefile
+@@ -25,7 +25,8 @@ headers	:= setjmp.h bits/setjmp.h bits/setjmp2.h
+ routines	:= setjmp sigjmp bsd-setjmp bsd-_setjmp \
+ 		   longjmp __longjmp jmp-unwind
+ 
+-tests		:= tst-setjmp jmpbug bug269-setjmp
++tests		:= tst-setjmp jmpbug bug269-setjmp \
++		   tst-sigsetjmp
+ 
+ 
+ include ../Rules
+diff --git glibc-2.17-c758a686/setjmp/tst-sigsetjmp.c glibc-2.17-c758a686/setjmp/tst-sigsetjmp.c
+new file mode 100644
+index 0000000..467c26a
+--- /dev/null
++++ glibc-2.17-c758a686/setjmp/tst-sigsetjmp.c
+@@ -0,0 +1,44 @@
++/* Copyright (C) 2013 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 case for BZ #15493 */
++
++#include <stdlib.h>
++#include <signal.h>
++#include <setjmp.h>
++
++static int
++do_test (void)
++{
++  sigjmp_buf sj;
++  sigset_t m;
++
++  sigemptyset (&m);
++  sigprocmask (SIG_SETMASK, &m, NULL);
++  if (sigsetjmp (sj, 0) == 0)
++    {
++      sigaddset (&m, SIGUSR1);
++      sigprocmask (SIG_SETMASK, &m, NULL);
++      siglongjmp (sj, 1);
++      return EXIT_FAILURE;
++    }
++  sigprocmask (SIG_SETMASK, NULL, &m);
++  return sigismember (&m, SIGUSR1) ? EXIT_SUCCESS : EXIT_FAILURE;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
diff --git a/SOURCES/glibc-rh1074410-2.patch b/SOURCES/glibc-rh1074410-2.patch
new file mode 100644
index 0000000..21c876d
--- /dev/null
+++ b/SOURCES/glibc-rh1074410-2.patch
@@ -0,0 +1,259 @@
+commit e8b9e065a1ae9d7d8b888909ae761cbd5cf7be32
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Mar 19 00:42:30 2014 +0530
+
+    Fix offset computation for append+ mode on switching from read (BZ #16724)
+    
+    The offset computation in write mode uses the fact that _IO_read_end
+    is kept in sync with the external file offset.  This however is not
+    true when O_APPEND is in effect since switching to write mode ought to
+    send the external file offset to the end of file without making the
+    necessary adjustment to _IO_read_end.
+    
+    Hence in append mode, offset computation when writing should only
+    consider the effect of unflushed writes, i.e. from _IO_write_base to
+    _IO_write_ptr.
+
+diff --git glibc-2.17-c758a686/libio/Makefile glibc-2.17-c758a686/libio/Makefile
+index 69c25c0..4bedfad 100644
+--- glibc-2.17-c758a686/libio/Makefile
++++ glibc-2.17-c758a686/libio/Makefile
+@@ -60,7 +60,8 @@ tests = tst_swprintf tst_wprintf tst_swscanf tst_wscanf tst_getwc tst_putwc   \
+ 	tst-wmemstream1 tst-wmemstream2 \
+ 	bug-memstream1 bug-wmemstream1 \
+ 	tst-setvbuf1 tst-popen1 tst-fgetwc bug-wsetpos tst-fseek \
+-	tst-fwrite-error tst-ftell-active-handler
++	tst-fwrite-error tst-ftell-active-handler \
++	tst-ftell-append
+ ifeq (yes,$(build-shared))
+ # Add test-fopenloc only if shared library is enabled since it depends on
+ # shared localedata objects.
+diff --git glibc-2.17-c758a686/libio/fileops.c glibc-2.17-c758a686/libio/fileops.c
+index cf68dbf..204cfea 100644
+--- glibc-2.17-c758a686/libio/fileops.c
++++ glibc-2.17-c758a686/libio/fileops.c
+@@ -91,7 +91,9 @@ extern struct __gconv_trans_data __libio_translit attribute_hidden;
+ 
+    The position in the buffer that corresponds to the position
+    in external file system is normally _IO_read_end, except in putback
+-   mode, when it is _IO_save_end.
++   mode, when it is _IO_save_end and also when the file is in append mode,
++   since switching from read to write mode automatically sends the position in
++   the external file system to the end of file.
+    If the field _fb._offset is >= 0, it gives the offset in
+    the file as a whole corresponding to eGptr(). (?)
+ 
+@@ -966,6 +968,14 @@ do_ftell (_IO_FILE *fp)
+       /* Adjust for unflushed data.  */
+       if (!was_writing)
+ 	offset -= fp->_IO_read_end - fp->_IO_read_ptr;
++      /* We don't trust _IO_read_end to represent the current file offset when
++	 writing in append mode because the value would have to be shifted to
++	 the end of the file during a flush.  Use the write base instead, along
++	 with the new offset we got above when we did a seek to the end of the
++	 file.  */
++      else if (append_mode)
++	offset += fp->_IO_write_ptr - fp->_IO_write_base;
++      /* For all other modes, _IO_read_end represents the file offset.  */
+       else
+ 	offset += fp->_IO_write_ptr - fp->_IO_read_end;
+     }
+diff --git glibc-2.17-c758a686/libio/tst-ftell-append.c glibc-2.17-c758a686/libio/tst-ftell-append.c
+new file mode 100644
+index 0000000..604dc03
+--- /dev/null
++++ glibc-2.17-c758a686/libio/tst-ftell-append.c
+@@ -0,0 +1,169 @@
++/* Verify that ftell returns the correct value after a read and a write on a
++   file opened in a+ mode.
++   Copyright (C) 2014 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 <errno.h>
++#include <unistd.h>
++#include <locale.h>
++#include <wchar.h>
++
++/* data points to either char_data or wide_data, depending on whether we're
++   testing regular file mode or wide mode respectively.  Similarly,
++   fputs_func points to either fputs or fputws.  data_len keeps track of the
++   length of the current data and file_len maintains the current file
++   length.  */
++#define BUF_LEN 4
++static void *buf;
++static char char_buf[BUF_LEN];
++static wchar_t wide_buf[BUF_LEN];
++static const void *data;
++static const char *char_data = "abcdefghijklmnopqrstuvwxyz";
++static const wchar_t *wide_data = L"abcdefghijklmnopqrstuvwxyz";
++static size_t data_len;
++static size_t file_len;
++
++typedef int (*fputs_func_t) (const void *data, FILE *fp);
++fputs_func_t fputs_func;
++
++typedef void *(*fgets_func_t) (void *s, int size, FILE *stream);
++fgets_func_t fgets_func;
++
++static int do_test (void);
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
++
++static FILE *
++init_file (const char *filename)
++{
++  FILE *fp = fopen (filename, "w");
++  if (fp == NULL)
++    {
++      printf ("fopen: %m\n");
++      return NULL;
++    }
++
++  int written = fputs_func (data, fp);
++
++  if (written == EOF)
++    {
++      printf ("fputs failed to write data\n");
++      fclose (fp);
++      return NULL;
++    }
++
++  file_len = data_len;
++
++  fclose (fp);
++
++  fp = fopen (filename, "a+");
++  if (fp == NULL)
++    {
++      printf ("fopen(a+): %m\n");
++      return NULL;
++    }
++
++  return fp;
++}
++
++static int
++do_one_test (const char *filename)
++{
++  FILE *fp = init_file (filename);
++
++  if (fp == NULL)
++    return 1;
++
++  void *ret = fgets_func (buf, BUF_LEN, fp);
++
++  if (ret == NULL)
++    {
++      printf ("read failed: %m\n");
++      fclose (fp);
++      return 1;
++    }
++
++  int written = fputs_func (data, fp);
++
++  if (written == EOF)
++    {
++      printf ("fputs failed to write data\n");
++      fclose (fp);
++      return 1;
++    }
++
++  file_len += data_len;
++
++  long off = ftell (fp);
++
++  if (off != file_len)
++    {
++      printf ("Incorrect offset %ld, expected %zu\n", off, file_len);
++      fclose (fp);
++      return 1;
++    }
++  else
++    printf ("Correct offset %ld after write.\n", off);
++
++  return 0;
++}
++
++/* Run the tests for regular files and wide mode files.  */
++static int
++do_test (void)
++{
++  int ret = 0;
++  char *filename;
++  int fd = create_temp_file ("tst-ftell-append-tmp.", &filename);
++
++  if (fd == -1)
++    {
++      printf ("create_temp_file: %m\n");
++      return 1;
++    }
++
++  close (fd);
++
++  /* Tests for regular files.  */
++  puts ("Regular mode:");
++  fputs_func = (fputs_func_t) fputs;
++  fgets_func = (fgets_func_t) fgets;
++  data = char_data;
++  buf = char_buf;
++  data_len = strlen (char_data);
++  ret |= do_one_test (filename);
++
++  /* Tests for wide files.  */
++  puts ("Wide mode:");
++  if (setlocale (LC_ALL, "en_US.UTF-8") == NULL)
++    {
++      printf ("Cannot set en_US.UTF-8 locale.\n");
++      return 1;
++    }
++  fputs_func = (fputs_func_t) fputws;
++  fgets_func = (fgets_func_t) fgetws;
++  data = wide_data;
++  buf = wide_buf;
++  data_len = wcslen (wide_data);
++  ret |= do_one_test (filename);
++
++  return ret;
++}
+diff --git glibc-2.17-c758a686/libio/wfileops.c glibc-2.17-c758a686/libio/wfileops.c
+index 3199861..f123add 100644
+--- glibc-2.17-c758a686/libio/wfileops.c
++++ glibc-2.17-c758a686/libio/wfileops.c
+@@ -713,9 +713,16 @@ do_ftell_wide (_IO_FILE *fp)
+ 	      offset += outstop - out;
+ 	    }
+ 
+-	  /* _IO_read_end coincides with fp._offset, so the actual file
+-	     position is fp._offset - (_IO_read_end - new_write_ptr).  */
+-	  offset -= fp->_IO_read_end - fp->_IO_write_ptr;
++	  /* We don't trust _IO_read_end to represent the current file offset
++	     when writing in append mode because the value would have to be
++	     shifted to the end of the file during a flush.  Use the write base
++	     instead, along with the new offset we got above when we did a seek
++	     to the end of the file.  */
++	  if (append_mode)
++	    offset += fp->_IO_write_ptr - fp->_IO_write_base;
++	  /* For all other modes, _IO_read_end represents the file offset.  */
++	  else
++	    offset += fp->_IO_write_ptr - fp->_IO_read_end;
+ 	}
+     }
+ 
diff --git a/SOURCES/glibc-rh1074410.patch b/SOURCES/glibc-rh1074410.patch
new file mode 100644
index 0000000..3241ef7
--- /dev/null
+++ b/SOURCES/glibc-rh1074410.patch
@@ -0,0 +1,656 @@
+commit ae42bbc55a9e05976269026ddabcfb917f6e922f
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Mon Mar 17 18:42:53 2014 +0530
+
+    Change offset in fdopen only if setting O_APPEND
+    
+    fdopen should only be allowed to change the offset in the file it
+    attaches to if it is setting O_APPEND.  If O_APPEND is already set, it
+    should not change the state of the handle.
+
+commit ea33158c96c53a64402a772186956c1f5cb556ae
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue Mar 11 17:04:49 2014 +0530
+
+    Fix offset caching for streams and use it for ftell (BZ #16680)
+    
+    The ftell implementation was made conservative to ensure that
+    incorrectly cached offsets never affect it.  However, this causes
+    problems for append mode when a file stream is rewound.  Additionally,
+    the 'clever' trick of using stat to get position for append mode files
+    caused more problems than it solved and broke old behavior.  I have
+    described the various problems that it caused and then finally the
+    solution.
+    
+    For a and a+ mode files, rewinding the stream should result in ftell
+    returning 0 as the offset, but the stat() trick caused it to
+    (incorrectly) always return the end of file.  Now I couldn't find
+    anything in POSIX that specifies the stream position after rewind()
+    for a file opened in 'a' mode, but for 'a+' mode it should be set to
+    0.  For 'a' mode too, it probably makes sense to keep it set to 0 in
+    the interest of retaining old behavior.
+    
+    The initial file position for append mode files is implementation
+    defined, so the implementation could either retain the current file
+    position or move the position to the end of file.  The earlier ftell
+    implementation would move the offset to end of file for append-only
+    mode, but retain the old offset for a+ mode.  It would also cache the
+    offset (this detail is important).  My patch broke this and would set
+    the initial position to end of file for both append modes, thus
+    breaking old behavior.  I was ignorant enough to write an incorrect
+    test case for it too.
+    
+    The Change:
+    
+    I have now brought back the behavior of seeking to end of file for
+    append-only streams, but with a slight difference.  I don't cache the
+    offset though, since we would want ftell to query the current file
+    position through lseek while the stream is not active.  Since the
+    offset is moved to the end of file, we can rely on the file position
+    reported by lseek and we don't need to resort to the stat() nonsense.
+    
+    Finally, the cache is always reliable, except when there are unflished
+    writes in an append mode stream (i.e. both a and a+).  In the latter
+    case, it is safe to just do an lseek to SEEK_END.  The value can be
+    safely cached too, since the file handle is already active at this
+    point.  Incidentally, this is the only state change we affect in the
+    file handle (apart from taking locks of course).
+    
+    I have also updated the test case to correct my impression of the
+    initial file position for a+ streams to the initial behavior.  I have
+    verified that this does not break any existing tests in the testsuite
+    and also passes with the new tests.
+
+commit b1dbb426e164ad1236c2c76268e03fec5c7a7bbe
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Mon Mar 10 16:20:01 2014 +0530
+
+    Fix up return codes for tests in tst-ftell-active-handler
+    
+    The test functions used a variable ret to store failure codes for
+    individual tests, but the variable was incorrectly used to record
+    other failure codes too, resulting in overwriting of the tests status.
+    This is now fixed by making sure that the ret variable is used only
+    for recording test failures.
+    
+    	* libio/tst-ftell-active-handler.c (do_ftell_test): Don't mix
+    	up test status with function return status.
+    	(do_write_test): Likewise.
+    	(do_append_test): Likewise.
+diff --git glibc-2.17-c758a686/libio/fileops.c glibc-2.17-c758a686/libio/fileops.c
+index 2e7bc8d..cf68dbf 100644
+--- glibc-2.17-c758a686/libio/fileops.c
++++ glibc-2.17-c758a686/libio/fileops.c
+@@ -232,13 +232,18 @@ _IO_file_open (fp, filename, posix_mode, prot, read_write, is32not64)
+     return NULL;
+   fp->_fileno = fdesc;
+   _IO_mask_flags (fp, read_write,_IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
+-  if ((read_write & _IO_IS_APPENDING) && (read_write & _IO_NO_READS))
+-    if (_IO_SEEKOFF (fp, (_IO_off64_t)0, _IO_seek_end, _IOS_INPUT|_IOS_OUTPUT)
+-	== _IO_pos_BAD && errno != ESPIPE)
+-      {
+-	close_not_cancel (fdesc);
+-	return NULL;
+-      }
++  /* For append mode, send the file offset to the end of the file.  Don't
++     update the offset cache though, since the file handle is not active.  */
++  if ((read_write & (_IO_IS_APPENDING | _IO_NO_READS))
++      == (_IO_IS_APPENDING | _IO_NO_READS))
++    {
++      _IO_off64_t new_pos = _IO_SYSSEEK (fp, 0, _IO_seek_end);
++      if (new_pos == _IO_pos_BAD && errno != ESPIPE)
++	{
++	  close_not_cancel (fdesc);
++	  return NULL;
++	}
++    }
+   _IO_link_in ((struct _IO_FILE_plus *) fp);
+   return fp;
+ }
+@@ -929,43 +934,13 @@ _IO_file_sync_mmap (_IO_FILE *fp)
+   return 0;
+ }
+ 
+-/* Get the current file offset using a system call.  This is the safest method
+-   to get the current file offset, since we are sure that we get the current
+-   state of the file.  Before the stream handle is activated (by using fread,
+-   fwrite, etc.), an application may alter the state of the file descriptor
+-   underlying it by calling read/write/lseek on it.  Using a cached offset at
+-   this point will result in returning the incorrect value.  Same is the case
+-   when one switches from reading in a+ mode to writing, where the buffer has
+-   not been flushed - the cached offset would reflect the reading position
+-   while the actual write position would be at the end of the file.
+-
+-   do_ftell and do_ftell_wide may resort to using the cached offset in some
+-   special cases instead of calling get_file_offset, but those cases should be
+-   thoroughly described.  */
+-_IO_off64_t
+-get_file_offset (_IO_FILE *fp)
+-{
+-  if ((fp->_flags & _IO_IS_APPENDING) == _IO_IS_APPENDING)
+-    {
+-      struct stat64 st;
+-      bool ret = (_IO_SYSSTAT (fp, &st) == 0 && S_ISREG (st.st_mode));
+-      if (ret)
+-	return st.st_size;
+-      else
+-	return EOF;
+-    }
+-  else
+-    return _IO_SYSSEEK (fp, 0, _IO_seek_cur);
+-}
+-
+-
+-/* ftell{,o} implementation.  Don't modify any state of the file pointer while
+-   we try to get the current state of the stream.  */
++/* ftell{,o} implementation.  The only time we modify the state of the stream
++   is when we have unflushed writes.  In that case we seek to the end and
++   record that offset in the stream object.  */
+ static _IO_off64_t
+ do_ftell (_IO_FILE *fp)
+ {
+-  _IO_off64_t result = 0;
+-  bool use_cached_offset = false;
++  _IO_off64_t result, offset = 0;
+ 
+   /* No point looking at unflushed data if we haven't allocated buffers
+      yet.  */
+@@ -974,39 +949,37 @@ do_ftell (_IO_FILE *fp)
+       bool was_writing = (fp->_IO_write_ptr > fp->_IO_write_base
+ 			  || _IO_in_put_mode (fp));
+ 
++      bool append_mode = (fp->_flags & _IO_IS_APPENDING) == _IO_IS_APPENDING;
++
++      /* When we have unflushed writes in append mode, seek to the end of the
++	 file and record that offset.  This is the only time we change the file
++	 stream state and it is safe since the file handle is active.  */
++      if (was_writing && append_mode)
++	{
++	  result = _IO_SYSSEEK (fp, 0, _IO_seek_end);
++	  if (result == _IO_pos_BAD)
++	    return EOF;
++	  else
++	    fp->_offset = result;
++	}
++
+       /* Adjust for unflushed data.  */
+       if (!was_writing)
+-	result -= fp->_IO_read_end - fp->_IO_read_ptr;
++	offset -= fp->_IO_read_end - fp->_IO_read_ptr;
+       else
+-	result += fp->_IO_write_ptr - fp->_IO_read_end;
+-
+-      /* It is safe to use the cached offset when available if there is
+-	 unbuffered data (indicating that the file handle is active) and the
+-	 handle is not for a file open in a+ mode.  The latter condition is
+-	 because there could be a scenario where there is a switch from read
+-	 mode to write mode using an fseek to an arbitrary position.  In this
+-	 case, there would be unbuffered data due to be appended to the end of
+-	 the file, but the offset may not necessarily be the end of the
+-	 file.  It is fine to use the cached offset when the a+ stream is in
+-	 read mode though, since the offset is maintained correctly in that
+-	 case.  Note that this is not a comprehensive set of cases when the
+-	 offset is reliable.  The offset may be reliable even in some cases
+-	 where there is no unflushed input and the handle is active, but it's
+-	 just that we don't have a way to identify that condition reliably.  */
+-      use_cached_offset = (result != 0 && fp->_offset != _IO_pos_BAD
+-			   && ((fp->_flags & (_IO_IS_APPENDING | _IO_NO_READS))
+-			       == (_IO_IS_APPENDING | _IO_NO_READS)
+-			       && was_writing));
++	offset += fp->_IO_write_ptr - fp->_IO_read_end;
+     }
+ 
+-  if (use_cached_offset)
+-    result += fp->_offset;
++  if (fp->_offset != _IO_pos_BAD)
++    result = fp->_offset;
+   else
+-    result += get_file_offset (fp);
++    result = _IO_SYSSEEK (fp, 0, _IO_seek_cur);
+ 
+   if (result == EOF)
+     return result;
+ 
++  result += offset;
++
+   if (result < 0)
+     {
+       __set_errno (EINVAL);
+@@ -1016,7 +989,6 @@ do_ftell (_IO_FILE *fp)
+   return result;
+ }
+ 
+-
+ _IO_off64_t
+ _IO_new_file_seekoff (fp, offset, dir, mode)
+      _IO_FILE *fp;
+diff --git glibc-2.17-c758a686/libio/iofdopen.c glibc-2.17-c758a686/libio/iofdopen.c
+index 3f266f7..b36d21d 100644
+--- glibc-2.17-c758a686/libio/iofdopen.c
++++ glibc-2.17-c758a686/libio/iofdopen.c
+@@ -59,6 +59,11 @@ _IO_new_fdopen (fd, mode)
+   int i;
+   int use_mmap = 0;
+ 
++  /* Decide whether we modify the offset of the file we attach to and seek to
++     the end of file.  We only do this if the mode is 'a' and if the file
++     descriptor did not have O_APPEND in its flags already.  */
++  bool do_seek = false;
++
+   switch (*mode)
+     {
+     case 'r':
+@@ -128,6 +133,7 @@ _IO_new_fdopen (fd, mode)
+      */
+   if ((posix_mode & O_APPEND) && !(fd_flags & O_APPEND))
+     {
++      do_seek = true;
+ #ifdef F_SETFL
+       if (_IO_fcntl (fd, F_SETFL, fd_flags | O_APPEND) == -1)
+ #endif
+@@ -167,6 +173,16 @@ _IO_new_fdopen (fd, mode)
+   _IO_mask_flags (&new_f->fp.file, read_write,
+ 		  _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
+ 
++  /* For append mode, set the file offset to the end of the file if we added
++     O_APPEND to the file descriptor flags.  Don't update the offset cache
++     though, since the file handle is not active.  */
++  if (do_seek && ((read_write & (_IO_IS_APPENDING | _IO_NO_READS))
++		  == (_IO_IS_APPENDING | _IO_NO_READS)))
++    {
++      _IO_off64_t new_pos = _IO_SYSSEEK (&new_f->fp.file, 0, _IO_seek_end);
++      if (new_pos == _IO_pos_BAD && errno != ESPIPE)
++	return NULL;
++    }
+   return &new_f->fp.file;
+ }
+ libc_hidden_ver (_IO_new_fdopen, _IO_fdopen)
+diff --git glibc-2.17-c758a686/libio/tst-ftell-active-handler.c glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
+index 54bfe63..e9dc7b3 100644
+--- glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
++++ glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
+@@ -88,6 +88,107 @@ static size_t file_len;
+ typedef int (*fputs_func_t) (const void *data, FILE *fp);
+ fputs_func_t fputs_func;
+ 
++/* Test that ftell output after a rewind is correct.  */
++static int
++do_rewind_test (const char *filename)
++{
++  int ret = 0;
++  struct test
++    {
++      const char *mode;
++      int fd_mode;
++      size_t old_off;
++      size_t new_off;
++    } test_modes[] = {
++	  {"w", O_WRONLY, 0, data_len},
++	  {"w+", O_RDWR, 0, data_len},
++	  {"r+", O_RDWR, 0, data_len},
++	  /* The new offsets for 'a' and 'a+' modes have to factor in the
++	     previous writes since they always append to the end of the
++	     file.  */
++	  {"a", O_WRONLY, 0, 3 * data_len},
++	  {"a+", O_RDWR, 0, 4 * data_len},
++    };
++
++  /* Empty the file before the test so that our offsets are simple to
++     calculate.  */
++  FILE *fp = fopen (filename, "w");
++  if (fp == NULL)
++    {
++      printf ("Failed to open file for emptying\n");
++      return 1;
++    }
++  fclose (fp);
++
++  for (int j = 0; j < 2; j++)
++    {
++      for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
++	{
++	  FILE *fp;
++	  int fd;
++	  int fileret;
++
++	  printf ("\trewind: %s (file, \"%s\"): ", j == 0 ? "fdopen" : "fopen",
++		  test_modes[i].mode);
++
++	  if (j == 0)
++	    fileret = get_handles_fdopen (filename, fd, fp,
++					  test_modes[i].fd_mode,
++					  test_modes[i].mode);
++	  else
++	    fileret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++
++	  if (fileret != 0)
++	    return fileret;
++
++	  /* Write some content to the file, rewind and ensure that the ftell
++	     output after the rewind is 0.  POSIX does not specify what the
++	     behavior is when a file is rewound in 'a' mode, so we retain
++	     current behavior, which is to keep the 0 offset.  */
++	  size_t written = fputs_func (data, fp);
++
++	  if (written == EOF)
++	    {
++	      printf ("fputs[1] failed to write data\n");
++	      ret |= 1;
++	    }
++
++	  rewind (fp);
++	  long offset = ftell (fp);
++
++	  if (offset != test_modes[i].old_off)
++	    {
++	      printf ("Incorrect old offset.  Expected %zu, but got %ld, ",
++		      test_modes[i].old_off, offset);
++	      ret |= 1;
++	    }
++	  else
++	    printf ("old offset = %ld, ", offset);
++
++	  written = fputs_func (data, fp);
++
++	  if (written == EOF)
++	    {
++	      printf ("fputs[1] failed to write data\n");
++	      ret |= 1;
++	    }
++
++	  /* After this write, the offset in append modes should factor in the
++	     implicit lseek to the end of file.  */
++	  offset = ftell (fp);
++	  if (offset != test_modes[i].new_off)
++	    {
++	      printf ("Incorrect new offset.  Expected %zu, but got %ld\n",
++		      test_modes[i].new_off, offset);
++	      ret |= 1;
++	    }
++	  else
++	    printf ("new offset = %ld\n", offset);
++	}
++    }
++  return ret;
++}
++
+ /* Test that the value of ftell is not cached when the stream handle is not
+    active.  */
+ static int
+@@ -107,11 +208,13 @@ do_ftell_test (const char *filename)
+ 	  {"w", O_WRONLY, 0, data_len},
+ 	  {"w+", O_RDWR, 0, data_len},
+ 	  {"r+", O_RDWR, 0, data_len},
+-	  /* For 'a' and 'a+' modes, the initial file position should be the
++	  /* For the 'a' mode, the initial file position should be the
+ 	     current end of file. After the write, the offset has data_len
+-	     added to the old value.  */
++	     added to the old value.  For a+ mode however, the initial file
++	     position is the file position of the underlying file descriptor,
++	     since it is initially assumed to be in read mode.  */
+ 	  {"a", O_WRONLY, data_len, 2 * data_len},
+-	  {"a+", O_RDWR, 2 * data_len, 3 * data_len},
++	  {"a+", O_RDWR, 0, 3 * data_len},
+     };
+   for (int j = 0; j < 2; j++)
+     {
+@@ -119,17 +222,20 @@ do_ftell_test (const char *filename)
+ 	{
+ 	  FILE *fp;
+ 	  int fd;
++	  int fileret;
++
+ 	  printf ("\tftell: %s (file, \"%s\"): ", j == 0 ? "fdopen" : "fopen",
+ 		  test_modes[i].mode);
+ 
+ 	  if (j == 0)
+-	    ret = get_handles_fdopen (filename, fd, fp, test_modes[i].fd_mode,
+-				      test_modes[i].mode);
++	    fileret = get_handles_fdopen (filename, fd, fp,
++					  test_modes[i].fd_mode,
++					  test_modes[i].mode);
+ 	  else
+-	    ret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++	    fileret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
+ 
+-	  if (ret != 0)
+-	    return ret;
++	  if (fileret != 0)
++	    return fileret;
+ 
+ 	  long off = ftell (fp);
+ 	  if (off != test_modes[i].old_off)
+@@ -143,13 +249,18 @@ do_ftell_test (const char *filename)
+ 
+ 	  /* The effect of this write on the offset should be seen in the ftell
+ 	     call that follows it.  */
+-	  int ret = write (fd, data, data_len);
++	  int write_ret = write (fd, data, data_len);
++	  if (write_ret != data_len)
++	    {
++	      printf ("write failed (%m)\n");
++	      ret |= 1;
++	    }
+ 	  off = ftell (fp);
+ 
+ 	  if (off != test_modes[i].new_off)
+ 	    {
+ 	      printf ("Incorrect new offset.  Expected %zu but got %ld\n",
+-		      test_modes[i].old_off, off);
++		      test_modes[i].new_off, off);
+ 	      ret |= 1;
+ 	    }
+ 	  else
+@@ -184,21 +295,23 @@ do_write_test (const char *filename)
+     {
+       for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
+ 	{
++	  int fileret;
+ 	  printf ("\twrite: %s (file, \"%s\"): ", j == 0 ? "fopen" : "fdopen",
+ 		  test_modes[i].mode);
+ 
+ 	  if (j == 0)
+-	    ret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++	    fileret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
+ 	  else
+-	    ret = get_handles_fdopen (filename, fd, fp, test_modes[i].fd_mode,
+-				      test_modes[i].mode);
++	    fileret = get_handles_fdopen (filename, fd, fp,
++					  test_modes[i].fd_mode,
++					  test_modes[i].mode);
+ 
+-	  if (ret != 0)
+-	    return ret;
++	  if (fileret != 0)
++	    return fileret;
+ 
+ 	  /* Move offset to just before the end of the file.  */
+-	  off_t ret = lseek (fd, file_len - 1, SEEK_SET);
+-	  if (ret == -1)
++	  off_t seek_ret = lseek (fd, file_len - 1, SEEK_SET);
++	  if (seek_ret == -1)
+ 	    {
+ 	      printf ("lseek failed: %m\n");
+ 	      ret |= 1;
+@@ -258,17 +371,20 @@ do_append_test (const char *filename)
+     {
+       for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
+ 	{
++	  int fileret;
++
+ 	  printf ("\tappend: %s (file, \"%s\"): ", j == 0 ? "fopen" : "fdopen",
+ 		  test_modes[i].mode);
+ 
+ 	  if (j == 0)
+-	    ret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++	    fileret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
+ 	  else
+-	    ret = get_handles_fdopen (filename, fd, fp, test_modes[i].fd_mode,
+-				      test_modes[i].mode);
++	    fileret = get_handles_fdopen (filename, fd, fp,
++					  test_modes[i].fd_mode,
++					  test_modes[i].mode);
+ 
+-	  if (ret != 0)
+-	    return ret;
++	  if (fileret != 0)
++	    return fileret;
+ 
+ 	  /* Write some data.  */
+ 	  size_t written = fputs_func (data, fp);
+@@ -298,6 +414,61 @@ do_append_test (const char *filename)
+ 	}
+     }
+ 
++  /* For fdopen in 'a' mode, the file descriptor should not change if the file
++     is already open with the O_APPEND flag set.  */
++  fd = open (filename, O_WRONLY | O_APPEND, 0);
++  if (fd == -1)
++    {
++      printf ("open(O_APPEND) failed: %m\n");
++      return 1;
++    }
++
++  off_t seek_ret = lseek (fd, file_len - 1, SEEK_SET);
++  if (seek_ret == -1)
++    {
++      printf ("lseek[O_APPEND][0] failed: %m\n");
++      ret |= 1;
++    }
++
++  fp = fdopen (fd, "a");
++  if (fp == NULL)
++    {
++      printf ("fdopen(O_APPEND) failed: %m\n");
++      close (fd);
++      return 1;
++    }
++
++  off_t new_seek_ret = lseek (fd, 0, SEEK_CUR);
++  if (seek_ret == -1)
++    {
++      printf ("lseek[O_APPEND][1] failed: %m\n");
++      ret |= 1;
++    }
++
++  printf ("\tappend: fdopen (file, \"a\"): O_APPEND: ");
++
++  if (seek_ret != new_seek_ret)
++    {
++      printf ("incorrectly modified file offset to %ld, should be %ld",
++	      new_seek_ret, seek_ret);
++      ret |= 1;
++    }
++  else
++    printf ("retained current file offset %ld", seek_ret);
++
++  new_seek_ret = ftello (fp);
++
++  if (seek_ret != new_seek_ret)
++    {
++      printf (", ftello reported incorrect offset %ld, should be %ld\n",
++	      new_seek_ret, seek_ret);
++      ret |= 1;
++    }
++  else
++    printf (", ftello reported correct offset %ld\n", seek_ret);
++
++  fclose (fp);
++
+   return ret;
+ }
+ 
+@@ -309,6 +480,7 @@ do_one_test (const char *filename)
+   ret |= do_ftell_test (filename);
+   ret |= do_write_test (filename);
+   ret |= do_append_test (filename);
++  ret |= do_rewind_test (filename);
+ 
+   return ret;
+ }
+diff --git glibc-2.17-c758a686/libio/wfileops.c glibc-2.17-c758a686/libio/wfileops.c
+index 8b2e108..3199861 100644
+--- glibc-2.17-c758a686/libio/wfileops.c
++++ glibc-2.17-c758a686/libio/wfileops.c
+@@ -597,12 +597,12 @@ done:
+ }
+ 
+ /* ftell{,o} implementation for wide mode.  Don't modify any state of the file
+-   pointer while we try to get the current state of the stream.  */
++   pointer while we try to get the current state of the stream except in one
++   case, which is when we have unflushed writes in append mode.  */
+ static _IO_off64_t
+ do_ftell_wide (_IO_FILE *fp)
+ {
+   _IO_off64_t result, offset = 0;
+-  bool use_cached_offset = false;
+ 
+   /* No point looking for offsets in the buffer if it hasn't even been
+      allocated.  */
+@@ -615,6 +615,20 @@ do_ftell_wide (_IO_FILE *fp)
+ 			   > fp->_wide_data->_IO_write_base)
+ 			  || _IO_in_put_mode (fp));
+ 
++      bool append_mode = (fp->_flags & _IO_IS_APPENDING) == _IO_IS_APPENDING;
++
++      /* When we have unflushed writes in append mode, seek to the end of the
++	 file and record that offset.  This is the only time we change the file
++	 stream state and it is safe since the file handle is active.  */
++      if (was_writing && append_mode)
++	{
++	  result = _IO_SYSSEEK (fp, 0, _IO_seek_end);
++	  if (result == _IO_pos_BAD)
++	    return EOF;
++	  else
++	    fp->_offset = result;
++	}
++
+       /* XXX For wide stream with backup store it is not very
+ 	 reasonable to determine the offset.  The pushed-back
+ 	 character might require a state change and we need not be
+@@ -703,37 +717,24 @@ do_ftell_wide (_IO_FILE *fp)
+ 	     position is fp._offset - (_IO_read_end - new_write_ptr).  */
+ 	  offset -= fp->_IO_read_end - fp->_IO_write_ptr;
+ 	}
+-
+-      /* It is safe to use the cached offset when available if there is
+-	 unbuffered data (indicating that the file handle is active) and
+-	 the handle is not for a file open in a+ mode.  The latter
+-	 condition is because there could be a scenario where there is a
+-	 switch from read mode to write mode using an fseek to an arbitrary
+-	 position.  In this case, there would be unbuffered data due to be
+-	 appended to the end of the file, but the offset may not
+-	 necessarily be the end of the file.  It is fine to use the cached
+-	 offset when the a+ stream is in read mode though, since the offset
+-	 is maintained correctly in that case.  Note that this is not a
+-	 comprehensive set of cases when the offset is reliable.  The
+-	 offset may be reliable even in some cases where there is no
+-	 unflushed input and the handle is active, but it's just that we
+-	 don't have a way to identify that condition reliably.  */
+-      use_cached_offset = (offset != 0 && fp->_offset != _IO_pos_BAD
+-			   && ((fp->_flags & (_IO_IS_APPENDING | _IO_NO_READS))
+-			       == (_IO_IS_APPENDING | _IO_NO_READS)
+-			       && was_writing));
+     }
+ 
+-  if (use_cached_offset)
++  if (fp->_offset != _IO_pos_BAD)
+     result = fp->_offset;
+   else
+-    result = get_file_offset (fp);
++    result = _IO_SYSSEEK (fp, 0, _IO_seek_cur);
+ 
+   if (result == EOF)
+     return result;
+ 
+   result += offset;
+ 
++  if (result < 0)
++    {
++      __set_errno (EINVAL);
++      return EOF;
++    }
++
+   return result;
+ }
+ 
diff --git a/SOURCES/glibc-rh1077389-p1.patch b/SOURCES/glibc-rh1077389-p1.patch
new file mode 100644
index 0000000..3ee3152
--- /dev/null
+++ b/SOURCES/glibc-rh1077389-p1.patch
@@ -0,0 +1,78 @@
+#
+# commit 76a9b9986141b1a7d9fd290c349d27fcee780c7a
+# Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+# Date:   Thu Nov 7 05:34:22 2013 -0600
+# 
+#     PowerPC: Fix vDSO missing ODP entries
+#    
+#     This patch fixes the vDSO symbol used directed in IFUNC resolver where
+#     they do not have an associated ODP entry leading to undefined behavior
+#     in some cases. It adds an artificial OPD static entry to such cases
+#     and set its TOC to non 0 to avoid triggering lazy resolutions.
+#
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h	2015-01-15 16:05:08.853681325 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/bits/libc-vdso.h	2015-01-15 16:06:11.451747716 -0500
+@@ -34,12 +34,32 @@
+ 
+ extern void *__vdso_time;
+ 
+-/* This macro is needed for PPC64 to return a skeleton OPD entry of a vDSO
+-   symbol.  This works because _dl_vdso_vsym always return the function
+-   address, and no vDSO symbols use the TOC or chain pointers from the OPD
+-   so we can allow them to be garbage.  */
+-#if defined(__PPC64__) || defined(__powerpc64__)
+-#define VDSO_IFUNC_RET(value)  ((void *) &(value))
++/* The correct solution is for _dl_vdso_vsym to return the address of the OPD
++   for the kernel VDSO function.  That address would then be stored in the
++   __vdso_* variables and returned as the result of the IFUNC resolver function.
++   Yet, the kernel does not contain any OPD entries for the VDSO functions
++   (incomplete implementation).  However, PLT relocations for IFUNCs still expect
++   the address of an OPD to be returned from the IFUNC resolver function (since
++   PLT entries on PPC64 are just copies of OPDs).  The solution for now is to
++   create an artificial static OPD for each VDSO function returned by a resolver
++   function.  The TOC value is set to a non-zero value to avoid triggering lazy
++   symbol resolution via .glink0/.plt0 for a zero TOC (requires thread-safe PLT
++   sequences) when the dynamic linker isn't prepared for it e.g. RTLD_NOW.  None
++   of the kernel VDSO routines use the TOC or AUX values so any non-zero value
++   will work.  Note that function pointer comparisons will not use this artificial
++   static OPD since those are resolved via ADDR64 relocations and will point at
++   the non-IFUNC default OPD for the symbol.  Lastly, because the IFUNC relocations
++   are processed immediately at startup the resolver functions and this code need
++   not be thread-safe, but if the caller writes to a PLT slot it must do so in a
++   thread-safe manner with all the required barriers.  */
++#if (defined(__PPC64__) || defined(__powerpc64__)) && _CALL_ELF != 2
++#define VDSO_IFUNC_RET(value)                            \
++  ({                                                     \
++    static Elf64_FuncDesc vdso_opd = { .fd_toc = ~0x0 }; \
++    vdso_opd.fd_func = (Elf64_Addr)value;                \
++    &vdso_opd;                                           \
++  })
++
+ #else
+ #define VDSO_IFUNC_RET(value)  ((void *) (value))
+ #endif
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c	2015-01-15 16:05:08.912679502 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c	2015-01-15 16:06:11.451747716 -0500
+@@ -21,6 +21,7 @@
+ 
+ # include <dl-vdso.h>
+ # include <bits/libc-vdso.h>
++# include <dl-machine.h>
+ 
+ void *gettimeofday_ifunc (void) __asm__ ("__gettimeofday");
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c	2015-01-15 16:05:08.912679502 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c	2015-01-15 16:06:11.451747716 -0500
+@@ -20,7 +20,9 @@
+ 
+ # include <time.h>
+ # include <sysdep.h>
++# include <dl-vdso.h>
+ # include <bits/libc-vdso.h>
++# include <dl-machine.h>
+ 
+ void *time_ifunc (void) asm ("time");
+ 
diff --git a/SOURCES/glibc-rh1077389-p2.patch b/SOURCES/glibc-rh1077389-p2.patch
new file mode 100644
index 0000000..a37893c
--- /dev/null
+++ b/SOURCES/glibc-rh1077389-p2.patch
@@ -0,0 +1,53 @@
+#
+# commit d98720e07f67fbeec00f9e1347840404240d3c48
+# Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+# Date:   Mon Jan 20 12:29:51 2014 -0600
+# 
+#     PowerPC: Fix gettimeofday ifunc selection
+#     
+#     The IFUNC selector for gettimeofday runs before _libc_vdso_platform_setup where
+#     __vdso_gettimeofday is set. The selector then sets __gettimeofday (the internal
+#     version used within GLIBC) to use the system call version instead of the vDSO one.
+#     This patch changes the check if vDSO is available to get its value directly
+#     instead of rely on __vdso_gettimeofday.
+#     
+#     This patch changes it by getting the vDSO value directly.
+#     
+#     It fixes BZ#16431.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c	2015-01-15 16:07:59.167420456 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/gettimeofday.c	2015-01-15 16:07:41.408969001 -0500
+@@ -34,9 +34,12 @@
+ void *
+ gettimeofday_ifunc (void)
+ {
++  PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565);
++
+   /* If the vDSO is not available we fall back syscall.  */
+-  return (__vdso_gettimeofday ? VDSO_IFUNC_RET (__vdso_gettimeofday)
+-	  : __gettimeofday_syscall);
++  void *vdso_gettimeofday = _dl_vdso_vsym ("__kernel_gettimeofday", &linux2615);
++  return (vdso_gettimeofday ? VDSO_IFUNC_RET (vdso_gettimeofday)
++	  : (void*)__gettimeofday_syscall);
+ }
+ asm (".type __gettimeofday, %gnu_indirect_function");
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c	2015-01-15 16:07:59.168420425 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/time.c	2015-01-15 16:07:41.408969001 -0500
+@@ -45,9 +45,12 @@
+ void *
+ time_ifunc (void)
+ {
++  PREPARE_VERSION (linux2615, "LINUX_2.6.15", 123718565);
++
+   /* If the vDSO is not available we fall back to the syscall.  */
+-  return (__vdso_time ? VDSO_IFUNC_RET (__vdso_time)
+-	  : time_syscall);
++  void *vdso_time = _dl_vdso_vsym ("__kernel_time", &linux2615);
++  return (vdso_time ? VDSO_IFUNC_RET (vdso_time)
++	  : (void*)time_syscall);
+ }
+ asm (".type time, %gnu_indirect_function");
+ 
diff --git a/SOURCES/glibc-rh1078225.patch b/SOURCES/glibc-rh1078225.patch
new file mode 100644
index 0000000..9743e87
--- /dev/null
+++ b/SOURCES/glibc-rh1078225.patch
@@ -0,0 +1,46 @@
+From 3a3acb6afc753475675b5724f206e619d0c9590d Mon Sep 17 00:00:00 2001
+From: Tom Tromey <tromey@redhat.com>
+Date: Mon, 20 Jan 2014 12:58:03 +0000
+Subject: [PATCH] [AArch64] BZ #16169 Add CFI directives to clone.S
+
+[BZ #16169] Add CFI directives to the AArch64 clone.S implementation
+and ensure that the FP in the child is zero'd in order to comply with
+AAPCS.
+---
+ NEWS                                          |    8 ++++----
+ ports/ChangeLog.aarch64                       |    6 ++++++
+ ports/sysdeps/unix/sysv/linux/aarch64/clone.S |    7 ++++++-
+ 3 files changed, 16 insertions(+), 5 deletions(-)
+
+Index: glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S
+===================================================================
+--- glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/aarch64/clone.S
+@@ -63,6 +63,7 @@ ENTRY(__clone)
+ 	mov	x8, #SYS_ify(clone)
+ 	/* X0:flags, x1:newsp, x2:parenttidptr, x3:newtls, x4:childtid.  */
+ 	svc	0x0
++	cfi_endproc
+ 	cmp	x0, #0
+ 	beq	2f
+ 	blt	C_SYMBOL_NAME(__syscall_error)
+@@ -71,6 +72,9 @@ ENTRY(__clone)
+ 	b	syscall_error
+ 
+ 2:
++	cfi_startproc
++	cfi_undefined (x30)
++	mov	x29, 0
+ #ifdef RESET_PID
+ 	tbnz	x5, #CLONE_THREAD_BIT, 3f
+ 	mov	x0, #-1
+@@ -92,7 +96,8 @@ ENTRY(__clone)
+ 
+ 	/* We are done, pass the return value through x0.  */
+ 	b	HIDDEN_JUMPTARGET(_exit)
+-
++	cfi_endproc
++	cfi_startproc
+ PSEUDO_END (__clone)
+ 
+ weak_alias (__clone, clone)
diff --git a/SOURCES/glibc-rh1080766.patch b/SOURCES/glibc-rh1080766.patch
new file mode 100644
index 0000000..2fffaa8
--- /dev/null
+++ b/SOURCES/glibc-rh1080766.patch
@@ -0,0 +1,57 @@
+commit fbd6b5a4052316f7eb03c4617eebfaafc59dcc06
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Mar 27 07:15:22 2014 +0530
+
+    Fix nscd lookup for innetgr when netgroup has wildcards (BZ #16758)
+    
+    nscd works correctly when the request in innetgr is a wildcard,
+    i.e. when one or more of host, user or domain parameters is NULL.
+    However, it does not work when the the triplet in the netgroup
+    definition has a wildcard.  This is easy to reproduce for a triplet
+    defined as follows:
+    
+        foonet (,foo,)
+    
+    Here, an innetgr call that looks like this:
+    
+        innetgr ("foonet", "foohost", "foo", NULL);
+    
+    should succeed and so should:
+    
+        innetgr ("foonet", NULL, "foo", "foodomain");
+    
+    It does succeed with nscd disabled, but not with nscd enabled.  This
+    fix adds this additional check for all three parts of the triplet so
+    that it gives the correct result.
+    
+    	[BZ #16758]
+    	* nscd/netgroupcache.c (addinnetgrX): Succeed if triplet has
+    	blank values.
+
+diff --git glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+index 5ba1e1f..5d15aa4 100644
+--- glibc-2.17-c758a686/nscd/netgroupcache.c
++++ glibc-2.17-c758a686/nscd/netgroupcache.c
+@@ -560,15 +560,19 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+ 	{
+ 	  bool success = true;
+ 
+-	  if (host != NULL)
++	  /* For the host, user and domain in each triplet, we assume success
++	     if the value is blank because that is how the wildcard entry to
++	     match anything is stored in the netgroup cache.  */
++	  if (host != NULL && *triplets != '\0')
+ 	    success = strcmp (host, triplets) == 0;
+ 	  triplets = (const char *) rawmemchr (triplets, '\0') + 1;
+ 
+-	  if (success && user != NULL)
++	  if (success && user != NULL && *triplets != '\0')
+ 	    success = strcmp (user, triplets) == 0;
+ 	  triplets = (const char *) rawmemchr (triplets, '\0') + 1;
+ 
+-	  if (success && (domain == NULL || strcmp (domain, triplets) == 0))
++	  if (success && (domain == NULL || *triplets == '\0'
++			  || strcmp (domain, triplets) == 0))
+ 	    {
+ 	      dataset->resp.result = 1;
+ 	      break;
diff --git a/SOURCES/glibc-rh1083644.patch b/SOURCES/glibc-rh1083644.patch
new file mode 100644
index 0000000..14c4acf
--- /dev/null
+++ b/SOURCES/glibc-rh1083644.patch
@@ -0,0 +1,63 @@
+commit ea7d8b95e2fcb81f68b04ed7787a3dbda023991a
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Mar 27 19:48:15 2014 +0530
+
+    Avoid overlapping addresses to stpcpy calls in nscd (BZ #16760)
+    
+    Calls to stpcpy from nscd netgroups code will have overlapping source
+    and destination when all three values in the returned triplet are
+    non-NULL and in the expected (host,user,domain) order.  This is seen
+    in valgrind as:
+    
+    ==3181== Source and destination overlap in stpcpy(0x19973b48, 0x19973b48)
+    ==3181==    at 0x4C2F30A: stpcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
+    ==3181==    by 0x12567A: addgetnetgrentX (string3.h:111)
+    ==3181==    by 0x12722D: addgetnetgrent (netgroupcache.c:665)
+    ==3181==    by 0x11114C: nscd_run_worker (connections.c:1338)
+    ==3181==    by 0x4E3C102: start_thread (pthread_create.c:309)
+    ==3181==    by 0x59B81AC: clone (clone.S:111)
+    ==3181==
+    
+    Fix this by using memmove instead of stpcpy.
+
+diff --git glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+index 5d15aa4..820d823 100644
+--- glibc-2.17-c758a686/nscd/netgroupcache.c
++++ glibc-2.17-c758a686/nscd/netgroupcache.c
+@@ -216,6 +216,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 			    const char *nuser = data.val.triple.user;
+ 			    const char *ndomain = data.val.triple.domain;
+ 
++			    size_t hostlen = strlen (nhost ?: "") + 1;
++			    size_t userlen = strlen (nuser ?: "") + 1;
++			    size_t domainlen = strlen (ndomain ?: "") + 1;
++
+ 			    if (nhost == NULL || nuser == NULL || ndomain == NULL
+ 				|| nhost > nuser || nuser > ndomain)
+ 			      {
+@@ -233,9 +237,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 				     : last + strlen (last) + 1 - buffer);
+ 
+ 				/* We have to make temporary copies.  */
+-				size_t hostlen = strlen (nhost ?: "") + 1;
+-				size_t userlen = strlen (nuser ?: "") + 1;
+-				size_t domainlen = strlen (ndomain ?: "") + 1;
+ 				size_t needed = hostlen + userlen + domainlen;
+ 
+ 				if (buflen - req->key_len - bufused < needed)
+@@ -269,9 +270,12 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 			      }
+ 
+ 			    char *wp = buffer + buffilled;
+-			    wp = stpcpy (wp, nhost) + 1;
+-			    wp = stpcpy (wp, nuser) + 1;
+-			    wp = stpcpy (wp, ndomain) + 1;
++			    wp = memmove (wp, nhost ?: "", hostlen);
++			    wp += hostlen;
++			    wp = memmove (wp, nuser ?: "", userlen);
++			    wp += userlen;
++			    wp = memmove (wp, ndomain ?: "", domainlen);
++			    wp += domainlen;
+ 			    buffilled = wp - buffer;
+ 			    ++nentries;
+ 			  }
diff --git a/SOURCES/glibc-rh1083646.patch b/SOURCES/glibc-rh1083646.patch
new file mode 100644
index 0000000..dcc232c
--- /dev/null
+++ b/SOURCES/glibc-rh1083646.patch
@@ -0,0 +1,398 @@
+commit bc8f194c8c29e46e8ee4034f06e46988dfff38f7
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Apr 30 12:00:39 2014 +0530
+
+    Initialize all of datahead structure in nscd (BZ #16791)
+    
+    The datahead structure has an unused padding field that remains
+    uninitialized.  Valgrind prints out a warning for it on querying a
+    netgroups entry.  This is harmless, but is a potential data leak since
+    it would result in writing out an uninitialized byte to the cache
+    file.  Besides, this happens only when there is a cache miss, so we're
+    not adding computation to any fast path.
+
+commit 1cdeb2372ddecac0dfe0c132a033e9590ffa07d2
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Apr 30 11:57:09 2014 +0530
+
+    Consolidate code to initialize nscd dataset header
+    
+    This patch consolidates the code to initialize the header of a dataset
+    into a single set of functions (one for positive and another for
+    negative datasets) primarily to reduce repetition of code.  The
+    secondary reason is to simplify Patch 2/2 which fixes the problem of
+    an uninitialized byte in the header by initializing an unused field in
+    the structure and hence preventing a possible data leak into the cache
+    file.
+
+diff --git glibc-2.17-c758a686/nscd/aicache.c glibc-2.17-c758a686/nscd/aicache.c
+index 98d40a1..d7966bd 100644
+--- glibc-2.17-c758a686/nscd/aicache.c
++++ glibc-2.17-c758a686/nscd/aicache.c
+@@ -383,17 +383,12 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
+ 	  cp = family;
+ 	}
+ 
+-      /* Fill in the rest of the dataset.  */
+-      dataset->head.allocsize = total + req->key_len;
+-      dataset->head.recsize = total - offsetof (struct dataset, resp);
+-      dataset->head.notfound = false;
+-      dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl;
+-      timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl;
++      timeout = datahead_init_pos (&dataset->head, total + req->key_len,
++				   total - offsetof (struct dataset, resp),
++				   he == NULL ? 0 : dh->nreloads + 1,
++				   ttl == INT32_MAX ? db->postimeout : ttl);
+ 
++      /* Fill in the rest of the dataset.  */
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+       dataset->resp.naddrs = naddrs;
+@@ -528,15 +523,9 @@ next_nip:
+       else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
+ 					      + req->key_len), 1)) != NULL)
+ 	{
+-	  dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	  dataset->head.recsize = total;
+-	  dataset->head.notfound = true;
+-	  dataset->head.nreloads = 0;
+-	  dataset->head.usable = true;
+-
+-	  /* Compute the timeout time.  */
+-	  timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
+-	  dataset->head.ttl = db->negtimeout;
++	  timeout = datahead_init_neg (&dataset->head,
++				       sizeof (struct dataset) + req->key_len,
++				       total, db->negtimeout);
+ 
+ 	  /* This is the reply.  */
+ 	  memcpy (&dataset->resp, &notfound, total);
+diff --git glibc-2.17-c758a686/nscd/grpcache.c glibc-2.17-c758a686/nscd/grpcache.c
+index b5a33eb..df59fa7 100644
+--- glibc-2.17-c758a686/nscd/grpcache.c
++++ glibc-2.17-c758a686/nscd/grpcache.c
+@@ -128,14 +128,10 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
+ 	    }
+ 	  else if ((dataset = mempool_alloc (db, sizeof (struct dataset) + req->key_len, 1)) != NULL)
+ 	    {
+-	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	      dataset->head.recsize = total;
+-	      dataset->head.notfound = true;
+-	      dataset->head.nreloads = 0;
+-	      dataset->head.usable = true;
+-
+-	      /* Compute the timeout time.  */
+-	      timeout = dataset->head.timeout = t + db->negtimeout;
++	      timeout = datahead_init_neg (&dataset->head,
++					   (sizeof (struct dataset)
++					    + req->key_len), total,
++					   db->negtimeout);
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -232,14 +228,10 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
+ 	  dataset_temporary = true;
+ 	}
+ 
+-      dataset->head.allocsize = total + n;
+-      dataset->head.recsize = total - offsetof (struct dataset, resp);
+-      dataset->head.notfound = false;
+-      dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      timeout = dataset->head.timeout = t + db->postimeout;
++      timeout = datahead_init_pos (&dataset->head, total + n,
++				   total - offsetof (struct dataset, resp),
++				   he == NULL ? 0 : dh->nreloads + 1,
++				   db->postimeout);
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+diff --git glibc-2.17-c758a686/nscd/hstcache.c glibc-2.17-c758a686/nscd/hstcache.c
+index a79b67a..d4f1ad2 100644
+--- glibc-2.17-c758a686/nscd/hstcache.c
++++ glibc-2.17-c758a686/nscd/hstcache.c
+@@ -152,15 +152,11 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
+ 	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
+ 						  + req->key_len), 1)) != NULL)
+ 	    {
+-	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	      dataset->head.recsize = total;
+-	      dataset->head.notfound = true;
+-	      dataset->head.nreloads = 0;
+-	      dataset->head.usable = true;
+-
+-	      /* Compute the timeout time.  */
+-	      dataset->head.ttl = ttl == INT32_MAX ? db->negtimeout : ttl;
+-	      timeout = dataset->head.timeout = t + dataset->head.ttl;
++	      timeout = datahead_init_neg (&dataset->head,
++					   (sizeof (struct dataset)
++					    + req->key_len), total,
++					   (ttl == INT32_MAX
++					    ? db->negtimeout : ttl));
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, resp, total);
+@@ -257,15 +253,10 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
+ 	  alloca_used = true;
+ 	}
+ 
+-      dataset->head.allocsize = total + req->key_len;
+-      dataset->head.recsize = total - offsetof (struct dataset, resp);
+-      dataset->head.notfound = false;
+-      dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      dataset->head.ttl = ttl == INT32_MAX ? db->postimeout : ttl;
+-      timeout = dataset->head.timeout = t + dataset->head.ttl;
++      timeout = datahead_init_pos (&dataset->head, total + req->key_len,
++				   total - offsetof (struct dataset, resp),
++				   he == NULL ? 0 : dh->nreloads + 1,
++				   ttl == INT32_MAX ? db->postimeout : ttl);
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+diff --git glibc-2.17-c758a686/nscd/initgrcache.c glibc-2.17-c758a686/nscd/initgrcache.c
+index 1bf9f0d..361319f 100644
+--- glibc-2.17-c758a686/nscd/initgrcache.c
++++ glibc-2.17-c758a686/nscd/initgrcache.c
+@@ -213,14 +213,10 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
+ 	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
+ 						  + req->key_len), 1)) != NULL)
+ 	    {
+-	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	      dataset->head.recsize = total;
+-	      dataset->head.notfound = true;
+-	      dataset->head.nreloads = 0;
+-	      dataset->head.usable = true;
+-
+-	      /* Compute the timeout time.  */
+-	      timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
++	      timeout = datahead_init_neg (&dataset->head,
++					   (sizeof (struct dataset)
++					    + req->key_len), total,
++					   db->negtimeout);
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -276,14 +272,10 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
+ 	  alloca_used = true;
+ 	}
+ 
+-      dataset->head.allocsize = total + req->key_len;
+-      dataset->head.recsize = total - offsetof (struct dataset, resp);
+-      dataset->head.notfound = false;
+-      dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      timeout = dataset->head.timeout = time (NULL) + db->postimeout;
++      timeout = datahead_init_pos (&dataset->head, total + req->key_len,
++				   total - offsetof (struct dataset, resp),
++				   he == NULL ? 0 : dh->nreloads + 1,
++				   db->postimeout);
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+diff --git glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+index 820d823..b3d40e9 100644
+--- glibc-2.17-c758a686/nscd/netgroupcache.c
++++ glibc-2.17-c758a686/nscd/netgroupcache.c
+@@ -90,15 +90,9 @@ do_notfound (struct database_dyn *db, int fd, request_header *req,
+   /* If we cannot permanently store the result, so be it.  */
+   if (dataset != NULL)
+     {
+-      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-      dataset->head.recsize = total;
+-      dataset->head.notfound = true;
+-      dataset->head.nreloads = 0;
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      timeout = dataset->head.timeout = time (NULL) + db->negtimeout;
+-      dataset->head.ttl = db->negtimeout;
++      timeout = datahead_init_neg (&dataset->head,
++				   sizeof (struct dataset) + req->key_len,
++				   total, db->negtimeout);
+ 
+       /* This is the reply.  */
+       memcpy (&dataset->resp, &notfound, total);
+@@ -359,13 +353,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 
+   /* Fill in the dataset.  */
+   dataset = (struct dataset *) buffer;
+-  dataset->head.allocsize = total + req->key_len;
+-  dataset->head.recsize = total - offsetof (struct dataset, resp);
+-  dataset->head.notfound = false;
+-  dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-  dataset->head.usable = true;
+-  dataset->head.ttl = db->postimeout;
+-  timeout = dataset->head.timeout = time (NULL) + dataset->head.ttl;
++  timeout = datahead_init_pos (&dataset->head, total + req->key_len,
++			       total - offsetof (struct dataset, resp),
++			       he == NULL ? 0 : dh->nreloads + 1,
++			       db->postimeout);
+ 
+   dataset->resp.version = NSCD_VERSION;
+   dataset->resp.found = 1;
+@@ -541,12 +532,12 @@ addinnetgrX (struct database_dyn *db, int fd, request_header *req,
+       dataset = &dataset_mem;
+     }
+ 
+-  dataset->head.allocsize = sizeof (*dataset) + req->key_len;
+-  dataset->head.recsize = sizeof (innetgroup_response_header);
++  datahead_init_pos (&dataset->head, sizeof (*dataset) + req->key_len,
++		     sizeof (innetgroup_response_header),
++		     he == NULL ? 0 : dh->nreloads + 1, result->head.ttl);
++  /* Set the notfound status and timeout based on the result from
++     getnetgrent.  */
+   dataset->head.notfound = result->head.notfound;
+-  dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-  dataset->head.usable = true;
+-  dataset->head.ttl = result->head.ttl;
+   dataset->head.timeout = timeout;
+ 
+   dataset->resp.version = NSCD_VERSION;
+diff --git glibc-2.17-c758a686/nscd/nscd-client.h glibc-2.17-c758a686/nscd/nscd-client.h
+index 98f77e7..ee16df6 100644
+--- glibc-2.17-c758a686/nscd/nscd-client.h
++++ glibc-2.17-c758a686/nscd/nscd-client.h
+@@ -236,6 +236,48 @@ struct datahead
+   } data[0];
+ };
+ 
++static inline time_t
++datahead_init_common (struct datahead *head, nscd_ssize_t allocsize,
++		      nscd_ssize_t recsize, uint32_t ttl)
++{
++  /* Initialize so that we don't write out junk in uninitialized data to the
++     cache.  */
++  memset (head, 0, sizeof (*head));
++
++  head->allocsize = allocsize;
++  head->recsize = recsize;
++  head->usable = true;
++
++  head->ttl = ttl;
++
++  /* Compute and return the timeout time.  */
++  return head->timeout = time (NULL) + ttl;
++}
++
++static inline time_t
++datahead_init_pos (struct datahead *head, nscd_ssize_t allocsize,
++		   nscd_ssize_t recsize, uint8_t nreloads, uint32_t ttl)
++{
++  time_t ret = datahead_init_common (head, allocsize, recsize, ttl);
++
++  head->notfound = false;
++  head->nreloads = nreloads;
++
++  return ret;
++}
++
++static inline time_t
++datahead_init_neg (struct datahead *head, nscd_ssize_t allocsize,
++		   nscd_ssize_t recsize, uint32_t ttl)
++{
++  time_t ret = datahead_init_common (head, allocsize, recsize, ttl);
++
++  /* We don't need to touch nreloads here since it is set to our desired value
++     (0) when we clear the structure.  */
++  head->notfound = true;
++
++  return ret;
++}
+ 
+ /* Structure for one hash table entry.  */
+ struct hashentry
+diff --git glibc-2.17-c758a686/nscd/pwdcache.c glibc-2.17-c758a686/nscd/pwdcache.c
+index fa355c3..41c245b 100644
+--- glibc-2.17-c758a686/nscd/pwdcache.c
++++ glibc-2.17-c758a686/nscd/pwdcache.c
+@@ -135,14 +135,10 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
+ 	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
+ 						  + req->key_len), 1)) != NULL)
+ 	    {
+-	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	      dataset->head.recsize = total;
+-	      dataset->head.notfound = true;
+-	      dataset->head.nreloads = 0;
+-	      dataset->head.usable = true;
+-
+-	      /* Compute the timeout time.  */
+-	      timeout = dataset->head.timeout = t + db->negtimeout;
++	      timeout = datahead_init_neg (&dataset->head,
++					   (sizeof (struct dataset)
++					    + req->key_len), total,
++					   db->negtimeout);
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -215,14 +211,10 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
+ 	  alloca_used = true;
+ 	}
+ 
+-      dataset->head.allocsize = total + n;
+-      dataset->head.recsize = total - offsetof (struct dataset, resp);
+-      dataset->head.notfound = false;
+-      dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      timeout = dataset->head.timeout = t + db->postimeout;
++      timeout = datahead_init_pos (&dataset->head, total + n,
++				   total - offsetof (struct dataset, resp),
++				   he == NULL ? 0 : dh->nreloads + 1,
++				   db->postimeout);
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
+diff --git glibc-2.17-c758a686/nscd/servicescache.c glibc-2.17-c758a686/nscd/servicescache.c
+index 12ce9b2..95bdcfe 100644
+--- glibc-2.17-c758a686/nscd/servicescache.c
++++ glibc-2.17-c758a686/nscd/servicescache.c
+@@ -120,14 +120,10 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
+ 	  else if ((dataset = mempool_alloc (db, (sizeof (struct dataset)
+ 						  + req->key_len), 1)) != NULL)
+ 	    {
+-	      dataset->head.allocsize = sizeof (struct dataset) + req->key_len;
+-	      dataset->head.recsize = total;
+-	      dataset->head.notfound = true;
+-	      dataset->head.nreloads = 0;
+-	      dataset->head.usable = true;
+-
+-	      /* Compute the timeout time.  */
+-	      timeout = dataset->head.timeout = t + db->negtimeout;
++	      timeout = datahead_init_neg (&dataset->head,
++					   (sizeof (struct dataset)
++					    + req->key_len), total,
++					   db->negtimeout);
+ 
+ 	      /* This is the reply.  */
+ 	      memcpy (&dataset->resp, &notfound, total);
+@@ -207,14 +203,10 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
+ 	  alloca_used = true;
+ 	}
+ 
+-      dataset->head.allocsize = total + req->key_len;
+-      dataset->head.recsize = total - offsetof (struct dataset, resp);
+-      dataset->head.notfound = false;
+-      dataset->head.nreloads = he == NULL ? 0 : (dh->nreloads + 1);
+-      dataset->head.usable = true;
+-
+-      /* Compute the timeout time.  */
+-      timeout = dataset->head.timeout = t + db->postimeout;
++      timeout = datahead_init_pos (&dataset->head, total + req->key_len,
++				   total - offsetof (struct dataset, resp),
++				   he == NULL ? 0 : dh->nreloads + 1,
++				   db->postimeout);
+ 
+       dataset->resp.version = NSCD_VERSION;
+       dataset->resp.found = 1;
diff --git a/SOURCES/glibc-rh1083647.patch b/SOURCES/glibc-rh1083647.patch
new file mode 100644
index 0000000..70d8b27
--- /dev/null
+++ b/SOURCES/glibc-rh1083647.patch
@@ -0,0 +1,26 @@
+commit c44496df2f090a56d3bf75df930592dac6bba46f
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Mar 12 17:27:22 2014 +0530
+
+    Provide correct buffer length to netgroup queries in nscd (BZ #16695)
+    
+    The buffer to query netgroup entries is allocated sufficient space for
+    the netgroup entries and the key to be appended at the end, but it
+    sends in an incorrect available length to the NSS netgroup query
+    functions, resulting in overflow of the buffer in some special cases.
+    The fix here is to factor in the key length when sending the available
+    buffer and buffer length to the query functions.
+
+diff --git glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+index 426d3c5..5ba1e1f 100644
+--- glibc-2.17-c758a686/nscd/netgroupcache.c
++++ glibc-2.17-c758a686/nscd/netgroupcache.c
+@@ -202,7 +202,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 		  {
+ 		    int e;
+ 		    status = getfct.f (&data, buffer + buffilled,
+-				       buflen - buffilled, &e);
++				       buflen - buffilled - req->key_len, &e);
+ 		    if (status == NSS_STATUS_RETURN
+ 			|| status == NSS_STATUS_NOTFOUND)
+ 		      /* This was either the last one for this group or the
diff --git a/SOURCES/glibc-rh1084089.patch b/SOURCES/glibc-rh1084089.patch
new file mode 100644
index 0000000..6c4e220
--- /dev/null
+++ b/SOURCES/glibc-rh1084089.patch
@@ -0,0 +1,65 @@
+diff -pruN glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/lowlevellock.c glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/lowlevellock.c
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/lowlevellock.c	2012-12-25 08:32:13.000000000 +0530
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/lowlevellock.c	2014-09-05 21:50:56.982975803 +0530
+@@ -21,11 +21,13 @@
+ #include <sysdep.h>
+ #include <lowlevellock.h>
+ #include <sys/time.h>
++#include <stap-probe.h>
+ 
+ 
+ void
+ __lll_lock_wait_private (int *futex)
+ {
++  LIBC_PROBE (lll_lock_wait_private, 1, futex);
+   if (*futex == 2)
+     lll_futex_wait (futex, 2, LLL_PRIVATE);
+ 
+@@ -39,6 +42,7 @@ __lll_lock_wait_private (int *futex)
+ void
+ __lll_lock_wait (int *futex, int private)
+ {
++  LIBC_PROBE (lll_lock_wait, 2, futex, FUTEX_WAIT | private);
+   if (*futex == 2)
+     lll_futex_wait (futex, 2, private);
+ 
+diff -pruN glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h	2012-12-25 08:32:13.000000000 +0530
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/powerpc/lowlevellock.h	2014-09-05 21:51:58.722483631 +0530
+@@ -19,6 +19,8 @@
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H	1
+ 
++#include <stap-probe.h>
++
+ #include <time.h>
+ #include <sys/param.h>
+ #include <bits/pthreadtypes.h>
+@@ -106,6 +108,7 @@
+     INTERNAL_SYSCALL_DECL (__err);					      \
+     long int __ret;							      \
+ 									      \
++    LIBC_PROBE (lll_futex_wake, 3, futexp, nr, private);		      \
+     __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp),		      \
+ 			      __lll_private_flag (FUTEX_WAKE, private),	      \
+ 			      (nr), 0);					      \
+diff -pruN glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h
+--- glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h	2012-12-25 08:32:13.000000000 +0530
++++ glibc-2.17-c758a686/nptl/sysdeps/unix/sysv/linux/s390/lowlevellock.h	2014-09-05 21:51:58.722483631 +0530
+@@ -19,6 +19,8 @@
+ #ifndef _LOWLEVELLOCK_H
+ #define _LOWLEVELLOCK_H	1
+ 
++#include <stap-probe.h>
++
+ #include <time.h>
+ #include <sys/param.h>
+ #include <bits/pthreadtypes.h>
+@@ -122,6 +124,7 @@
+     register unsigned long int __r4 asm ("4") = (unsigned long int) (nr);     \
+     register unsigned long int __result asm ("2");			      \
+ 									      \
++    LIBC_PROBE (lll_futex_wake, 3, futex, nr, private);			      \
+     __asm __volatile ("svc %b1"						      \
+ 		      : "=d" (__result)					      \
+ 		      : "i" (SYS_futex), "0" (__r2), "d" (__r3), "d" (__r4)   \
diff --git a/SOURCES/glibc-rh1084395.patch b/SOURCES/glibc-rh1084395.patch
new file mode 100644
index 0000000..dc7cc7e
--- /dev/null
+++ b/SOURCES/glibc-rh1084395.patch
@@ -0,0 +1,28895 @@
+diff -urN glibc-2.17-c758a686/benchtests/acosh-inputs glibc-2.17-c758a686/benchtests/acosh-inputs
+--- glibc-2.17-c758a686/benchtests/acosh-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/acosh-inputs	2015-06-20 21:22:16.295458166 -0400
+@@ -0,0 +1,303 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.6d46e7252da2fp388
++0x1.c18cc3982093ep775
++0x1.2e9a406645b9bp609
++0x1.006d075b935c9p0
++0x1.4d49f6cda4ceap0
++0x1.e0ba4580ef871p21
++0x1.ffab14f637eaap733
++0x1.f0a22293c4ecbp852
++0x1.24baf479f025cp0
++0x1.91bc310a7648ep243
++0x1.93d4c19692fbfp80
++0x1.9eb0b40303dcap843
++0x1.945a20aa092e2p4
++0x1.ac2677a0ed292p0
++0x1.64c6a3d5a0867p304
++0x1.e0d6324c882e9p0
++0x1.7e0ba7c987b9ep7
++0x1.3975f02686229p10
++0x1.cc4916f089070p25
++0x1.729be339c67b2p0
++0x1.c64b8297569c4p207
++0x1.2c1544d816155p340
++0x1.ad443265c6b4ap845
++0x1.f53624533eb2cp0
++0x1.92e4800542f83p108
++0x1.f873e456e1975p0
++0x1.84a7b4b80f227p4
++0x1.46dd43031fe1fp0
++0x1.e28b805a73a97p0
++0x1.9e11325b1c3c4p22
++0x1.5c76b43d66941p15
++0x1.98109155dd7bfp21
++0x1.3d88b121650aap8
++0x1.adff01fab2117p0
++0x1.5e76d52c7f729p15
++0x1.0a46e3262c2b8p20
++0x1.52f9a11ad6e66p0
++0x1.96f8f26a41c3bp122
++0x1.161fd6fd320d5p745
++0x1.c5fb927d2cb09p8
++0x1.265a61a0bb1d4p0
++0x1.09a5d681397d0p0
++0x1.ebef22f6aa8aap0
++0x1.3ac9b75c613bdp160
++0x1.b77615a1e2a3ap0
++0x1.68f9d755d5eadp0
++0x1.ed2c9188571d9p0
++0x1.e8f886346b284p15
++0x1.f65bd2ce4416ap0
++0x1.4574341b05968p656
++0x1.5c2cb3414299cp154
++0x1.c4ea7682d0661p832
++0x1.b221562a61af2p0
++0x1.d7f9c739e0b26p561
++0x1.eb28429726661p423
++0x1.e7a5f5b2cc9e8p902
++0x1.9fd093db922f4p0
++0x1.c1cb5159d4e46p0
++0x1.a0bed3234b8cdp0
++0x1.bc8ff7e59e82ep18
++0x1.de8f25287ff7cp0
++0x1.a1ab66b8f9098p0
++0x1.c36c11c290063p20
++0x1.72e9e736d6e41p0
++0x1.38b134391f71ep21
++0x1.a500e5cf1a2cfp246
++0x1.253da08c9c318p144
++0x1.f5efb379e3b3fp952
++0x1.07c767a225a7bp21
++0x1.f82770adf361dp19
++0x1.39e42524c048ep894
++0x1.a4ae84e202a44p0
++0x1.e17e23b598415p925
++0x1.08fa931bd21f5p10
++0x1.b52541759872ep0
++0x1.91bf33cdb6804p710
++0x1.5c18505e522d6p0
++0x1.9fe7c5ca15212p9
++0x1.62c360b992b13p10
++0x1.57a000ceee049p800
++0x1.da296671c3e5cp0
++0x1.ff43325a40608p0
++0x1.295d65809666fp111
++0x1.2781e3f5d0e0fp249
++0x1.875d5703776fcp0
++0x1.0f8045a313158p26
++0x1.bd30a3b638a67p11
++0x1.0a3184db8d287p0
++0x1.c6d33006f978ep0
++0x1.8c6476a610245p0
++0x1.aa7fc36f3cea9p461
++0x1.afb5c0c4f933ap6
++0x1.20b75365bd50fp16
++0x1.69c8245c09535p19
++0x1.30dcf0414c561p292
++0x1.c2323455e5501p0
++0x1.c2e3d08f78fb2p0
++0x1.f479457ec8f4fp25
++0x1.4c1e32e79005dp7
++0x1.86b9a4aed3300p26
++0x1.ee654167b045bp0
++0x1.a339c796ccd9fp0
++0x1.75f6f32348765p4
++0x1.6120d7e4e5d9ep498
++0x1.01c843ae8b440p20
++0x1.034a67c534113p0
++0x1.94d6d681be7e6p0
++0x1.2576745f4cca6p22
++0x1.813994f759a60p171
++0x1.0308a4c5b820dp0
++0x1.d073e0e895907p580
++0x1.6094d2dc7af3bp0
++0x1.3348d7ba303bep0
++0x1.a0830483382afp2
++0x1.e3558408e36dep0
++0x1.d55db05590c97p0
++0x1.95680648261ecp0
++0x1.d54c401b55bd9p18
++0x1.584be75027a11p872
++0x1.594273cdd339dp4
++0x1.85d9676b1ae49p752
++0x1.38f122e7f7be0p220
++0x1.75c3a575deb13p251
++0x1.2c85f1a74ac0fp0
++0x1.0dc9e789128acp947
++0x1.51dbf3461a224p0
++0x1.61c9644526617p809
++0x1.89494217ed887p204
++0x1.2a57014d8c24bp317
++0x1.c4d527df0d553p762
++0x1.ad2717638f0adp986
++0x1.63352752d72c5p847
++0x1.d124a052e9410p0
++0x1.373d228ee6061p505
++0x1.0bbe63d8b48d2p0
++0x1.0b5115dd5774dp4
++0x1.f50d62ef77ac6p3
++0x1.4cb6110ea61e4p1
++0x1.b056b690aef8ap0
++0x1.a32cd47340669p2
++0x1.f917868895288p872
++0x1.332a86c10c0e1p14
++0x1.07f7c34023735p881
++0x1.7935f21efcfadp24
++0x1.644ad1a392b18p0
++0x1.f930b772bba49p0
++0x1.019a86d2e2300p18
++0x1.a25af297e68fep194
++0x1.80ab316f210c8p0
++0x1.f73a3049f9d76p16
++0x1.8b1a0407ae636p7
++0x1.9bdf23a917930p2
++0x1.d139574e3913ep168
++0x1.caf9468b5f459p0
++0x1.c3b5f0096df0dp24
++0x1.d3451096baf1ep0
++0x1.7bb5671e2bfcap719
++0x1.64b7e3621a6ddp0
++0x1.08b544290bb37p0
++0x1.2b65c78ec87a4p0
++0x1.993a6363227e2p12
++0x1.a09d26d2a558fp216
++0x1.daff104bb08a5p25
++0x1.7d77308fd73cap655
++0x1.8946b691ecf5ap10
++0x1.8ec222d562aa9p25
++0x1.b7da17cd3268ap0
++0x1.250500a0b4266p831
++0x1.8e6f071075758p0
++0x1.984146d8a6c69p20
++0x1.558480e0da8bdp15
++0x1.b6bea5e996fdbp11
++0x1.f289853c632ddp11
++0x1.8fbe179f273aap0
++0x1.6b4382f669e8dp0
++0x1.a966a17972ca9p601
++0x1.dbd635362ec6bp6
++0x1.899e75c43e065p675
++0x1.f11c07e219bafp7
++0x1.3ab637a02ed36p0
++0x1.36b913a68fe70p901
++0x1.049fe294eb450p0
++0x1.0547247e7518ap677
++0x1.9e07054aa7309p743
++0x1.aff281fbb3a6ap874
++0x1.6c1b6312efacfp783
++0x1.a38c639c0df57p243
++0x1.f07b95fd415ccp9
++0x1.ca1c23fd6ce37p7
++0x1.9ed9906a6f029p18
++0x1.f1a483c62adecp74
++0x1.617df662bbf02p0
++0x1.22e1608c31f55p13
++0x1.d840853d46285p15
++0x1.023fd69d438dep12
++0x1.8184a3fcc1ac3p942
++0x1.25c5071d2dc6ep8
++0x1.0eec25d2a59ccp27
++0x1.d55b11ee07cc4p0
++0x1.175347bf29152p23
++0x1.546624c66c38bp0
++0x1.212fc4abebddep723
++0x1.75f1269063e4dp5
++0x1.3b51233fed0a5p381
++0x1.486e24ad660e1p686
++0x1.7788055510c4dp23
++0x1.55bf96fcf9458p905
++0x1.0a5aa2d61be59p0
++0x1.5da757c1a95c6p895
++0x1.d596e1ea9dcefp0
++0x1.e91b460893372p0
++0x1.d934d6ea17649p728
++0x1.cd74423b4c4aep15
++0x1.dc3151a1b4289p0
++0x1.5799c072442dep0
++0x1.97ae606371057p22
++0x1.7369c3195238ap0
++0x1.43a1d0e6eae29p109
++0x1.7fd922252a24ep425
++0x1.bf01d7e826d2cp0
++0x1.a397b7c711fcfp14
++0x1.7b40809d9f6b5p0
++0x1.58098134bf6afp0
++0x1.567e92bdee806p3
++0x1.641866cfab5e7p382
++0x1.11d483657f659p0
++0x1.f0b1d4cd82236p18
++0x1.a18365ad84301p6
++0x1.4f749259eb02dp140
++0x1.4b1d721633901p747
++0x1.fa9e9543d1dfbp5
++0x1.ae33e3ae5e0ecp0
++0x1.29c444207fa90p0
++0x1.b55e708600082p19
++0x1.bb1464c1f136fp0
++0x1.d36f165b63b8fp880
++0x1.c1a0d0ee96f75p27
++0x1.9b1376e7377a3p0
++0x1.6e88361aa13bbp619
++0x1.d109f410d341bp822
++0x1.654255768c727p0
++0x1.c938959e450d6p0
++0x1.26fd92ae3e170p356
++0x1.157c240adb715p982
++0x1.749735f182597p15
++0x1.2291e3ab7501cp0
++0x1.96d320a0153bap383
++0x1.b569919b79b6fp214
++0x1.0872c2cff972dp276
++0x1.bd98342544357p0
++0x1.853327d0e2f4dp11
++0x1.23438314fb10bp0
++0x1.342f35eabf622p707
++0x1.d19f05a5a1fe4p13
++0x1.67c566bcf73aap0
++0x1.2ce065238fb73p27
++0x1.5219d2e05f184p0
++0x1.4a163440f7c98p4
++0x1.d780c4711b212p0
++0x1.395461c5f96a6p5
++0x1.21efa25110e19p12
++0x1.c9ddf4f375933p17
++0x1.3da0800fe1f5ep0
++0x1.90f147b3d0164p829
++0x1.001d955d8a436p344
++0x1.c6b2115b84675p319
++0x1.650441a7059bdp554
++0x1.3a49216bbe75ep0
++0x1.fdd3c3404c763p750
++0x1.0b97d555f912cp1
++0x1.95c32605e6c59p20
++0x1.6acfa746531b2p0
++0x1.13f4d3bbd6417p8
++0x1.ac31b628eaa2cp0
++0x1.4293b3d3169d2p8
++0x1.6e8a94f758a02p802
++0x1.701604374d526p0
++0x1.bec162f84a16cp13
++0x1.2015764e98ea6p481
++0x1.b9d12441e91a7p11
++0x1.55a4c648ebcc2p378
++0x1.65b6e4f33cc66p0
++0x1.b12c01289b0c4p15
++0x1.ce91f580c5091p228
++0x1.719ec056f57fep1
++0x1.0b2c87979b28cp23
++0x1.218c0592aa7fcp95
++0x1.ec1e878f29cf8p97
++0x1.adc8d213f43b1p0
++0x1.e788f6152fe51p0
++0x1.a026b0485c0e8p12
++0x1.f181e3ec38f77p3
++0x1.dafd9764a705fp13
++0x1.a292f29dfe6c4p0
++0x1.661d765a50087p13
++0x1.f619932e8e376p1010
++0x1.4a1600b2e95dbp880
++0x1.f5b95104bb64dp320
++0x1.a7a935f93958ap22
++0x1.5fe3a6a58526dp20
+diff -urN glibc-2.17-c758a686/benchtests/acos-inputs glibc-2.17-c758a686/benchtests/acos-inputs
+--- glibc-2.17-c758a686/benchtests/acos-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/acos-inputs	2015-06-20 21:22:16.295458166 -0400
+@@ -0,0 +1,2712 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.e9ba80c1b0cc6p-1
++0x1.0c06540e252bdp-3
++0x1.eda8e7c0a34bfp-1
++-0x1.fe8e777376d24p-1
++0x1.cb1673c92f0c9p-1
++0x1.e9ec316d0de94p-1
++0x1.7307e45a9bfb6p-5
++0x1.c16b847c92f30p-3
++0x1.cf0d270e371f6p-1
++0x1.129af5729ef19p-1
++0x1.bce5d0689ab4ep-1
++0x1.2952217220937p-1
++0x1.1c76822aee340p-1
++0x1.e24a2187c1a7ap-1
++0x1.f952508426fa4p-1
++-0x1.e800444223cecp-1
++0x1.edbc56657e3b4p-1
++0x1.5bcc935e4afc7p-1
++-0x1.e008619377db7p-1
++0x1.e7ca21e5cb233p-1
++0x1.c426411a0bd0ep-1
++-0x1.54b193e5a6106p-1
++0x1.ef45d30d3aaeap-1
++-0x1.0a7fa1bbcb68ep-18
++0x1.7b4f05763d852p-1
++0x1.dbc0233bcbacdp-1
++-0x1.f9ecd08896017p-1
++0x1.933a30bb5aecbp-1
++0x1.d87450bf54160p-2
++0x1.e74342dc955f8p-1
++0x1.e46ab59e4b1eep-1
++0x1.fde01341b468cp-1
++-0x1.989e4472a3f0cp-1
++0x1.e098a4166e777p-1
++0x1.566335c979611p-1
++0x1.596d3268f925ap-1
++0x1.219017042f1fep-1
++0x1.ecc867fb960bfp-1
++0x1.b60655bef4f13p-3
++0x1.f4a57127c7a0cp-1
++-0x1.f62ee5fe0cadfp-1
++0x1.3cd7211d9ad3dp-1
++0x1.9df0943df0ed7p-1
++0x1.ea161524e7d47p-1
++0x1.e55a50493b1a9p-1
++0x1.ec8561690ba28p-1
++0x1.f16282757d76ap-1
++0x1.51e1f7c96d12bp-1
++-0x1.9e34b40c77bdbp-1
++0x1.1703345163fc4p-1
++0x1.4bc66758655fap-1
++0x1.b153d53781d7dp-1
++-0x1.f9ad04c73d758p-6
++0x1.ee83a64fcc712p-1
++-0x1.26b3228cfdb15p-1
++0x1.a2c1325da062fp-1
++0x1.eacf918428269p-1
++0x1.210c161c12427p-1
++0x1.8f4653c521ef3p-1
++-0x1.3d666235ebc4dp-1
++0x1.fbf321159facbp-1
++0x1.fb0ae69837b58p-1
++0x1.e7add59a28c21p-1
++-0x1.b3931490e5c15p-22
++-0x1.62bb903865b73p-7
++0x1.d8d4c3d683cd2p-1
++-0x1.f414e43e31308p-1
++0x1.e85ef4b7677afp-1
++0x1.8e5c2284c58ebp-1
++0x1.350fc6069df8ap-1
++0x1.b156a051f0bd8p-1
++-0x1.cd2350b2a476cp-3
++0x1.f2cd66a92c33ap-1
++-0x1.e9d4a5abc7463p-1
++0x1.edf3474fdf1bfp-1
++0x1.ded3e00b45be7p-1
++0x1.ecca5018f3375p-1
++-0x1.f784a20ae007ep-1
++0x1.79cd244068e29p-3
++0x1.0520d4698e9c4p-1
++0x1.df7633193349fp-1
++0x1.eeacc7895ee01p-1
++-0x1.cbddd66bebde8p-1
++0x1.eaaab5eed4d48p-1
++-0x1.b786c6d51b98dp-1
++-0x1.61c366c7c79fap-3
++0x1.f6f55566f3c9dp-1
++-0x1.8455d26a48743p-1
++-0x1.f027619f4ec1cp-1
++0x1.4de6d77cd7b97p-2
++-0x1.2d45e43d1b629p-1
++0x1.dd061720e456ap-1
++0x1.3bfb31bd7ed4ep-3
++0x1.f35563c6fc9e1p-1
++-0x1.da4995d5cee72p-1
++0x1.a96983d9102b9p-1
++0x1.e004440ae8f05p-1
++0x1.e53b304fb4d06p-3
++-0x1.f03185a1019d1p-1
++0x1.8676b01d07ce0p-1
++0x1.ea1916d533f0dp-1
++0x1.03a04519c4e1fp-1
++-0x1.e8ac5756ef915p-1
++0x1.4d6bf1a203446p-4
++0x1.d981a70cd845bp-1
++0x1.1c125719eaaf8p-3
++0x1.e85fb3990f27ap-1
++0x1.e8e035a26d083p-1
++0x1.cbfe848a09c42p-3
++-0x1.e06e527c5ae19p-14
++-0x1.bbd103472cef1p-25
++-0x1.feed81508a469p-1
++-0x1.dab671cd03097p-2
++0x1.ea30578b17269p-1
++0x1.6d0684ce3aa60p-8
++0x1.66d50185eedb5p-2
++0x1.e74243adbcc15p-1
++-0x1.f64db1b1939aap-1
++-0x1.ebd6465bc4b63p-1
++0x1.e006e50dea620p-3
++-0x1.c2fcf77c4861dp-1
++-0x1.e632b5939513cp-1
++-0x1.9ab8b4c3cb0b4p-1
++-0x1.3a3bc41b1b0fcp-2
++0x1.3372c7d8d3206p-25
++-0x1.fd74373268dbbp-1
++0x1.f4e100915be05p-1
++0x1.9bc0232dfa0efp-1
++-0x1.cc03e1478de39p-4
++0x1.e93d0775eb299p-1
++-0x1.a2bb4749faabep-3
++-0x1.f052a40d8e48bp-1
++0x1.c07334b1aac33p-26
++-0x1.13463673ea539p-3
++0x1.d66e5598d3262p-25
++0x1.0dae423f0189ep-2
++0x1.df1a0195dfca4p-1
++-0x1.598e9260d11fdp-1
++0x1.67c773c2070cep-1
++-0x1.ed1f510c9ce11p-1
++0x1.dae297d5d3bafp-2
++-0x1.39af35b44da1fp-2
++-0x1.c679d76fc2b15p-3
++0x1.88f507621e546p-2
++0x1.f702c7007d0f8p-1
++0x1.f2ef13107c805p-1
++0x1.e4bcf61e9db8ep-1
++0x1.3bbb12f88beeap-1
++-0x1.fdb1502db4889p-1
++0x1.3318578e20bc0p-1
++0x1.e9de7563a7493p-1
++0x1.6188f44707072p-1
++0x1.f8903254e120cp-1
++-0x1.f38db4b985d52p-1
++-0x1.cbccf0e19cc7fp-3
++-0x1.be12773f273cdp-10
++-0x1.2b3e149bb0426p-2
++0x1.ad69976c033a1p-1
++0x1.edd13194f87aep-1
++-0x1.18a974fd7bbebp-1
++0x1.9f1fc231a2241p-1
++0x1.10e56678c706ap-25
++-0x1.da0f94397e1efp-1
++-0x1.76c026d8ec2b4p-1
++0x1.0a089692fa9d6p-1
++-0x1.da1ff0b273cd7p-3
++-0x1.f97015d611b73p-1
++0x1.dbe9c72d38923p-1
++0x1.bad6c26512dbcp-1
++-0x1.fb6fb5159af3ep-1
++-0x1.9198b69ff20eep-3
++-0x1.fe0c97242979ap-1
++0x1.2287403404baep-1
++-0x1.f3f5449170a5dp-1
++0x1.f3a6840c57d33p-1
++-0x1.03c0045400546p-1
++0x1.f838e0db37795p-1
++-0x1.7accc66f1a867p-1
++0x1.e82562eb8444fp-1
++0x1.df27b76e86704p-1
++0x1.f4da573b55ec2p-1
++0x1.efe5a6e5fbe8bp-1
++0x1.0659847830f85p-1
++0x1.e32184673d6a3p-1
++-0x1.fea5968e2edf9p-1
++0x1.466c21bdb53d6p-1
++0x1.e7078679d9affp-1
++0x1.befbe4ecbe8cbp-1
++-0x1.e2d534c706c26p-18
++0x1.32616231a62c1p-26
++0x1.54edc38ae367fp-1
++-0x1.3007019386da4p-5
++-0x1.a336f67af7129p-1
++-0x1.8c2257c536d60p-2
++-0x1.84d896f47ecd4p-1
++0x1.977af609a6d12p-18
++0x1.e932a72cac166p-2
++0x1.2945179c842bap-1
++0x1.4a5182138dbd3p-3
++0x1.dbe2458d35539p-1
++0x1.1f1092dd29f91p-1
++0x1.dc693710eb9b2p-1
++0x1.ecb8b2274a503p-1
++0x1.412eb424708fap-1
++0x1.93ca610ea7b0cp-1
++0x1.563fa238b86bfp-3
++0x1.6cc3c369c6079p-1
++0x1.f783b429dc0f3p-1
++0x1.9b875417727f6p-1
++-0x1.a03c44361af74p-1
++0x1.f577461815545p-1
++-0x1.1b83d2880ad3bp-1
++-0x1.2850a5ece60c7p-22
++0x1.03ce907b337a2p-7
++0x1.e13907a8a623bp-1
++0x1.ea3a84b97d192p-1
++-0x1.a41072eb8d471p-1
++0x1.eb4c15b45d01ep-1
++-0x1.101d32f8c74c8p-1
++0x1.0193b3f4d9074p-3
++-0x1.537154d5f6ae7p-3
++0x1.bfaf90a91ac01p-1
++-0x1.0c10917ddebb8p-1
++-0x1.8eadf732729dcp-21
++0x1.e86b603c02c7fp-1
++-0x1.e1d732a3d845ep-1
++0x1.f11cd0a6f6f03p-13
++0x1.8d26805424934p-3
++0x1.f145109d6bdccp-1
++0x1.c543a6761e121p-1
++-0x1.c25a322cf34eap-2
++-0x1.865940819f5fcp-1
++0x1.dc04807986da6p-1
++0x1.ed429667932c9p-1
++-0x1.76fd636ed6498p-2
++-0x1.e53ac26588b25p-1
++-0x1.8f5d4684f487ap-1
++0x1.e09a34d1ff29bp-1
++-0x1.fa9d102a95505p-1
++0x1.1b05e56138440p-3
++0x1.1bc9a7f1d79eap-3
++-0x1.6811368ab0abbp-1
++0x1.ed98e0214a336p-1
++0x1.e7e686da575a0p-1
++-0x1.965f75ff798a9p-1
++0x1.80eaa23a91ec2p-1
++-0x1.d36fb043f6300p-5
++0x1.7018a38a05ffdp-2
++0x1.fae070244fb19p-1
++0x1.d0dd401b30198p-1
++0x1.42f142dadfa1dp-1
++0x1.ec68818823d1dp-1
++0x1.85f3e7bec93a0p-1
++0x1.af29d1ff6c1dap-2
++0x1.35c4a6805cca0p-1
++0x1.df0b063501081p-1
++0x1.5bcd000b70207p-2
++0x1.a24de48ee748dp-1
++-0x1.6a318265b0ce0p-1
++0x1.c534f40a7def8p-3
++-0x1.9f4e543169174p-1
++0x1.f2de70648aed5p-1
++0x1.fe8ab52a90cb0p-1
++-0x1.f680253c19250p-1
++-0x1.fc63569b7f833p-1
++-0x1.6b2935d76744bp-1
++0x1.ea5f006b8edcep-1
++-0x1.5342e394b5397p-1
++0x1.ec4706c41bd83p-16
++-0x1.b7a5b13013786p-3
++0x1.efc8b1d13cab4p-1
++0x1.f524140aa4f9fp-1
++-0x1.8d59b2246d1b5p-2
++-0x1.e10a8025fd5c2p-1
++0x1.ffe555d68b776p-1
++0x1.5ccb0133fca6ep-2
++0x1.47b60350a0542p-1
++0x1.f3d4414a57242p-1
++-0x1.4c94d139f13e8p-1
++-0x1.f598238e275f3p-1
++0x1.818fb41d76b85p-1
++-0x1.fa14d2d9c0775p-11
++0x1.f16ec2400aebap-1
++-0x1.eac587507894dp-1
++0x1.f20e64bfc7419p-1
++-0x1.85ce9765938ccp-3
++0x1.92bff695a5d90p-1
++-0x1.8d0a2047280efp-2
++-0x1.2559e3d4e777dp-22
++0x1.e8390104997a7p-1
++0x1.e99044f21a5c8p-1
++-0x1.ea12258aac145p-1
++0x1.f68a246001b3cp-1
++0x1.db5b870d933e5p-1
++0x1.a140f339c5bdep-20
++0x1.8193402b5c8ecp-1
++-0x1.04d5676a38199p-12
++0x1.a455655209ff8p-1
++-0x1.e63ba4f3d8c3ep-1
++-0x1.6a28d15928650p-1
++-0x1.64b6d0a25c33dp-9
++0x1.46915799cfaccp-1
++-0x1.fbd157a2c23b1p-3
++0x1.ffa3663aba6d5p-1
++0x1.411d129126d0dp-1
++0x1.7063d30f52d4dp-1
++0x1.8201c2f453059p-1
++-0x1.f27a071cddd3bp-15
++0x1.7aca32522bbf5p-6
++0x1.c9846775a72c1p-3
++0x1.6d082285276a9p-15
++0x1.c6a6b4f8f837ep-24
++0x1.ee27e42a2b26bp-1
++0x1.e191c47dea938p-1
++0x1.44b0e7864ee92p-2
++0x1.9c4882b7b62cap-1
++0x1.20b6f0f17af05p-3
++0x1.0301e36c00af6p-1
++0x1.dfe705d59ecb0p-1
++-0x1.dbead5cf594d7p-1
++0x1.f12b06bbb4e7bp-3
++0x1.efe8c7612f386p-1
++-0x1.eb9e2463b8a3ap-1
++-0x1.faf13348b1a37p-1
++0x1.cd50167950c5ep-1
++0x1.dba5c79d7a05ep-1
++-0x1.a334d05fa6dd2p-1
++0x1.8cb1a630bb9c2p-1
++-0x1.9681e2cf54b70p-1
++0x1.39aca667fcf3fp-1
++-0x1.e8bd029d083e4p-2
++-0x1.50e857e4f8090p-1
++0x1.dc16134a07952p-1
++0x1.2c4bb22847712p-1
++0x1.e7b0645e8a0abp-9
++-0x1.8fc066ee56befp-11
++0x1.edbf80f8c492cp-1
++0x1.e3d6a1c24d10cp-1
++-0x1.fbd4f63a7219dp-1
++0x1.f6fd10b1bdf09p-3
++-0x1.6530f1b557057p-1
++0x1.b88262a6e1331p-1
++-0x1.eb0e3015adc06p-1
++-0x1.26cfc26e19c43p-3
++0x1.59bc70a355e7fp-2
++0x1.5fee801ec378cp-1
++0x1.154984a08fb2ap-1
++-0x1.75a356a8a9292p-5
++0x1.ea9314dc90613p-1
++0x1.ea2107288cf84p-1
++-0x1.ebe7414198207p-1
++0x1.65aee12e3ceffp-1
++-0x1.51ba6636b9f2fp-15
++-0x1.c626d4507f69ap-1
++-0x1.e2e3f55bb23a1p-1
++0x1.98b000eb73a71p-1
++0x1.43af03a6b9b8dp-3
++-0x1.7f2ab3a80ac43p-1
++0x1.d9d2a5d6d0097p-1
++0x1.e3f984fc9c133p-1
++-0x1.afeb916e3177fp-21
++0x1.4e04b4277b006p-1
++0x1.efe0107fb5684p-1
++-0x1.4515b4c2b21dap-1
++0x1.11a6b0c515920p-1
++0x1.6164a6618d12ep-21
++0x1.dae745520e0c5p-1
++-0x1.dd2d72e85c929p-1
++0x1.6d9ef5d5611fbp-1
++-0x1.f0f797fed0a55p-1
++0x1.2eab0154ef308p-1
++0x1.ed1fd3af0b556p-1
++-0x1.e71b754c98246p-2
++-0x1.2590214dd2a24p-3
++0x1.fdd1961109848p-1
++0x1.7eb1071ff2770p-1
++-0x1.15bd45916de1ep-2
++-0x1.44d715ad68f89p-1
++-0x1.7641422787614p-1
++0x1.eefe328d3d881p-1
++-0x1.eca8704b551c7p-1
++0x1.2ee67226d5529p-1
++0x1.e8ac53c1395d3p-1
++-0x1.64646108e67cbp-1
++0x1.db91c36140425p-1
++0x1.4605c5134237bp-1
++0x1.f903e462cc94dp-1
++-0x1.73f4c75c9d5f2p-1
++-0x1.dac8a6d776479p-1
++-0x1.2b4492bd73b64p-15
++-0x1.373103fbf2dbbp-26
++0x1.851581e8ee5f8p-8
++0x1.ebca3047b32cfp-1
++-0x1.07c16329a6368p-1
++0x1.fccc50d54ff1fp-1
++0x1.fe9de2486d607p-1
++0x1.ef48b46c9b643p-1
++0x1.e8ef618c8024bp-1
++0x1.993fe684e622bp-1
++0x1.460b45e598a8cp-12
++-0x1.d9e786749e8b9p-3
++-0x1.559071a09ac62p-1
++0x1.ef7432ff2df38p-1
++0x1.e45a36a5fb72fp-3
++0x1.b3d5275cfb554p-1
++-0x1.98e8e522e4a82p-23
++-0x1.02aed44057b67p-2
++0x1.2197f1f7c6e26p-1
++0x1.0837b5e1cec38p-1
++-0x1.ca8a4237c9e0cp-17
++0x1.6006c4b0268aap-1
++-0x1.7208a0ee99588p-18
++0x1.b4b1e471a5f5fp-26
++0x1.8fe1f13a9702cp-1
++0x1.f02b227033d9ap-1
++0x1.d97ec10440781p-1
++0x1.f76fb1e91d5b2p-1
++0x1.deb247936f19fp-1
++0x1.8af0f66d4b0dcp-12
++-0x1.b64be0350cfd6p-1
++-0x1.f932f26d539d5p-1
++0x1.e82a219e74d13p-1
++-0x1.7e09139513a33p-26
++0x1.18f8069a74b77p-1
++0x1.dc6726bfa7475p-1
++0x1.08c813e4436a5p-2
++-0x1.d8320749306c8p-16
++0x1.9472944ec390dp-1
++-0x1.a99987154cea1p-1
++0x1.c882368b557a4p-1
++-0x1.1aa794570d691p-3
++0x1.5c77249e4aea0p-1
++0x1.eb9813be6a2b6p-1
++0x1.f431a44ef4d40p-1
++0x1.eea5d7d2221dap-1
++0x1.2c6291d7f2ad7p-2
++0x1.ac443697d70fdp-1
++0x1.e20ca7c2912a5p-1
++0x1.7ab1d7104d182p-18
++0x1.339513d5d0ee8p-1
++0x1.f589b5ee62b16p-1
++-0x1.fad8f2a47e9f4p-1
++-0x1.1dd663fac6b4fp-1
++-0x1.0f9652222f8e9p-1
++0x1.f35714209b7bdp-1
++0x1.6834569b7a1fap-1
++0x1.00dd565cc9ccfp-15
++0x1.65da25ab2220cp-1
++0x1.d84fa7357d48fp-1
++-0x1.c51a11571e3e9p-1
++0x1.f381b3df02583p-1
++0x1.fbf8c33676a44p-1
++0x1.82bc413c6aff0p-1
++0x1.0dca9008fbcebp-2
++0x1.235506540c7b9p-1
++-0x1.3e3c739c48dc4p-1
++-0x1.f73153b059fbap-1
++0x1.cc56d349d03bap-2
++-0x1.53099013f8190p-2
++0x1.e53de61c37f3ap-1
++0x1.a6a246bf1a535p-22
++0x1.91d3b66fca3a2p-1
++0x1.0f5d16ce3edabp-12
++-0x1.9a7b92e12b5f7p-1
++-0x1.76ca124cf6f47p-3
++-0x1.c41b9411e2424p-1
++-0x1.34c885f2eb328p-1
++0x1.ec1e45f6f7b9dp-1
++0x1.0a4775720ed55p-1
++-0x1.31efb599b0c90p-1
++0x1.edbe60062d7a3p-1
++0x1.2319304ed36b5p-1
++-0x1.cb6aa416f444fp-4
++0x1.504f676650b1ep-1
++0x1.3d1aa4401c058p-3
++-0x1.f60c37def0ad1p-1
++0x1.f9792648513f5p-1
++0x1.94a7e574d0288p-1
++0x1.94f7926ce6fbcp-18
++-0x1.f6fad097104e4p-1
++0x1.3088005339ad3p-1
++0x1.f03355e0191c2p-1
++0x1.dcd3d17610280p-1
++0x1.e05d2667abb1fp-1
++0x1.e82525f9fbf01p-1
++-0x1.de3ca0ef987b7p-1
++0x1.f59943ba80acep-1
++-0x1.e960c36a66790p-1
++0x1.9d26903f5cd50p-10
++-0x1.89bec5921086fp-1
++-0x1.f4e8b5ec98f6cp-20
++-0x1.711982a677be4p-3
++0x1.f46112d3fe843p-1
++0x1.083e13f8fffefp-1
++-0x1.baf382671db8ap-1
++0x1.e0d881ff65497p-1
++-0x1.45bc320aa4dfep-2
++0x1.40e3e60b110dcp-1
++-0x1.f4e3046089560p-1
++-0x1.ea56c46279081p-1
++0x1.e9e48261cb26ep-1
++0x1.4d48f2887cd66p-2
++0x1.e51d745ef2138p-1
++0x1.ae3d476739166p-1
++-0x1.3b19c402e1ab5p-1
++0x1.93db32ee991c6p-1
++0x1.159cd3c2eac06p-2
++0x1.f2196713b8de3p-3
++0x1.c3c4d2e87e40cp-5
++0x1.546b31afe7b81p-3
++0x1.1cd7423631f45p-23
++-0x1.f98921eb79da8p-1
++0x1.da4473bb667adp-1
++0x1.f6d1c21979168p-1
++-0x1.f83452138ebc1p-1
++-0x1.77e2149e4a15bp-1
++-0x1.e374023473851p-1
++0x1.6135557835b0ep-1
++0x1.116497cc82db6p-1
++-0x1.d604e43246f1ap-1
++0x1.e03ba16e3b2d0p-1
++-0x1.fbcc51c3d0adap-1
++-0x1.230833754cbadp-1
++-0x1.e859b3f551706p-1
++0x1.8ed6352b2279fp-1
++0x1.e833c05936a7ep-1
++-0x1.f45f124fb19f4p-1
++-0x1.bcc7e5fa33d67p-1
++0x1.cb5bf39c4168fp-1
++0x1.d913109c549a2p-6
++-0x1.5df3a69b09a81p-3
++0x1.e92f739ce65adp-1
++0x1.eddff4fa793e3p-1
++0x1.fd0d826c5a1d9p-1
++0x1.f01142b6404c5p-2
++0x1.ed3e7235fb716p-1
++-0x1.3f08a31b67052p-6
++0x1.6c6bd2dd525cdp-1
++0x1.e42d42ade6dd4p-2
++-0x1.7c4f407d91487p-8
++-0x1.1441528bd2bc9p-8
++0x1.e5db61dfac951p-1
++-0x1.cf52b5c3c6b19p-1
++0x1.e83f57fd71bfcp-1
++0x1.ae8f91695d74cp-1
++0x1.545021fa9de9cp-1
++-0x1.45c9266ea4970p-1
++0x1.eafea77c551aep-1
++0x1.eba4171524f40p-1
++-0x1.425187f18c762p-18
++-0x1.485fe6e78b76fp-1
++-0x1.db6f1755478ccp-1
++0x1.f8e25686998acp-1
++0x1.ccbba7e740751p-1
++0x1.7816a0d6522cep-1
++-0x1.0cad003c37274p-22
++-0x1.4249d37181745p-3
++-0x1.1aea32c571f90p-2
++0x1.eff2c75d80ec9p-1
++0x1.dedbb5aa065c5p-1
++0x1.022c15ed03102p-2
++0x1.e28cc0a25217ep-1
++-0x1.e75507711de7bp-1
++0x1.6994d6b07313bp-1
++-0x1.93938552d7672p-3
++0x1.e9f062935639ep-1
++0x1.efc9111829a30p-1
++0x1.e82d352bd52d4p-1
++0x1.8aefc30a2949bp-1
++0x1.e829e785fe6bcp-1
++0x1.906de67167cd7p-1
++0x1.3cf7801ab3ddcp-1
++-0x1.d674412d314f7p-1
++0x1.b8f3652b4e782p-8
++0x1.0797f77b05b64p-1
++0x1.fa845330ec5ebp-1
++-0x1.513a3093d637fp-1
++-0x1.a0ae922b44732p-1
++0x1.eb5b41b522564p-1
++0x1.e9e54719a6384p-1
++0x1.dc6a025cdf557p-1
++0x1.8e2720ee32c68p-1
++-0x1.08a965eef1feep-1
++-0x1.fa6306dd46e3fp-1
++0x1.155615f73dc49p-1
++-0x1.ad5ce2c9a061dp-2
++0x1.3a6b650c8bc49p-1
++0x1.1d1f86d1e1e30p-1
++0x1.cc1b051550465p-1
++-0x1.eb9871c6f4d8dp-11
++-0x1.9da0d78b9cbe4p-2
++0x1.e6cb460ebeeebp-1
++-0x1.ebcbb7d352b98p-1
++0x1.f10602c31c4ffp-1
++0x1.f83d00511f1a6p-1
++0x1.e70ef18e894dcp-1
++0x1.f42747759511dp-1
++-0x1.e210555e48210p-1
++0x1.e8be424104e58p-1
++0x1.e269c29bcef60p-1
++0x1.f85ef0fd21f0bp-1
++0x1.937141f2672e0p-1
++0x1.38ec61bd517ccp-1
++-0x1.d6e9722dc24fcp-1
++0x1.f8d1b326b2ed1p-1
++0x1.d86da58fba185p-1
++0x1.65efb1356114ap-3
++0x1.f72791c9cf436p-1
++0x1.0ae4753a5c894p-13
++0x1.f7415347bb40bp-1
++0x1.dc65a4f6e740cp-1
++0x1.d88607a3797e0p-1
++0x1.eed61776e402fp-1
++0x1.ee0df44fb77d0p-1
++-0x1.f450159e992b8p-1
++0x1.e29cb14cdbcd0p-1
++0x1.f653a3375d51dp-1
++-0x1.f57f5552ab569p-1
++0x1.6480d3d0c5efep-20
++0x1.38e266cf4e67bp-23
++0x1.d51cd22b5b6cap-1
++0x1.dc3de7d2fc8d2p-1
++-0x1.312a5566cde3fp-1
++-0x1.fab1d3aa238acp-1
++-0x1.95bac47704824p-3
++-0x1.891b43164f852p-2
++-0x1.80e9f033f4793p-2
++0x1.df255385153fbp-1
++0x1.de67748161291p-1
++-0x1.777e66869b5a2p-2
++0x1.95b610da4b767p-1
++-0x1.0eaeb02390875p-24
++0x1.ed4d9348c4329p-1
++-0x1.96df34af5a088p-21
++0x1.f2d162c70d8b5p-1
++-0x1.deb665e66d761p-1
++-0x1.0f044763f2eaap-3
++-0x1.9c3784de626cbp-3
++0x1.ad40b341217cep-1
++0x1.a3d8456656f09p-1
++-0x1.30688704ba934p-13
++-0x1.f3cf5294a6a88p-1
++0x1.e906911183a95p-1
++0x1.d875b2a4cfad9p-1
++0x1.e9ecd5820a5eap-1
++-0x1.948a52ed5c31bp-5
++0x1.f9c6e1a503f35p-1
++-0x1.ec4f82e92c41cp-1
++-0x1.2ee365574b66ap-6
++-0x1.cf7594c4759eep-19
++-0x1.a0d5f18128988p-2
++-0x1.806c918e71aeep-1
++0x1.df5d715846162p-1
++0x1.f67f859e5cfe0p-1
++0x1.ecc2b558d729fp-1
++0x1.ff9fd0805bf30p-2
++0x1.432fe2eead4f4p-1
++-0x1.8366e3d1a2b7cp-1
++0x1.e3f070eec2596p-1
++0x1.30ba2715f8514p-1
++0x1.e977633ddb6c8p-1
++0x1.ecfff5d1ed4fcp-1
++0x1.6e88143883032p-1
++-0x1.e95fa37e7e7bbp-1
++-0x1.b83c53c09f546p-1
++0x1.517d53ed1b833p-1
++0x1.db8f51d5f71aep-1
++-0x1.1678154436606p-2
++-0x1.fc21417ad3694p-1
++0x1.1c843518d2e94p-25
++0x1.e8eee13ebc573p-1
++0x1.fee6721632c37p-23
++-0x1.f6a87247c9154p-1
++0x1.fe6af4fb98692p-1
++0x1.e7c390a9bbc3dp-2
++-0x1.e0f877f179d56p-1
++0x1.d96bf428df776p-1
++0x1.fc1c23962674cp-1
++0x1.b198a6962238ep-1
++0x1.033e6517daa6fp-5
++-0x1.2d2db09cc6e86p-21
++-0x1.1ed1f46145a42p-1
++-0x1.aceee1f163bb0p-1
++0x1.e775b65834bfap-1
++0x1.b59893a929786p-1
++-0x1.0e4bb0b067b5bp-1
++-0x1.ff1285390535cp-1
++-0x1.f8d0963809a50p-1
++-0x1.e5a865ab089bcp-1
++0x1.c6d112328b280p-1
++0x1.f013574be1027p-1
++-0x1.e0a691caa2943p-1
++0x1.2506d6a72e424p-15
++0x1.0e385386801e9p-1
++-0x1.2c8ac0b1cee68p-6
++-0x1.e44cf154f7837p-3
++-0x1.9c7c24975ad82p-1
++0x1.0d8d44f6a38b9p-1
++-0x1.fb5c33ee7ffa5p-2
++0x1.4ce97693eab63p-1
++0x1.2d57b32c61adep-1
++-0x1.ddc8c1bd6b2f6p-1
++-0x1.60a8174ee182cp-2
++-0x1.fe3ab0326a9ebp-1
++0x1.c99672ad8233dp-1
++-0x1.a05f0442a1f89p-11
++0x1.f4efa58696ba2p-1
++0x1.e8f0874ac9593p-1
++0x1.697a477d1fbd3p-2
++0x1.66b7a3a5f4bbcp-2
++0x1.ec3a1130d87e6p-1
++-0x1.5faae7d3bcf38p-1
++0x1.be54761e95348p-1
++0x1.d053b71612732p-1
++0x1.f13a35b68c59ap-1
++-0x1.ffd2875be2cf2p-1
++0x1.e62df4c494b61p-1
++-0x1.3471231cca442p-6
++-0x1.a7b9e784d9434p-16
++0x1.ece3f29820bdfp-1
++0x1.ef6b47f54b2d8p-1
++-0x1.df2c8655fc70dp-1
++0x1.eda0969bec905p-1
++0x1.488f14cfb8987p-1
++0x1.feb910bbdd186p-1
++-0x1.ed55067dcc2e0p-2
++0x1.dee9b5b493f34p-1
++0x1.37f0201120141p-2
++0x1.bcf1c52c54526p-1
++0x1.e2e2e4afd49aep-1
++-0x1.a828f2fd070e9p-1
++0x1.0995c67dde325p-2
++-0x1.b9cee2442f243p-11
++0x1.b5ffd6affbe68p-1
++-0x1.898db08ff9e7ep-3
++-0x1.eea7123455743p-1
++0x1.e22364d8d2ffbp-25
++0x1.9bc512637b567p-1
++0x1.908f41ab382c6p-1
++0x1.daa6242404908p-3
++0x1.354d96ce0c1f1p-3
++0x1.e4909407d6b04p-1
++-0x1.ae60e50c81658p-1
++0x1.d83d9616cffd1p-1
++0x1.68d57679fbad0p-1
++0x1.ee2a61e036810p-1
++0x1.ff2523154e342p-1
++0x1.e80a234204ccep-1
++0x1.ee12e03c07731p-3
++-0x1.f53bb6a0244b9p-1
++0x1.a7d1d4d25fc9bp-15
++-0x1.0d5e226bae52dp-3
++-0x1.f7553430f26b9p-1
++0x1.561a2200e4797p-1
++0x1.dda171643a8f8p-3
++-0x1.e9a0822672116p-1
++0x1.9c8ad39c801dep-1
++0x1.50fe36a2e907bp-1
++-0x1.f5cb55c5f89b0p-1
++0x1.e55b90ffc4db3p-1
++-0x1.f580e64339dfbp-1
++-0x1.c786d16c31b03p-1
++0x1.ab3d818097c47p-1
++0x1.f628956df2bddp-1
++0x1.3c1983a14fe08p-1
++0x1.ea6977319eac4p-26
++-0x1.a2b2a3cf330a0p-2
++0x1.e06d66507bd76p-1
++0x1.ed4aa34d83d9dp-1
++0x1.adbf4089e4bf0p-1
++0x1.169462af69653p-1
++0x1.7cdae69e34be4p-23
++-0x1.f476a5d67b80dp-3
++0x1.e4f9a4e8edcabp-1
++0x1.fcb451b72ca3ap-1
++0x1.bbee334a41744p-2
++-0x1.e669334dbdbb2p-1
++0x1.e1ef409647a27p-3
++0x1.e2f3d0f200912p-1
++-0x1.0ee0376cb5980p-1
++-0x1.cd90d53a85604p-24
++0x1.da2ee339cc169p-1
++-0x1.91bee2eec93ebp-1
++-0x1.db27252020025p-3
++-0x1.ac0763a2833a8p-1
++0x1.ed7de7964d7b7p-1
++0x1.387816b7132c2p-15
++0x1.bde1b11fb418ep-14
++-0x1.f4b0e44a782a9p-1
++0x1.c85742cc49d4ep-1
++-0x1.2ae4206794c97p-2
++0x1.e8ede2eca6ebcp-1
++0x1.e83ec2bd612adp-1
++0x1.cec725af1011dp-1
++-0x1.f3f110dc11f36p-3
++-0x1.82c441472b814p-1
++0x1.12aee0aad581cp-1
++0x1.d843d56f7661dp-1
++-0x1.0fa9100cde2b7p-1
++0x1.fbb577823c6b2p-1
++-0x1.e7e0f30c7c41bp-1
++0x1.ead455b35dcfcp-1
++-0x1.af50723be988fp-1
++-0x1.c6df54f302009p-2
++-0x1.f69220aac2bb2p-1
++0x1.db2795c5314edp-1
++0x1.f0e804039007cp-1
++0x1.16e3c0bc73e90p-1
++0x1.56f925b7342efp-2
++0x1.2b1a40efca711p-1
++-0x1.c95572af1befbp-1
++-0x1.ea363656402fcp-1
++0x1.9fcea6314eb53p-3
++0x1.c384447b8f44dp-2
++0x1.d9cb8501968aep-1
++0x1.d213669b363a3p-1
++0x1.dbbce7d0130a1p-1
++0x1.ef1b07c170256p-1
++0x1.e5d87723e3720p-1
++-0x1.dc9450089dc1dp-1
++-0x1.a400e154e4d4ep-22
++0x1.f0b8639dae8c0p-1
++-0x1.c0d7a6d0e58c3p-22
++0x1.ebe277900a6d5p-1
++0x1.ddc883853f7b1p-1
++-0x1.f26d718326d24p-1
++0x1.b444f4ecea2d4p-1
++0x1.db5285f43880ap-1
++0x1.ec2a704fa7ba7p-1
++0x1.d9d38554f4ae7p-1
++0x1.40a287e0245c7p-1
++-0x1.bb5997a01dc09p-1
++0x1.dbfe825428361p-1
++0x1.eab9e61d0bb13p-1
++0x1.dbf8477b40f85p-1
++0x1.5977a5e9562d5p-2
++-0x1.6d6582d27a94ep-3
++0x1.ef98c62116f6bp-1
++0x1.b195e01c1649fp-1
++0x1.ed47e34ba7118p-1
++-0x1.2e1b55053587cp-1
++0x1.f46e72b797c76p-1
++0x1.e58d17977d4c7p-1
++-0x1.78044314faf55p-12
++0x1.e67de4828d079p-1
++-0x1.f72481a2b0f3ap-1
++0x1.ef6de28920541p-1
++0x1.81a907ff59256p-1
++0x1.121bf667b781ap-1
++0x1.e41ba30cd763ap-1
++0x1.1e76d67046217p-1
++-0x1.1250820739879p-1
++-0x1.d15f33646b553p-2
++0x1.e90c01d074c50p-1
++-0x1.dc98c564661f8p-2
++0x1.aab3b79abd652p-22
++-0x1.12c3e674c7017p-3
++0x1.207186d6329bap-23
++-0x1.e9de504c45574p-1
++-0x1.87494270ac164p-1
++-0x1.e88cd321ec1dap-1
++-0x1.9317565e1a195p-19
++-0x1.350c40dd7d78ep-1
++0x1.75b8a20113b5ap-3
++0x1.ae0882e067102p-3
++-0x1.313bb034e4980p-1
++0x1.944cd3352094fp-1
++0x1.e845447d64568p-1
++0x1.fe614045bdde4p-5
++0x1.c23a220bff5cfp-5
++0x1.e4e1454ecf85dp-1
++-0x1.fcf1e7da10e5ep-1
++0x1.ee9f80c3fe210p-1
++-0x1.dae080dc56bf7p-1
++0x1.f8b43563a02aep-1
++-0x1.debb0319481e9p-1
++-0x1.f1d9c2f758defp-1
++0x1.deb7334be5d7ep-1
++0x1.e24ac198b2950p-1
++-0x1.4b4613f445564p-13
++-0x1.faf37271307aep-1
++0x1.6a02646fd3199p-1
++-0x1.e520507f83ff0p-1
++0x1.974227fac5c71p-1
++0x1.fe97f4454153cp-1
++0x1.64cc47f51d1ebp-1
++0x1.e0aeb2661bc7ep-1
++0x1.865c7062df26ep-1
++0x1.2b9d94fd96933p-1
++0x1.dc43445d9d6c0p-1
++-0x1.0bcd5161b4780p-1
++0x1.e8eba118b0a26p-1
++0x1.c838228508974p-1
++-0x1.712d5001098d3p-14
++0x1.eaafe5872fba9p-1
++0x1.badc0660a7f51p-1
++0x1.e66ca4a1fdcf4p-1
++-0x1.ed40630f17ef4p-19
++-0x1.eab7a154b753bp-1
++0x1.8610d1e8e6c64p-3
++-0x1.fd61a56639941p-1
++0x1.26cb23fb114cep-3
++-0x1.bf3de5d1277c8p-3
++0x1.eda2c028553a7p-1
++0x1.e0be233591f18p-1
++0x1.fa64112d9b7bdp-1
++-0x1.f5e2246ae2dd4p-1
++-0x1.57b0e23b39e09p-1
++0x1.d97671e65ea90p-1
++-0x1.e6be223004611p-1
++0x1.d56357592f5acp-2
++0x1.6475907a120e3p-1
++-0x1.f47e6381c6551p-1
++-0x1.f2b9635cc6607p-1
++-0x1.5277123e133e3p-1
++0x1.47e5a403ff975p-15
++-0x1.3b47975249d03p-1
++-0x1.2d4395c82f1adp-2
++0x1.1450373bbdbf4p-1
++-0x1.f3f605106ccd2p-1
++0x1.e4fb505afc536p-1
++-0x1.c45f37ee28f93p-1
++-0x1.ea50f192e21edp-1
++0x1.eb0711bcb2188p-1
++0x1.b7a016b696338p-1
++0x1.623046e714274p-3
++0x1.43e5923d7c3c7p-1
++0x1.2fa122f6646a9p-1
++0x1.f4f6b5de34b5ep-23
++0x1.f469264200881p-1
++0x1.655d872a08e7bp-1
++-0x1.efbc035d5241cp-1
++0x1.eecee67cb7c37p-1
++0x1.ef23215f6de12p-1
++-0x1.9157d3c02c3b2p-1
++0x1.c15691eeda91ap-3
++0x1.f39d271893c42p-1
++-0x1.e4f743d28a786p-1
++-0x1.e3439360d1751p-2
++-0x1.e307d799961afp-1
++0x1.e25a6469a523ep-1
++0x1.f220a525222a6p-1
++-0x1.e47060fdcc071p-1
++0x1.36f464d433610p-1
++0x1.d2182142a2d5cp-1
++0x1.eeae3359ec957p-1
++0x1.9af5d2ec8ebd9p-1
++0x1.e11a171b22e03p-1
++0x1.b610305edff4ep-19
++0x1.ed7ab363b3447p-1
++-0x1.e41a54d8498d1p-1
++0x1.51de25b587b24p-1
++-0x1.c0e965c3967f1p-24
++-0x1.c773d52b04af3p-3
++0x1.d986851c611b7p-1
++0x1.c82c83eaf14c7p-3
++0x1.f7cc714398d27p-1
++0x1.cb56a41743a82p-1
++-0x1.c101b1037e3f5p-1
++0x1.70704180d156ap-1
++0x1.f2d9a4e18b93ep-1
++-0x1.70f794d622807p-3
++0x1.ea0c748947c48p-1
++-0x1.a1436628d7964p-2
++0x1.e577a48f03d8cp-1
++0x1.fb333192c3fd8p-1
++-0x1.849bb070f27dcp-3
++0x1.ef97766ebf4d8p-1
++0x1.bba5845fd0c44p-1
++0x1.cc35e07310ee9p-1
++0x1.bbf8c7bb9c20fp-1
++0x1.e52107bcb90ccp-1
++-0x1.53078258ff064p-6
++-0x1.1d3673a2a8700p-8
++0x1.eb3ae6f949eb2p-1
++-0x1.8a2f305b13ed1p-2
++-0x1.30fbb21b54296p-12
++-0x1.448976b9db4f3p-4
++-0x1.fba6c7b54d231p-1
++-0x1.1f9010499bc15p-19
++0x1.bf8d6212e3c0dp-1
++-0x1.c3658532b752dp-17
++-0x1.e40de71a02d0dp-1
++-0x1.c7ef32e8414f7p-3
++0x1.ecf661eaa759fp-1
++0x1.5030f4f39c66fp-1
++-0x1.a724314a500bcp-2
++0x1.9999d51105133p-1
++0x1.d9f6e4d727d70p-1
++0x1.ed1fc550f095ap-1
++0x1.503b14d81b366p-1
++0x1.34b7d05a78c28p-1
++-0x1.2cba67b857796p-1
++-0x1.d77251ee3df8ap-1
++0x1.59f032ff510d6p-2
++0x1.4f88d744710e7p-1
++0x1.d9e8209b73ea1p-1
++-0x1.ffb86378c6e93p-1
++0x1.ea73f543c07f7p-1
++-0x1.87a6e44eaf473p-14
++0x1.8db074f7cba71p-1
++0x1.38b80586e18e2p-5
++0x1.f8be8469e0f90p-1
++0x1.821ca4290f63bp-1
++-0x1.0dd78014ef1a2p-3
++-0x1.149aa666c3c46p-2
++0x1.eeb59431123bfp-1
++-0x1.c253e67cccb47p-23
++-0x1.1721b193cb808p-1
++-0x1.f29d328022c9bp-1
++0x1.dd6ca355705abp-1
++0x1.d7e5a3e80c978p-1
++-0x1.ff693303d6a1bp-1
++-0x1.9792d040f6098p-1
++0x1.e1bf0284f90b9p-15
++-0x1.f841c459354cfp-1
++-0x1.ea326681d6327p-1
++0x1.ec41879c45965p-1
++0x1.fa2d97e552ed9p-1
++0x1.5522431c3f1d5p-1
++0x1.f52c75ff3d843p-3
++0x1.df7ff289d597ep-1
++0x1.89e6d140f4474p-1
++-0x1.f5e8400a879eep-1
++0x1.d0ee108472a16p-1
++0x1.22c9e3d23737bp-2
++-0x1.f180d30e2ee8fp-1
++0x1.dc4355da08d39p-1
++0x1.83cc96505115ep-1
++0x1.df1a927ae2d49p-1
++0x1.f7cb87ac643cbp-24
++-0x1.b5b5e40f69460p-1
++0x1.b768756962650p-1
++0x1.385d044ddae6ep-1
++-0x1.20b4a1a53c3d5p-1
++0x1.7a97a05587a0dp-1
++0x1.f298d21034624p-17
++0x1.0f4422ec03b3ap-1
++0x1.8c67965cd0051p-1
++0x1.cee130d0b5a2bp-3
++0x1.3dc4e295f1f30p-1
++0x1.808b2220ea364p-1
++-0x1.fd05a69ce67b4p-22
++0x1.c6af341fa003ap-1
++0x1.ecd747e9c09c1p-1
++-0x1.551e1792426dap-1
++-0x1.fdc4b78598f6dp-1
++0x1.e705a3952cb55p-1
++-0x1.e302b444c2d4ap-1
++0x1.6079b20e499ddp-1
++0x1.9deca443255dap-1
++0x1.6c4eb3d0781b2p-1
++0x1.ea66d20e1b503p-1
++0x1.eaed6246abfe5p-1
++0x1.e9b823bbcfc07p-1
++-0x1.ce30a300a911ap-3
++0x1.a87ec3c5f01d2p-2
++0x1.bb25e46a7f518p-1
++0x1.edf7166512c36p-1
++-0x1.efe7a1f38e957p-14
++0x1.ea9ef4d1cf987p-1
++0x1.8eba239546037p-13
++0x1.4e7173f8c3108p-25
++0x1.e87141103b5edp-1
++0x1.fe1db59696078p-1
++0x1.f81a9367f49ecp-1
++-0x1.1c8ca3340ee9ep-2
++0x1.f4be90d6a08a2p-1
++0x1.a57e54c302ffcp-1
++0x1.3f689114ae747p-1
++0x1.ba3652b8cb6e8p-25
++0x1.d83d808a7f332p-1
++0x1.dfd2264b6c472p-1
++-0x1.e800e2c46ef54p-1
++0x1.df8f111ae2866p-1
++-0x1.6d6c5532e2cd9p-21
++-0x1.1e2c81ace6c11p-22
++0x1.e953222af7df2p-1
++0x1.e925616ce5429p-1
++-0x1.b26906bfadf37p-1
++0x1.dbe1f423f0122p-1
++0x1.8610709c83c3ep-5
++-0x1.e659010e4489dp-7
++-0x1.e69494ce3841fp-20
++0x1.d8ff513fd08dfp-1
++-0x1.fe6e319c28462p-1
++-0x1.9d64d47733225p-3
++0x1.c32282721051fp-2
++0x1.eb3df7f6d191dp-1
++0x1.8a44534c5fa47p-1
++-0x1.4f6d93821061bp-2
++-0x1.f52714fc5d094p-1
++0x1.9de7e1e0dc8cbp-1
++0x1.eeed020905613p-1
++0x1.ec28d5dadfc7dp-2
++0x1.aa36c26dcd467p-1
++-0x1.8e87e6677fbfbp-2
++0x1.ff84d1966abbdp-1
++-0x1.f63e406386a93p-1
++-0x1.f6203420a49e8p-1
++-0x1.a48a93694dd80p-1
++-0x1.61a7645eb7ec4p-1
++0x1.e090c1a2c9b9fp-1
++0x1.9b45d32c1533ap-1
++-0x1.b11a761584f00p-1
++0x1.9ad421a6de914p-1
++0x1.79dbd61da7b2fp-3
++-0x1.fc26a4aba22d2p-1
++0x1.64105318b86d4p-1
++-0x1.e9789541ac5d2p-1
++0x1.fd9ec29f78db6p-1
++-0x1.f14366570d3b6p-1
++0x1.4b13d01bf21b3p-1
++-0x1.f4eaf42e7ec78p-1
++-0x1.339060228fa99p-5
++-0x1.e744b298a1822p-1
++0x1.deb6d20e46c2dp-1
++0x1.292d24ec19bafp-3
++-0x1.1e8a967a738a4p-1
++0x1.dc10c61f240a2p-1
++0x1.de2966eee1343p-1
++0x1.e19d91e1c7907p-1
++0x1.79c3b49ea70d1p-1
++0x1.16e6f6035c12cp-2
++0x1.decaf4a1bae55p-1
++0x1.ab70f734c29e0p-1
++-0x1.efe2c7ae66583p-1
++-0x1.8bbb01f526908p-1
++-0x1.aaac637a729e4p-21
++-0x1.d8db236a8dc8dp-9
++0x1.e36122ce4d0a1p-1
++0x1.ea4005dd159f9p-1
++0x1.b6a77767d4c9dp-1
++0x1.e40c047e086a2p-1
++-0x1.5dba61bbcf1dep-1
++0x1.e5bc071b94585p-1
++-0x1.f9215050b4d45p-1
++0x1.fdafc34a31724p-1
++0x1.869e353529f40p-1
++-0x1.e2eda692286a9p-1
++0x1.31642078c9c6dp-2
++0x1.97e501e8fe7cfp-1
++0x1.eb18e737043a5p-1
++-0x1.e18a12334f770p-1
++-0x1.d507b06c3df31p-18
++-0x1.d0ec3013892e4p-3
++-0x1.26c875185533dp-15
++0x1.efbe6148f56fdp-1
++0x1.c16d712b4bb1fp-3
++0x1.8b04c70b3ddcap-1
++-0x1.ab136560e555dp-22
++0x1.f7af22a6b572dp-1
++-0x1.d85926848cf29p-1
++-0x1.ec59c307396f8p-1
++0x1.e83fc488dacd6p-1
++0x1.de8b34bf410c9p-1
++-0x1.0d4466176e9fcp-1
++0x1.29c0d4ecd2366p-2
++-0x1.7c821349cb30fp-23
++-0x1.f21cf62567c8ap-1
++0x1.9475e0bee269cp-1
++-0x1.360155ce19621p-1
++-0x1.ab61b161880c5p-3
++-0x1.687a92d61065ap-16
++0x1.a07a83ec307b4p-3
++-0x1.ced6825d25e04p-1
++-0x1.3fd4120c4bf01p-3
++-0x1.98615085cae70p-1
++-0x1.565f25ad39799p-1
++0x1.ff04d61b0df50p-1
++0x1.3b887244ca6ebp-1
++-0x1.faf3f337442b8p-1
++0x1.c2857627f9c6ap-1
++0x1.414391eae82a7p-2
++0x1.ed4c041a3ead6p-1
++-0x1.7720c11df55fep-3
++-0x1.20dd07160306ap-3
++0x1.eb79153ce9fddp-1
++-0x1.0b7c366b28640p-1
++0x1.0c37b2dba00aep-19
++0x1.df2997df1e98ap-1
++-0x1.db81e304bef8ep-2
++0x1.d061109803210p-1
++-0x1.f29f3377fe46bp-1
++-0x1.9d69119b79677p-17
++-0x1.fe18e3a9ee189p-1
++-0x1.2ba7052c8bd80p-1
++0x1.e241853578931p-1
++-0x1.fb0854c5d75f0p-1
++0x1.ee3cd20ce4f5ap-1
++0x1.ee40d08bb49e3p-1
++-0x1.cc9fa732730b4p-1
++0x1.070692620b71cp-1
++0x1.e0d2859d0d97dp-1
++-0x1.82f763fdb686ep-1
++-0x1.763cb2cf0a32dp-3
++0x1.e43b37d8f0ddfp-1
++0x1.a3880141b2dd3p-3
++0x1.3befe215a78c6p-1
++0x1.9d6604d4efeddp-2
++0x1.b5a3d7eddda00p-1
++0x1.cc7993074c20bp-1
++0x1.aac5e5dc62767p-24
++0x1.bed3226c9cf5ap-2
++-0x1.efd3965c7e5acp-1
++0x1.fe2aa46b77528p-1
++0x1.e098e320da0bap-1
++0x1.67e7248b818b3p-3
++-0x1.6ad6002662fadp-2
++0x1.decaa3bcdaa08p-1
++-0x1.d58d16202023dp-10
++0x1.ff00b5fcb622fp-1
++0x1.32ef66d1351e1p-1
++-0x1.f16585e5f84ebp-1
++0x1.1f8845720550bp-3
++-0x1.597ae70396752p-24
++0x1.29d207dd78ad9p-3
++-0x1.c50354e1919fdp-1
++-0x1.f33b17f4530b4p-1
++-0x1.01ede4cf1745cp-1
++0x1.ca3f36b0aa65cp-1
++0x1.40e9902e7c79ap-3
++-0x1.59f3c5b673712p-1
++0x1.916dc64eee2aap-1
++-0x1.ef8c343a179b1p-1
++-0x1.4a43014a489a2p-18
++0x1.ea9994a3eea40p-1
++0x1.7c24d44e7ad13p-1
++0x1.f81f66a100c06p-1
++-0x1.e7cb21c3e16e5p-1
++-0x1.660cf02b53207p-1
++0x1.9d1775b1ea06fp-2
++-0x1.fb6e3107f4ab7p-1
++0x1.ec9ed646b54a4p-1
++0x1.eb877429ca44ep-1
++0x1.57f90558e0cd2p-1
++0x1.ee6127d9b9cd3p-1
++0x1.eeace5528bcaep-1
++0x1.abfa31533bf17p-1
++0x1.af6d31714c4fap-3
++0x1.1b88e568085eep-3
++0x1.27d0012eda11fp-1
++0x1.e4c3a00a353dcp-1
++-0x1.a4d2513d6da08p-3
++0x1.eac9041cf24d0p-1
++0x1.eba880a52b2a0p-1
++0x1.fc9815cf6cf07p-1
++0x1.e9306397ac8d9p-1
++0x1.b43cd65692d19p-1
++0x1.ffed705f1a4ecp-22
++-0x1.758b46be117efp-23
++0x1.32f4b633ba0e9p-1
++0x1.ebf364bf44defp-1
++0x1.eb2c318fe1fd1p-1
++-0x1.c4f6f0a35fd4cp-1
++0x1.f94de7e900a23p-1
++0x1.e040d6464605fp-1
++-0x1.219fc52102aa7p-1
++-0x1.453271b5e1e0cp-1
++0x1.269653d6653a0p-10
++0x1.a48e700ea9b1fp-1
++-0x1.f41ec1c712c7fp-1
++0x1.c96de70665e99p-2
++0x1.ff20b67f593dcp-1
++0x1.e13e27d7f0352p-1
++0x1.e81bf743c0369p-1
++0x1.c50ba323bc984p-5
++0x1.2109349c356f8p-2
++-0x1.8bdbe0b9e2d2bp-10
++0x1.f668a1d8022d9p-1
++-0x1.3e06e4a0baeedp-1
++0x1.fb63f1e25d668p-1
++-0x1.b8e1e27336860p-1
++-0x1.f2700673bb386p-1
++-0x1.b2daa6e18bec1p-1
++0x1.8e8b67f0920cap-3
++0x1.fdeba0a282ee5p-1
++0x1.ed9061cac7a5fp-1
++0x1.e697822f3ef41p-2
++-0x1.a073961b21017p-3
++0x1.eae16553c8c57p-1
++-0x1.ef11308a723a0p-3
++0x1.4db6f0d5fc8b1p-1
++0x1.9db7a4e909c22p-1
++0x1.d963f3e2377acp-1
++-0x1.f4b2a27475355p-1
++0x1.5ceea7934431fp-1
++0x1.e006175a5233bp-1
++0x1.db398369c7f83p-1
++-0x1.6da6930d66d07p-1
++0x1.6cc7155575699p-2
++0x1.8958a513b1a3dp-16
++0x1.e4d423f8e48d5p-1
++0x1.f61e572c416f1p-1
++-0x1.dce6b232fc21ep-1
++-0x1.f76ac4a2a56ebp-1
++-0x1.effa02c2a5b57p-1
++-0x1.3277074adeefap-2
++-0x1.f820b07829307p-1
++-0x1.9ce743a0e44b1p-22
++0x1.5a60c5b18ae7ep-1
++-0x1.627064608ff5ep-1
++-0x1.f18541418b0c8p-1
++0x1.df5a362b58df6p-1
++0x1.5a1c12189882bp-1
++0x1.042eb250936bep-1
++-0x1.1cb73699e8924p-1
++0x1.bd81501f6c6dbp-1
++0x1.ea461047bbbaap-1
++-0x1.987e70cb208c9p-1
++0x1.ebb7b667c93a9p-1
++-0x1.e64087ec5398bp-1
++-0x1.da4060f493507p-10
++0x1.edf6c4bdb283ap-1
++0x1.e56aa246ff0e4p-2
++-0x1.5ee2870e9e6e3p-1
++0x1.890c70d8e4854p-15
++-0x1.9d713407fd722p-1
++0x1.d81051269ec58p-1
++-0x1.21a6c4b3b5c44p-1
++-0x1.ff1743cc5a35ap-1
++-0x1.bdd804759a629p-1
++0x1.ecabd624ed76bp-1
++0x1.f4fc4755c5257p-20
++0x1.ef9f51187fe83p-1
++-0x1.bcfe530a93051p-3
++-0x1.04437668e59f9p-22
++0x1.f9deb62170ec6p-1
++-0x1.f95ff4e30111cp-1
++0x1.b9bcd47a04014p-1
++0x1.e986346f71ee7p-1
++0x1.e870a1536e60dp-1
++-0x1.f45142b039fd9p-1
++-0x1.f9a361114e127p-1
++0x1.a39e45adb3fcbp-1
++0x1.eedee6a9faf61p-1
++-0x1.2d7dd63289e16p-3
++-0x1.ea1224bded243p-1
++-0x1.4bdd4503c4c63p-1
++0x1.6c88456adc480p-3
++0x1.e2b3a4b24383cp-1
++0x1.e5fc97f64aecbp-1
++-0x1.1b6bb0f6cd48dp-1
++-0x1.b303858a80ca8p-1
++0x1.e7ab923c42554p-1
++0x1.0a9275a4041e2p-1
++-0x1.f8c00391024e6p-1
++0x1.e35757a76e130p-1
++0x1.e79240313e889p-1
++0x1.65b7c5e770a90p-1
++-0x1.c932d35cb0882p-1
++0x1.6bdae68159ee5p-2
++-0x1.a10396bb69be7p-1
++0x1.385d508691b4ap-1
++-0x1.879d741b2c118p-23
++0x1.44ecc2c03843ap-1
++-0x1.ff8f3716b5256p-3
++-0x1.595040318030ep-3
++-0x1.bcfdf5e4c6970p-1
++0x1.0f3c92514126ep-1
++0x1.3dc123067ed3fp-1
++-0x1.ecbe16bf69bfbp-1
++0x1.9ee9220c8f948p-2
++0x1.dda1a2c40b3a6p-1
++0x1.c24c85e28024fp-1
++0x1.28b060d622339p-1
++0x1.ef1b944c9f858p-1
++-0x1.f476a1ba386d0p-1
++0x1.83edf16dfff50p-1
++0x1.e7ee358e79562p-1
++0x1.e31ec6e0b4fc4p-1
++0x1.dd98613b70372p-1
++0x1.da5505c9b5082p-1
++0x1.24f756f5e8490p-22
++0x1.2c5d704de00e2p-3
++0x1.e8faf051d09cbp-1
++-0x1.ff78b2a719f69p-1
++0x1.db133789d06a7p-1
++0x1.66c0e08344febp-1
++0x1.406506bfcfb11p-1
++-0x1.55ac10a3a8641p-3
++0x1.fce4f63c2836bp-11
++0x1.a49c5484fe1ecp-1
++0x1.ec7bc658a8951p-1
++0x1.e84b3736a7b34p-1
++0x1.ac8f6552a58dep-1
++0x1.f42ee4d7dac9dp-1
++0x1.3951052bb8e1fp-1
++0x1.bec8b0e3edbb6p-1
++0x1.33855463baf99p-1
++-0x1.177641b2f5da9p-2
++0x1.df40141a3b57dp-1
++0x1.e92b22c10a9ddp-1
++-0x1.f0bf840efa02bp-1
++0x1.19a5c7f4ac19ap-1
++-0x1.f06581e9738c7p-22
++0x1.fa84d6fc1bfb4p-1
++-0x1.ff5cc72dade88p-1
++0x1.e0942271d057fp-1
++0x1.02338781af33bp-3
++0x1.696c8704c0adep-1
++-0x1.f1687635d3527p-1
++0x1.8fd781a156526p-1
++0x1.fe1874b71dffap-1
++0x1.8651325797215p-3
++0x1.bc3c71925e5b6p-1
++-0x1.1e9543b9189ebp-4
++0x1.e4e8c2f4a4892p-1
++0x1.9cec761d69c12p-1
++0x1.b823a13640780p-1
++0x1.1340e0318b586p-1
++0x1.ecea93cc4e282p-1
++0x1.381af30c8bbacp-3
++0x1.269575fbaa2a4p-1
++-0x1.806dd0823096dp-1
++-0x1.e052374d36a4bp-1
++0x1.fea3254b1eafap-3
++0x1.2d5970ca26f6cp-1
++-0x1.f4dea4866c50bp-1
++0x1.f69344c9b9904p-1
++-0x1.a3903178cc914p-1
++0x1.ef5191f3a5593p-1
++0x1.f5f3548da6996p-1
++-0x1.f643440d6b06cp-1
++-0x1.f002c7269a37ep-1
++-0x1.fa75252a58e2dp-1
++0x1.d9f9e3d739f44p-1
++0x1.634732e2952fap-10
++0x1.f218003f765f8p-1
++0x1.606f8100c1742p-2
++-0x1.e755f3286db4ap-1
++0x1.a51346ad161ffp-1
++-0x1.fb568187a36cdp-1
++-0x1.e9fb506e00816p-1
++0x1.ef4ba09903242p-1
++0x1.decac67825caep-1
++0x1.e87f025e48684p-1
++0x1.e3f8778ca9756p-1
++0x1.def1462172dfbp-1
++0x1.311253501f3f2p-3
++0x1.b47cd28626b01p-1
++0x1.ea01327b06539p-1
++0x1.f29325d22a5b5p-1
++-0x1.63cce0ecc9f3fp-2
++-0x1.cbec261c8745fp-2
++0x1.839f62344ed35p-1
++0x1.db5e820db1f0dp-1
++0x1.eb10463897a41p-1
++-0x1.01a9b60073fd1p-2
++0x1.820c4727f0297p-1
++0x1.defe9157b25b9p-1
++0x1.95acf5bfa2f77p-3
++-0x1.f829a7cd489c0p-1
++-0x1.f78f2515a0c93p-1
++0x1.e40934a3f3e57p-1
++-0x1.fb0a94ad8c18dp-1
++-0x1.8f0b53139648dp-20
++0x1.d801c522cfcf4p-1
++0x1.d91a30bb3e15dp-1
++0x1.e41a80baf531bp-1
++0x1.e96113c21b2e6p-1
++0x1.cbb5955832906p-1
++-0x1.faaf461b00258p-1
++0x1.2c7b264df7e18p-2
++0x1.cdf68750f625fp-1
++-0x1.ab062115542b8p-2
++0x1.cd73a32168810p-2
++-0x1.f3f1411a81959p-1
++0x1.57c7a2ace0a72p-1
++0x1.efb2212f852c5p-1
++0x1.8e0f47ea636f7p-1
++0x1.ea6d312855164p-1
++0x1.31a3e53d9d779p-1
++0x1.bc55404efb12dp-19
++-0x1.b6f9a6276a135p-1
++-0x1.c3e361caeb9f1p-1
++-0x1.e0eca0ecd7cb7p-1
++0x1.f847f61015d15p-1
++0x1.ed36e1f48a48ap-1
++0x1.f41ca43bda5ffp-1
++-0x1.ad50f432557fap-1
++-0x1.114fa24a19444p-2
++0x1.36def65bab425p-1
++0x1.fe05623afcc36p-1
++-0x1.ef66a308f97d2p-1
++0x1.8d4b844dd2993p-1
++-0x1.d6cff1d46ff9bp-9
++-0x1.ee29a33d89217p-1
++-0x1.f132f2992494fp-1
++-0x1.de7153b5aad60p-3
++0x1.d915353edaa25p-1
++0x1.ea64823156f61p-1
++0x1.4d3ba3c4d2e24p-1
++0x1.ba92542786897p-1
++-0x1.fffed63ad096dp-1
++0x1.e97f8083149abp-1
++0x1.b79ba1d3be769p-1
++-0x1.eab325c5fbbe8p-1
++-0x1.c3e3470150bafp-1
++0x1.e3b610f2a9a12p-1
++0x1.091a864ba6574p-3
++-0x1.462ed634d347cp-2
++0x1.ed90006d31696p-1
++-0x1.c62a454b8d40bp-1
++0x1.371a12446cb76p-2
++0x1.eb63b3e34705ep-1
++0x1.edf750cfdec5ap-1
++-0x1.308fe73061dc7p-1
++-0x1.ee05e10877512p-1
++-0x1.d67e0577a6507p-1
++-0x1.ed2eb7554cecap-2
++0x1.dca2a028e0226p-1
++0x1.d30c963d41488p-1
++0x1.7530e7c8620bfp-1
++0x1.d417a562c0d61p-1
++0x1.e20e43f399e37p-1
++0x1.ea15f4adca008p-1
++-0x1.f3b7c47cb6dc6p-1
++-0x1.154f81f240248p-7
++-0x1.151356f0736d8p-1
++0x1.f6ee472b8805fp-1
++0x1.92518330d7f45p-1
++-0x1.dc476211ce07dp-1
++0x1.e848464011e2bp-1
++-0x1.46a8919520b17p-1
++-0x1.77fe90512eacfp-1
++-0x1.9acbd0bea7745p-2
++-0x1.443961a482f0fp-2
++0x1.dc9150d6da395p-1
++0x1.8f0b30b8722ebp-11
++-0x1.ec2db037a82dcp-1
++0x1.e3e7f06de29f4p-1
++-0x1.f321806888b14p-1
++0x1.bcc2d238d4ddbp-25
++-0x1.b5d02551d5671p-10
++0x1.5b65c47382c9ap-3
++-0x1.fcbdd2b050f64p-1
++0x1.ea5c13904e3b2p-1
++0x1.ef36a448b7555p-1
++0x1.dfdfd6c700acfp-1
++0x1.4236c13576e0ep-2
++0x1.8df8a16525f39p-3
++0x1.e0ad97d2cf238p-1
++-0x1.38f0542ca311ap-1
++0x1.d87891d37859cp-1
++0x1.e10e138b446a6p-1
++0x1.0f92764f7b2e4p-1
++0x1.aade166075ea0p-1
++-0x1.902df59995e2fp-15
++0x1.de7c758e0561ep-1
++-0x1.bbcb739c535d8p-3
++0x1.750fa027faf9ep-1
++0x1.af8d62c66fb2cp-1
++0x1.ea9ec240b76fap-1
++0x1.ef92f02323e66p-1
++0x1.410642b877d0fp-1
++0x1.ecec322ab031cp-1
++0x1.88a7042cf26e3p-1
++0x1.d91c147875780p-1
++-0x1.891bb78017f41p-3
++0x1.ecbf764fb7f74p-1
++0x1.8ae814193f661p-1
++-0x1.9ab562e85a368p-1
++0x1.eafad3737c504p-1
++0x1.f172b00025f8dp-1
++0x1.9625e4660a46ep-1
++0x1.ff2847663862cp-23
++-0x1.f876845608312p-1
++0x1.f988f6376ddcep-1
++-0x1.32096643967c8p-24
++0x1.862f469d3b6b5p-1
++0x1.e409002dbe096p-1
++0x1.ebae12a190827p-1
++-0x1.c73c104933177p-3
++-0x1.e67b111d9643ap-1
++0x1.e14005d42553cp-1
++0x1.6bcdd5585b74ep-1
++0x1.d01df07e10013p-1
++-0x1.aa01a6ca96ca1p-1
++0x1.9adaa0b3675d2p-1
++0x1.abf414448c2c7p-1
++0x1.e5c940ebf6cffp-1
++0x1.5cf30257670ddp-1
++-0x1.c572d1625cc9ap-1
++0x1.c46f07973a003p-1
++-0x1.e9edf7eef925cp-1
++0x1.e2db71253b231p-1
++-0x1.f18a81c759b6ep-1
++-0x1.0484943b8972bp-14
++0x1.e8ba541de4c3dp-1
++0x1.e86031182f48ap-1
++0x1.edf485b87d989p-1
++0x1.ed7b63e2ae6e5p-1
++0x1.441ba0eeee084p-1
++-0x1.f157124313805p-7
++-0x1.592b96408f745p-15
++-0x1.aa9f35bb8710cp-3
++0x1.dd79933eb4823p-1
++0x1.8105f3b2d415bp-1
++0x1.e959042778f64p-1
++0x1.eb1923875839bp-1
++0x1.f0f3621f3d303p-1
++-0x1.fb9d116c1740ap-15
++0x1.ee3e232a76cbdp-1
++0x1.a720e17021d30p-1
++0x1.4496d3d77e50dp-3
++0x1.29b2708c3a747p-1
++0x1.49f6619c13dd0p-2
++0x1.01593434a17a8p-2
++0x1.0c56546e3c83ep-2
++-0x1.fd7591cf4e231p-1
++0x1.f28e37cddaa63p-1
++-0x1.21c025a637570p-2
++0x1.e47fc5993f6c7p-1
++0x1.85a2015249f9ap-1
++0x1.ccac70b0bde88p-1
++-0x1.b0c634676faacp-4
++-0x1.f91d34193e0cap-1
++0x1.ea81015237620p-1
++0x1.e0f6a48d7e9c9p-1
++0x1.fae08655a51a3p-1
++0x1.4f28f1201b762p-3
++0x1.e8e030f4ea7e4p-1
++0x1.e1db95f200e1bp-1
++0x1.f425e3cced4c7p-3
++0x1.bdc8679163915p-18
++0x1.febcf6c28536ap-1
++0x1.92f204914b1bap-1
++0x1.ecd8933b172edp-1
++0x1.f0bb0482d6c17p-1
++-0x1.1011a24690b17p-1
++0x1.6597b5c278c94p-1
++0x1.c03a92b120e58p-1
++-0x1.0eed14bd5c463p-1
++0x1.e84d0157c4875p-1
++0x1.e0fa54716960fp-1
++-0x1.e70102ffd26f4p-2
++-0x1.a5029085d091bp-1
++-0x1.ff504589e4c56p-1
++0x1.cd7171df2e295p-3
++-0x1.c2e6249c7296ap-21
++0x1.96c5c059d54afp-1
++-0x1.e6f51087203f2p-9
++-0x1.515e3214390b1p-2
++-0x1.e0a141c4f0b16p-1
++0x1.eb7451be325a0p-1
++0x1.e0d083fcb5089p-1
++-0x1.fee190f2fc2b8p-2
++0x1.fe9b45e910698p-1
++0x1.a1bb4745dadf5p-1
++-0x1.f652e1fdb6a40p-1
++0x1.ddcf1291a5226p-1
++-0x1.43cbc08a959f6p-3
++0x1.dbf877fb563dcp-3
++0x1.ca0a70766ed38p-1
++-0x1.fb8063fd22722p-1
++-0x1.fa4ed780ebffap-1
++0x1.ef75b5fbc2038p-1
++0x1.d8fad2d484f9cp-1
++0x1.eb8ca278a8b79p-1
++0x1.0fde2500275a5p-2
++0x1.e71ef4f74efa5p-1
++0x1.df0c61f2a0f01p-1
++-0x1.bb5c7578b90a7p-1
++-0x1.2e84858cbd9e2p-1
++0x1.096bd4970cd0dp-22
++-0x1.f41217509723dp-1
++-0x1.32d10136b1f12p-1
++0x1.4c6af75e75c32p-1
++0x1.3fe9d75c1f312p-1
++0x1.9ef980d30524ap-1
++0x1.828b0390e301ap-3
++0x1.f62692b289857p-1
++0x1.5cb4743cbb81ep-13
++0x1.ef86868247137p-1
++-0x1.da44b5b4e6c6fp-1
++0x1.dbcd94da0d8b8p-1
++0x1.ec9c878cfb5f0p-1
++-0x1.5f64a17e9500dp-2
++0x1.5c75e768472b4p-2
++-0x1.a787c4bfd3b9dp-1
++-0x1.cca7367cafebcp-1
++-0x1.11bc51c1a6b71p-1
++-0x1.f6df90b887fc3p-1
++0x1.7a9fb439b7a47p-1
++0x1.e33c401410e8dp-1
++0x1.fb4ee1a050156p-1
++0x1.e89fb349c715bp-9
++0x1.9b1db0483a855p-20
++0x1.a913b3a187ee1p-17
++-0x1.ef7701b74636cp-1
++0x1.828184fbbeaa0p-2
++0x1.f4d8e628050abp-1
++0x1.133d81d6ae23cp-3
++0x1.f013f7c35659bp-1
++0x1.efd682aa7da6dp-1
++0x1.f1dc00f5ef3a9p-1
++0x1.96072389d627dp-1
++0x1.ea1691abf195ep-1
++-0x1.cca2538d384bap-5
++0x1.e92007ba8df2ap-1
++-0x1.e141a1fc347e7p-1
++0x1.ed08437e94ea2p-1
++0x1.4445e5b18f130p-1
++0x1.f66bb10cf125cp-1
++0x1.704f576926a3ep-1
++-0x1.1e2b763ff1c1bp-16
++0x1.a257b5f59a887p-1
++0x1.ee0771d865c59p-1
++0x1.debf16684ec06p-1
++0x1.dbdf762ec9500p-1
++0x1.e60b71ca4175bp-1
++0x1.30f9a5a27b4a8p-1
++-0x1.f34ff26c85784p-1
++-0x1.d1b2d7ceae413p-1
++0x1.fdcf071e072d3p-1
++-0x1.a3f255af4ee16p-1
++-0x1.ea5db637383c4p-20
++0x1.e23fd346a1c24p-1
++0x1.398d4660919b3p-1
++-0x1.2341b61c4a232p-6
++0x1.e7ddc42b3a4a8p-1
++-0x1.ff0942c4470a9p-1
++0x1.fa0f0780123aap-1
++-0x1.56f2e58d53fc9p-1
++0x1.37fd262f2ef5ap-1
++0x1.e9de764260ee7p-1
++0x1.3b0da25eac967p-18
++0x1.e4394344a153bp-1
++0x1.ee5d6207f7775p-1
++0x1.e1241012fada1p-1
++0x1.e2e61171c55e6p-1
++-0x1.fa0e3517f47f8p-1
++0x1.e811955ba544ap-1
++0x1.4003e18e34c12p-23
++0x1.f4f195748771bp-1
++-0x1.ef0f34f9f356fp-1
++0x1.391e008ea4619p-3
++-0x1.bb0300053577dp-2
++0x1.612ec16edaa00p-1
++-0x1.53edf5aa8e452p-1
++0x1.267ce71264f70p-1
++-0x1.b0c102e4ded61p-1
++0x1.b7b2671933257p-1
++0x1.ea53f7e49d1fep-1
++-0x1.ea6bc6967c364p-1
++0x1.95d8a522476fap-1
++0x1.f99470c182bf6p-1
++-0x1.ef0df4884c963p-3
++0x1.e6157493cd764p-1
++-0x1.12b6e5b410e7fp-1
++0x1.f67435d502e6dp-1
++-0x1.f4ec823b0125dp-1
++-0x1.f638561f1eccbp-1
++-0x1.b967b16c72982p-21
++-0x1.842b3414ac978p-1
++0x1.ef15c079cf311p-1
++0x1.1d6fb030321d5p-2
++0x1.ea147124ef4abp-1
++0x1.e342f70874ef2p-1
++0x1.e7afc67c34250p-1
++0x1.19db65ff74336p-1
++0x1.df80158c55f1bp-1
++0x1.542a0182909a7p-1
++0x1.057365e07e692p-2
++-0x1.fb0d257f569cdp-1
++-0x1.de3c10fe462f9p-1
++-0x1.ecf8e686be7cep-1
++0x1.55e863f86981dp-1
++-0x1.eb05376e22db1p-1
++-0x1.e83e578b67404p-1
++0x1.1d7bf26bcd34ep-2
++-0x1.ec5af0c2ccbc9p-1
++0x1.ddd3d27a5b4aep-1
++-0x1.eaf4048fe077cp-1
++0x1.00801354b719ap-21
++0x1.3e3a6224576bap-3
++0x1.ed89f7096981cp-1
++-0x1.daf4c6895a475p-2
++-0x1.27b5065556c47p-1
++-0x1.62e816a332a1ep-1
++0x1.c38e7517dd45fp-12
++0x1.915a220e086dfp-1
++0x1.dd5754e2b6f70p-1
++0x1.d84720817bef5p-1
++-0x1.04b965445d524p-1
++-0x1.e882f75e4f37fp-1
++0x1.d8e1258d3e967p-1
++-0x1.f4ad6308371a8p-1
++0x1.0924a114faa3bp-1
++-0x1.ee8ea3f68169fp-1
++-0x1.db6440c16c293p-1
++0x1.a260a5cf0493bp-1
++0x1.ead6a5782d24dp-1
++0x1.e049c5ecc67fcp-1
++-0x1.480570f907c0ap-25
++-0x1.e6a7c54bbfa5ap-1
++0x1.fe6ad355328e4p-1
++0x1.e2d7666a25355p-1
++0x1.eec3b242762cep-1
++0x1.c85773ca329d7p-1
++-0x1.f163118d145f0p-1
++-0x1.f79036a3f4459p-1
++-0x1.204f96baed60dp-3
++0x1.f9dc71e534411p-1
++0x1.67b372a69cd0bp-3
++0x1.eaa614d2c63c8p-1
++0x1.bb01a3a90cd08p-3
++-0x1.0bc192dba3daep-1
++0x1.a7184731a11b4p-1
++-0x1.bfb485fa7f5f4p-16
++-0x1.3688a0346cbf4p-2
++-0x1.f153e2327fc20p-1
++0x1.658b516343b5ap-1
++0x1.edd205a535cf6p-1
++0x1.e2e360aa13064p-1
++-0x1.c24710eb7be22p-3
++0x1.041a67e3e8f28p-1
++-0x1.eb8aa64a05087p-1
++0x1.e30cf7c07f903p-1
++-0x1.b9c3a3088d677p-1
++0x1.713eb1ab5e4c9p-1
++-0x1.6ad805c841fcap-1
++-0x1.f885a3f0e8ba8p-1
++0x1.f46dc196d78d6p-1
++0x1.fc84242c90e1fp-1
++-0x1.03cb72be8da0fp-1
++0x1.876157be34442p-1
++0x1.df7a00f91ede0p-1
++-0x1.7aadc22f765e8p-1
++0x1.c49f353c0eea6p-2
++-0x1.6942e78790b68p-1
++0x1.f09820d53213dp-1
++0x1.f0d7d51f16eafp-1
++0x1.dd09f317d4844p-1
++0x1.c37884de423eep-2
++-0x1.d888e3c9b6736p-2
++-0x1.0f9db3fc68bccp-5
++0x1.b6a6c3eebea0cp-1
++0x1.45f1f16329902p-1
++0x1.ea8ca34a12e96p-1
++0x1.e301b33695f69p-1
++0x1.68a5b3e8dc41fp-1
++-0x1.31ff6639336e0p-1
++0x1.5a9b126abc66ap-1
++0x1.1973b36468d97p-1
++0x1.efe1f56bd3534p-1
++0x1.e5ab36d2f2409p-1
++-0x1.45d6537260c70p-3
++-0x1.56f5410b90154p-15
++-0x1.7d8cb3c9cb5d8p-1
++0x1.c96a64375fd43p-1
++0x1.deb991e8ad26ep-1
++0x1.f2cdb2dedca59p-1
++-0x1.aca5d6e0cebc8p-1
++0x1.eb42940a8517bp-1
++0x1.ae1b403368423p-1
++0x1.ade411f3da571p-1
++0x1.3e1116e4de263p-1
++0x1.8973c30a0bb9cp-1
++-0x1.156c062335d7dp-1
++-0x1.9acbe0ee1240fp-3
++0x1.ec00c6a3e141ep-1
++0x1.dc4b32a234a23p-1
++0x1.e6c20026a69cfp-1
++-0x1.8fa041d702f22p-3
++0x1.c5f6f61e0882cp-1
++0x1.ca32d645bd50ap-1
++-0x1.eebfe7785b810p-1
++0x1.d855e4e635750p-23
++-0x1.c4f8e0df2acbdp-3
++-0x1.7f7681cf8b0a8p-2
++0x1.834e43d519f57p-20
++-0x1.e6c711f8a07a2p-1
++0x1.37e074e9bd23fp-3
++0x1.e07616c72f309p-1
++0x1.eb6786e4bb963p-1
++0x1.19099015cd289p-1
++0x1.e1a391292b6e3p-1
++0x1.e2db651834387p-13
++-0x1.fe98b265f6c23p-1
++0x1.e2bfd7dc71f91p-1
++0x1.ee47140384e38p-1
++-0x1.001567470f803p-2
++0x1.05bdf1d57b74ap-3
++-0x1.9f9bb738e7354p-2
++-0x1.e2b5a72fffc26p-1
++0x1.e33c52a03a341p-1
++0x1.c210e6a7521b4p-1
++-0x1.89280419666a0p-3
++0x1.ef4386066c43ap-1
++0x1.617cf4e80da72p-2
++0x1.ca67862290507p-1
++0x1.d2db6598cfaf0p-1
++0x1.4c52d70f696f4p-3
++0x1.fd31e495b8cd4p-1
++0x1.97d8c7b4c9114p-1
++-0x1.f0fc72689286ep-1
++0x1.93a7216be0c5dp-2
++0x1.d3115794c28e9p-1
++0x1.e285e72ab6c83p-1
++0x1.e318d24b8b39ep-1
++-0x1.eef6d32a0b85fp-1
++0x1.8d1c623935f00p-2
++0x1.69f611e882192p-3
++-0x1.815743a3562efp-1
++-0x1.eb08c0c39511ep-1
++0x1.c59db4bbac95fp-1
++0x1.7d0722deb44afp-1
++-0x1.8315d64e9546ep-1
++0x1.9dd1600231fb9p-1
++0x1.e2e2e02cfc885p-1
++-0x1.10e173bc56bedp-1
++-0x1.fef5368baa990p-1
++-0x1.ffa8a2b9fe667p-2
++0x1.dffc77beb4240p-1
++0x1.eeb121fd09f87p-1
++-0x1.e90be055f4bc5p-1
++-0x1.f41e016289c7cp-1
++0x1.af5152f1a61dap-26
++-0x1.fd48f58baaff1p-1
++-0x1.4b0f8437f1bc3p-1
++0x1.d4cc178e13728p-1
++0x1.ce7265a719e49p-1
++0x1.e9eff57262b39p-1
++-0x1.f13f718045fb6p-1
++0x1.e6bb77d8971e1p-1
++0x1.b551834380757p-1
++0x1.da0f873b6aa41p-1
++0x1.f142b0d6cd227p-1
++0x1.e9ab41fff09b7p-1
++0x1.942ed2f7475d2p-2
++-0x1.bb5fe6c2388bcp-20
++-0x1.a2e262533502fp-4
++0x1.dd9583ec5db42p-1
++0x1.90fad5e8a6031p-1
++-0x1.0373e4dddeb2ap-2
++0x1.fd2901f3c9671p-1
++-0x1.b260a79be9a1bp-6
++-0x1.984e45ef80148p-1
++0x1.5356962ebfc1cp-1
++0x1.571e352fdd0f0p-2
++0x1.f89e41aa2fad5p-1
++-0x1.e6a1f419a0176p-1
++0x1.e2d58615983eap-1
++0x1.ded7b522b64c3p-1
++0x1.db41972b5b7e1p-1
++0x1.1b0912987dcf2p-3
++0x1.e1d26340eb5b3p-1
++0x1.209d16e918bdfp-1
++0x1.9d1bd742b6cd9p-1
++0x1.d8ce209dfe849p-1
++-0x1.d12fc215483dfp-9
++-0x1.a4c0d4697fa72p-1
++0x1.617954103f059p-2
++0x1.3137f5baf9af4p-1
++-0x1.507947ccbeeb1p-1
++0x1.b292e4143ab7fp-1
++0x1.d82640b61d4f4p-1
++-0x1.5fe5b15734ccdp-16
++0x1.f2d0e2931043bp-1
++0x1.2fd917731a612p-22
++0x1.f48e103407199p-2
++0x1.7e2db343d2518p-6
++0x1.49aec36586d2dp-1
++-0x1.06ef250e87d2dp-9
++-0x1.dce7e25ee3f06p-1
++-0x1.f9667561ea716p-1
++0x1.ef305027835abp-1
++0x1.fda044b85c0c4p-1
++0x1.e184b71badf21p-1
++-0x1.8f7ec3e278b93p-3
++0x1.f09ed78d95c96p-1
++0x1.db5114278e29ap-1
++-0x1.a56dd3341013ep-3
++0x1.dc3843f1a56fep-1
++0x1.2038f78b9bcc0p-2
++-0x1.acd041b591f89p-1
++0x1.e739901525d14p-1
++0x1.e6ab002c0fd58p-1
++0x1.ea88c7564fe3cp-1
++0x1.fc9c210385ec5p-1
++0x1.300c178b2707bp-2
++0x1.64adc3a6fd19ap-1
++-0x1.fd26d46627291p-1
++-0x1.50b1823ecd041p-1
++-0x1.0460742bc8cdbp-1
++0x1.ee1d52dfb4db7p-1
++-0x1.f8df26ac867ecp-1
++-0x1.101697bd3de35p-3
++-0x1.f08df75686ba5p-1
++-0x1.ace67097f9affp-2
++0x1.e8d044bdd2df4p-1
++0x1.f567c745b44b1p-1
++-0x1.293da15462edcp-3
++-0x1.ff6a619be98e6p-1
++0x1.870715d5a6b13p-3
++-0x1.0c6132d48b23ap-1
++0x1.bfcac730c5b46p-20
++-0x1.eede64d01dd85p-1
++0x1.4a0014931f1a7p-1
++0x1.c04bc2fc8d9a7p-1
++0x1.2ab9e2f378d0ap-3
++0x1.5fd3677becabcp-2
++-0x1.28cef33a72793p-1
++-0x1.b17535ce5f5e3p-1
++0x1.126fb704975d2p-2
++0x1.f5e136218d473p-1
++0x1.922b42c5e0ed7p-19
++0x1.ace8606018cd4p-1
++0x1.2b74811bfc23dp-2
++-0x1.ef2a370ffe51ep-1
++0x1.f9f6a148adee0p-1
++0x1.f4021476db864p-1
++0x1.95f375fe34bb5p-23
++0x1.eca2876cca9d0p-1
++0x1.d7351318c57d6p-20
++-0x1.c5b4f73fa50c8p-25
++-0x1.c94d46e4a466ap-1
++0x1.901222b3eb03fp-1
++-0x1.f2f094f1075f9p-1
++-0x1.f86a7137c57dcp-1
++-0x1.8e3c37a819136p-3
++0x1.4ec1702690f49p-1
++0x1.7af330368dd58p-11
++0x1.84a1865b3e5f0p-1
++-0x1.e4e0305c7b1bbp-1
++0x1.ff49a7d7f6d62p-3
++0x1.f2bad6b8e3ad9p-1
++0x1.ff22f34c30d58p-1
++0x1.eff9a7f819fecp-1
++0x1.c32c91193429cp-13
++0x1.5d40255ad5479p-2
++-0x1.841801a2f578cp-1
++-0x1.dbd584ff2c565p-1
++0x1.a291c450afde5p-1
++0x1.eae6f79c5a22bp-1
++0x1.e6a5815c8e911p-1
++0x1.effbb6d1ea58dp-1
++-0x1.7b2d0222d18edp-1
++-0x1.629942502fa18p-2
++0x1.4d83c5fd055fap-1
++0x1.878e4270d439cp-1
++0x1.e9d9730db6039p-1
++-0x1.1e06e6cea4258p-2
++0x1.f65ff39e90426p-1
++-0x1.cdb98479835c6p-9
++0x1.d768f6851ecbcp-1
++0x1.f69e2232d6a42p-1
++0x1.ec53932232948p-1
++0x1.f67aa7a0b8826p-1
++-0x1.fabca4ba5ef23p-1
++0x1.ee69c2e52baf8p-1
++0x1.26f0054eb2e0ep-2
++0x1.0713f52f5375ep-2
++-0x1.cbe100e36ed62p-1
++-0x1.40a8260114e62p-1
++0x1.f3063795bb159p-1
++0x1.c716b64d97f72p-1
++0x1.8981a41813d96p-3
++0x1.d7c1209925c7ap-1
++-0x1.ff581104611a1p-1
++0x1.0c85d2b6d6e9dp-1
++-0x1.8e8714dc38c74p-20
++-0x1.b03cb5319aa16p-1
++0x1.d72834d33b477p-1
++-0x1.f01b11376becdp-1
++-0x1.415a16a005c76p-20
++-0x1.fe90e5f9be415p-1
++0x1.dde612d789020p-1
++0x1.d9f3738b76c1fp-1
++0x1.db5327bba31b5p-1
++0x1.adc4400d2246cp-22
++-0x1.ff88333427dbap-1
++0x1.eb26276420df2p-1
++-0x1.b6c7247c84ca1p-2
++0x1.e02a848a05a70p-1
++0x1.043b03cb8172fp-3
++-0x1.33d676f26127ep-3
++-0x1.7608255d04435p-3
++0x1.04f80268e9ce1p-1
++0x1.464bc0a199508p-1
++0x1.29ef60c6d1649p-2
++0x1.ee97e455401a2p-1
++-0x1.fd9ed1b43f715p-1
++0x1.eb715394fd91dp-1
++0x1.d7233283a8bd9p-3
++-0x1.1df410fa478c5p-1
++0x1.d594f6ab26103p-3
++0x1.a08f83fd80dc8p-1
++-0x1.de90b76d413e4p-3
++-0x1.6084126e687f0p-8
++-0x1.ff9375ff924dap-1
++0x1.eaef2277ad27bp-1
++-0x1.567a6656d28acp-1
++0x1.db239524e4064p-1
++0x1.ea15917f3ccbdp-1
++-0x1.aecd11f1ad305p-1
++-0x1.3f3391d575ab0p-1
++0x1.2065b112d45b7p-1
++0x1.eefeb58f716edp-1
++-0x1.752456499480ap-2
++0x1.f628431ac8afbp-1
++-0x1.d4f5807797fcdp-3
++0x1.52b317a0f2bb4p-2
++-0x1.36be46b7fbb08p-2
++0x1.e57282515307ap-1
++0x1.8cb3963d2de1dp-1
++0x1.f86d8777ff85dp-1
++0x1.dbec93d39559cp-1
++0x1.ef15079437d86p-1
++0x1.9912915e0e9d2p-1
++0x1.eddfa64b338bcp-1
++-0x1.05d235555bca1p-1
++-0x1.fb398088adb40p-1
++-0x1.8529e4f0cd31ap-6
++-0x1.daf8854d3e5e7p-1
++0x1.562e8760fd24dp-1
++-0x1.2bb627405320cp-3
++-0x1.dbbe424b49782p-1
++0x1.db7c6724b9b5cp-1
++-0x1.86c5e771c6e89p-1
++0x1.eb6cc05b2299fp-1
++0x1.cbdfe416b513ap-16
++0x1.e80bd7a912478p-1
++0x1.e20654791ee42p-1
++0x1.e7c99604f72c5p-13
++0x1.e384454b782e3p-1
++-0x1.2f821736b5783p-1
++0x1.ec2dc7a3f7b9ap-1
++-0x1.f58cb69431ff8p-1
++0x1.291eb281d5031p-2
++-0x1.22d8d0d689c58p-2
++0x1.edae94523b924p-1
++-0x1.dc31f75dbd8bap-1
++-0x1.f41750df779c1p-1
++0x1.1dbe97dccb13ap-24
++0x1.fb352364b9b84p-1
++-0x1.2f5617c2cdd47p-1
++0x1.69d035f7a7ee7p-8
++0x1.72e2e6f704395p-8
++0x1.f86e40ec67bd7p-1
++-0x1.d74544791ed55p-3
++0x1.ee79c2eaca96bp-1
++-0x1.97f484b97f423p-1
++0x1.ecca71ea821fbp-1
++0x1.cb2254385c652p-1
++-0x1.e83561b46f5e8p-1
++0x1.bd9f3198d30dep-25
++0x1.e9e7b30a7666fp-1
++0x1.b768a1d09af67p-3
++0x1.0345e3f133efep-2
++0x1.b45fb3fc48819p-1
++0x1.426bd7fd10932p-1
++-0x1.57e6c01243fa0p-1
++0x1.1f4821c5d7096p-1
++-0x1.de19b73619e5dp-1
++0x1.53cb05c92ecbfp-1
++0x1.90754146fad63p-1
++0x1.4973979c27e9cp-2
++0x1.ae33e7c0fbf30p-4
++0x1.e032e42a2040ep-1
++-0x1.ea40a3cab079fp-1
++-0x1.6907e6c0916a9p-1
++-0x1.1c59c6555ce1ep-3
++-0x1.12fce6ee5e120p-3
++0x1.747724780a0a7p-1
++-0x1.3c6f734ef61e6p-1
++0x1.dcd584c6d27cbp-1
++-0x1.c27d81c83efabp-1
++0x1.d990c3dac50c1p-20
++0x1.a3c463d5b6e67p-1
++-0x1.0820a1102e865p-1
++-0x1.ab2a1549ea8ebp-3
++0x1.dcde36cbc878bp-1
++-0x1.42374083a3e0fp-4
++0x1.ef0c857a36fa3p-1
++0x1.e9e3a68ecccb7p-1
++0x1.7f05d2127fea2p-1
++0x1.e87935312ca1ap-1
++-0x1.eb7110ff0f66ap-1
++-0x1.c15fb366cfcf9p-1
++0x1.f08de63d6483ep-1
++-0x1.c72931d050543p-6
++0x1.1cb62361bff83p-2
++0x1.22db1186e6583p-10
++0x1.e862d28475fb9p-1
++-0x1.727515872cde2p-25
++0x1.1a80e5cb79b32p-14
++-0x1.c48fc05bc06adp-1
++0x1.ef6a04b724d4ap-1
++-0x1.70ba1780348d9p-1
++0x1.e68fd1d34efdcp-1
++-0x1.edbeb6d147be3p-1
++-0x1.ffb8054bd5bb2p-1
++-0x1.205784cd6e44ap-1
++0x1.b9eea1cf61152p-8
++0x1.ead9f4facbad9p-1
++0x1.41f1177f3aa4dp-3
++0x1.1cb3c7898c6c5p-21
++0x1.3b9562043baf3p-2
++0x1.9a03f093bbf71p-1
++0x1.22d245b843dc6p-1
++0x1.fe6b7655a7c27p-1
++-0x1.f53d46b53474cp-1
++0x1.edc8174da0475p-1
++0x1.453ef06515377p-1
++-0x1.cf39e3a140966p-3
++0x1.b3870738c9a7fp-1
++0x1.c03ff7b9aa3ccp-1
++0x1.d88de462de411p-1
++0x1.907531b1ec30bp-1
++0x1.e807c59e08986p-1
++0x1.d01ee7e80196dp-1
++0x1.eb29729cac7d4p-1
++-0x1.9b6ff25e8b37bp-1
++0x1.06cb55e19f50bp-1
++-0x1.c969c47d61594p-2
++0x1.2f8fd229e5a28p-1
++0x1.ec5d65428be39p-1
++0x1.e3f1f13dd3842p-1
++-0x1.6fdf45f0448e4p-1
++0x1.c693d3e0c3d93p-1
++0x1.ec2b351c3d553p-1
++-0x1.023bb65902175p-2
++-0x1.e41b13bb1ae98p-1
++0x1.ed5233df8f1b0p-1
++0x1.d3745523a5b72p-3
++0x1.b11183467f9f4p-1
++0x1.f96977e343f28p-1
++0x1.647e07d72c3ccp-1
++-0x1.dd7b40d163147p-1
++0x1.a955c3158f95ap-3
++0x1.ddbbe2e244b52p-1
++-0x1.dd9476201ab1ep-1
++-0x1.c173b1455120cp-10
++-0x1.4849770c21219p-1
++-0x1.e9c224c0132f3p-1
++-0x1.9c7115f5fa7edp-23
++-0x1.ededb18a270f5p-1
++-0x1.dc41f5d54e145p-1
++0x1.f260631aa28c5p-1
++0x1.dd80538515b09p-1
++0x1.e45ea178c9b30p-1
++0x1.d98ee1fe8fa72p-1
++0x1.ec3b7502ba31bp-1
++0x1.9202f7b61b23cp-1
++-0x1.e90160c48172dp-1
++0x1.029cb182129c5p-1
++-0x1.ecf921278c665p-1
++0x1.f1df6352de955p-19
++0x1.e820a1d008c40p-1
++0x1.cf1bc071e7b1dp-13
++-0x1.a7f9c47f84b4bp-11
++-0x1.91d2b301a130ep-6
++0x1.eb7e233b26b9cp-1
++0x1.5285126c10af6p-11
++-0x1.413ff2f91c7e0p-1
++-0x1.909622a8afce0p-9
++0x1.91f83092eaa5bp-1
++0x1.e9f0072632510p-1
++-0x1.4291a2d3c6a6ep-1
++-0x1.91a7814a1afe7p-2
++-0x1.f2e5c1ddfca4dp-1
++0x1.4ed7f0ccb3beap-1
++-0x1.56758387f3eb7p-1
++0x1.0817c57f66fd7p-1
++0x1.92ba54b90cb1fp-1
++0x1.8393d0a315e11p-1
++-0x1.ebf5435363845p-1
++-0x1.182971e71f1c4p-25
++0x1.30bad35036ebep-1
++0x1.e6a7c48aae965p-1
++0x1.5c09f0643688cp-1
++0x1.bdb701415b22ap-1
++-0x1.80b045165e5bep-1
++0x1.ec2a609f9c95bp-1
++0x1.fdf1358d71fa7p-1
++0x1.f38ae51ef650dp-1
++0x1.c3b5220ba05abp-2
++0x1.64e7b7d518cdap-16
++0x1.e3172710f85acp-1
++0x1.c3d957db61cd0p-16
++-0x1.76789202c62c6p-10
++0x1.b9314508fdd23p-1
++0x1.fbc7e244da846p-1
++-0x1.feea04702b990p-1
++0x1.c77664b2ebec3p-1
++0x1.eb18f40a3c0a1p-1
++0x1.f3d57719d5a66p-1
++0x1.a1b9e5f02c25fp-1
++0x1.d9db75669d2e1p-1
++0x1.85d832f631a51p-2
++0x1.9485a38e25cb3p-1
++-0x1.1afd8636d88a6p-4
++0x1.05798672f5ea3p-2
++0x1.ffe9232e1641fp-1
++0x1.f578d77058051p-1
++0x1.32f086b72fc47p-3
++-0x1.f80cc6c503e0bp-1
++0x1.f28b64ae14d36p-1
++0x1.db3f10c932ea3p-1
++-0x1.fcdff69481c76p-1
++0x1.b0b1822e2d791p-1
++0x1.e47cf5ea94794p-1
++-0x1.edbb01a598c24p-1
++-0x1.f2d2c4f587093p-1
++0x1.d810f191b7661p-1
++0x1.f93393613674ap-1
++0x1.be82e4ac9bddbp-1
++-0x1.0579e7d148859p-8
++-0x1.c7f3c1fdcabf4p-3
++0x1.efad546ed467cp-1
++0x1.fd6a251b4821ep-1
++0x1.0315f5c097414p-3
++-0x1.7db404e004dd9p-1
++-0x1.fdabb5f507142p-1
++0x1.c64fd560d1b67p-2
++0x1.ca0d01c21706dp-1
++0x1.e45216887ff71p-1
++0x1.df2ec764ef6adp-1
++-0x1.8e65606bed199p-3
++0x1.dbc053fc0855cp-1
++0x1.6b8ba297a525cp-1
++-0x1.00882585a29eep-1
++0x1.d353f591637b8p-1
++-0x1.79f546d33544bp-3
++0x1.efa4e409fde87p-1
++0x1.ee1163afd0a03p-1
++-0x1.fad96389524bfp-1
++0x1.e85bb560bc75dp-1
++-0x1.f069332e76f6dp-1
++-0x1.6fb4348faf5c4p-3
++-0x1.ce9367ceb44dap-9
++-0x1.f0a930040729ap-1
++-0x1.505075bc12d92p-16
++0x1.947d6278f2ca8p-1
++-0x1.f086970443d28p-1
++0x1.d025216b99be2p-5
++0x1.dcfa56e705532p-1
++-0x1.f30504c59eceep-1
++0x1.dd52d7e19870ap-1
++0x1.02ddf0359bf9fp-1
++-0x1.4f4065a22973ap-23
++0x1.f40f75a7770a1p-1
++0x1.59ae8671b31e8p-26
++-0x1.536450991d17cp-2
++-0x1.ae0193af9d6a2p-3
++-0x1.27ba2598fa425p-1
++-0x1.77f897e89fff8p-5
++0x1.eff8918d7a81cp-1
++0x1.e8f05228d4ca1p-1
++-0x1.7c509777a588ep-1
++0x1.2176d0b801649p-3
++-0x1.e69f374a699d8p-1
++-0x1.bed374f104cadp-3
++0x1.f3a922a74a827p-1
++0x1.762275548f202p-1
++-0x1.f566226c407c7p-1
++0x1.4cdae1fead7dbp-1
++-0x1.eb4487592a9adp-1
++0x1.edeeb5688f291p-1
++0x1.e99891b04ddafp-1
++0x1.f86cf3b9e83a7p-1
++0x1.c3f7a686c78b0p-2
++-0x1.6150a09268c74p-1
++-0x1.dcee02e875157p-1
++0x1.eb1bf69818892p-1
++-0x1.e5a480f554f3dp-16
++0x1.84afb5f1ed3adp-1
++-0x1.df31c5eae509fp-3
++0x1.ff99528e27db8p-1
++-0x1.e1a5a6243d05dp-3
++-0x1.85fce11104791p-21
++-0x1.fb51005dfdc02p-1
++0x1.dcb463175cfcep-2
++0x1.82519454bb349p-1
++-0x1.fdcdf349a6f25p-1
++0x1.602547dc6ecefp-24
++0x1.bec560986a04ap-1
++0x1.2011857db1424p-26
++0x1.e1eec570b4a79p-1
++-0x1.e77cb3d6aba48p-1
++-0x1.8836556db32e5p-11
++-0x1.e73505baf1ce0p-1
++-0x1.e9d165420d859p-1
++-0x1.ea73d35821c98p-1
++-0x1.fc7083dcfce44p-1
++0x1.4eaa72b0ad80bp-3
++0x1.ee9b055b272f4p-1
++-0x1.fc77850c869d8p-1
++0x1.df2253bc59523p-23
++0x1.ea0197e40cc09p-1
++-0x1.e12937d9b5de6p-1
++0x1.b78007f752b47p-1
++-0x1.caf0a20a2e374p-3
++0x1.403b25eaecdebp-3
++-0x1.f09981083beb5p-1
++0x1.1dfac77800264p-1
++-0x1.f968b772c835fp-1
++0x1.4183f2511d03ep-1
++0x1.14fe334ed4841p-13
++-0x1.ef68700ccd1ddp-1
++0x1.495424a43a336p-1
++0x1.f9f556f848f73p-1
++0x1.e700764aa6a73p-1
++0x1.c65e964229e7ap-1
++-0x1.e91f7469d5670p-1
++0x1.8d72537de0726p-1
++0x1.d77df54bf42f3p-3
++-0x1.e3f4e3f7cff28p-1
++-0x1.980ec5ab0c67bp-1
++0x1.82b481c2cab01p-1
++0x1.e92fc79dc3af8p-1
++-0x1.84edb030c6673p-1
++0x1.134ed3adb9b89p-1
++-0x1.5b0384147576ap-1
++0x1.ec38f12ad09b0p-1
++-0x1.9d3d5705b61bfp-1
++0x1.e9a5111dca87fp-1
++0x1.5ec077d61d074p-1
++-0x1.8bb177f1b45d0p-1
++0x1.026085634ea4fp-1
++0x1.5dece01fa73aap-1
++-0x1.f282f0325a811p-1
++0x1.4e17a4a822867p-2
++0x1.b710142936fc4p-1
++-0x1.ea74f086de3c2p-1
++-0x1.b5bb322363d88p-1
++0x1.e01382ce9664ap-1
++0x1.ec9d46fe101abp-1
++0x1.e080f6a0dd5a1p-17
++-0x1.dc4d67b50cadcp-1
++0x1.bb0924c1b5c65p-1
++-0x1.e4d98477aac5ep-4
++0x1.ed52a73ea36ddp-1
++0x1.d20927aa97a9bp-3
++0x1.b1865059b9e39p-1
++-0x1.b0caf4d4e58fap-22
++0x1.f1a1076fec8e1p-13
++0x1.6c6f93492c70fp-3
++0x1.adf6648fd1042p-1
++0x1.eff466a400727p-1
++0x1.8e77870756612p-4
++0x1.e4c511850f25dp-1
++0x1.cced71fd52d9ap-1
++0x1.ebb466b23c3bep-2
++0x1.6669639648fa3p-1
++0x1.7302146a6f168p-8
++0x1.350056b6cb901p-2
++-0x1.eede45da2f03ap-2
++0x1.ac0623cd70a73p-1
++0x1.87b2d4dcffaf9p-1
++0x1.edaf06121f8e1p-1
++0x1.e825a4e96f86cp-1
++0x1.168a051460dc0p-1
++0x1.eaa75704957d3p-1
++-0x1.e142463188648p-1
++0x1.d81356fe7e9b0p-1
++0x1.e99b85f839547p-1
++-0x1.f1296188d7fd8p-1
++-0x1.a3b6f7aed0ad8p-1
++0x1.6b0c23fcd3f91p-3
++0x1.dab904f709a95p-1
++-0x1.841256a82781ep-1
++0x1.d26af3ab7517ep-1
++0x1.e325a078e329bp-1
++0x1.8aa5a22125090p-1
++-0x1.b0fb607111e72p-3
++0x1.e45197e7efcdbp-1
++0x1.d9c6b1b971945p-1
++-0x1.5fb6e7f514f55p-16
++0x1.fa1f54af3ad94p-1
++0x1.e8e045abf094fp-1
++-0x1.5b9f05ea1adb3p-3
++0x1.eee721d6726d1p-1
++0x1.f1df37430f58ap-1
++0x1.e58f617f2d384p-1
++0x1.eb68943e2deb4p-1
++0x1.dba9c1307a5c6p-1
++-0x1.edb676b500699p-1
++0x1.cb6e21730fca5p-8
++-0x1.a314d11caa5dfp-1
++-0x1.58d865bce598fp-22
++-0x1.9da4077805769p-1
++0x1.bca24367daca5p-3
++0x1.408035d6251e7p-2
++0x1.8e30509588bc3p-1
++0x1.dac374698d877p-1
++0x1.dc95570330076p-1
++0x1.ed72961c6499fp-1
++0x1.e267d33665809p-1
++-0x1.1fd1b6af697a5p-1
++0x1.b199976061c55p-1
++0x1.640c203fbc506p-1
++0x1.e67287d997f06p-2
++-0x1.e8092359ccf4ap-1
++0x1.479fe3a388580p-3
++-0x1.1c9d850480123p-1
++0x1.f6b3e32b9007ep-1
++0x1.ee40207bb6d7ap-1
++-0x1.3e0fd5ef49ea8p-1
++0x1.48352432fcd1ep-5
++-0x1.488b1538a5682p-2
++0x1.70fc57b129bcfp-18
++-0x1.ee0460d9eea8dp-1
++0x1.262c4237b3aa2p-4
++0x1.24f1f0887a167p-1
++0x1.bc7813a548ecbp-1
++0x1.dd3682e648173p-1
++0x1.1a8247328b1eep-3
++-0x1.461fb55f0c643p-1
++0x1.e89a03c027e50p-1
++-0x1.6445d488fb56fp-1
++-0x1.f30720b9f9272p-1
++0x1.10fef55d9e170p-1
++-0x1.7e6e516a67284p-2
++0x1.803b652c34127p-4
++0x1.23e746d6a07b5p-1
++-0x1.9b0893a2dbf31p-1
++0x1.df6b52d932cacp-1
++0x1.eba142e0d30f9p-1
++0x1.e207a62a59fcfp-1
++-0x1.f59ff5ac905bep-1
++-0x1.2252f1f145275p-1
++0x1.e99bb7a320afdp-1
++0x1.528a81b8c8b43p-25
++0x1.66e7a5c93cffdp-9
++0x1.d8a270540bc22p-1
++-0x1.8d0303f6f1f62p-3
++-0x1.032112989c73fp-1
++0x1.edd9f404d15d9p-1
++-0x1.d8e2928b59a29p-1
++0x1.e9fbd325bdd05p-1
++-0x1.f6c115f45ea83p-1
++0x1.9dbc024e5215bp-1
++0x1.ea052157d8d3dp-1
++0x1.e97b1034a0d7cp-1
++-0x1.3868c3fb4119cp-3
++-0x1.6547c3be6a0acp-3
++-0x1.f0f7210f0ebc5p-1
++0x1.dbd1b3d836677p-1
++-0x1.87ba7548c0c70p-1
++0x1.f32ba685b010ap-2
++-0x1.5707a4571ae80p-19
++-0x1.190106b7f25c8p-3
++0x1.b1b2b37a33650p-6
++0x1.b7da5623c2a54p-1
++0x1.a12f204462a9dp-1
++-0x1.8e33904e6f50ep-3
++0x1.bac7d494af41dp-1
++-0x1.5bd7769cc02b9p-6
++0x1.e2549512a7f87p-1
++0x1.a34fb7f76f669p-1
++-0x1.fc4f82b958521p-3
++0x1.f03885d69275dp-1
++0x1.93c937306bc8dp-1
++0x1.ef66f0124ea6fp-1
++0x1.8683e2fd856ebp-1
++-0x1.00e2e49d1662bp-1
++-0x1.240eb5bacc34ap-15
++0x1.f782b34dadcd6p-1
++0x1.685494fdc570dp-16
++0x1.f6f324645f159p-2
++0x1.f1fc5526b9729p-1
++0x1.941db204468a9p-1
++-0x1.fb8797543c4b1p-1
++-0x1.f19ce1482169bp-1
++-0x1.e83cf6df11013p-1
++0x1.ec0474051022dp-1
++0x1.9b0074ea40e80p-1
++-0x1.b110618fb5339p-1
++0x1.e310d4b197c1dp-1
++0x1.3e4a143f9f023p-1
++-0x1.c3dc834396667p-24
++0x1.72d485fe0970ap-2
++-0x1.4792b4bea367fp-3
++-0x1.fb6f90001c47fp-1
++-0x1.563f503456ca4p-6
++0x1.f49c77ef6eec4p-1
++-0x1.f3f604ec44843p-1
++0x1.e5b073ba13507p-1
++0x1.dfcd37b56a082p-1
++-0x1.ec7c15c1bc9b7p-1
++-0x1.f3e33346bb4dfp-1
++-0x1.70bea3753575bp-1
++0x1.0ad654e7bcdb2p-1
++0x1.d84772ae3d0c8p-1
++0x1.db9382f54f801p-1
++-0x1.3a0d506141a45p-5
++0x1.decef09b22fd6p-1
++0x1.e990941dd115ap-1
++-0x1.4ac55461df70ep-1
++0x1.caba758c29af2p-1
++0x1.e8b807c00d6bcp-1
++0x1.fadb16bea03d0p-1
++0x1.7b8f62c69b8a2p-13
++0x1.db1814c6b7c5cp-1
++0x1.d8a437361ed5ep-1
++0x1.f044936247105p-1
++-0x1.f29923dbc3facp-1
++0x1.ede3135347315p-1
++0x1.ecb6a131593d5p-1
++0x1.69be27f5085c2p-2
++0x1.d87e91b7e07b7p-1
++0x1.3e1573b76d74cp-13
++-0x1.7110638b16bc4p-1
++-0x1.2b60914429455p-2
++-0x1.45e0c3984738ap-3
++0x1.042141ca2ed6cp-18
++0x1.384f45b294648p-1
++0x1.feba34573e769p-1
++-0x1.ea047532c3043p-1
++0x1.fbe731d9f7db8p-1
++0x1.b7b916674f33fp-1
++0x1.fb43d2c826ee8p-1
++0x1.df7c8777dba5ap-1
++0x1.ed5ea12bfef39p-1
++-0x1.638ad761f476ap-1
++0x1.fc4bf5179e5d6p-1
++0x1.e3b6708ecfee8p-1
++0x1.dbce065bbf8a3p-1
++0x1.7ce703c2bf2a6p-1
++-0x1.ea19b32b1c2dfp-1
++-0x1.fa1886281c79bp-1
++0x1.40057632df635p-3
++0x1.be3342c4dacb3p-1
++0x1.e20274fe208a9p-1
++-0x1.e15a87fb65354p-1
++0x1.f9c7e2ecd680bp-13
++0x1.e3c93361c3a97p-1
++0x1.f0aa055bc4ec5p-1
++0x1.1d7f011b0caa7p-1
++0x1.27ef5716d9743p-1
++0x1.0109b001e0b16p-1
++0x1.06fcb4f915884p-1
++0x1.d912e662c11fdp-1
++0x1.f459c0e5d6307p-1
++0x1.33b182a9dd437p-7
++0x1.f050a642bbd28p-1
++0x1.67dd05510a128p-1
++0x1.f508c0df81a84p-1
++0x1.dc24f6d5d88e9p-1
++-0x1.1de410116c6abp-3
++-0x1.ce8021cd33ff0p-20
++-0x1.df8e14d8335ccp-1
++-0x1.d944534af1d02p-1
++-0x1.7a7641865ee08p-1
++0x1.0a79566e358dcp-2
++0x1.e1ddb24870183p-1
++0x1.0be5106302396p-1
++0x1.e84a706f6d265p-1
++-0x1.fb54f05a586f3p-1
++0x1.d7f7810bbad7cp-1
++-0x1.e911418959876p-1
++-0x1.eef2e7388b0b8p-1
++-0x1.096cd55dea973p-2
++0x1.e3edc46730656p-1
++0x1.1f999553c9965p-1
++0x1.53bff03662b79p-1
++0x1.cc4591ffd8c8fp-1
++0x1.32edf494b513fp-1
++0x1.f92963d71b0a5p-1
++0x1.ca73a41b238a2p-1
++0x1.a08fc5e1724bfp-1
++0x1.3e603689d203ap-1
++-0x1.995221a7cd650p-1
++0x1.dee8b256137cdp-1
++-0x1.053fb553b89f8p-1
++-0x1.496161b184764p-1
++0x1.eb38128f82439p-1
++-0x1.f613a094bcd5bp-1
++0x1.d97577265ac94p-1
++0x1.b2613742a87f2p-1
++-0x1.9ae634697f924p-2
++-0x1.fc2075806621dp-1
++0x1.e0a975f696bc8p-2
++0x1.f6f6b7b5834b8p-1
++-0x1.fe1f228d0b462p-1
++0x1.f70a91841af44p-1
++0x1.e2f9c07852f70p-1
++0x1.7273722e70f48p-2
++0x1.db9c019d4ecbbp-11
++-0x1.59ab151c1482cp-1
++-0x1.c2a3b1d7f7890p-1
++0x1.e700830d53942p-1
++0x1.6324a18a48715p-1
++-0x1.f8d06493cf734p-1
++0x1.f80b9422bce4ap-6
++-0x1.23b475322f69dp-9
++0x1.25489233b69fep-3
++0x1.a305e63ca5b92p-1
++-0x1.ff6614d7db93dp-1
++0x1.52b3468ba247fp-19
++0x1.f631f6454296ap-1
++-0x1.0ccec227b1aa8p-1
++0x1.1c0a50f58ee7ep-1
++0x1.eb1881275a5fap-1
++0x1.e5a3c6b686c17p-1
++-0x1.5abd34f01cc55p-25
++# acos multiple precision fallback.
++# Implemented in __cos32 in sysdeps/ieee754/dbl-64/sincos32.c
++## name: slow
++0x1.91744378d312fp-25
++0x1.e31933dfcae5ep-6
++0x1.560a94c69898dp-28
++0x1.4ede34c4c5b9cp-39
++-0x1.b5caf13967673p-28
++-0x1.d242039676722p-32
+diff -urN glibc-2.17-c758a686/benchtests/asinh-inputs glibc-2.17-c758a686/benchtests/asinh-inputs
+--- glibc-2.17-c758a686/benchtests/asinh-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/asinh-inputs	2015-06-20 21:22:16.295458166 -0400
+@@ -0,0 +1,303 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.408fb643484cep-11
++0x1.f0763423f1d52p-23
++-0x1.681573418e494p4
++-0x1.87cc25833f74bp16
++-0x1.ad3df5eb7db54p24
++0x1.90f147b3d0164p829
++-0x1.60b1066c6712ep71
++-0x1.5997c27aac9ccp332
++-0x1.2cb3142c669a0p15
++-0x1.ec882168157e6p191
++0x1.43a1d0e6eae29p109
++-0x1.2b43c388e1857p672
++0x1.f11c07e219bafp7
++0x1.f5efb379e3b3fp952
++-0x1.405cf322b684cp-13
++-0x1.fa64c4090d337p43
++0x1.a98724f016a93p-13
++-0x1.5743f3604a7fbp10
++0x1.042971d37879bp-17
++0x1.d4cda5814c00fp-2
++0x1.ec1e878f29cf8p97
++-0x1.6a4cd37896c5fp-24
++0x1.da85d34b19160p-10
++0x1.c068c277d171fp-17
++-0x1.b3e2d1ead4160p-1
++-0x1.ac8a62deb27c3p521
++-0x1.e28e32ce20a25p-1
++-0x1.e70635022c5fdp315
++0x1.984146d8a6c69p20
++-0x1.67cf155405aadp747
++-0x1.a852444a7de0ep-23
++0x1.92e4800542f83p108
++-0x1.564ba0e9ad540p-7
++0x1.c36c11c290063p20
++0x1.4723d5459434cp-26
++-0x1.43c1535cd024bp-11
++0x1.6d46e7252da2fp388
++0x1.756f2685e9ca9p-26
++-0x1.72268726f4141p22
++0x1.558480e0da8bdp15
++0x1.ef0970332ed6fp-3
++0x1.2015764e98ea6p481
++-0x1.3a0f66a229b60p871
++-0x1.c833f28187420p-25
++-0x1.a0ea74513cffbp778
++-0x1.d2dde734625d1p13
++-0x1.996507c01ea97p25
++0x1.d36f165b63b8fp880
++0x1.445234d59e32bp-2
++0x1.cd74423b4c4aep15
++-0x1.c0b6631621425p-1
++0x1.a2e0f00779702p-25
++-0x1.fcf5c0266c2f2p-22
++-0x1.af38a56120728p-21
++-0x1.9ec217ea497dap1
++0x1.57a000ceee049p800
++0x1.6c1b6312efacfp783
++0x1.afb5c0c4f933ap6
++-0x1.f9267499e3327p16
++-0x1.9b5ba5b496ae5p10
++0x1.3975f02686229p10
++0x1.36b913a68fe70p901
++0x1.8946b691ecf5ap10
++-0x1.efbb62a588bccp24
++0x1.f3de8628048d9p-8
++0x1.8ec222d562aa9p25
++-0x1.ac03e6a0d863cp22
++-0x1.6d9d94c1e0b6fp23
++0x1.9807337060f87p-10
++0x1.0f8045a313158p26
++0x1.fe8cd64528951p-16
++-0x1.51c184460cfafp-26
++-0x1.74b0f442763c7p20
++-0x1.d30da53c93e10p18
++0x1.749735f182597p15
++0x1.253da08c9c318p144
++-0x1.2714417156ae3p693
++-0x1.189320570f30bp26
++-0x1.a2e120ac12626p756
++0x1.ce724582eabcfp-24
++0x1.30dcf0414c561p292
++-0x1.1a1790d8a72d1p452
++0x1.3242254b631b3p-26
++-0x1.b5890305f1b78p11
++0x1.019a86d2e2300p18
++0x1.0e9cc39a3bff8p-14
++0x1.bc8ff7e59e82ep18
++-0x1.235a45afa3842p25
++0x1.0b2c87979b28cp23
++0x1.c717951ecf869p-9
++0x1.daff104bb08a5p25
++-0x1.b14b119b47d4ep5
++0x1.6e8a94f758a02p802
++0x1.7788055510c4dp23
++0x1.6120d7e4e5d9ep498
++0x1.1154e15c2c284p-24
++0x1.eb28429726661p423
++-0x1.b9faa23669003p9
++-0x1.a615746664b00p339
++-0x1.835384e92d59cp56
++0x1.1fb4b0fe36aacp-3
++-0x1.e440c3183f046p-19
++-0x1.1e714012cae50p22
++-0x1.1821b0014d9cep-16
++-0x1.5de4c1e0a1bfep-24
++-0x1.c1e5c78840e91p25
++0x1.f0b1d4cd82236p18
++-0x1.450ff3ad26e5bp984
++0x1.23438314fb10bp0
++-0x1.82be43e413126p14
++-0x1.5c70206fd22f7p628
++0x1.7e213160ec541p-15
++0x1.5487358228cedp-14
++0x1.4a163440f7c98p4
++0x1.ad443265c6b4ap845
++-0x1.732c509382338p-2
++0x1.929ba224e2240p-17
++0x1.a026b0485c0e8p12
++-0x1.fa4e77f1b2343p-12
++-0x1.3a2ac1c73ae50p5
++0x1.0c4a80d41a2f7p-20
++-0x1.1c57b37023dcep150
++-0x1.2c1b509030e5dp26
++-0x1.c7cdd089827cdp-26
++0x1.3d88b121650aap8
++-0x1.1583f2a9d2d5dp618
++0x1.295d65809666fp111
++-0x1.3dc8c1a73f146p-3
++-0x1.4dc715a6ae290p999
++-0x1.3808360307701p464
++-0x1.adf4158880f7bp2
++-0x1.3913104f0eea6p-16
++0x1.8c91558dbd886p-2
++-0x1.d67f73ef2736ap11
++0x1.218c0592aa7fcp95
++0x1.4c1e32e79005dp7
++0x1.395461c5f96a6p5
++-0x1.a311a7fbb5afap-12
++0x1.f07b95fd415ccp9
++-0x1.08745233a4ce8p-13
++0x1.38f122e7f7be0p220
++0x1.8c9c967e8e99ap-5
++-0x1.3353e4fc6b002p987
++0x1.945a20aa092e2p4
++0x1.a7a935f93958ap22
++-0x1.946865aa1c43cp-20
++0x1.001d955d8a436p344
++-0x1.5146c4a1225eep-22
++0x1.ffab14f637eaap733
++-0x1.3d50819d9de92p-8
++0x1.84a7b4b80f227p4
++0x1.73af93193478dp-6
++0x1.3ac9b75c613bdp160
++0x1.dafd9764a705fp13
++0x1.91bc310a7648ep243
++-0x1.531fa4a4bac3ap713
++0x1.95c32605e6c59p20
++-0x1.012141d71b636p-2
++-0x1.eb4540a49b927p20
++0x1.9c4716594b306p-24
++-0x1.242df1aa8bf7ep642
++-0x1.2d1fc7cf19d2ap-27
++0x1.161fd6fd320d5p745
++-0x1.3aaa34f975620p811
++0x1.9e11325b1c3c4p22
++-0x1.a838b07a6641ap5
++0x1.8b1a0407ae636p7
++-0x1.eb717004808e1p469
++-0x1.d166757807df4p-6
++0x1.2a57014d8c24bp317
++-0x1.5ea093bc15910p468
++-0x1.2545b7ec8b35fp-3
++-0x1.e47ca00d1f14ep929
++0x1.af09542db1b29p-18
++-0x1.8d4bc4f005536p6
++-0x1.8d564435d4d3fp-9
++0x1.993a6363227e2p12
++0x1.bec162f84a16cp13
++0x1.f0a22293c4ecbp852
++0x1.9eb0b40303dcap843
++-0x1.0cdae1dc93ed0p22
++0x1.21efa25110e19p12
++-0x1.cf1531a43c397p144
++-0x1.a043f6a911bdep-16
++0x1.816c4063e718ap-15
++0x1.e23b95950e47dp-21
++0x1.a0830483382afp2
++-0x1.52e49239a95d4p957
++0x1.f73a3049f9d76p16
++-0x1.1304063a4fbe5p316
++0x1.f5b95104bb64dp320
++0x1.661d765a50087p13
++0x1.7bb5671e2bfcap719
++0x1.3e14e736580b3p-20
++-0x1.11340035e5609p-25
++0x1.c4d527df0d553p762
++-0x1.731bc7cf3026ap7
++-0x1.079c1776f403fp965
++0x1.e6879000598aep-28
++-0x1.d3bee1e831937p25
++0x1.c3b5f0096df0dp24
++0x1.667d70b10ce7ep-6
++0x1.c780d2406b7d1p-26
++-0x1.df8fd3fe95d12p27
++0x1.89494217ed887p204
++-0x1.ea94d70c825d3p764
++-0x1.04366739a80cbp11
++0x1.75f1269063e4dp5
++0x1.0a46e3262c2b8p20
++-0x1.92c337d25b414p-4
++0x1.5c2cb3414299cp154
++0x1.07f7c34023735p881
++0x1.c64b8297569c4p207
++0x1.13f4d3bbd6417p8
++0x1.bde9c42ffd9ecp-15
++0x1.9e07054aa7309p743
++-0x1.dd8c11c0073a4p-16
++-0x1.e04d9283ac8d4p20
++-0x1.c0f2e29b30840p10
++0x1.55a4c648ebcc2p378
++-0x1.7b0c92c6d8687p658
++-0x1.ed8bb5ef46109p24
++0x1.5cc2904baa4d2p-18
++-0x1.b688c6944fa1dp-3
++-0x1.2330768204f78p754
++0x1.650441a7059bdp554
++-0x1.0d1c66b57d36bp493
++-0x1.54e35714807acp368
++-0x1.6165d7bebf894p776
++0x1.7e0ba7c987b9ep7
++0x1.d139574e3913ep168
++-0x1.40cc4145ea64ep19
++0x1.0db7e5339af44p-8
++-0x1.87410240fe22cp-9
++-0x1.d0f46605d4a27p18
++0x1.d1e8b19cca04dp-19
++0x1.979981827668ap-21
++0x1.2576745f4cca6p22
++-0x1.1f02e2c0c288dp14
++-0x1.77bab17202acap-13
++0x1.25c5071d2dc6ep8
++-0x1.306185b351fdap26
++-0x1.ad6e853661ee0p587
++0x1.f389b34d6b10fp-13
++0x1.08fa931bd21f5p10
++-0x1.b65bf00b921e8p-24
++-0x1.cbb5f173385aep82
++0x1.a32cd47340669p2
++-0x1.a83fd05f605e6p-25
++0x1.8184a3fcc1ac3p942
++0x1.61c9644526617p809
++0x1.b12c01289b0c4p15
++-0x1.16a4a50f1192bp-17
++-0x1.5658b26bd2888p-9
++-0x1.8c5563528e33bp-14
++-0x1.fd7e32bd8a9adp-23
++-0x1.1106a6a425747p-18
++0x1.98109155dd7bfp21
++0x1.dbd635362ec6bp6
++0x1.4a1600b2e95dbp880
++-0x1.2fd6819d3d81cp361
++-0x1.28f5b629029b5p12
++0x1.64c6a3d5a0867p304
++0x1.97ae606371057p22
++-0x1.d61a76409f8f9p-25
++0x1.a4c67223582ffp-27
++0x1.b569919b79b6fp214
++0x1.1bf0416ef51a4p-28
++-0x1.1b9502079e873p-25
++-0x1.a94006dd19303p355
++-0x1.78bd67abffa91p20
++0x1.96d320a0153bap383
++0x1.f82770adf361dp19
++0x1.ee0725a2dbe84p-28
++0x1.93d4c19692fbfp80
++0x1.d69c251aa0003p-3
++-0x1.36c310f2a5894p-26
++-0x1.7bbce527b5784p19
++0x1.5a90f2032fb5ap-14
++-0x1.194fe079c05eep1002
++0x1.2e9a406645b9bp609
++-0x1.c566e4a419660p-14
++0x1.f917868895288p872
++0x1.a966a17972ca9p601
++-0x1.6d5eb4970b882p-20
++0x1.c1a0d0ee96f75p27
++0x1.958fd1185d839p-24
++-0x1.c738b5fffeeb2p4
++0x1.91bf33cdb6804p710
++-0x1.66e0a7e4034dbp224
++-0x1.dd6e42f5992c4p667
++-0x1.6e17000848200p951
++-0x1.f625958e05264p-1
++-0x1.63e025fbcdcacp442
++0x1.c5fb927d2cb09p8
++-0x1.d7e514672b2ddp987
++0x1.0eec25d2a59ccp27
++0x1.342f35eabf622p707
++-0x1.6ffad140301c8p609
++-0x1.5b10b0ca4ea9dp-21
+diff -urN glibc-2.17-c758a686/benchtests/asin-inputs glibc-2.17-c758a686/benchtests/asin-inputs
+--- glibc-2.17-c758a686/benchtests/asin-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/asin-inputs	2015-06-20 21:22:16.296458135 -0400
+@@ -0,0 +1,2511 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.350fc6069df8ap-1
++-0x1.eee2112c4876bp-1
++-0x1.236b62ec50852p-1
++0x1.edc5c63489e51p-1
++-0x1.fd62800520adfp-1
++0x1.d475f0f7403afp-1
++0x1.e90832724b53cp-1
++0x1.f609c0391a573p-14
++-0x1.feea04702b990p-1
++0x1.e8d6535b0d1c2p-1
++-0x1.9c7115f5fa7edp-23
++0x1.08d826c7ee854p-1
++0x1.e8e045abf094fp-1
++-0x1.5278029b07e33p-3
++-0x1.ea9383079d41fp-1
++-0x1.f4e3046089560p-1
++-0x1.fb398088adb40p-1
++-0x1.3e3c739c48dc4p-1
++0x1.7817337fddb7bp-3
++0x1.7dd391d9fc392p-3
++0x1.41afe6440736cp-1
++0x1.bfb881b8085a3p-1
++-0x1.e6707556b55cdp-1
++0x1.db3e67625fe65p-1
++-0x1.1bbd53433ed31p-1
++0x1.6188f44707072p-1
++-0x1.75a356a8a9292p-5
++-0x1.ddb0166dd02a0p-1
++0x1.e50b5048cb701p-1
++-0x1.f8ad822c7b0e3p-1
++0x1.9800b2fed7f04p-1
++0x1.b1dc245081b6cp-1
++-0x1.f72481a2b0f3ap-1
++0x1.597d37e0d6f70p-21
++0x1.ef40e79b3e65ap-1
++-0x1.5ba123fb3ff91p-1
++0x1.45bfc165da8f7p-1
++0x1.ccac70b0bde88p-1
++-0x1.f41a414f7827cp-1
++0x1.9b875417727f6p-1
++-0x1.c62a454b8d40bp-1
++-0x1.e0a141c4f0b16p-1
++0x1.4264601195208p-2
++-0x1.46119179eb783p-1
++-0x1.dfc3024659454p-1
++-0x1.e14ee796afcc8p-1
++-0x1.e99e96ab82107p-1
++0x1.e234b67ec84f9p-1
++0x1.d53303c005425p-16
++0x1.ed5b0764a14a2p-1
++0x1.b5e0c3ea9c8e9p-1
++-0x1.db7d6214c24c6p-1
++0x1.85d832f631a51p-2
++-0x1.0be2d5dd39df0p-2
++-0x1.9ba4068536d4ep-1
++0x1.e3b6708ecfee8p-1
++0x1.f81a9367f49ecp-1
++-0x1.e4347223f7a7bp-1
++0x1.a8d8b60a820e6p-2
++-0x1.ec157180be1bdp-1
++-0x1.eb95b087e8c43p-1
++-0x1.6bdd166779c0bp-1
++0x1.8bb3345d66b47p-1
++-0x1.e02f643898ecap-1
++-0x1.ab494400a4aabp-1
++-0x1.01f7d442b79e4p-3
++0x1.ea5ab67fbbf14p-1
++0x1.f603237a71369p-3
++0x1.f4a57127c7a0cp-1
++0x1.69a0a717bd007p-2
++-0x1.64fb05d3406f4p-1
++-0x1.a6a73323151a3p-1
++-0x1.22fcf3cc1a298p-1
++-0x1.d166868f2b02fp-3
++0x1.350857bbe150fp-3
++0x1.ea03400cda450p-1
++0x1.934551bfdd4f7p-1
++0x1.a1bf13ff7e529p-1
++0x1.40e3e60b110dcp-1
++0x1.ebf2d1787c1b0p-1
++0x1.bf44e6858ccc2p-1
++0x1.efb2212f852c5p-1
++0x1.e4bcf61e9db8ep-1
++-0x1.f67e4278236dbp-1
++0x1.72e2e6f704395p-8
++0x1.eb18e737043a5p-1
++0x1.c11e3263f847dp-19
++0x1.6c8dc764c7ce3p-1
++0x1.3a30f3a82e677p-2
++0x1.5d3554f6157efp-3
++0x1.d7e135698a916p-16
++-0x1.9a0b900abb552p-1
++-0x1.db02f20dbc26bp-13
++0x1.dbf69357aebd4p-1
++0x1.1c15c1b6076dbp-1
++-0x1.98e8e522e4a82p-23
++-0x1.60da4694b88e1p-1
++-0x1.e82085e53dbf0p-1
++-0x1.0cce4159c974dp-1
++-0x1.edebc49f4f3bcp-1
++-0x1.d5d0b54aec8f3p-3
++-0x1.b6c7247c84ca1p-2
++0x1.566d76162c4a2p-1
++0x1.1f8126af6a5eep-1
++-0x1.4042c01dfeb13p-1
++0x1.3745936ce6406p-2
++0x1.e845447d64568p-1
++0x1.e9e5d6a4f999ep-1
++-0x1.881fb480c1717p-2
++-0x1.632ec650a0086p-1
++0x1.ea79105af3018p-1
++-0x1.e87f8637d44ffp-1
++0x1.2038f78b9bcc0p-2
++0x1.888731b818bb9p-1
++0x1.247cb5abaf830p-1
++0x1.71d2a5d08bb38p-3
++-0x1.30f5d4f0d5da3p-1
++0x1.e8eee13ebc573p-1
++0x1.35a443a6ef606p-22
++0x1.1f4110dbc1d7cp-1
++0x1.ab85b5da29994p-1
++-0x1.080f952236c35p-1
++-0x1.2b5b02e6cc1b2p-3
++0x1.ac830678d8c8ep-4
++0x1.0ba5029d5c201p-1
++-0x1.2b3e149bb0426p-2
++0x1.eaa744fd96fbap-1
++-0x1.ebf5435363845p-1
++-0x1.f47ea66f3af8ap-19
++0x1.e9c7d49d082bfp-1
++0x1.ea64823156f61p-1
++0x1.ea9222fcef492p-1
++-0x1.38ca90ff41214p-3
++0x1.98b000eb73a71p-1
++-0x1.3fb91174bf8cep-1
++0x1.6831750c7d576p-8
++-0x1.e6c711f8a07a2p-1
++-0x1.e10a8025fd5c2p-1
++0x1.df7c8777dba5ap-1
++-0x1.6c92c2bf14b20p-11
++0x1.c2b9937c51413p-10
++0x1.ed9a717edd7eap-1
++0x1.26cb23fb114cep-3
++0x1.a1dd30e8d133ap-1
++-0x1.596e3118407aap-1
++-0x1.815f557e4dd72p-1
++0x1.91d3b66fca3a2p-1
++0x1.aee2069bb58c2p-1
++0x1.410da160d3759p-6
++-0x1.efd3965c7e5acp-1
++0x1.ebcc105c3c99dp-1
++0x1.f9c7e2ecd680bp-13
++-0x1.0d0876f871020p-1
++-0x1.1cb73699e8924p-1
++-0x1.f33b17f4530b4p-1
++-0x1.cd90d53a85604p-24
++-0x1.e7b7065c2a56bp-1
++0x1.4325b7a1b9323p-2
++-0x1.3007019386da4p-5
++-0x1.2afe01c77967ap-13
++-0x1.dd2f071cce027p-1
++0x1.79dbd61da7b2fp-3
++0x1.90a0030825b71p-1
++-0x1.3b898257384cap-1
++-0x1.5c13731da33bap-2
++-0x1.df2c8655fc70dp-1
++0x1.1dbe97dccb13ap-24
++-0x1.fad96389524bfp-1
++0x1.ddccc6b661857p-2
++-0x1.fb6fb5159af3ep-1
++0x1.d94283b31661cp-1
++-0x1.a08b373392dc9p-1
++0x1.bb7ec42dcb619p-2
++-0x1.f450159e992b8p-1
++0x1.6959f4fae20f8p-24
++0x1.36f464d433610p-1
++-0x1.c2cc227b47f2bp-1
++-0x1.3eb9f3e9ab4fep-1
++0x1.655d872a08e7bp-1
++0x1.426bd7fd10932p-1
++-0x1.bd54d6b8bf754p-25
++-0x1.ca48c150acb42p-1
++0x1.fba5275cb7d91p-1
++-0x1.de01b625f1851p-3
++0x1.ed715043085c5p-1
++-0x1.e4bed6f91c84bp-1
++-0x1.0c6132d48b23ap-1
++-0x1.8740844edfccfp-1
++-0x1.f5ea24dfceaccp-1
++-0x1.4e1ea0cb718b9p-10
++-0x1.e2e3f55bb23a1p-1
++-0x1.ef8592238558ap-1
++0x1.ba09c237c2a98p-1
++-0x1.1c02e1ae8e614p-3
++-0x1.e3480667a3c1dp-1
++0x1.e098e320da0bap-1
++-0x1.020e63d1fb6b3p-10
++0x1.156314d8b8b9ep-1
++-0x1.a6d562a0b9b68p-1
++-0x1.a556923b876e4p-1
++-0x1.005624a6a1606p-2
++-0x1.4515b4c2b21dap-1
++-0x1.00882585a29eep-1
++-0x1.4e97477367b64p-1
++0x1.e56aa246ff0e4p-2
++0x1.f69774c91b3a3p-1
++-0x1.edbeb6d147be3p-1
++-0x1.d044d435326e6p-1
++0x1.9dd6d688e8b6ap-1
++0x1.8832042b08d37p-1
++-0x1.e755f3286db4ap-1
++-0x1.7741b1eae9cc5p-1
++-0x1.ec4f82e92c41cp-1
++0x1.c470754b52d70p-3
++-0x1.cdf6e43174ac0p-3
++0x1.b54d76dc019edp-1
++0x1.de1511c382622p-1
++-0x1.1b6bb0f6cd48dp-1
++0x1.f8f3a7b3d26dbp-10
++-0x1.e8a697e00810dp-1
++0x1.029cb182129c5p-1
++-0x1.82fb23737c09ap-1
++-0x1.ba3f8283bda3cp-1
++0x1.32ef66d1351e1p-1
++-0x1.ff0942c4470a9p-1
++0x1.e861824f0b0c5p-1
++0x1.0ad654e7bcdb2p-1
++0x1.94bf67e731b1dp-21
++-0x1.ce92262e12415p-3
++-0x1.b11a761584f00p-1
++-0x1.ee0375698a186p-1
++0x1.72968114620fbp-3
++0x1.38a8e30dd439dp-2
++0x1.ef7a104666151p-1
++0x1.1b8030b9ef132p-1
++0x1.e52ab2d0668d7p-1
++-0x1.00e2e49d1662bp-1
++0x1.7aa0818bb671bp-23
++-0x1.ecf921278c665p-1
++0x1.e53b304fb4d06p-3
++0x1.3748859f74cebp-1
++-0x1.e96cd6cb3a5dap-1
++-0x1.eadbe1b00f3bap-1
++0x1.34b8b20a231ebp-1
++-0x1.a133128a2cac6p-1
++0x1.f0ffe198f98f8p-3
++-0x1.a978c66c2b77ep-21
++0x1.e0afd4eddd684p-1
++-0x1.eb3b238d0737ap-1
++-0x1.e514d20443604p-1
++-0x1.9d64d47733225p-3
++-0x1.e589d06cb88d4p-1
++-0x1.360155ce19621p-1
++0x1.db3d40b252ac3p-1
++0x1.1fbe750678f55p-1
++0x1.033e6517daa6fp-5
++-0x1.ed55067dcc2e0p-2
++0x1.df2253bc59523p-23
++-0x1.879d741b2c118p-23
++0x1.b47fc608b2e66p-1
++0x1.d74ca166c7f3bp-1
++0x1.f5f1256f888b1p-1
++-0x1.e06af0ec49382p-14
++-0x1.e97461cc47dabp-1
++-0x1.e6fe5447590afp-1
++-0x1.e86c3331f93a8p-1
++-0x1.aacae317ef936p-1
++0x1.b41644690944cp-1
++-0x1.8209c34d990bap-1
++0x1.712d01d18f1acp-1
++0x1.ed0c5662218c3p-1
++0x1.90d8e69b9ce07p-1
++-0x1.a7b9e784d9434p-16
++0x1.f91c375372b6fp-1
++-0x1.bf83e21f654b3p-1
++-0x1.e38cc36ff8c63p-1
++-0x1.842b3414ac978p-1
++0x1.161e221d66041p-2
++-0x1.e9a1529dfa710p-1
++0x1.164f53c3dbd36p-1
++-0x1.e2a192784167ap-1
++0x1.d2f31136d5558p-1
++-0x1.0cad003c37274p-22
++-0x1.e402a7e83b556p-1
++0x1.d0ee108472a16p-1
++-0x1.0eb530c4ce24ap-13
++-0x1.ef29f4bd04e93p-1
++0x1.dc65a4f6e740cp-1
++-0x1.97d975a6ad4f1p-1
++-0x1.b427d0ab69502p-2
++-0x1.f84bc3e23afa0p-1
++-0x1.eada1177b2a78p-1
++0x1.f9f556f848f73p-1
++0x1.5da9b1ed0a67dp-2
++-0x1.b09c16fdb0e04p-1
++0x1.8099017d801c4p-1
++-0x1.86a880766a1c9p-1
++-0x1.303886d1999d3p-2
++-0x1.3b32d4601049dp-2
++0x1.9af5d2ec8ebd9p-1
++0x1.7b7961500158ap-3
++-0x1.850fc657a7c8dp-1
++-0x1.679055ba9585fp-2
++-0x1.a334d05fa6dd2p-1
++0x1.54edc38ae367fp-1
++-0x1.149aa666c3c46p-2
++0x1.db29728be3d13p-1
++0x1.ef2d366fb9622p-1
++0x1.85d2c6d29e956p-1
++0x1.6cc7155575699p-2
++-0x1.070fb3b78d7bap-13
++0x1.b996c3cc0af1dp-1
++-0x1.ecd953aeda13ap-1
++0x1.4b4da5a783ab2p-1
++-0x1.da0f94397e1efp-1
++-0x1.eebfe7785b810p-1
++0x1.bbbd81413465ap-2
++-0x1.db37b245824d8p-2
++0x1.b18707b322819p-6
++-0x1.63aaf1836f8f5p-4
++-0x1.73b5c0ef358ffp-1
++-0x1.f3f5449170a5dp-1
++0x1.679742e395bb2p-3
++0x1.0f5d16ce3edabp-12
++0x1.6868a3065fa6ap-1
++0x1.e09861e83936cp-1
++0x1.426c2703c1edbp-2
++-0x1.784ef6124eac0p-10
++0x1.f4da573b55ec2p-1
++-0x1.1250820739879p-1
++-0x1.926f219c2ebc7p-1
++-0x1.b03cb5319aa16p-1
++-0x1.432597af65dc0p-1
++0x1.f2ef13107c805p-1
++-0x1.debb0319481e9p-1
++-0x1.e6c9b767c2e47p-1
++-0x1.1cfef6b1b5391p-3
++0x1.a3495200a739dp-1
++0x1.bb7d031207cbcp-1
++-0x1.a1e1472875de1p-1
++-0x1.fef5368baa990p-1
++-0x1.ffa8a2b9fe667p-2
++-0x1.db17773676353p-1
++-0x1.7744f61c58e3dp-2
++0x1.94efe0d3de07ep-2
++0x1.d28cd2f0b7253p-1
++0x1.71ec10c132d7dp-1
++0x1.eec3c508f7debp-1
++-0x1.84c3358f28de2p-1
++-0x1.e88bb44ebcca7p-1
++0x1.c8dfe2e844f26p-1
++-0x1.5764f1562f46cp-1
++0x1.dd7fc52e06795p-1
++0x1.ead0e0dd735c1p-2
++-0x1.d9c472df196e8p-1
++0x1.47397541dfafap-1
++-0x1.efe2c7ae66583p-1
++0x1.f39bc1d029169p-1
++0x1.388e371209c65p-1
++-0x1.cf7594c4759eep-19
++0x1.93ba85eda890cp-2
++0x1.ef7e57c04e5e5p-21
++0x1.3a13625122b61p-1
++0x1.f03355e0191c2p-1
++-0x1.eaa0b7cbc4b05p-1
++0x1.dc64653df1bc8p-1
++-0x1.da0274b24d4e5p-1
++0x1.1ef635c892de4p-1
++0x1.7985928fa8ea5p-2
++0x1.e8af54cc7a4a1p-1
++-0x1.4ecfd3add4ca1p-1
++0x1.edae154f725f1p-1
++-0x1.f841c459354cfp-1
++0x1.640c203fbc506p-1
++0x1.e1334385061fbp-1
++-0x1.e4af910db6fb1p-1
++0x1.eef8e75eeff24p-1
++0x1.52b3468ba247fp-19
++-0x1.c3007317cdb73p-1
++0x1.793397c5de6cfp-1
++-0x1.56f0f40ef4f93p-5
++0x1.7137163d0b95cp-26
++0x1.d97632e6c0216p-1
++-0x1.58f200ed16778p-1
++-0x1.e333144686ce6p-1
++0x1.ecfff5d1ed4fcp-1
++-0x1.bbcb739c535d8p-3
++-0x1.b83b54ffc1ce3p-1
++-0x1.c5b4f73fa50c8p-25
++-0x1.f0dcf6647d4a6p-17
++-0x1.e2a0b2142f471p-1
++-0x1.6811368ab0abbp-1
++-0x1.dc98c564661f8p-2
++-0x1.51a64736cca11p-1
++0x1.a87ec3c5f01d2p-2
++-0x1.13c43714b5577p-4
++0x1.ecb79537e7c0bp-1
++0x1.8ad66704aa830p-1
++0x1.8b81a17344821p-3
++0x1.fbea24d5ecac7p-1
++-0x1.d5b456504afabp-1
++-0x1.68a3377a06206p-1
++-0x1.e52744bcbb1bfp-2
++0x1.968042aade389p-1
++0x1.e02467b79461bp-22
++-0x1.effa02c2a5b57p-1
++0x1.6148d164ff733p-3
++0x1.a257b5f59a887p-1
++-0x1.ecd6e096725c1p-1
++0x1.4dcd868b1c423p-1
++0x1.b518559ba2afep-1
++-0x1.fd36e5f6ae177p-17
++0x1.7ab1d7104d182p-18
++-0x1.a0b161ecebb24p-24
++0x1.eaef2277ad27bp-1
++0x1.5537a12ead14fp-1
++-0x1.a353d51793c9ep-1
++0x1.d974c464f7ce7p-1
++-0x1.e9d4a5abc7463p-1
++0x1.8dfc202611058p-8
++0x1.49c49777c6afcp-1
++0x1.f8be91c860c1ep-1
++-0x1.744184b2f352fp-3
++0x1.4f7741d4eac81p-1
++0x1.fbcca55ea9e6ap-1
++-0x1.e859d3e460e92p-1
++0x1.5d39a31f530ddp-3
++-0x1.99da728aaed87p-1
++-0x1.c773d52b04af3p-3
++-0x1.27fc667b6fe57p-2
++-0x1.ee4664ab8f311p-1
++-0x1.240eb5bacc34ap-15
++0x1.aab10790e80c0p-1
++-0x1.1c32437314611p-1
++-0x1.e3aae42688852p-1
++-0x1.2b97b6959b92ap-1
++-0x1.124df14d190d5p-22
++0x1.d29df3ade00f8p-21
++-0x1.e70102ffd26f4p-2
++0x1.c9846775a72c1p-3
++0x1.2ee67226d5529p-1
++-0x1.d84381008f610p-1
++0x1.fae6228180a55p-1
++-0x1.d1cb30475aba6p-1
++0x1.475825caac544p-3
++0x1.e2d180d75310fp-1
++0x1.8860226237168p-1
++-0x1.bdb8f33f2142bp-6
++-0x1.aecd11f1ad305p-1
++-0x1.50e857e4f8090p-1
++0x1.09a7b4c454c6ap-1
++0x1.33a1b5c1f5142p-2
++-0x1.d473c0c10260ap-1
++-0x1.e6bcc76ef1341p-8
++0x1.e9a025b19d4e7p-1
++-0x1.e61c564b19c20p-1
++0x1.b1c890371859cp-1
++-0x1.e9de02e7fa0f7p-1
++0x1.8eae41c2d6d3bp-1
++-0x1.a043635f96fd5p-1
++-0x1.18077176e1632p-24
++0x1.7063d30f52d4dp-1
++0x1.e82d46287af59p-1
++0x1.e77a63eb49c28p-1
++-0x1.2e923371f4df7p-1
++0x1.32f392b11aa13p-2
++0x1.cf48a104a230ap-1
++-0x1.ffb8054bd5bb2p-1
++0x1.d961a7444a368p-1
++-0x1.2908136966a6ep-1
++-0x1.e8e5f46caed20p-1
++-0x1.cca7367cafebcp-1
++0x1.8a7d3113e9871p-1
++-0x1.9c20d073da00dp-1
++0x1.685602f47ee38p-17
++0x1.dbe65032e6aafp-1
++0x1.e39cc443d68bep-1
++0x1.ef75b5fbc2038p-1
++0x1.6fd3f20dabcdep-3
++0x1.ef2e5742cbc3bp-1
++-0x1.a139a4f96363fp-1
++-0x1.f936e3257b29bp-1
++-0x1.e83e578b67404p-1
++0x1.809f14efba3abp-1
++0x1.ef0cc05585683p-1
++-0x1.e0ab6532e03e6p-1
++0x1.e825a4e96f86cp-1
++0x1.944c53b6fcba2p-24
++-0x1.eef7764fb6703p-1
++0x1.dbd546810ad04p-1
++-0x1.ed82202786af0p-1
++-0x1.e744b298a1822p-1
++-0x1.f66403b0db0f6p-1
++0x1.b823a13640780p-1
++-0x1.8fd743dba9526p-1
++-0x1.6ad6002662fadp-2
++0x1.af29d1ff6c1dap-2
++0x1.a40a30c84d9d2p-1
++-0x1.eef1466de9bbcp-1
++-0x1.ea451649dac69p-1
++-0x1.be12773f273cdp-10
++-0x1.2ea1f2cfba778p-22
++-0x1.ed2eb7554cecap-2
++0x1.5604a6ebad5aap-3
++-0x1.dcb4e5d23da48p-1
++-0x1.e0e2d4e18e11fp-1
++0x1.7cbf026e8d176p-1
++-0x1.e92df6fb8cb14p-1
++-0x1.e0f877f179d56p-1
++-0x1.0460742bc8cdbp-1
++0x1.f9c6e1a503f35p-1
++-0x1.de3ca0ef987b7p-1
++0x1.ee2a61e036810p-1
++0x1.eb29729cac7d4p-1
++-0x1.dc41f5d54e145p-1
++-0x1.ee27548fb036dp-1
++0x1.8676b01d07ce0p-1
++-0x1.9eb434f5e23dfp-10
++0x1.95688374a65cep-1
++0x1.d8b331ab26940p-1
++-0x1.ec5af0c2ccbc9p-1
++0x1.bca24367daca5p-3
++0x1.4c5f30d4e8c83p-1
++-0x1.990c52576b03bp-1
++0x1.279527d6f3123p-2
++0x1.e7d10654db7cfp-1
++0x1.afabd749d11aap-1
++-0x1.e54870e856fc8p-1
++-0x1.a9b6e450b1736p-3
++-0x1.e4b0c74cbee31p-1
++-0x1.77a9538ce58c8p-10
++0x1.aab3b79abd652p-22
++0x1.efdfd56aee773p-1
++0x1.1dfac77800264p-1
++-0x1.f5e7d3b5fa6b2p-1
++0x1.569077a89293cp-9
++-0x1.f086970443d28p-1
++-0x1.1e2b763ff1c1bp-16
++0x1.fa84d6fc1bfb4p-1
++0x1.fbf321159facbp-1
++-0x1.56f5410b90154p-15
++0x1.ec2962b60792cp-1
++0x1.82723136c1041p-1
++0x1.66ec3602d5c0ep-2
++0x1.6006c4b0268aap-1
++0x1.db8e205953140p-1
++-0x1.6f4ec45af7480p-1
++0x1.713b02f6a04eap-26
++-0x1.63b1454647238p-1
++-0x1.f2d2c4f587093p-1
++0x1.dbec93d39559cp-1
++0x1.f59e8219eeb3dp-2
++-0x1.973c3291c4d50p-1
++0x1.30a10510388bap-1
++0x1.f1f61783e79d0p-23
++-0x1.c101b1037e3f5p-1
++0x1.d257940a5137fp-3
++-0x1.f470523c426b8p-1
++0x1.0c37b2dba00aep-19
++-0x1.ebcbb7d352b98p-1
++-0x1.f45c0719f0ef0p-3
++-0x1.9fa667856a81ep-1
++-0x1.3706e59f06a0cp-1
++0x1.e87165a85bf00p-1
++0x1.d9f9e3d739f44p-1
++-0x1.e26fb2a17aaa7p-1
++0x1.0be6a11da1596p-1
++0x1.f8d1b326b2ed1p-1
++-0x1.ee19b06500228p-1
++-0x1.e40de71a02d0dp-1
++0x1.98bc15dbd69bcp-1
++-0x1.eb16f70b61cccp-1
++0x1.93a7216be0c5dp-2
++-0x1.8bdbe0b9e2d2bp-10
++0x1.ff0fa32b3accap-1
++0x1.e7b000c9475a2p-1
++0x1.e4c7b30bac6b0p-1
++0x1.e82ba33a4ce9dp-1
++0x1.db41972b5b7e1p-1
++0x1.e2fab75688c77p-1
++-0x1.d674412d314f7p-1
++-0x1.a05a64a3c376cp-16
++0x1.d57127f394c23p-1
++-0x1.8bb3428cca392p-1
++0x1.66540667f4775p-3
++0x1.df8192132032ep-1
++0x1.16be46faa5fd0p-1
++-0x1.8f5d4684f487ap-1
++-0x1.515e3214390b1p-2
++-0x1.e9c224c0132f3p-1
++-0x1.4792b4bea367fp-3
++0x1.f683c622269b9p-1
++-0x1.fd61a56639941p-1
++-0x1.edb8f5b456c1ep-1
++-0x1.1227a7cbdc567p-1
++-0x1.daf8854d3e5e7p-1
++0x1.aee25650abb06p-1
++-0x1.513f8376de706p-1
++-0x1.a96f12a5be2cdp-1
++0x1.ec7da7eb5220ep-1
++0x1.a010e6eeba432p-1
++-0x1.e73721ebf9720p-1
++0x1.d827e42f715f6p-1
++0x1.53cad6d41476cp-2
++-0x1.5921d3708a0c3p-1
++-0x1.c05b22303587cp-1
++-0x1.97f484b97f423p-1
++-0x1.2b4492bd73b64p-15
++-0x1.eb0e768cad7c1p-1
++-0x1.fe0c97242979ap-1
++-0x1.ec354776dd3bbp-1
++0x1.cf0d270e371f6p-1
++0x1.66e7a5c93cffdp-9
++0x1.fd0d826c5a1d9p-1
++0x1.afbca363725d1p-1
++-0x1.d77251ee3df8ap-1
++0x1.1692a2cdd5549p-3
++0x1.6e88143883032p-1
++-0x1.f41ec1c712c7fp-1
++-0x1.a6386135c889ap-1
++0x1.de45269a5dce2p-1
++0x1.c6a6b4f8f837ep-24
++0x1.33d06466c6b9bp-1
++-0x1.860fd51abe700p-1
++0x1.fbd696b6938a5p-3
++-0x1.e83e45de922aep-1
++0x1.ec4e74a3a5175p-1
++-0x1.7a9f95d8c3a13p-1
++0x1.3cd2b0e0024b4p-2
++0x1.c5b6f70209b78p-5
++0x1.e5b073ba13507p-1
++0x1.c5914768121eap-1
++0x1.9e87f2c6f8986p-1
++-0x1.835ef3aca7e57p-1
++-0x1.dc7de37754abap-1
++-0x1.8635367864672p-1
++0x1.d6fcd19613123p-1
++0x1.713322dda040ap-26
++0x1.b301916b3e546p-1
++-0x1.5907373541318p-1
++0x1.b67804eb47f52p-1
++-0x1.01d6c56bc4577p-1
++-0x1.268026d7131f6p-1
++-0x1.8a2f305b13ed1p-2
++-0x1.b110618fb5339p-1
++0x1.1e2ec7a7b3ffbp-1
++-0x1.eeac0378d3c2dp-1
++-0x1.a8d514f3e4860p-18
++-0x1.3c73f2a282f70p-1
++0x1.4b69664a697c8p-1
++-0x1.5ac3218682dafp-9
++0x1.d9d2a5d6d0097p-1
++0x1.ea88c7564fe3cp-1
++-0x1.01b182a357b89p-1
++0x1.ef3d33758c65cp-1
++0x1.755957a759d6bp-1
++0x1.dc5b74cf50867p-1
++-0x1.173f6772617c0p-21
++0x1.edbf80f8c492cp-1
++0x1.d53f03f943012p-1
++0x1.8a3cb07f33bafp-3
++0x1.03af809e77795p-2
++-0x1.eaeaa63245741p-1
++-0x1.f97c70509940cp-2
++0x1.da0741692c059p-1
++0x1.ade411f3da571p-1
++-0x1.b2a12164a95c7p-3
++-0x1.8fa041d702f22p-3
++-0x1.97f1b066c701bp-3
++0x1.b707763754484p-3
++0x1.e499e4e2ad8e9p-1
++0x1.311253501f3f2p-3
++0x1.259d37e26150cp-1
++-0x1.dfb6e365f91ecp-1
++-0x1.aa22065b8f2c3p-1
++-0x1.da1ff0b273cd7p-3
++0x1.be2cb0d8c5b44p-1
++-0x1.3439a53555121p-2
++-0x1.e210555e48210p-1
++-0x1.d85926848cf29p-1
++-0x1.e9a0822672116p-1
++-0x1.aa5ad517117bep-2
++-0x1.8f0b53139648dp-20
++-0x1.f86a7137c57dcp-1
++0x1.bb51b4278652ep-3
++0x1.0e4d9562788afp-1
++0x1.7ce703c2bf2a6p-1
++-0x1.059cc53835908p-10
++0x1.89b894e0e9e37p-1
++0x1.9d6604d4efeddp-2
++0x1.aa6bf1e6b5ff3p-1
++0x1.d053b71612732p-1
++0x1.c58290a57b35bp-2
++-0x1.e79c23c2f87cbp-1
++-0x1.ef28737769e8cp-1
++0x1.e1bf0284f90b9p-15
++0x1.b8c1328d43f30p-1
++0x1.ff61460c87dbbp-1
++-0x1.ea06f3c18052fp-1
++-0x1.929a25bc4e316p-1
++-0x1.462ed634d347cp-2
++-0x1.f89887250e6fcp-1
++-0x1.bc99a3c89c1e3p-22
++0x1.5c75e768472b4p-2
++0x1.8f6fa012e2770p-1
++0x1.f7af22a6b572dp-1
++-0x1.3f54f252e3acdp-2
++-0x1.ed3fa609dbee7p-1
++0x1.dfbca7880638fp-1
++0x1.3e1116e4de263p-1
++0x1.dc6a025cdf557p-1
++-0x1.8bfbe75d98041p-1
++0x1.e9e2b495fa2c1p-1
++-0x1.2642422821515p-1
++0x1.edfca7dddb0f9p-1
++-0x1.ee8ea3f68169fp-1
++0x1.ad17b2686c65fp-1
++-0x1.c4f6f0a35fd4cp-1
++-0x1.ef6f43ea3e075p-1
++0x1.4f28f1201b762p-3
++-0x1.ef68700ccd1ddp-1
++-0x1.d63ec71b1db72p-1
++0x1.eece451c9800bp-1
++-0x1.e374023473851p-1
++-0x1.dae080dc56bf7p-1
++-0x1.f41933cd4db1ep-1
++0x1.8df8a16525f39p-3
++0x1.f5c64629537c0p-3
++-0x1.74e212eb04e5ap-1
++-0x1.c78c50a1f0152p-1
++0x1.ec1a10580c98bp-1
++0x1.aadfa2e96b6e0p-3
++0x1.9c1383ae4954fp-1
++0x1.dfb2223aa208cp-1
++-0x1.cfffa4412b604p-3
++0x1.cee130d0b5a2bp-3
++-0x1.e307d799961afp-1
++0x1.fe1874b71dffap-1
++-0x1.f0dd20e110586p-1
++-0x1.e6f124bc80f9bp-3
++0x1.a84f50096564fp-1
++-0x1.eb54d7123b641p-1
++0x1.dde4d0a43d6ccp-1
++0x1.460c714b7fc02p-1
++-0x1.eb14401a251dfp-1
++-0x1.6d6c5532e2cd9p-21
++-0x1.b0c634676faacp-4
++-0x1.ab062115542b8p-2
++-0x1.12c3e674c7017p-3
++0x1.f2f2a467a4711p-1
++-0x1.b410a265bf2edp-1
++-0x1.e142463188648p-1
++-0x1.1e06e6cea4258p-2
++0x1.60e380d477367p-2
++0x1.ecabd7e786fccp-1
++-0x1.ea047532c3043p-1
++-0x1.e64087ec5398bp-1
++-0x1.8192b282dc78ap-3
++0x1.bc3be459c0118p-2
++0x1.e848464011e2bp-1
++-0x1.1635a3dbd5aaep-3
++-0x1.f027619f4ec1cp-1
++-0x1.cc5b228bab092p-2
++-0x1.54c7045181291p-1
++-0x1.d878651499cdcp-1
++-0x1.2c92931e89713p-1
++0x1.eea2d2cca4e34p-1
++0x1.5cb4743cbb81ep-13
++0x1.4e17a4a822867p-2
++-0x1.dbb357be5deebp-1
++0x1.e59516797b352p-1
++0x1.db51b6a627095p-1
++-0x1.60c746f7d0703p-1
++-0x1.ea37c48f25f9dp-1
++-0x1.7ac0566338086p-2
++-0x1.baf382671db8ap-1
++-0x1.27b5065556c47p-1
++0x1.dc8714f787413p-1
++-0x1.51c9858d1404ap-1
++-0x1.72de44d96ac46p-26
++0x1.f425e3cced4c7p-3
++-0x1.687a92d61065ap-16
++0x1.f524140aa4f9fp-1
++-0x1.e23a916eb0f6cp-13
++-0x1.d99af531c1d7dp-1
++0x1.33fc239565e36p-15
++-0x1.77fe57818f84dp-8
++0x1.e2f6076e57cc4p-1
++-0x1.e97d25cf4a4c9p-1
++-0x1.ced6825d25e04p-1
++-0x1.e6a1f419a0176p-1
++0x1.a8ad7301a9c3bp-20
++-0x1.c6256777394b3p-1
++-0x1.15deb4ca612fep-2
++-0x1.1fd1b6af697a5p-1
++-0x1.e9ad92c7a5f42p-1
++-0x1.ee43843342288p-1
++-0x1.3c312578414bdp-3
++0x1.ec27f19113a4dp-1
++-0x1.9ccbd7e827a55p-3
++0x1.efe3727b0e23ap-1
++-0x1.acfd7757af602p-1
++-0x1.841256a82781ep-1
++-0x1.dea3e5358e22ep-1
++0x1.7a5d14b31d63cp-1
++0x1.b45264dd5b6ccp-1
++0x1.a955c3158f95ap-3
++0x1.5a2a14a8001cap-1
++0x1.d80407959de45p-1
++-0x1.e63ba4f3d8c3ep-1
++0x1.83edf16dfff50p-1
++0x1.b747536ef6e0ap-2
++-0x1.db91b03d5de78p-1
++-0x1.04e9366e2d6bdp-1
++0x1.868a14adc5d9ap-2
++0x1.e004440ae8f05p-1
++0x1.b892e7a52e191p-1
++-0x1.a31672a711e3bp-3
++0x1.f1a246788caa4p-1
++0x1.2712839082804p-1
++-0x1.e15a87fb65354p-1
++0x1.c8b2f2a807b30p-1
++-0x1.4604a175e993ap-24
++0x1.ebfed39cc2c8bp-1
++0x1.46b9055c4ca9fp-1
++0x1.306ca7dee4864p-2
++-0x1.54b193e5a6106p-1
++0x1.d915353edaa25p-1
++-0x1.559071a09ac62p-1
++-0x1.dfd05503dd9c9p-1
++0x1.6372147e80a9bp-2
++0x1.1d6c4659b2302p-15
++-0x1.51678029a9639p-1
++-0x1.93c504552cc8ap-1
++0x1.500db1270ff22p-1
++-0x1.a84a143781395p-2
++-0x1.e0eef33df7060p-1
++0x1.a5b9342b2a503p-1
++-0x1.7e31e007182c1p-23
++-0x1.cbe100e36ed62p-1
++-0x1.e91f7469d5670p-1
++0x1.eb0711bcb2188p-1
++-0x1.d9e340faf4907p-1
++-0x1.d3eaf468140d5p-1
++-0x1.f046a692dfbe5p-1
++0x1.eef541125402cp-1
++0x1.164721f247577p-1
++-0x1.948565494d763p-2
++-0x1.88826288be33dp-13
++0x1.e66022a174720p-1
++-0x1.74bb306267089p-1
++0x1.0e806680dde9bp-19
++-0x1.36bf209f8d75ap-1
++-0x1.fdb1502db4889p-1
++-0x1.dc58a3a509822p-3
++-0x1.ff1285390535cp-1
++0x1.e697822f3ef41p-2
++0x1.f0b895823caf7p-1
++0x1.ee8a003f19352p-1
++0x1.86cef6dc903e7p-1
++-0x1.b06d1232385aep-1
++0x1.f7415347bb40bp-1
++-0x1.1849f3c6d3a7fp-24
++0x1.d8bb0536d10cbp-1
++-0x1.7134b61c665cap-26
++-0x1.63c4664215f4dp-1
++-0x1.4af2b05df7423p-3
++-0x1.ec83e4b62417bp-1
++-0x1.ea94d7a68205ap-1
++-0x1.758b46be117efp-23
++-0x1.e67b111d9643ap-1
++0x1.c7fba1185bbb7p-1
++0x1.3ee093dfa7bc7p-9
++0x1.761e6712c456dp-1
++-0x1.4147f16c16ab0p-1
++0x1.a19ce52b4f906p-1
++-0x1.480570f907c0ap-25
++0x1.9b1db0483a855p-20
++0x1.e1ef409647a27p-3
++0x1.4c8792308f4c7p-3
++0x1.11dc218d362eap-3
++-0x1.ee64f1975f7e6p-1
++-0x1.2693204eaf09bp-1
++0x1.834e43d519f57p-20
++-0x1.f321806888b14p-1
++-0x1.912d845baba7cp-1
++0x1.f0d7d51f16eafp-1
++-0x1.98615085cae70p-1
++-0x1.3254856940809p-1
++0x1.f5e36613814c9p-1
++0x1.f43be6f8db5a1p-2
++-0x1.d999f12e66f25p-1
++0x1.795a0759e9a8dp-1
++-0x1.731ba13d1957bp-26
++0x1.df2806ba55640p-1
++0x1.93b6b433d212dp-8
++-0x1.de2d26a9b9821p-1
++-0x1.c253e67cccb47p-23
++0x1.d896e2d45c8e1p-1
++-0x1.e9d165420d859p-1
++-0x1.7ed393dd2a80ep-3
++-0x1.72e6237bb4f8dp-1
++-0x1.77dcd46971c3fp-1
++-0x1.0f7294284d3d2p-1
++-0x1.ee0460d9eea8dp-1
++0x1.f593219765d24p-1
++0x1.ef4575e02694ep-1
++-0x1.88ed60dd3430cp-1
++0x1.e83fc488dacd6p-1
++-0x1.f6b1f794f743fp-1
++-0x1.f6fad097104e4p-1
++0x1.f578d77058051p-1
++-0x1.ead825875d99ap-1
++0x1.e47714a63f73ap-1
++-0x1.faf0f514a94b4p-1
++0x1.67c2f0fa8047bp-1
++0x1.eafad3737c504p-1
++0x1.dd79933eb4823p-1
++-0x1.d8e09754f9b03p-1
++-0x1.622a31c8a4a1dp-1
++-0x1.c3658532b752dp-17
++0x1.4653f0b895ddep-1
++0x1.4b7f774a00827p-1
++0x1.5671004a1fee4p-1
++0x1.ed1eb4107075cp-1
++-0x1.e91e34b9e7e08p-1
++-0x1.40a8260114e62p-1
++0x1.fcd51406408b5p-1
++-0x1.b41136108fbfcp-3
++-0x1.ea510117fd3ecp-1
++0x1.9875d57574880p-1
++0x1.8e6821b32b65bp-1
++0x1.7b7895c4df3f3p-3
++-0x1.0f9652222f8e9p-1
++-0x1.e20bc23074b3bp-1
++0x1.71c19505b627cp-1
++-0x1.50acd256c1190p-9
++-0x1.f88e41f893405p-1
++0x1.04c507eebef8dp-2
++-0x1.088452ad3c759p-1
++0x1.087d627cadb98p-10
++0x1.9dd3f239428bep-1
++-0x1.ac5f04341a72fp-1
++-0x1.df87628ca53cfp-1
++0x1.d963f3e2377acp-1
++-0x1.bc583247a7cb5p-3
++-0x1.19bbe7224c70bp-1
++0x1.e51196492219ap-1
++0x1.f8be8469e0f90p-1
++-0x1.9d7b07a7045cfp-1
++0x1.7f288239bc808p-6
++-0x1.f06ed4e303e99p-1
++-0x1.edb676b500699p-1
++-0x1.11c8041a56a40p-1
++-0x1.8fa0020067b9ap-1
++-0x1.e38a3096c29f9p-1
++0x1.8bd9a2320c1eap-3
++0x1.ec3a1130d87e6p-1
++-0x1.f041e6d4d3221p-1
++-0x1.ec3ed491bab06p-1
++-0x1.e82ed1f92fb3dp-1
++0x1.d97577265ac94p-1
++0x1.e0dc4301d27ffp-1
++-0x1.3c6f734ef61e6p-1
++0x1.d481020b94331p-1
++-0x1.084e305313b99p-17
++-0x1.e379862ec0fddp-1
++0x1.c59db4bbac95fp-1
++-0x1.d65bd11324f1bp-1
++-0x1.c59a52083041ep-3
++-0x1.f7db5704a4985p-1
++-0x1.e962d3ae18889p-2
++-0x1.53c9205e774e8p-1
++-0x1.e911418959876p-1
++-0x1.eede64d01dd85p-1
++-0x1.567a6656d28acp-1
++-0x1.e6aa85d031c63p-1
++-0x1.eb05376e22db1p-1
++-0x1.7f6913662676cp-1
++-0x1.495606dbbbe93p-7
++-0x1.ec3000dc4aabap-1
++0x1.ec4706c41bd83p-16
++-0x1.e6a7c54bbfa5ap-1
++-0x1.7a7641865ee08p-1
++0x1.b53be3ce487cbp-1
++0x1.40e9902e7c79ap-3
++-0x1.eb3282a56efc8p-1
++-0x1.dc476211ce07dp-1
++0x1.fbb577823c6b2p-1
++0x1.db89870b0b16dp-1
++-0x1.efa8f6daf9d6ep-1
++0x1.decb623f19c20p-1
++0x1.34c3170fae6e6p-1
++-0x1.eb66f41c573b3p-1
++-0x1.42fa605e3ab02p-18
++0x1.62f563b214a71p-1
++-0x1.ebfe83dfbd7bfp-1
++-0x1.d8320749306c8p-16
++0x1.096bd4970cd0dp-22
++-0x1.34db46c5d25f9p-1
++-0x1.e584302e3a118p-1
++0x1.279d83bbed431p-3
++0x1.e267d33665809p-1
++0x1.e7dfa379e70a6p-7
++-0x1.db6095b37c495p-1
++0x1.e8fc0548a8effp-1
++0x1.df80158c55f1bp-1
++0x1.085252cff6318p-2
++0x1.e8b2a51a22aedp-1
++-0x1.6c2551b909220p-1
++-0x1.6b160460a6dafp-1
++-0x1.ab45345443095p-1
++-0x1.6deca2af052c9p-3
++0x1.837e7496593b3p-1
++-0x1.bf1280b399b44p-3
++-0x1.846896e4714edp-1
++0x1.a87ef4867a7b7p-20
++-0x1.ebcf01f1f9c05p-1
++0x1.ee9f7221b6d23p-1
++0x1.f218003f765f8p-1
++-0x1.dee46627c2030p-1
++0x1.eff7e643f253bp-1
++-0x1.3e07f3ef0c1aep-3
++-0x1.7c2b31f076e73p-11
++-0x1.806c918e71aeep-1
++0x1.0db187d31341cp-2
++0x1.8a44534c5fa47p-1
++-0x1.dbd3606da38ebp-1
++0x1.4c41a22828d0ap-1
++-0x1.9eb9358ded573p-3
++0x1.e080f6a0dd5a1p-17
++-0x1.edc7b0c6d7c61p-1
++0x1.1672e0cfb0ae6p-1
++0x1.bcc2d238d4ddbp-25
++0x1.ef15079437d86p-1
++-0x1.e8c624ef9c950p-1
++0x1.8543e62f380d5p-3
++0x1.fef15658b7b3dp-17
++0x1.fdaef64e92ad5p-1
++-0x1.ed9495fb211ccp-1
++0x1.66b7a3a5f4bbcp-2
++-0x1.e4b4d29f62b3ep-1
++-0x1.af4687b7a9dd1p-1
++-0x1.1b8575ec2f1bcp-3
++0x1.719ad2699f7f4p-1
++-0x1.2ae4206794c97p-2
++-0x1.f697d28a52766p-1
++-0x1.4de5a4d1044b1p-1
++-0x1.e859b3f551706p-1
++-0x1.995221a7cd650p-1
++0x1.5b44a5441ff42p-1
++0x1.b40b1223b8731p-1
++0x1.f41ca43bda5ffp-1
++-0x1.d64953db536f6p-1
++0x1.f237a08dabbebp-8
++0x1.2ab9e2f378d0ap-3
++0x1.748f13fdb7757p-1
++-0x1.85fce11104791p-21
++0x1.e8fb12ed42b85p-1
++-0x1.b9be13f0400a5p-3
++0x1.5cf593bcc75fap-1
++0x1.e62c06763ca98p-1
++-0x1.ef83347913d46p-1
++0x1.8cd87241429ddp-1
++0x1.ed52a73ea36ddp-1
++0x1.eb1fb7b4361a5p-1
++0x1.659040150dccep-1
++-0x1.e84f02088580bp-1
++-0x1.31efb599b0c90p-1
++-0x1.3d71f7cc5cbb8p-14
++-0x1.a7947303093c0p-2
++0x1.d9d164d5dd4b4p-1
++-0x1.a6a84397e3686p-1
++-0x1.dbfc05a512685p-1
++-0x1.5b0384147576ap-1
++0x1.24925361ccdf7p-1
++-0x1.ff78b2a719f69p-1
++0x1.ed23979169478p-1
++-0x1.aca5d6e0cebc8p-1
++-0x1.ef3d97ca40548p-1
++0x1.b18ed204df0bep-1
++-0x1.8bb177f1b45d0p-1
++0x1.eea5d7d2221dap-1
++0x1.7f86226cc352bp-7
++-0x1.e8690599a1b6bp-1
++0x1.c62b97c2b228ap-3
++-0x1.a1283741d2ae6p-2
++-0x1.36bf72bd2813ep-1
++0x1.02ff0102590a7p-1
++0x1.81aef093e519fp-1
++-0x1.e5788391286c7p-1
++-0x1.373103fbf2dbbp-26
++0x1.34e2d1a2d3f9bp-6
++-0x1.f8d06493cf734p-1
++-0x1.c24710eb7be22p-3
++0x1.d2db6598cfaf0p-1
++-0x1.da7e74a47298fp-1
++-0x1.9af47030895e7p-12
++-0x1.891952e265231p-1
++-0x1.092645a64f8d3p-20
++0x1.4f75862316ad1p-25
++-0x1.fe90e5f9be415p-1
++0x1.fb4ee1a050156p-1
++-0x1.ec39744c1f0c8p-1
++0x1.ba15c60d9db6fp-1
++-0x1.87a6e44eaf473p-14
++-0x1.346b35da45de2p-1
++0x1.8db9c701a763cp-25
++-0x1.db34b430e32a8p-2
++-0x1.629942502fa18p-2
++-0x1.e413c088c0673p-1
++-0x1.1f6e31af5699fp-1
++-0x1.ed7495c0fc882p-1
++0x1.abee977c43f44p-1
++-0x1.66cc97e31eaf9p-1
++-0x1.e215564a14206p-1
++-0x1.2c8ac0b1cee68p-6
++0x1.d44c706157084p-1
++0x1.60e11610c7ee0p-1
++-0x1.30bba0afa8fb3p-1
++0x1.bee52516c6958p-2
++0x1.704ea3b5ecd74p-1
++0x1.9e8346c8dd9e3p-1
++-0x1.8d20a7a73971bp-1
++-0x1.fee190f2fc2b8p-2
++0x1.2412133b85638p-1
++0x1.e12c42ed2cf35p-1
++0x1.ab2c11f181602p-1
++-0x1.3792d18b82986p-2
++0x1.8201c2f453059p-1
++-0x1.a787c4bfd3b9dp-1
++-0x1.21cfc16c9dd00p-15
++-0x1.fe18e3a9ee189p-1
++-0x1.e0a0474a78619p-2
++-0x1.f2b9635cc6607p-1
++-0x1.ead0a07de749ep-1
++-0x1.51be7174fb83ep-1
++0x1.ce044606c1030p-1
++-0x1.7ea081641e5c0p-1
++-0x1.a3b065b4875e9p-1
++-0x1.dfdae0cbe44cdp-1
++-0x1.ed7ef264fedb8p-1
++-0x1.ef5091c5626a8p-1
++-0x1.dc56039dc4ef6p-1
++-0x1.495862db7188cp-18
++0x1.f702c7007d0f8p-1
++0x1.af0a752686e3dp-3
++0x1.e30a96a56e0a2p-1
++-0x1.9e27251b3702fp-13
++0x1.d09934bc80099p-1
++0x1.0e94e36bb88f6p-2
++0x1.e6ddf06e94dd2p-1
++-0x1.07c16329a6368p-1
++-0x1.ba2ae6c81ef86p-19
++-0x1.0c0a94e27bcffp-1
++0x1.dd58042e78413p-1
++-0x1.e659010e4489dp-7
++0x1.0214d6e90f72ap-1
++-0x1.cf4586cf33876p-2
++-0x1.b70207125cf48p-1
++-0x1.df4870eb61dfap-2
++-0x1.f57f5552ab569p-1
++0x1.dfcf57952b0f5p-1
++-0x1.e8c51781e0f5ap-1
++-0x1.e482f48b7b06fp-1
++0x1.ebaf12ac1ca9ep-1
++0x1.e737501a3ae33p-2
++0x1.ecd747e9c09c1p-1
++0x1.e862d221950bfp-1
++-0x1.11bc51c1a6b71p-1
++-0x1.8b32c03c1f3fep-1
++-0x1.45d6537260c70p-3
++-0x1.eab7a154b753bp-1
++0x1.dc3de7d2fc8d2p-1
++0x1.ebba47c789bf9p-1
++0x1.e9ecf3956d1f2p-1
++-0x1.b9b423bd8562fp-16
++0x1.ea80b59543ec4p-1
++-0x1.4c94d139f13e8p-1
++-0x1.6e83b5a2a8fe5p-19
++0x1.e543336eb0ac0p-1
++0x1.e1ebe4a9d8a89p-1
++0x1.ed72033a5db2ap-1
++-0x1.e266b288cfc87p-1
++0x1.027c5616cc343p-1
++-0x1.e35a95def4819p-1
++-0x1.413b8018c5b35p-1
++0x1.25c3a3e3119f1p-1
++0x1.29429685f155dp-1
++-0x1.daec27668718ap-1
++0x1.066c27f6a6cfep-1
++-0x1.ece86688b8215p-1
++0x1.e7fb31fd3c964p-1
++-0x1.7208a0ee99588p-18
++0x1.e55e406d573cap-1
++0x1.e8af41ef26febp-1
++0x1.371c35f823ee3p-1
++0x1.d17522ea5e064p-1
++-0x1.7accc66f1a867p-1
++0x1.1b88e568085eep-3
++0x1.efa964a3049c3p-1
++0x1.0ae4753a5c894p-13
++-0x1.e5dc4522b9124p-1
++-0x1.eea0521dad0ebp-4
++0x1.852e91bce0883p-1
++-0x1.dd70c04d30a3ap-1
++-0x1.10e344fda4288p-3
++0x1.f8ed93cccdd32p-1
++-0x1.9b2a127bc4877p-1
++-0x1.3ae99644caf6fp-2
++0x1.2011857db1424p-26
++-0x1.e901933e634b8p-1
++0x1.c426411a0bd0ep-1
++0x1.a5edb0220c08ep-1
++-0x1.effdf2686cde6p-1
++0x1.c32c91193429cp-13
++-0x1.51f3b17d298a4p-1
++-0x1.7f189788a9871p-1
++-0x1.6df8f3b40a7d7p-20
++-0x1.cc9fa732730b4p-1
++-0x1.e800e2c46ef54p-1
++-0x1.0036b44e98fb9p-1
++0x1.545021fa9de9cp-1
++-0x1.dbd584ff2c565p-1
++0x1.f4ea010d09590p-1
++0x1.0838d097bf35fp-2
++-0x1.a1da024b0b5d7p-8
++0x1.e8d72663b3bb6p-1
++0x1.bd21611d957b4p-1
++-0x1.e632b5939513cp-1
++0x1.ef5182ea9b9f9p-1
++0x1.1f999553c9965p-1
++-0x1.b47b81b50fe30p-2
++-0x1.ec1d2221cef9fp-1
++-0x1.ff88333427dbap-1
++-0x1.f9b0f160d4715p-1
++0x1.000f60ec89995p-2
++0x1.03ce907b337a2p-7
++-0x1.a63a42293fa26p-3
++0x1.292904fec9be4p-1
++0x1.820c4727f0297p-1
++-0x1.ee77e35aa0adep-1
++-0x1.ecc08254e2ca3p-2
++0x1.f5e2939c7c8abp-1
++0x1.fe103302da0f0p-1
++-0x1.ee18039175978p-1
++-0x1.d7c305801dc47p-6
++-0x1.f7bb55bddabc2p-1
++-0x1.f3f604ec44843p-1
++-0x1.6fbae21dcab06p-1
++-0x1.f613a094bcd5bp-1
++-0x1.9b44300f94ca8p-1
++0x1.ebb413b8af6a7p-1
++0x1.8ff5319a0c60fp-1
++0x1.21f49780f87b2p-1
++0x1.edc3445e3d359p-2
++0x1.be0ce0e44a018p-3
++-0x1.ee9ef2f6c17b3p-2
++-0x1.c27d81c83efabp-1
++0x1.ac8f6552a58dep-1
++0x1.711ce469b9c2cp-8
++0x1.fa3c9399c63afp-1
++-0x1.432c76363edb9p-2
++0x1.ea3e827115c9dp-1
++-0x1.ea73d35821c98p-1
++0x1.bf34426cf512cp-1
++-0x1.1445f5830a831p-21
++-0x1.ee29a33d89217p-1
++0x1.8ccbb1dcc318bp-1
++0x1.25b4539e355fdp-1
++0x1.d9f2a66cb195ap-1
++0x1.1d3cb7d6c6a5ap-1
++0x1.b1b470d44d8e1p-1
++0x1.a8b3a413894e6p-10
++0x1.e85bb560bc75dp-1
++0x1.5f70e6661a987p-3
++-0x1.e607b65d13651p-1
++-0x1.7133562954a55p-26
++0x1.e8d044bdd2df4p-1
++-0x1.6d61c0b3f3e7ap-1
++0x1.b036d56c1ea88p-1
++0x1.db9765d455c4cp-1
++-0x1.d67e0577a6507p-1
++0x1.1149b4f4323d5p-1
++-0x1.61dc625616ea4p-1
++0x1.e7e686da575a0p-1
++0x1.1f8845720550bp-3
++0x1.181681ffa6887p-1
++-0x1.f9a361114e127p-1
++-0x1.2daf678a502f3p-1
++0x1.e9d467bd4f063p-1
++0x1.6bdae68159ee5p-2
++0x1.31f72092e0a01p-3
++-0x1.0257216dc5462p-1
++0x1.a3eba171994e9p-1
++-0x1.76ca124cf6f47p-3
++0x1.edaef15ec1849p-23
++-0x1.55ac10a3a8641p-3
++-0x1.c41062b424a37p-1
++-0x1.d92890d75b595p-1
++0x1.dcfb53f8d12a7p-1
++-0x1.e282c640ea6f9p-1
++0x1.d213669b363a3p-1
++-0x1.e38275a589425p-1
++-0x1.8ae0d1a8a37fbp-1
++0x1.2e4ef4f93f824p-1
++-0x1.e41b13bb1ae98p-1
++0x1.086eb6e0f5f9bp-1
++-0x1.e5a480f554f3dp-16
++0x1.247007cd3459dp-9
++0x1.126fb704975d2p-2
++0x1.ead2c179b0748p-1
++0x1.e2a9b69b414cfp-1
++0x1.dd5754e2b6f70p-1
++-0x1.aa3c46accda7bp-1
++-0x1.eac543bc70794p-1
++-0x1.3e5ed5df8f9b3p-3
++0x1.c87902a9dc843p-2
++-0x1.7488404424d8fp-1
++0x1.0a0993e0464fep-1
++0x1.ec89e597c1fb8p-1
++0x1.ff68c644002e1p-1
++-0x1.57e6c01243fa0p-1
++0x1.e6e2b58850fbcp-1
++-0x1.ee92e612cb066p-1
++0x1.e3f070eec2596p-1
++0x1.a3a1677955b56p-1
++-0x1.bcc7e5fa33d67p-1
++0x1.594fe3ac79583p-1
++0x1.50ec000b8e4acp-3
++-0x1.f9295717cfd6fp-1
++0x1.ef55f3c40b195p-1
++-0x1.fb0bc0bcae0e5p-1
++0x1.ef1e83db4a781p-1
++-0x1.e24192e4c76d5p-1
++-0x1.b008d5aeca3d0p-1
++0x1.e8f7b7904e38ap-1
++-0x1.ee3126a0a120bp-1
++-0x1.261cb76f274a4p-1
++-0x1.e693d2d796ecap-3
++-0x1.ddbba60a316aap-1
++-0x1.f79761f4b586fp-10
++-0x1.ea326681d6327p-1
++-0x1.30688704ba934p-13
++-0x1.e7cb21c3e16e5p-1
++0x1.587605ae10952p-1
++-0x1.e19505b39f2c0p-1
++-0x1.e18a12334f770p-1
++-0x1.0837757b9d39dp-2
++0x1.d5a6b0de0792ap-3
++0x1.f99470c182bf6p-1
++0x1.ed070744db724p-1
++-0x1.73b2737edc5c7p-26
++0x1.b936968f91883p-3
++-0x1.ea40a3cab079fp-1
++0x1.38e266cf4e67bp-23
++0x1.eef1a663ee7c0p-1
++-0x1.b714f5eded91ep-1
++0x1.dbc6676e6b672p-1
++0x1.eb6416d4263a2p-1
++-0x1.cd5f86a8d0aa0p-1
++0x1.6f9df5f49001bp-2
++-0x1.6c0f802e7de00p-1
++-0x1.171c4382a49b5p-1
++-0x1.6b40229004e64p-1
++-0x1.9b6996025da1cp-1
++-0x1.efbc035d5241cp-1
++-0x1.8d6cd1d2f1d24p-2
++0x1.387816b7132c2p-15
++-0x1.222651699e523p-1
++0x1.3b2d21d75094ap-2
++0x1.e81bf743c0369p-1
++0x1.ee2044b7efb74p-1
++-0x1.ff5cc72dade88p-1
++-0x1.c932d35cb0882p-1
++-0x1.e12937d9b5de6p-1
++-0x1.bb5fe6c2388bcp-20
++0x1.e2f9c07852f70p-1
++0x1.389e508c2d4a1p-3
++0x1.4e0e70421f589p-3
++0x1.cc1262f95c14cp-1
++0x1.fc9c210385ec5p-1
++0x1.9984459a46260p-1
++0x1.e4e8c2f4a4892p-1
++0x1.e37f56ad5d374p-1
++-0x1.d604e43246f1ap-1
++0x1.dd2cb52e3f946p-1
++-0x1.ad5ce2c9a061dp-2
++-0x1.e304f24cdfffbp-1
++0x1.06c562663d3d5p-1
++-0x1.80d703d704546p-1
++0x1.24f756f5e8490p-22
++0x1.ef88e7a892892p-1
++-0x1.8acf064a612ebp-11
++0x1.f85ef0fd21f0bp-1
++-0x1.f2d7b573896eep-1
++-0x1.c41b9411e2424p-1
++-0x1.0eed14bd5c463p-1
++-0x1.ecf8e686be7cep-1
++-0x1.965f75ff798a9p-1
++0x1.6411e12b18fc4p-1
++-0x1.11af90316a631p-9
++-0x1.da5f66b16e89ep-1
++0x1.085d72e4cc8a6p-1
++-0x1.dd2c9123047c4p-1
++0x1.ead1c7993f167p-2
++0x1.d9b8b3488e2c9p-1
++0x1.e3ba8654faf94p-1
++0x1.b12e97910d2fbp-3
++0x1.8ca403a109b30p-3
++-0x1.e5f2937058787p-1
++0x1.1a16c20b59c20p-8
++-0x1.11098610b5ed6p-16
++0x1.892e670d4f005p-1
++-0x1.2648b2df313ccp-1
++-0x1.dfc21746825a5p-1
++-0x1.4f866516769a4p-1
++-0x1.e913c2d94e14ep-12
++0x1.50e5c3abd6b3ep-1
++0x1.ddb931972f706p-1
++0x1.66d50185eedb5p-2
++0x1.178457d5f3122p-1
++0x1.0a089692fa9d6p-1
++0x1.53e8b3a99a9ffp-21
++0x1.faccb45f4e2f8p-3
++0x1.0fba936e6a028p-2
++-0x1.b6f9a6276a135p-1
++0x1.67cbb33515663p-6
++0x1.3ac2c7ff47442p-1
++0x1.fd2901f3c9671p-1
++0x1.a95ba191e3d37p-20
++0x1.ecfdc74673b2ep-1
++0x1.e33344b0b2b7dp-1
++0x1.d6b6c30ea8c56p-2
++-0x1.3e18951be4c2ap-10
++0x1.06544747d23b7p-1
++-0x1.6530f1b557057p-1
++-0x1.e141a1fc347e7p-1
++-0x1.c209253da05dfp-1
++-0x1.5abd34f01cc55p-25
++0x1.da55f059b4805p-1
++0x1.b15ad1f0f8186p-1
++-0x1.e2f6324aebb6cp-1
++0x1.e6cf20c6b3bd3p-1
++-0x1.d9f586a99ac1dp-1
++-0x1.ea5db6c802980p-1
++-0x1.eef205ef8bf9cp-1
++-0x1.e77cb3d6aba48p-1
++-0x1.efb0238767d34p-1
++0x1.eac576f6fcc93p-1
++-0x1.9d69119b79677p-17
++0x1.95acf5bfa2f77p-3
++-0x1.551e1792426dap-1
++-0x1.dbe0e257f280cp-1
++-0x1.f69220aac2bb2p-1
++0x1.57b2160efdbf5p-2
++0x1.e58de281a1a07p-1
++0x1.084020b03e4d2p-6
++0x1.d87e91b7e07b7p-1
++-0x1.99cda400ce3b7p-2
++-0x1.e362932c8c92fp-1
++-0x1.da4995d5cee72p-1
++0x1.87b2d4dcffaf9p-1
++0x1.3ea5128eaaf2dp-1
++-0x1.5faae7d3bcf38p-1
++0x1.3aec5799bb1d9p-19
++-0x1.ec3797b899976p-1
++0x1.8aefc30a2949bp-1
++0x1.bd62a0a521e27p-2
++-0x1.ab7df36836c3fp-1
++0x1.91ab544ac879fp-2
++0x1.f80f9015de12ep-1
++0x1.aa572325d6916p-1
++0x1.efb673b18111ap-1
++-0x1.dbb4625b1b6d4p-1
++0x1.ddbbe2e244b52p-1
++-0x1.f79ea4af0ff39p-1
++-0x1.c16b5501eff50p-1
++0x1.ea4315c9c663fp-1
++0x1.ade22053744afp-1
++-0x1.e4b1a6febdb21p-1
++0x1.ec9464048b26cp-1
++0x1.e3c1e7f51cf59p-3
++-0x1.dc8fa6420fb87p-1
++-0x1.f052a40d8e48bp-1
++0x1.cb7bf6c1858f8p-17
++0x1.e4fbf10139e0ap-1
++-0x1.df2192fe7f98dp-1
++-0x1.062da16c62ccep-1
++0x1.0dca9008fbcebp-2
++-0x1.0fd4c304627a5p-11
++-0x1.f7ad343c1ffafp-1
++-0x1.3de2247c0ac76p-1
++0x1.a8f991857abcfp-3
++0x1.b42d56efb9226p-1
++0x1.410fc200873e5p-1
++0x1.b2a8837671aa6p-1
++0x1.adf61664fadc1p-1
++-0x1.858b722a5427bp-1
++-0x1.e20ac139c6d90p-1
++0x1.ec4a72202abfbp-1
++-0x1.bf067665f434dp-3
++0x1.b78865ebf7179p-1
++-0x1.0634566d8abcep-1
++-0x1.e6a6172392825p-3
++-0x1.e6fc2655bf4fep-1
++-0x1.e543e6d75248fp-1
++-0x1.e88fc53e3e4b0p-1
++-0x1.eb40e4f889a53p-1
++0x1.e79ef6eba9adbp-3
++-0x1.96df34af5a088p-21
++0x1.65efb1356114ap-3
++-0x1.8d4e57db12a07p-3
++-0x1.5d616093177aap-1
++0x1.df0754bc48a37p-1
++0x1.d025216b99be2p-5
++0x1.e739901525d14p-1
++0x1.e8d122ec89b8ap-1
++0x1.e8c93262e04f1p-1
++0x1.ffd00163380e1p-1
++0x1.95d3428efb513p-1
++0x1.ea9674065a5c0p-1
++0x1.44b2453851f94p-1
++0x1.f42ee4d7dac9dp-1
++-0x1.e976c2fccc26ap-1
++-0x1.27ba2598fa425p-1
++-0x1.817945ade05b6p-1
++-0x1.6d6582d27a94ep-3
++0x1.ea59d39e18322p-1
++0x1.2c7d24a2d4e9dp-2
++0x1.f44e04251a793p-1
++-0x1.3778036172b36p-2
++0x1.eed61776e402fp-1
++-0x1.799ba18a53c8bp-1
++-0x1.6fb4348faf5c4p-3
++0x1.ddc2869dc18a5p-1
++-0x1.e343665d40ccap-1
++-0x1.3f73605325ab0p-3
++-0x1.3ba0f05c1755fp-1
++0x1.ed92048ac9d47p-1
++-0x1.e1a5a6243d05dp-3
++0x1.e4fd73980b5e1p-1
++0x1.33b9002a95e7ep-2
++0x1.ecba4619d36bcp-1
++0x1.6a7a22a449e86p-1
++-0x1.a2bb4749faabep-3
++0x1.8248f68a7e1ffp-1
++-0x1.e21ad7da85c70p-1
++-0x1.dd8e86ce2c248p-1
++0x1.5d40255ad5479p-2
++0x1.a5fa20bad74b8p-1
++-0x1.f99406b4197a3p-1
++0x1.d2f1b785de5d5p-1
++-0x1.e2d534c706c26p-18
++0x1.aeb5736c743fbp-2
++0x1.dfc7324805273p-1
++-0x1.2d2db09cc6e86p-21
++0x1.edae94523b924p-1
++-0x1.dc31f75dbd8bap-1
++-0x1.dce536216941cp-1
++0x1.a96985facec4bp-1
++-0x1.e5ce57ae15fa4p-1
++-0x1.dbd6a23f8b933p-1
++0x1.8d6b062af3681p-2
++-0x1.2590214dd2a24p-3
++0x1.d0f7e414c0f7bp-1
++0x1.eec205a0f3bfcp-1
++-0x1.5cf1a0c8c1ccdp-2
++0x1.ca9b05da55e1dp-3
++0x1.e7078679d9affp-1
++-0x1.dee200a7c99b0p-1
++-0x1.aea74698a65c1p-3
++-0x1.eef2e7388b0b8p-1
++0x1.9475e0bee269cp-1
++0x1.e8ede2eca6ebcp-1
++-0x1.3a3f5430a9d73p-1
++-0x1.da99616adbb35p-1
++0x1.40a287e0245c7p-1
++-0x1.db6f1755478ccp-1
++0x1.4b37359e5a442p-1
++-0x1.fabca4ba5ef23p-1
++0x1.bdb701415b22ap-1
++0x1.ece78508bb8c1p-1
++0x1.4a0d37fdc5a79p-16
++0x1.d81ca025d90bcp-1
++0x1.eacf140a099a8p-1
++0x1.ec31331b47ad9p-1
++0x1.ffd881703db66p-1
++-0x1.2f5617c2cdd47p-1
++-0x1.de2e87858ebd7p-1
++-0x1.3fc366eb32e48p-1
++0x1.da5505c9b5082p-1
++-0x1.c13e200d12a13p-1
++-0x1.eb29615918644p-1
++-0x1.530e61ff0420fp-21
++-0x1.e904b6785c98cp-1
++0x1.dd8612e5b6eb4p-1
++-0x1.339060228fa99p-5
++-0x1.3b19c402e1ab5p-1
++-0x1.3af4f28b24131p-1
++0x1.fdcf071e072d3p-1
++0x1.a02143cfecad9p-1
++-0x1.a33832573766ep-8
++0x1.f013574be1027p-1
++0x1.6bbb23e29bd56p-2
++0x1.c2e0b4f123c1dp-19
++0x1.0bd860a759addp-1
++-0x1.ea778377c1e47p-1
++-0x1.e415749cde067p-1
++-0x1.f0a930040729ap-1
++0x1.f0e804039007cp-1
++-0x1.dc12b607e76dap-1
++-0x1.3a0d506141a45p-5
++-0x1.bc3fa1c91bbc5p-2
++-0x1.61f91720d48f9p-2
++-0x1.b682b0abe4889p-2
++0x1.e2ecf4b017e0dp-1
++0x1.161d419e7dff1p-3
++-0x1.daf7532488e10p-1
++-0x1.c80936da67635p-1
++-0x1.f79a56103c6bcp-1
++-0x1.ea6bc6967c364p-1
++0x1.eb55c5889afdap-1
++0x1.31373491f9fd9p-1
++0x1.80eaa23a91ec2p-1
++-0x1.fd9ed1b43f715p-1
++-0x1.02c3e70019c89p-1
++0x1.daa6242404908p-3
++0x1.e8a1b27cb8dd3p-1
++0x1.caa1a29c0a137p-3
++0x1.e925463516258p-1
++0x1.dfb4b65646ab3p-1
++-0x1.4c1900363e38bp-3
++-0x1.ea072277e9de6p-1
++0x1.eb1bf69818892p-1
++-0x1.c7891601871cfp-1
++-0x1.e9c811e32475fp-1
++0x1.09ffc56919a5dp-8
++-0x1.1afd8636d88a6p-4
++-0x1.d5faa18bb319cp-24
++-0x1.5a73f23f4d005p-3
++-0x1.f12a419b4a7e1p-1
++-0x1.f3f813fc62e9ap-1
++0x1.882457f6307dfp-3
++0x1.cc79d0b17437bp-3
++0x1.f849007c8fc5bp-1
++-0x1.582d615ec34e3p-1
++0x1.406506bfcfb11p-1
++0x1.b6a6c3eebea0cp-1
++-0x1.e88b2722a8806p-1
++0x1.31b3642d568c4p-2
++-0x1.b5ca91453fe3fp-1
++0x1.3137f5baf9af4p-1
++-0x1.ebd6465bc4b63p-1
++-0x1.a49977d4938ccp-1
++0x1.e71ef4f74efa5p-1
++-0x1.7992140ccce3ep-3
++0x1.e2d9f4354faf7p-1
++-0x1.a282a4f738fe1p-2
++-0x1.864a6783972d3p-1
++0x1.ba4587f6ddfafp-1
++-0x1.b9dc1365a48d6p-1
++0x1.9b24d0442a8bdp-1
++0x1.de51365f22198p-10
++0x1.4b5e2197433cdp-2
++0x1.be54761e95348p-1
++-0x1.fb51005dfdc02p-1
++-0x1.fa7fb41bdf4ecp-1
++-0x1.da30d147aa840p-1
++0x1.a0b8a727a25c6p-1
++0x1.f298d21034624p-17
++0x1.e9cfa7a7fd217p-1
++-0x1.f4e8b5ec98f6cp-20
++0x1.7302146a6f168p-8
++0x1.5799928b1b254p-1
++0x1.d704c60ab009dp-1
++-0x1.9681e2cf54b70p-1
++-0x1.e48e4276acf60p-1
++-0x1.edd8a455629a7p-1
++-0x1.f37d96501f78bp-3
++-0x1.b7a5b13013786p-3
++-0x1.e960c36a66790p-1
++0x1.b63de6d713d58p-1
++0x1.e47cf5ea94794p-1
++0x1.ff99528e27db8p-1
++0x1.6c20d6e995703p-20
++0x1.dd82403aa55b3p-1
++-0x1.bdf2b69afaaa0p-19
++0x1.debfb38f72c41p-1
++-0x1.caf0a20a2e374p-3
++-0x1.c786d16c31b03p-1
++-0x1.be5512ecf8b31p-2
++0x1.eb74f08f7bea6p-1
++0x1.41f8565f967afp-1
++-0x1.df40e5c3806e3p-1
++0x1.915a220e086dfp-1
++-0x1.eab325c5fbbe8p-1
++-0x1.811ee0ee26a13p-5
++-0x1.deea07f1077cdp-1
++-0x1.a4b6326d457f6p-21
++0x1.29b2708c3a747p-1
++0x1.c0d8d07a22f7fp-3
++-0x1.56bf84f095b88p-2
++0x1.d8e426b246e44p-1
++-0x1.621014d0872dcp-1
++0x1.7307e45a9bfb6p-5
++0x1.dde4a27afa00ap-7
++0x1.dbce065bbf8a3p-1
++0x1.e1207083bb09fp-1
++0x1.1daa53018212fp-1
++-0x1.496161b184764p-1
++0x1.be4077f0a12bep-23
++-0x1.ba4832d143c1ap-1
++0x1.eae16553c8c57p-1
++-0x1.dcd236d0485fbp-1
++-0x1.e2b5a72fffc26p-1
++0x1.eb42940a8517bp-1
++-0x1.e06e527c5ae19p-14
++0x1.ae15b592e3128p-1
++-0x1.ca92520c405e5p-2
++0x1.7db9b3fa53090p-1
++0x1.64105318b86d4p-1
++-0x1.ed5ce02997ae3p-1
++-0x1.30fbb21b54296p-12
++0x1.bc360678ba681p-7
++0x1.e5d335374c24cp-1
++-0x1.e0749468e2cc8p-1
++-0x1.ee3570ed32c54p-2
++-0x1.3a8df06a429efp-2
++-0x1.ce3772c129db8p-13
++0x1.15ba83dfe3904p-3
++0x1.08f5e344993d5p-1
++-0x1.ed8e061bb76b0p-3
++0x1.f8ffe57a8dde1p-1
++0x1.e66a85eaf4ee0p-1
++-0x1.fea40127cc2f2p-1
++0x1.f2aab1284b4b0p-1
++-0x1.cc03e1478de39p-4
++-0x1.e912d49635d92p-1
++-0x1.f1687635d3527p-1
++-0x1.627064608ff5ep-1
++-0x1.eb5a8287935edp-1
++-0x1.1857a62740addp-1
++0x1.5b65c47382c9ap-3
++0x1.ecb1a4e85bbefp-1
++-0x1.a7fea62a8476fp-3
++0x1.ccdc351ffc956p-19
++0x1.f8d674c4fbe5fp-3
++-0x1.fa49b4283ce9ap-1
++-0x1.ed8ea55dfb46cp-1
++0x1.c552618b4fd1ap-1
++-0x1.b9fbf215a6137p-3
++0x1.edea1355a361cp-1
++0x1.ba92542786897p-1
++-0x1.a7307747e4eedp-1
++-0x1.41cb43cc57a37p-1
++0x1.ffe9232e1641fp-1
++0x1.556ed63589177p-12
++-0x1.cd6f16bc335c9p-1
++-0x1.f2b6338523771p-2
++0x1.db2795c5314edp-1
++-0x1.de2267c10bed6p-1
++0x1.ea9e158ead810p-1
++0x1.bec560986a04ap-1
++0x1.ef3db6de27565p-1
++-0x1.3393b6059cb76p-23
++0x1.b980f402882acp-3
++-0x1.e259b369989a0p-14
++-0x1.ff6ac3ef8dac8p-1
++0x1.7e5081826dfc6p-1
++-0x1.0c6c55fecc746p-1
++0x1.ef97766ebf4d8p-1
++-0x1.ddae26391e016p-1
++0x1.fc6cf6ab5b808p-1
++0x1.dc2b369f4fb97p-1
++0x1.3e0cd4bcc78f9p-2
++-0x1.0e4bb0b067b5bp-1
++0x1.b79ba1d3be769p-1
++-0x1.ea50436bfcdb0p-1
++-0x1.fa0d71fd79cc3p-1
++0x1.3dc4e295f1f30p-1
++-0x1.703d419656c71p-1
++-0x1.fa7f5390f9fbcp-1
++-0x1.e70a30da2cfa1p-1
++-0x1.fdabb5f507142p-1
++0x1.f64dc541cc1fap-1
++0x1.eb319784bca19p-1
++-0x1.f3bc56a59b92fp-1
++-0x1.b8a0d2c98b8e0p-1
++0x1.425107976f0d2p-20
++0x1.4ad290cb36082p-3
++-0x1.b5bb322363d88p-1
++-0x1.e7ce322063c1ep-1
++-0x1.c48fc05bc06adp-1
++-0x1.e74004feba25dp-1
++0x1.19099015cd289p-1
++0x1.9df0943df0ed7p-1
++-0x1.a337f087e6047p-1
++-0x1.7d8cb3c9cb5d8p-1
++0x1.11a6b0c515920p-1
++0x1.c693d3e0c3d93p-1
++0x1.f141608e6aec1p-1
++0x1.a9bde0091b760p-1
++0x1.c93a76be71d45p-1
++0x1.d7597098112a3p-1
++0x1.edf6c4bdb283ap-1
++-0x1.205784cd6e44ap-1
++-0x1.a0d5f18128988p-2
++-0x1.e40666614e59fp-25
++0x1.121bf667b781ap-1
++-0x1.668da74298814p-7
++-0x1.616fc1a66c4d6p-1
++-0x1.ee112212f8aa0p-1
++-0x1.ed6ef73d531a4p-1
++-0x1.c15fb366cfcf9p-1
++-0x1.efffe322b6ac1p-1
++0x1.96c5c059d54afp-1
++0x1.e4e1454ecf85dp-1
++0x1.db2913c8fc219p-1
++-0x1.7f66a643bfb7ep-1
++-0x1.27f944d4ad8d6p-1
++-0x1.6426726aee6cfp-1
++0x1.d9c0506986f5ap-1
++-0x1.eeaad7939baecp-1
++0x1.bd5a077c9fc90p-1
++-0x1.38a69239f073cp-1
++-0x1.f932f26d539d5p-1
++-0x1.b260a79be9a1bp-6
++0x1.ef9f51187fe83p-1
++-0x1.dce6b232fc21ep-1
++0x1.ee14f4ba14235p-1
++0x1.eb85a30d4a2e5p-1
++0x1.b11031019577cp-2
++0x1.b58be17f9d847p-2
++-0x1.d9cbe370eb0ecp-1
++-0x1.d517b3ce2b655p-1
++-0x1.ec41e5fb51583p-1
++0x1.8df301a855975p-25
++-0x1.e889435c34b7dp-19
++-0x1.134640672cf7ap-2
++0x1.49ae67009c731p-3
++0x1.e80a234204ccep-1
++-0x1.eb9c151577abap-1
++0x1.f0b6320c75315p-1
++0x1.b8ccb51a3d918p-1
++-0x1.98e3649200763p-1
++-0x1.dbe723ecfc7f0p-1
++-0x1.db9dd79228607p-1
++-0x1.dcb17195a4c60p-1
++0x1.dce077ee88b26p-1
++0x1.c85742cc49d4ep-1
++-0x1.815743a3562efp-1
++-0x1.dc9450089dc1dp-1
++0x1.5e56a1bca2c1ep-1
++-0x1.5e48b383d64fbp-1
++-0x1.de4c64b5bc273p-1
++-0x1.f2700673bb386p-1
++-0x1.c1301186b73c3p-18
++-0x1.b17535ce5f5e3p-1
++0x1.400e032ed6125p-3
++-0x1.128c733eb080ap-1
++-0x1.9cf7f3c30c74fp-1
++0x1.dc24f6d5d88e9p-1
++0x1.f78a43cc77de0p-1
++0x1.543a72675a6aap-1
++-0x1.45dd4628eecd9p-24
++0x1.fffd225b95d9fp-1
++-0x1.363de4b85c86dp-3
++-0x1.db6440c16c293p-1
++-0x1.e09c81e7a33a5p-1
++-0x1.af90f6124102cp-1
++0x1.b4106515dc5c5p-2
++-0x1.daa2769ff6e50p-2
++0x1.002e426741e10p-2
++-0x1.ee228647b7dbap-1
++-0x1.22ec95cf2a12dp-1
++-0x1.e93e916c943dbp-1
++-0x1.14b932254ccd8p-9
++-0x1.909622a8afce0p-9
++-0x1.b5b5e40f69460p-1
++-0x1.0b42e197effbap-1
++0x1.3bdc443663478p-1
++0x1.fb7b75d00f267p-1
++-0x1.f06581e9738c7p-22
++0x1.bcb3805a8b0acp-1
++-0x1.9b6ff25e8b37bp-1
++0x1.f9cb94e42bc3dp-1
++0x1.ecd805ed64887p-1
++-0x1.a65c4560a2138p-2
++-0x1.56dff1b743c85p-1
++0x1.e5298138fd89cp-1
++-0x1.156c062335d7dp-1
++0x1.df59064910717p-1
++0x1.af0516501c6d6p-1
++0x1.d2dbb56e8dd5fp-3
++0x1.d0b523fc1ceb1p-1
++0x1.bcf543a18c01fp-1
++-0x1.709413363b142p-26
++-0x1.f8c00391024e6p-1
++0x1.5aa701b2476b0p-1
++0x1.44865784caf4ap-8
++0x1.e998073d61296p-1
++0x1.8eb830a476bb7p-1
++0x1.ff036620f55bbp-1
++-0x1.f64585ccfeb6dp-1
++0x1.ae9611b635f6ep-1
++-0x1.24d9e5b7dfc26p-12
++0x1.9a25d27526795p-1
++-0x1.ec0cf6bf16995p-1
++-0x1.5f64a17e9500dp-2
++-0x1.ef0f34f9f356fp-1
++0x1.974b13f3e4673p-5
++0x1.09de90f53b65ep-1
++-0x1.e1b0771809c44p-1
++-0x1.0b7c366b28640p-1
++-0x1.4e93f479a0cc6p-1
++0x1.cd2b95c2df3d4p-1
++0x1.dd556108d9ee4p-1
++0x1.d9c6a408e180ap-1
++-0x1.852ba5ea09204p-2
++-0x1.6a318265b0ce0p-1
++0x1.8187a65639248p-3
++0x1.bed3226c9cf5ap-2
++-0x1.bf96c5540152cp-1
++-0x1.1c9d850480123p-1
++0x1.d8a65092223e5p-1
++0x1.52c841c5f3d66p-1
++0x1.0498d6413da66p-1
++0x1.dac374698d877p-1
++-0x1.fc1bd618e87e8p-2
++0x1.ebe4c1cec3060p-1
++0x1.983b20ca0cd67p-1
++0x1.ec96e031167b4p-1
++0x1.ea4ee28054fa3p-1
++0x1.edae74719dd10p-1
++-0x1.6162424ab4689p-1
++0x1.d9e3a0d3c4a69p-1
++0x1.f8cc86f846007p-19
++-0x1.f48764fc3cc92p-1
++0x1.ec5d65428be39p-1
++0x1.ebbdc16a6c83cp-1
++0x1.f4021476db864p-1
++-0x1.e537b490c8ebbp-1
++0x1.1a8247328b1eep-3
++0x1.ded3e00b45be7p-1
++-0x1.12fce6ee5e120p-3
++0x1.e8faf051d09cbp-1
++0x1.67c444811ab4dp-3
++-0x1.20b4a1a53c3d5p-1
++0x1.71a901abd5ee1p-3
++0x1.32e467615008ep-22
++-0x1.ea1224bded243p-1
++0x1.de9582df5c7f5p-1
++-0x1.b8e1e27336860p-1
++0x1.ec8561690ba28p-1
++-0x1.daee03fa90d5cp-1
++-0x1.3a3bc41b1b0fcp-2
++0x1.e38b32f89a15fp-1
++0x1.2a7a67c6a7f5fp-1
++0x1.ad2e378f343e2p-14
++-0x1.755da68905d10p-1
++0x1.79c3b49ea70d1p-1
++-0x1.8a29b0ff7fef3p-3
++0x1.e6e791aad1f3ap-1
++0x1.67b372a69cd0bp-3
++0x1.f3d57719d5a66p-1
++0x1.c96a64375fd43p-1
++-0x1.eb6f12c7214f3p-1
++0x1.7c2a71b780eadp-1
++-0x1.ebcbf2f5b7eb8p-1
++0x1.9c2ac06be1e36p-1
++0x1.47b60350a0542p-1
++-0x1.e81352ef49d80p-1
++0x1.e2fde24e7441dp-1
++-0x1.cfc297f098209p-1
++-0x1.9f3a958bc4d8dp-9
++-0x1.ebed30f465969p-1
++0x1.851581e8ee5f8p-8
++0x1.b29d24839a5c2p-1
++-0x1.d996e18e1756fp-1
++-0x1.e945641fd4421p-1
++-0x1.7567a1368f83dp-20
++0x1.eda764a20b53bp-1
++-0x1.d90ed36b67dd1p-1
++-0x1.1721b193cb808p-1
++-0x1.1aa794570d691p-3
++-0x1.486275b31eff1p-1
++-0x1.7932031d98446p-3
++0x1.082044740fb11p-1
++-0x1.bc5005352d983p-1
++-0x1.9e34b40c77bdbp-1
++0x1.f8960738dba77p-3
++0x1.0d8d44f6a38b9p-1
++-0x1.ef2a370ffe51ep-1
++-0x1.885af3b2b9117p-1
++0x1.ab5dd30d3b0d9p-1
++0x1.658572e828c0dp-3
++0x1.00801354b719ap-21
++0x1.ead7729f447e2p-1
++0x1.73fe964bcb9b8p-26
++-0x1.eb9e2463b8a3ap-1
++0x1.dcc7f49496bbbp-1
++0x1.e322464ccedbcp-1
++-0x1.f3f1411a81959p-1
++-0x1.b806d3a207c7fp-2
++-0x1.9e3cf02520c9bp-1
++-0x1.a3903178cc914p-1
++-0x1.9157d3c02c3b2p-1
++-0x1.a828f2fd070e9p-1
++-0x1.dfe122ce59486p-1
++-0x1.e0c5f12e4aee9p-1
++-0x1.096d23efa8b4cp-1
++-0x1.eeb2b02957428p-1
++0x1.9bd135009e628p-1
++0x1.dcfa56e705532p-1
++-0x1.dcc733e36743ap-1
++-0x1.f13ac5b2f066dp-1
++-0x1.ee5a97d9a8b48p-1
++-0x1.2421b26321192p-3
++0x1.4bdfb654355fap-1
++0x1.e9ab41fff09b7p-1
++0x1.6c39f77452a13p-2
++0x1.f2d9a4e18b93ep-1
++0x1.f588f66b070a4p-1
++0x1.c0b604407eb47p-1
++0x1.907b33485084dp-1
++0x1.e58d17977d4c7p-1
++-0x1.e9c1b44e07fecp-1
++0x1.5978b562d5348p-2
++0x1.f69e2232d6a42p-1
++-0x1.ea1b37e291f39p-1
++0x1.a9c704aff0411p-1
++0x1.0f4422ec03b3ap-1
++0x1.0c01d7eb6c807p-1
++-0x1.e24961f09bb8fp-1
++-0x1.6ad805c841fcap-1
++-0x1.f30f95a858a13p-1
++-0x1.7509a50c46facp-13
++0x1.0a4725eca19ecp-1
++0x1.f041143af7d9cp-2
++0x1.c39ee2c592617p-3
++-0x1.b389464f1c401p-1
++-0x1.eeb6a2abaa396p-1
++-0x1.26b3228cfdb15p-1
++-0x1.f7553430f26b9p-1
++-0x1.fbb1f12faf4e4p-1
++0x1.97b404be9b207p-3
++-0x1.6b2935d76744bp-1
++0x1.ee2bd4e26496ap-1
++0x1.69d035f7a7ee7p-8
++-0x1.5adfd2a30ceadp-1
++0x1.81131610d528cp-2
++0x1.81f87126313b8p-1
++-0x1.7cb4d0d3ae749p-1
++0x1.00a5000f3784dp-1
++-0x1.ec020225e8d1ap-1
++-0x1.dcfbc732dc4ccp-1
++-0x1.f54ad24e2bdd7p-2
++0x1.eb4c931e3f233p-1
++0x1.ef6013aa5bd6dp-1
++-0x1.ec4fc7eb42446p-1
++-0x1.963eb08b090e2p-1
++0x1.eb5787014c22cp-1
++-0x1.c474572d53337p-1
++-0x1.7e09139513a33p-26
++-0x1.f9340275d9995p-1
++-0x1.edcf16351be04p-1
++-0x1.7d78a4e9dc91bp-1
++-0x1.1e30752523e09p-2
++0x1.dc4b32a234a23p-1
++-0x1.edbb01a598c24p-1
++0x1.6367c4f49a449p-1
++0x1.eb1db52a22a45p-1
++0x1.e8eba118b0a26p-1
++-0x1.ce8021cd33ff0p-20
++0x1.f988f6376ddcep-1
++0x1.eabac25c2fc1ep-2
++-0x1.e132c034f9071p-1
++0x1.bda2b45f18ea7p-2
++-0x1.eeab70c49e827p-1
++0x1.d85d41c05db82p-1
++0x1.e4003425db812p-16
++-0x1.753ca74c55212p-3
++0x1.98ee323f505cep-1
++0x1.e95be276dd667p-1
++0x1.2287403404baep-1
++0x1.0ed8c38a3bdcep-2
++0x1.c82792be9bbadp-1
++-0x1.38a9d3998d79ap-1
++0x1.e805f6d3a6c5dp-1
++-0x1.32ebc7c55a58ep-1
++-0x1.048b622297845p-13
++-0x1.efb5c6983ac39p-1
++-0x1.415a16a005c76p-20
++-0x1.eb8aa64a05087p-1
++0x1.a18684e94695ap-14
++0x1.de2666acb5762p-1
++0x1.0a79566e358dcp-2
++-0x1.f282f0325a811p-1
++-0x1.3f08a31b67052p-6
++0x1.3a747651ea759p-1
++0x1.8c22845eca245p-2
++0x1.c1aed42df3035p-3
++-0x1.a01057abedfe5p-1
++-0x1.eb57d2b4d4247p-1
++0x1.27a880bdbfcbfp-1
++0x1.d51cd22b5b6cap-1
++0x1.c96de70665e99p-2
++-0x1.afeb916e3177fp-21
++0x1.8e00d6126d657p-2
++0x1.799d63f173a45p-1
++-0x1.cd29463be0ee8p-1
++-0x1.4f47a58e04b54p-1
++0x1.ea2f35262d1a7p-1
++-0x1.279997c5505d9p-1
++0x1.fbe731d9f7db8p-1
++-0x1.60d116a6cc97fp-1
++0x1.e9d9730db6039p-1
++-0x1.78fc83b456074p-2
++-0x1.03c0045400546p-1
++-0x1.f29f3377fe46bp-1
++-0x1.33d676f26127ep-3
++-0x1.efdd474021500p-1
++-0x1.bab9f2ecd85b4p-6
++0x1.c628a3529714fp-3
++0x1.e36ae1b514d1bp-1
++-0x1.db1e13827a88ap-1
++0x1.dbf1b775cf9d2p-1
++0x1.57a975b3f7f83p-2
++0x1.1deb94df7dd48p-2
++-0x1.8f4e44c99669ap-1
++0x1.4ed720c5a163ap-1
++-0x1.db81e304bef8ep-2
++0x1.de5485ca4d9dfp-1
++0x1.db26f3b39fe6bp-1
++0x1.6c88456adc480p-3
++0x1.c5a8961391ccfp-1
++-0x1.b78ea5581fef3p-24
++-0x1.6547c3be6a0acp-3
++0x1.e19d1283e35b5p-1
++0x1.e80e54a58d337p-1
++-0x1.449b6754bba00p-11
++0x1.e41026d50deabp-1
++-0x1.1844f685c97cap-1
++0x1.efa0e345c59b0p-1
++0x1.3121f641ffbd3p-10
++0x1.edb070c60119ap-1
++0x1.a52c94e4dfaa9p-23
++0x1.e5fc97f64aecbp-1
++-0x1.f652e1fdb6a40p-1
++-0x1.fc21417ad3694p-1
++0x1.750fa027faf9ep-1
++-0x1.9260f684b0d63p-3
++0x1.e896c4a4401bcp-1
++-0x1.7e6e516a67284p-2
++0x1.8c32f1a45f352p-3
++0x1.366796f5b5a00p-1
++-0x1.763cb2cf0a32dp-3
++-0x1.ad50f432557fap-1
++0x1.f220a525222a6p-1
++-0x1.e2d4f63884af4p-3
++0x1.7796f74179cbap-1
++-0x1.cd55d3c51d8fep-1
++-0x1.e221669031d28p-1
++-0x1.eeffa2c5a9c49p-1
++0x1.ecf741dda7320p-1
++0x1.a2a1569ae5d32p-1
++-0x1.e680d5195362ep-1
++-0x1.f83452138ebc1p-1
++0x1.30e2369a99e1bp-3
++-0x1.1a18425ff66a7p-1
++0x1.eb7451be325a0p-1
++-0x1.cd4ba71c2a541p-1
++-0x1.dc4f109832464p-1
++-0x1.eb97e24e4691ap-21
++0x1.718a40fa573d8p-3
++0x1.df0c61f2a0f01p-1
++-0x1.ab0051b1239f5p-1
++0x1.070692620b71cp-1
++-0x1.b3cea41f5ebbfp-22
++0x1.fa09813a0f08cp-1
++-0x1.0e9b76f265fe9p-3
++-0x1.dceb234e0d00cp-1
++-0x1.8836556db32e5p-11
++0x1.47d5509f852b6p-2
++0x1.bb4174dfebc1ep-1
++0x1.83be00af14ad6p-10
++-0x1.9a44d54a49874p-1
++-0x1.903962db8447ep-1
++-0x1.ac0763a2833a8p-1
++-0x1.c09d42b039fa3p-1
++0x1.e2fec0234b979p-1
++-0x1.e3f2b40c3e54cp-2
++0x1.dd6694410bcf0p-1
++-0x1.032c51b1d2105p-1
++-0x1.d80bd4a4cf64ap-1
++0x1.f89e41aa2fad5p-1
++-0x1.daf4c6895a475p-2
++-0x1.0579e7d148859p-8
++0x1.e318d24b8b39ep-1
++-0x1.91d2b301a130ep-6
++-0x1.d8d40797b1ffap-1
++-0x1.3ee1c1db473d2p-2
++-0x1.45ebc3d70bdd6p-24
++-0x1.6a73670891036p-1
++-0x1.dd2d72e85c929p-1
++-0x1.c572d1625cc9ap-1
++-0x1.9007645684de8p-1
++-0x1.982b1646a3406p-2
++-0x1.e8dee29e55a00p-1
++-0x1.867e95cfae0a8p-1
++-0x1.57b0e23b39e09p-1
++0x1.04807172fbb6fp-1
++-0x1.70bea3753575bp-1
++-0x1.cc28a3c0fb5ffp-3
++-0x1.0663157daee85p-3
++0x1.d83d9616cffd1p-1
++0x1.d56357592f5acp-2
++0x1.e006175a5233bp-1
++0x1.ded7b522b64c3p-1
++0x1.f11a872f5d26ep-1
++-0x1.e3a22384a6de8p-1
++-0x1.e8316413e3ebdp-1
++-0x1.0da5059829177p-2
++0x1.f67aa7a0b8826p-1
++0x1.eb8604ab96d0bp-1
++-0x1.c1ccb6174f89dp-1
++-0x1.834806f8654c9p-1
++-0x1.ef7701b74636cp-1
++-0x1.e6fc661a4e39bp-1
++0x1.dd3682e648173p-1
++-0x1.7e27e712723ddp-1
++0x1.e12486db8dca7p-6
++-0x1.a7f9c47f84b4bp-11
++0x1.e5dd42f5422e1p-1
++-0x1.7f1a6320cfa79p-1
++0x1.eb14a509edab1p-1
++-0x1.b39b65fdaaaf4p-2
++0x1.edf1a44e79d77p-1
++-0x1.16c4316ff435cp-12
++-0x1.eb0e3015adc06p-1
++0x1.cf1bc071e7b1dp-13
++-0x1.dacfb650325cfp-1
++-0x1.3868c3fb4119cp-3
++-0x1.c2a3b1d7f7890p-1
++-0x1.e64092b0d86f7p-1
++-0x1.53ca0177e6f37p-1
++-0x1.4ea952cfb8453p-25
++-0x1.e84792001e697p-1
++0x1.ef23215f6de12p-1
++-0x1.2152c36f9028dp-1
++0x1.9a5905b3dd7bep-1
++0x1.db5e820db1f0dp-1
++0x1.2dd320b0909e6p-3
++-0x1.027577673d37dp-1
++0x1.e4909407d6b04p-1
++0x1.527324f607a26p-17
++-0x1.ed9414384d45ep-1
++-0x1.7c4f407d91487p-8
++-0x1.eb3f971bcf807p-1
++0x1.d0dc12f7b7649p-18
++0x1.4dcbd35bad403p-1
++0x1.15ad81b482de6p-1
++0x1.e8f0874ac9593p-1
++-0x1.cec574569cb1bp-1
++0x1.ebb2d275b5529p-1
++-0x1.035e76eeac96dp-21
++0x1.eb1e73025e051p-1
++0x1.82b481c2cab01p-1
++0x1.f4d8e628050abp-1
++-0x1.4bc9841532205p-1
++-0x1.a03cd248fa8dbp-3
++-0x1.34a3238e9e3b0p-14
++-0x1.442444137aebep-1
++-0x1.17d6571c1eb38p-9
++-0x1.ed8e345382564p-1
++-0x1.8f2122c52c06bp-1
++-0x1.2e84858cbd9e2p-1
++0x1.ed5ea12bfef39p-1
++0x1.e255d16fe29c9p-1
++-0x1.e7c0a4791e7d1p-1
++0x1.ea9ef4d1cf987p-1
++0x1.bf8761b110b5bp-1
++-0x1.d8ffa13349771p-1
++-0x1.0dd222acc160ap-1
++0x1.828184fbbeaa0p-2
++-0x1.ff5bd6a9242abp-1
++0x1.d91a30bb3e15dp-1
++0x1.c38e7517dd45fp-12
++-0x1.0caa231ede96dp-3
++0x1.bf75f1da5b9f4p-3
++0x1.07c4f43f44017p-1
++0x1.d97165152ffeep-1
++0x1.f565d33b8ac0fp-1
++-0x1.9e2736ae6b655p-13
++-0x1.12528787f6e56p-1
++0x1.1b0912987dcf2p-3
++-0x1.59f3c5b673712p-1
++-0x1.bde56690f6eccp-1
++0x1.d28502cfb2092p-5
++0x1.ddc5738e8f925p-1
++-0x1.7b2d0222d18edp-1
++0x1.495424a43a336p-1
++-0x1.bbee92a22bc1dp-1
++-0x1.e8092359ccf4ap-1
++0x1.d986b716394bap-1
++-0x1.348db24936e14p-1
++-0x1.2c3e37771fce2p-1
++0x1.813c34a44eb1ap-14
++-0x1.dfcb1799d0b1ep-1
++-0x1.148f93639ab8ap-1
++0x1.e9d8e507b6b7dp-1
++0x1.adc4400d2246cp-22
++-0x1.f9941587a0f90p-1
++-0x1.0763c2612613cp-8
++-0x1.ec59c307396f8p-1
++0x1.f8e25686998acp-1
++-0x1.d1b2d7ceae413p-1
++-0x1.15af64d6bc1c9p-17
++-0x1.4f4065a22973ap-23
++-0x1.eb6ea004c88a2p-1
++-0x1.b2daa6e18bec1p-1
++-0x1.f95c5323bece4p-2
++0x1.e1d682232cc70p-1
++0x1.ecec70e666347p-1
++-0x1.d0e1b0d47cce6p-1
++-0x1.ef7c05da00ccbp-1
++0x1.8f83f2b021978p-1
++-0x1.18204301e710fp-3
++0x1.eac881dd6e573p-1
++0x1.46f83671cca25p-1
++0x1.e30cf7c07f903p-1
++-0x1.eba9678c3f1c2p-1
++0x1.e64eb73adb2c1p-1
++0x1.bd81501f6c6dbp-1
++0x1.6c6bd2dd525cdp-1
++0x1.205b7320c006cp-4
++0x1.ff04d61b0df50p-1
++-0x1.eeff51ab9dd14p-1
++-0x1.948a52ed5c31bp-5
++-0x1.e1c5c6487033bp-1
++-0x1.e217c080561c1p-1
++-0x1.3248c214e0d26p-3
++0x1.ed0872a63647dp-1
++0x1.e851875a532ddp-1
++0x1.e7ab52befacc0p-1
++-0x1.259fe08399b90p-3
++-0x1.ededb18a270f5p-1
++0x1.70704180d156ap-1
++0x1.9f8db14d87da8p-1
++0x1.e86395d65171ap-1
++-0x1.b845d7262e0bap-3
++0x1.4183f2511d03ep-1
++0x1.61a7f6c5ef7d1p-22
++-0x1.0bf534b51583ap-2
++-0x1.ebfb153952f46p-1
++-0x1.f432a5c40b5aep-1
++0x1.de1315467998fp-1
++0x1.043b03cb8172fp-3
++0x1.ef435338a09fbp-1
++-0x1.e3682482abf80p-2
++0x1.8cb1a630bb9c2p-1
++0x1.2118379e034c2p-19
++0x1.f7d1a7b4d3511p-2
++-0x1.befed649c5772p-1
++-0x1.ea5613210aa70p-1
++-0x1.5b9f05ea1adb3p-3
++0x1.da3dc7fb7e865p-1
++-0x1.56f2e58d53fc9p-1
++-0x1.a4c0d4697fa72p-1
++-0x1.4fe86735879b5p-25
++-0x1.dbe9a120dc24dp-1
++0x1.7e1f516ae8558p-1
++-0x1.0ccec227b1aa8p-1
++0x1.5a21f14dfa7b0p-1
++-0x1.98c8e5b444e4dp-1
++-0x1.a390457106bfbp-1
++0x1.7834478f6c2ccp-1
++-0x1.d355d23d9f129p-1
++-0x1.dfbdc0246898dp-1
++0x1.0de5e5de3ee03p-23
++-0x1.48701720e6bd6p-3
++0x1.da1b02240fa23p-1
++-0x1.ff76554d1cd62p-1
++0x1.5cf30257670ddp-1
++0x1.f37672c4384dap-1
++-0x1.20811778def78p-14
++-0x1.ea363656402fcp-1
++0x1.ef8c5245acfe3p-1
++-0x1.d9bcb4e8d3e79p-1
++-0x1.1372f51c095bep-1
++-0x1.e6d7e64d3a2a2p-1
++0x1.8d887665a4aa4p-12
++-0x1.543b1625c6f47p-3
++0x1.e2cfd418793d3p-1
++0x1.e2365579a754ep-1
++-0x1.806dd0823096dp-1
++0x1.057365e07e692p-2
++0x1.e13e27d7f0352p-1
++-0x1.e170f02eef343p-1
++-0x1.8a8b96c57e126p-1
++0x1.300c178b2707bp-2
++0x1.84277430fd97ep-2
++0x1.ebace7e63c155p-1
++0x1.7e2db343d2518p-6
++-0x1.f53d46b53474cp-1
++0x1.c0e313323e560p-14
++-0x1.445786093a311p-1
++-0x1.a073961b21017p-3
++0x1.eb2c92dd8595ap-1
++-0x1.dfd9b023c2058p-1
++-0x1.9cc0608e5c256p-3
++-0x1.1e8a967a738a4p-1
++0x1.df31c544e9d67p-1
++0x1.d2fad1936930ep-1
++0x1.d8d4c3d683cd2p-1
++0x1.e8712202731adp-1
++-0x1.ea4834441eb39p-1
++0x1.eda472e60d745p-1
++0x1.e25ac2048fb9ap-1
++0x1.4a70d01fd57a4p-1
++-0x1.1c3704a91d838p-1
++-0x1.df8e14d8335ccp-1
++-0x1.e95d04451bcd5p-1
++-0x1.ea74f086de3c2p-1
++0x1.dda9e26e84162p-1
++0x1.74f4f4a9a7630p-1
++-0x1.bb4fb52218d17p-1
++0x1.4f6f80226f31ap-1
++-0x1.684814485308cp-3
++0x1.7fc4e1d16dcf5p-1
++-0x1.fe6bd006411a7p-1
++-0x1.e0f5e654664e4p-1
++0x1.4dd366975a5b3p-2
++0x1.d94e10f7f2ec8p-1
++0x1.d8c8d21926f4cp-1
++0x1.571e352fdd0f0p-2
++0x1.ea0f558903c1ap-1
++0x1.f6c9d5f09ac9ep-2
++0x1.a3c463d5b6e67p-1
++0x1.48352432fcd1ep-5
++0x1.bda1811e8c6b1p-14
++-0x1.ee04d3c3f2263p-1
++0x1.e58f617f2d384p-1
++0x1.8e41e2bcbf28ep-3
++0x1.191df1d6a15d8p-1
++0x1.b0c6938c36b0ap-1
++-0x1.d944534af1d02p-1
++0x1.31642078c9c6dp-2
++-0x1.841801a2f578cp-1
++0x1.ebbb1323e8b84p-1
++0x1.e12481b18bc72p-1
++0x1.fa64112d9b7bdp-1
++0x1.682c32ff96a0fp-1
++0x1.31dd87a025af2p-1
++0x1.df5f54d95cc0dp-1
++0x1.4b9ce3268e639p-2
++0x1.c206d0139362fp-1
++0x1.e3a8a24e59ea9p-13
++0x1.dfd890e7db3d1p-9
++-0x1.bb5997a01dc09p-1
++-0x1.9da2876b31f04p-1
++-0x1.205fe30c96672p-1
++0x1.fa4b1032a01ecp-1
++0x1.e2db71253b231p-1
++-0x1.5cd7b6880daedp-3
++-0x1.dd712109d9432p-1
++-0x1.f4c2f4098a73bp-3
++-0x1.df4df687c5149p-1
++0x1.a7184731a11b4p-1
++-0x1.b717a69cb0326p-1
++0x1.eedaa2dbb184cp-1
++-0x1.fb6f90001c47fp-1
++-0x1.4141539f32f56p-1
++-0x1.9da4077805769p-1
++-0x1.ab8c92a8ec751p-1
++-0x1.fb9d60929751ep-1
++-0x1.e1f9e6fd5632ap-1
++-0x1.ef20c3a53e72fp-1
++0x1.3a55c400f2026p-1
++0x1.bc55404efb12dp-19
++0x1.82c2a5d140048p-2
++0x1.f613e22df463bp-1
++0x1.2c6291d7f2ad7p-2
++0x1.2319304ed36b5p-1
++0x1.ef526669efbebp-1
++-0x1.b3dec74769b6fp-1
++-0x1.7fa021510350ep-1
++-0x1.c22a90b77021ap-24
++-0x1.e89606e911505p-1
++-0x1.ee05e10877512p-1
++-0x1.a748b03895981p-1
++0x1.db4745b9604cdp-1
++0x1.0eab126351bb9p-3
++0x1.2b74811bfc23dp-2
++-0x1.425187f18c762p-18
++0x1.afbbc6e1f9f84p-1
++-0x1.e8ac5756ef915p-1
++-0x1.0f9400d75348bp-16
++0x1.916dc64eee2aap-1
++# asin multiple precision fallback path
++# Implemented in __sin32 in sysdeps/ieee754/dbl-64/sincos32.c
++## name: slow
++0x1.c88b2415431cbp-23
++0x1.84a360ccf288dp-20
++0x1.7eff5496b7ed2p-21
++0x1.4360a7a7b5c14p-23
++0x1.71374498ed714p-26
+diff -urN glibc-2.17-c758a686/benchtests/atanh-inputs glibc-2.17-c758a686/benchtests/atanh-inputs
+--- glibc-2.17-c758a686/benchtests/atanh-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/atanh-inputs	2015-06-20 21:22:16.296458135 -0400
+@@ -0,0 +1,203 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.5a2730bacd94ap-1
++-0x1.b57eb40fc048ep-21
++-0x1.c0b185fb450e2p-17
++-0x1.bd6e1642bb727p-1
++-0x1.4cfdd35756bc5p-10
++0x1.aadb5767b3ae4p-1
++0x1.827ab42a1416dp-1
++0x1.6d4e56dd0ff53p-14
++0x1.667d8313f78d2p-1
++0x1.672230c640ef3p-1
++-0x1.35ec261f6be52p-19
++0x1.9cf3279d8ff3ep-21
++-0x1.a60896128036fp-1
++0x1.ad5067d5aa573p-1
++-0x1.8a4421ee0d23ap-1
++0x1.aba153a252f9bp-14
++-0x1.2498611880effp-1
++-0x1.aa2c423f024dep-26
++-0x1.43d972a3632b8p-1
++0x1.12d690cf283ebp-25
++-0x1.eec6a3a873b98p-1
++-0x1.987b43a58457ap-21
++0x1.96a646ec9ba90p-11
++0x1.b961f358d8f43p-3
++-0x1.51d594fababdep-1
++-0x1.72a777e07e732p-8
++-0x1.21fcd11e4d773p-1
++-0x1.094ea21018a32p-1
++-0x1.79ea722d33e33p-9
++0x1.c63fc48261538p-5
++0x1.b1c0b7e618a20p-3
++-0x1.9957f1ba37225p-19
++-0x1.ecc6037c6538ap-21
++0x1.7e0bc46e556bcp-1
++0x1.4e7cd59b97811p-22
++-0x1.6b2773f7bf9c1p-27
++0x1.db9e07d2c1d81p-1
++0x1.293835cf8c06bp-1
++0x1.f59e8473488f7p-1
++0x1.094c253414b65p-22
++-0x1.922cb3b58f124p-3
++0x1.8a9b4773d8067p-1
++0x1.59e1848e51b3fp-1
++-0x1.77eb61d6b55b3p-1
++0x1.63e245bf37393p-1
++-0x1.8adb670e973d8p-1
++-0x1.c34f8232a8efap-1
++0x1.83f2e5bd4e680p-25
++-0x1.6b8d336fb28b2p-1
++-0x1.f50ce1076f808p-23
++0x1.ceb5a49139809p-19
++-0x1.3d0616e8d067dp-11
++-0x1.5ff057a79950ap-1
++0x1.263f96335fa00p-25
++0x1.5d5fa0d6d5003p-9
++-0x1.5070a3937a84bp-7
++-0x1.299707cfa0a5ap-5
++-0x1.64f623f5a4713p-3
++0x1.2bc994ee38c37p-3
++-0x1.e27d9435b978ap-1
++0x1.8092d58d5c790p-21
++-0x1.9c31372efb7c2p-25
++-0x1.b3e4409bf591ap-11
++-0x1.fc9e4603f0a42p-16
++0x1.7d4f167842e1ep-1
++0x1.d220d2dea0517p-25
++-0x1.f327d6a043438p-9
++0x1.0fbf54939b136p-16
++-0x1.9d4c17b3aa3e3p-18
++-0x1.6ab736c8be0aep-5
++0x1.ecff81aec235cp-1
++-0x1.102122d6bf984p-1
++-0x1.44a7f0d39a7cbp-18
++0x1.369d17b6b92d9p-1
++0x1.2c1ec48113977p-1
++0x1.b2a4a2cd6ddbfp-1
++0x1.1aa8449c2cce7p-18
++-0x1.2083e1015b457p-1
++-0x1.1589761b30c7bp-1
++0x1.e3c782bba8f90p-1
++-0x1.e08b0317d404dp-1
++0x1.290f1622d1939p-8
++0x1.7edf2261fcf95p-1
++-0x1.521241688012fp-2
++-0x1.0307d4e8caa52p-18
++-0x1.ccb366715602cp-1
++-0x1.95aa45bfdf88bp-1
++0x1.83b6d2241735cp-13
++0x1.4977776659f91p-21
++0x1.265e670e3a504p-1
++0x1.857de2b5f1f7cp-1
++-0x1.6e69d509bec68p-24
++0x1.d4f0109417b1ap-1
++0x1.9ab2842033f1fp-15
++-0x1.17d9b0f3c22a2p-1
++0x1.75a321c41a6b0p-1
++0x1.53a5d3faa91ffp-1
++-0x1.618c00bcdbb72p-1
++0x1.e99bd19956904p-1
++-0x1.89c34195ab10dp-21
++-0x1.82b1234ed4accp-21
++0x1.6b0486d8d09fbp-1
++-0x1.4259822aefa37p-1
++-0x1.ecfff733e7bb3p-2
++-0x1.90eac37875516p-1
++-0x1.ba38b666e3abap-6
++0x1.1ebbb6284200ap-22
++0x1.6c2ee1790a8b6p-1
++-0x1.0c2d8105dd990p-1
++-0x1.6d7264d3662ffp-1
++-0x1.43fe90e13fc36p-4
++0x1.46eb6152db91dp-10
++0x1.e4e26333b349ep-4
++-0x1.96ef543f5383cp-1
++0x1.47dca56a5b223p-1
++0x1.08ea668aed516p-4
++0x1.ef8f3428ca661p-6
++0x1.5b2b8480c515fp-10
++-0x1.2762d191e5fa5p-1
++0x1.508d56e0f5ca9p-1
++-0x1.2f616558f0888p-24
++0x1.0260d42d27c09p-11
++-0x1.0988f69b99e16p-1
++-0x1.d35697fcfb7b6p-14
++0x1.ffaf01135dec7p-1
++0x1.0afa01afd6afep-1
++0x1.c7cbb635b5af3p-6
++-0x1.23eb629a0abe4p-1
++-0x1.b87e61aeac49bp-1
++0x1.1646f4a28d191p-18
++0x1.4cd3a045b9783p-1
++-0x1.5c7a8599ffe9ap-14
++-0x1.9457a34399b4ap-1
++0x1.a154f6f6548e8p-1
++0x1.ba8ad1105bb80p-6
++0x1.af9176505fbeep-1
++-0x1.430563677bff8p-8
++0x1.a2a2d2a0778c3p-1
++0x1.df4c731f44b97p-1
++-0x1.d049e60c0ecd3p-23
++-0x1.325e341d79998p-1
++0x1.3da4954669e1fp-27
++-0x1.88d501c9b4a1bp-8
++0x1.f41c064c0c9bdp-1
++-0x1.2e7715356184dp-16
++-0x1.ab8a55eb84adfp-1
++-0x1.b5e7918f752d5p-1
++-0x1.c958c1faf2e05p-12
++-0x1.0a0b95fda6377p-1
++0x1.b05f4635c8e79p-1
++0x1.a216642c8c3c6p-8
++0x1.3049c686e99b7p-27
++0x1.e5ea44ec320c1p-1
++-0x1.884175facb7a0p-5
++0x1.45aa62e647503p-13
++-0x1.634bc7ff5c615p-1
++0x1.b68125750b075p-9
++-0x1.97abf0534746cp-15
++0x1.f687e58a3b36ap-5
++-0x1.1040e1ed1d1e7p-25
++-0x1.6ba8e7fc4221fp-10
++0x1.16e38001e0edbp-1
++0x1.df2ad20740b3dp-26
++-0x1.8e1172ae8c333p-1
++-0x1.b22640bb7e540p-19
++-0x1.fa5552ca0ed82p-13
++-0x1.e8ad873f75a2dp-1
++0x1.c91491a1a5938p-26
++-0x1.4ec4473b27d56p-1
++0x1.5f1862dba68cbp-1
++-0x1.dce0e6290bc85p-1
++0x1.fa68d22f5773bp-1
++-0x1.919486a495542p-1
++0x1.d303d564c000fp-1
++-0x1.afff55716fe0bp-23
++0x1.28b7d3631da7ap-16
++0x1.9ca493208bbdep-1
++-0x1.542a05a6b369fp-1
++-0x1.f7e79460fc57ep-7
++0x1.bb029019558b5p-15
++0x1.bba002729f3d6p-1
++0x1.1ada3533fa957p-1
++-0x1.896d956b5743fp-21
++-0x1.3a30147e08f69p-1
++0x1.25644490a1259p-14
++-0x1.4ef3744b5e468p-4
++0x1.04dac7a84b2d7p-1
++0x1.d46464683c4f8p-1
++0x1.9c4674b85fc58p-9
++-0x1.da6bd2cb0a530p-1
++-0x1.eb2076f05f6f8p-1
++0x1.4aeba21a72c73p-11
++0x1.af7910337420fp-6
++0x1.04ad609a3e62bp-1
++0x1.eafe16a4433afp-1
++0x1.1c65e51ff0cacp-1
++-0x1.4eb61140c3e34p-1
++-0x1.693d851f3cfeep-10
++0x1.254d73366914dp-2
++-0x1.ff34f15f5e3e6p-3
+diff -urN glibc-2.17-c758a686/benchtests/atan-inputs glibc-2.17-c758a686/benchtests/atan-inputs
+--- glibc-2.17-c758a686/benchtests/atan-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/atan-inputs	2015-06-20 21:22:16.296458135 -0400
+@@ -0,0 +1,809 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.642175414a222p-3
++0x1.32f96343ff094p47
++0x1.63961340f55e3p-4
++-0x1.404c80c42d2d7p3
++0x1.ff0297a7f4cf9p-4
++-0x1.3514d0a630343p2
++-0x1.9cd792d24de9cp-13
++0x1.48de0536fa639p-26
++0x1.df679233e616cp3
++-0x1.3672036e3b5dbp46
++-0x1.a6af31fe26a67p1
++-0x1.601447d82000cp-23
++0x1.6978a3d8cdd0cp34
++-0x1.bcf7074f6ad00p-20
++0x1.4560113d34322p1
++-0x1.88e3f71039a4bp-4
++0x1.016652052d70ep6
++0x1.4eeee5387c40fp-11
++0x1.1a93e2edc9a70p-1
++0x1.2a86a6b000b1bp19
++0x1.b550a52791570p19
++0x1.4f55e0fd66533p6
++0x1.179893d68a175p0
++0x1.c587a48440d49p18
++0x1.c4d736b34755ep41
++-0x1.0b00d1e309baap15
++0x1.d3ddd7a4105b8p-17
++0x1.907795ee90c71p1
++0x1.1c0ee51bf3fbbp-26
++0x1.6e21857f657b5p-3
++0x1.522870681be34p0
++-0x1.47fc357b48019p2
++-0x1.fc80d2478d003p44
++0x1.6b6af109c6d11p-2
++-0x1.557b744e3f2b2p-2
++-0x1.c0bd72f9dcc6fp-3
++-0x1.5dad543b37a02p2
++-0x1.d95b35b36eadep38
++0x1.645042fa42207p-2
++-0x1.139444200b144p1
++-0x1.28a691f56455fp-24
++0x1.d97ff36594800p-2
++-0x1.c46e817205691p-1
++0x1.189121c162006p-21
++0x1.b22526da1b4b3p-25
++0x1.89097738a1f84p23
++-0x1.3de8b3a71241ep-4
++0x1.d539d73aa3a6bp4
++0x1.9f3aa3d8be109p-8
++-0x1.28df31604ae5fp-2
++-0x1.a5ba03c7f21c6p39
++-0x1.0aa65539c9639p44
++-0x1.596756edc8d29p-1
++0x1.bf89523d6d9a8p18
++0x1.245712c9030a1p-9
++-0x1.e70de078fe520p-3
++0x1.0a6a653edc9c8p-1
++0x1.cc69116b071cdp-2
++0x1.2f24c0cf8fcb2p-16
++0x1.ed2ac30efc4e7p41
++-0x1.db4970624d850p-4
++-0x1.bb1260bff835cp-4
++0x1.d685f1157cf4ap-4
++-0x1.27241256d29b8p1
++0x1.ec5380eff6d2ap-3
++-0x1.fd7d8132290bep-1
++0x1.228426a24d54dp-17
++0x1.2ea847880a2cdp39
++-0x1.89a5c5d485ab4p3
++-0x1.fbd930c90d22cp3
++-0x1.86674787bedeap3
++0x1.ab27809f97987p1
++0x1.c17c653258848p2
++0x1.a3f615b4aa2afp-4
++-0x1.e8bff4a769203p46
++0x1.2fbb90ef75a25p-4
++0x1.d9d246c3e5da7p10
++0x1.1adf65737ce63p2
++-0x1.4bbf56383d2c4p-20
++0x1.1bc9009943672p2
++-0x1.84cd8442450bcp24
++-0x1.05cbc2307bc60p0
++0x1.b18fc1de83969p-2
++-0x1.a63bf1a32c82cp-26
++0x1.08e7e57369c93p4
++0x1.97e8f20d0a9f8p33
++0x1.1358340c23f9dp-13
++-0x1.f3a987156a953p-15
++0x1.cc4fe36fcebc5p-3
++0x1.d858d5bee5222p-2
++0x1.8911076ba1dfep-5
++0x1.5ab4754566467p1
++0x1.854547561eabbp1
++-0x1.830ce306fc8c4p-13
++0x1.b181a4ed4c25ep-19
++0x1.f77112499c880p30
++-0x1.5124040e757ddp43
++0x1.751c061e72f3dp-1
++0x1.b88d87c4c86b2p-8
++0x1.52c5b76c6ef89p-10
++0x1.e89130ee99ce5p-4
++0x1.2a2ed7a0b1956p-1
++-0x1.47b533d254eb8p3
++0x1.b4d0b69a8f4a8p-24
++0x1.8316a4af1bf68p-18
++-0x1.9e1ef1ccdd020p15
++-0x1.88bde5f29b2d9p3
++-0x1.365034bff4761p0
++0x1.7e40940c2d5adp-17
++-0x1.2c37625bfd76dp-18
++0x1.707642d37610fp0
++-0x1.afd1d0135cf31p3
++-0x1.4b0d1755bbf42p-11
++0x1.c4ed75b07c727p0
++-0x1.5e2db71616c7ap1
++0x1.050223b1cd624p3
++-0x1.3b3db4aa80820p-10
++0x1.5ccb8047d5d1ap12
++0x1.175282b52f29cp0
++0x1.aabc424c47eafp9
++-0x1.1a90445a04e18p0
++0x1.3da941dc72acdp2
++0x1.501726cf3e259p-12
++-0x1.1b3006e74e325p4
++-0x1.ad42977bf9a2bp-1
++0x1.73d0e25d9335ap-3
++0x1.0a514560b1915p-4
++0x1.9b955619c595bp-3
++0x1.c1bde2d25803bp-2
++-0x1.c9c450db85015p-24
++-0x1.b93f27a390fc9p-3
++0x1.394074cfa62d3p1
++0x1.815072f52a2e6p0
++0x1.1e52d6ee6069fp-1
++0x1.1f90737198ea5p-19
++0x1.13341218923f7p-23
++0x1.348b0774c87ffp2
++0x1.d2580731da42cp2
++0x1.87b5a06e57762p-5
++0x1.b40fd58aea62ap0
++0x1.9cd365175d628p28
++-0x1.4094703aac68bp-24
++0x1.56af03795574fp21
++-0x1.e189800006571p-26
++-0x1.9dfb51f7b789cp47
++0x1.9bc2e73963ca7p11
++0x1.b5a1c0632322cp0
++0x1.205e5539779c2p51
++-0x1.6c47a5b0217f6p2
++0x1.791cd37782384p-2
++0x1.231d31372c140p1
++0x1.91e2d31efbcaap-3
++0x1.34fa969626571p30
++-0x1.6bc04360963b5p-11
++0x1.8add0065da1d5p-4
++-0x1.d346e1877a7fdp-2
++-0x1.725697ff5c03dp1
++0x1.a8e2a686fd172p-1
++-0x1.8bd725c48f410p3
++-0x1.3b0537b22c0bbp-1
++-0x1.2c0db2781aad0p28
++0x1.4c6a110727b7fp-16
++0x1.b8d171996cbe1p0
++0x1.e6c6d70c497a0p19
++-0x1.15a9f10771286p2
++-0x1.c30f24893d7a3p-3
++-0x1.d73aa26a08a23p38
++-0x1.58b7549a93d13p-4
++0x1.169012651035fp1
++0x1.197ee4c04ae17p25
++0x1.3fba00276eae3p1
++0x1.941d03c4bf6a6p-4
++0x1.7f21c64e2abb7p-2
++0x1.7581d56332d79p0
++0x1.971980a7e2435p27
++-0x1.e44690996dde4p-8
++-0x1.3133113da7775p-20
++0x1.31d201884c815p30
++0x1.1f46672b184b2p-20
++-0x1.bbbc31b0259d6p7
++-0x1.ff6f625bf7eadp-1
++-0x1.3dd6a5e841573p-1
++-0x1.294b2242985c5p-5
++0x1.80c6d17d3b82ep41
++0x1.66a703915eafdp-4
++0x1.c16431985801dp28
++-0x1.66cc363cc169cp-13
++-0x1.445ac6d7de615p29
++-0x1.78d803eac6a4fp-17
++0x1.7d17f2f5981bdp-4
++-0x1.be3452bcdc974p28
++0x1.83dff4dfc4757p42
++0x1.451781735f844p14
++-0x1.4dab41db1c970p3
++0x1.3373037f37040p2
++0x1.20f7623057a1cp-4
++0x1.b74c37f7006cfp36
++0x1.6d17f13894ea6p-8
++-0x1.9084f58ffff58p1
++-0x1.c57ef7f9833e1p-3
++-0x1.943ce31bfd282p-26
++-0x1.75a42576fe1cdp1
++0x1.ff0257a993250p2
++-0x1.63ef308e427d4p0
++0x1.de26003f5ba7ep16
++0x1.15333549fa76fp29
++0x1.66bfb50c269e7p0
++0x1.a49604cc4d7f9p-4
++-0x1.15003315471d9p-4
++-0x1.38bed20a51ff5p-9
++0x1.7d97f5b7805ddp-19
++-0x1.7a3244a0e1b3ep-2
++0x1.ed0681d4ee226p50
++-0x1.15a691a22afc6p-4
++-0x1.d2c15149a171cp48
++-0x1.d395408686509p1
++0x1.d121d5a063487p-27
++-0x1.159dc08e6bae4p-18
++0x1.835914ed4ac69p46
++-0x1.f45bc1593e631p-2
++-0x1.abaf42742e1aep0
++0x1.f67cc57a82279p22
++-0x1.3cdc56ba8ad80p0
++-0x1.5a8f042e5c06dp-4
++0x1.306774727b9c8p-5
++-0x1.0f21118d78a86p1
++-0x1.abbcc62ae1185p-17
++-0x1.ff75940794858p3
++-0x1.6048b6174f2dap-3
++-0x1.84f4968e9a1a0p3
++-0x1.ecc9025c45c61p-9
++0x1.d9cd03dc0d910p-18
++0x1.cd846319c00c5p-3
++0x1.6366066bd94a6p3
++-0x1.8ebc74865b7b3p1
++-0x1.b87c63e47576cp-3
++0x1.c45cb0d4685f5p-3
++-0x1.e702b4a6029fcp35
++0x1.fc6300b9b675ap3
++-0x1.3f43a795e244ep0
++-0x1.f1cd009ef1604p3
++-0x1.d2fbd2cc79418p11
++0x1.907fd4f15d9d3p-10
++0x1.a371220d3cd1ep43
++0x1.df8544d34e26dp26
++0x1.acb3279e8da17p-18
++0x1.b1ea21e59afd9p-4
++-0x1.e0dff1828b454p-4
++0x1.ef38b267b4663p39
++-0x1.baba241cd2232p-13
++0x1.4fe7c7cd05a69p46
++-0x1.988073a34d2c8p29
++0x1.7599e0ac9a522p-8
++0x1.251b26c85badap52
++-0x1.a27c560a7da35p0
++-0x1.f091c7c2304a2p17
++-0x1.d0e1114b97abfp-13
++0x1.33ee35cf8c72ap1
++-0x1.e714e1fed73c4p-2
++0x1.1292e4e843885p-3
++-0x1.03fcc540c9867p22
++0x1.a53c8268c5213p-2
++-0x1.f16e3196353c0p-20
++0x1.e88a97bf39b0cp14
++0x1.4f00111aae17fp13
++-0x1.388bf2c171982p-1
++0x1.0f70b2319de14p-3
++0x1.e95a75a9609e3p-1
++-0x1.1047552b4d153p2
++0x1.091e73082965cp0
++0x1.2560a7de1090ep-26
++0x1.b7fde3097d182p-20
++0x1.c7f115eabfdedp-4
++-0x1.e99523e282a43p40
++-0x1.960706b024814p-3
++0x1.6ca4d098808a9p41
++-0x1.782a50dd85179p50
++-0x1.26e3c42a5f2d2p1
++0x1.ca282036f2b8cp-10
++0x1.87d031409e3e4p-17
++0x1.a80f97461a0f4p-3
++0x1.66ed5379b1601p45
++-0x1.081bb51f6296ep21
++-0x1.a51801c3b0ab4p-3
++-0x1.f9af91b1e0eacp-4
++0x1.f59650108c48fp1
++0x1.085c309bbe310p0
++-0x1.b9fea5e346036p1
++-0x1.453542b905ad4p24
++-0x1.e66c14b55c117p1
++-0x1.90a6830407ac7p40
++0x1.9bc93234caf93p26
++0x1.4b94104f5f41ap-3
++-0x1.c7b564e75a382p50
++-0x1.c2b250afb59e8p13
++-0x1.bfb283faeefbfp2
++-0x1.173235dbdbca5p-10
++-0x1.ac62c7b5e878bp-4
++-0x1.c2a9461c28ecdp-17
++0x1.1e1bf4bfee9b2p1
++-0x1.c6a1a78876ab6p0
++-0x1.e6fb5111565c8p3
++-0x1.8932b58866bcfp-19
++0x1.6407a070f3a3fp12
++0x1.87a1b1adaed03p-4
++0x1.e5ebf4ac465b1p-4
++-0x1.f8d5e0b5c2957p20
++0x1.42836589a8c0dp31
++-0x1.d1ad755010ed1p-4
++0x1.3d1f16896735ep-1
++0x1.fdaba0fd40c7cp31
++0x1.3311135efe06dp-3
++0x1.b5dc02c3070d2p-2
++-0x1.04d741eec5058p-23
++0x1.a80bc579c9a9bp3
++0x1.4766230792559p1
++-0x1.a5cbe4d7cc609p-3
++-0x1.ba1d23d80c32fp-11
++-0x1.daaf8434d9034p-13
++-0x1.c65d358dac3fep-11
++-0x1.3f4da10042b42p2
++0x1.262fa4579b063p-7
++0x1.914e60ffdbed8p-4
++-0x1.efac261144868p-9
++0x1.ce397251fa408p-4
++0x1.be05d28ca250ap-11
++-0x1.7479b7fa984ddp-3
++-0x1.ac20c42062d2fp2
++0x1.9a487118946dap-4
++0x1.2a124744f9fa4p47
++0x1.b1981261f9020p-1
++0x1.fbf7179ce5846p-2
++0x1.22fbd75358604p-23
++0x1.b1b2a4bcce5acp34
++0x1.84e62689c678dp-19
++-0x1.0b3bf5d136f5fp-25
++0x1.f93ce18d93227p-15
++0x1.bbd3b6a42bc58p-22
++-0x1.47b315f8194ebp27
++-0x1.827896462fb0cp-18
++0x1.2947c23116c19p-2
++0x1.3466e4652adedp1
++-0x1.23c2a01c6daddp-11
++-0x1.5831b4a29e94ep-2
++0x1.4a7fb41fb32ccp-24
++0x1.77544628d33f4p2
++0x1.40a5220c05f84p43
++-0x1.859503fac777cp-1
++0x1.629111fdc02f9p49
++0x1.f72960081155dp-24
++0x1.100cb00f41850p0
++-0x1.1280f391f830bp8
++-0x1.2e93552200855p1
++-0x1.4621063cd9ecdp-12
++0x1.1c4111533addep-25
++-0x1.569560309d6bbp-22
++-0x1.7a8124168d622p3
++0x1.17fba47954943p-4
++0x1.0672546df1e40p-4
++0x1.3157a7fbb3b2ap2
++0x1.a82f370a40ce4p2
++-0x1.a8fac6ce90f3cp1
++0x1.0f28d09b57a07p0
++0x1.da30a55a75636p2
++-0x1.4a8a0783b2ccdp-3
++-0x1.79e674173ab88p-1
++0x1.c89b61641fceep31
++-0x1.0f8107e6388fbp3
++-0x1.f720f120f5f1fp-22
++0x1.144b44598ac02p-4
++-0x1.ceb152c076922p-3
++-0x1.4b12e43d683a4p0
++0x1.c0ae8156c4455p-3
++0x1.85c10724ee68cp-3
++0x1.3c4635592b9ffp-3
++-0x1.d59892bee5390p-4
++-0x1.cd1280ceab8c4p-3
++0x1.b622b71aa922bp8
++-0x1.2795c18e21649p-15
++-0x1.639d32c619c4bp-19
++-0x1.e8f917ef054dfp-8
++0x1.c9eca4e44a7b1p1
++0x1.be86276e10fa9p3
++0x1.750cd40dd63b8p-24
++-0x1.033ab125bb64ep-18
++-0x1.9679b2912fcecp-4
++0x1.f7b3a1afd048dp-23
++-0x1.9f2863bcb1fd6p1
++0x1.c7fed1051dcb2p4
++0x1.c23ec470a9239p-7
++-0x1.1e5006f62ba49p1
++-0x1.0d9f216fea290p3
++0x1.bd8340ad169bap46
++0x1.dac8831aa29d9p3
++0x1.7c191598763c2p1
++-0x1.121aa313ac95bp33
++-0x1.b0996534e93cep-2
++-0x1.6c8353699c9c6p-1
++-0x1.5df8208f06792p3
++-0x1.4657113ffa73fp28
++0x1.48a901159abe7p0
++0x1.70e4b3448f927p50
++-0x1.e120d621edccap-4
++-0x1.4f2900d44caa5p1
++-0x1.848165627b209p-5
++-0x1.4cd082b565a11p-16
++-0x1.d9d2d7967af18p-1
++-0x1.222be1230bd8dp0
++-0x1.361e6586e20d9p16
++-0x1.3ddd364c29946p-19
++0x1.3ee601f53dafap-18
++0x1.e37ab68eb3013p45
++-0x1.0b8a978bd97b9p2
++-0x1.9589707e8a6ddp-20
++0x1.b7ca368b81375p-4
++0x1.2a7b114a80983p0
++-0x1.8c0fd1048891ep-4
++0x1.c32454b620d43p-26
++0x1.853192a0e3bbbp-14
++0x1.172b96d182f82p-2
++0x1.4156741896c30p-3
++-0x1.dd08573a1dc08p-3
++-0x1.f112f2dfd0c38p23
++0x1.f07ef18d186acp-9
++0x1.b0b643dc8187bp-2
++0x1.edf9044a400ccp-26
++-0x1.420ee09a253bbp-16
++-0x1.ce5f43fa6c0e8p0
++-0x1.b49ed6fe33c01p-2
++0x1.bc1e67b736d93p27
++0x1.18f252a5a70f2p-1
++0x1.3bd3528a6b5c3p-25
++0x1.042f039297e45p0
++0x1.890e26c77777ap2
++0x1.ec331761880b9p39
++-0x1.12aec65364402p2
++-0x1.b09600801c6c9p7
++0x1.4c14331304537p36
++-0x1.366b32ae15936p-9
++-0x1.d04011bd2f923p-27
++-0x1.bb73e632734cap51
++-0x1.22df928d0db2bp14
++-0x1.84d2c65e8a597p-4
++-0x1.248ce4d82f9e1p-3
++-0x1.a89a16ab8fc98p41
++-0x1.22061604a7bbep-1
++-0x1.9b7790ad6cfcap37
++0x1.e146126a58363p-20
++0x1.8bf9d0bee4587p-6
++-0x1.74eec1eb48a38p18
++-0x1.1eca65e42c0e2p-24
++-0x1.5f6e27219b443p5
++-0x1.95f64657f34b0p1
++-0x1.ad0923f0c8747p-14
++-0x1.71b7472c93381p2
++-0x1.e88ec0fa2b8e2p40
++0x1.0efad07b1325cp-2
++-0x1.d614b725644c2p-11
++-0x1.87f104d664989p-4
++0x1.db8bf75a3dabcp25
++0x1.18a07441e9358p-3
++0x1.c52552071ba9dp2
++0x1.4eee532e1cf42p-2
++-0x1.acd7a7d0cb2d2p49
++-0x1.efdbb63ba4cd9p3
++-0x1.c0dbd4011e3dbp14
++0x1.a8b9053cd4ae7p-26
++0x1.950f208f9f314p-3
++0x1.62bc1534e8779p1
++0x1.ec8712224e21dp5
++-0x1.dcf2f55094df3p-4
++-0x1.13a10025de14cp1
++-0x1.275ce549521b9p-1
++-0x1.2d3995ba1b17bp-5
++-0x1.a76630717c0c6p3
++-0x1.b2ec655611d3ep38
++-0x1.9bd4a62004f97p-20
++-0x1.49dcb6df53770p1
++-0x1.2b34c0811030cp-3
++0x1.99ee70ec910aap-21
++0x1.35b201aa1e70bp-3
++-0x1.92a3000ee8dd4p-2
++-0x1.d69d60b48249fp3
++0x1.eee73555cf4d5p-3
++-0x1.07de748dacd3ap12
++-0x1.a8ea7383f8f09p8
++-0x1.eca3120c1f7cep1
++-0x1.8b4b26d9f4eabp51
++0x1.167433f50737ep-23
++0x1.585657c46c25ap-20
++0x1.0e0447b473e54p2
++0x1.b28d209b03f59p-4
++0x1.9a8d34b2b2855p-25
++0x1.948ac6afc0f37p3
++-0x1.563cf374c073fp-4
++0x1.fa49e687bce32p42
++0x1.c42c2624133c2p48
++-0x1.001e573a69113p2
++-0x1.4dfb17453411bp-3
++-0x1.d9b9b553ab45fp23
++0x1.55496452db316p3
++-0x1.8420d7f1ac33ep3
++-0x1.ac7cd42b0f63ep2
++0x1.ce2970c35394cp2
++-0x1.de2ce25feb1e3p-16
++0x1.4fe2152fd9407p-2
++0x1.4d4233d0400d2p1
++0x1.f4c640fdd48b2p-10
++0x1.1512c1316465ap37
++0x1.b584b29dc1d4bp22
++-0x1.695e973f8db94p-1
++0x1.7373d677b7679p24
++0x1.f899a57b746b9p-22
++-0x1.f5ad761b38217p0
++0x1.daf950a02a029p1
++0x1.a9c47461369bcp-7
++0x1.a66902e961fe5p-2
++-0x1.f6bc5292eadcep2
++-0x1.0377673b5656cp20
++-0x1.269297562701dp-4
++0x1.13d1e1e922a15p3
++-0x1.ddf1d5cfbfb4dp-20
++0x1.6c21328fa2eacp0
++0x1.953fe3186fbacp0
++-0x1.2ed5d49aee19cp-15
++-0x1.d3e9f10d61fa8p-4
++0x1.5315517278bffp-4
++-0x1.aeeb36df95b57p26
++0x1.9f55b3bd1d398p2
++0x1.894151536709bp3
++-0x1.93a3d5c645e3fp22
++-0x1.37803538f3548p43
++-0x1.d5dde10bc588fp-23
++0x1.f145117569f10p4
++-0x1.ca23009d83541p0
++-0x1.fc4063d4a4afep23
++-0x1.ec88c7edb5ae2p-6
++-0x1.2d5973fcaa823p-21
++0x1.437a141589287p2
++-0x1.9104e694ef44ap-2
++-0x1.b70572032d576p-7
++0x1.d10452e3eae69p2
++0x1.2874b443d01bcp0
++0x1.fa66d12189a72p20
++-0x1.303e443c556d3p46
++0x1.4b5d557e8fe56p44
++0x1.602bb4e791b87p-20
++-0x1.158f81cbcb150p-3
++-0x1.36a3939175212p3
++-0x1.826092fe525c4p-19
++-0x1.a72da4879bcb1p-26
++0x1.839626b74c51ap-1
++-0x1.bd2da6527d628p5
++0x1.3257e0dc99c46p-23
++-0x1.b3ebe0c2317c6p3
++0x1.1164968b6d3d2p-4
++0x1.bd5404092a649p30
++-0x1.dd0e00246fdf1p-3
++-0x1.4167e56920aa2p6
++-0x1.b035570fa59c8p-1
++0x1.7853f4cf90bbcp15
++0x1.bc20a74a4c2dbp-18
++0x1.0e3ee3d24bf54p3
++-0x1.95aab56378e9cp45
++-0x1.4930a7aa51e8dp1
++0x1.ea77407c9a5f1p-1
++0x1.4fac93644de62p-3
++0x1.a2ed87cc0f417p43
++0x1.14d2d0a33df56p2
++-0x1.3473f6f77b6c5p11
++0x1.b647101dc4177p3
++-0x1.4e0b92acc66bfp23
++0x1.2a3797d36ee30p-4
++0x1.ce10973c013ebp-14
++0x1.b6cef57406772p2
++-0x1.326762c9ea656p-22
++0x1.56473079b28aap24
++-0x1.46f3d42d9a8dap-11
++-0x1.6d4e52e373151p-7
++0x1.622a0570fc4abp11
++-0x1.7e0bb32e21466p-6
++0x1.55a1a3d809d3ep1
++-0x1.d7492480e11f5p32
++0x1.835730d6b3ef6p-18
++0x1.2d9cf79f070e8p-9
++-0x1.6cee95c1d9445p26
++0x1.45c58441f2822p-3
++0x1.2f01d75200b30p21
++-0x1.014c5172af434p0
++0x1.9d96552d416d8p3
++0x1.f878a3fc8f55fp-3
++0x1.1206f1aa29231p1
++0x1.998bc480cbf5dp-3
++0x1.2160c0ab74e78p41
++0x1.66cce4923857ap-6
++-0x1.47bf27bfba3adp-3
++-0x1.88b9442658583p-13
++0x1.baf0076743831p2
++-0x1.d7a664adbb965p-22
++0x1.8bfbf37ef0c90p22
++-0x1.a2b137086be2cp9
++0x1.b8fa2667197acp29
++0x1.2e9ee649d720ap-2
++0x1.fd42f19ae5dfdp-15
++0x1.b4c7c70a22018p38
++0x1.6fee027ca714ap-18
++0x1.b986a428fdeebp-9
++-0x1.f63c6744cafc4p-7
++-0x1.860b9508a01c2p-4
++0x1.c9dbe26d13605p-7
++-0x1.e5af65a0da055p-4
++0x1.2f48357a95e60p-3
++0x1.afac3209945f4p-11
++0x1.e24230fc8430fp-1
++0x1.555f1605043d9p40
++-0x1.42c7b6d8c6b89p-4
++0x1.f5e416fab1768p24
++0x1.4379506da570ep10
++-0x1.c38b2527d3a6ap0
++-0x1.ecf007e1a6728p-3
++0x1.636eb2220b2c2p-18
++0x1.7609e702937b8p2
++0x1.2db5d31780fa5p3
++-0x1.221c240b15183p-3
++0x1.084b249033af8p-19
++-0x1.69c8f54230d4cp2
++-0x1.5458a621ac511p0
++0x1.c8b53281fbad0p-15
++0x1.0c8ac2d6bf8cep-22
++-0x1.28b804bea1e7fp3
++0x1.919d64a75bf39p-9
++0x1.4c0b078f754a4p-1
++-0x1.dd7405983ab97p-20
++0x1.ba2103a39b033p19
++-0x1.b21fc106586d2p0
++0x1.eacb558bbd5dap1
++-0x1.058304cdc51f1p-2
++-0x1.e530d67d5c413p15
++0x1.9efc141496268p-21
++0x1.9e43436405397p-2
++0x1.d6c5d5f5dcc9fp-22
++0x1.2f0540658e814p1
++0x1.89ea31cb96062p1
++0x1.c9d690079576dp-7
++0x1.9b1ef5b23f047p-2
++-0x1.c1e61429c45fbp43
++0x1.248b34f22e7e1p-26
++0x1.0dc2918fd3196p-15
++0x1.a17a2260c8d58p18
++-0x1.a088140ade389p19
++0x1.8b92c2168e33fp40
++0x1.69ab67a22bbbcp0
++-0x1.343232b010a37p-17
++-0x1.0c4932248f574p0
++-0x1.2bdc378a38991p-2
++0x1.2d563370110dap-12
++0x1.a27134171f37dp-4
++0x1.fa63324eb71a3p26
++0x1.6f50c55b7950ep-21
++-0x1.0486e73eca0d8p45
++-0x1.fa20f7947f447p-3
++0x1.0439c6fe1a62ep2
++0x1.4e5d366349911p2
++0x1.985933b0a27d6p-2
++0x1.bf592781e0417p-4
++0x1.bd39f070daca3p-4
++0x1.0130b7296f20dp0
++-0x1.299cc68ec2149p2
++-0x1.6d9fc7a6e0946p0
++0x1.b42110fb94ad0p31
++0x1.b59970f83df8ep1
++0x1.c4083529ddeb8p38
++0x1.ac3bb44cafe59p1
++0x1.6d66733b81b71p-11
++0x1.20beb78f7ceeep-16
++0x1.d285f704a02d5p-4
++0x1.bf37a3dc305b1p37
++-0x1.8852a20307706p1
++0x1.8129a11b33c67p31
++0x1.1b31565ac4d26p38
++0x1.efe3d79df1a25p0
++-0x1.df4fc61097087p34
++-0x1.801e6310f70c4p1
++0x1.de7fc178da718p1
++0x1.82cd96b74c33bp-3
++0x1.14ce177c73acbp2
++-0x1.b8bfa6f20bf6cp-4
++0x1.04ff06087395bp-9
++-0x1.8327b171d58abp-4
++-0x1.8cabe7b5327bap-3
++-0x1.82c492035cf5bp24
++-0x1.d85a267d87555p-24
++-0x1.efdc44b7fb121p24
++0x1.ea99c6cf2fd74p-17
++0x1.3fb6671f607b1p1
++0x1.97dce09249de2p-3
++-0x1.9dc4f0331f52cp43
++0x1.ea7d727d27334p41
++-0x1.ec9d516a85c75p-25
++-0x1.bb2176abaedd1p-3
++-0x1.71eeb273dd3adp-15
++-0x1.7be385146ccdep25
++0x1.c1f987ad8af62p-6
++0x1.2159279f1c89ap2
++-0x1.4805b43babc89p-17
++-0x1.c16834d0d845ap-20
++0x1.c52f537caeb0ep10
++0x1.14d5e5a6c66f8p52
++0x1.2f929423ad32fp0
++0x1.e9ce62b513428p-4
++-0x1.8a14f3724eb37p32
++0x1.64013151734fdp3
++-0x1.9090f39f49889p23
++0x1.be6b47a137a52p-12
++0x1.59a42749fd7c3p1
++0x1.8603f544b0976p-15
++-0x1.4d2ba3dfaeb93p-2
++-0x1.7d770619d5bc3p12
++0x1.edfb87aaee9b1p1
++-0x1.f23d94e870be7p-4
++-0x1.21500514f25d3p41
++0x1.cb8712f937eedp-15
++0x1.fb47c7a69d8a4p-24
++0x1.f1c904cd2e471p-12
++-0x1.31e6e3b7073f8p0
++-0x1.facd32a72c5a8p2
++-0x1.9823a41a9780ap-3
++0x1.3db1f5e2a9a51p51
++0x1.6344057f1cca6p-1
++-0x1.8be6128041ebfp-13
++0x1.6f07c272d7fe9p38
++-0x1.fd48060bf89bfp-5
++-0x1.82eb1727ca16ep-2
++0x1.26e0a24f2ec11p-18
++-0x1.74a1c0cb9d677p-14
++-0x1.bb0c36f1bb121p0
++-0x1.56a4873461187p1
++-0x1.d01e65e325d8dp2
++-0x1.5250308bc28a5p36
++-0x1.83c6f31f2de0fp-24
++-0x1.41ae76e29ab40p1
++-0x1.d738a56bac094p1
++0x1.1a5247926ba82p-14
++0x1.d703938b24ac4p-22
++-0x1.cc5566621df4fp-4
++-0x1.4144e3f175873p-4
++0x1.a41e208bd59c2p-4
++-0x1.8588a53e4e022p8
++0x1.cf4331e97df52p-27
++-0x1.d70843f5b2a7bp-8
++-0x1.b1a912cdf744ep-3
++0x1.ad44072bba2efp-15
++-0x1.735cf794885b0p25
++-0x1.94d98257a7443p-4
++-0x1.61dac14e8c1f2p1
++0x1.f71585bdc20e7p-20
++-0x1.3338f2e1ebed7p-2
++-0x1.044ab29dd3fd8p-1
++0x1.b230868e79405p-25
++0x1.c3539439a1ce3p15
++-0x1.2998d58d65498p-4
++0x1.7273d75dd90f5p0
++-0x1.6214d3e6a209fp32
++-0x1.3b2aa66ea6fd8p-3
++-0x1.6cc910ca7817ap-4
++-0x1.1194f4be56f5bp28
++-0x1.6dc3114d423c9p2
++-0x1.b447e098a3c6fp18
++-0x1.705865523468cp15
++-0x1.8e6752f060479p38
++-0x1.ebe665ab9b23ap3
++0x1.df6ee1073afd0p32
++-0x1.35ce11e0f4a42p5
++0x1.7c26f0a48edd9p-3
++0x1.af1996c678e0dp28
++0x1.c4ea4704b4de2p2
++0x1.697b37d6b070dp19
++0x1.49fa574ba1eccp52
++-0x1.695ee7cc1ce8ep48
++-0x1.169c757dd823dp-23
++0x1.207273ac379a1p-4
++0x1.7c2dc5c85d916p23
++0x1.fe02e67c4ccbfp-24
++0x1.accc401e13286p49
++-0x1.af3426c709c78p-18
++-0x1.ab2ca07faba33p-4
++0x1.aeaaf4f90a9c1p-4
++-0x1.84f781f4efe2cp-9
++-0x1.d885871aa2240p-9
++-0x1.a618720ac58c4p-22
++-0x1.9b995257a7ee5p-6
++-0x1.f68b46a30839ep-18
++0x1.e1443653f9257p3
++0x1.ce1a94d5c772cp-22
++0x1.b24255d0a3ce2p38
++0x1.2eaa6690d786ep2
++0x1.b5bb45a608da6p0
++-0x1.ead7509b0d69ep26
++0x1.86fa30e0b406ep3
++-0x1.acd451c3cb8b6p49
++# atan slow path with 144bit precision
++# Implemented in sysdeps/ieee754/dbl-64/mpatan.c
++## name: 144bits
++0x1.000000c5cba87p0
++0x1.000001883003bp0
++0x1.00000dfb2b675p0
+diff -urN glibc-2.17-c758a686/benchtests/bench-bcopy.c glibc-2.17-c758a686/benchtests/bench-bcopy.c
+--- glibc-2.17-c758a686/benchtests/bench-bcopy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-bcopy.c	2015-06-20 21:22:16.296458135 -0400
+@@ -0,0 +1,20 @@
++/* Measure bcopy functions.
++   Copyright (C) 2013 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 TEST_BCOPY
++#include "bench-memmove.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-bzero.c glibc-2.17-c758a686/benchtests/bench-bzero.c
+--- glibc-2.17-c758a686/benchtests/bench-bzero.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-bzero.c	2015-06-20 21:22:16.296458135 -0400
+@@ -0,0 +1,19 @@
++/* Measure bzero functions.
++   Copyright (C) 2013 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 TEST_BZERO
++#include "bench-memset.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-malloc-thread.c glibc-2.17-c758a686/benchtests/bench-malloc-thread.c
+--- glibc-2.17-c758a686/benchtests/bench-malloc-thread.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-malloc-thread.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,302 @@
++/* Benchmark malloc and free functions.
++   Copyright (C) 2013-2015 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 <math.h>
++#include <pthread.h>
++#include <signal.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <sys/time.h>
++#include <sys/resource.h>
++#include <unistd.h>
++
++#include "bench-timing.h"
++#include "json-lib.h"
++
++/* Benchmark duration in seconds.  */
++#define BENCHMARK_DURATION	60
++#define RAND_SEED		88
++
++#ifndef NUM_THREADS
++# define NUM_THREADS 1
++#endif
++
++/* Maximum memory that can be allocated at any one time is:
++
++   NUM_THREADS * WORKING_SET_SIZE * MAX_ALLOCATION_SIZE
++
++   However due to the distribution of the random block sizes
++   the typical amount allocated will be much smaller.  */
++#define WORKING_SET_SIZE	1024
++
++#define MIN_ALLOCATION_SIZE	4
++#define MAX_ALLOCATION_SIZE	32768
++
++/* Get a random block size with an inverse square distribution.  */
++static unsigned int
++get_block_size (unsigned int rand_data)
++{
++  /* Inverse square.  */
++  const float exponent = -2;
++  /* Minimum value of distribution.  */
++  const float dist_min = MIN_ALLOCATION_SIZE;
++  /* Maximum value of distribution.  */
++  const float dist_max = MAX_ALLOCATION_SIZE;
++
++  float min_pow = powf (dist_min, exponent + 1);
++  float max_pow = powf (dist_max, exponent + 1);
++
++  float r = (float) rand_data / RAND_MAX;
++
++  return (unsigned int) powf ((max_pow - min_pow) * r + min_pow,
++			      1 / (exponent + 1));
++}
++
++#define NUM_BLOCK_SIZES	8000
++#define NUM_OFFSETS	((WORKING_SET_SIZE) * 4)
++
++static unsigned int random_block_sizes[NUM_BLOCK_SIZES];
++static unsigned int random_offsets[NUM_OFFSETS];
++
++static void
++init_random_values (void)
++{
++  for (size_t i = 0; i < NUM_BLOCK_SIZES; i++)
++    random_block_sizes[i] = get_block_size (rand ());
++
++  for (size_t i = 0; i < NUM_OFFSETS; i++)
++    random_offsets[i] = rand () % WORKING_SET_SIZE;
++}
++
++static unsigned int
++get_random_block_size (unsigned int *state)
++{
++  unsigned int idx = *state;
++
++  if (idx >= NUM_BLOCK_SIZES - 1)
++    idx = 0;
++  else
++    idx++;
++
++  *state = idx;
++
++  return random_block_sizes[idx];
++}
++
++static unsigned int
++get_random_offset (unsigned int *state)
++{
++  unsigned int idx = *state;
++
++  if (idx >= NUM_OFFSETS - 1)
++    idx = 0;
++  else
++    idx++;
++
++  *state = idx;
++
++  return random_offsets[idx];
++}
++
++static volatile bool timeout;
++
++static void
++alarm_handler (int signum)
++{
++  timeout = true;
++}
++
++/* Allocate and free blocks in a random order.  */
++static size_t
++malloc_benchmark_loop (void **ptr_arr)
++{
++  unsigned int offset_state = 0, block_state = 0;
++  size_t iters = 0;
++
++  while (!timeout)
++    {
++      unsigned int next_idx = get_random_offset (&offset_state);
++      unsigned int next_block = get_random_block_size (&block_state);
++
++      free (ptr_arr[next_idx]);
++
++      ptr_arr[next_idx] = malloc (next_block);
++
++      iters++;
++    }
++
++  return iters;
++}
++
++struct thread_args
++{
++  size_t iters;
++  void **working_set;
++  timing_t elapsed;
++};
++
++static void *
++benchmark_thread (void *arg)
++{
++  struct thread_args *args = (struct thread_args *) arg;
++  size_t iters;
++  void *thread_set = args->working_set;
++  timing_t start, stop;
++
++  TIMING_NOW (start);
++  iters = malloc_benchmark_loop (thread_set);
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (args->elapsed, start, stop);
++  args->iters = iters;
++
++  return NULL;
++}
++
++static timing_t
++do_benchmark (size_t num_threads, size_t *iters)
++{
++  timing_t elapsed = 0;
++
++  if (num_threads == 1)
++    {
++      timing_t start, stop;
++      void *working_set[WORKING_SET_SIZE];
++
++      memset (working_set, 0, sizeof (working_set));
++
++      TIMING_NOW (start);
++      *iters = malloc_benchmark_loop (working_set);
++      TIMING_NOW (stop);
++
++      TIMING_DIFF (elapsed, start, stop);
++    }
++  else
++    {
++      struct thread_args args[num_threads];
++      void *working_set[num_threads][WORKING_SET_SIZE];
++      pthread_t threads[num_threads];
++
++      memset (working_set, 0, sizeof (working_set));
++
++      *iters = 0;
++
++      for (size_t i = 0; i < num_threads; i++)
++	{
++	  args[i].working_set = working_set[i];
++	  pthread_create(&threads[i], NULL, benchmark_thread, &args[i]);
++	}
++
++      for (size_t i = 0; i < num_threads; i++)
++	{
++	  pthread_join(threads[i], NULL);
++	  TIMING_ACCUM (elapsed, args[i].elapsed);
++	  *iters += args[i].iters;
++	}
++    }
++  return elapsed;
++}
++
++static void usage(const char *name)
++{
++  fprintf (stderr, "%s: <num_threads>\n", name);
++  exit (1);
++}
++
++int
++main (int argc, char **argv)
++{
++  timing_t cur;
++  size_t iters = 0, num_threads = 1;
++  unsigned long res;
++  json_ctx_t json_ctx;
++  double d_total_s, d_total_i;
++  struct sigaction act;
++
++  if (argc == 1)
++    num_threads = 1;
++  else if (argc == 2)
++    {
++      long ret;
++
++      errno = 0;
++      ret = strtol(argv[1], NULL, 10);
++
++      if (errno || ret == 0)
++	usage(argv[0]);
++
++      num_threads = ret;
++    }
++  else
++    usage(argv[0]);
++
++  init_random_values ();
++
++  json_init (&json_ctx, 0, stdout);
++
++  json_document_begin (&json_ctx);
++
++  json_attr_string (&json_ctx, "timing_type", TIMING_TYPE);
++
++  json_attr_object_begin (&json_ctx, "functions");
++
++  json_attr_object_begin (&json_ctx, "malloc");
++
++  json_attr_object_begin (&json_ctx, "");
++
++  TIMING_INIT (res);
++
++  (void) res;
++
++  memset (&act, 0, sizeof (act));
++  act.sa_handler = &alarm_handler;
++
++  sigaction (SIGALRM, &act, NULL);
++
++  alarm (BENCHMARK_DURATION);
++
++  cur = do_benchmark (num_threads, &iters);
++
++  struct rusage usage;
++  getrusage(RUSAGE_SELF, &usage);
++
++  d_total_s = cur;
++  d_total_i = iters;
++
++  json_attr_double (&json_ctx, "duration", d_total_s);
++  json_attr_double (&json_ctx, "iterations", d_total_i);
++  json_attr_double (&json_ctx, "time_per_iteration", d_total_s / d_total_i);
++  json_attr_double (&json_ctx, "max_rss", usage.ru_maxrss);
++
++  json_attr_double (&json_ctx, "threads", num_threads);
++  json_attr_double (&json_ctx, "min_size", MIN_ALLOCATION_SIZE);
++  json_attr_double (&json_ctx, "max_size", MAX_ALLOCATION_SIZE);
++  json_attr_double (&json_ctx, "random_seed", RAND_SEED);
++
++  json_attr_object_end (&json_ctx);
++
++  json_attr_object_end (&json_ctx);
++
++  json_attr_object_end (&json_ctx);
++
++  json_document_end (&json_ctx);
++
++  return 0;
++}
+diff -urN glibc-2.17-c758a686/benchtests/bench-memccpy.c glibc-2.17-c758a686/benchtests/bench-memccpy.c
+--- glibc-2.17-c758a686/benchtests/bench-memccpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memccpy.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,163 @@
++/* Measure memccpy functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "memccpy"
++#include "bench-string.h"
++
++void *simple_memccpy (void *, const void *, int, size_t);
++void *stupid_memccpy (void *, const void *, int, size_t);
++
++IMPL (stupid_memccpy, 0)
++IMPL (simple_memccpy, 0)
++IMPL (memccpy, 1)
++
++void *
++simple_memccpy (void *dst, const void *src, int c, size_t n)
++{
++  const char *s = src;
++  char *d = dst;
++
++  while (n-- > 0)
++    if ((*d++ = *s++) == (char) c)
++      return d;
++
++  return NULL;
++}
++
++void *
++stupid_memccpy (void *dst, const void *src, int c, size_t n)
++{
++  void *p = memchr (src, c, n);
++
++  if (p != NULL)
++    return mempcpy (dst, src, p - src + 1);
++
++  memcpy (dst, src, n);
++  return NULL;
++}
++
++typedef void *(*proto_t) (void *, const void *, int c, size_t);
++
++static void
++do_one_test (impl_t *impl, void *dst, const void *src, int c, size_t len,
++	     size_t n)
++{
++  void *expect = len > n ? NULL : (char *) dst + len;
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (CALL (impl, dst, src, c, n) != expect)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     CALL (impl, dst, src, c, n), expect);
++      ret = 1;
++      return;
++    }
++
++  if (memcmp (dst, src, len > n ? n : len) != 0)
++    {
++      error (0, 0, "Wrong result in function %s", impl->name);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, dst, src, c, n);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, int c, size_t len, size_t n,
++	 int max_char)
++{
++  size_t i;
++  char *s1, *s2;
++
++  align1 &= 7;
++  if (align1 + len >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len - 1; ++i)
++    {
++      s1[i] = 32 + 23 * i % (max_char - 32);
++      if (s1[i] == (char) c)
++	--s1[i];
++    }
++  s1[len - 1] = c;
++  for (i = len; i + align1 < page_size && i < len + 64; ++i)
++    s1[i] = 32 + 32 * i % (max_char - 32);
++
++  printf ("Length %4zd, n %4zd, char %d, alignment %2zd/%2zd:", len, n, c, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s2, s1, c, len, n);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%28s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, i, 12, 16, 16, 127);
++      do_test (i, i, 23, 16, 16, 255);
++      do_test (i, 2 * i, 28, 16, 16, 127);
++      do_test (2 * i, i, 31, 16, 16, 255);
++      do_test (8 - i, 2 * i, 1, 1 << i, 2 << i, 127);
++      do_test (2 * i, 8 - i, 17, 2 << i, 1 << i, 127);
++      do_test (8 - i, 2 * i, 0, 1 << i, 2 << i, 255);
++      do_test (2 * i, 8 - i, i, 2 << i, 1 << i, 255);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, i, 4 << i, 8 << i, 127);
++      do_test (0, 0, i, 16 << i, 8 << i, 127);
++      do_test (8 - i, 2 * i, i, 4 << i, 8 << i, 127);
++      do_test (8 - i, 2 * i, i, 16 << i, 8 << i, 127);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memchr.c glibc-2.17-c758a686/benchtests/bench-memchr.c
+--- glibc-2.17-c758a686/benchtests/bench-memchr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memchr.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,133 @@
++/* Measure memchr functions.
++   Copyright (C) 2013 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 USE_AS_MEMRCHR
++# define TEST_MAIN
++# define TEST_NAME "memchr"
++# include "bench-string.h"
++
++typedef char *(*proto_t) (const char *, int, size_t);
++char *simple_memchr (const char *, int, size_t);
++
++IMPL (simple_memchr, 0)
++IMPL (memchr, 1)
++
++char *
++simple_memchr (const char *s, int c, size_t n)
++{
++  while (n--)
++    if (*s++ == (char) c)
++      return (char *) s - 1;
++  return NULL;
++}
++#endif
++
++static void
++do_one_test (impl_t *impl, const char *s, int c, size_t n, char *exp_res)
++{
++  char *res = CALL (impl, s, c, n);
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (res != exp_res)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     res, exp_res);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, c, n);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t pos, size_t len, int seek_char)
++{
++  size_t i;
++  char *result;
++
++  align &= 7;
++  if (align + len >= page_size)
++    return;
++
++  for (i = 0; i < len; ++i)
++    {
++      buf1[align + i] = 1 + 23 * i % 127;
++      if (buf1[align + i] == seek_char)
++        buf1[align + i] = seek_char + 1;
++    }
++  buf1[align + len] = 0;
++
++  if (pos < len)
++    {
++      buf1[align + pos] = seek_char;
++      buf1[align + len] = -seek_char;
++      result = (char *) (buf1 + align + pos);
++    }
++  else
++    {
++      result = NULL;
++      buf1[align + len] = seek_char;
++    }
++
++  printf ("Length %4zd, alignment %2zd:", pos, align);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (char *) (buf1 + align), seek_char, len, result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 2048, 23);
++      do_test (i, 64, 256, 23);
++      do_test (0, 16 << i, 2048, 0);
++      do_test (i, 64, 256, 0);
++    }
++  for (i = 1; i < 32; ++i)
++    {
++      do_test (0, i, i + 1, 23);
++      do_test (0, i, i + 1, 0);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memcmp.c glibc-2.17-c758a686/benchtests/bench-memcmp.c
+--- glibc-2.17-c758a686/benchtests/bench-memcmp.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memcmp.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,177 @@
++/* Measure memcmp functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#ifdef WIDE
++# define TEST_NAME "wmemcmp"
++#else
++# define TEST_NAME "memcmp"
++#endif
++#include "bench-string.h"
++#ifdef WIDE
++# include <inttypes.h>
++# include <wchar.h>
++
++# define MEMCMP wmemcmp
++# define MEMCPY wmemcpy
++# define SIMPLE_MEMCMP simple_wmemcmp
++# define CHAR wchar_t
++# define UCHAR wchar_t
++# define CHARBYTES 4
++# define CHAR__MIN WCHAR_MIN
++# define CHAR__MAX WCHAR_MAX
++int
++simple_wmemcmp (const wchar_t *s1, const wchar_t *s2, size_t n)
++{
++  int ret = 0;
++  /* Warning!
++	wmemcmp has to use SIGNED comparison for elements.
++	memcmp has to use UNSIGNED comparison for elemnts.
++  */
++  while (n-- && (ret = *s1 < *s2 ? -1 : *s1 == *s2 ? 0 : 1) == 0) {s1++; s2++;}
++  return ret;
++}
++#else
++# include <limits.h>
++
++# define MEMCMP memcmp
++# define MEMCPY memcpy
++# define SIMPLE_MEMCMP simple_memcmp
++# define CHAR char
++# define MAX_CHAR 255
++# define UCHAR unsigned char
++# define CHARBYTES 1
++# define CHAR__MIN CHAR_MIN
++# define CHAR__MAX CHAR_MAX
++
++int
++simple_memcmp (const char *s1, const char *s2, size_t n)
++{
++  int ret = 0;
++
++  while (n-- && (ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) == 0);
++  return ret;
++}
++#endif
++
++typedef int (*proto_t) (const CHAR *, const CHAR *, size_t);
++
++IMPL (SIMPLE_MEMCMP, 0)
++IMPL (MEMCMP, 1)
++
++static void
++do_one_test (impl_t *impl, const CHAR *s1, const CHAR *s2, size_t len,
++	     int exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2, len);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, int exp_result)
++{
++  size_t i;
++  CHAR *s1, *s2;
++
++  if (len == 0)
++    return;
++
++  align1 &= 63;
++  if (align1 + (len + 1) * CHARBYTES >= page_size)
++    return;
++
++  align2 &= 63;
++  if (align2 + (len + 1) * CHARBYTES >= page_size)
++    return;
++
++  s1 = (CHAR *) (buf1 + align1);
++  s2 = (CHAR *) (buf2 + align2);
++
++  for (i = 0; i < len; i++)
++    s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % CHAR__MAX;
++
++  s1[len] = align1;
++  s2[len] = align2;
++  s2[len - 1] -= exp_result;
++
++  printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, len, exp_result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 16; ++i)
++    {
++      do_test (i * CHARBYTES, i * CHARBYTES, i, 0);
++      do_test (i * CHARBYTES, i * CHARBYTES, i, 1);
++      do_test (i * CHARBYTES, i * CHARBYTES, i, -1);
++    }
++
++  for (i = 0; i < 16; ++i)
++    {
++      do_test (0, 0, i, 0);
++      do_test (0, 0, i, 1);
++      do_test (0, 0, i, -1);
++    }
++
++  for (i = 1; i < 10; ++i)
++    {
++      do_test (0, 0, 2 << i, 0);
++      do_test (0, 0, 2 << i, 1);
++      do_test (0, 0, 2 << i, -1);
++      do_test (0, 0, 16 << i, 0);
++      do_test ((8 - i) * CHARBYTES, (2 * i) * CHARBYTES, 16 << i, 0);
++      do_test (0, 0, 16 << i, 1);
++      do_test (0, 0, 16 << i, -1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i * CHARBYTES, 2 * (i * CHARBYTES), 8 << i, 0);
++      do_test (i * CHARBYTES, 2 * (i * CHARBYTES), 8 << i, 1);
++      do_test (i * CHARBYTES, 2 * (i * CHARBYTES), 8 << i, -1);
++    }
++
++  return ret;
++}
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memcpy.c glibc-2.17-c758a686/benchtests/bench-memcpy.c
+--- glibc-2.17-c758a686/benchtests/bench-memcpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memcpy.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,157 @@
++/* Measure memcpy functions.
++   Copyright (C) 2013 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 MEMCPY_RESULT
++# define MEMCPY_RESULT(dst, len) dst
++# define MIN_PAGE_SIZE 131072
++# define TEST_MAIN
++# define TEST_NAME "memcpy"
++# include "bench-string.h"
++
++char *simple_memcpy (char *, const char *, size_t);
++char *builtin_memcpy (char *, const char *, size_t);
++
++IMPL (simple_memcpy, 0)
++IMPL (builtin_memcpy, 0)
++IMPL (memcpy, 1)
++
++char *
++simple_memcpy (char *dst, const char *src, size_t n)
++{
++  char *ret = dst;
++  while (n--)
++    *dst++ = *src++;
++  return ret;
++}
++
++char *
++builtin_memcpy (char *dst, const char *src, size_t n)
++{
++  return __builtin_memcpy (dst, src, n);
++}
++#endif
++
++typedef char *(*proto_t) (char *, const char *, size_t);
++
++static void
++do_one_test (impl_t *impl, char *dst, const char *src,
++	     size_t len)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (CALL (impl, dst, src, len) != MEMCPY_RESULT (dst, len))
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     CALL (impl, dst, src, len), MEMCPY_RESULT (dst, len));
++      ret = 1;
++      return;
++    }
++
++  if (memcmp (dst, src, len) != 0)
++    {
++      error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
++	     impl->name, dst, src);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, dst, src, len);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len)
++{
++  size_t i, j;
++  char *s1, *s2;
++
++  align1 &= 63;
++  if (align1 + len >= page_size)
++    return;
++
++  align2 &= 63;
++  if (align2 + len >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0, j = 1; i < len; i++, j += 23)
++    s1[i] = j;
++
++  printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s2, s1, len);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 18; ++i)
++    {
++      do_test (0, 0, 1 << i);
++      do_test (i, 0, 1 << i);
++      do_test (0, i, 1 << i);
++      do_test (i, i, 1 << i);
++    }
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, 0, i);
++      do_test (i, 0, i);
++      do_test (0, i, i);
++      do_test (i, i, i);
++    }
++
++  for (i = 3; i < 32; ++i)
++    {
++      if ((i & (i - 1)) == 0)
++	continue;
++      do_test (0, 0, 16 * i);
++      do_test (i, 0, 16 * i);
++      do_test (0, i, 16 * i);
++      do_test (i, i, 16 * i);
++    }
++
++  do_test (0, 0, getpagesize ());
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memmem.c glibc-2.17-c758a686/benchtests/bench-memmem.c
+--- glibc-2.17-c758a686/benchtests/bench-memmem.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memmem.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,164 @@
++/* Measure memmem functions.
++   Copyright (C) 2013-2015 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 TEST_MAIN
++#define TEST_NAME "memmem"
++#define BUF1PAGES 20
++#define ITERATIONS 500
++#include "bench-string.h"
++
++typedef char *(*proto_t) (const void *, size_t, const void *, size_t);
++void *simple_memmem (const void *, size_t, const void *, size_t);
++
++IMPL (simple_memmem, 0)
++IMPL (memmem, 1)
++
++void *
++simple_memmem (const void *haystack, size_t haystack_len, const void *needle,
++	       size_t needle_len)
++{
++  const char *begin;
++  const char *const last_possible
++    = (const char *) haystack + haystack_len - needle_len;
++
++  if (needle_len == 0)
++    /* The first occurrence of the empty string is deemed to occur at
++       the beginning of the string.  */
++    return (void *) haystack;
++
++  /* Sanity check, otherwise the loop might search through the whole
++     memory.  */
++  if (__glibc_unlikely (haystack_len < needle_len))
++    return NULL;
++
++  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
++    if (begin[0] == ((const char *) needle)[0] &&
++	!memcmp ((const void *) &begin[1],
++		 (const void *) ((const char *) needle + 1),
++		 needle_len - 1))
++      return (void *) begin;
++
++  return NULL;
++}
++
++static void
++do_one_test (impl_t *impl, const void *haystack, size_t haystack_len,
++	     const void *needle, size_t needle_len, const void *expected)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, haystack, haystack_len, needle, needle_len);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (const char *str, size_t len, size_t idx)
++{
++  char tmpbuf[len];
++
++  memcpy (tmpbuf, buf1 + idx, len);
++  memcpy (buf1 + idx, str, len);
++
++  printf ("String %s, offset %zd:", str, idx);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, buf1, BUF1PAGES * page_size, str, len, buf1 + idx);
++
++  memcpy (buf1 + idx, tmpbuf, len);
++
++  putchar ('\n');
++}
++
++static void
++do_random_tests (void)
++{
++  for (size_t n = 0; n < ITERATIONS; ++n)
++    {
++      char tmpbuf[32];
++
++      size_t shift = random () % 11;
++      size_t rel = random () % ((2 << (shift + 1)) * 64);
++      size_t idx = MIN ((2 << shift) * 64 + rel, BUF1PAGES * page_size - 2);
++      size_t len = random () % (sizeof (tmpbuf) - 1) + 1;
++      len = MIN (len, BUF1PAGES * page_size - idx - 1);
++      memcpy (tmpbuf, buf1 + idx, len);
++      for (size_t i = random () % len / 2 + 1; i > 0; --i)
++	{
++	  size_t off = random () % len;
++	  char ch = '0' + random () % 10;
++
++	  buf1[idx + off] = ch;
++	}
++
++      printf ("String %.*s, offset %zd:", (int) len, buf1 + idx, idx);
++
++      FOR_EACH_IMPL (impl, 0)
++	do_one_test (impl, buf1, BUF1PAGES * page_size, buf1 + idx, len,
++		     buf1 + idx);
++
++      putchar ('\n');
++
++      memcpy (buf1 + idx, tmpbuf, len);
++    }
++}
++
++static const char *const strs[] =
++  {
++    "00000", "00112233", "0123456789", "0000111100001111",
++    "00000111110000022222", "012345678901234567890",
++    "abc0", "aaaa0", "abcabc0"
++  };
++
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < BUF1PAGES * page_size; ++i)
++    buf1[i] = 60 + random () % 32;
++
++  for (i = 0; i < sizeof (strs) / sizeof (strs[0]); ++i)
++    for (size_t j = 0; j < 120; j += 7)
++      {
++	size_t len = strlen (strs[i]);
++
++	do_test (strs[i], len, j);
++      }
++
++  do_random_tests ();
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memmove.c glibc-2.17-c758a686/benchtests/bench-memmove.c
+--- glibc-2.17-c758a686/benchtests/bench-memmove.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memmove.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,182 @@
++/* Measure memmove functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#ifdef TEST_BCOPY
++# define TEST_NAME "bcopy"
++#else
++# define TEST_NAME "memmove"
++#endif
++#include "bench-string.h"
++
++char *simple_memmove (char *, const char *, size_t);
++
++#ifdef TEST_BCOPY
++typedef void (*proto_t) (const char *, char *, size_t);
++void simple_bcopy (const char *, char *, size_t);
++
++IMPL (simple_bcopy, 0)
++IMPL (bcopy, 1)
++
++void
++simple_bcopy (const char *src, char *dst, size_t n)
++{
++  simple_memmove (dst, src, n);
++}
++#else
++typedef char *(*proto_t) (char *, const char *, size_t);
++
++IMPL (simple_memmove, 0)
++IMPL (memmove, 1)
++#endif
++
++char *
++inhibit_loop_to_libcall
++simple_memmove (char *dst, const char *src, size_t n)
++{
++  char *ret = dst;
++  if (src < dst)
++    {
++      dst += n;
++      src += n;
++      while (n--)
++	*--dst = *--src;
++    }
++  else
++    while (n--)
++      *dst++ = *src++;
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, char *dst, char *src, const char *orig_src,
++	     size_t len)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  memcpy (src, orig_src, len);
++#ifdef TEST_BCOPY
++  CALL (impl, src, dst, len);
++#else
++  char *res;
++
++  res = CALL (impl, dst, src, len);
++  if (res != dst)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     res, dst);
++      ret = 1;
++      return;
++    }
++#endif
++
++  if (memcmp (dst, orig_src, len) != 0)
++    {
++      error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
++	     impl->name, dst, src);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++#ifdef TEST_BCOPY
++      CALL (impl, src, dst, len);
++#else
++      CALL (impl, dst, src, len);
++#endif
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len)
++{
++  size_t i, j;
++  char *s1, *s2;
++
++  align1 &= 63;
++  if (align1 + len >= page_size)
++    return;
++
++  align2 &= 63;
++  if (align2 + len >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0, j = 1; i < len; i++, j += 23)
++    s1[i] = j;
++
++  printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s2, (char *) (buf2 + align1), s1, len);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 14; ++i)
++    {
++      do_test (0, 32, 1 << i);
++      do_test (32, 0, 1 << i);
++      do_test (0, i, 1 << i);
++      do_test (i, 0, 1 << i);
++    }
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, 32, i);
++      do_test (32, 0, i);
++      do_test (0, i, i);
++      do_test (i, 0, i);
++    }
++
++  for (i = 3; i < 32; ++i)
++    {
++      if ((i & (i - 1)) == 0)
++	continue;
++      do_test (0, 32, 16 * i);
++      do_test (32, 0, 16 * i);
++      do_test (0, i, 16 * i);
++      do_test (i, 0, 16 * i);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-mempcpy.c glibc-2.17-c758a686/benchtests/bench-mempcpy.c
+--- glibc-2.17-c758a686/benchtests/bench-mempcpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-mempcpy.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,37 @@
++/* Measure mempcpy functions.
++   Copyright (C) 2013 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 MEMCPY_RESULT(dst, len) (dst) + (len)
++#define TEST_MAIN
++#define TEST_NAME "mempcpy"
++#include "bench-string.h"
++
++char *simple_mempcpy (char *, const char *, size_t);
++
++IMPL (simple_mempcpy, 0)
++IMPL (mempcpy, 1)
++
++char *
++simple_mempcpy (char *dst, const char *src, size_t n)
++{
++  while (n--)
++    *dst++ = *src++;
++  return dst;
++}
++
++#include "bench-memcpy.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memrchr.c glibc-2.17-c758a686/benchtests/bench-memrchr.c
+--- glibc-2.17-c758a686/benchtests/bench-memrchr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memrchr.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,40 @@
++/* Measure memrchr functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "memrchr"
++#include "bench-string.h"
++
++typedef char *(*proto_t) (const char *, int, size_t);
++char *simple_memrchr (const char *, int, size_t);
++
++IMPL (simple_memrchr, 0)
++IMPL (memrchr, 1)
++
++char *
++simple_memrchr (const char *s, int c, size_t n)
++{
++  s = s + n;
++  while (n--)
++    if (*--s == (char) c)
++      return (char *) s;
++  return NULL;
++}
++
++#define USE_AS_MEMRCHR
++#include "bench-memchr.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-memset.c glibc-2.17-c758a686/benchtests/bench-memset.c
+--- glibc-2.17-c758a686/benchtests/bench-memset.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-memset.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,167 @@
++/* Measure memset functions.
++   Copyright (C) 2013-2015 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 TEST_MAIN
++#ifdef TEST_BZERO
++# define TEST_NAME "bzero"
++#else
++# define TEST_NAME "memset"
++#endif
++#define MIN_PAGE_SIZE 131072
++#include "bench-string.h"
++
++char *simple_memset (char *, int, size_t);
++
++#ifdef TEST_BZERO
++typedef void (*proto_t) (char *, size_t);
++void simple_bzero (char *, size_t);
++void builtin_bzero (char *, size_t);
++
++IMPL (simple_bzero, 0)
++IMPL (builtin_bzero, 0)
++IMPL (bzero, 1)
++
++void
++simple_bzero (char *s, size_t n)
++{
++  simple_memset (s, 0, n);
++}
++
++void
++builtin_bzero (char *s, size_t n)
++{
++  __builtin_bzero (s, n);
++}
++#else
++typedef char *(*proto_t) (char *, int, size_t);
++char *builtin_memset (char *, int, size_t);
++
++IMPL (simple_memset, 0)
++IMPL (builtin_memset, 0)
++IMPL (memset, 1)
++
++char *
++builtin_memset (char *s, int c, size_t n)
++{
++  return __builtin_memset (s, c, n);
++}
++#endif
++
++char *
++inhibit_loop_to_libcall
++simple_memset (char *s, int c, size_t n)
++{
++  char *r = s, *end = s + n;
++  while (r < end)
++    *r++ = c;
++  return s;
++}
++
++static void
++do_one_test (impl_t *impl, char *s, int c __attribute ((unused)), size_t n)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++  char tstbuf[n];
++#ifdef TEST_BZERO
++  simple_bzero (tstbuf, n);
++  CALL (impl, s, n);
++  if (memcmp (s, tstbuf, n) != 0)
++#else
++  char *res = CALL (impl, s, c, n);
++  if (res != s
++      || simple_memset (tstbuf, c, n) != tstbuf
++      || memcmp (s, tstbuf, n) != 0)
++#endif
++    {
++      error (0, 0, "Wrong result in function %s", impl->name);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++#ifdef TEST_BZERO
++      CALL (impl, s, n);
++#else
++      CALL (impl, s, c, n);
++#endif
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, int c, size_t len)
++{
++  align &= 7;
++  if (align + len > page_size)
++    return;
++
++  printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (char *) buf1 + align, c, len);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++  int c = 0;
++
++  test_init ();
++
++  printf ("%24s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++#ifndef TEST_BZERO
++  for (c = -65; c <= 130; c += 65)
++#endif
++    {
++      for (i = 0; i < 18; ++i)
++	do_test (0, c, 1 << i);
++      for (i = 1; i < 32; ++i)
++	{
++	  do_test (i, c, i);
++	  if (i & (i - 1))
++	    do_test (0, c, i);
++	}
++      for (i = 32; i < 512; i+=32)
++	{
++	  do_test (0, c, i);
++	  do_test (i, c, i);
++	}
++      do_test (1, c, 14);
++      do_test (3, c, 1024);
++      do_test (4, c, 64);
++      do_test (2, c, 25);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-rawmemchr.c glibc-2.17-c758a686/benchtests/bench-rawmemchr.c
+--- glibc-2.17-c758a686/benchtests/bench-rawmemchr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-rawmemchr.c	2015-06-20 21:22:16.297458105 -0400
+@@ -0,0 +1,126 @@
++/* Measure memchr functions.
++   Copyright (C) 2013 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>
++
++#define TEST_MAIN
++#define TEST_NAME "rawmemchr"
++#include "bench-string.h"
++
++typedef char *(*proto_t) (const char *, int);
++char *simple_rawmemchr (const char *, int);
++
++IMPL (simple_rawmemchr, 0)
++IMPL (rawmemchr, 1)
++
++char *
++simple_rawmemchr (const char *s, int c)
++{
++  while (1)
++    if (*s++ == (char) c)
++      return (char *) s - 1;
++  return NULL;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s, int c, char *exp_res)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++  char *res = CALL (impl, s, c);
++  if (res != exp_res)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     res, exp_res);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, c);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t pos, size_t len, int seek_char)
++{
++  size_t i;
++  char *result;
++
++  align &= 7;
++  if (align + len >= page_size)
++    return;
++
++  for (i = 0; i < len; ++i)
++    {
++      buf1[align + i] = 1 + 23 * i % 127;
++      if (buf1[align + i] == seek_char)
++	buf1[align + i] = seek_char + 1;
++    }
++  buf1[align + len] = 0;
++
++  assert (pos < len);
++
++  buf1[align + pos] = seek_char;
++  buf1[align + len] = -seek_char;
++  result = (char *) (buf1 + align + pos);
++
++  printf ("Length %4zd, alignment %2zd:", pos, align);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (char *) (buf1 + align), seek_char, result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 7; ++i)
++    {
++      do_test (0, 16 << i, 2048, 23);
++      do_test (i, 64, 256, 23);
++      do_test (0, 16 << i, 2048, 0);
++      do_test (i, 64, 256, 0);
++    }
++  for (i = 1; i < 32; ++i)
++    {
++      do_test (0, i, i + 1, 23);
++      do_test (0, i, i + 1, 0);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-skeleton.c glibc-2.17-c758a686/benchtests/bench-skeleton.c
+--- glibc-2.17-c758a686/benchtests/bench-skeleton.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-skeleton.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,154 @@
++/* Skeleton for benchmark programs.
++   Copyright (C) 2013 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 <string.h>
++#include <stdint.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <time.h>
++#include <inttypes.h>
++#include "bench-timing.h"
++#include "json-lib.h"
++
++volatile unsigned int dontoptimize = 0;
++
++void
++startup (void)
++{
++  /* This loop should cause CPU to switch to maximal freqency.
++     This makes subsequent measurement more accurate.  We need a side effect
++     to prevent the loop being deleted by compiler.
++     This should be enough to cause CPU to speed up and it is simpler than
++     running loop for constant time. This is used when user does not have root
++     access to set a constant freqency.  */
++  for (int k = 0; k < 10000000; k++)
++    dontoptimize += 23 * dontoptimize + 2;
++}
++
++#define TIMESPEC_AFTER(a, b) \
++  (((a).tv_sec == (b).tv_sec) ?						      \
++     ((a).tv_nsec > (b).tv_nsec) :					      \
++	((a).tv_sec > (b).tv_sec))
++int
++main (int argc, char **argv)
++{
++  unsigned long i, k;
++  struct timespec runtime;
++  timing_t start, end;
++  bool detailed = false;
++  json_ctx_t json_ctx;
++
++  if (argc == 2 && !strcmp (argv[1], "-d"))
++    detailed = true;
++
++  startup();
++
++  memset (&runtime, 0, sizeof (runtime));
++
++  unsigned long iters, res;
++
++#ifdef BENCH_INIT
++  BENCH_INIT ();
++#endif
++  TIMING_INIT (res);
++
++  iters = 1000 * res;
++
++  json_init (&json_ctx, 2, stdout);
++
++  /* Begin function.  */
++  json_attr_object_begin (&json_ctx, FUNCNAME);
++
++  for (int v = 0; v < NUM_VARIANTS; v++)
++    {
++      /* Run for approximately DURATION seconds.  */
++      clock_gettime (CLOCK_MONOTONIC_RAW, &runtime);
++      runtime.tv_sec += DURATION;
++
++      double d_total_i = 0;
++      timing_t total = 0, max = 0, min = 0x7fffffffffffffff;
++      int64_t c = 0;
++      while (1)
++	{
++	  for (i = 0; i < NUM_SAMPLES (v); i++)
++	    {
++	      uint64_t cur;
++	      TIMING_NOW (start);
++	      for (k = 0; k < iters; k++)
++		BENCH_FUNC (v, i);
++	      TIMING_NOW (end);
++
++	      TIMING_DIFF (cur, start, end);
++
++	      if (cur > max)
++		max = cur;
++
++	      if (cur < min)
++		min = cur;
++
++	      TIMING_ACCUM (total, cur);
++	      /* Accumulate timings for the value.  In the end we will divide
++	         by the total iterations.  */
++	      RESULT_ACCUM (cur, v, i, c * iters, (c + 1) * iters);
++
++	      d_total_i += iters;
++	    }
++	  c++;
++	  struct timespec curtime;
++
++	  memset (&curtime, 0, sizeof (curtime));
++	  clock_gettime (CLOCK_MONOTONIC_RAW, &curtime);
++	  if (TIMESPEC_AFTER (curtime, runtime))
++	    goto done;
++	}
++
++      double d_total_s;
++      double d_iters;
++
++    done:
++      d_total_s = total;
++      d_iters = iters;
++
++      /* Begin variant.  */
++      json_attr_object_begin (&json_ctx, VARIANT (v));
++
++      json_attr_double (&json_ctx, "duration", d_total_s);
++      json_attr_double (&json_ctx, "iterations", d_total_i);
++      json_attr_double (&json_ctx, "max", max / d_iters);
++      json_attr_double (&json_ctx, "min", min / d_iters);
++      json_attr_double (&json_ctx, "mean", d_total_s / d_total_i);
++
++      if (detailed)
++	{
++	  json_array_begin (&json_ctx, "timings");
++
++	  for (int i = 0; i < NUM_SAMPLES (v); i++)
++	    json_element_double (&json_ctx, RESULT (v, i));
++
++	  json_array_end (&json_ctx);
++	}
++
++      /* End variant.  */
++      json_attr_object_end (&json_ctx);
++    }
++
++  /* End function.  */
++  json_attr_object_end (&json_ctx);
++
++  return 0;
++}
+diff -urN glibc-2.17-c758a686/benchtests/bench-stpcpy.c glibc-2.17-c758a686/benchtests/bench-stpcpy.c
+--- glibc-2.17-c758a686/benchtests/bench-stpcpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-stpcpy.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,36 @@
++/* Measure stpcpy functions.
++   Copyright (C) 2013 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 STRCPY_RESULT(dst, len) ((dst) + (len))
++#define TEST_MAIN
++#define TEST_NAME "stpcpy"
++#include "bench-string.h"
++
++char *simple_stpcpy (char *, const char *);
++
++IMPL (simple_stpcpy, 0)
++IMPL (stpcpy, 1)
++
++char *
++simple_stpcpy (char *dst, const char *src)
++{
++  while ((*dst++ = *src++) != '\0');
++  return dst - 1;
++}
++
++#include "bench-strcpy.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-stpcpy_chk.c glibc-2.17-c758a686/benchtests/bench-stpcpy_chk.c
+--- glibc-2.17-c758a686/benchtests/bench-stpcpy_chk.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-stpcpy_chk.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,45 @@
++/* Measure stpcpy checking functions.
++   Copyright (C) 2013 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 STRCPY_RESULT(dst, len) ((dst) + (len))
++#define TEST_MAIN
++#define TEST_NAME "stpcpy_chk"
++#include "bench-string.h"
++
++extern void __attribute__ ((noreturn)) __chk_fail (void);
++char *simple_stpcpy_chk (char *, const char *, size_t);
++extern char *normal_stpcpy (char *, const char *, size_t)
++  __asm ("stpcpy");
++extern char *__stpcpy_chk (char *, const char *, size_t);
++
++IMPL (simple_stpcpy_chk, 0)
++IMPL (normal_stpcpy, 1)
++IMPL (__stpcpy_chk, 2)
++
++char *
++simple_stpcpy_chk (char *dst, const char *src, size_t len)
++{
++  if (! len)
++    __chk_fail ();
++  while ((*dst++ = *src++) != '\0')
++    if (--len == 0)
++      __chk_fail ();
++  return dst - 1;
++}
++
++#include "bench-strcpy_chk.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-stpncpy.c glibc-2.17-c758a686/benchtests/bench-stpncpy.c
+--- glibc-2.17-c758a686/benchtests/bench-stpncpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-stpncpy.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,59 @@
++/* Measure stpncpy functions.
++   Copyright (C) 2013 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 STRNCPY_RESULT(dst, len, n) ((dst) + ((len) > (n) ? (n) : (len)))
++#define TEST_MAIN
++#define TEST_NAME "stpncpy"
++#include "bench-string.h"
++
++char *simple_stpncpy (char *, const char *, size_t);
++char *stupid_stpncpy (char *, const char *, size_t);
++
++IMPL (stupid_stpncpy, 0)
++IMPL (simple_stpncpy, 0)
++IMPL (stpncpy, 1)
++
++char *
++simple_stpncpy (char *dst, const char *src, size_t n)
++{
++  while (n--)
++    if ((*dst++ = *src++) == '\0')
++      {
++	size_t i;
++
++	for (i = 0; i < n; ++i)
++	  dst[i] = '\0';
++	return dst - 1;
++      }
++  return dst;
++}
++
++char *
++stupid_stpncpy (char *dst, const char *src, size_t n)
++{
++  size_t nc = strnlen (src, n);
++  size_t i;
++
++  for (i = 0; i < nc; ++i)
++    dst[i] = src[i];
++  for (; i < n; ++i)
++    dst[i] = '\0';
++  return dst + nc;
++}
++
++#include "bench-strncpy.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcasecmp.c glibc-2.17-c758a686/benchtests/bench-strcasecmp.c
+--- glibc-2.17-c758a686/benchtests/bench-strcasecmp.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcasecmp.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,176 @@
++/* Measure strcasecmp functions.
++   Copyright (C) 2013 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>
++#define TEST_MAIN
++#define TEST_NAME "strcasecmp"
++#include "bench-string.h"
++
++typedef int (*proto_t) (const char *, const char *);
++static int simple_strcasecmp (const char *, const char *);
++static int stupid_strcasecmp (const char *, const char *);
++
++IMPL (stupid_strcasecmp, 0)
++IMPL (simple_strcasecmp, 0)
++IMPL (strcasecmp, 1)
++
++static int
++simple_strcasecmp (const char *s1, const char *s2)
++{
++  int ret;
++
++  while ((ret = ((unsigned char) tolower (*s1)
++		 - (unsigned char) tolower (*s2))) == 0
++	 && *s1++)
++    ++s2;
++  return ret;
++}
++
++static int
++stupid_strcasecmp (const char *s1, const char *s2)
++{
++  size_t ns1 = strlen (s1) + 1, ns2 = strlen (s2) + 1;
++  size_t n = ns1 < ns2 ? ns1 : ns2;
++  int ret = 0;
++
++  while (n--)
++    {
++      if ((ret = ((unsigned char) tolower (*s1)
++		  - (unsigned char) tolower (*s2))) != 0)
++	break;
++      ++s1;
++      ++s2;
++    }
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++  int result = CALL (impl, s1, s2);
++  if ((exp_result == 0 && result != 0)
++      || (exp_result < 0 && result >= 0)
++      || (exp_result > 0 && result <= 0))
++    {
++      error (0, 0, "Wrong result in function %s %d %d", impl->name,
++	     result, exp_result);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, int max_char,
++	 int exp_result)
++{
++  size_t i;
++  char *s1, *s2;
++
++  if (len == 0)
++    return;
++
++  align1 &= 7;
++  if (align1 + len + 1 >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len + 1 >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len; i++)
++    {
++      s1[i] = toupper (1 + 23 * i % max_char);
++      s2[i] = tolower (s1[i]);
++    }
++
++  s1[len] = s2[len] = 0;
++  s1[len + 1] = 23;
++  s2[len + 1] = 24 + exp_result;
++  if ((s2[len - 1] == 'z' && exp_result == -1)
++      || (s2[len - 1] == 'a' && exp_result == 1))
++    s1[len - 1] += exp_result;
++  else
++    s2[len - 1] -= exp_result;
++
++  printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, exp_result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 16; ++i)
++    {
++      do_test (i, i, i, 127, 0);
++      do_test (i, i, i, 127, 1);
++      do_test (i, i, i, 127, -1);
++    }
++
++  for (i = 1; i < 10; ++i)
++    {
++      do_test (0, 0, 2 << i, 127, 0);
++      do_test (0, 0, 2 << i, 254, 0);
++      do_test (0, 0, 2 << i, 127, 1);
++      do_test (0, 0, 2 << i, 254, 1);
++      do_test (0, 0, 2 << i, 127, -1);
++      do_test (0, 0, 2 << i, 254, -1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, 8 << i, 127, 0);
++      do_test (2 * i, i, 8 << i, 254, 0);
++      do_test (i, 2 * i, 8 << i, 127, 1);
++      do_test (2 * i, i, 8 << i, 254, 1);
++      do_test (i, 2 * i, 8 << i, 127, -1);
++      do_test (2 * i, i, 8 << i, 254, -1);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcasestr.c glibc-2.17-c758a686/benchtests/bench-strcasestr.c
+--- glibc-2.17-c758a686/benchtests/bench-strcasestr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcasestr.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,180 @@
++/* Measure strcasestr functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strcasestr"
++#include "bench-string.h"
++
++
++#define STRCASESTR simple_strcasestr
++#define NO_ALIAS
++#define __strncasecmp strncasecmp
++#include "../string/strcasestr.c"
++
++
++static char *
++stupid_strcasestr (const char *s1, const char *s2)
++{
++  ssize_t s1len = strlen (s1);
++  ssize_t s2len = strlen (s2);
++
++  if (s2len > s1len)
++    return NULL;
++
++  for (ssize_t i = 0; i <= s1len - s2len; ++i)
++    {
++      size_t j;
++      for (j = 0; j < s2len; ++j)
++	if (tolower (s1[i + j]) != tolower (s2[j]))
++	  break;
++      if (j == s2len)
++	return (char *) s1 + i;
++    }
++
++  return NULL;
++}
++
++
++typedef char *(*proto_t) (const char *, const char *);
++
++IMPL (stupid_strcasestr, 0)
++IMPL (simple_strcasestr, 0)
++IMPL (strcasestr, 1)
++
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2,
++	 int fail)
++{
++  char *s1 = (char *) (buf1 + align1);
++  char *s2 = (char *) (buf2 + align2);
++
++  static const char d[] = "1234567890abcxyz";
++#define dl (sizeof (d) - 1)
++  char *ss2 = s2;
++  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
++    {
++      size_t t = l > dl ? dl : l;
++      ss2 = mempcpy (ss2, d, t);
++    }
++  s2[len2] = '\0';
++
++  if (fail)
++    {
++      char *ss1 = s1;
++      for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
++	{
++	  size_t t = l > dl ? dl : l;
++	  memcpy (ss1, d, t);
++	  ++ss1[len2 > 7 ? 7 : len2 - 1];
++	  ss1 += t;
++	}
++    }
++  else
++    {
++      memset (s1, '0', len1);
++      for (size_t i = 0; i < len2; ++i)
++	s1[len1 - len2 + i] = toupper (s2[i]);
++    }
++  s1[len1] = '\0';
++
++  printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
++	  len1, len2, align1, align2, fail ? "fail" : "found");
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
++
++  putchar ('\n');
++}
++
++static int
++test_main (void)
++{
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (size_t klen = 2; klen < 32; ++klen)
++    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
++      {
++	do_test (0, 0, hlen, klen, 0);
++	do_test (0, 0, hlen, klen, 1);
++	do_test (0, 3, hlen, klen, 0);
++	do_test (0, 3, hlen, klen, 1);
++	do_test (0, 9, hlen, klen, 0);
++	do_test (0, 9, hlen, klen, 1);
++	do_test (0, 15, hlen, klen, 0);
++	do_test (0, 15, hlen, klen, 1);
++
++	do_test (3, 0, hlen, klen, 0);
++	do_test (3, 0, hlen, klen, 1);
++	do_test (3, 3, hlen, klen, 0);
++	do_test (3, 3, hlen, klen, 1);
++	do_test (3, 9, hlen, klen, 0);
++	do_test (3, 9, hlen, klen, 1);
++	do_test (3, 15, hlen, klen, 0);
++	do_test (3, 15, hlen, klen, 1);
++
++	do_test (9, 0, hlen, klen, 0);
++	do_test (9, 0, hlen, klen, 1);
++	do_test (9, 3, hlen, klen, 0);
++	do_test (9, 3, hlen, klen, 1);
++	do_test (9, 9, hlen, klen, 0);
++	do_test (9, 9, hlen, klen, 1);
++	do_test (9, 15, hlen, klen, 0);
++	do_test (9, 15, hlen, klen, 1);
++
++	do_test (15, 0, hlen, klen, 0);
++	do_test (15, 0, hlen, klen, 1);
++	do_test (15, 3, hlen, klen, 0);
++	do_test (15, 3, hlen, klen, 1);
++	do_test (15, 9, hlen, klen, 0);
++	do_test (15, 9, hlen, klen, 1);
++	do_test (15, 15, hlen, klen, 0);
++	do_test (15, 15, hlen, klen, 1);
++      }
++
++  do_test (0, 0, page_size - 1, 16, 0);
++  do_test (0, 0, page_size - 1, 16, 1);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcat.c glibc-2.17-c758a686/benchtests/bench-strcat.c
+--- glibc-2.17-c758a686/benchtests/bench-strcat.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcat.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,148 @@
++/* Measure strcat functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strcat"
++#include "bench-string.h"
++
++typedef char *(*proto_t) (char *, const char *);
++char *simple_strcat (char *, const char *);
++
++IMPL (simple_strcat, 0)
++IMPL (strcat, 1)
++
++char *
++simple_strcat (char *dst, const char *src)
++{
++  char *ret = dst;
++  while (*dst++ != '\0');
++  --dst;
++  while ((*dst++ = *src++) != '\0');
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, char *dst, const char *src)
++{
++  size_t k = strlen (dst), i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (CALL (impl, dst, src) != dst)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     CALL (impl, dst, src), dst);
++      ret = 1;
++      return;
++    }
++
++  if (strcmp (dst + k, src) != 0)
++    {
++      error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
++	     impl->name, dst, src);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      dst[k] = '\0';
++      CALL (impl, dst, src);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2, int max_char)
++{
++  size_t i;
++  char *s1, *s2;
++
++  align1 &= 7;
++  if (align1 + len1 >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len1 + len2 >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len1; ++i)
++    s1[i] = 32 + 23 * i % (max_char - 32);
++  s1[len1] = '\0';
++
++  for (i = 0; i < len2; i++)
++    s2[i] = 32 + 23 * i % (max_char - 32);
++
++  printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len1, len2, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    {
++      s2[len2] = '\0';
++      do_one_test (impl, s2, s1);
++    }
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%28s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 16; ++i)
++    {
++      do_test (0, 0, i, i, 127);
++      do_test (0, 0, i, i, 255);
++      do_test (0, i, i, i, 127);
++      do_test (i, 0, i, i, 255);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 8 << i, 8 << i, 127);
++      do_test (8 - i, 2 * i, 8 << i, 8 << i, 127);
++      do_test (0, 0, 8 << i, 2 << i, 127);
++      do_test (8 - i, 2 * i, 8 << i, 2 << i, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, 8 << i, 1, 127);
++      do_test (2 * i, i, 8 << i, 1, 255);
++      do_test (i, i, 8 << i, 10, 127);
++      do_test (i, i, 8 << i, 10, 255);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strchr.c glibc-2.17-c758a686/benchtests/bench-strchr.c
+--- glibc-2.17-c758a686/benchtests/bench-strchr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strchr.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,200 @@
++/* Measure STRCHR functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#ifndef WIDE
++# ifdef USE_FOR_STRCHRNUL
++#  define TEST_NAME "strchrnul"
++# else
++#  define TEST_NAME "strchr"
++# endif
++#else
++# define TEST_NAME "wcschr"
++#endif
++#include "bench-string.h"
++
++#ifndef WIDE
++# ifdef USE_FOR_STRCHRNUL
++#  define STRCHR strchrnul
++#  define stupid_STRCHR stupid_STRCHRNUL
++#  define simple_STRCHR simple_STRCHRNUL
++# else
++#  define STRCHR strchr
++# endif
++# define STRLEN strlen
++# define CHAR char
++# define BIG_CHAR CHAR_MAX
++# define MIDDLE_CHAR 127
++# define SMALL_CHAR 23
++# define UCHAR unsigned char
++#else
++# include <wchar.h>
++# define STRCHR wcschr
++# define STRLEN wcslen
++# define CHAR wchar_t
++# define BIG_CHAR WCHAR_MAX
++# define MIDDLE_CHAR 1121
++# define SMALL_CHAR 851
++# define UCHAR wchar_t
++#endif
++
++#ifdef USE_FOR_STRCHRNUL
++# define NULLRET(endptr) endptr
++#else
++# define NULLRET(endptr) NULL
++#endif
++
++
++typedef CHAR *(*proto_t) (const CHAR *, int);
++
++CHAR *
++simple_STRCHR (const CHAR *s, int c)
++{
++  for (; *s != (CHAR) c; ++s)
++    if (*s == '\0')
++      return NULLRET ((CHAR *) s);
++  return (CHAR *) s;
++}
++
++CHAR *
++stupid_STRCHR (const CHAR *s, int c)
++{
++  size_t n = STRLEN (s) + 1;
++
++  while (n--)
++    if (*s++ == (CHAR) c)
++      return (CHAR *) s - 1;
++  return NULLRET ((CHAR *) s - 1);
++}
++
++IMPL (stupid_STRCHR, 0)
++IMPL (simple_STRCHR, 0)
++IMPL (STRCHR, 1)
++
++static void
++do_one_test (impl_t *impl, const CHAR *s, int c, const CHAR *exp_res)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, c);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t pos, size_t len, int seek_char, int max_char)
++/* For wcschr: align here means align not in bytes,
++   but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
++   len for wcschr here isn't in bytes but it's number of wchar_t symbols.  */
++{
++  size_t i;
++  CHAR *result;
++  CHAR *buf = (CHAR *) buf1;
++  align &= 15;
++  if ((align + len) * sizeof (CHAR) >= page_size)
++    return;
++
++  for (i = 0; i < len; ++i)
++    {
++      buf[align + i] = 32 + 23 * i % max_char;
++      if (buf[align + i] == seek_char)
++	buf[align + i] = seek_char + 1;
++      else if (buf[align + i] == 0)
++	buf[align + i] = 1;
++    }
++  buf[align + len] = 0;
++
++  if (pos < len)
++    {
++      buf[align + pos] = seek_char;
++      result = buf + align + pos;
++    }
++  else if (seek_char == 0)
++    result = buf + align + len;
++  else
++    result = NULLRET (buf + align + len);
++
++  printf ("Length %4zd, alignment in bytes %2zd:",
++	  pos, align * sizeof (CHAR));
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, buf + align, seek_char, result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 2048, SMALL_CHAR, MIDDLE_CHAR);
++      do_test (i, 16 << i, 2048, SMALL_CHAR, MIDDLE_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 64, 256, SMALL_CHAR, MIDDLE_CHAR);
++      do_test (i, 64, 256, SMALL_CHAR, BIG_CHAR);
++    }
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, i, i + 1, SMALL_CHAR, MIDDLE_CHAR);
++      do_test (0, i, i + 1, SMALL_CHAR, BIG_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 2048, 0, MIDDLE_CHAR);
++      do_test (i, 16 << i, 2048, 0, MIDDLE_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 64, 256, 0, MIDDLE_CHAR);
++      do_test (i, 64, 256, 0, BIG_CHAR);
++    }
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, i, i + 1, 0, MIDDLE_CHAR);
++      do_test (0, i, i + 1, 0, BIG_CHAR);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strchrnul.c glibc-2.17-c758a686/benchtests/bench-strchrnul.c
+--- glibc-2.17-c758a686/benchtests/bench-strchrnul.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strchrnul.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,20 @@
++/* Measure strchrnul function.
++   Copyright (C) 2013 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 USE_FOR_STRCHRNUL 1
++#include "bench-strchr.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcmp.c glibc-2.17-c758a686/benchtests/bench-strcmp.c
+--- glibc-2.17-c758a686/benchtests/bench-strcmp.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcmp.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,241 @@
++/* Measure strcmp and wcscmp functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#ifdef WIDE
++# define TEST_NAME "wcscmp"
++#else
++# define TEST_NAME "strcmp"
++#endif
++#include "bench-string.h"
++
++#ifdef WIDE
++# include <wchar.h>
++
++# define L(str) L##str
++# define STRCMP wcscmp
++# define STRCPY wcscpy
++# define STRLEN wcslen
++# define MEMCPY wmemcpy
++# define SIMPLE_STRCMP simple_wcscmp
++# define STUPID_STRCMP stupid_wcscmp
++# define CHAR wchar_t
++# define UCHAR wchar_t
++# define CHARBYTES 4
++# define CHARBYTESLOG 2
++# define CHARALIGN __alignof__ (CHAR)
++# define MIDCHAR 0x7fffffff
++# define LARGECHAR 0xfffffffe
++# define CHAR__MAX WCHAR_MAX
++# define CHAR__MIN WCHAR_MIN
++
++/* Wcscmp uses signed semantics for comparison, not unsigned */
++/* Avoid using substraction since possible overflow */
++
++int
++simple_wcscmp (const wchar_t *s1, const wchar_t *s2)
++{
++  wchar_t c1, c2;
++  do
++    {
++      c1 = *s1++;
++      c2 = *s2++;
++      if (c2 == L'\0')
++      return c1 - c2;
++    }
++  while (c1 == c2);
++
++  return c1 < c2 ? -1 : 1;
++}
++
++int
++stupid_wcscmp (const wchar_t *s1, const wchar_t *s2)
++{
++  size_t ns1 = wcslen (s1) + 1;
++  size_t ns2 = wcslen (s2) + 1;
++  size_t n = ns1 < ns2 ? ns1 : ns2;
++  int ret = 0;
++
++  wchar_t c1, c2;
++
++  while (n--) {
++    c1 = *s1++;
++    c2 = *s2++;
++    if ((ret = c1 < c2 ? -1 : c1 == c2 ? 0 : 1) != 0)
++      break;
++  }
++  return ret;
++}
++
++#else
++# include <limits.h>
++
++# define L(str) str
++# define STRCMP strcmp
++# define STRCPY strcpy
++# define STRLEN strlen
++# define MEMCPY memcpy
++# define SIMPLE_STRCMP simple_strcmp
++# define STUPID_STRCMP stupid_strcmp
++# define CHAR char
++# define UCHAR unsigned char
++# define CHARBYTES 1
++# define CHARBYTESLOG 0
++# define CHARALIGN 1
++# define MIDCHAR 0x7f
++# define LARGECHAR 0xfe
++# define CHAR__MAX CHAR_MAX
++# define CHAR__MIN CHAR_MIN
++
++/* Strcmp uses unsigned semantics for comparison. */
++int
++simple_strcmp (const char *s1, const char *s2)
++{
++  int ret;
++
++  while ((ret = *(unsigned char *) s1 - *(unsigned char*) s2++) == 0 && *s1++);
++  return ret;
++}
++
++int
++stupid_strcmp (const char *s1, const char *s2)
++{
++  size_t ns1 = strlen (s1) + 1;
++  size_t ns2 = strlen (s2) + 1;
++  size_t n = ns1 < ns2 ? ns1 : ns2;
++  int ret = 0;
++
++  while (n--)
++    if ((ret = *(unsigned char *) s1++ - *(unsigned char *) s2++) != 0)
++      break;
++  return ret;
++}
++#endif
++
++typedef int (*proto_t) (const CHAR *, const CHAR *);
++
++IMPL (STUPID_STRCMP, 1)
++IMPL (SIMPLE_STRCMP, 1)
++IMPL (STRCMP, 1)
++
++static void
++do_one_test (impl_t *impl,
++	     const CHAR *s1, const CHAR *s2,
++	     int exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, int max_char,
++	 int exp_result)
++{
++  size_t i;
++
++  CHAR *s1, *s2;
++
++  if (len == 0)
++    return;
++
++  align1 &= 63;
++  if (align1 + (len + 1) * CHARBYTES >= page_size)
++    return;
++
++  align2 &= 63;
++  if (align2 + (len + 1) * CHARBYTES >= page_size)
++    return;
++
++  /* Put them close to the end of page.  */
++  i = align1 + CHARBYTES * (len + 2);
++  s1 = (CHAR *) (buf1 + ((page_size - i) / 16 * 16) + align1);
++  i = align2 + CHARBYTES * (len + 2);
++  s2 = (CHAR *) (buf2 + ((page_size - i) / 16 * 16)  + align2);
++
++  for (i = 0; i < len; i++)
++    s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % max_char;
++
++  s1[len] = s2[len] = 0;
++  s1[len + 1] = 23;
++  s2[len + 1] = 24 + exp_result;
++  s2[len - 1] -= exp_result;
++
++  printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, exp_result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 32; ++i)
++    {
++      do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, 0);
++      do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, 1);
++      do_test (CHARBYTES * i, CHARBYTES * i, i, MIDCHAR, -1);
++    }
++
++  for (i = 1; i < 10 + CHARBYTESLOG; ++i)
++    {
++      do_test (0, 0, 2 << i, MIDCHAR, 0);
++      do_test (0, 0, 2 << i, LARGECHAR, 0);
++      do_test (0, 0, 2 << i, MIDCHAR, 1);
++      do_test (0, 0, 2 << i, LARGECHAR, 1);
++      do_test (0, 0, 2 << i, MIDCHAR, -1);
++      do_test (0, 0, 2 << i, LARGECHAR, -1);
++      do_test (0, CHARBYTES * i, 2 << i, MIDCHAR, 1);
++      do_test (CHARBYTES * i, CHARBYTES * (i + 1), 2 << i, LARGECHAR, 1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, 0);
++      do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, 0);
++      do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, 1);
++      do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, 1);
++      do_test (CHARBYTES * i, 2 * CHARBYTES * i, 8 << i, MIDCHAR, -1);
++      do_test (2 * CHARBYTES * i, CHARBYTES * i, 8 << i, LARGECHAR, -1);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcpy.c glibc-2.17-c758a686/benchtests/bench-strcpy.c
+--- glibc-2.17-c758a686/benchtests/bench-strcpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcpy.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,193 @@
++/* Measure strcpy functions.
++   Copyright (C) 2013-2015 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/>.  */
++
++#ifdef WIDE
++# include <wchar.h>
++# define CHAR wchar_t
++# define UCHAR wchar_t
++# define sfmt "ls"
++# define BIG_CHAR WCHAR_MAX
++# define SMALL_CHAR 1273
++# define STRCMP wcscmp
++# define MEMCMP wmemcmp
++# define MEMSET wmemset
++#else
++# define CHAR char
++# define UCHAR unsigned char
++# define sfmt "s"
++# define BIG_CHAR CHAR_MAX
++# define SMALL_CHAR 127
++# define STRCMP strcmp
++# define MEMCMP memcmp
++# define MEMSET memset
++#endif
++
++#ifndef STRCPY_RESULT
++# define STRCPY_RESULT(dst, len) dst
++# define TEST_MAIN
++# ifndef WIDE
++#  define TEST_NAME "strcpy"
++# else
++#  define TEST_NAME "wcscpy"
++# endif
++# include "bench-string.h"
++# ifndef WIDE
++#  define SIMPLE_STRCPY simple_strcpy
++#  define STRCPY strcpy
++# else
++#  define SIMPLE_STRCPY simple_wcscpy
++#  define STRCPY wcscpy
++# endif
++
++CHAR *SIMPLE_STRCPY (CHAR *, const CHAR *);
++
++IMPL (SIMPLE_STRCPY, 0)
++IMPL (STRCPY, 1)
++
++CHAR *
++SIMPLE_STRCPY (CHAR *dst, const CHAR *src)
++{
++  CHAR *ret = dst;
++  while ((*dst++ = *src++) != '\0');
++  return ret;
++}
++#endif
++
++typedef CHAR *(*proto_t) (CHAR *, const CHAR *);
++
++static void
++do_one_test (impl_t *impl, CHAR *dst, const CHAR *src,
++	     size_t len __attribute__((unused)))
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (CALL (impl, dst, src) != STRCPY_RESULT (dst, len))
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     CALL (impl, dst, src), STRCPY_RESULT (dst, len));
++      ret = 1;
++      return;
++    }
++
++  if (STRCMP (dst, src) != 0)
++    {
++      error (0, 0,
++	     "Wrong result in function %s dst \"%" sfmt "\" src \"%" sfmt "\"",
++	     impl->name, dst, src);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++	  CALL (impl, dst, src);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, int max_char)
++{
++  size_t i;
++  CHAR *s1, *s2;
++/* For wcscpy: align1 and align2 here mean alignment not in bytes,
++   but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
++   len for wcschr here isn't in bytes but it's number of wchar_t symbols.  */
++  align1 &= 7;
++  if ((align1 + len) * sizeof(CHAR) >= page_size)
++    return;
++
++  align2 &= 7;
++  if ((align2 + len) * sizeof(CHAR) >= page_size)
++    return;
++
++  s1 = (CHAR *) (buf1) + align1;
++  s2 = (CHAR *) (buf2) + align2;
++
++  for (i = 0; i < len; i++)
++    s1[i] = 32 + 23 * i % (max_char - 32);
++  s1[len] = 0;
++
++  printf ("Length %4zd, alignments in bytes %2zd/%2zd:", len, align1 * sizeof(CHAR), align2 * sizeof(CHAR));
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s2, s1, len);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 16; ++i)
++    {
++      do_test (0, 0, i, SMALL_CHAR);
++      do_test (0, 0, i, BIG_CHAR);
++      do_test (0, i, i, SMALL_CHAR);
++      do_test (i, 0, i, BIG_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 8 << i, SMALL_CHAR);
++      do_test (8 - i, 2 * i, 8 << i, SMALL_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, 8 << i, SMALL_CHAR);
++      do_test (2 * i, i, 8 << i, BIG_CHAR);
++      do_test (i, i, 8 << i, SMALL_CHAR);
++      do_test (i, i, 8 << i, BIG_CHAR);
++    }
++
++  for (i = 16; i <= 512; i+=4)
++    {
++      do_test (0, 4, i, SMALL_CHAR);
++      do_test (4, 0, i, BIG_CHAR);
++      do_test (4, 4, i, SMALL_CHAR);
++      do_test (2, 2, i, BIG_CHAR);
++      do_test (2, 6, i, SMALL_CHAR);
++      do_test (6, 2, i, BIG_CHAR);
++      do_test (1, 7, i, SMALL_CHAR);
++      do_test (7, 1, i, BIG_CHAR);
++      do_test (3, 4, i, SMALL_CHAR);
++      do_test (4, 3, i, BIG_CHAR);
++      do_test (5, 7, i, SMALL_CHAR);
++      do_test (7, 5, i, SMALL_CHAR);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcpy_chk.c glibc-2.17-c758a686/benchtests/bench-strcpy_chk.c
+--- glibc-2.17-c758a686/benchtests/bench-strcpy_chk.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcpy_chk.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,243 @@
++/* Measure __strcpy_chk functions.
++   Copyright (C) 2013-2015 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 STRCPY_RESULT
++# define STRCPY_RESULT(dst, len) dst
++# define TEST_MAIN
++# define TEST_NAME "strcpy_chk"
++# include "bench-string.h"
++
++/* This test case implicitly tests the availability of the __chk_fail
++   symbol, which is part of the public ABI and may be used
++   externally. */
++extern void __attribute__ ((noreturn)) __chk_fail (void);
++char *simple_strcpy_chk (char *, const char *, size_t);
++extern char *normal_strcpy (char *, const char *, size_t)
++  __asm ("strcpy");
++extern char *__strcpy_chk (char *, const char *, size_t);
++
++IMPL (simple_strcpy_chk, 0)
++IMPL (normal_strcpy, 1)
++IMPL (__strcpy_chk, 2)
++
++char *
++simple_strcpy_chk (char *dst, const char *src, size_t len)
++{
++  char *ret = dst;
++  if (! len)
++    __chk_fail ();
++  while ((*dst++ = *src++) != '\0')
++    if (--len == 0)
++      __chk_fail ();
++  return ret;
++}
++#endif
++
++#include <fcntl.h>
++#include <paths.h>
++#include <setjmp.h>
++#include <signal.h>
++
++static int test_main (void);
++#include "../test-skeleton.c"
++
++volatile int chk_fail_ok;
++jmp_buf chk_fail_buf;
++
++static void
++handler (int sig)
++{
++  if (chk_fail_ok)
++    {
++      chk_fail_ok = 0;
++      longjmp (chk_fail_buf, 1);
++    }
++  else
++    _exit (127);
++}
++
++typedef char *(*proto_t) (char *, const char *, size_t);
++
++static void
++do_one_test (impl_t *impl, char *dst, const char *src,
++	     size_t len, size_t dlen)
++{
++  char *res;
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (dlen <= len)
++    {
++      if (impl->test == 1)
++	return;
++
++      chk_fail_ok = 1;
++      if (setjmp (chk_fail_buf) == 0)
++	{
++	  res = CALL (impl, dst, src, dlen);
++	  printf ("*** Function %s (%zd; %zd) did not __chk_fail\n",
++		  impl->name, len, dlen);
++	  chk_fail_ok = 0;
++	  ret = 1;
++	}
++      return;
++    }
++  else
++    res = CALL (impl, dst, src, dlen);
++
++  if (res != STRCPY_RESULT (dst, len))
++    {
++      printf ("Wrong result in function %s %p %p\n", impl->name,
++	      res, STRCPY_RESULT (dst, len));
++      ret = 1;
++      return;
++    }
++
++  if (strcmp (dst, src) != 0)
++    {
++      printf ("Wrong result in function %s dst \"%s\" src \"%s\"\n",
++	      impl->name, dst, src);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, dst, src, dlen);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, size_t dlen, int max_char)
++{
++  size_t i;
++  char *s1, *s2;
++
++  align1 &= 7;
++  if (align1 + len >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len >= page_size)
++    return;
++
++  s1 = (char *) buf1 + align1;
++  s2 = (char *) buf2 + align2;
++
++  for (i = 0; i < len; i++)
++    s1[i] = 32 + 23 * i % (max_char - 32);
++  s1[len] = 0;
++
++  if (dlen > len)
++    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s2, s1, len, dlen);
++
++  if (dlen > len)
++    putchar ('\n');
++}
++
++static int
++test_main (void)
++{
++  size_t i;
++
++  set_fortify_handler (handler);
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 16; ++i)
++    {
++      do_test (0, 0, i, i + 1, 127);
++      do_test (0, 0, i, i + 1, 255);
++      do_test (0, i, i, i + 1, 127);
++      do_test (i, 0, i, i + 1, 255);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 8 << i, (8 << i) + 1, 127);
++      do_test (8 - i, 2 * i, (8 << i), (8 << i) + 1, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, (8 << i), (8 << i) + 1, 127);
++      do_test (2 * i, i, (8 << i), (8 << i) + 1, 255);
++      do_test (i, i, (8 << i), (8 << i) + 1, 127);
++      do_test (i, i, (8 << i), (8 << i) + 1, 255);
++    }
++
++  for (i = 0; i < 16; ++i)
++    {
++      do_test (0, 0, i, i + 256, 127);
++      do_test (0, 0, i, i + 256, 255);
++      do_test (0, i, i, i + 256, 127);
++      do_test (i, 0, i, i + 256, 255);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 8 << i, (8 << i) + 256, 127);
++      do_test (8 - i, 2 * i, (8 << i), (8 << i) + 256, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, (8 << i), (8 << i) + 256, 127);
++      do_test (2 * i, i, (8 << i), (8 << i) + 256, 255);
++      do_test (i, i, (8 << i), (8 << i) + 256, 127);
++      do_test (i, i, (8 << i), (8 << i) + 256, 255);
++    }
++
++  for (i = 0; i < 16; ++i)
++    {
++      do_test (0, 0, i, i, 127);
++      do_test (0, 0, i, i + 2, 255);
++      do_test (0, i, i, i + 3, 127);
++      do_test (i, 0, i, i + 4, 255);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 8 << i, (8 << i) - 15, 127);
++      do_test (8 - i, 2 * i, (8 << i), (8 << i) + 5, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, (8 << i), (8 << i) + i, 127);
++      do_test (2 * i, i, (8 << i), (8 << i) + (i - 1), 255);
++      do_test (i, i, (8 << i), (8 << i) + i + 2, 127);
++      do_test (i, i, (8 << i), (8 << i) + i + 3, 255);
++    }
++
++  return 0;
++}
+diff -urN glibc-2.17-c758a686/benchtests/bench-strcspn.c glibc-2.17-c758a686/benchtests/bench-strcspn.c
+--- glibc-2.17-c758a686/benchtests/bench-strcspn.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strcspn.c	2015-06-20 21:22:16.298458075 -0400
+@@ -0,0 +1,59 @@
++/* Measure strcspn functions.
++   Copyright (C) 2013 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 STRPBRK_RESULT(s, pos) (pos)
++#define RES_TYPE size_t
++#define TEST_MAIN
++#define TEST_NAME "strcspn"
++#include "bench-string.h"
++
++typedef size_t (*proto_t) (const char *, const char *);
++size_t simple_strcspn (const char *, const char *);
++size_t stupid_strcspn (const char *, const char *);
++
++IMPL (stupid_strcspn, 0)
++IMPL (simple_strcspn, 0)
++IMPL (strcspn, 1)
++
++size_t
++simple_strcspn (const char *s, const char *rej)
++{
++  const char *r, *str = s;
++  char c;
++
++  while ((c = *s++) != '\0')
++    for (r = rej; *r != '\0'; ++r)
++      if (*r == c)
++	return s - str - 1;
++  return s - str - 1;
++}
++
++size_t
++stupid_strcspn (const char *s, const char *rej)
++{
++  size_t ns = strlen (s), nrej = strlen (rej);
++  size_t i, j;
++
++  for (i = 0; i < ns; ++i)
++    for (j = 0; j < nrej; ++j)
++      if (s[i] == rej[j])
++	return i;
++  return i;
++}
++
++#include "bench-strpbrk.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-string.h glibc-2.17-c758a686/benchtests/bench-string.h
+--- glibc-2.17-c758a686/benchtests/bench-string.h	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-string.h	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,201 @@
++/* Measure string and memory functions.
++   Copyright (C) 2013-2015 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/cdefs.h>
++
++typedef struct
++{
++  const char *name;
++  void (*fn) (void);
++  long test;
++} impl_t;
++extern impl_t __start_impls[], __stop_impls[];
++
++#define IMPL(name, test) \
++  impl_t tst_ ## name							\
++  __attribute__ ((section ("impls"), aligned (sizeof (void *))))	\
++       = { __STRING (name), (void (*) (void))name, test };
++
++#ifdef TEST_MAIN
++
++# ifndef _GNU_SOURCE
++#  define _GNU_SOURCE
++# endif
++
++# undef __USE_STRING_INLINES
++
++# include <stdio.h>
++# include <stdlib.h>
++# include <string.h>
++# include <sys/mman.h>
++# include <sys/param.h>
++# include <unistd.h>
++# include <fcntl.h>
++# include <error.h>
++# include <errno.h>
++# include <time.h>
++# include <ifunc-impl-list.h>
++# define GL(x) _##x
++# define GLRO(x) _##x
++# include "bench-timing.h"
++
++
++# define TEST_FUNCTION test_main ()
++# define TIMEOUT (4 * 60)
++# define OPT_ITERATIONS 10000
++# define OPT_RANDOM 10001
++# define OPT_SEED 10002
++
++# define INNER_LOOP_ITERS 64
++
++unsigned char *buf1, *buf2;
++int ret, do_srandom;
++unsigned int seed;
++size_t page_size;
++
++# ifndef ITERATIONS
++size_t iterations = 100000;
++#  define ITERATIONS_OPTIONS \
++     { "iterations", required_argument, NULL, OPT_ITERATIONS },
++#  define ITERATIONS_PROCESS \
++     case OPT_ITERATIONS:						      \
++       iterations = strtoul (optarg, NULL, 0);				      \
++       break;
++#  define ITERATIONS iterations
++# else
++#  define ITERATIONS_OPTIONS
++#  define ITERATIONS_PROCESS
++# endif
++
++# define CMDLINE_OPTIONS ITERATIONS_OPTIONS \
++    { "random", no_argument, NULL, OPT_RANDOM },			      \
++    { "seed", required_argument, NULL, OPT_SEED },
++# define CMDLINE_PROCESS ITERATIONS_PROCESS \
++    case OPT_RANDOM:							      \
++      {									      \
++	int fdr = open ("/dev/urandom", O_RDONLY);			      \
++									      \
++	if (fdr < 0 || read (fdr, &seed, sizeof(seed)) != sizeof (seed))      \
++	  seed = time (NULL);						      \
++	if (fdr >= 0)							      \
++	  close (fdr);							      \
++	do_srandom = 1;							      \
++	break;								      \
++      }									      \
++									      \
++    case OPT_SEED:							      \
++      seed = strtoul (optarg, NULL, 0);					      \
++      do_srandom = 1;							      \
++      break;
++
++# define CALL(impl, ...)	\
++    (* (proto_t) (impl)->fn) (__VA_ARGS__)
++
++# ifdef TEST_NAME
++/* Increase size of FUNC_LIST if assert is triggered at run-time.  */
++static struct libc_ifunc_impl func_list[32];
++static int func_count;
++static int impl_count = -1;
++static impl_t *impl_array;
++
++#  define FOR_EACH_IMPL(impl, notall) \
++     impl_t *impl;							      \
++     int count;								      \
++     if (impl_count == -1)						      \
++       {								      \
++	 impl_count = 0;						      \
++	 if (func_count != 0)						      \
++	   {								      \
++	     int f;							      \
++	     impl_t *skip = NULL, *a;					      \
++	     for (impl = __start_impls; impl < __stop_impls; ++impl)	      \
++	       if (strcmp (impl->name, TEST_NAME) == 0)			      \
++		 skip = impl;						      \
++	       else							      \
++		 impl_count++;						      \
++	     a = impl_array = malloc ((impl_count + func_count) *	      \
++				   sizeof (impl_t));			      \
++	     for (impl = __start_impls; impl < __stop_impls; ++impl)	      \
++	       if (impl != skip)					      \
++		 *a++ = *impl;						      \
++	     for (f = 0; f < func_count; f++)				      \
++	       if (func_list[f].usable)					      \
++		 {							      \
++		   a->name = func_list[f].name;				      \
++		   a->fn = func_list[f].fn;				      \
++		   a->test = 1;						      \
++		   a++;							      \
++		 }							      \
++	     impl_count = a - impl_array;				      \
++	   }								      \
++	 else								      \
++	   {								      \
++	     impl_count = __stop_impls - __start_impls;			      \
++	     impl_array = __start_impls;				      \
++	   }								      \
++       }								      \
++     impl = impl_array;							      \
++     for (count = 0; count < impl_count; ++count, ++impl)		      \
++       if (!notall || impl->test)
++# else /* !TEST_NAME */
++#  define FOR_EACH_IMPL(impl, notall) \
++     for (impl_t *impl = __start_impls; impl < __stop_impls; ++impl)	      \
++       if (!notall || impl->test)
++# endif /* !TEST_NAME */
++
++# ifndef BUF1PAGES
++#  define BUF1PAGES 1
++# endif
++
++static void
++test_init (void)
++{
++# ifdef TEST_NAME
++  func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
++				       (sizeof func_list
++					/ sizeof func_list[0]));
++# endif
++
++  page_size = 2 * getpagesize ();
++# ifdef MIN_PAGE_SIZE
++  if (page_size < MIN_PAGE_SIZE)
++    page_size = MIN_PAGE_SIZE;
++# endif
++  buf1 = mmap (0, (BUF1PAGES + 1) * page_size, PROT_READ | PROT_WRITE,
++	       MAP_PRIVATE | MAP_ANON, -1, 0);
++  if (buf1 == MAP_FAILED)
++    error (EXIT_FAILURE, errno, "mmap failed");
++  if (mprotect (buf1 + BUF1PAGES * page_size, page_size, PROT_NONE))
++    error (EXIT_FAILURE, errno, "mprotect failed");
++  buf2 = mmap (0, 2 * page_size, PROT_READ | PROT_WRITE,
++	       MAP_PRIVATE | MAP_ANON, -1, 0);
++  if (buf2 == MAP_FAILED)
++    error (EXIT_FAILURE, errno, "mmap failed");
++  if (mprotect (buf2 + page_size, page_size, PROT_NONE))
++    error (EXIT_FAILURE, errno, "mprotect failed");
++  if (do_srandom)
++    {
++      printf ("Setting seed to 0x%x\n", seed);
++      srandom (seed);
++    }
++
++  memset (buf1, 0xa5, BUF1PAGES * page_size);
++  memset (buf2, 0x5a, page_size);
++}
++
++#endif /* TEST_MAIN */
+diff -urN glibc-2.17-c758a686/benchtests/bench-strlen.c glibc-2.17-c758a686/benchtests/bench-strlen.c
+--- glibc-2.17-c758a686/benchtests/bench-strlen.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strlen.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,142 @@
++/* Measure STRLEN functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#ifndef WIDE
++# define TEST_NAME "strlen"
++#else
++# define TEST_NAME "wcslen"
++#endif
++#include "bench-string.h"
++
++#ifndef WIDE
++# define STRLEN strlen
++# define CHAR char
++# define MAX_CHAR CHAR_MAX
++#else
++# include <wchar.h>
++# define STRLEN wcslen
++# define CHAR wchar_t
++# define MAX_CHAR WCHAR_MAX
++#endif
++
++typedef size_t (*proto_t) (const CHAR *);
++
++size_t
++simple_STRLEN (const CHAR *s)
++{
++  const CHAR *p;
++
++  for (p = s; *p; ++p);
++  return p - s;
++}
++
++#ifndef WIDE
++size_t
++builtin_strlen (const CHAR *p)
++{
++  return __builtin_strlen (p);
++}
++IMPL (builtin_strlen, 0)
++#endif
++
++IMPL (simple_STRLEN, 0)
++IMPL (STRLEN, 1)
++
++
++static void
++do_one_test (impl_t *impl, const CHAR *s, size_t exp_len)
++{
++  size_t len = CALL (impl, s), i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (len != exp_len)
++    {
++      error (0, 0, "Wrong result in function %s %zd %zd", impl->name,
++	     len, exp_len);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t len)
++{
++  size_t i;
++
++  align &= 63;
++  if (align + sizeof(CHAR) * len >= page_size)
++    return;
++
++  CHAR *buf = (CHAR *) (buf1);
++
++  for (i = 0; i < len; ++i)
++    buf[align + i] = 1 + 11111 * i % MAX_CHAR;
++  buf[align + len] = 0;
++
++  printf ("Length %4zd, alignment %2zd:", len, align);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (CHAR *) (buf + align), len);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  /* Checking with only 4 * N alignments for wcslen, other alignments are wrong for wchar_t type arrays*/
++
++  for (i = 1; i < 8; ++i)
++  {
++    do_test (sizeof(CHAR) * i, i);
++    do_test (0, i);
++  }
++
++  for (i = 2; i <= 12; ++i)
++    {
++      do_test (0, 1 << i);
++      do_test (sizeof(CHAR) * 7, 1 << i);
++      do_test (sizeof(CHAR) * i, 1 << i);
++      do_test (sizeof(CHAR) * i, (size_t)((1 << i) / 1.5));
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strncasecmp.c glibc-2.17-c758a686/benchtests/bench-strncasecmp.c
+--- glibc-2.17-c758a686/benchtests/bench-strncasecmp.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strncasecmp.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,207 @@
++/* Measure strncasecmp functions.
++   Copyright (C) 2013 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>
++#define TEST_MAIN
++#define TEST_NAME "strncasecmp"
++#include "bench-string.h"
++
++typedef int (*proto_t) (const char *, const char *, size_t);
++static int simple_strncasecmp (const char *, const char *, size_t);
++static int stupid_strncasecmp (const char *, const char *, size_t);
++
++IMPL (stupid_strncasecmp, 0)
++IMPL (simple_strncasecmp, 0)
++IMPL (strncasecmp, 1)
++
++static int
++simple_strncasecmp (const char *s1, const char *s2, size_t n)
++{
++  int ret;
++
++  if (n == 0)
++    return 0;
++
++  while ((ret = ((unsigned char) tolower (*s1)
++		 - (unsigned char) tolower (*s2))) == 0
++	 && *s1++)
++    {
++      if (--n == 0)
++	return 0;
++      ++s2;
++    }
++  return ret;
++}
++
++static int
++stupid_strncasecmp (const char *s1, const char *s2, size_t max)
++{
++  size_t ns1 = strlen (s1) + 1;
++  size_t ns2 = strlen (s2) + 1;
++  size_t n = ns1 < ns2 ? ns1 : ns2;
++  if (n > max)
++    n = max;
++  int ret = 0;
++
++  while (n--)
++    {
++      if ((ret = ((unsigned char) tolower (*s1)
++		  - (unsigned char) tolower (*s2))) != 0)
++	break;
++      ++s1;
++      ++s2;
++    }
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n,
++	     int exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2, n);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t n, size_t len, int max_char,
++	 int exp_result)
++{
++  size_t i;
++  char *s1, *s2;
++
++  if (len == 0)
++    return;
++
++  align1 &= 7;
++  if (align1 + len + 1 >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len + 1 >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len; i++)
++    {
++      s1[i] = toupper (1 + 23 * i % max_char);
++      s2[i] = tolower (s1[i]);
++    }
++
++  s1[len] = s2[len] = 0;
++  s1[len + 1] = 23;
++  s2[len + 1] = 24 + exp_result;
++  if ((s2[len - 1] == 'z' && exp_result == -1)
++      || (s2[len - 1] == 'a' && exp_result == 1))
++    s1[len - 1] += exp_result;
++  else
++    s2[len - 1] -= exp_result;
++
++  printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, n, exp_result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 16; ++i)
++    {
++      do_test (i, i, i - 1, i, 127, 0);
++
++      do_test (i, i, i, i, 127, 0);
++      do_test (i, i, i, i, 127, 1);
++      do_test (i, i, i, i, 127, -1);
++
++      do_test (i, i, i + 1, i, 127, 0);
++      do_test (i, i, i + 1, i, 127, 1);
++      do_test (i, i, i + 1, i, 127, -1);
++    }
++
++  for (i = 1; i < 10; ++i)
++    {
++      do_test (0, 0, (2 << i) - 1, 2 << i, 127, 0);
++      do_test (0, 0, 2 << i, 2 << i, 254, 0);
++      do_test (0, 0, (2 << i) + 1, 2 << i, 127, 0);
++
++      do_test (0, 0, (2 << i) + 1, 2 << i, 254, 0);
++
++      do_test (0, 0, 2 << i, 2 << i, 127, 1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 127, 1);
++
++      do_test (0, 0, 2 << i, 2 << i, 254, 1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 254, 1);
++
++      do_test (0, 0, 2 << i, 2 << i, 127, -1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 127, -1);
++
++      do_test (0, 0, 2 << i, 2 << i, 254, -1);
++      do_test (0, 0, (2 << i) + 10, 2 << i, 254, -1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 2 * i, (8 << i) - 1, 8 << i, 127, 0);
++      do_test (i, 2 * i, 8 << i, 8 << i, 127, 0);
++      do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, 0);
++
++      do_test (2 * i, i, (8 << i) - 1, 8 << i, 254, 0);
++      do_test (2 * i, i, 8 << i, 8 << i, 254, 0);
++      do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, 0);
++
++      do_test (i, 2 * i, 8 << i, 8 << i, 127, 1);
++      do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, 1);
++
++      do_test (2 * i, i, 8 << i, 8 << i, 254, 1);
++      do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, 1);
++
++      do_test (i, 2 * i, 8 << i, 8 << i, 127, -1);
++      do_test (i, 2 * i, (8 << i) + 100, 8 << i, 127, -1);
++
++      do_test (2 * i, i, 8 << i, 8 << i, 254, -1);
++      do_test (2 * i, i, (8 << i) + 100, 8 << i, 254, -1);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strncat.c glibc-2.17-c758a686/benchtests/bench-strncat.c
+--- glibc-2.17-c758a686/benchtests/bench-strncat.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strncat.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,162 @@
++/* Measure strncat functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strncat"
++#include "bench-string.h"
++
++typedef char *(*proto_t) (char *, const char *, size_t);
++char *stupid_strncat (char *, const char *, size_t);
++char *simple_strncat (char *, const char *, size_t);
++
++IMPL (stupid_strncat, 0)
++IMPL (strncat, 2)
++
++char *
++stupid_strncat (char *dst, const char *src, size_t n)
++{
++  char *ret = dst;
++  while (*dst++ != '\0');
++  --dst;
++  while (n--)
++    if ( (*dst++ = *src++) == '\0')
++      return ret;
++  *dst = '\0';
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, char *dst, const char *src, size_t n)
++{
++  size_t k = strlen (dst), i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (CALL (impl, dst, src, n) != dst)
++    {
++      error (0, 0, "Wrong result in function %s %p != %p", impl->name,
++	     CALL (impl, dst, src, n), dst);
++      ret = 1;
++      return;
++    }
++
++  size_t len = strlen (src);
++  if (memcmp (dst + k, src, len + 1 > n ? n : len + 1) != 0)
++    {
++      error (0, 0, "Incorrect cancatination in function %s",
++	     impl->name);
++      ret = 1;
++      return;
++    }
++  if (n < len && dst[k + n] != '\0')
++    {
++      error (0, 0, "There is no zero in the end of output string in %s",
++	     impl->name);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      dst[k] = '\0';
++      CALL (impl, dst, src, n);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2,
++	 size_t n, int max_char)
++{
++  size_t i;
++  char *s1, *s2;
++
++  align1 &= 7;
++  if (align1 + len1 >= page_size)
++    return;
++  if (align1 + n > page_size)
++    return;
++  align2 &= 7;
++  if (align2 + len1 + len2 >= page_size)
++    return;
++  if (align2 + len1 + n > page_size)
++    return;
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len1; ++i)
++    s1[i] = 32 + 23 * i % (max_char - 32);
++  s1[len1] = '\0';
++
++  for (i = 0; i < len2; i++)
++    s2[i] = 32 + 23 * i % (max_char - 32);
++
++  printf ("Length %4zd/%4zd, alignment %2zd/%2zd, N %4zd:",
++	  len1, len2, align1, align2, n);
++
++  FOR_EACH_IMPL (impl, 0)
++    {
++      s2[len2] = '\0';
++      do_one_test (impl, s2, s1, n);
++    }
++
++  putchar ('\n');
++}
++
++int
++main (void)
++{
++  size_t i, n;
++
++  test_init ();
++
++  printf ("%28s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (n = 2; n <= 2048; n*=4)
++    {
++      do_test (0, 2, 2, 2, n, 127);
++      do_test (0, 0, 4, 4, n, 127);
++      do_test (4, 0, 4, 4, n, 255);
++      do_test (0, 0, 8, 8, n, 127);
++      do_test (0, 8, 8, 8, n, 127);
++
++      for (i = 1; i < 8; ++i)
++	{
++	  do_test (0, 0, 8 << i, 8 << i, n, 127);
++	  do_test (8 - i, 2 * i, 8 << i, 8 << i, n, 127);
++	  do_test (0, 0, 8 << i, 2 << i, n, 127);
++	  do_test (8 - i, 2 * i, 8 << i, 2 << i, n, 127);
++	}
++
++      for (i = 1; i < 8; ++i)
++	{
++	  do_test (i, 2 * i, 8 << i, 1, n, 127);
++	  do_test (2 * i, i, 8 << i, 1, n, 255);
++	  do_test (i, i, 8 << i, 10, n, 127);
++	}
++    }
++
++  return ret;
++}
+diff -urN glibc-2.17-c758a686/benchtests/bench-strncmp.c glibc-2.17-c758a686/benchtests/bench-strncmp.c
+--- glibc-2.17-c758a686/benchtests/bench-strncmp.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strncmp.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,239 @@
++/* Measure strncmp functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strncmp"
++#include "bench-string.h"
++
++typedef int (*proto_t) (const char *, const char *, size_t);
++int simple_strncmp (const char *, const char *, size_t);
++int stupid_strncmp (const char *, const char *, size_t);
++
++IMPL (stupid_strncmp, 0)
++IMPL (simple_strncmp, 0)
++IMPL (strncmp, 1)
++
++int
++simple_strncmp (const char *s1, const char *s2, size_t n)
++{
++  int ret = 0;
++
++  while (n-- && (ret = *(unsigned char *) s1 - * (unsigned char *) s2++) == 0
++	 && *s1++);
++  return ret;
++}
++
++int
++stupid_strncmp (const char *s1, const char *s2, size_t n)
++{
++  size_t ns1 = strnlen (s1, n) + 1, ns2 = strnlen (s2, n) + 1;
++  int ret = 0;
++
++  n = ns1 < n ? ns1 : n;
++  n = ns2 < n ? ns2 : n;
++  while (n-- && (ret = *(unsigned char *) s1++ - * (unsigned char *) s2++) == 0);
++  return ret;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n,
++	     int exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2, n);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test_limit (size_t align1, size_t align2, size_t len, size_t n, int max_char,
++	 int exp_result)
++{
++  size_t i, align_n;
++  char *s1, *s2;
++
++  if (n == 0)
++    {
++      s1 = (char*)(buf1 + page_size);
++      s2 = (char*)(buf2 + page_size);
++      printf ("Length %4zd/%4zd:", len, n);
++
++      FOR_EACH_IMPL (impl, 0)
++	do_one_test (impl, s1, s2, n, 0);
++
++      putchar ('\n');
++
++      return;
++    }
++
++  align1 &= 15;
++  align2 &= 15;
++  align_n = (page_size - n) & 15;
++
++  s1 = (char*)(buf1 + page_size - n);
++  s2 = (char*)(buf2 + page_size - n);
++
++  if (align1 < align_n)
++    s1 -= (align_n - align1);
++
++  if (align2 < align_n)
++    s2 -= (align_n - align2);
++
++  for (i = 0; i < n; i++)
++    s1[i] = s2[i] = 1 + 23 * i % max_char;
++
++  if (len < n)
++    {
++      s1[len] = 0;
++      s2[len] = 0;
++      if (exp_result < 0)
++	s2[len] = 32;
++      else if (exp_result > 0)
++	s1[len] = 64;
++    }
++
++  printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, n, exp_result);
++
++  putchar ('\n');
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, size_t n, int max_char,
++	 int exp_result)
++{
++  size_t i;
++  char *s1, *s2;
++
++  if (n == 0)
++    return;
++
++  align1 &= 7;
++  if (align1 + n + 1 >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + n + 1 >= page_size)
++    return;
++
++  s1 = (char*)(buf1 + align1);
++  s2 = (char*)(buf2 + align2);
++
++  for (i = 0; i < n; i++)
++    s1[i] = s2[i] = 1 + 23 * i % max_char;
++
++  s1[n] = 24 + exp_result;
++  s2[n] = 23;
++  s1[len] = 0;
++  s2[len] = 0;
++  if (exp_result < 0)
++    s2[len] = 32;
++  else if (exp_result > 0)
++    s1[len] = 64;
++  if (len >= n)
++    s2[n - 1] -= exp_result;
++
++  printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (char*)s1, (char*)s2, n, exp_result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i =0; i < 16; ++i)
++    {
++      do_test (0, 0, 8, i, 127, 0);
++      do_test (0, 0, 8, i, 127, -1);
++      do_test (0, 0, 8, i, 127, 1);
++      do_test (i, i, 8, i, 127, 0);
++      do_test (i, i, 8, i, 127, 1);
++      do_test (i, i, 8, i, 127, -1);
++      do_test (i, 2 * i, 8, i, 127, 0);
++      do_test (2 * i, i, 8, i, 127, 1);
++      do_test (i, 3 * i, 8, i, 127, -1);
++      do_test (0, 0, 8, i, 255, 0);
++      do_test (0, 0, 8, i, 255, -1);
++      do_test (0, 0, 8, i, 255, 1);
++      do_test (i, i, 8, i, 255, 0);
++      do_test (i, i, 8, i, 255, 1);
++      do_test (i, i, 8, i, 255, -1);
++      do_test (i, 2 * i, 8, i, 255, 0);
++      do_test (2 * i, i, 8, i, 255, 1);
++      do_test (i, 3 * i, 8, i, 255, -1);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 8 << i, 16 << i, 127, 0);
++      do_test (0, 0, 8 << i, 16 << i, 127, 1);
++      do_test (0, 0, 8 << i, 16 << i, 127, -1);
++      do_test (0, 0, 8 << i, 16 << i, 255, 0);
++      do_test (0, 0, 8 << i, 16 << i, 255, 1);
++      do_test (0, 0, 8 << i, 16 << i, 255, -1);
++      do_test (8 - i, 2 * i, 8 << i, 16 << i, 127, 0);
++      do_test (8 - i, 2 * i, 8 << i, 16 << i, 127, 1);
++      do_test (2 * i, i, 8 << i, 16 << i, 255, 0);
++      do_test (2 * i, i, 8 << i, 16 << i, 255, 1);
++    }
++
++  do_test_limit (0, 0, 0, 0, 127, 0);
++  do_test_limit (4, 0, 21, 20, 127, 0);
++  do_test_limit (0, 4, 21, 20, 127, 0);
++  do_test_limit (8, 0, 25, 24, 127, 0);
++  do_test_limit (0, 8, 25, 24, 127, 0);
++
++  for (i = 0; i < 8; ++i)
++    {
++      do_test_limit (0, 0, 17 - i, 16 - i, 127, 0);
++      do_test_limit (0, 0, 17 - i, 16 - i, 255, 0);
++      do_test_limit (0, 0, 15 - i, 16 - i, 127, 0);
++      do_test_limit (0, 0, 15 - i, 16 - i, 127, 1);
++      do_test_limit (0, 0, 15 - i, 16 - i, 127, -1);
++      do_test_limit (0, 0, 15 - i, 16 - i, 255, 0);
++      do_test_limit (0, 0, 15 - i, 16 - i, 255, 1);
++      do_test_limit (0, 0, 15 - i, 16 - i, 255, -1);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strncpy.c glibc-2.17-c758a686/benchtests/bench-strncpy.c
+--- glibc-2.17-c758a686/benchtests/bench-strncpy.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strncpy.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,174 @@
++/* Measure strncpy functions.
++   Copyright (C) 2013 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 STRNCPY_RESULT
++# define STRNCPY_RESULT(dst, len, n) dst
++# define TEST_MAIN
++# define TEST_NAME "strncpy"
++# include "bench-string.h"
++
++char *simple_strncpy (char *, const char *, size_t);
++char *stupid_strncpy (char *, const char *, size_t);
++
++IMPL (stupid_strncpy, 0)
++IMPL (simple_strncpy, 0)
++IMPL (strncpy, 1)
++
++char *
++simple_strncpy (char *dst, const char *src, size_t n)
++{
++  char *ret = dst;
++  while (n--)
++    if ((*dst++ = *src++) == '\0')
++      {
++	while (n--)
++	  *dst++ = '\0';
++	return ret;
++      }
++  return ret;
++}
++
++char *
++stupid_strncpy (char *dst, const char *src, size_t n)
++{
++  size_t nc = strnlen (src, n);
++  size_t i;
++
++  for (i = 0; i < nc; ++i)
++    dst[i] = src[i];
++  for (; i < n; ++i)
++    dst[i] = '\0';
++  return dst;
++}
++#endif
++
++typedef char *(*proto_t) (char *, const char *, size_t);
++
++static void
++do_one_test (impl_t *impl, char *dst, const char *src, size_t len, size_t n)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (CALL (impl, dst, src, n) != STRNCPY_RESULT (dst, len, n))
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     CALL (impl, dst, src, n), dst);
++      ret = 1;
++      return;
++    }
++
++  if (memcmp (dst, src, len > n ? n : len) != 0)
++    {
++      error (0, 0, "Wrong result in function %s", impl->name);
++      ret = 1;
++      return;
++    }
++
++  if (n > len)
++    {
++      size_t i;
++
++      for (i = len; i < n; ++i)
++	if (dst [i] != '\0')
++	  {
++	    error (0, 0, "Wrong result in function %s", impl->name);
++	    ret = 1;
++	    return;
++	  }
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, dst, src, n);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len, size_t n, int max_char)
++{
++  size_t i;
++  char *s1, *s2;
++
++  align1 &= 7;
++  if (align1 + len >= page_size)
++    return;
++
++  align2 &= 7;
++  if (align2 + len >= page_size)
++    return;
++
++  s1 = (char *) (buf1 + align1);
++  s2 = (char *) (buf2 + align2);
++
++  for (i = 0; i < len; ++i)
++    s1[i] = 32 + 23 * i % (max_char - 32);
++  s1[len] = 0;
++  for (i = len + 1; i + align1 < page_size && i < len + 64; ++i)
++    s1[i] = 32 + 32 * i % (max_char - 32);
++
++  printf ("Length %4zd, n %4zd, alignment %2zd/%2zd:", len, n, align1, align2);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s2, s1, len, n);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%28s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, i, 16, 16, 127);
++      do_test (i, i, 16, 16, 255);
++      do_test (i, 2 * i, 16, 16, 127);
++      do_test (2 * i, i, 16, 16, 255);
++      do_test (8 - i, 2 * i, 1 << i, 2 << i, 127);
++      do_test (2 * i, 8 - i, 2 << i, 1 << i, 127);
++      do_test (8 - i, 2 * i, 1 << i, 2 << i, 255);
++      do_test (2 * i, 8 - i, 2 << i, 1 << i, 255);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 0, 4 << i, 8 << i, 127);
++      do_test (0, 0, 16 << i, 8 << i, 127);
++      do_test (8 - i, 2 * i, 4 << i, 8 << i, 127);
++      do_test (8 - i, 2 * i, 16 << i, 8 << i, 127);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strnlen.c glibc-2.17-c758a686/benchtests/bench-strnlen.c
+--- glibc-2.17-c758a686/benchtests/bench-strnlen.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strnlen.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,132 @@
++/* Measure strlen functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strnlen"
++#include "bench-string.h"
++
++typedef size_t (*proto_t) (const char *, size_t);
++size_t simple_strnlen (const char *, size_t);
++
++IMPL (simple_strnlen, 0)
++IMPL (strnlen, 1)
++
++size_t
++simple_strnlen (const char *s, size_t maxlen)
++{
++  size_t i;
++
++  for (i = 0; i < maxlen && s[i]; ++i);
++  return i;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s, size_t maxlen, size_t exp_len)
++{
++  size_t len = CALL (impl, s, maxlen), i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (len != exp_len)
++    {
++      error (0, 0, "Wrong result in function %s %zd %zd", impl->name,
++	     len, exp_len);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, maxlen);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t len, size_t maxlen, int max_char)
++{
++  size_t i;
++
++  align &= 7;
++  if (align + len >= page_size)
++    return;
++
++  for (i = 0; i < len; ++i)
++    buf1[align + i] = 1 + 7 * i % max_char;
++  buf1[align + len] = 0;
++
++  printf ("Length %4zd, alignment %2zd:", len, align);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (char *) (buf1 + align), maxlen, MIN (len, maxlen));
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, i, i - 1, 127);
++      do_test (0, i, i, 127);
++      do_test (0, i, i + 1, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, i, i - 1, 127);
++      do_test (i, i, i, 127);
++      do_test (i, i, i + 1, 127);
++    }
++
++  for (i = 2; i <= 10; ++i)
++    {
++      do_test (0, 1 << i, 5000, 127);
++      do_test (1, 1 << i, 5000, 127);
++    }
++
++  for (i = 1; i < 8; ++i)
++    do_test (0, i, 5000, 255);
++
++  for (i = 1; i < 8; ++i)
++    do_test (i, i, 5000, 255);
++
++  for (i = 2; i <= 10; ++i)
++    {
++      do_test (0, 1 << i, 5000, 255);
++      do_test (1, 1 << i, 5000, 255);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strpbrk.c glibc-2.17-c758a686/benchtests/bench-strpbrk.c
+--- glibc-2.17-c758a686/benchtests/bench-strpbrk.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strpbrk.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,176 @@
++/* Measure strpbrk functions.
++   Copyright (C) 2013 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 STRPBRK_RESULT
++# define STRPBRK_RESULT(s, pos) ((s)[(pos)] ? (s) + (pos) : NULL)
++# define RES_TYPE char *
++# define TEST_MAIN
++# define TEST_NAME "strpbrk"
++# include "bench-string.h"
++
++typedef char *(*proto_t) (const char *, const char *);
++char *simple_strpbrk (const char *, const char *);
++char *stupid_strpbrk (const char *, const char *);
++
++IMPL (stupid_strpbrk, 0)
++IMPL (simple_strpbrk, 0)
++IMPL (strpbrk, 1)
++
++char *
++simple_strpbrk (const char *s, const char *rej)
++{
++  const char *r;
++  char c;
++
++  while ((c = *s++) != '\0')
++    for (r = rej; *r != '\0'; ++r)
++      if (*r == c)
++	return (char *) s - 1;
++  return NULL;
++}
++
++char *
++stupid_strpbrk (const char *s, const char *rej)
++{
++  size_t ns = strlen (s), nrej = strlen (rej);
++  size_t i, j;
++
++  for (i = 0; i < ns; ++i)
++    for (j = 0; j < nrej; ++j)
++      if (s[i] == rej[j])
++	return (char *) s + i;
++  return NULL;
++}
++#endif
++
++static void
++do_one_test (impl_t *impl, const char *s, const char *rej, RES_TYPE exp_res)
++{
++  RES_TYPE res = CALL (impl, s, rej);
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (res != exp_res)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     (void *) res, (void *) exp_res);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, rej);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t pos, size_t len)
++{
++  size_t i;
++  int c;
++  RES_TYPE result;
++  char *rej, *s;
++
++  align &= 7;
++  if (align + pos + 10 >= page_size || len > 240)
++    return;
++
++  rej = (char *) (buf2 + (random () & 255));
++  s = (char *) (buf1 + align);
++
++  for (i = 0; i < len; ++i)
++    {
++      rej[i] = random () & 255;
++      if (!rej[i])
++	rej[i] = random () & 255;
++      if (!rej[i])
++	rej[i] = 1 + (random () & 127);
++    }
++  rej[len] = '\0';
++  for (c = 1; c <= 255; ++c)
++    if (strchr (rej, c) == NULL)
++      break;
++
++  for (i = 0; i < pos; ++i)
++    {
++      s[i] = random () & 255;
++      if (strchr (rej, s[i]))
++	{
++	  s[i] = random () & 255;
++	  if (strchr (rej, s[i]))
++	    s[i] = c;
++	}
++    }
++  s[pos] = rej[random () % (len + 1)];
++  if (s[pos])
++    {
++      for (i = pos + 1; i < pos + 10; ++i)
++	s[i] = random () & 255;
++      s[i] = '\0';
++    }
++  result = STRPBRK_RESULT (s, pos);
++
++  printf ("Length %4zd, alignment %2zd, rej len %2zd:", pos, align, len);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s, rej, result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%32s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, 512, i);
++      do_test (i, 512, i);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 4);
++      do_test (i, 16 << i, 4);
++    }
++
++  for (i = 1; i < 8; ++i)
++    do_test (i, 64, 10);
++
++  for (i = 0; i < 64; ++i)
++    do_test (0, i, 6);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strrchr.c glibc-2.17-c758a686/benchtests/bench-strrchr.c
+--- glibc-2.17-c758a686/benchtests/bench-strrchr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strrchr.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,184 @@
++/* Measure STRCHR functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#ifdef WIDE
++# define TEST_NAME "wcsrchr"
++#else
++# define TEST_NAME "strrchr"
++#endif
++#include "bench-string.h"
++
++#ifdef WIDE
++# include <wchar.h>
++# define SIMPLE_STRRCHR simple_wcsrchr
++# define STRRCHR wcsrchr
++# define CHAR wchar_t
++# define UCHAR wchar_t
++# define BIG_CHAR WCHAR_MAX
++# define SMALL_CHAR 1273
++#else
++# define SIMPLE_STRRCHR simple_strrchr
++# define STRRCHR strrchr
++# define CHAR char
++# define UCHAR unsigned char
++# define BIG_CHAR CHAR_MAX
++# define SMALL_CHAR 127
++#endif
++
++typedef CHAR *(*proto_t) (const CHAR *, int);
++CHAR *SIMPLE_STRRCHR (const CHAR *, int);
++
++IMPL (SIMPLE_STRRCHR, 0)
++IMPL (STRRCHR, 1)
++
++CHAR *
++SIMPLE_STRRCHR (const CHAR *s, int c)
++{
++  const CHAR *ret = NULL;
++
++  for (; *s != '\0'; ++s)
++    if (*s == (CHAR) c)
++      ret = s;
++
++  return (CHAR *) (c == '\0' ? s : ret);
++}
++
++static void
++do_one_test (impl_t *impl, const CHAR *s, int c, CHAR *exp_res)
++{
++  CHAR *res = CALL (impl, s, c);
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (res != exp_res)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     res, exp_res);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, c);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t pos, size_t len, int seek_char, int max_char)
++/* For wcsrchr: align here means align not in bytes,
++   but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
++   len for wcschr here isn't in bytes but it's number of wchar_t symbols.  */
++{
++  size_t i;
++  CHAR *result;
++  CHAR *buf = (CHAR *) buf1;
++
++  align &= 7;
++  if ((align + len) * sizeof (CHAR) >= page_size)
++    return;
++
++  for (i = 0; i < len; ++i)
++    {
++      buf[align + i] = (random () * random ()) & max_char;
++      if (!buf[align + i])
++	buf[align + i] = (random () * random ()) & max_char;
++      if (!buf[align + i])
++	buf[align + i] = 1;
++      if ((i > pos || pos >= len) && buf[align + i] == seek_char)
++	buf[align + i] = seek_char + 10 + (random () & 15);
++    }
++  buf[align + len] = 0;
++
++  if (pos < len)
++    {
++      buf[align + pos] = seek_char;
++      result = (CHAR *) (buf + align + pos);
++    }
++  else if (seek_char == 0)
++    result = (CHAR *) (buf + align + len);
++  else
++    result = NULL;
++
++  printf ("Length %4zd, alignment in bytes %2zd:", len, align * sizeof (CHAR));
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, (CHAR *) (buf + align), seek_char, result);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%20s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 2048, 23, SMALL_CHAR);
++      do_test (i, 16 << i, 2048, 23, SMALL_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 64, 256, 23, SMALL_CHAR);
++      do_test (i, 64, 256, 23, BIG_CHAR);
++    }
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, i, i + 1, 23, SMALL_CHAR);
++      do_test (0, i, i + 1, 23, BIG_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 2048, 0, SMALL_CHAR);
++      do_test (i, 16 << i, 2048, 0, SMALL_CHAR);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (i, 64, 256, 0, SMALL_CHAR);
++      do_test (i, 64, 256, 0, BIG_CHAR);
++    }
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, i, i + 1, 0, SMALL_CHAR);
++      do_test (0, i, i + 1, 0, BIG_CHAR);
++    }
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strsep.c glibc-2.17-c758a686/benchtests/bench-strsep.c
+--- glibc-2.17-c758a686/benchtests/bench-strsep.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strsep.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,174 @@
++/* Measure strsep functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strsep"
++#include "bench-string.h"
++
++char *
++simple_strsep (char **s1, char *s2)
++{
++  char *begin;
++  char *s;
++  size_t j = 0;
++
++  begin = *s1;
++  s = begin;
++  if (begin == NULL)
++    return NULL;
++  ssize_t s2len = strlen (s2);
++  while (*s)
++    {
++      for (j = 0; j < s2len; j++)
++	{
++	  if (*s == s2[j])
++	    {
++	      s[0] = '\0';
++	      *s1 = s + 1;
++	      return begin;
++	    }
++	}
++      s++;
++    }
++  *s1 = NULL;
++  return begin;
++}
++
++typedef char *(*proto_t) (const char **, const char *);
++
++IMPL (simple_strsep, 0)
++IMPL (strsep, 1)
++
++static void
++do_one_test (impl_t * impl, const char *s1, const char *s2)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, &s1, s2);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2, int fail)
++{
++  char *s2 = (char *) (buf2 + align2);
++  static const char d[] = "1234567890abcdef";
++#define dl (sizeof (d) - 1)
++  char *ss2 = s2;
++  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
++    {
++      size_t t = l > dl ? dl : l;
++      ss2 = mempcpy (ss2, d, t);
++    }
++  s2[len2] = '\0';
++
++  printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
++	  len1, len2, align1, align2, fail ? "fail" : "found");
++
++  FOR_EACH_IMPL (impl, 0)
++  {
++    char *s1 = (char *) (buf1 + align1);
++    if (fail)
++      {
++	char *ss1 = s1;
++	for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
++	  {
++	    size_t t = l > dl ? dl : l;
++	    memcpy (ss1, d, t);
++	    ++ss1[len2 > 7 ? 7 : len2 - 1];
++	    ss1 += t;
++	  }
++      }
++    else
++      {
++	memset (s1, '0', len1);
++	memcpy (s1 + (len1 - len2) - 2, s2, len2);
++	if ((len1 / len2) > 4)
++	  memcpy (s1 + (len1 - len2) - (3 * len2), s2, len2);
++      }
++    s1[len1] = '\0';
++    do_one_test (impl, s1, s2);
++  }
++  putchar ('\n');
++}
++
++static int
++test_main (void)
++{
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (size_t klen = 2; klen < 32; ++klen)
++    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
++      {
++	do_test (0, 0, hlen, klen, 0);
++	do_test (0, 0, hlen, klen, 1);
++	do_test (0, 3, hlen, klen, 0);
++	do_test (0, 3, hlen, klen, 1);
++	do_test (0, 9, hlen, klen, 0);
++	do_test (0, 9, hlen, klen, 1);
++	do_test (0, 15, hlen, klen, 0);
++	do_test (0, 15, hlen, klen, 1);
++
++	do_test (3, 0, hlen, klen, 0);
++	do_test (3, 0, hlen, klen, 1);
++	do_test (3, 3, hlen, klen, 0);
++	do_test (3, 3, hlen, klen, 1);
++	do_test (3, 9, hlen, klen, 0);
++	do_test (3, 9, hlen, klen, 1);
++	do_test (3, 15, hlen, klen, 0);
++	do_test (3, 15, hlen, klen, 1);
++
++	do_test (9, 0, hlen, klen, 0);
++	do_test (9, 0, hlen, klen, 1);
++	do_test (9, 3, hlen, klen, 0);
++	do_test (9, 3, hlen, klen, 1);
++	do_test (9, 9, hlen, klen, 0);
++	do_test (9, 9, hlen, klen, 1);
++	do_test (9, 15, hlen, klen, 0);
++	do_test (9, 15, hlen, klen, 1);
++
++	do_test (15, 0, hlen, klen, 0);
++	do_test (15, 0, hlen, klen, 1);
++	do_test (15, 3, hlen, klen, 0);
++	do_test (15, 3, hlen, klen, 1);
++	do_test (15, 9, hlen, klen, 0);
++	do_test (15, 9, hlen, klen, 1);
++	do_test (15, 15, hlen, klen, 0);
++	do_test (15, 15, hlen, klen, 1);
++      }
++  do_test (0, 0, page_size - 1, 16, 0);
++  do_test (0, 0, page_size - 1, 16, 1);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strspn.c glibc-2.17-c758a686/benchtests/bench-strspn.c
+--- glibc-2.17-c758a686/benchtests/bench-strspn.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strspn.c	2015-06-20 21:22:16.299458044 -0400
+@@ -0,0 +1,167 @@
++/* Measure strspn functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strspn"
++#include "bench-string.h"
++
++typedef size_t (*proto_t) (const char *, const char *);
++size_t simple_strspn (const char *, const char *);
++size_t stupid_strspn (const char *, const char *);
++
++IMPL (stupid_strspn, 0)
++IMPL (simple_strspn, 0)
++IMPL (strspn, 1)
++
++size_t
++simple_strspn (const char *s, const char *acc)
++{
++  const char *r, *str = s;
++  char c;
++
++  while ((c = *s++) != '\0')
++    {
++      for (r = acc; *r != '\0'; ++r)
++	if (*r == c)
++	  break;
++      if (*r == '\0')
++	return s - str - 1;
++    }
++  return s - str - 1;
++}
++
++size_t
++stupid_strspn (const char *s, const char *acc)
++{
++  size_t ns = strlen (s), nacc = strlen (acc);
++  size_t i, j;
++
++  for (i = 0; i < ns; ++i)
++    {
++      for (j = 0; j < nacc; ++j)
++	if (s[i] == acc[j])
++	  break;
++      if (j == nacc)
++	return i;
++    }
++  return i;
++}
++
++static void
++do_one_test (impl_t *impl, const char *s, const char *acc, size_t exp_res)
++{
++  size_t res = CALL (impl, s, acc), i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  if (res != exp_res)
++    {
++      error (0, 0, "Wrong result in function %s %p %p", impl->name,
++	     (void *) res, (void *) exp_res);
++      ret = 1;
++      return;
++    }
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s, acc);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++static void
++do_test (size_t align, size_t pos, size_t len)
++{
++  size_t i;
++  char *acc, *s;
++
++  align &= 7;
++  if (align + pos + 10 >= page_size || len > 240 || ! len)
++    return;
++
++  acc = (char *) (buf2 + (random () & 255));
++  s = (char *) (buf1 + align);
++
++  for (i = 0; i < len; ++i)
++    {
++      acc[i] = random () & 255;
++      if (!acc[i])
++	acc[i] = random () & 255;
++      if (!acc[i])
++	acc[i] = 1 + (random () & 127);
++    }
++  acc[len] = '\0';
++
++  for (i = 0; i < pos; ++i)
++    s[i] = acc[random () % len];
++  s[pos] = random () & 255;
++  if (strchr (acc, s[pos]))
++    s[pos] = '\0';
++  else
++    {
++      for (i = pos + 1; i < pos + 10; ++i)
++	s[i] = random () & 255;
++      s[i] = '\0';
++    }
++
++  printf ("Length %4zd, alignment %2zd, acc len %2zd:", pos, align, len);
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s, acc, pos);
++
++  putchar ('\n');
++}
++
++int
++test_main (void)
++{
++  size_t i;
++
++  test_init ();
++
++  printf ("%32s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (i = 0; i < 32; ++i)
++    {
++      do_test (0, 512, i);
++      do_test (i, 512, i);
++    }
++
++  for (i = 1; i < 8; ++i)
++    {
++      do_test (0, 16 << i, 4);
++      do_test (i, 16 << i, 4);
++    }
++
++  for (i = 1; i < 8; ++i)
++    do_test (i, 64, 10);
++
++  for (i = 0; i < 64; ++i)
++    do_test (0, i, 6);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strstr.c glibc-2.17-c758a686/benchtests/bench-strstr.c
+--- glibc-2.17-c758a686/benchtests/bench-strstr.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strstr.c	2015-06-20 21:22:16.300458014 -0400
+@@ -0,0 +1,177 @@
++/* Measure strstr functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strstr"
++#include "bench-string.h"
++
++
++#define STRSTR simple_strstr
++#include "../string/strstr.c"
++
++
++static char *
++stupid_strstr (const char *s1, const char *s2)
++{
++  ssize_t s1len = strlen (s1);
++  ssize_t s2len = strlen (s2);
++
++  if (s2len > s1len)
++    return NULL;
++
++  for (ssize_t i = 0; i <= s1len - s2len; ++i)
++    {
++      size_t j;
++      for (j = 0; j < s2len; ++j)
++	if (s1[i + j] != s2[j])
++	  break;
++      if (j == s2len)
++	return (char *) s1 + i;
++    }
++
++  return NULL;
++}
++
++
++typedef char *(*proto_t) (const char *, const char *);
++
++IMPL (stupid_strstr, 0)
++IMPL (simple_strstr, 0)
++IMPL (strstr, 1)
++
++
++static void
++do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++}
++
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2,
++	 int fail)
++{
++  char *s1 = (char *) (buf1 + align1);
++  char *s2 = (char *) (buf2 + align2);
++
++  static const char d[] = "1234567890abcdef";
++#define dl (sizeof (d) - 1)
++  char *ss2 = s2;
++  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
++    {
++      size_t t = l > dl ? dl : l;
++      ss2 = mempcpy (ss2, d, t);
++    }
++  s2[len2] = '\0';
++
++  if (fail)
++    {
++      char *ss1 = s1;
++      for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
++	{
++	  size_t t = l > dl ? dl : l;
++	  memcpy (ss1, d, t);
++	  ++ss1[len2 > 7 ? 7 : len2 - 1];
++	  ss1 += t;
++	}
++    }
++  else
++    {
++      memset (s1, '0', len1);
++      memcpy (s1 + len1 - len2, s2, len2);
++    }
++  s1[len1] = '\0';
++
++  printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
++	  len1, len2, align1, align2, fail ? "fail" : "found");
++
++  FOR_EACH_IMPL (impl, 0)
++    do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
++
++  putchar ('\n');
++}
++
++static int
++test_main (void)
++{
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (size_t klen = 2; klen < 32; ++klen)
++    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
++      {
++	do_test (0, 0, hlen, klen, 0);
++	do_test (0, 0, hlen, klen, 1);
++	do_test (0, 3, hlen, klen, 0);
++	do_test (0, 3, hlen, klen, 1);
++	do_test (0, 9, hlen, klen, 0);
++	do_test (0, 9, hlen, klen, 1);
++	do_test (0, 15, hlen, klen, 0);
++	do_test (0, 15, hlen, klen, 1);
++
++	do_test (3, 0, hlen, klen, 0);
++	do_test (3, 0, hlen, klen, 1);
++	do_test (3, 3, hlen, klen, 0);
++	do_test (3, 3, hlen, klen, 1);
++	do_test (3, 9, hlen, klen, 0);
++	do_test (3, 9, hlen, klen, 1);
++	do_test (3, 15, hlen, klen, 0);
++	do_test (3, 15, hlen, klen, 1);
++
++	do_test (9, 0, hlen, klen, 0);
++	do_test (9, 0, hlen, klen, 1);
++	do_test (9, 3, hlen, klen, 0);
++	do_test (9, 3, hlen, klen, 1);
++	do_test (9, 9, hlen, klen, 0);
++	do_test (9, 9, hlen, klen, 1);
++	do_test (9, 15, hlen, klen, 0);
++	do_test (9, 15, hlen, klen, 1);
++
++	do_test (15, 0, hlen, klen, 0);
++	do_test (15, 0, hlen, klen, 1);
++	do_test (15, 3, hlen, klen, 0);
++	do_test (15, 3, hlen, klen, 1);
++	do_test (15, 9, hlen, klen, 0);
++	do_test (15, 9, hlen, klen, 1);
++	do_test (15, 15, hlen, klen, 0);
++	do_test (15, 15, hlen, klen, 1);
++      }
++
++  do_test (0, 0, page_size - 1, 16, 0);
++  do_test (0, 0, page_size - 1, 16, 1);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strtod.c glibc-2.17-c758a686/benchtests/bench-strtod.c
+--- glibc-2.17-c758a686/benchtests/bench-strtod.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strtod.c	2015-06-20 21:22:16.300458014 -0400
+@@ -0,0 +1,120 @@
++/* Measure strtod implementation.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strtod"
++
++#include <stdio.h>
++#include <stdlib.h>
++#include "bench-timing.h"
++
++#undef INNER_LOOP_ITERS
++#define INNER_LOOP_ITERS 65536
++
++static const char *inputs[] =
++{
++  "1e308",
++  "100000000e300",
++  "0x1p1023",
++  "0x1000p1011",
++  "0x1p1020",
++  "0x0.00001p1040" "1e-307",
++  "0.000001e-301",
++  "0.0000001e-300",
++  "0.00000001e-299",
++  "1000000e-313",
++  "10000000e-314",
++  "100000000e-315",
++  "0x1p-1021",
++  "0x1000p-1033",
++  "0x10000p-1037",
++  "0x0.001p-1009",
++  "0x0.0001p-1005",
++  "12.345",
++  "12.345e19",
++  "-.1e+9",
++  ".125",
++  "1e20",
++  "0e-19",
++  "4\00012",
++  "5.9e-76",
++  "0x1.4p+3",
++  "0xAp0",
++  "0x0Ap0",
++  "0x0A",
++  "0xA0",
++  "0x0.A0p8",
++  "0x0.50p9",
++  "0x0.28p10",
++  "0x0.14p11",
++  "0x0.0A0p12",
++  "0x0.050p13",
++  "0x0.028p14",
++  "0x0.014p15",
++  "0x00.00A0p16",
++  "0x00.0050p17",
++  "0x00.0028p18",
++  "0x00.0014p19",
++  "0x1p-1023",
++  "0x0.8p-1022",
++  "Inf",
++  "-Inf",
++  "+InFiNiTy",
++  "0x80000Ap-23",
++  "1e-324",
++  "0x100000000000008p0",
++  "0x100000000000008.p0",
++  "0x100000000000008.00p0",
++  "0x10000000000000800p0",
++  "0x10000000000000801p0",
++  NULL
++};
++
++int
++do_bench (void)
++{
++  const size_t iters = INNER_LOOP_ITERS;
++  timing_t res __attribute__ ((unused));
++
++  TIMING_INIT (res);
++
++  for (size_t i = 0; inputs[i] != NULL; ++i)
++    {
++      char *ep;
++      timing_t start, stop, cur;
++
++      printf ("Input %-24s:", inputs[i]);
++      TIMING_NOW (start);
++      for (size_t j = 0; j < iters; ++j)
++	strtod (inputs[i], &ep);
++      TIMING_NOW (stop);
++
++      TIMING_DIFF (cur, start, stop);
++      TIMING_PRINT_MEAN ((double) cur, (double) iters);
++      putchar ('\n');
++    }
++
++  return 0;
++}
++
++#define TEST_FUNCTION do_bench ()
++
++/* On slower platforms this test needs more than the default 2 seconds.  */
++#define TIMEOUT 10
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-strtok.c glibc-2.17-c758a686/benchtests/bench-strtok.c
+--- glibc-2.17-c758a686/benchtests/bench-strtok.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-strtok.c	2015-06-20 21:22:16.300458014 -0400
+@@ -0,0 +1,152 @@
++/* Measure strtok functions.
++   Copyright (C) 2013 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 TEST_MAIN
++#define TEST_NAME "strtok"
++#include "bench-string.h"
++
++#define STRTOK strtok_string
++#include <string/strtok.c>
++
++
++typedef char *(*proto_t) (const char *, const char *);
++
++IMPL (strtok_string, 0)
++IMPL (strtok, 1)
++
++static void
++do_one_test (impl_t * impl, const char *s1, const char *s2)
++{
++  size_t i, iters = INNER_LOOP_ITERS;
++  timing_t start, stop, cur;
++  TIMING_NOW (start);
++  for (i = 0; i < iters; ++i)
++    {
++      CALL (impl, s1, s2);
++      CALL (impl, NULL, s2);
++      CALL (impl, NULL, s2);
++    }
++  TIMING_NOW (stop);
++
++  TIMING_DIFF (cur, start, stop);
++
++  TIMING_PRINT_MEAN ((double) cur, (double) iters);
++
++}
++
++
++static void
++do_test (size_t align1, size_t align2, size_t len1, size_t len2, int fail)
++{
++  char *s2 = (char *) (buf2 + align2);
++  static const char d[] = "1234567890abcdef";
++#define dl (sizeof (d) - 1)
++  char *ss2 = s2;
++  for (size_t l = len2; l > 0; l = l > dl ? l - dl : 0)
++    {
++      size_t t = l > dl ? dl : l;
++      ss2 = mempcpy (ss2, d, t);
++    }
++  s2[len2] = '\0';
++
++  printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
++	  len1, len2, align1, align2, fail ? "fail" : "found");
++
++  FOR_EACH_IMPL (impl, 0)
++  {
++    char *s1 = (char *) (buf1 + align1);
++    if (fail)
++      {
++	char *ss1 = s1;
++	for (size_t l = len1; l > 0; l = l > dl ? l - dl : 0)
++	  {
++	    size_t t = l > dl ? dl : l;
++	    memcpy (ss1, d, t);
++	    ++ss1[len2 > 7 ? 7 : len2 - 1];
++	    ss1 += t;
++	  }
++      }
++    else
++      {
++	memset (s1, '0', len1);
++	memcpy (s1 + (len1 - len2) - 2, s2, len2);
++	if ((len1 / len2) > 4)
++	  memcpy (s1 + (len1 - len2) - (3 * len2), s2, len2);
++      }
++    s1[len1] = '\0';
++    do_one_test (impl, s1, s2);
++  }
++  putchar ('\n');
++}
++
++static int
++test_main (void)
++{
++  test_init ();
++
++  printf ("%23s", "");
++  FOR_EACH_IMPL (impl, 0)
++    printf ("\t%s", impl->name);
++  putchar ('\n');
++
++  for (size_t klen = 2; klen < 32; ++klen)
++    for (size_t hlen = 2 * klen; hlen < 16 * klen; hlen += klen)
++      {
++	do_test (0, 0, hlen, klen, 0);
++	do_test (0, 0, hlen, klen, 1);
++	do_test (0, 3, hlen, klen, 0);
++	do_test (0, 3, hlen, klen, 1);
++	do_test (0, 9, hlen, klen, 0);
++	do_test (0, 9, hlen, klen, 1);
++	do_test (0, 15, hlen, klen, 0);
++	do_test (0, 15, hlen, klen, 1);
++
++	do_test (3, 0, hlen, klen, 0);
++	do_test (3, 0, hlen, klen, 1);
++	do_test (3, 3, hlen, klen, 0);
++	do_test (3, 3, hlen, klen, 1);
++	do_test (3, 9, hlen, klen, 0);
++	do_test (3, 9, hlen, klen, 1);
++	do_test (3, 15, hlen, klen, 0);
++	do_test (3, 15, hlen, klen, 1);
++
++	do_test (9, 0, hlen, klen, 0);
++	do_test (9, 0, hlen, klen, 1);
++	do_test (9, 3, hlen, klen, 0);
++	do_test (9, 3, hlen, klen, 1);
++	do_test (9, 9, hlen, klen, 0);
++	do_test (9, 9, hlen, klen, 1);
++	do_test (9, 15, hlen, klen, 0);
++	do_test (9, 15, hlen, klen, 1);
++
++	do_test (15, 0, hlen, klen, 0);
++	do_test (15, 0, hlen, klen, 1);
++	do_test (15, 3, hlen, klen, 0);
++	do_test (15, 3, hlen, klen, 1);
++	do_test (15, 9, hlen, klen, 0);
++	do_test (15, 9, hlen, klen, 1);
++	do_test (15, 15, hlen, klen, 0);
++	do_test (15, 15, hlen, klen, 1);
++      }
++  do_test (0, 0, page_size - 1, 16, 0);
++  do_test (0, 0, page_size - 1, 16, 1);
++
++  return ret;
++}
++
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/benchtests/bench-timing.h glibc-2.17-c758a686/benchtests/bench-timing.h
+--- glibc-2.17-c758a686/benchtests/bench-timing.h	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-timing.h	2015-06-20 21:22:16.300458014 -0400
+@@ -0,0 +1,64 @@
++/* Define timing macros.
++   Copyright (C) 2013 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 <hp-timing.h>
++#include <stdint.h>
++
++#if HP_TIMING_AVAIL && !defined USE_CLOCK_GETTIME
++# define GL(x) _##x
++# define GLRO(x) _##x
++typedef hp_timing_t timing_t;
++
++# define TIMING_TYPE "hp_timing"
++
++# define TIMING_INIT(res) ({ (res) = 1; })
++
++# define TIMING_NOW(var) HP_TIMING_NOW (var)
++# define TIMING_DIFF(diff, start, end) HP_TIMING_DIFF ((diff), (start), (end))
++# define TIMING_ACCUM(sum, diff) HP_TIMING_ACCUM_NT ((sum), (diff))
++
++#else
++
++#include <time.h>
++typedef uint64_t timing_t;
++
++# define TIMING_TYPE "clock_gettime"
++
++/* Measure the resolution of the clock so we can scale the number of
++   benchmark iterations by this value.  */
++# define TIMING_INIT(res) \
++({									      \
++  struct timespec start;						      \
++  clock_getres (CLOCK_PROCESS_CPUTIME_ID, &start);			      \
++  (res) = start.tv_nsec;					      \
++})
++
++# define TIMING_NOW(var) \
++({									      \
++  struct timespec tv;							      \
++  clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &tv);			      \
++  (var) = (uint64_t) (tv.tv_nsec + (uint64_t) 1000000000 * tv.tv_sec);	      \
++})
++
++# define TIMING_DIFF(diff, start, end) (diff) = (end) - (start)
++# define TIMING_ACCUM(sum, diff) (sum) += (diff)
++
++#endif
++
++#define TIMING_PRINT_MEAN(d_total_s, d_iters) \
++  printf ("\t%g", (d_total_s) / (d_iters))
+diff -urN glibc-2.17-c758a686/benchtests/bench-timing-type.c glibc-2.17-c758a686/benchtests/bench-timing-type.c
+--- glibc-2.17-c758a686/benchtests/bench-timing-type.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/bench-timing-type.c	2015-06-20 21:22:16.300458014 -0400
+@@ -0,0 +1,27 @@
++/* Print out the timing type used by the benchmark run.
++   Copyright (C) 2014 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 "bench-timing.h"
++#include <stdio.h>
++
++int
++main (int argc, char **argv)
++{
++  puts (TIMING_TYPE);
++  return 0;
++}
+diff -urN glibc-2.17-c758a686/benchtests/cosh-inputs glibc-2.17-c758a686/benchtests/cosh-inputs
+--- glibc-2.17-c758a686/benchtests/cosh-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/cosh-inputs	2015-06-20 21:22:16.300458014 -0400
+@@ -0,0 +1,403 @@
++## args: double
++## ret: double
++## includes: math.h
++-0x1.630fb3c419c60p9
++0x1.631844f7a96d0p9
++-0x1.f56fa7db86bf4p5
++-0x1.631675fa3bc04p9
++0x1.1946f04588844p-371
++-0x1.62fac5eb878c6p9
++0x1.c2f1e6340f9acp-1
++0x1.38d5f6796e1c6p-172
++0x1.652cb53670db0p6
++0x1.bab6037e306ecp4
++-0x1.d6cc6557b9fe1p-224
++0x1.2a4a35f11dc8bp-1
++0x1.7acdf3096f467p-2
++0x1.62ea1202d9816p9
++-0x1.ab3a9254e8794p5
++-0x1.7581c71bf2925p3
++0x1.6335078d8f6f1p9
++-0x1.562ea1c51f0f0p7
++-0x1.5ad3171705e85p2
++-0x1.a28481bf5abc7p6
++-0x1.07f19394102cap-155
++0x1.714f115ded7edp-395
++-0x1.e3b4e57228498p-226
++0x1.62ecb5c679f45p9
++0x1.f5ef70c4d6fe3p-947
++0x1.07c7d5461c4c1p2
++0x1.230e2092aaa0ep5
++0x1.62edf5f8ef2d6p9
++0x1.633c66e5307e9p9
++-0x1.ca74063b21508p1
++-0x1.4517c5d83e40fp-1
++-0x1.3d480025e3245p7
++0x1.6307c4b105e8bp9
++0x1.dac293f73d850p5
++0x1.ddc3c42ec39bap6
++0x1.df804326360d0p4
++-0x1.a729d2ed077a7p8
++0x1.62e6b6e528603p9
++0x1.630252d0050e1p9
++-0x1.d9e2923618018p-312
++-0x1.da7d05daf1653p-360
++0x1.632b742e1d0c9p9
++-0x1.62fdf19fea01cp9
++0x1.6328531b0a130p9
++0x1.626da3cbd279bp-65
++0x1.632cc11415f53p9
++0x1.99320680205a9p-799
++-0x1.3a7903b952ff1p-83
++-0x1.895200d5fefb6p-119
++-0x1.c26a3720198fcp2
++-0x1.9fa0e43bb03e6p-2
++0x1.62e6378477ec7p9
++-0x1.5a5f3792646e9p-860
++0x1.1080911dae7d0p-1013
++0x1.6304f3ed14c82p9
++0x1.6337149eda940p9
++0x1.62ec21c319df7p9
++-0x1.239ff60f28877p6
++0x1.dec232d4b4a3fp-2
++-0x1.6655b35bcb861p-951
++0x1.6322f270f7ff5p9
++0x1.62e67590a0733p9
++-0x1.3bd6d2de5b059p-627
++-0x1.4d2140c9727ddp8
++0x1.6316835c7cf05p9
++-0x1.150951ee1275fp0
++-0x1.8c4344a80043fp-2
++-0x1.633196bcef4aap9
++0x1.af57d51a27e27p-747
++-0x1.7f4191bd896cbp-2
++-0x1.88703361b4ad5p3
++0x1.24aa7790e8d36p2
++-0x1.62faa7a46d17bp9
++-0x1.9a47f1cda4652p3
++-0x1.6315b48bf51f2p9
++-0x1.141d54326d8a1p7
++0x1.23ffc38155c52p-233
++-0x1.57b2662e0cbc1p2
++-0x1.1929f6abc031bp8
++-0x1.590710edec44dp-817
++0x1.94c7749a2b80cp-457
++-0x1.87d6401ddca88p-676
++-0x1.81cfd513f4ab9p-623
++-0x1.69fad03b43d66p-700
++0x1.79300023a52c8p0
++-0x1.ba2396d33e90cp8
++-0x1.63057386325ebp9
++-0x1.728176d7c18f0p-24
++-0x1.c69e923a07adcp6
++-0x1.e07082cab8c82p-573
++0x1.632b31037059ap9
++-0x1.6336976d5e8adp9
++0x1.b6cf07dd00ddep-140
++-0x1.633c1105ee490p9
++-0x1.1284f1b6941f8p1
++-0x1.6c8b7360c8e61p0
++0x1.6d20f44123714p7
++0x1.cc4af059aa66ap8
++-0x1.8a2a250959686p-57
++0x1.f02ac609a5cc1p-87
++-0x1.a754215ca985dp-2
++0x1.2825d1de625c8p6
++0x1.3c1dd34b185a1p6
++0x1.5486c13874548p-359
++-0x1.6c62d6c0af55fp6
++0x1.5947c680bd235p1
++-0x1.d1ecf009b1e3ap8
++0x1.d6c6f6b983d6cp7
++-0x1.d3c651d1da802p0
++0x1.248074c8c7fd2p1
++0x1.630c71268199ap9
++0x1.22379013a9834p-349
++0x1.6387b36f3b875p8
++-0x1.632dc46b7230cp9
++-0x1.216292f12973ap-436
++0x1.0223b02b8d96bp-459
++0x1.4512d30165887p1
++0x1.2762305f5efcbp0
++-0x1.8982d0e78510bp-802
++0x1.8713c2f7dd25ap-6
++0x1.f690a6c3716cbp-3
++0x1.afe4e13938837p-689
++0x1.62ff7470df95dp9
++-0x1.66b997e7d1793p3
++0x1.aa64953830f35p-1
++-0x1.05cbb323669c8p7
++0x1.df98b1662cf01p8
++-0x1.84acb4c33fff9p1
++-0x1.75d6f3839dffbp2
++0x1.6302c49c75ac4p9
++0x1.54c5f63777d5ap0
++-0x1.5329b46ad494ep8
++0x1.62f1d7dc4e8bfp9
++0x1.5e2af7dfe1034p9
++0x1.46b0f34a60c14p-276
++0x1.6302b7464cd16p9
++0x1.6acba1328de25p-2
++0x1.214126ebc9ba2p0
++-0x1.c6abd4778861bp3
++0x1.62ee439267fe4p9
++-0x1.019e020b2eed3p-918
++0x1.67c174b511e76p-194
++-0x1.a61b930d87e17p-197
++0x1.6326673bf0ee0p9
++0x1.62fb546601bb5p9
++-0x1.630397a6b37e0p9
++-0x1.487513da26b06p5
++-0x1.026fa5d7b42fcp-1
++0x1.a585d6604b0b1p-686
++0x1.f9dfc189a7a8dp-2
++-0x1.68c8d3ca045f0p0
++0x1.0de7b0af3eca8p-424
++0x1.9bceb245013d8p-1
++-0x1.b47a67fa0f535p-238
++0x1.31a6458858034p7
++-0x1.0baf3575dd3b1p-968
++0x1.5d07807c20bb9p1
++0x1.eb7555bb47463p5
++0x1.6300e31dc8554p9
++0x1.56bd211140702p-963
++-0x1.62fc3361285d3p9
++0x1.6329f34ef70a1p9
++0x1.3b63d61257d13p4
++0x1.861950f440148p-1
++0x1.a37ad4ec1d969p-346
++-0x1.632b611f08364p9
++-0x1.52594428d68c5p1
++-0x1.6323360b63d60p9
++-0x1.cbeb65785a18cp3
++-0x1.35d973c1b14fbp1
++-0x1.dd4d80673e7d0p-159
++0x1.1610c328054c1p-749
++0x1.d69ba47595c68p3
++-0x1.21c707e50660dp4
++-0x1.0608868eedbc7p-439
++0x1.633cd176d9771p9
++-0x1.fb2f329c0bb96p6
++0x1.b7ed468fb04f9p-2
++-0x1.23f9c5b9b41c5p6
++-0x1.9629f1520f28bp-230
++-0x1.6303c0b5329e9p9
++0x1.0738a10cb2383p6
++0x1.6949236f0fb13p0
++0x1.9356878778911p4
++0x1.6318527f69db0p9
++-0x1.915ff68d55569p5
++-0x1.3c0e136ebb1d3p8
++0x1.21c663cb76efbp-712
++0x1.631510cd8cc49p9
++-0x1.8a9232ce1ce75p-685
++-0x1.62e9313aabeb2p9
++-0x1.160a431da0f5ep-1
++-0x1.50420407b4980p-540
++0x1.3db012d4e554dp5
++0x1.07fe346846679p2
++0x1.e7b8c3d24cd12p-603
++0x1.6e9e4075373bbp-2
++0x1.99e534ba6b8c9p1
++-0x1.ac4ea356f7e7ap-1
++0x1.26d654fd77e51p-126
++0x1.630a6325d4276p9
++0x1.63018139cc344p9
++0x1.62f446bf431b8p9
++-0x1.62fa736043269p9
++0x1.62f6f6ca932f5p9
++-0x1.db3ff2317460fp-401
++0x1.182092617c182p-902
++-0x1.633510495d169p9
++0x1.07f565702a6dbp-1
++-0x1.62f3821bac3f3p9
++-0x1.de739010d6091p7
++-0x1.f6a97309476d8p6
++-0x1.92e537f3ea327p-2
++0x1.630181fc28954p9
++-0x1.baead70b0c2bap4
++0x1.6329675608d9fp9
++0x1.631ca21fe1f5ap9
++0x1.12e5e651f43bep0
++0x1.5c1404cdf4b6dp-653
++-0x1.6327e1c51ff78p9
++-0x1.8b5c643c1f677p-1
++0x1.f017e3196ac82p3
++-0x1.320c539d2690cp8
++0x1.3232266740c50p1
++-0x1.9fb7342efeec0p-903
++0x1.65f6b5e818e38p2
++0x1.f608f27517700p-132
++-0x1.6701731068abfp-476
++0x1.62f873b46c417p9
++-0x1.10ab76257be04p-134
++-0x1.71aa41f376409p3
++0x1.aa3c546601d68p6
++0x1.330af2c1875b4p-584
++0x1.467a936424936p8
++0x1.402ca060e1497p8
++0x1.8195955afb315p7
++0x1.e422c06fda329p-252
++-0x1.9725c1ddcc807p5
++-0x1.0a669663e4824p1
++0x1.da54851488f44p-650
++-0x1.2bf936af0bb54p4
++0x1.c7b7361a9d625p5
++0x1.fbafe37560e23p0
++0x1.32a202fb0895dp7
++0x1.8507b472339c2p3
++-0x1.b0498135f2cf1p-40
++-0x1.34b9e14e1af56p5
++-0x1.6316075c46ee9p9
++-0x1.d96f3088164d1p-771
++0x1.64ec801c7fc0cp1
++-0x1.6330b03f5aa48p9
++0x1.8752740d1aff0p2
++-0x1.b276e5fc0915ap8
++0x1.3fcdd73dbc27ep-603
++-0x1.09774517f3944p7
++-0x1.6319f733c541fp9
++-0x1.7019f600db82cp7
++-0x1.6317b78869f21p9
++0x1.903ff6c315937p-2
++0x1.fcd75555d1bf5p2
++0x1.a552c2076a2c0p4
++0x1.92c1858903f0ap-668
++-0x1.c91a744e3a0b7p-1
++-0x1.596c614756426p-305
++-0x1.cc5644d829eacp-167
++-0x1.bc96e1aaf042bp0
++0x1.6337b63365473p9
++-0x1.ca384346f16a9p8
++0x1.465d81dad540ep7
++0x1.632396c691df1p9
++-0x1.5695b6e7fcd02p6
++-0x1.f9a446420cdc7p3
++0x1.f0ad831c3abb4p-46
++-0x1.ce3bf20083050p8
++0x1.0b72226f94781p3
++0x1.2f75110873a31p8
++0x1.3877f0875dea2p5
++0x1.632045a8a7ef9p9
++0x1.62f1877c1501ep9
++0x1.6310e758dfd28p9
++0x1.630e01d39d028p9
++0x1.62f23680e783cp9
++0x1.83f8e51d82968p6
++0x1.7e0aa46083883p-2
++0x1.00e73296682cap7
++0x1.e333e66e5016ep-1
++0x1.62f9213f8bc1fp9
++-0x1.1043c4ca951fbp-23
++-0x1.231e514c403e4p2
++0x1.493644a3cb32cp9
++0x1.6303738c05d04p9
++0x1.6336a46b6c9bap9
++0x1.9d2f87fc603f4p5
++-0x1.633a822e16e6fp9
++-0x1.62f55568a253dp9
++-0x1.1262a6a8b160cp-166
++0x1.ee36b15df2fc4p7
++-0x1.761b008109568p-95
++-0x1.62eff1edf3d60p9
++0x1.aeceb373ec08dp5
++0x1.1f00608d6c2abp-663
++0x1.691f4114ddb68p1
++0x1.3e57e666e2e04p3
++-0x1.d897a0d2877f2p3
++-0x1.2cd5b784df531p-548
++0x1.dde5178b689c3p5
++-0x1.9a5ff5ea279f8p6
++0x1.434c61151b76bp-266
++-0x1.ebd04328781a7p-781
++-0x1.a7a0d286d7cc0p0
++-0x1.7cd5764bf11ffp7
++-0x1.632432d0e9e8fp9
++-0x1.62e861c33ae29p9
++0x1.fe89236cc6a12p-1
++-0x1.daa2368bfcef6p-410
++-0x1.a69a66dbd2ea1p8
++0x1.91b5b4560bceap3
++-0x1.0d2823f9d0f72p3
++-0x1.630ef52917607p9
++-0x1.2a2bb2e417439p6
++0x1.cfd2c4878fd4ep6
++-0x1.e6ef0724cf5d8p-2
++-0x1.d3e823224ebe4p8
++-0x1.79d546d7ccac5p-130
++-0x1.632752aab262cp9
++-0x1.98df07527c0bbp8
++0x1.6312d35913b55p9
++0x1.600ef62445c5ep4
++-0x1.62e93642f1118p9
++0x1.d0378703154bap3
++-0x1.a3c9c5aedad89p-819
++0x1.9150c46f64e72p-59
++-0x1.631537abd1539p9
++0x1.4eb503a5e519cp6
++-0x1.c276053dd303bp-733
++-0x1.f9d4144b54ba6p1
++0x1.d0d367337f7f6p1
++0x1.2b2582d457cd0p6
++-0x1.8c1a422a7d8b8p4
++-0x1.633754b36f51ap9
++-0x1.62f596dff99e7p9
++0x1.d63fe6b5c7c89p7
++-0x1.6300b68646dc7p9
++-0x1.630544284f262p9
++-0x1.2a94d776d7790p3
++0x1.33e954a4d5c5fp-916
++0x1.25e337d99f414p-965
++-0x1.06277554e7c06p-460
++0x1.883ee57d70e7dp-31
++0x1.bb0de68e6b79bp-2
++0x1.62f667f0092adp9
++-0x1.496ec324e967fp5
++-0x1.9d6b07d830151p-355
++0x1.666da5675e27fp1
++-0x1.f7cdd2a74fc06p1
++-0x1.2cdd0674e4abfp7
++-0x1.0d6877109150dp-846
++-0x1.cf43b2546254bp-1
++0x1.0078e7f84d8d8p6
++0x1.62ef2138efd07p9
++0x1.b6e1c50cdb9d1p-553
++0x1.90eb01a683bc0p-2
++0x1.ea80c14d17262p4
++0x1.e3928304b1b20p7
++-0x1.5fc8a731a1822p-692
++-0x1.1de0320fc0737p9
++-0x1.b07147eb43dd0p4
++0x1.62fa155e6e26ep9
++0x1.213554dad3888p9
++-0x1.66e894b6d218cp6
++-0x1.7b67d6318a255p7
++-0x1.1b005777a51cdp7
++0x1.62e9f2b4a0744p9
++0x1.d181a480e6c92p-478
++-0x1.fe14d1c964b0dp-493
++-0x1.6632749cd8f5fp-320
++0x1.d038a32d61933p8
++0x1.632a66cd5c94bp9
++0x1.631f833e694f8p9
++0x1.e111c646e8043p-139
++-0x1.631ec3cf4a7b9p9
++0x1.6311f75346d75p9
++-0x1.c6d344d145206p5
++0x1.ad42672f6fed7p0
++-0x1.f4d3f0d1b85eep7
++0x1.d35412055367bp7
++-0x1.8e94d1fb70dcep2
++0x1.04c9f0425e693p2
++-0x1.b0bb57c60b6a0p5
++0x1.73d4f770b54e0p5
++0x1.bcb6129b5ff2bp8
++-0x1.c82390742c1b2p-832
++-0x1.bed2624f0b283p3
++-0x1.62fbd7e6a4400p9
++0x1.262d57250d7cfp-656
++-0x1.1ebe27d65ffa7p6
++0x1.7ab2a69e414b6p1
++0x1.579870e61406fp2
++0x1.baaef71d93bc9p-22
++-0x1.6321d7d010e1ap9
+diff -urN glibc-2.17-c758a686/benchtests/cos-inputs glibc-2.17-c758a686/benchtests/cos-inputs
+--- glibc-2.17-c758a686/benchtests/cos-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/cos-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,2411 @@
++## args: double
++## ret: double
++## includes: math.h
++-0x1.5500006d24c56p657
++-0x1.74eb14d50ab58p838
++0x1.b6e5537112339p2
++-0x1.5320f43535558p30
++0x1.a5d743be1ed81p19
++-0x1.e44a771e82dd8p325
++-0x1.37c07097b1e0bp19
++0x1.b6da163b3a193p-8
++0x1.9c1d26a5a4d15p19
++0x1.24fb45187e1cfp25
++-0x1.8a7204656d1c5p17
++-0x1.a59a742066c34p34
++0x1.8907a5632a248p35
++-0x1.e481d625714fbp0
++-0x1.ef80132f1ffafp-12
++-0x1.e9da155008608p671
++0x1.7a6085f1f7a0bp24
++0x1.2d6d6713a3cb3p9
++-0x1.109665062930bp0
++-0x1.65ded44238895p20
++-0x1.4debb5bad15c9p411
++-0x1.b6c131e9e2a95p414
++-0x1.896a57dbdc990p0
++0x1.345f96c1b84cbp46
++-0x1.e54805da72fa3p-24
++-0x1.d54bf16b395bcp23
++-0x1.47f9c5e27f6f3p707
++-0x1.b8a5440ee9fd7p9
++0x1.5ff3170744344p-18
++0x1.266593131001bp1020
++0x1.42e0f5708b4d1p23
++-0x1.6279c65ab2acap3
++-0x1.e5ef0437f662ap15
++-0x1.0750602edf46ap562
++0x1.249941e897f8dp44
++0x1.436c067c4c00cp26
++-0x1.4334507e7a73bp-5
++-0x1.5f99b4d006698p25
++0x1.11697571c9c99p502
++0x1.253f915648fd2p46
++-0x1.2ecfb6fd18ffcp332
++-0x1.2b6e350fc35dap25
++-0x1.a26f8116b1f53p195
++-0x1.491d341c65181p-7
++0x1.3c13e14118343p38
++-0x1.a6a105deff5e0p5
++-0x1.fbe7761b1e8d2p18
++0x1.6709c7306f030p26
++-0x1.adbf8321968d5p112
++0x1.d9a53349d7df5p624
++0x1.5454e1450ae1cp463
++-0x1.5e0c04637d573p724
++0x1.7951c309d6e27p850
++0x1.285dc7fdae1ccp26
++-0x1.c8c2c6e7107dcp40
++-0x1.b5afc39812d5cp73
++-0x1.dbf7863f7522dp-9
++0x1.6ac6347189089p36
++0x1.27b04425488afp31
++0x1.cf38e00daa5afp370
++0x1.303432a81f7e0p189
++-0x1.8c05308efd7dbp0
++-0x1.249b044f1f591p-1
++-0x1.bf68624ae32d8p315
++0x1.66c281dc83c31p327
++-0x1.486c663f75760p2
++-0x1.feab128c4d050p878
++0x1.f2db6323e2bc8p47
++0x1.aba1300582abfp-1
++-0x1.70b692602f649p28
++0x1.63bbd511e2d1cp1019
++-0x1.ad48262c26df0p-23
++0x1.e7a7573e40d0dp1
++0x1.5081452ccba88p449
++-0x1.0198677d57aaap19
++0x1.78cc5057c8ea8p319
++-0x1.fbf866574db56p1
++-0x1.13cf375475387p0
++0x1.9e05552a6ebdbp5
++0x1.fe8ec1124c5b2p17
++0x1.801683636a380p854
++0x1.bed635dab7cc3p10
++0x1.29d4d1734709ap23
++-0x1.692a2422044fbp14
++-0x1.5a8db25d26e70p0
++0x1.65e3870f3c860p309
++0x1.3caf03947f677p1
++0x1.0a60b6ecb0107p22
++0x1.8cbcc6715593ep30
++0x1.faa85328a30d0p858
++-0x1.700da718a4a31p0
++0x1.59c2127ae8e32p20
++0x1.a5e3214dc3d15p647
++-0x1.1db30365f086dp1
++-0x1.0399c3c28453ap0
++-0x1.dd8f835681c23p1017
++0x1.2751c6b1cde31p478
++-0x1.b881719d9f6bdp-16
++0x1.22f885319d1b5p-20
++0x1.e5d4d0d25845ap-23
++0x1.0045944e09121p37
++0x1.3fa8c311b4a60p38
++0x1.e55e21efd912dp46
++0x1.6d5f5310aea1bp646
++-0x1.d3570603de208p23
++0x1.3365358de2fe1p161
++-0x1.629526ed15f02p26
++-0x1.e62dc4d44fab1p40
++0x1.e1f9c02374c6dp24
++-0x1.90a100664e089p-21
++0x1.8dafd569a76b4p26
++-0x1.406e919853bcfp694
++0x1.931d703570765p711
++-0x1.6973e3885a11ep0
++0x1.9e6a122e9eb4ap8
++0x1.35a7e5d0935fdp222
++-0x1.2d6c2408f3370p667
++0x1.e08e82243180fp0
++-0x1.ec6237ba9b765p906
++-0x1.f01e76edc5f71p0
++-0x1.5cbd54e60a98ep-1
++0x1.9e0250bdd8df6p426
++0x1.d78115ab10587p107
++-0x1.2d739249672fbp17
++0x1.fedb779d35b35p41
++-0x1.8f0c6774e24acp889
++0x1.0244d1b6b4fe3p31
++-0x1.c2bfd0a931704p3
++-0x1.1cf0950e0a018p15
++-0x1.ec54b3a8ffc12p24
++-0x1.88c5a3114de94p492
++-0x1.30b5d5aec851cp940
++-0x1.5b9bc4ee38a1bp-24
++0x1.3341961dfc2ddp659
++-0x1.c78046362a6a5p3
++0x1.2d6e122696618p750
++-0x1.4730d67c27d89p-3
++-0x1.e6f9821fd5f72p21
++-0x1.dc9c33c3b4affp11
++0x1.f0390127af37bp1
++0x1.a105328b91461p904
++0x1.ca3296a765ee9p29
++0x1.9ed025781f734p-8
++-0x1.38b913b9a8502p54
++0x1.80cf557137b99p40
++-0x1.ef48673d98d25p20
++0x1.e98c94063264ep314
++-0x1.98cf55855bf23p0
++0x1.a20040bbc9705p24
++-0x1.bbaa1373a6b04p-13
++0x1.3a05a58adde58p-26
++0x1.c286149c7e9f5p470
++-0x1.6b81753989e5ap25
++0x1.25b0b093ed7f8p2
++-0x1.0fa8f1bcd9638p467
++-0x1.58a1939b34f60p25
++0x1.dbd641b5c98edp117
++0x1.1fb4562dd42aap-16
++0x1.14e3242e58954p0
++0x1.d3a2230b9e01ep897
++-0x1.53b4b1f9012a0p497
++-0x1.024f21758b27ep0
++-0x1.c507e0d80c18bp388
++0x1.7a51e62e9bbf7p489
++-0x1.964e538ed6a85p29
++0x1.273937c7e6db5p315
++0x1.d1cd90de0d573p1
++0x1.d879906814a5cp-24
++0x1.9c0153b0ede21p46
++-0x1.956a15502cadcp-23
++0x1.445f06629acb9p24
++-0x1.01310510ba8afp37
++-0x1.3fe9d1eac62fbp773
++-0x1.25ab5749018d2p611
++-0x1.80cfc67e14b4fp26
++0x1.7ecf27b07b148p23
++0x1.43101294381abp26
++0x1.6c2761f81b901p-23
++0x1.ba9fe7138c3cep112
++-0x1.21d97415b6ba7p15
++-0x1.6e0e76aaf7d3ep-7
++0x1.776856675164ep4
++0x1.e6da629a8c493p-19
++-0x1.08d20753e957dp657
++0x1.3e58548ada7d0p-14
++-0x1.c101c29c2ca2bp671
++0x1.f81ae7d44a371p151
++0x1.ceebb1e9b0ac5p25
++0x1.1efb100681836p1
++0x1.8af3458dfddf7p13
++-0x1.2568259ec877fp15
++0x1.63c373ca8604cp-19
++0x1.bc2476e5f6203p26
++0x1.d21a939613119p14
++0x1.7a7d113ec8249p0
++-0x1.1cc05529e617cp4
++0x1.78fad183e2167p6
++-0x1.9416a783a4e38p25
++-0x1.51e6d29257863p47
++-0x1.382e97b6481f3p45
++0x1.17fc047aebf99p10
++0x1.40c8b1a325f9bp33
++0x1.d5bbf4c199cbap29
++-0x1.df5752482cfe6p-20
++-0x1.12c1f684ae960p14
++0x1.2a8757492a1acp29
++-0x1.891c334662682p16
++0x1.8d82378077273p6
++0x1.166da45911fe3p154
++-0x1.202fe7e0931ecp25
++0x1.f671a5c525c60p25
++-0x1.a16666f2d0d73p0
++0x1.341e9765a7c3dp26
++-0x1.1e626406b087dp-21
++-0x1.790a818b2e25cp26
++-0x1.b42b75a1c17cep11
++0x1.57a50372893aap129
++0x1.c9f2355b4664ap6
++-0x1.670df37270a5dp47
++0x1.8e63d0b3e0c9ap533
++-0x1.8c842353144b7p0
++0x1.14bfe1e6692bfp3
++-0x1.8daca557ecbc8p0
++0x1.0f66604e1cae6p1
++0x1.6b4b447033d3cp17
++-0x1.34fbd3e9490bfp343
++0x1.9a8b8523a35d1p0
++-0x1.bacaa7bb3931cp709
++-0x1.6ce3907ecd3eap27
++-0x1.6329f65be40dfp388
++0x1.9f4407a6b30dbp-4
++-0x1.c64231dff1ff8p-1
++-0x1.f9d481e9d8a98p21
++-0x1.3150861950cb4p7
++0x1.709e700648c1dp3
++0x1.0248a23a58372p-11
++-0x1.ca6a851aa0470p12
++0x1.b24d336cb3971p0
++0x1.2ad5a72281833p24
++-0x1.4043b11fad8b6p-24
++-0x1.e73a03bba587cp0
++0x1.46cfe1fec14f8p40
++-0x1.7dfd30173d85cp39
++-0x1.628c71e6500b1p0
++-0x1.7e77e7b456aebp16
++0x1.1df3c34e26e48p21
++0x1.1ac7a39becc9fp29
++0x1.1515d5cb1c51cp1
++-0x1.67cab45949d3bp22
++0x1.e4e286c86c45fp-16
++-0x1.8cd97769969d7p483
++0x1.ce30758136824p27
++0x1.95b154a54a24cp37
++0x1.acffd079cb0c5p412
++-0x1.411c8332662bfp0
++-0x1.7bc4041696bdbp1
++0x1.c4ab9624d294fp445
++-0x1.d1fcb4363c5bep-20
++-0x1.bea1604dd499dp23
++0x1.a108a042c4592p1
++-0x1.04fb706aa9341p17
++0x1.6a7111c6128c2p20
++0x1.193151e0fd7c5p-10
++-0x1.4b06317e471c3p119
++0x1.cecb95b038037p792
++-0x1.a561975e1d17ap44
++-0x1.a8c170e426f1fp1
++-0x1.53be42cd2bdebp7
++-0x1.7ccd663e6d70fp-25
++-0x1.182736e3f62e0p466
++0x1.ac67800768ebcp12
++-0x1.09a9d58fea51ap7
++-0x1.75fc03701c53ep13
++-0x1.3d9615a1f4a5dp-23
++0x1.0e7e11092806bp343
++-0x1.348fe488f91eep46
++-0x1.1fad639f2da7bp8
++-0x1.40aae476e0ed5p662
++0x1.9f70f2da0cc95p132
++-0x1.da5486badb181p-1
++-0x1.3b3f076f46893p-9
++-0x1.0b5187929e913p22
++0x1.781ca4f1df000p0
++0x1.6ceb8227b17f8p0
++-0x1.5445a1397c2f2p751
++0x1.5418512e0a8a1p8
++-0x1.533876ccfba74p477
++0x1.3396d7a19dc51p644
++0x1.3cdb768fc6e00p-17
++-0x1.1810260402476p2
++-0x1.e2815264307f0p21
++0x1.fb7b8378ba7b1p3
++-0x1.7bc8c6f28c24bp0
++-0x1.de5186502e418p-3
++0x1.cc6417710e32dp9
++-0x1.b74806ec02f90p-3
++0x1.7b297737f89a6p0
++-0x1.e7bf0149253d7p0
++-0x1.691d818b4a914p-27
++0x1.ffcfb3b604abep25
++-0x1.0fd1f4204dd47p26
++-0x1.349960924dd94p25
++0x1.330097fdd7ff0p15
++0x1.bb7555f93a67cp0
++-0x1.e8d0023eb9798p-15
++0x1.457db3a13df89p23
++-0x1.d439a114e34d3p43
++-0x1.33a971d3908ffp1
++-0x1.8074051196a9fp35
++-0x1.36caa6f4f6150p20
++-0x1.e5047468eb004p36
++-0x1.e2c677eef9254p479
++0x1.043ad02a44c86p18
++0x1.a762226b8977fp6
++-0x1.d1eff1baa8a00p915
++0x1.73f354e9bec57p0
++-0x1.5e04c7be5d65ap26
++0x1.32e6133ae3ba2p973
++-0x1.130bb36a9180dp0
++-0x1.0f8635fd75c96p-25
++0x1.ac6c73500f7f1p977
++0x1.5f47f080916d2p747
++-0x1.7c13d0ffb2d1bp0
++0x1.8cc7a6557936fp0
++-0x1.3d20c6693cf4dp963
++0x1.2252e753aae06p32
++0x1.6102c79abd114p776
++-0x1.ea41c6f9badc0p22
++-0x1.4566d3374234ap942
++0x1.48c290edccc4dp4
++-0x1.5eb5d6958df05p41
++0x1.3097218c10affp24
++-0x1.5f51d4fbc2a24p866
++-0x1.d961e32aa4458p24
++0x1.2bd1132581a0bp17
++0x1.31bf077fdc502p-13
++0x1.dbc9d0ecfecffp958
++-0x1.d9474275f8dbbp37
++-0x1.7f9391c99c32cp38
++-0x1.b22c9445db1a7p613
++0x1.cf566724b6a87p-10
++0x1.850211bd3bb55p93
++-0x1.9ac2c530689d4p0
++-0x1.be62f5b130b8dp0
++0x1.032d004bc7a43p692
++0x1.322f5733ea1fbp0
++0x1.bed011520ae63p195
++-0x1.441d84290be35p763
++-0x1.444960b6d3e89p180
++-0x1.ec5922981de7ap37
++-0x1.75d2e1678af63p343
++-0x1.10eba74970e62p11
++0x1.62e1e19894307p10
++0x1.e97543610b789p164
++-0x1.eda7b7f647b42p15
++-0x1.fe0c2274f3185p-4
++-0x1.c0bce3cb049e5p33
++0x1.aa0523e5fa5d6p0
++0x1.213f833485611p5
++0x1.599313c2534f2p-22
++0x1.1ae571e1bc724p5
++-0x1.c24055d80a5f8p-11
++-0x1.a12e65804366bp46
++0x1.76dc549f2274ap741
++-0x1.03d390d8997e4p26
++-0x1.1b36c4cf581c8p841
++-0x1.56ae7518949d6p36
++0x1.d86b40100783bp47
++-0x1.56d0c378ca190p1
++-0x1.da917388c2c69p830
++-0x1.fd3906fa866c4p-1
++0x1.fcc2828b80e39p24
++0x1.927092bfc1613p62
++0x1.364ce530c3b8bp14
++-0x1.a5dd07a7a1b6bp-3
++-0x1.7039c188c446ep372
++0x1.ecc00543c4179p34
++0x1.70a557bff1d19p43
++0x1.053ac4631eb6ep42
++-0x1.6e93c69519311p684
++0x1.fddc610f652bfp25
++0x1.5d23c14e5347cp10
++0x1.28b57726066c6p21
++-0x1.e34b009469f8bp26
++0x1.8ec3a1532803ep25
++0x1.2334b34f842cap73
++0x1.a3f9461f83fc7p44
++-0x1.bdb5217da4e12p-24
++-0x1.87ce777fef3e9p0
++0x1.b994e0f9d64e4p-1
++-0x1.f051e48eb0a27p-1
++-0x1.71fc03a2c0dc4p37
++0x1.d4a7259ec9671p182
++0x1.af2936d3b5356p18
++0x1.b19b2069e1487p741
++0x1.0c4f54d908dbbp842
++0x1.9633b6cc8f95fp31
++-0x1.f7f0b10fc7abbp-12
++0x1.7dcef7488ef54p42
++0x1.71d9a29951d30p979
++0x1.9eecb676902eap12
++-0x1.197a371161a1ap-6
++-0x1.970b549202f75p15
++-0x1.5673b2bc3c890p7
++-0x1.0be9a65ae3299p45
++0x1.64c4365cb4456p9
++-0x1.6cc886298a2a6p209
++-0x1.e3a8a52c483c1p1007
++-0x1.82ab5565c6bf7p595
++0x1.8aea2679ef0aap-13
++-0x1.b37ea43570d83p697
++-0x1.f5f545093efa8p10
++0x1.133a54b78232bp-24
++0x1.b401802bf603fp253
++0x1.975cf4fe7de01p-13
++0x1.dfffb229e4a31p33
++-0x1.d728e796c4c59p46
++0x1.dbce063607663p-9
++-0x1.dcfdf7d58b834p32
++0x1.05a416fb1e983p-20
++-0x1.b64004211a42ep8
++0x1.be8fe6328bdc8p503
++0x1.a7a376a6bfebbp0
++-0x1.3ade54ae52634p-6
++-0x1.85b2e43641c2bp6
++0x1.cf97d457a0958p-1
++-0x1.f6ec45c2a3b4ap-2
++0x1.cbcf649cc02d7p19
++0x1.1e1317c82a6a9p21
++0x1.a5bca61a82ec3p46
++-0x1.fc551214a234ap33
++-0x1.72ac7403760e3p0
++0x1.bb03d7536d4ccp698
++-0x1.af4ec32e9fce3p71
++-0x1.c778f2c7ac74dp17
++0x1.86c4360709304p1
++0x1.028015715c76bp0
++0x1.bfb74117c6ff9p33
++-0x1.3feed1dd39ce9p40
++0x1.f14981f4a8d29p16
++-0x1.b525b5d886fd7p7
++-0x1.abf156a96afc7p923
++-0x1.9c1ed568f3cb9p16
++0x1.7c041208761a6p0
++0x1.3886e66f106abp151
++0x1.839cb78b2b4abp30
++0x1.9a5742c86fb7ep20
++0x1.91ef725e99f72p592
++0x1.d36ce6c1fd001p24
++0x1.e750762ade5ffp0
++0x1.e92b20a39491ep379
++-0x1.32e291ee286c8p33
++0x1.5b7642273a0eep40
++-0x1.5ea1b0ccd8f28p98
++0x1.2b80736f4a9d0p9
++-0x1.2b42618941bb9p395
++-0x1.7d0ad22761616p26
++-0x1.7762272cba5e3p25
++0x1.58954232affb6p25
++-0x1.34ad53c58a47fp23
++0x1.8975855985d19p501
++-0x1.d1f4d79c31380p566
++-0x1.a32851cc2be65p390
++0x1.916815589e4b1p0
++-0x1.5b8b64c9f96a2p30
++-0x1.d058606fb9e48p15
++0x1.262a7428526b9p1
++0x1.96f7c5b3e3919p0
++-0x1.f5a3a1fc53c6fp1
++-0x1.30a2d4c407270p46
++-0x1.6178648438383p19
++0x1.af13d500f7cc9p30
++0x1.b9e6172f71258p-6
++0x1.e27fc1f8aa119p21
++-0x1.bd9da3d73cd01p6
++0x1.921da05fc12eap26
++-0x1.6902454fef7ffp-10
++0x1.584fc276a6b2bp4
++0x1.c4b586982c7fep20
++0x1.942c82ac0f530p4
++0x1.c1f2b55b51948p4
++0x1.c34ec3fccc805p5
++-0x1.a34d9538665cep-15
++-0x1.8ec031fad3fa4p466
++-0x1.2f68a72835eefp45
++0x1.d87c03eaaa1bfp12
++-0x1.4dad353827827p7
++-0x1.a61fa78ccb76dp8
++0x1.f02425994e790p-1
++0x1.7872164950239p44
++-0x1.448fa3fa91514p0
++-0x1.356365717ef4fp3
++-0x1.27996239e2d4ap25
++0x1.bfe2746ef36fbp168
++-0x1.b1a050e0ed3fep16
++-0x1.657e858ddef02p932
++0x1.7b7466e89a978p0
++-0x1.94e103a446f68p185
++0x1.b0f5135086da8p39
++0x1.9fa8e6d1aa67ep39
++-0x1.565ac73db7728p76
++-0x1.597aa2da93d2ap-14
++-0x1.79d053e42f35cp0
++-0x1.e756a7899b592p566
++0x1.cc02d40dd176fp3
++0x1.5853f727a0382p931
++0x1.7f9ff133dd7fcp7
++-0x1.54eae1e948c26p13
++0x1.f463812c9625ep194
++0x1.4200608051042p26
++0x1.acb924d665d6ep25
++-0x1.ee69c20fc82d7p25
++0x1.b62ca2d803314p-17
++0x1.99ad868f85696p323
++-0x1.1fc20334bb246p25
++-0x1.85488755819b0p25
++0x1.91bae5f4012f6p0
++-0x1.878693a7343c8p192
++0x1.a7e580acde1afp634
++-0x1.5c9f455bb898ep0
++0x1.717d31fc4eecap15
++0x1.43716097fef0ep16
++-0x1.a9073787b0452p15
++-0x1.2fea30a1d7acbp0
++-0x1.d46bc3926e9b0p382
++0x1.307b62ea850b3p0
++-0x1.17732119c2eedp507
++-0x1.0508c4bc0aa93p-9
++-0x1.ff22636c40955p-4
++0x1.3819811e7b876p10
++0x1.b46c414c3d879p-24
++0x1.86ce2688839fep13
++0x1.f6f5e13195f14p-6
++-0x1.86a78458de8a7p26
++0x1.7c3c148fa8c8fp33
++-0x1.fd9c067d42344p25
++-0x1.b93722d8573eap717
++0x1.78daf3e05d2dep999
++-0x1.1759c00e1539cp26
++0x1.9cdc12562cdd8p0
++0x1.0bbb00fcd3fcap-24
++-0x1.2db1a21b9553cp26
++-0x1.8cac849c4c14cp-14
++0x1.20e652e2b31e5p-10
++0x1.b871e12ae1a1cp523
++0x1.e06945e6b136bp-1
++-0x1.8b8870eefb9b2p6
++-0x1.b692c7b8371d6p24
++-0x1.90c2846a01900p31
++0x1.9cd6c3cdf6af2p901
++-0x1.1a9d210cc532fp23
++-0x1.334ff5833e6c7p32
++0x1.32b22205b182ap26
++0x1.b63623cddd9a3p355
++-0x1.003b72665acecp-5
++-0x1.a39c1457f6db7p0
++0x1.47209333843c4p4
++-0x1.52f9a306b7dbcp-11
++-0x1.4cdef0e2215dap22
++-0x1.8504b5f49eaf5p538
++-0x1.749866e19666bp28
++-0x1.d770a34b092aep23
++0x1.8f64b6b7d5992p16
++-0x1.89bff2ce038f9p4
++-0x1.6ba252e9fb2b1p5
++0x1.4af34179805a3p0
++0x1.5089668042774p9
++-0x1.448240d8f0474p-19
++-0x1.72c886f82bcb8p0
++0x1.0960b155ba27ep814
++-0x1.a13513169019ap24
++-0x1.575773fdcb9fdp30
++0x1.82fd844618c3bp0
++-0x1.d64c423ea7fa5p-25
++0x1.8b29a1a6c049bp5
++-0x1.e6b4610657578p7
++-0x1.401257d46dbd8p7
++-0x1.9fff55074713dp0
++-0x1.c95e85b6e7218p1
++-0x1.4651a74f2b3d3p615
++0x1.a9e7c5c808ecbp-26
++-0x1.9ba7158986b2bp46
++-0x1.5c655039f3748p24
++0x1.b3b0b23e6a1d2p30
++0x1.7295033ed096ep26
++-0x1.4d7931d25197fp12
++0x1.968f207ccf926p25
++-0x1.93d7b0b7b7859p419
++-0x1.e5f0c57320518p17
++-0x1.a17e305c0d250p2
++-0x1.541eb51e65168p932
++-0x1.36367707fd0d7p28
++-0x1.9ed6914905c92p-25
++0x1.3c46e4b5f0410p10
++0x1.629ba311169efp10
++0x1.b790745db6677p999
++0x1.08ebf45d987edp547
++-0x1.d8c5051fe47d4p-1
++0x1.94738125e02b5p907
++0x1.aa0ce7ffd5ea7p9
++-0x1.bed4e59348203p806
++-0x1.41f0976d7f84cp21
++0x1.6c848429f2c56p924
++0x1.dcaed6b16da0ep800
++0x1.adb6d492b974bp1
++0x1.5a3ab5ecb42b9p22
++0x1.0992e56329420p540
++-0x1.b45d52586efc0p27
++-0x1.b513872f9e108p8
++-0x1.61b56231fa37cp522
++-0x1.f38fb1bdbc53dp-11
++-0x1.b70f1554498d9p49
++0x1.75b9409a5eff5p28
++-0x1.01efc62c97c1cp-19
++0x1.27b536506d0cbp31
++-0x1.d125456feb4c1p23
++-0x1.19edb0407ceaap9
++-0x1.15c9c7f0c69d9p16
++-0x1.c32963b133dd2p45
++0x1.6fa8f2041aba3p13
++0x1.6a15556ab5bf1p-27
++-0x1.375b96248e95ap629
++-0x1.fd70c62ca1cc4p20
++0x1.f53dc1f7f194dp40
++0x1.1a33e660a7ed3p-22
++-0x1.94bc6555a7c85p818
++0x1.419555793d713p74
++0x1.dd482322ed590p714
++0x1.fb7ff0dcc63bfp-10
++-0x1.af039600c8f91p24
++0x1.767755fe16937p15
++0x1.c2e47788f82c0p-20
++0x1.de0757a27a2a0p990
++0x1.fc40504c8efc7p274
++0x1.56f37190581d9p15
++-0x1.6a00039c1ded9p-27
++0x1.385920f5fb50bp-17
++-0x1.2ee5a2d829252p266
++0x1.3511772922eb5p14
++0x1.d77d763b7eec1p983
++-0x1.3cb083116259cp9
++0x1.e91ba1e8e7175p9
++-0x1.a6b130fb1911bp848
++0x1.a586d7a33557ep35
++-0x1.592d642efd386p36
++-0x1.48a3d6fe9d98fp18
++0x1.304a33a14b6f1p0
++-0x1.fd5d90db5e04ap21
++0x1.f58fc63af014fp-2
++-0x1.544891c6a1929p-7
++-0x1.889fd1ca54008p18
++0x1.cfe531a280790p25
++0x1.720db29d32cb3p582
++0x1.d0fdb1492e856p5
++-0x1.d56587d8858a8p9
++0x1.a97c6235bbdcfp0
++-0x1.4dce63f19060fp217
++-0x1.8a9771ecb1855p0
++-0x1.023f571ba1300p33
++0x1.598c20141d1f8p24
++-0x1.115037892f8bfp25
++0x1.e354332ab1ca7p346
++0x1.0d27f1e52cfa3p102
++-0x1.90e2e2c9434d0p47
++-0x1.320164348c448p834
++-0x1.ae1856db3911ep4
++0x1.856b70cf9eae4p-21
++-0x1.cdee4539c3a1cp16
++-0x1.d00240ecaa28ep25
++0x1.7265d25cb9ab5p0
++-0x1.644f30279ec2ep16
++0x1.44df430f5990ap6
++-0x1.ac22a7e22ec86p4
++-0x1.414fc579fa14ap15
++0x1.6f74f627319b6p548
++0x1.8849e2ffee284p42
++-0x1.7cea50d8c8b5fp417
++-0x1.986f67d38b434p0
++-0x1.7e4044f0e0c65p-4
++-0x1.b43eb556b532bp485
++0x1.e2f103744c2fap-4
++0x1.88ff52ba9330bp615
++0x1.15db777586675p-9
++0x1.ffbf701645e70p-1
++0x1.8896a6f755077p34
++-0x1.f0eb53cb17860p573
++0x1.dc88960657275p28
++-0x1.6af3872d10978p26
++-0x1.db51518cc915ep9
++-0x1.f1f4f230cbea7p14
++-0x1.567352d25a29fp22
++-0x1.6f6a60e8d7141p954
++0x1.386626ca69274p23
++0x1.30bc15e924ff3p26
++-0x1.c601867be84dap676
++-0x1.8c5cf7ac29180p941
++0x1.9754c36e6ca27p-7
++-0x1.d9167485813bcp4
++0x1.8a9eb61165392p40
++-0x1.df3b769ec4c96p-1
++-0x1.aafc6751f5386p253
++-0x1.b072707cc49e5p29
++-0x1.b562e7eada4c3p45
++0x1.1154b5e420252p20
++-0x1.937f02df19998p0
++-0x1.804dc53bf9844p933
++-0x1.0267e6c4ce393p1
++0x1.f2c7f1e6e1534p197
++-0x1.55f2356cd0abap972
++-0x1.eebc90d7dec4bp177
++-0x1.650c65a8a6542p21
++0x1.9826f11e25813p344
++-0x1.3e070089db4e1p703
++0x1.d88a20b249b8dp1005
++0x1.44563581a1019p1
++-0x1.b66482abc4601p29
++0x1.829554468c236p12
++-0x1.7f2f11a4e65b1p-17
++0x1.c04c2222afa22p30
++0x1.4dd7900e1a08dp9
++-0x1.66bb03d2fbf4ap9
++0x1.1752710b1f584p-3
++-0x1.055de27bd3b43p21
++-0x1.177c652007c06p1
++-0x1.c4d410fc991ccp25
++0x1.a53887384e01cp813
++-0x1.7d36f1b5ee4b7p46
++-0x1.8a3f57ff7521fp0
++-0x1.2fcfb59864120p2
++0x1.63bf91d1f143bp26
++-0x1.1bc1e358d198ep56
++-0x1.9adb13c70e083p396
++-0x1.4e9ae34467457p-3
++0x1.628da3632dc72p1003
++-0x1.a01d83e08cfb9p-21
++0x1.9854a0ff4c3c3p-9
++-0x1.1894e1cc4b5c0p26
++-0x1.b605c795c2cd5p45
++-0x1.28016505a4ab7p19
++-0x1.9c4a66c7f24a4p-24
++0x1.26f715e1d2ef7p452
++0x1.b66ee1e12b4ecp47
++-0x1.fb7db206b4875p22
++-0x1.a221962184559p15
++-0x1.4315f238ebbbfp25
++-0x1.44b0927e3dcb5p5
++-0x1.6022167aa76c9p960
++0x1.1259e16e64f7dp29
++0x1.da683184db9ccp13
++0x1.5e07800f8606ep21
++0x1.30c430b6d2d47p394
++-0x1.398662e38c15ap-26
++-0x1.04edf4ca12198p3
++0x1.a4d145fb27f2bp465
++0x1.30bda21f3afa6p15
++0x1.0ebb86cb6163fp927
++0x1.01bca68bab9e1p-6
++0x1.5dcff2791e7e2p-23
++-0x1.7477f426ff684p0
++-0x1.992ad047940bfp0
++0x1.70c0d7fa4a49bp189
++-0x1.9318a5d65755dp0
++-0x1.91b161e6af6acp0
++0x1.a51cf75f7df96p14
++0x1.cad757aac0da3p25
++-0x1.47af44137a0c3p940
++-0x1.d3da77b5e1989p-5
++-0x1.3173656fb06fap26
++-0x1.9964b375b39cbp0
++-0x1.500c76e1f87e0p18
++-0x1.dcfa37b54ad38p18
++-0x1.bcad45697b430p16
++-0x1.7a8be3382c9a5p31
++0x1.4a3a85b1486b2p0
++-0x1.ccd230880d201p17
++-0x1.c74536f317306p873
++0x1.1f59624634972p826
++-0x1.1e977673ce6f6p0
++0x1.f9ed278dfc568p0
++0x1.b5a1814d13bc2p23
++-0x1.ef62a02276044p285
++0x1.718856c9a1082p26
++0x1.f7e3b2d10b444p4
++-0x1.c41dc5c3b92f0p581
++-0x1.2ce447adba33ep5
++-0x1.6a15768a53241p29
++0x1.cd9ba3f5a9474p938
++-0x1.e753a161f7e24p104
++-0x1.68b5a5b58c840p-11
++0x1.267bc533526ecp23
++-0x1.5ead471bb5306p22
++-0x1.3618e2e425fdep23
++-0x1.41b337f5c5f44p9
++-0x1.6437239c568dfp243
++-0x1.5f41d0fc227d0p-27
++-0x1.6a89673ac0a5fp0
++-0x1.4e2923e9941a7p-8
++0x1.9700e4b914258p0
++-0x1.de0e43654118ep659
++-0x1.9f16a2675e209p-12
++0x1.0eccb10931828p30
++-0x1.a6d1862e5ab17p0
++0x1.d6a1b57219403p18
++-0x1.25c22185ff5fdp808
++0x1.1e04b2fdb62a6p-18
++0x1.a82b630c08134p0
++0x1.18cb459f47a4ap31
++0x1.77e887170bc28p0
++-0x1.2b99174c675c6p847
++0x1.9ddd3290f738dp9
++0x1.4042e241ce62bp38
++0x1.7ba716eb70543p35
++-0x1.fb6b36a908fc7p157
++-0x1.e5c7a7899d8dfp0
++0x1.d222d21ce6da7p34
++0x1.b87b679527a2ep14
++-0x1.9abaa5ec33759p0
++-0x1.37793205a45aap678
++0x1.028c812928615p38
++-0x1.feaab4fec9522p35
++-0x1.b013e711ad8e0p-1
++-0x1.33de92c99a948p526
++0x1.752f25454e1bfp-25
++-0x1.5559104e2af4ap42
++-0x1.a569120980616p732
++0x1.231e95b5db287p6
++-0x1.48714153b9d5bp485
++0x1.5f3cd25ed07ccp14
++-0x1.3661771e7c25ep413
++-0x1.8ee636d9e84dap21
++-0x1.a599810bec6c0p19
++0x1.0f3b961f24967p1
++-0x1.1ed78232bd0ebp966
++-0x1.7ca333893a545p9
++-0x1.9b66327d0cb13p20
++0x1.414327ade9b80p36
++-0x1.c451b34ce3a1bp229
++-0x1.ab62b00de54ebp906
++-0x1.3b3791fe60796p28
++-0x1.173ee0b983fd2p26
++0x1.8f2ec3e1de32fp26
++0x1.51bcd5ff9710ep353
++0x1.ebaf95aef2672p1018
++-0x1.751cd519e4a6dp0
++-0x1.934f442067e49p0
++-0x1.10e3913276d32p13
++-0x1.f6b2a6a750390p24
++-0x1.ae5b2603c4837p25
++0x1.651942861820ap12
++-0x1.7751460cb1104p27
++-0x1.fe38f6d1c1756p23
++-0x1.b17a57a6c2225p4
++0x1.22e2f677963f1p35
++-0x1.c406818f13a49p18
++-0x1.f97e8481e23f1p-22
++0x1.5cba77f17a861p37
++-0x1.f476733bebfbbp-6
++0x1.8258b766dee50p19
++0x1.157fe5ff5048fp24
++-0x1.d325f6274ab68p-12
++-0x1.fddf647bdbeccp13
++-0x1.c0ee32a9428dbp5
++0x1.859d472c2aacap31
++0x1.4880b54af8cf8p997
++-0x1.b538b5c254d41p18
++-0x1.677ac5634507dp21
++0x1.815a103ec2700p95
++0x1.32d130c393addp-21
++-0x1.9ad38426fb1d4p14
++-0x1.d809c40a02a12p-9
++0x1.22da530cb9f27p14
++0x1.cb2077ae707b1p6
++0x1.32fcf058b7cc1p-25
++0x1.e2e535f4c34a9p14
++0x1.11f25046cd068p44
++-0x1.418de55c6ae70p26
++-0x1.aad2d3f89507fp530
++-0x1.f88f75721f852p19
++-0x1.f1d5a5aa4a842p-1
++-0x1.3d902309ccfaep285
++0x1.81c1606ce67d2p-9
++-0x1.923fc4debf6e8p653
++-0x1.6f31b3345c4d1p27
++-0x1.c844d70062456p209
++-0x1.97b2e18f6c883p0
++0x1.f85c655d1c235p47
++-0x1.4ba763d3c0937p20
++-0x1.97e2e38237ddfp991
++0x1.3701d45e325fap-15
++-0x1.fceb0021c01aep-16
++0x1.3929b7bbecc6fp19
++-0x1.03c5042796010p938
++0x1.e6a2b1ce3c89cp5
++-0x1.8462c75fc795dp0
++0x1.91a9b66ac4b2bp-2
++0x1.a9adb0a7e864dp13
++0x1.a222963d65a5fp18
++0x1.fb3f11b5edae9p19
++0x1.d279f26eb8775p-23
++0x1.843003a410f87p585
++-0x1.3781e023929a1p12
++0x1.2f9ea3013e0c3p20
++-0x1.65fb7629d55f9p618
++0x1.5420d77378e62p1
++-0x1.2c9cb0653355fp18
++0x1.e5fec6e9b62cfp887
++-0x1.04671129ac1b4p1
++-0x1.8e99f30cb98e2p11
++-0x1.80c376dbeab92p3
++0x1.5d03e053a3f66p-13
++0x1.6a609415d4822p3
++0x1.4b0c946ec7a18p10
++-0x1.6ce16241882f4p1008
++-0x1.9ca3b5624a1f7p1
++0x1.adeb34123b9a7p783
++0x1.657df688fca05p4
++0x1.7ec760fb6453ep971
++-0x1.00bd533686e8ap8
++0x1.ddc5b4c3146fap8
++-0x1.dabfe4e152cc1p5
++-0x1.9a83878c11a1bp195
++-0x1.136c90eb454fdp38
++-0x1.b129d413e2968p17
++-0x1.bb21f5afd3c12p17
++0x1.aeebb6948401fp25
++-0x1.d10366f45a92ap5
++0x1.66a9f0a63563fp19
++0x1.8faa7348340a6p0
++-0x1.5770156e64fe3p46
++-0x1.0729f6a9d0fcdp5
++-0x1.98c0e5d74567cp14
++0x1.ba55a5ebf7965p36
++0x1.1d6121dab3ef9p111
++0x1.fa14c03e032b3p938
++0x1.9c853700c2470p145
++0x1.6a17454e5a6d1p-27
++-0x1.1788b486450c5p1
++0x1.edb9e180065b6p24
++0x1.7b14f0a7c6c73p18
++-0x1.40b0e4d7ee3b2p15
++0x1.8711c71648cfcp16
++-0x1.3e46a54242738p11
++0x1.87dbb061d7c81p1
++-0x1.6c23a559a0b0bp33
++0x1.eedc82db40e8fp535
++0x1.6e44b32d58e96p26
++0x1.2ce240a6fb9e0p0
++-0x1.8aa3e3dafbd1cp82
++-0x1.be96c2479bfb8p6
++-0x1.827e97ba4a30cp-19
++-0x1.df8f04c1be1a0p8
++0x1.9177448bb2b38p31
++0x1.1048a637ba992p316
++-0x1.3c865406d78e5p25
++0x1.0bce74034850ap9
++0x1.72cc021c86b4ap847
++-0x1.935a854cd1476p-26
++-0x1.c209c22dded2ap46
++-0x1.bfa07289be7dfp-14
++-0x1.9180653f54946p-18
++-0x1.c135d03366185p15
++-0x1.b40e326cb48f5p0
++-0x1.c675728b6bb2dp1013
++0x1.19da179d6babdp725
++0x1.978d06c2067edp17
++-0x1.cdb5141b33586p645
++-0x1.9773558b653ecp25
++0x1.3b567232f3129p632
++-0x1.786a8125b5258p104
++-0x1.5ed511cf3e2a8p11
++-0x1.3f2b56cc2b7c4p806
++-0x1.9c1a73744e1f5p34
++-0x1.3c4627661ba9bp42
++0x1.6fee415f36b1bp24
++-0x1.f37db348601b2p47
++0x1.48d277f108c4dp26
++0x1.664a14b032392p-4
++0x1.b50335690a9cep403
++-0x1.327550e6d7fc6p307
++0x1.6d0f1274d1dbdp541
++0x1.1c10d39266f66p29
++-0x1.5a7b45e2f574bp519
++0x1.0ea38771f6368p22
++-0x1.34aa02c4c29a6p276
++-0x1.f3e1a33c418cep-25
++0x1.30ede40680d9bp632
++-0x1.030c57ef82307p854
++-0x1.1f71476c9daf5p8
++-0x1.dd4640ef11f44p-1
++0x1.29f9e4b905d41p20
++-0x1.c33d15648e005p23
++0x1.6fb53008a6b5ep8
++-0x1.19f050cc3775ap41
++-0x1.141935fe4ebddp37
++-0x1.06c48202a2cbdp0
++0x1.e9a6e18ebee69p15
++0x1.2967e001ffd42p22
++-0x1.8c9c860e895d3p0
++0x1.68db63ee856a6p16
++0x1.39e5c24814662p-26
++0x1.7766a41257495p0
++-0x1.5e9c33d60ff5fp25
++0x1.522da4c04faf8p8
++-0x1.dba0a5618fbf4p34
++-0x1.c0d3761bbcf56p-1
++0x1.17a5f7795ad55p40
++0x1.55f1834a06b07p704
++0x1.3e78a1243c4fcp26
++0x1.659c33e8bdffcp43
++-0x1.f24077bc9318bp661
++-0x1.ab7d700809e49p782
++0x1.40584524cb947p0
++0x1.997c3124d8d86p0
++0x1.6498074e6f48ap18
++-0x1.3cc550fa2907bp-16
++-0x1.3c5527246d6e0p22
++0x1.a9ca27fe5c9fap22
++-0x1.28bbb66ee75c7p-24
++0x1.3feb704d719c4p33
++0x1.a85103490c12fp0
++0x1.23edf714f214cp12
++-0x1.f89114f814a26p10
++-0x1.8b4005ac68fe8p40
++0x1.d0c2c73a140f4p18
++0x1.f12744da61839p938
++-0x1.4972e012e3bf3p13
++-0x1.5f6516206cdfcp36
++-0x1.78f5a5f3d9d8ep13
++0x1.abdad6b9b65ffp11
++-0x1.628061c2a64c3p13
++-0x1.36f50079f514cp26
++-0x1.26cff62e0a07fp16
++-0x1.3396e025b96fbp1
++-0x1.de90b2fae57c1p994
++0x1.8e5f7741ef5e3p923
++0x1.9328e3f117564p152
++-0x1.846ea1da5dc69p615
++-0x1.4ef3442b14b4dp8
++-0x1.930c272b3b81dp0
++0x1.9937743f54e33p-6
++0x1.64fbc187d66ddp38
++0x1.653842167c192p12
++-0x1.99a6209d27f46p10
++0x1.8ccf525e85a45p25
++-0x1.0e66241e41d8ep14
++0x1.740b47e3b8ba6p354
++-0x1.be957129fb4d2p30
++0x1.e735d2e16e62dp16
++0x1.e06c66d10af7ep2
++-0x1.70c843db3c498p24
++-0x1.356eb6baad693p592
++0x1.ac5906747d463p22
++-0x1.4c81404800155p-18
++0x1.c24ba6d35df27p-1
++-0x1.df3b814baebc5p-7
++-0x1.4fbe7514e3468p4
++-0x1.71a020b06860bp35
++-0x1.7ea9145079ffdp0
++-0x1.43f857a537751p8
++-0x1.5be44475bd43cp12
++0x1.55b1d5d904e1ep-24
++-0x1.abd0b159d0c99p5
++0x1.7dad06b80c10cp25
++0x1.7b5dc3d6f8d01p0
++0x1.1afd7477d74e6p24
++-0x1.68b33313d93cap20
++0x1.d68ef5c08f978p46
++-0x1.256832b9bea68p-23
++0x1.86deb6e0c31c7p24
++-0x1.009863c410effp29
++0x1.dec46182fd6afp25
++-0x1.7cb163ac511e3p14
++0x1.354831ca22ed5p19
++0x1.3047707ea0defp-8
++0x1.2c09254310224p1
++-0x1.3d3c872e8b875p0
++0x1.3fd2c5814d3c4p8
++-0x1.9b7303763a412p555
++-0x1.0e34256cf4983p12
++-0x1.23e1a4d5f82aap22
++-0x1.515492c6d3c3dp45
++0x1.7007916be678cp-2
++-0x1.569787a433b8bp814
++-0x1.ec3d210f868dep-1
++-0x1.6b75355e1f926p5
++-0x1.625c03a0df70ap22
++0x1.966563060d94ep40
++-0x1.ba81f6776bb22p37
++0x1.6cf5927b93cfcp-5
++0x1.70cbc6b62c369p483
++0x1.9e8c70de208cap19
++-0x1.9f463097a5d99p11
++-0x1.58c534ba51fb4p40
++0x1.4f8b82099edeep26
++0x1.d09bf7ba88cb7p24
++-0x1.6c7af75665821p13
++0x1.6e97b1ae6f120p17
++-0x1.7bdcf42df8f3dp148
++-0x1.2ee1e501c5c44p8
++-0x1.c07117e66c01fp3
++-0x1.b6624589e86f8p39
++-0x1.3d3b360fdb23dp7
++-0x1.2582b11ecc116p336
++0x1.7481a321f5256p31
++-0x1.222ab3691571ep19
++-0x1.1e419246f958dp1
++0x1.ab51c6feeab27p23
++-0x1.7250449530cacp12
++0x1.163fa61f55b34p4
++0x1.8191c3fab648bp26
++0x1.e574e641e9953p36
++0x1.bcb7d57a8be21p19
++-0x1.cdbdf1f04e27dp713
++0x1.619bf59c7d8c9p-2
++0x1.efd0252da4206p9
++0x1.37a88102e8fb0p484
++0x1.cc89f0ea997bfp-22
++0x1.8dedf0760d306p629
++-0x1.a13e8382b5f97p0
++-0x1.a82aa369fc6ecp430
++-0x1.beffb6d4defb8p-22
++0x1.f1a644b10c6d9p7
++0x1.9dfa508a997e0p7
++0x1.0daa03637d98ap162
++-0x1.b8c876b5e4a9dp0
++0x1.ff125371e1bc4p-1
++-0x1.949833005771cp0
++0x1.c0c55430f9cbdp3
++-0x1.714f570923bd4p926
++-0x1.ab5b85f19aa66p0
++-0x1.65c85390b2408p781
++0x1.ec07655eaaf47p38
++-0x1.e544715929a02p494
++0x1.7ed0279df0f77p-17
++0x1.6fb3a12754691p36
++-0x1.41ab405178a11p142
++-0x1.db6871f3c584dp0
++-0x1.c0d186c2b6b34p25
++-0x1.186545efdec01p15
++-0x1.e4dd47a4fe36cp12
++-0x1.2be85575eb960p9
++-0x1.7514576624239p636
++0x1.ca44724938996p20
++0x1.c00ea79ff62a3p15
++0x1.e4b5b4ced3371p18
++-0x1.e802b666b8b3bp576
++-0x1.0f58d230a2735p37
++0x1.20b346f87c5fap5
++0x1.0f1be20502191p13
++0x1.d5b9262dfe8cep16
++0x1.1c8e4596c422dp25
++-0x1.3046a7fbcb787p28
++0x1.c936670321b1bp624
++-0x1.3b7c709a4d739p25
++-0x1.3ad3b52b7a8bbp6
++-0x1.9c77c3ed0da77p534
++-0x1.b430a641670b4p9
++0x1.bb4e427cf8f00p5
++-0x1.bdd570ddd9f21p498
++-0x1.5fffb06dce6d9p0
++-0x1.31b725a7f4c50p-1
++-0x1.4a5e165da5c90p257
++-0x1.7a9d706ea21aap632
++-0x1.c13902aa3b501p-16
++-0x1.34378127441dep16
++0x1.1899667507aa0p8
++0x1.b2199455cf381p17
++-0x1.4c1941a32328ap13
++0x1.18f575bcb47d3p15
++0x1.24c4f7f41c27fp17
++-0x1.778b636eb24aap31
++0x1.c76120a96993dp19
++0x1.0900d47dafcf3p702
++-0x1.89c9464bb2574p0
++0x1.8504779144b5dp0
++-0x1.726f662aba5b1p20
++-0x1.1c5ca2fd655c3p26
++0x1.b5b0544ca94dbp910
++0x1.c9930669c935ep-18
++-0x1.fa0ed41cc58c8p37
++-0x1.6b60a27346578p-27
++0x1.5219873f67d7cp12
++-0x1.7a2c7684be1c6p0
++-0x1.613492313ae4ap7
++0x1.806334d1e4496p711
++-0x1.88e563a4c9a58p7
++0x1.33c076dccc763p13
++0x1.11ed850120464p839
++-0x1.75ea967c17be9p495
++-0x1.ba72f7be7c7ccp14
++0x1.7589e0d04c4b8p189
++0x1.8417412710306p3
++-0x1.cade31e811061p437
++-0x1.974b573315304p-24
++-0x1.ac42144bfc176p24
++-0x1.7bed32fc75c59p11
++-0x1.4825d5ba1f52bp13
++-0x1.c3bbd693a499dp6
++0x1.38c470d825bc5p3
++0x1.4ed3556f8eb84p411
++-0x1.a632636e736fep4
++0x1.211be5b96be3ep-22
++-0x1.8cdba14cb1ed8p12
++-0x1.9a7b35414dc4dp16
++-0x1.d5d9a0afa77cfp634
++0x1.c34cb68989b32p17
++-0x1.84ba041f02caap0
++0x1.61a51738c63e5p18
++-0x1.3f37a3e362c12p-5
++-0x1.b0166656ecf80p20
++0x1.45f4822152389p13
++-0x1.ac54855cc74bfp25
++0x1.b9ddc53febefap453
++0x1.cfc301950d687p1015
++0x1.1cb21718dca32p23
++-0x1.232350a52c4f7p983
++0x1.d6e6a10d548e5p23
++0x1.977056a2668eap292
++-0x1.ffc1c328d34b1p3
++0x1.91d0e100810d6p-9
++-0x1.3e0756498d337p1
++-0x1.b68aa43ff9110p45
++0x1.a53200b957e9dp-6
++-0x1.c39415555077fp-6
++-0x1.aef7328553c7cp0
++0x1.f2059429fcdd8p23
++0x1.8a50e7c0eec78p17
++-0x1.c21e6658d1fe7p-1
++0x1.9ce192ed63b28p23
++0x1.da1012047ba28p41
++-0x1.b09f87dd277f2p10
++0x1.e58ab4f8ef73fp22
++0x1.9672675520b23p0
++0x1.010b17f807152p45
++-0x1.92d967fe78b7dp831
++-0x1.a71196fb66603p303
++-0x1.2786d24ce59c8p-20
++-0x1.ad6e7205f5d75p150
++-0x1.6c9037f2ec353p44
++-0x1.800ee1d7cd409p914
++-0x1.cac7e495263ffp605
++-0x1.d6a7e7ccedfefp796
++-0x1.1ee981d337986p-9
++0x1.bbb3427565a92p474
++-0x1.c42631df1cefap44
++-0x1.e04a92f8f896bp-1
++0x1.d2a2e5778cc7ep899
++-0x1.bc30d7beea737p986
++-0x1.7ede11aa7d47fp18
++-0x1.489a02a167b04p32
++-0x1.9257b27ecc0d6p6
++0x1.12ab65c6d3b81p46
++0x1.d50d624f63097p24
++0x1.e88f961d0afddp23
++-0x1.1f8fd098fdee0p-14
++-0x1.5c8862170e148p-16
++-0x1.abd9759e682c6p4
++-0x1.f1ac241ecfa70p-16
++-0x1.bf27001863e98p558
++-0x1.c3a843ee1f309p15
++-0x1.5458e7f6ecfeap22
++0x1.af31467613f65p0
++0x1.665d563797d5ap13
++0x1.f305a29da24c2p4
++-0x1.4062318aed418p12
++0x1.7b7721549420bp0
++-0x1.ed9ce71907bf6p15
++-0x1.95a9a284af0c1p843
++-0x1.0f46820718da8p16
++0x1.305e23b30adf3p859
++0x1.3c1fb3275314dp15
++0x1.e58eb396e0188p31
++-0x1.7c43c46f53c30p8
++0x1.4cd3202666397p-6
++-0x1.ca6216ef28d3ep784
++-0x1.7435667810fd5p-20
++-0x1.adf8179db7d4dp23
++-0x1.dc08b58090270p28
++0x1.d1f4356f2e4a6p27
++0x1.eb1f447c6659cp13
++0x1.f2d524e96e3f9p523
++0x1.1ca5d135f4a81p5
++-0x1.b7cd435089283p499
++0x1.9b3f745c109c0p25
++-0x1.aebc724bc9f13p917
++-0x1.0cba50c3750c5p922
++0x1.5f59539f3c424p8
++-0x1.08889270ebac4p549
++0x1.d6d2815236c18p37
++-0x1.f53a4227c3cbbp10
++0x1.8d29342fe90aap22
++-0x1.491bf16e3b738p36
++0x1.8fb153cddee3cp34
++0x1.cad7f140e42e8p1020
++0x1.0ae2e6fd71d2cp30
++-0x1.e84ee3f73d212p-1
++-0x1.7231326f8e61fp650
++0x1.ac0311909abe5p966
++0x1.d5f7e441a9096p411
++-0x1.75e293eb1043dp24
++0x1.7be84683271cep572
++0x1.5f8ff3c680e11p36
++0x1.cf03874ee3db3p334
++-0x1.58c8c1e8be2edp632
++-0x1.baee66c1245c4p9
++0x1.8ced030bb09e6p108
++-0x1.fda225f8ecb2dp368
++0x1.63d8c15566bc3p-1
++0x1.9bbd74b01b538p2
++-0x1.16ed44021834bp12
++-0x1.0235450de863ap29
++0x1.9428b5952ead7p23
++0x1.a512872ac8875p0
++-0x1.8f7e94f6ce64ep-24
++0x1.9d9de34f631a6p0
++0x1.02ee55a75cb5dp-3
++-0x1.0b6532e2c6919p-24
++0x1.9caaa1946b56dp0
++-0x1.efc845be18280p258
++-0x1.4177b13af435cp16
++0x1.564ad7ff494fep20
++-0x1.21e081ad2d02cp312
++-0x1.a4da0315686e9p0
++0x1.663bb46627e4bp40
++0x1.618f84e86d1aep22
++0x1.4dedf383d4291p888
++-0x1.bb9d0678f7888p3
++0x1.5319a1e934edap186
++0x1.1c0897fc41663p10
++0x1.8b6dd26fc7f0cp21
++-0x1.342a0316bd81bp20
++-0x1.ca34766b88f7bp553
++0x1.8a65224d8b44fp188
++-0x1.3637e3eee59b1p-24
++0x1.549801faaed00p14
++-0x1.a08912a6fa581p39
++-0x1.06bd137276b59p226
++0x1.4368a18959df2p17
++-0x1.b4bca5db9d268p-1
++0x1.394126b0c3cf8p3
++-0x1.8654666821399p831
++-0x1.f79af4f836b2cp21
++0x1.9942b024fb0d3p0
++-0x1.1ebad7277d725p-12
++-0x1.fedb203dad286p19
++-0x1.40a4d27a54422p29
++-0x1.a27013a6b5db3p-16
++-0x1.eca7e4e273765p951
++-0x1.dedf0543ecdcfp12
++0x1.7b7ec1819cff0p24
++0x1.064b131f15337p24
++-0x1.a5f5949b9f801p9
++0x1.a3bcf0c3c2f0cp184
++-0x1.83b94461ba34ap-6
++-0x1.5992353ea24efp17
++-0x1.194a036ff1ae4p43
++0x1.e0d7d07382e99p42
++0x1.8ad3f033a34f7p31
++-0x1.c9fdd72e0cce7p8
++0x1.ac66c27ae4518p-14
++0x1.1aad20c97ef2bp-24
++0x1.c687a7e1b3bb2p771
++0x1.02ce270f74c87p-10
++0x1.1562759c45e83p-2
++-0x1.5bf0b43affc94p40
++-0x1.eb88d184013f1p25
++-0x1.bcd3d71c4a84dp15
++-0x1.feb5845a4017ep2
++-0x1.6e1c807e05452p36
++0x1.450494828da68p25
++0x1.7fe6d347bc643p75
++-0x1.1b70f1ea5a1a4p23
++-0x1.2171070c39370p460
++0x1.c0bfd441a9070p172
++-0x1.dff6d1ed042eap155
++0x1.1064c4ba80b64p916
++-0x1.ef5113553c112p310
++0x1.8dcbe38231eafp-11
++0x1.48d1a6fc900a2p519
++-0x1.bce42351af42dp20
++0x1.a169a56cb6b12p-13
++-0x1.750fd2fdd73d5p-25
++0x1.b92933b734341p24
++0x1.a50cf516689b3p19
++0x1.5de0c597781e3p17
++0x1.bd70b0b71c3e5p351
++0x1.eacc7731e857cp495
++0x1.a3fb42a165580p22
++-0x1.8f76c56e255b4p-14
++-0x1.9fbdb32a35c6cp141
++0x1.c3c477621a74bp378
++-0x1.8c380783af50ap2
++-0x1.a05d50261fe1fp5
++0x1.e088235d1a76dp25
++0x1.5011713801c4dp5
++0x1.264d4420ae3abp15
++-0x1.d2ac4569a1c6ap785
++0x1.0411b74a91529p199
++-0x1.4657b01035e58p26
++-0x1.d25ad603e04e0p23
++-0x1.0bfd05a085350p26
++-0x1.974fb15d3aa9bp10
++-0x1.06b730454c09ap1
++0x1.20a7a61fe0c14p23
++0x1.2a3e5568a88d1p-15
++0x1.478f810da74a7p34
++0x1.13486653f1c89p0
++0x1.37e3105c65d09p2
++0x1.d8db173b39e12p685
++0x1.f33e80726ece4p-1
++-0x1.27e633778cc62p-9
++0x1.f4af54734e49ep36
++0x1.94e76082b3cfep20
++0x1.bf1ca6e0f5864p23
++-0x1.901a9197545a8p0
++0x1.132c37fab90d3p-16
++0x1.83d2770599e1cp470
++0x1.2091760b362aap-5
++0x1.04e4c158364eap250
++-0x1.c44196bcbc78ep23
++-0x1.7698c2d4504ecp0
++0x1.74db0716d3237p857
++0x1.86c78536631bcp0
++-0x1.28dad63946e6bp21
++0x1.3fb691eee1a19p24
++-0x1.3a048091bbb1cp21
++-0x1.fc9b13357eec8p14
++-0x1.11f6d7b366483p-4
++-0x1.1d2690d2fc3c9p13
++-0x1.b404c2560d76ep34
++0x1.f7ed62a6e49d8p18
++0x1.7245829fb1c45p500
++-0x1.27b61792a550dp581
++-0x1.e51cb307c265cp20
++0x1.f12564eb04cecp0
++0x1.fb9b7593d9ae8p843
++0x1.94abf50c1ae27p26
++-0x1.bb7a62f317dccp221
++-0x1.659ae30b4af07p674
++0x1.eeda462ccc67cp9
++-0x1.d6ec454444ad5p30
++0x1.edc3b03486bc9p-1
++0x1.8c359325387c4p169
++0x1.a46ec36418dfbp0
++-0x1.668df7872660ap231
++-0x1.7a3f30b53dbbdp20
++-0x1.186542f9de11ap13
++-0x1.ac3103ff8d0dep956
++-0x1.1701e1f4b7a28p45
++-0x1.a77534a41661bp26
++-0x1.805b83ca4a983p741
++0x1.9b8e34cafe7d1p237
++-0x1.7d6591476c813p11
++0x1.2564573a6270ep10
++-0x1.34d5721bd9e2fp205
++-0x1.2d24c4f0d1402p21
++0x1.3975d02ae228ap26
++-0x1.c520231d589a8p12
++0x1.841ed75a75d69p0
++-0x1.6c6be6fa5913ep39
++0x1.c44db37db2cafp267
++0x1.92d8e08dcc638p24
++0x1.87c7a090d5ce1p-16
++0x1.3130f2cb35283p773
++0x1.87fc94babfa17p14
++-0x1.35d156f2365eap663
++0x1.7f0c71af5cf7fp-2
++0x1.c1171538bad68p509
++-0x1.6d8c4522af157p8
++0x1.6923c7c62dd28p43
++-0x1.cc29d0dd1d0a8p7
++0x1.b35e40c13ab28p12
++-0x1.9771f23aa28b8p2
++0x1.fc625426d9743p-1
++0x1.f2eac0a3b585bp18
++0x1.1bf6e59ca97eap-26
++-0x1.1a5641181130dp574
++0x1.c65aa7a45b0efp25
++0x1.db74347a72291p23
++0x1.82abe2590802fp0
++-0x1.021815669b26cp643
++-0x1.4b5f153d3a4a7p37
++-0x1.3ffba4bbd1cf6p15
++-0x1.06b1963b06e9fp75
++0x1.1f230613bbeacp18
++0x1.65da91ad037c7p25
++0x1.efbe10dba52b5p690
++0x1.dc82d7dbf1ef2p4
++-0x1.a78d8512d1313p5
++-0x1.87f2d6caba40cp20
++0x1.6e4bb6102226ap500
++0x1.a88fe25344e53p45
++-0x1.cf03e69d00b76p16
++-0x1.a69333452a9c5p12
++0x1.dd2e13a94b242p6
++-0x1.ce73036c98611p23
++0x1.91e9d1ac14305p10
++-0x1.68e6a230c0c32p26
++-0x1.167d022857473p12
++-0x1.c4d8a56a3c59fp21
++0x1.76fd938c01180p0
++-0x1.9f3023d3fe5cfp-9
++-0x1.25c1b071f9f0ep744
++0x1.d3a0d06d79bd8p447
++-0x1.205561bc373c0p70
++-0x1.bb14c219cf119p39
++0x1.3fc332e6a45d1p1001
++0x1.a94ac5e537ddcp31
++-0x1.455b03fb1f252p19
++-0x1.398ff64a119b4p164
++0x1.a6d3422953772p7
++0x1.e4f53738724b7p35
++-0x1.e3c923a871c32p20
++0x1.3f7a33b9f877cp625
++-0x1.b08cd29c8af3cp41
++0x1.41e0545a9fd41p44
++-0x1.37adf744bfbf4p781
++-0x1.f9b3e0086091dp-9
++0x1.c7cd625a6ffd9p27
++0x1.44dac65c6e037p527
++-0x1.b465f6c0968a6p0
++0x1.145960c880918p400
++0x1.bdda37840188cp16
++0x1.31f306f18f6bbp3
++0x1.4e51a42a59d1dp465
++-0x1.84b5b6411630dp-9
++0x1.b91e57055ad75p9
++0x1.4873658bb25a1p27
++-0x1.f03661c52ba71p15
++-0x1.eacd674476419p5
++0x1.aaae40a57b08ap41
++-0x1.549d609dbc23ep7
++0x1.b9b6227653d8dp4
++-0x1.1bded0f0b7680p561
++-0x1.e92355003abc3p-20
++0x1.dad677e6137b5p29
++-0x1.e196a69741820p21
++-0x1.635324c3f6b71p45
++-0x1.0e1687acad9b8p823
++0x1.a1d7a6774c9a9p0
++0x1.cbca47ac9b582p11
++-0x1.acda422c4bea7p-7
++0x1.621f73a497a57p-16
++-0x1.b8c9242605781p864
++-0x1.db3792a5149fbp0
++0x1.8862c65ee2160p-17
++0x1.d6dd16228de1fp-10
++-0x1.b88502e85c4e6p3
++-0x1.c1a4c6ca9cb90p23
++-0x1.cc1cf066e7a33p25
++-0x1.b5e1749178cf6p744
++0x1.dfc7054b12578p12
++-0x1.29ec85df3a58cp334
++-0x1.85b8b0c95dbd5p13
++0x1.7257e1349b295p33
++0x1.9d85520001790p129
++-0x1.793fe72cc8c1bp215
++0x1.739df4f1e7750p25
++-0x1.a98cd0bd8bf08p22
++0x1.cd8da092fb8dap89
++0x1.8c16c534ebb2bp-11
++-0x1.abb2c2ad80b34p14
++0x1.2de7338716d92p-18
++0x1.9211d060f4465p-3
++-0x1.72fc35651040dp0
++0x1.2a26d2667b91cp29
++-0x1.f4b0d40e31bbcp19
++0x1.fbbe40d2d31c3p25
++-0x1.9f4c04b486a5ep19
++-0x1.45193205aa9c4p164
++-0x1.37a8b60e2d5cep6
++-0x1.3988f220e6441p-26
++0x1.493d31fd3c02ap82
++0x1.2b3340bd6f2a1p39
++-0x1.54cbb04f2304ap-1
++0x1.926940fdef273p38
++-0x1.45ea2765ca2dfp24
++-0x1.ed0821bb849eep479
++0x1.4fba868adf04bp16
++-0x1.e9d417e0bc17cp0
++-0x1.f4f965b3faf30p17
++0x1.7d7f77efe5d3fp23
++0x1.50cfc50c2f640p24
++-0x1.cf1df3c5ffe17p46
++0x1.f936b6dca473cp211
++-0x1.8a1406e6ee482p11
++0x1.463197698d0d5p101
++0x1.2409659b805cep7
++-0x1.3b3d65813a051p191
++0x1.06ce059e85ca0p0
++0x1.b60c06f9f5398p6
++0x1.d60fe7ff7c31cp12
++-0x1.07b0f652e0470p5
++-0x1.4580b6d0afe76p50
++0x1.e21807ed764cep-18
++0x1.fdc865ca4cd63p-1
++-0x1.c499a71b0ca05p269
++0x1.0d75e2b8a7955p160
++0x1.6a04420a71954p-27
++0x1.763e053587862p7
++-0x1.39ef5367547b0p5
++-0x1.2b2e67b7a8bcfp24
++0x1.86f6e7b54f573p2
++0x1.c2b6e3acd3d96p35
++-0x1.e97ef093600a2p11
++-0x1.c572f3826cf29p980
++0x1.796b642ff617cp-3
++0x1.601b631f840c9p-14
++-0x1.8eba049870e51p902
++-0x1.3b17c1c67a109p25
++0x1.d305139f10a36p17
++0x1.ec817466d70a7p0
++-0x1.1265c21b2d99fp245
++0x1.d1fe37e14bb77p-1
++-0x1.f178f690d9f42p6
++0x1.40e3362b70ed9p481
++-0x1.6a04a793aaf0fp-12
++-0x1.8245c6bdd8165p16
++-0x1.7264a53f935a8p10
++-0x1.13fba79ae44ccp18
++-0x1.eb9557cea7ac8p0
++-0x1.8ec847721bf13p26
++0x1.74d974321f101p-12
++-0x1.bb1c86a8ca6a4p35
++-0x1.0c4b1052754aep459
++0x1.067f874c51947p15
++-0x1.9cdeb085dbf66p-25
++0x1.e03a470b607f6p32
++0x1.3f70e0d5faf68p782
++-0x1.0d7ac25499901p39
++-0x1.d0c8711803183p-4
++0x1.dddfb43ab15dbp49
++0x1.80dc4549bc143p-2
++-0x1.8432c6e6dbcb8p46
++-0x1.e7a2c04ccff8ep46
++-0x1.453a2503dad3bp-26
++0x1.3bf04538c0bcfp706
++0x1.b909a6eac3c92p21
++-0x1.7a6db4a0188cap9
++-0x1.1d3e80b32c07ep-11
++-0x1.43fbf1bf87d6ap978
++-0x1.d24c3457d0d3cp15
++0x1.106e24eadb4efp207
++-0x1.291f20d923034p-15
++0x1.910ca4ab8908dp12
++-0x1.8f25f39b6831dp-23
++-0x1.eb0a55dd34df9p25
++-0x1.6aa47787b6253p834
++-0x1.7574d59d3717bp41
++-0x1.cf28f24daf9f0p234
++0x1.7760660a714d0p0
++-0x1.a38422219ffe8p25
++0x1.52d2453a853c0p47
++0x1.905551119e9e1p930
++-0x1.5f7e4096319e3p844
++0x1.9c7951ed1ddf7p11
++0x1.a16287317c9fcp879
++-0x1.0804647cb4089p-1
++0x1.a886323cf0d4ap512
++0x1.1ff6b66d5ebe7p41
++0x1.4ab1627ed8fe0p12
++-0x1.a32a8757fb5eep542
++0x1.5f89860e18209p24
++0x1.7dcfd293f582ap-8
++-0x1.13f813514eaafp591
++-0x1.e5e046e81a4a0p315
++0x1.f4b365dbf8bf5p874
++0x1.c8a4e5e39c9c2p1018
++0x1.fa6c62b3010cep649
++0x1.c2de84df7c3e5p934
++0x1.af51a42607dc8p-18
++0x1.88a3d1f1000cfp874
++-0x1.7a4744d42926cp0
++0x1.aa8de5d123c00p-1
++-0x1.5255469b0b1a0p21
++-0x1.ddce133b21c51p426
++-0x1.324320eae37c5p23
++0x1.ae4c1209db983p-5
++-0x1.b856a600fbd98p38
++0x1.6f4d04c321f75p21
++0x1.01475416807a5p9
++0x1.9d38235f415fdp-13
++0x1.206ec06d9ab68p-10
++0x1.bb75b35deec78p33
++-0x1.1696b22d64f95p113
++0x1.c1df8560b5cbdp18
++0x1.52a872c448619p39
++-0x1.1ef841f17fc34p85
++-0x1.f133c2e3045d9p-2
++-0x1.129596a5af08ap-7
++-0x1.c93715d49ac3ap41
++0x1.603ac7f2c733dp10
++-0x1.d3fbb47476501p143
++-0x1.8cacb5e52c001p26
++-0x1.a3c87118d19b3p33
++0x1.222aa2db4190ap25
++-0x1.5409a38a92aa7p872
++0x1.38cf32c6b7d09p-9
++0x1.a4ec535aa90d5p25
++-0x1.42daf51bf5934p839
++-0x1.316b8421f5fd1p-15
++0x1.b1f814b0326e5p697
++0x1.a9ffc120ca209p668
++0x1.d058e125f023fp790
++-0x1.5112b5102f58ep137
++-0x1.4202328599a61p29
++0x1.da41b5d447aa6p454
++-0x1.ef77a65167e5cp24
++-0x1.0e6276669fc5bp32
++0x1.b0a6d77eb6c83p-4
++0x1.1a345788bd44dp546
++0x1.41f4053900144p-19
++0x1.057f512cc3bc7p14
++0x1.6e8b02db1ffd6p105
++0x1.7ce35635e252ap0
++-0x1.b96b40b776baep24
++0x1.ff4ab03720fa9p-4
++-0x1.adf7c2f3f7875p14
++0x1.e870529e21dcfp17
++0x1.d63b208262928p25
++-0x1.3891962477405p7
++-0x1.437ff414d0fa9p19
++-0x1.291a550edea92p5
++0x1.9ec093b7eb3b2p375
++-0x1.8ed4f1b3bafe7p626
++-0x1.b41a54850cf23p712
++-0x1.a6bc42ea33f9fp767
++-0x1.2d9bb56ea445ap35
++-0x1.aece85e37b54ap0
++0x1.246751c26d13bp296
++0x1.f2e7f697a2d1fp29
++0x1.6c37a490520bcp26
++-0x1.ff8603bbcf498p2
++0x1.362023b6cd6b2p31
++0x1.cf2d87e53206ap0
++0x1.8fe7a627af176p9
++0x1.8a1ba043b40b9p6
++-0x1.8615b0b70103fp0
++0x1.7db401923e93dp923
++0x1.6f54e4a864f17p0
++-0x1.86c5665be0ef3p43
++0x1.6b5066bfcc388p26
++0x1.20d1f69be6b86p3
++-0x1.d177e68f841d5p-1
++0x1.fc49110300d0dp-2
++-0x1.bd5bb6e1c5f43p-1
++-0x1.139a94e47ca10p-9
++-0x1.ac36349c2d3e8p6
++0x1.7698522ba5c25p216
++-0x1.62a700634c519p228
++0x1.dc4a17d8c584ep-13
++-0x1.052aa2ae959adp25
++0x1.d6adb0d709d68p17
++-0x1.0c4c506cc6c2bp79
++0x1.7977c290c1798p0
++-0x1.684b477bd74e1p39
++0x1.bae964ed32d31p-2
++-0x1.aa5d80bdd8324p24
++0x1.b8ba85fbfb8adp21
++0x1.e4eb26b6aaa01p20
++-0x1.ec2a365168686p41
++0x1.28dcc3ac950f9p173
++-0x1.906e052eb7470p-20
++-0x1.707e251ce768ap440
++-0x1.821b023683ae3p37
++-0x1.4db457ffe8a62p742
++0x1.0670c3d7576b1p8
++-0x1.f44a632b6a2d4p2
++-0x1.b75b407bea318p-1
++0x1.507f63e62851ep-25
++0x1.bd10460d75116p15
++0x1.fc3ba353f04b8p13
++-0x1.2af436412167ap34
++0x1.8e58408a0b161p30
++-0x1.cb1884deacccap677
++0x1.112e30c8147d8p288
++-0x1.03a724eaa0da3p14
++-0x1.58a7a7304d337p4
++-0x1.d3d8600450d2fp46
++0x1.6784927c4db75p3
++0x1.925e011c2be99p-19
++0x1.ebfaf6c6dfd75p-1
++-0x1.0730625f34e2cp622
++-0x1.0c78f6f77f4a0p16
++0x1.4e7226251590fp34
++0x1.c2d2c2bcfe176p45
++0x1.92a40269de752p262
++-0x1.6b17d4e0e4095p47
++-0x1.b35df39dbe7bap23
++-0x1.2433941ea6c1dp181
++-0x1.156bc71aaf929p26
++-0x1.c0a2337b73d37p-25
++0x1.c4a1144dd5788p47
++0x1.61d1b135895c0p26
++0x1.defc76272ee65p473
++0x1.d28a2698c470dp0
++0x1.94f6142bed738p0
++-0x1.7f782459fa34fp18
++-0x1.a68016b127852p46
++-0x1.8c8512f7601a6p559
++-0x1.296f002678629p0
++-0x1.6713546c2b7dcp24
++0x1.5820400b8ca32p-17
++-0x1.986947ed54745p28
++0x1.5589220a8d908p2
++-0x1.bb73c7db6c6b5p18
++0x1.57545758dc374p1020
++0x1.3c61573e1df6cp860
++0x1.b5ba913c8b04ap43
++0x1.152d60fff636ap25
++0x1.9dfde0143fc3bp664
++0x1.8002f4ae0cd26p546
++-0x1.5555972687f97p44
++0x1.d4cd0108a77b8p-22
++0x1.d605a75200cfdp799
++0x1.8f1ed35661061p13
++-0x1.aa357490e4b15p16
++0x1.c616b347d6c7cp47
++-0x1.5c1bb32908a9dp37
++0x1.3e63c3071d00ep10
++0x1.f6a851a65eb40p16
++-0x1.09293376e5ff7p3
++-0x1.d28c834a48febp-1
++0x1.5d1f711534ffap8
++-0x1.ab58768a06b4fp0
++-0x1.c305e4720570cp1
++-0x1.fd01f697e68f3p6
++0x1.20aa374d16fa9p-7
++-0x1.640d51133a28dp7
++-0x1.4cbd82a906116p-20
++0x1.e728b313e9290p20
++0x1.2f00b66b200eep2
++0x1.e70cd0870834dp22
++-0x1.424f62131a07dp440
++-0x1.8ffdb1a359d44p8
++-0x1.d14c66613a0afp47
++-0x1.bb9dc4d8f0b60p23
++0x1.8cfc42cbf93fep21
++-0x1.bff987c5b24f7p40
++0x1.acb444767500cp404
++-0x1.e3a3278c0889cp615
++-0x1.c7c03410ee559p1
++0x1.1aeb262f169afp9
++-0x1.c00d57ef36176p16
++-0x1.54b5c337ab8c7p26
++-0x1.fca5308d5a5f0p-1
++-0x1.ee65a575ad332p6
++-0x1.73d3b5be2d412p4
++0x1.994532de92cc3p288
++-0x1.7b3b402cd684ap672
++-0x1.5581914c736a3p26
++0x1.8691a1510a8ddp26
++0x1.439e202ffc78ap31
++-0x1.00f1f1c0a534dp5
++-0x1.e787a060a1beap-1
++-0x1.a40b4564248ddp33
++0x1.9db0f66a7c69ap758
++-0x1.29df95676f2f3p29
++-0x1.c1e2a39fad4f9p30
++-0x1.2398052cf9970p5
++0x1.9584270d98e8ap34
++-0x1.9c3a8363c08d6p-9
++-0x1.c3ae6326607b1p0
++0x1.0e33e435785a9p24
++0x1.3e1547010b972p30
++-0x1.00e45198f46adp12
++0x1.cab9d2d70a0ecp176
++0x1.3cad136952e75p0
++-0x1.b690f763014a7p-1
++0x1.5d5f04e7e601ap840
++0x1.687d04cf256e2p17
++0x1.fef58250afa5ap733
++0x1.bf55465c8726dp10
++-0x1.879cf61bde347p0
++0x1.41fa061534bfbp1000
++-0x1.3547166ae0563p18
++-0x1.29b792c792304p0
++0x1.44f0c244630e4p4
++0x1.b44fa2fd3ba45p-10
++-0x1.ee70d4ee2a313p20
++0x1.e09a910e6fec6p47
++0x1.df08c242a0825p41
++0x1.1b9f438519594p25
++-0x1.009e65b886832p23
++-0x1.b211e177c4878p-25
++0x1.cf4f511036953p-22
++-0x1.a331a056fd10dp15
++0x1.78b95045b3821p20
++0x1.9741d0c92a811p19
++0x1.0799369efbf5ep23
++-0x1.aa78545af6518p25
++0x1.a4f3e0e422feep826
++-0x1.67f8d1c373dd4p871
++-0x1.e4d67454ffbcbp11
++-0x1.c55dd363dd674p3
++0x1.6402e3d9defaap15
++0x1.8b5f257d1ec68p-16
++0x1.af29726910ee4p42
++0x1.99bc46ffb746dp0
++-0x1.a1375601023eep810
++0x1.85c587e566703p737
++-0x1.f7c1e1a4d0636p-4
++0x1.969d9183c03dbp558
++0x1.f049b22399098p34
++0x1.943ec10617417p5
++-0x1.e2dd46c8c4c7ap353
++0x1.fda825f2618b4p4
++0x1.be0c71a4be7fap24
++0x1.253fc5016e602p26
++-0x1.f40770706a468p19
++0x1.a93453e7eedafp544
++0x1.4cbf20bbaffe4p0
++0x1.8523e43195d20p0
++0x1.ef3fe0d51ca0ap869
++-0x1.7bfd906b4bc4cp0
++-0x1.eb85c2e781ca5p834
++-0x1.c72973927a11bp11
++-0x1.07bc71bed30b3p39
++0x1.ca2691e190f22p-24
++0x1.cb48f51c1417ep44
++-0x1.567c86970707bp44
++-0x1.1328459387024p19
++0x1.8dbca5e6ae26bp-20
++-0x1.0ea782b471c95p7
++0x1.885d949bd233ep25
++0x1.5706b40d7d8d3p-11
++-0x1.99ffd54628c49p0
++0x1.4dd434ac6f7e8p150
++0x1.e33c777463aa2p25
++-0x1.f7ee12177cdddp285
++-0x1.13f2e7648aeb4p8
++-0x1.bb3e114af14ffp386
++0x1.0ea653cfc5144p86
++-0x1.97afd730cab3ap0
++-0x1.1b4a96ad1229ep44
++0x1.e6b573ec87b1bp172
++0x1.2f0542b4e0611p533
++-0x1.b95a733cdd7ddp20
++-0x1.d47cf66eebb8ep-15
++0x1.78f0b5f53a39cp33
++-0x1.8c35d7a87e6fep18
++-0x1.5273b2382ccd0p15
++0x1.286441ca5714dp-20
++0x1.136ee1c73224fp872
++-0x1.96c0235d8d55cp24
++-0x1.732f95c827773p35
++0x1.667404de0f089p374
++-0x1.2c5137dddd70ep38
++-0x1.7ac64352f8731p311
++-0x1.375d526b9499bp10
++-0x1.608744f90585bp46
++-0x1.b152d1cd9d10bp11
++0x1.ac15612e56ca9p23
++-0x1.1e20923124ba0p18
++-0x1.976ff6fbebe0cp483
++0x1.19c89663c0f50p1
++-0x1.5d4732b848227p0
++0x1.bce080a10af4ep71
++0x1.4b5181670d98ep1
++-0x1.88ef56cab1b8bp0
++-0x1.124bc48a15e4ep560
++0x1.16aa8030446c5p1
++0x1.ea3d708440531p-5
++0x1.9a933630408d3p0
++0x1.25c992f62ef85p21
++-0x1.892203bbd6e79p787
++-0x1.b69e12ed65962p-12
++-0x1.213bc173722c7p858
++0x1.9ec5648d542b0p0
++0x1.e49be4cdb62fep9
++-0x1.b51b42ddbf7d6p656
++-0x1.d98793002d34ap0
++0x1.8365b15d3d1c8p17
++0x1.512fb18d70d75p39
++-0x1.6de981933ee82p136
++-0x1.985c12bed07e0p13
++-0x1.a5fbc7fc45b3ap-1
++-0x1.8710f55f8c2d7p-24
++-0x1.e21315a4ae92cp40
++-0x1.b9e2943771bf3p0
++0x1.da6de76a482d9p458
++0x1.5599148b4cf81p7
++0x1.d71ea41f64e8ap776
++0x1.89d6b23942ee9p0
++0x1.9fd7d5273c695p21
++0x1.817ca791272d0p1021
++-0x1.3452f5175f006p-2
++0x1.f3af654e608f2p13
++0x1.1d0a0528d7bdep21
++0x1.2c2aa710a863fp924
++-0x1.77b2852f5e175p8
++0x1.9f48d30a1e11bp47
++-0x1.54f600b66c2fep12
++0x1.56b3a59e3e2f4p751
++-0x1.641b67eda77fdp23
++-0x1.62d64749736ebp-5
++0x1.a481622af3746p911
++-0x1.96cec2f358260p24
++-0x1.f82d54d558421p19
++0x1.5c4330323eb8bp34
++-0x1.9f86b23c7fe1fp17
++0x1.5994062e8e0f1p22
++-0x1.b33505561d1cap905
++-0x1.ccdf732c7d20bp680
++-0x1.d6a84378ac8b9p23
++-0x1.a877d1dcede4fp4
++0x1.9c4fb2b271fa0p-17
++-0x1.edb1d145f200ep836
++-0x1.f9a466fe6d9c0p36
++-0x1.e07ab7c21cb33p-5
++-0x1.1c05b681bc11bp12
++-0x1.dfea704995e47p0
++0x1.3ec9e0020df9bp261
++-0x1.2de113c0c0abcp840
++0x1.d523551d1301bp301
++0x1.d57ff49633b0ap16
++-0x1.60e00540a4916p43
++-0x1.ae7cd0ead2707p-21
++0x1.59c5a3da56943p646
++0x1.a0f1e02dc546fp0
++-0x1.90c74581ad4c2p804
++-0x1.3df5a6745c7b4p279
++0x1.b1dbd7c284f4ap0
++-0x1.53a8236e11ad5p613
++0x1.d01ae4b6ec723p5
++-0x1.4f07c42ad516ep38
++-0x1.3f42955e43c60p164
++-0x1.cef08022a889fp-22
++-0x1.a104038d6d3aep-11
++0x1.6ab276053bf58p64
++-0x1.fa13e25fded10p682
++0x1.1346116d1b13ep-24
++-0x1.5cc635b87a547p7
++-0x1.1c6e458e45611p918
++0x1.4da2b3a7d743fp588
++-0x1.5867132e9910dp-6
++-0x1.866e226885b36p3
++-0x1.e4af96c89ac8dp7
++-0x1.32c417258beabp1
++0x1.ec6d23817ac87p136
++0x1.4c42234c4cb83p26
++0x1.627095699f9f2p21
++0x1.29d5932425be5p19
++-0x1.59c3a61405350p997
++0x1.0e0152a02da15p-11
++-0x1.cbd9001dbd84dp-23
++0x1.395d53fa21924p970
++-0x1.21ea97d900ce4p-18
++-0x1.3857250897e85p18
++0x1.23e571394fd82p-12
++-0x1.957af33a560cep-26
++0x1.7a62d3a97c082p-20
++0x1.219ec6b246176p5
++0x1.6a0b96bc3a98ep-27
++-0x1.b3c5f05c06d11p48
++0x1.acb0a26d67df5p-10
++0x1.ce255615d9492p812
++-0x1.977ad219e6c61p0
++0x1.de2041abcf313p10
++-0x1.b942620b8acfep4
++0x1.a66fb3fbc1f3cp5
++0x1.35a9b2e6488d6p26
++-0x1.c36cc56721b05p198
++-0x1.b9edf7dff3578p-1
++-0x1.ffbad564ba12ep16
++0x1.50e3f66a70bd1p485
++-0x1.a6e547a36e5a4p465
++0x1.54e875c76edc9p0
++-0x1.7333a63971418p341
++0x1.c39a24f08faebp18
++-0x1.850e4447fd121p3
++0x1.69b2d631a085bp42
++0x1.7d5f03a544ce5p647
++-0x1.54b9f0c3790dap369
++0x1.b5db54f60d7fcp3
++0x1.bfede6bcbdab5p14
++0x1.c49ed00de612fp3
++0x1.fdd5778773204p20
++-0x1.ea24548478072p-20
++-0x1.bbafb75c3ff50p30
++-0x1.9b0e77b958919p841
++-0x1.ad3172fd06e85p2
++0x1.2d24d32d0d341p203
++0x1.7c2480162bf05p42
++0x1.e028339f344a0p3
++-0x1.5dd47591cf023p11
++-0x1.a20940b9cb5b8p693
++0x1.d9eef5eef22a0p-16
++-0x1.f0f51635acaf5p873
++-0x1.c4353793f8e09p954
++-0x1.3df5f51c831ccp17
++0x1.e5b497ae4cae6p23
++0x1.43162012fdb57p-10
++-0x1.ba6782c6cca02p394
++-0x1.1f4d15ce5c886p976
++0x1.afa4370e97c87p44
++-0x1.4b72433cea7f4p34
++-0x1.01d1a13ce3762p-1
++0x1.4a5b4081f8482p599
++-0x1.e5b132f5337d4p30
++0x1.4812553307bb4p25
++-0x1.2d6ce79efbffap26
++-0x1.102777593c0e7p425
++-0x1.d6cf8795449a2p9
++0x1.0c80d756d5c0bp-19
++-0x1.9950064153b61p25
++-0x1.8e3d83d000c70p30
++-0x1.462b54d1612b6p38
++-0x1.4c6a67184b714p2
++-0x1.0e4572028b0bcp7
++0x1.3e6a630eef30fp822
++0x1.a291d6c857b9bp19
++-0x1.0e87122715084p23
++-0x1.ab4990691ca4fp891
++-0x1.7675c774d88f1p26
++-0x1.76d935c0d01acp957
++-0x1.f86d4487dc29ep39
++-0x1.2ab3d736f572ap-1
++0x1.846c74b34d14bp0
++0x1.a789a2d158e61p3
++-0x1.82c2e4943b305p7
++-0x1.4668a4a069757p184
++-0x1.4bc1d2b00fc7ap14
++-0x1.a544825f32188p12
++-0x1.e2f896a71d084p40
++-0x1.d4f317c77cf8dp34
++0x1.2fcfb6146b469p18
++-0x1.fc0ef70d94a57p992
++-0x1.8bc622e9b81a9p332
++0x1.ab3d255d05066p0
++0x1.032294d998d40p895
++0x1.597286cff2ddcp-9
++-0x1.448590f2dfdf1p13
++-0x1.ec7a74fefbef8p30
++-0x1.fec72598e90e7p698
++-0x1.739c7600c2aa3p0
++-0x1.1532224ccff07p604
++-0x1.adb0720f88c1cp671
++-0x1.0f5c60e6cdf52p918
++-0x1.cd43b383af967p12
++-0x1.412293a10f35bp12
++0x1.637192a10a8c0p35
++-0x1.1310d6c648b59p25
++0x1.d8c161c67b50ap28
++0x1.c64b8175f853ap3
++0x1.db34f69efdf5ep20
++0x1.308bc4c848b55p65
++0x1.9bde77693f64ep0
++0x1.df5fb02f5fb43p41
++0x1.511f0030d8e62p12
++-0x1.623861243cc06p9
++-0x1.f5db61e5469b9p8
++0x1.5b6cb194d89edp18
++-0x1.12c0876a1b15ep18
++-0x1.939f8667ccc46p-8
++-0x1.56cdd13279359p25
++0x1.91eb17eaeb8c4p11
++-0x1.5e31156143a7dp37
++-0x1.46ba04e866f63p7
++0x1.dbfed0411bc7fp538
++0x1.f69893a985cc9p17
++-0x1.11278358c2510p141
++0x1.6c07667947649p10
++0x1.1b5c9235ff249p852
++-0x1.1e9e57d76a9a9p37
++-0x1.388491cbdac70p17
++-0x1.c2eea2091b3f8p-1
++-0x1.cd087524966a7p25
++0x1.f6adc5d4459cap600
++-0x1.f57ff5b713a99p3
++0x1.f2d9b467e8ee0p-8
++-0x1.ee0bd3710bef0p-14
++0x1.a61cc024a420cp-24
++0x1.e902f4b561c63p3
++0x1.9955d0ecba68cp-21
++0x1.60eb50fec72a7p-20
++-0x1.09f0677aee265p1005
++-0x1.8812968970db4p721
++0x1.8dcc40b01b324p112
++-0x1.3a90164a6fb2dp26
++0x1.3802f5cdcda63p6
++0x1.e21a052adc0d0p0
++0x1.a948854deaa16p-11
++-0x1.274d4065edf3cp25
++-0x1.9193532bbe2c9p16
++-0x1.2e26e362aa597p472
++0x1.550114f8cd6b0p16
++-0x1.1c39a294dfb51p946
++-0x1.1ac3f37ca8f9ep6
++-0x1.d0cfd15066c8dp673
++0x1.1b1f153f16bbdp29
++0x1.56b9b46a42022p12
++-0x1.89e4012cc6deap0
++-0x1.d6fb928514d12p1004
++-0x1.a136f5a490ae4p664
++0x1.36932245e98cbp26
++0x1.b1fb46c217a41p277
++0x1.7b54923209cb7p587
++0x1.caaf81b413ec0p608
++0x1.ab5a96a090df8p6
++-0x1.630330ace2d7cp41
++0x1.ee7e47e57812bp-4
++0x1.4351e41d03816p21
++-0x1.aafe0659a5c58p11
++0x1.2748836e9b331p41
++0x1.fe7b979d71d95p598
++-0x1.48c5920336400p-7
++-0x1.b223b4be25585p382
++0x1.a94e62298c7a1p45
++-0x1.5217e3915a0e8p11
++-0x1.2e65032ba771fp-9
++0x1.6a3d4382141ebp-6
++0x1.468a9481d74e4p169
++0x1.b3bf676408855p20
++0x1.ee41d72d85a88p23
++0x1.0f1525458e264p557
++0x1.a601a30301754p-22
++-0x1.71d595d59b86cp566
++-0x1.62e7f03cb1f31p12
++-0x1.73f5402ab4e19p-8
++-0x1.72c1f709ea5c2p13
++-0x1.3919a5ad625dcp-4
++0x1.fd017587ee830p310
++0x1.b7518131b5253p0
++-0x1.f348906bc1126p-6
++-0x1.fc7ac7285a79ap0
++-0x1.59f1d57e68057p17
++0x1.bdd572c2631e7p19
++0x1.bdf7f6ea49a0dp300
++-0x1.8c4877c037477p29
++-0x1.5da7b5197c995p15
++0x1.67de61ebfcad3p107
++-0x1.9096f72642477p323
++0x1.e5fc51f35ab90p15
++0x1.9f7bf6c845f55p0
++0x1.6a59935f352f0p23
++0x1.1f7b41c8d8513p20
++-0x1.86d8339a09175p637
++-0x1.3fa5c32fca635p6
++0x1.23faf483fef1ep-18
++-0x1.408f70d527f00p40
++-0x1.9440f7b969c8ap209
++-0x1.4e380016a4d6cp987
++0x1.a20616e878c04p1023
++0x1.2a9f54471780ap3
++0x1.75dbe2c1ec783p-23
++0x1.67c2221fc3804p23
++0x1.bcdeb6f3c5549p30
++-0x1.bb12215c52f92p779
++0x1.8ffeb3898d1c8p-19
++0x1.1fb8b50205437p2
++-0x1.5a4a653146e40p32
++-0x1.0c6b30ada1b09p23
++-0x1.8b5c231e30042p0
++0x1.1f16455d89ad8p882
++-0x1.513c3208d3047p6
++-0x1.cee964e33c448p30
++0x1.af44434d9c9c6p0
++-0x1.0276334fd570bp-15
++0x1.5dedf26999173p0
++-0x1.1b2e4780cd70fp417
++0x1.534237e205b0ap8
++-0x1.29c1563c96376p41
++0x1.8a3457a805380p776
++-0x1.47fc55d109066p332
++0x1.793aa09de6e04p1006
++-0x1.bf3fb2020504fp896
++-0x1.7366b3b52b79ap-3
++-0x1.b95a21c326d4fp754
++-0x1.8f992737bdb7dp526
++0x1.e0f1212c81cf0p21
++-0x1.5299f2819f9dep19
++0x1.ae0255b511d01p4
++0x1.8fc2a4bf7afe8p261
++-0x1.91f2f0444f31ap634
++-0x1.a8ad341b55868p7
++-0x1.b33f97a647507p4
++-0x1.ac58d36c99905p0
++0x1.717660662d7f4p618
++0x1.747371ab298bap14
++0x1.d500a4ff90ba3p9
++-0x1.c49132a3807d3p18
++0x1.775041f5adf79p40
++0x1.d196f39ecbbfdp-15
++-0x1.955a20c2e98a8p10
++-0x1.eb44149e132e3p20
++-0x1.91fc970666340p-10
++-0x1.8cbd518d4e97ap9
++0x1.446762982f5a5p30
++-0x1.243fd3db30072p7
++0x1.7f9b147083efep863
++0x1.02e06605707fcp11
++-0x1.f943c41c8d938p36
++-0x1.66297706f7c14p727
++-0x1.6b59c16db566cp26
++0x1.5d48f15c59f58p452
++-0x1.e8f5230318f79p-1
++0x1.31fad3c41d123p34
++-0x1.6757e2c0a08a7p11
++0x1.7f07e07a0a269p288
++# cos slow path at 768 bits
++# Implemented in sysdeps/ieee754/dbl-64/sincos32.c
++## name: 768bits
++0x1.000000cf4a2a2p0
++0x1.0000010b239a9p0
++0x1.00000162a932bp0
++0x1.000002d452a10p0
++0x1.000005bc7d86dp0
++0x1.47c453f752654p637
++0x1.b27df119d2861p78
++0x1.b073672e47988p835
++0x1.f2f5607cc76e1p157
++-0x1.3c7b45a1446e9p349
++0x1.544a364a05b26p228
++0x1.157fa0b2ffd20p164
++-0x1.f4ba7359080d6p172
++-0x1.7698941fce366p651
++-0x1.9875603af20dbp433
++-0x1.b00f872fa6260p918
++0x1.468e65e8e3656p661
++-0x1.6cbd47b10d74bp464
++-0x1.2c2c62a2f067ap197
++-0x1.8e3db452cbb07p810
++0x1.8446c34a2644cp277
++-0x1.b0f6f1b8db81ap179
++0x1.93b574629bf16p748
++0x1.b6b6e0a06cb05p344
++-0x1.7cbc2702fbd97p922
++-0x1.887a36760f072p336
++0x1.17b9c169b2efep714
++-0x1.e947b36ae0940p794
++-0x1.d70d15a2338b8p884
++0x1.0a98017bf55bep935
++-0x1.bc07c6c7cc03bp538
++-0x1.c42d477462280p949
++-0x1.9c6dc4908a248p536
++0x1.37a0d35e7fd14p74
++-0x1.9c9cf14390543p64
++0x1.7c0a43fe4ef89p409
++-0x1.cc1fa7c639575p65
++0x1.df36548f960eep769
++-0x1.d3f102775834fp176
++-0x1.0a6bf05ba56c4p713
++-0x1.4775c1ce2834ep903
++-0x1.7ade6237217c2p272
++-0x1.35ebc7dee67bep898
++0x1.26ded2ecd7486p728
++0x1.90c6535aa78d1p591
++-0x1.dd85c54160392p296
++-0x1.1ee7b2598c033p904
++0x1.28de547f9a6a7p156
++0x1.bb7ff11e74372p775
++0x1.bb4da1ff7cd43p113
++0x1.52f2e13f3ddcfp430
++0x1.7aa0c44aa3950p964
++0x1.33ffd1540eeaap899
++-0x1.a8c7f7947c6efp453
++-0x1.3a8f54a1dfe1cp193
++0x1.fedb8178dbabap386
++0x1.b53776fb33667p290
++-0x1.1dbc12b1b9e1ep632
++0x1.ed4db1eaa237cp454
++-0x1.e43334d044861p32
++0x1.db66f595e3e93p165
++0x1.6c6af169f717ap165
++0x1.d14cf2d2b8875p589
++-0x1.1661f59554000p419
++0x1.f76c50b4e5bd1p276
++-0x1.b00253e803df0p175
++-0x1.8ec0a6121e3b6p8
++0x1.5e1195ad8957fp899
++0x1.ec89e4f11ac8fp433
++-0x1.1d38a4ee578e9p339
++0x1.4377875dce8fdp326
++0x1.ee58a172d118cp745
++0x1.ff0232a89efd3p913
++-0x1.a6c9c19756962p883
++0x1.dbb6b6a957161p710
++0x1.12fd57b2e5ebbp83
++0x1.e9e364fad4bcbp329
++0x1.cbe8b375ad172p953
++-0x1.08a4b728fde64p598
++0x1.60f510ee233d5p828
++0x1.ba51673480a49p100
++-0x1.b04114708e216p378
++-0x1.9fd7b6bc2ce33p61
++0x1.c32ea014657c0p820
++0x1.1d3621e24b581p110
++-0x1.4139a7fc5b5dep135
++-0x1.2399c1ea2ea2fp729
++0x1.aa2a835f87dbcp650
++0x1.948dc5cd26e75p371
++-0x1.a5a520d06d146p940
++-0x1.191a55bfe7786p1013
++-0x1.a46e0156a6bf3p525
++-0x1.91fd2519f735bp372
++0x1.1a78a3d726d73p617
++0x1.428c901b2d569p906
++-0x1.9f415555f701bp238
++0x1.a7e133e2c9f01p315
++0x1.e565b67830fabp1009
++-0x1.9e88b6ff1a777p31
++0x1.8ec4d30c1daebp710
++-0x1.5c35d25455dabp540
++-0x1.5957f35326911p855
++0x1.5e8414f558911p832
++0x1.fadce712c669ap551
++-0x1.7b0554f4a1530p340
+diff -urN glibc-2.17-c758a686/benchtests/exp2-inputs glibc-2.17-c758a686/benchtests/exp2-inputs
+--- glibc-2.17-c758a686/benchtests/exp2-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/exp2-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,105 @@
++## args: double
++## ret: double
++## includes: math.h
++-0x1.8235e0aa4aab1p814
++0x1.0e1220dfad80dp1006
++-0x1.e6a710eed0706p919
++0x1.11def1bbe9bc3p-471
++0x1.05e9b1fc591d9p-1007
++0x1.a58906c628b46p984
++0x1.772627fce1208p-256
++-0x1.461c146b65f2cp-62
++-0x1.6cf046992fa9ep-876
++-0x1.eaca47d76382cp-413
++0x1.5056d0027ca2bp-634
++0x1.1be8235cf2515p-300
++0x1.f667e36bb79d2p913
++0x1.b9ae233039c9cp-721
++0x1.b70ec546dac57p589
++-0x1.3ef895a695202p-318
++-0x1.e73d755c17ecap-901
++-0x1.f0a09005d2fdcp-52
++0x1.77520292c8ea7p786
++0x1.e5c0a38dccd6fp-510
++-0x1.21dd1410a13fdp469
++-0x1.f1ea1752b167cp-855
++0x1.149395c6b1dfcp237
++-0x1.22cfe4ceb2a85p244
++0x1.061a75f02c856p-417
++-0x1.04aaf4e1a4962p-645
++-0x1.b962f2c49c11ap169
++0x1.6074818509343p-151
++-0x1.6b9946b997353p350
++-0x1.6b8631635d607p-328
++0x1.6893162dc2973p923
++-0x1.0a1c40492986dp-371
++-0x1.23ae72061594ap-113
++0x1.d73d84becb49dp-816
++0x1.545894ebc8944p-487
++-0x1.c006c29733c62p325
++-0x1.745dc305eeb06p-994
++0x1.6cdeb63076b54p420
++0x1.c8f137c690673p906
++-0x1.170ab5609f77cp205
++-0x1.0b11b685a3349p-46
++0x1.7f68672b92eb1p-622
++0x1.66d431dee4bfdp-333
++-0x1.e43304b22a96dp228
++0x1.58ac069095de9p-419
++-0x1.3fcaa6e1f1ac3p654
++-0x1.437ed00080554p-88
++0x1.717ad5a379c50p531
++0x1.9688d6a6dd841p127
++-0x1.189c3732f9ac8p505
++-0x1.8c5da688a249ep871
++0x1.808015df2809ep-647
++0x1.54ccb260c52f6p183
++0x1.ec1574f23f1b5p757
++-0x1.2de0222e50454p-176
++-0x1.dc5715d5ac4f3p-882
++0x1.6fa963199b1fbp389
++-0x1.0a143338c0ff3p149
++0x1.c278a3ec4071cp240
++0x1.7bdb071d7e6ffp-360
++-0x1.e9b7a0af460ddp-809
++0x1.d069e62cf695bp535
++0x1.0f7ba1b172a18p-887
++-0x1.96af5166829b7p399
++-0x1.8f70240823cdbp-65
++-0x1.fcd2d5a63a217p-971
++-0x1.089241ad467f2p-247
++-0x1.3fa3940d58aa8p1022
++-0x1.aff1c0aec4e7dp814
++-0x1.6bad319cfc3bcp-378
++0x1.9c8956c66ba36p-579
++-0x1.6d9393f52ee3fp411
++0x1.e529d23501328p926
++0x1.3ec71520af29cp690
++0x1.787576a795b83p194
++-0x1.ef38147d2dc40p107
++-0x1.22a125ccbb1b2p-308
++0x1.5f5c074be0351p-928
++-0x1.377ed64bec482p390
++-0x1.09eae6f62d4b8p-41
++0x1.9f3fd03635c92p-104
++0x1.cb7d07d13c9efp599
++0x1.49e8154de36a7p538
++-0x1.d68343fe573bfp-736
++-0x1.4beba6b79ba1ep-811
++0x1.927774a125013p221
++-0x1.e4a1e48c33931p-152
++-0x1.b8a3123361eb5p641
++-0x1.909ea08b262f3p960
++0x1.0d1b30600d5b0p822
++-0x1.392420cf4ce19p-690
++-0x1.f9e1f71c0f3a2p-349
++-0x1.75600638cbf0ep-527
++-0x1.788911851a5abp-193
++-0x1.2ab1045fa9103p-471
++-0x1.d9c7f1a19cefdp-44
++0x1.ef5a66b13a5f8p171
++0x1.261c24ba6cdfbp539
++0x1.641945dc01d29p-620
++0x1.5c190276797a1p935
++-0x1.ea76b6a8a9d4ap-656
++0x1.41a117e9931f0p-169
+diff -urN glibc-2.17-c758a686/benchtests/exp-inputs glibc-2.17-c758a686/benchtests/exp-inputs
+--- glibc-2.17-c758a686/benchtests/exp-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/exp-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,589 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.6200315ce81efp9
++0x1.0000000031579p0
++0x1.000000009b551p0
++0x1.000000067ace6p0
++0x1.6200315ad0fc0p9
++0x1.0000000000060p0
++0x1.00000004237a7p0
++0x1.6200315ad0fb2p9
++0x1.0000000054ac1p0
++0x1.6200315c98bcdp9
++0x1.0000000002d96p0
++0x1.0000000000038p256
++0x1.6200315ad0fafp9
++0x1.6200315d680ecp9
++0x1.0000000000042p0
++0x1.0000000000048p256
++0x1.6200315ad0fbcp9
++0x1.000000000000dp256
++0x1.000000000001ep256
++0x1.0000000000015p256
++0x1.0000000000018p-256
++0x1.000000000002ep0
++0x1.000000000004ep-256
++0x1.000000000001dp-256
++0x1.6200315ad0fb4p9
++0x1.00000002ca5f8p0
++0x1.0000000000017p256
++0x1.0000000000022p0
++0x1.0000000000059p256
++0x1.0000000000028p0
++0x1.6200315ad0fa7p9
++0x1.000000048059cp0
++0x1.0000000000023p256
++0x1.000000000003ap-256
++0x1.0000000000022p-256
++0x1.6200315f211bep9
++0x1.000000000002ep-256
++0x1.0000000000041p256
++0x1.0000000000042p-256
++0x1.6200315ad0fcfp9
++0x1.6200315ad0fd7p9
++0x1.000000004bd6fp0
++0x1.000000000000dp-256
++0x1.6200315ad0fb7p9
++0x1.000000000001fp0
++0x1.0000000000024p-256
++0x1.0000000000058p256
++0x1.6200315ad0fc5p9
++0x1.620030025fbe9p9
++0x1.000000000003dp-256
++0x1.000000000003fp-256
++0x1.0000000000009p256
++0x1.00000005c7304p0
++0x1.0000000000045p-256
++0x1.0000000000011p-256
++0x1.0000000000033p-256
++0x1.0000000000036p256
++0x1.0000000000059p-256
++0x1.0000000000001p-256
++0x1.0000000000052p-256
++0x1.000000045baafp0
++0x1.0000000000032p0
++0x1.00000004a5089p0
++0x1.00000005edb68p0
++0x1.6200315ad0fd1p9
++0x1.0000000080d5bp0
++0x1.0000000000038p0
++0x1.6200315ad0fdbp9
++0x1.000000000005fp256
++0x1.0000000291b1ep0
++0x1.6200315af4bedp9
++0x1.0000000000031p-256
++0x1.6200315aea99bp9
++0x1.00000005ab569p0
++0x1.6200315d47b24p9
++0x1.6200315ad0fd9p9
++0x1.000000000003bp256
++0x1.6200315d31eb9p9
++0x1.000000059a297p0
++0x1.0000000000011p256
++0x1.0000000000021p-256
++0x1.0000000000041p-256
++0x1.0000000000049p0
++0x1.00000006857afp0
++0x1.6200315ceb300p9
++0x1.000000000003bp-256
++0x1.6200315bcaec3p9
++0x1.0000000000018p256
++0x1.00000002f3b77p0
++0x1.6200315ad0fb5p9
++0x1.0000000000027p-256
++0x1.000000054447dp0
++0x1.6200315e84846p9
++0x1.0000000172fefp0
++0x1.00000001c8808p0
++0x1.0000000000003p256
++0x1.000000000003ep-256
++0x1.00000002ed36ep0
++0x1.000000000002ap0
++0x1.00000002ae08bp0
++0x1.000000000005dp-256
++0x1.0000000000063p256
++0x1.000000000003ep0
++0x1.0000000000037p256
++0x1.6200315ad0fb6p9
++0x1.000000000005ep0
++0x1.000000000002ap256
++0x1.0000000000056p256
++0x1.0000000266056p0
++0x1.6200315ad0fdap9
++0x1.000000000002dp0
++0x1.000000000004cp0
++0x1.6200315ad0fb8p9
++0x1.0000000000039p0
++0x1.000000000002ap-256
++0x1.6200315ad0fa5p9
++0x1.0000000000035p256
++0x1.000000000005ep256
++0x1.000000000004cp-256
++0x1.0000000000039p256
++0x1.000000055574fp0
++0x1.0000000000033p256
++0x1.6200315ad0fc2p9
++0x1.62003001fc398p9
++0x1.000000000004ap-256
++0x1.000000000001ap256
++0x1.000000005d813p0
++0x1.6200315ad0fe4p9
++0x1.0000000000030p-256
++0x1.0000000000020p-256
++0x1.0000000066565p0
++0x1.0000000000029p-256
++0x1.6200315ad0fc7p9
++0x1.000000049e880p0
++0x1.0000000609903p0
++0x1.00000005e309fp0
++0x1.0000000000013p256
++0x1.0000000000026p0
++0x1.000000000002dp-256
++0x1.6200315ad0fbdp9
++0x1.000000000000fp256
++0x1.00000001a9d52p0
++0x1.000000000002cp256
++0x1.0000000479d93p0
++0x1.0000000000016p256
++0x1.00000001d7d63p0
++0x1.6200315bd5b13p9
++0x1.00000001097e9p0
++0x1.0000000000030p0
++0x1.6200315d37392p9
++0x1.6200315ad0fe0p9
++0x1.6200315ba6119p9
++0x1.000000000003ep256
++0x1.00000000e87eap0
++0x1.0000000000002p256
++0x1.00000006501c2p0
++0x1.000000000004bp256
++0x1.620030022b98ap9
++0x1.000000000003fp0
++0x1.00000002d0e01p0
++0x1.00000001f6819p0
++0x1.0000000000020p256
++0x1.0000000000021p0
++0x1.000000000005cp256
++0x1.6200315ad0faep9
++0x1.6200315c61515p9
++0x1.0000000000008p256
++0x1.0000000000056p-256
++0x1.00000004f2923p0
++0x1.000000000001ep0
++0x1.0000000000028p256
++0x1.000000000004fp256
++0x1.000000000002cp-256
++0x1.0000000000025p0
++0x1.6200315e1215ap9
++0x1.6200315ad0fb3p9
++0x1.6200315e921dap9
++0x1.6200315ad0fd6p9
++0x1.0000000000049p256
++0x1.000000000004dp256
++0x1.0000000000042p256
++0x1.0000000000051p0
++0x1.6200315d83129p9
++0x1.0000000690278p0
++0x1.0000000000036p0
++0x1.0000000000026p256
++0x1.000000000005fp-256
++0x1.000000000000cp256
++0x1.0000000000007p256
++0x1.000000050a3fep0
++0x1.000000000001fp-256
++0x1.000000000002ep256
++0x1.000000000004ep256
++0x1.6200315f00e77p9
++0x1.6200315ad0fd2p9
++0x1.6200315d4ee5bp9
++0x1.00000004552a6p0
++0x1.6200315ad0fe3p9
++0x1.000000003a2cbp0
++0x1.6200315ad0fdfp9
++0x1.00000002b4894p0
++0x1.0000000000022p256
++0x1.000000023a58ep0
++0x1.6200315ad0fd8p9
++0x1.0000000000029p256
++0x1.6200315efe051p9
++0x1.0000000205d74p0
++0x1.0000000000045p256
++0x1.6200315ad0fb0p9
++0x1.6200315d77cc5p9
++0x1.000000065ac8bp0
++0x1.0000000000037p0
++0x1.6200315ad0fbfp9
++0x1.6200315dacc95p9
++0x1.000000000002fp-256
++0x1.000000000000ep256
++0x1.00000006bf05cp0
++0x1.0000000000051p256
++0x1.0000000000062p0
++0x1.0000000000031p256
++0x1.6200315be943dp9
++0x1.000000000005bp0
++0x1.0000000000045p0
++0x1.6200315e08505p9
++0x1.000000000001bp256
++0x1.0000000000005p256
++0x1.000000000005dp256
++0x1.6200315ad0fc9p9
++0x1.6200315e97676p9
++0x1.0000000000024p0
++0x1.0000000000003p-256
++0x1.6200315ad0fd4p9
++0x1.6200315ee2c3bp9
++0x1.0000000000020p0
++0x1.6200315ad0fdcp9
++0x1.0000000000053p-256
++0x1.000000000004bp-256
++0x1.6200315cafb6ep9
++0x1.000000000003ap256
++0x1.0000000000013p-256
++0x1.0000000000060p256
++0x1.6200315ad0fd3p9
++0x1.0000000000009p-256
++0x1.000000000005cp-256
++0x1.00000000acff5p0
++0x1.000000000004dp0
++0x1.0000000000050p256
++0x1.6200315e34fc6p9
++0x1.0000000000044p-256
++0x1.000000000002dp256
++0x1.0000000000062p256
++0x1.6200315bf4442p9
++0x1.6200315ad0fabp9
++0x1.000000000003cp0
++0x1.0000000000019p256
++0x1.000000000000cp-256
++0x1.000000000000bp-256
++0x1.0000000000063p0
++0x1.000000000003cp256
++0x1.0000000000061p-256
++0x1.6200315ad0fb1p9
++0x1.00000006456f9p0
++0x1.6200315ad0fb9p9
++0x1.6200315ad0fccp9
++0x1.6200315ad0fd5p9
++0x1.6200315ad0fd0p9
++0x1.0000000353687p0
++0x1.6200315ad0facp9
++0x1.000000000005bp256
++0x1.6200315e8bb51p9
++0x1.6200315d73094p9
++0x1.000000027bdbap0
++0x1.000000006f2b7p0
++0x1.0000000000057p0
++0x1.0000000298327p0
++0x1.000000019a7f7p0
++0x1.6200315b7b9ddp9
++0x1.000000041cf9ep0
++0x1.0000000000040p256
++0x1.0000000000059p0
++0x1.6200315ad0fe2p9
++0x1.0000000000056p0
++0x1.0000000000034p-256
++0x1.6200315cf49aep9
++0x1.0000000000017p-256
++0x1.000000000bae8p0
++0x1.6200315ad0fc1p9
++0x1.00000004c336dp0
++0x1.0000000000032p256
++0x1.6200315ae9fb5p9
++0x1.000000000004cp256
++0x1.0000000000057p-256
++0x1.0000000000035p-256
++0x1.6200315d4d455p9
++42
++0x1.6200315ad0fa8p9
++0x1.00000002502f2p0
++0x1.6200315ad0fa3p9
++0x1.000000000005dp0
++0x1.0000000000012p-256
++0x1.0000000000006p256
++0x1.0000000000028p-256
++0x1.0000000000044p256
++0x1.000000000004ap0
++0x1.00000000927ffp0
++0x1.0000000000044p0
++0x1.00000006f8909p0
++0x1.6200315ad0fc8p9
++0x1.0000000000061p0
++0x1.000000012a7e8p0
++0x1.000000000000fp-256
++0x1.6200315b6f0a0p9
++0x1.00000001b92adp0
++0x1.000000000005ep-256
++0x1.6200315d436fep9
++0x1.000000004301dp0
++0x1.0000000000023p0
++0x1.000000000005ap0
++0x1.6200315e7189ap9
++0x1.0000000000033p0
++0x1.6200315c19f20p9
++0x1.0000000000040p-256
++0x1.0000000000031p0
++0x1.0000000000027p0
++0x1.6200315d1dfeap9
++0x1.0000000588fc5p0
++0x1.000000015ad42p0
++0x1.6200300248616p9
++0x1.0000000000021p256
++0x1.6200315ad0fcap9
++0x1.6200315ad0fbbp9
++0x1.6200315ad0fbep9
++0x1.0000000000052p0
++0x1.0000000000016p-256
++0x1.0000000000005p-256
++0x1.0000000000046p256
++0x1.000000000003cp-256
++0x1.0000000000054p0
++0x1.000000034ce7ep0
++0x1.0000000000050p-256
++0x1.000000000002fp256
++0x1.6200315f2a44bp9
++0x1.6200315ad0fa2p9
++0x1.6200315f53addp9
++0x1.0000000000043p256
++0x1.000000000002bp0
++0x1.6200315b9a51fp9
++0x1.62003002148e6p9
++0x1.0000000000039p-256
++0x1.0000000000023p-256
++0x1.00000006d45eep0
++0x1.000000000002cp0
++0x1.0000000000055p256
++0x1.000000000000ap256
++0x1.0000000000010p-256
++0x1.0000000000047p-256
++0x1.000000000002fp0
++0x1.0000000000001p256
++0x1.000000040ff8cp0
++0x1.0000000121a96p0
++0x1.6200315c8b9bcp9
++0x1.000000000001cp-256
++0x1.0000000000063p-256
++0x1.0000000000006p-256
++0x1.000000000001ap-256
++0x1.6200300247b12p9
++0x1.0000000000046p0
++0x1.0000000000036p-256
++0x1.00000004bcb64p0
++0x1.0000000000032p-256
++0x1.0000000000057p256
++0x1.6200315e03518p9
++0x1.00000005331abp0
++0x1.000000000001ep-256
++0x1.6200315f76ad3p9
++0x1.000000000004dp-256
++0x1.000000000003bp0
++0x1.00000005b6032p0
++0x1.0000000000007p-256
++0x1.6200315ad0fc4p9
++0x1.0000000000051p-256
++0x1.000000000005cp0
++0x1.6200315ad0fc6p9
++0x1.0000000100a97p0
++0x1.0000000000040p0
++0x1.000000000004fp0
++0x1.000000000003dp0
++0x1.0000000000027p256
++0x1.0000000000000p-256
++0x1.6200315b10d8dp9
++0x1.0000000000060p-256
++0x1.6200315ad0fcdp9
++0x1.6200315ad0fa4p9
++0x1.6200315d07f8ep9
++0x1.000000000001bp-256
++0x1.0000000000041p0
++0x1.6200315ad0fe1p9
++0x1.0000000000053p0
++0x1.00000003168edp0
++0x1.0000000000000p256
++0x1.0000000000002p-256
++0x1.6200315bd4cecp9
++0x1.0000000000047p256
++0x1.6200315b2b8adp9
++0x1.000000000002bp256
++0x1.0000000000055p-256
++0x1.000000000004ap256
++0x1.00000006c9b25p0
++0x1.0000000000054p-256
++0x1.0000000000047p0
++0x1.6200315d8ee5dp9
++0x1.6200315b74b4cp9
++0x1.000000000005ap256
++0x1.0000000000043p-256
++0x1.0000000000055p0
++0x1.0000000000019p-256
++0x1.000000031d0f6p0
++0x1.00000006ede40p0
++0x1.00000002152cfp0
++0x1.6200315f61210p9
++0x1.6200315ad0fadp9
++0x1.000000044ea9dp0
++0x1.0000000000050p0
++0x1.0000000000024p256
++0x1.000000022b033p0
++0x1.0000000000043p0
++0x1.000000000001fp256
++0x1.0000000000034p0
++0x1.0000000000025p-256
++0x1.0000000000034p256
++0x1.000000000001dp0
++0x1.000000000005ap-256
++0x1.6200315ad0fddp9
++0x1.0000000577cf3p0
++0x1.000000051b6d0p0
++0x1.00000006143ccp0
++0x1.0000000000010p256
++0x1.000000061ee95p0
++0x1.6200315c3eed5p9
++0x1.00000000dfa98p0
++0x1.0000000000049p-256
++0x1.0000000000052p256
++0x1.0000000000053p256
++0x1.000000000005bp-256
++0x1.000000000000ep-256
++0x1.6200315e8ca3cp9
++0x1.6200315ad0faap9
++0x1.0000000142a95p0
++0x1.6200315ad0fcep9
++0x1.6200315ad0fcbp9
++0x1.6200315ef86c6p9
++0x1.0000000000026p-256
++0x1.6200315ed1587p9
++0x1.000000067021dp0
++0x1.00000001e72bep0
++0x1.6200315ad0fbap9
++0x1.00000000d6d46p0
++0x1.0000000000058p0
++0x1.00000000a42a3p0
++0x1.6200315b50c42p9
++0x1.6200315c4ee10p9
++0x1.0000000416795p0
++0x1.0000000000014p-256
++0x1.0000000000037p-256
++0x1.6200315ad0fa6p9
++0x1.0000000000004p-256
++0x1.0000000000054p256
++0x1.000000018254ap0
++0x1.6200315dc2365p9
++0x1.0000000000015p-256
++0x1.000000000004fp-256
++0x1.0000000665754p0
++0x1.0000000000046p-256
++0x1.6200315b2ba38p9
++0x1.000000000002bp-256
++0x1.6200315ba202ep9
++0x1.0000000000008p-256
++0x1.0000000359e90p0
++0x1.00000004dae48p0
++0x1.000000000001cp256
++0x1.0000000000062p-256
++0x1.0000000000048p0
++0x1.000000000003fp256
++0x1.6200315bcd48bp9
++0x1.6200315ad0fa9p9
++0x1.0000000000030p256
++0x1.6200315d64448p9
++0x1.0000000089aadp0
++0x1.6200315f0aa29p9
++0x1.00000005d1dcdp0
++0x1.6200315ad0fdep9
++0x1.0000000000061p256
++0x1.0000000000058p-256
++0x1.0000000000012p256
++0x1.000000000005fp0
++0x1.000000000003ap0
++0x1.000000000000bp256
++0x1.000000000004bp0
++0x1.0000000000038p-256
++0x1.0000000000029p0
++0x1.0000000000025p256
++0x1.000000000001dp256
++0x1.0000000000004p256
++0x1.6200315e2240ep9
++0x1.6200315ad0fc3p9
++0x1.6200315b2bbc3p9
++0x1.0000000000014p256
++0x1.0000000078009p0
++0x1.000000000003dp256
++0x1.6200315db488fp9
++0x1.000000000000ap-256
++0x1.000000000004ep0
++0x1.0000000000035p0
++0x1.0000000000048p-256
++# Slow path with computation in 144 bit precision.
++# Implemented in: sysdeps/ieee754/dbl-64/mpexp.c
++## name: 144bits
++0x1.0000000002d96p0
++0x1.000000000bae8p0
++0x1.0000000031579p0
++0x1.000000003a2cbp0
++0x1.000000004301dp0
++0x1.000000004bd6fp0
++0x1.0000000054ac1p0
++0x1.000000005d813p0
++0x1.00000005ab569p0
++0x1.00000005b6032p0
++0x1.00000005c7304p0
++0x1.00000005d1dcdp0
++0x1.00000005e309fp0
++0x1.00000005edb68p0
++0x1.0000000609903p0
++0x1.00000006143ccp0
++0x1.000000061ee95p0
++0x1.00000006456f9p0
++0x1.00000006501c2p0
++0x1.000000065ac8bp0
++0x1.0000000665754p0
++0x1.000000067021dp0
++0x1.000000067ace6p0
++0x1.00000006857afp0
++0x1.0000000690278p0
++0x1.00000006bf05cp0
++0x1.00000006c9b25p0
++0x1.00000006d45eep0
++0x1.00000006ede40p0
++0x1.00000006f8909p0
++0x1.62003000076d2p9
++0x1.6200300017e2cp9
++0x1.6200300023ffbp9
++0x1.620030002b135p9
++0x1.6200300030a8bp9
++0x1.620030003123fp9
++0x1.62003000652b3p9
++0x1.620030007bf4ap9
++0x1.6200300081a79p9
++0x1.6200300090289p9
++0x1.620030009dcbbp9
++0x1.62003000c07cep9
++0x1.62003000ee5dbp9
++0x1.62003000fa646p9
++0x1.62003000fe2cap9
++0x1.6200300125996p9
++0x1.6200300130865p9
++0x1.6200300133673p9
++0x1.6200300136fdfp9
++0x1.6200300150360p9
++0x1.620030016c416p9
++0x1.6200315ee2c3bp9
++0x1.6200315ef86c6p9
++0x1.6200315efe051p9
++0x1.6200315f00e77p9
++0x1.6200315f0aa29p9
++0x1.6200315f211bep9
++0x1.6200315f2a44bp9
++0x1.6200315f53addp9
++0x1.6200315f61210p9
++0x1.6200315f76ad3p9
++# Slowest path with computation in 768 bit precision.
++# Implemented in: sysdeps/ieee754/dbl-64/mpexp.c
++## name: 768bits
++708.00096423260981737257679924368858
++0x1.00000027f5496p0
++0x1.0000015853da7p0
++0x1.0000098e5e007p0
++0x1.0000099a1ac59p0
+diff -urN glibc-2.17-c758a686/benchtests/ffs-inputs glibc-2.17-c758a686/benchtests/ffs-inputs
+--- glibc-2.17-c758a686/benchtests/ffs-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/ffs-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,103 @@
++## args: int
++## ret: int
++## includes: strings.h
++0x33ed4
++0x2b
++0xba3f6965
++0x4
++0x927e0ceb
++0x7
++0x0
++0x3418b
++0x318c
++0x19a7402
++0x699d4586
++0x392e4
++0x66
++0x7fc86
++0x13d
++0x2aa7a61
++0x29d
++0x1d729b2
++0x13a
++0x7
++0x11b958
++0x3a6a23
++0x1b0d749
++0x1f12ecb
++0x21
++0x285a
++0x24702
++0x88799
++0x10b
++0x5
++0x572739
++0x12f0
++0xa36c89
++0x1
++0x1f58
++0x33743ce8
++0xbefe
++0x7
++0x3
++0xdc
++0x1713e
++0x8d28
++0xbb0ef6d
++0x3c7
++0x2
++0xd0e53fcc
++0x2e2
++0x762
++0xf
++0x35
++0x2fc6e7a
++0x105
++0x58e3
++0x3
++0x16aa
++0x7b1b38
++0x0
++0x2b
++0x99538d
++0xb3234
++0x322
++0x806bd
++0xd73
++0x503a
++0x7d
++0xb88bb919
++0x4f5
++0x1f757c4f
++0xc37e5
++0xd9e519
++0xf0a
++0xe9f1e8d
++0x4664
++0x4
++0x1
++0x1
++0x0
++0x1ee25
++0x75a24
++0x73c57b0
++0x300e9
++0x9
++0x5b
++0x6d25
++0x38bf436e
++0xf4724994
++0x2b
++0xb8a5de
++0x4a
++0x281da
++0x905db8
++0x3d606
++0x6c200855
++0x21
++0x354e0dfa
++0x2
++0x1
++0xf8297c3
++0x2fed30
++0xd4ab7
+diff -urN glibc-2.17-c758a686/benchtests/ffsll-inputs glibc-2.17-c758a686/benchtests/ffsll-inputs
+--- glibc-2.17-c758a686/benchtests/ffsll-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/ffsll-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,103 @@
++## args: long long
++## ret: int
++## includes: string.h
++0xedada05aba9463
++0x7c4e52bbc75241
++0x16ab7ad
++0x20ec623a4ccdb
++0x1e24e9ed059d
++0x3acf
++0x6eb28fbb803a274
++0xc1
++0x25fc2148c092529f
++0x1d10ba752e5
++0x322bd878b3
++0x26fa11b70e20
++0x30cd6a05a17ca14b
++0x1591d3a2d0cc7
++0x8119d76e910c1a
++0x2b24d878fee314
++0x1c
++0x3022a3955
++0xedc7b7b6a818
++0x40
++0xf28
++0xa2ecb
++0x56a7e4211a2ca38
++0x6a0ee2316382
++0x634
++0x58
++0x4fad66fb43f5
++0x1f004b76
++0x7
++0x6ff84575bb70af
++0x5d5b4e
++0xaa614b130
++0x15504
++0x1a2e2e7e
++0x54b0f28b383cc
++0x6
++0x2a2a3440b7
++0x158a132dc0c20836
++0x77aa8e9c91c43b1
++0x33f526901fc08594
++0x7bf156c
++0xb458b5e
++0x6289fcb44
++0x4d84973bbd8c00
++0x2e8c2de648
++0x150fab
++0x16ebb7bae02934
++0x485285b6065272
++0xfdde0b16299
++0x747d3c940cb
++0x1bdb379
++0xfcb26a
++0x20b90cc92bbef
++0x46
++0xf0e681aaec28b2d5
++0x10c738cf1109
++0x8509bef69993908
++0x3332
++0x219167d
++0x7eb19c6f88f
++0x32a1b4ead441e65
++0xdc93
++0x327a7e6676802312
++0xcc7296c957
++0xb0b20c47c6b500a
++0x55d614072f1
++0x3c8e4
++0x1a
++0x5809b7ae
++0x2
++0x1525
++0x13
++0x6e
++0x1b
++0x7c58cf
++0x2f5347197bcf6
++0x516a0d576e2c3
++0x4f3cf315
++0x3c16a7531f3a1
++0xa929f8
++0x1ce88e5
++0x6ab464e92bc3
++0x3ff39bb2
++0xea9921
++0xb3009
++0x39b037793bef0da0
++0x5d
++0x39a9989019c92
++0x108bae
++0x239c1c
++0x1851dc9178f4
++0x1fc6f70
++0x38
++0xa8f606a147
++0x30dac66b
++0x76d377c20b0e836
++0x2425
++0x4e5a82884
++0x7a1f128a894728
++0xb5f0af24e3f7347
+diff -urN glibc-2.17-c758a686/benchtests/json-lib.c glibc-2.17-c758a686/benchtests/json-lib.c
+--- glibc-2.17-c758a686/benchtests/json-lib.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/json-lib.c	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,178 @@
++/* Simple library for printing JSON data.
++   Copyright (C) 2014 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 <string.h>
++
++#include "json-lib.h"
++
++void
++json_init (json_ctx_t *ctx, unsigned int indent_level, FILE *fp)
++{
++  ctx->indent_level = indent_level;
++  ctx->fp = fp;
++  ctx->first_element = true;
++}
++
++static void
++do_indent (json_ctx_t *ctx)
++{
++  char indent_buf[ctx->indent_level + 1];
++
++  memset (indent_buf, ' ', ctx->indent_level + 1);
++  indent_buf[ctx->indent_level] = '\0';
++
++  fputs (indent_buf, ctx->fp);
++}
++
++void
++json_document_begin (json_ctx_t *ctx)
++{
++  do_indent (ctx);
++
++  fputs ("{\n", ctx->fp);
++
++  ctx->indent_level++;
++  ctx->first_element = true;
++}
++
++void
++json_document_end (json_ctx_t *ctx)
++{
++  ctx->indent_level--;
++
++  do_indent (ctx);
++
++  fputs ("\n}", ctx->fp);
++}
++
++void
++json_attr_object_begin (json_ctx_t *ctx, const char *name)
++{
++  if (!ctx->first_element)
++    fprintf (ctx->fp, ",\n");
++
++  do_indent (ctx);
++
++  fprintf (ctx->fp, "\"%s\": {\n", name);
++
++  ctx->indent_level++;
++  ctx->first_element = true;
++}
++
++void
++json_attr_object_end (json_ctx_t *ctx)
++{
++  ctx->indent_level--;
++  ctx->first_element = false;
++
++  fputs ("\n", ctx->fp);
++
++  do_indent (ctx);
++
++  fputs ("}", ctx->fp);
++}
++
++void
++json_attr_string (json_ctx_t *ctx, const char *name, const char *s)
++{
++  if (!ctx->first_element)
++    fprintf (ctx->fp, ",\n");
++  else
++    ctx->first_element = false;
++
++  do_indent (ctx);
++
++  fprintf (ctx->fp, "\"%s\": \"%s\"", name, s);
++}
++
++void
++json_attr_double (json_ctx_t *ctx, const char *name, double d)
++{
++  if (!ctx->first_element)
++    fprintf (ctx->fp, ",\n");
++  else
++    ctx->first_element = false;
++
++  do_indent (ctx);
++
++  fprintf (ctx->fp, "\"%s\": %g", name, d);
++}
++
++void
++json_array_begin (json_ctx_t *ctx, const char *name)
++{
++  if (!ctx->first_element)
++    fprintf (ctx->fp, ",\n");
++
++  do_indent (ctx);
++
++  fprintf (ctx->fp, "\"%s\": [", name);
++
++  ctx->indent_level++;
++  ctx->first_element = true;
++}
++
++void
++json_array_end (json_ctx_t *ctx)
++{
++  ctx->indent_level--;
++  ctx->first_element = false;
++
++  fputs ("]", ctx->fp);
++}
++
++void
++json_element_double (json_ctx_t *ctx, double d)
++{
++  if (!ctx->first_element)
++    fprintf (ctx->fp, ", %g", d);
++  else
++    {
++      fprintf (ctx->fp, "%g", d);
++      ctx->first_element = false;
++    }
++}
++
++void
++json_element_object_begin (json_ctx_t *ctx)
++{
++  if (!ctx->first_element)
++    fprintf (ctx->fp, ",");
++
++  fputs ("\n", ctx->fp);
++
++  do_indent (ctx);
++
++  fputs ("{\n", ctx->fp);
++
++  ctx->indent_level++;
++  ctx->first_element = true;
++}
++
++void
++json_element_object_end (json_ctx_t *ctx)
++{
++  ctx->indent_level--;
++  ctx->first_element = false;
++
++  fputs ("\n", ctx->fp);
++
++  do_indent (ctx);
++
++  fputs ("}", ctx->fp);
++}
+diff -urN glibc-2.17-c758a686/benchtests/json-lib.h glibc-2.17-c758a686/benchtests/json-lib.h
+--- glibc-2.17-c758a686/benchtests/json-lib.h	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/json-lib.h	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,47 @@
++/* Simple library for printing JSON data.
++   Copyright (C) 2014 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 __JSON_LIB_H__
++#define __JSON_LIB_H__
++
++#include <stdbool.h>
++#include <stdio.h>
++
++struct json_ctx
++{
++  FILE *fp;
++  unsigned int indent_level;
++  bool first_element;
++};
++
++typedef struct json_ctx json_ctx_t;
++
++void json_init (json_ctx_t *ctx, unsigned int indent_level, FILE *fp);
++void json_document_begin (json_ctx_t *ctx);
++void json_document_end (json_ctx_t *ctx);
++void json_attr_object_begin (json_ctx_t *ctx, const char *name);
++void json_attr_object_end (json_ctx_t *ctx);
++void json_attr_string (json_ctx_t *ctx, const char *name, const char *s);
++void json_attr_double (json_ctx_t *ctx, const char *name, double d);
++void json_array_begin (json_ctx_t *ctx, const char *name);
++void json_array_end (json_ctx_t *ctx);
++void json_element_double (json_ctx_t *ctx, double d);
++void json_element_object_begin (json_ctx_t *ctx);
++void json_element_object_end (json_ctx_t *ctx);
++
++#endif
+diff -urN glibc-2.17-c758a686/benchtests/log2-inputs glibc-2.17-c758a686/benchtests/log2-inputs
+--- glibc-2.17-c758a686/benchtests/log2-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/log2-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,203 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.fe80b73f2f763p-485
++0x1.63fbf19a1a79ap-572
++0x1.63fb4717f36abp-594
++0x1.6a75240c62b59p-162
++0x1.43ad207275c97p-830
++0x1.1c24c26efbca5p-673
++0x1.c37f23c54205ap655
++0x1.fdc0e348d5bbbp722
++0x1.0e2e51e9645a9p503
++0x1.3291a6e483d75p-941
++0x1.6b4f9118d9ddfp329
++0x1.618e84faa68d1p-696
++0x1.7f8a7417686dbp577
++0x1.3fc6a169fc1a2p662
++0x1.6631142da8476p-11
++0x1.67cc768721f6ep159
++0x1.7439b48fb7f01p-744
++0x1.17cad4e754e3fp-833
++0x1.6ca873e653646p35
++0x1.6283941b425d9p-322
++0x1.38de764542fc9p-939
++0x1.6a5706bcca88ep318
++0x1.8b9e71efccf99p-671
++0x1.61d7a07ca117fp-246
++0x1.66707402ed87fp468
++0x1.650ff2faef0c4p-185
++0x1.6afe3332695d8p-382
++0x1.5c05817f1aec0p861
++0x1.61bb62e0a68cdp625
++0x1.678e93ded24cep-614
++0x1.d2b6e60469afdp-753
++0x1.abb9a6eed73b2p-731
++0x1.21a4014034f31p-718
++0x1.bdbe3237b3785p779
++0x1.0f115229b9a52p-437
++0x1.6154e26a722b2p388
++0x1.64e982a82df60p346
++0x1.61bdc663af57bp799
++0x1.091f7362aa8bfp-871
++0x1.e35153cac25b3p873
++0x1.6402b62fbebf7p-329
++0x1.680d413ef3777p775
++0x1.8620d183bd0a7p-670
++0x1.e0e017206206ep-129
++0x1.66d9419f2852cp-526
++0x1.5a07e14aa7e55p-888
++0x1.b91ed57fdd3f2p1017
++0x1.7c58838087ef5p519
++0x1.2d0676720fb21p-145
++0x1.64bcd3d675a60p-390
++0x1.6204f6b121d0dp255
++0x1.6af30218cdccfp-955
++0x1.dcf3f2c2809e1p-821
++0x1.6269366dd0672p436
++0x1.dd117726eefe5p93
++0x1.65de442c50bedp-28
++0x1.10c8b6ab1a5f0p-313
++0x1.6855f7474d2eep828
++0x1.6659b0863e8d0p-545
++0x1.7a80b6736105cp-566
++0x1.3ff7a01b0590cp560
++0x1.6559f386d6ca3p-696
++0x1.68e96369693cep812
++0x1.8d29a4b500b0dp537
++0x1.65b347d411765p826
++0x1.669080c6f3a8bp-121
++0x1.faabb750c7baep548
++0x1.670f72a6f1cd1p834
++0x1.6b75063adb10dp396
++0x1.f030420faed63p-788
++0x1.a20214aeefbe0p186
++0x1.8b3af704f3526p449
++0x1.6663a7e181023p-643
++0x1.e1f6d671b95f6p978
++0x1.6aea24ab9c956p84
++0x1.6318c0bc48f9bp-996
++0x1.6603e22b2d2d1p-257
++0x1.6b59906a87ddfp-896
++0x1.665307aea1415p-153
++0x1.6d9be19aca354p-887
++0x1.640977cfbd7dep-564
++0x1.1c6de3bf6f82ep909
++0x1.24c452230e994p705
++0x1.6b2c473cd0623p-626
++0x1.beab17bff5e9ap-708
++0x1.680445b6d430bp465
++0x1.454de219171f0p158
++0x1.6818a49dfb38dp20
++0x1.15cb95403d2a4p622
++0x1.1338a5210da9ap-78
++0x1.651fc5045320ep-861
++0x1.657ed41aace5bp-2
++0x1.ff563189469ffp-44
++0x1.62c811ba1d5e4p1
++0x1.61f23108289f9p-422
++0x1.168066765d078p875
++0x1.a671a61b114a2p124
++0x1.4471a372f703ep252
++0x1.623ae599ffa3fp98
++0x1.531085de4958bp441
++0x1.4d6172de45534p-911
++0x1.e5dcc2b3d23acp-437
++0x1.67cac1dccdfcdp985
++0x1.0ac1a5608baf9p-896
++0x1.654cd778b1e36p837
++0x1.929004c882902p-552
++0x1.594a8c88348b0p-970
++0x1.dc7f4509ddfd6p-832
++0x1.d49846a313b79p998
++0x1.6314b3a5ac85bp1018
++0x1.d1d1325f66b7ep-763
++0x1.6592a24f64047p403
++0x1.bd47a2a1cc99fp-486
++0x1.644266dda9ad2p778
++0x1.6b2e821002783p26
++0x1.69936648ba64ap-143
++0x1.61d2a2a99f470p-970
++0x1.6599c252868bap-840
++0x1.3590b2e6af870p56
++0x1.6b8311b9abc91p-961
++0x1.29d1a705c6a3bp-660
++0x1.6815d5d44778ap945
++0x1.6ae36036fcee1p153
++0x1.2034b640f0f4ap-3
++0x1.84fec67d11992p85
++0x1.1fa1a74c0af59p-478
++0x1.64de9092a8789p-784
++0x1.701bf3e5b0120p243
++0x1.63ac048ca107bp-666
++0x1.0095c464cfc5ap58
++0x1.5f2d0041e5db2p362
++0x1.62fa34a5c1bcap-412
++0x1.cacf042abda4fp-54
++0x1.647a95ef487b3p224
++0x1.f8c2353681cbep905
++0x1.67bfe67714076p366
++0x1.6779865baf78fp-291
++0x1.9395b1beca360p361
++0x1.6521449e5ffe2p-671
++0x1.667567cd5db59p-293
++0x1.511df0b72a30bp30
++0x1.65f8251162417p642
++0x1.d0a0825ffb10cp210
++0x1.63f2f5ba5415ap-716
++0x1.65681206c6030p-580
++0x1.5254d49bacf90p-849
++0x1.49dd92d7cf7fep-208
++0x1.688f565603c25p473
++0x1.6439333b5f705p-589
++0x1.663922acbdbb0p208
++0x1.5a2631eb8325cp490
++0x1.6171d410fcbbfp683
++0x1.6ae4d6f8f091ep511
++0x1.ae8ff53250e31p-1012
++0x1.f182e535fab45p-332
++0x1.653f84e9e8c3fp-34
++0x1.99a737ac5cdadp328
++0x1.301bb0b8607cbp232
++0x1.706fa3fcd1d85p337
++0x1.b650863c8ead0p227
++0x1.64b9045b2d59dp740
++0x1.681c66eda34d4p-113
++0x1.f881050ae3a0cp-51
++0x1.08bb778ebc5b6p-28
++0x1.815fe4e6e4b72p100
++0x1.691b6172a5798p-576
++0x1.684f74d76367cp1010
++0x1.64d044c4779d2p-207
++0x1.690c021b1ae97p454
++0x1.9d0ec359f67d5p77
++0x1.43686724be426p774
++0x1.678821f848886p-43
++0x1.17abd1fcb3d3bp532
++0x1.616ee4093684fp-43
++0x1.631ec6e8ef9a7p264
++0x1.63aa97d7de121p795
++0x1.b172e7750d144p841
++0x1.6836107e18e77p-826
++0x1.65957572dedc3p-339
++0x1.66b8d2cad9382p301
++0x1.c8f410709f858p-761
++0x1.6a2093c2b009dp-1013
++0x1.b97a45fb7dad5p660
++0x1.8150734f7fc95p40
++0x1.6ab8a053c9089p-246
++0x1.6b81e74a6293ep-813
++0x1.251a74cf150acp779
++0x1.44cf3370a55eap703
++0x1.32e2e35cc77f3p-4
++0x1.c0c6049562d13p-997
++0x1.a050f54285fb8p-397
++0x1.68ada319f3033p748
++0x1.b2f37264e0acbp753
++0x1.617614c5ecea7p137
++0x1.b01c803ac06b1p559
++0x1.4a19f60ad4238p-223
++0x1.6314648785495p-40
++0x1.6936664ef255fp943
++0x1.6208f15a6484fp464
++0x1.6b1244514989ep-886
+diff -urN glibc-2.17-c758a686/benchtests/log-inputs glibc-2.17-c758a686/benchtests/log-inputs
+--- glibc-2.17-c758a686/benchtests/log-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/log-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,295 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.0c5e3365a2d95p0
++0x1.037414ff63ab9p0
++0x1.fc9366fa4c3a0p-1
++0x1.f710159a37ab9p-1
++0x1.5576e114e4f7cp-961
++0x1.9d3382c6679b7p-1
++0x1.f9e37774c7510p-1
++0x1.058622e63af9dp0
++0x1.fa62a3b5d47b5p-1
++0x1.01fb737f14c41p250
++0x1.fc7952a4bde83p-1
++0x1.b68a54ad54fb4p-320
++0x1.b8978216476a5p837
++0x1.345bf2c9c6238p-638
++0x1.580da4a80849ap197
++0x1.fb0f43269facap-1
++0x1.065f47ccd6b6cp0
++0x1.db1317a87c872p-928
++0x1.f563a1330ee1bp-1
++0x1.8352661de852dp-1
++0x1.887750a7ad5d0p315
++0x1.385ed12583117p674
++0x1.ff610285e1e46p-1
++0x1.02e063a2777f0p-254
++0x1.6b0f9482349a9p-489
++0x1.f0413135a3a88p430
++0x1.1ec910ecf9419p2
++0x1.caab24b23bfdap-1
++0x1.42d83712a1fabp-995
++0x1.01d4b06dc2ce1p-2
++0x1.c10a94cb4f93dp2
++0x1.071a5441b3cabp0
++0x1.04e8940083142p504
++0x1.5083603bf110cp-660
++0x1.f5312171625f3p-1
++0x1.f15370065e66dp-1
++0x1.f4de71c3efa90p-1
++0x1.072a679084c2ep0
++0x1.f89d125e68705p-1
++0x1.31a5450e17b4fp10
++0x1.036d1462f82d5p-1
++0x1.54f131208767bp0
++0x1.016fc65a58dd9p0
++0x1.24b2c009625bfp-512
++0x1.2898b1cc9ddc8p-1
++0x1.0270851f17bb1p-241
++0x1.eb1f03c6aa4d3p38
++0x1.d29a93f1faf4fp964
++0x1.d31de19a4e829p140
++0x1.f8d260eeb5cefp-1
++0x1.f259a4bc8f770p-1
++0x1.8b9016448c4ccp-105
++0x1.240f40168110bp-253
++0x1.06fb26943be9bp0
++0x1.9bae861967209p87
++0x1.51fcc64d69563p-48
++0x1.f4ff2413b004bp-1
++0x1.387d65055d963p4
++0x1.1c5705c916859p929
++0x1.073be54be8356p0
++0x1.544871c917766p-1
++0x1.398536e090d37p-79
++0x1.f34707ce261e5p-1
++0x1.2e5792109f59bp593
++0x1.075bd0ce07ef0p0
++0x1.0ef545b2e5627p0
++0x1.b2aa170bed688p-919
++0x1.e341461098908p984
++0x1.eacd43dea8eb2p-1
++0x1.18c2a0ab6598bp265
++0x1.219df5338fbc1p482
++0x1.a9a0d4ceb201dp2
++0x1.c0a6467baf54dp-23
++0x1.0b499489342c1p361
++0x1.f7c1f18cae6f4p-42
++0x1.d8dea4350fb7fp627
++0x1.0541421affe22p0
++0x1.574bd3c94bdc9p-528
++0x1.9aa814150ab62p-1
++0x1.cab9532515b30p10
++0x1.01e446e6b365ep0
++0x1.04ef17a8014c7p0
++0x1.fd91b3dc4e166p-98
++0x1.9e879318176aap-448
++0x1.605e9760da702p457
++0x1.3e1d3541f8a73p131
++0x1.ce2a303076cbap-9
++0x1.f72021eaea3b7p-547
++0x1.3384548e90a6dp222
++0x1.0215143216bbap0
++0x1.f546109b8e222p-1
++0x1.b828c4971379dp779
++0x1.0465440f18b39p0
++0x1.00a302042eb49p0
++0x1.9914e6bc2d08dp-637
++0x1.aa8176fc83146p3
++0x1.0dc041c8c9084p788
++0x1.c17f14032741cp157
++0x1.f8c3355f2c74fp-1
++0x1.c0c373cb8d3abp-568
++0x1.ffb897f081c1cp-1
++0x1.7da4d5c6ecca5p666
++0x1.1f8dd20fc3029p-196
++0x1.f39d30de8b00cp-1
++0x1.5710417d88db0p526
++0x1.f552e4572e2e0p-1
++0x1.ce97f507ac81ep-196
++0x1.fe0b407a35cf9p-1
++0x1.ffba3091bc8d9p-1
++0x1.f79207f982a95p907
++0x1.f3bc85de399b1p-1
++0x1.f6a9075959280p-1
++0x1.9971a0d49cffcp0
++0x1.fdd4d11db35dcp-1
++0x1.9f453762d3790p-708
++0x1.d1122424ad397p717
++0x1.fd71a20e66628p-1
++0x1.007c20fefd661p0
++0x1.0137d702a29bdp0
++0x1.93e9047c983bfp-16
++0x1.10cdf415042b5p0
++0x1.fe6d8639abca0p-1
++0x1.f7278572f6b66p-1
++0x1.0673e76436ebcp550
++0x1.f34833c8c70bcp-1
++0x1.1b530128cc02dp8
++0x1.ae48a5851e7a3p-236
++0x1.98bdb6dff9d19p74
++0x1.fbfd85f14418ep-1
++0x1.070dd2780fcdap22
++0x1.07a8f5726ae12p0
++0x1.9a2ac2db753f8p-892
++0x1.1461250716450p57
++0x1.3b5be316bc364p-3
++0x1.a2143693816d1p862
++0x1.9418a18831f94p-502
++0x1.ea8306738954cp993
++0x1.fff14533df4f3p-1
++0x1.0693706ddc70cp1
++0x1.59e3947bce39dp-4
++0x1.fa64a24c3030ap-1
++0x1.044ce02e484e6p0
++0x1.a272b5bdc397ep327
++0x1.1c4577fcbe052p4
++0x1.00ede267fbd99p0
++0x1.028e26e56b7dfp0
++0x1.005cf758f0dd7p635
++0x1.bca6110bd6b05p46
++0x1.11e7148e3f7e4p137
++0x1.616e31d9c78afp898
++0x1.f2eff0abf8fa1p-1
++0x1.fd2275eabbc55p-1
++0x1.e8f5a410e1a82p-1
++0x1.7124e6de4fec6p342
++0x1.95b03344f67d4p74
++0x1.fb46137fbdd00p-1
++0x1.78f9961f0c11bp936
++0x1.2d3230575fa1dp-23
++0x1.5cd631b404c9dp564
++0x1.6a7645d7bc818p-901
++0x1.1daca63403190p-160
++0x1.64b4929d7185dp7
++0x1.f95a819a0c75ep-1
++0x1.fa2a9599f61c2p-1
++0x1.f68b82c96e845p-1
++0x1.b5c634c9a19f0p-551
++0x1.706c63689c814p917
++0x1.fa1134f93ff1bp0
++0x1.b8e642ca65132p12
++0x1.fdb645fc3558fp-1
++0x1.9909b15771ca6p2
++0x1.f4f6132242443p-1
++0x1.c02b65da31a5cp-9
++0x1.8b40c0afd5a42p679
++0x1.1d9f80f2849ebp1015
++0x1.3426c343358d6p608
++0x1.f634874d073bep-1
++0x1.016ab0aff9b7dp0
++0x1.f1f34486c65e2p-1
++0x1.022e8230e4320p0
++0x1.fbe0104a4b316p-1
++0x1.55323737c4d7bp-69
++0x1.fa3d13e0efecep-1
++0x1.2a7e11b35214bp281
++0x1.9a2c33af22120p-1
++0x1.986983a9d6f51p-1
++0x1.f2f723416775fp-1
++0x1.5d8565304a570p2
++0x1.f3999057087ebp-1
++0x1.fff027a147cc4p-1
++0x1.f369333fdcaa7p-1
++0x1.15ee471de5adcp-537
++0x1.faa9f49088862p-1
++0x1.0138239c244bcp0
++0x1.8c28955e4efb3p-1
++0x1.c3db66d450094p-916
++0x1.dc4b70539f21cp-390
++0x1.f7a363909f425p501
++0x1.fb86b76e851a5p-1
++0x1.010290232f8fcp-97
++0x1.650a4595be763p510
++0x1.fbd7a36081ccdp-1
++0x1.073f0084dc154p0
++0x1.fb7951f83410dp868
++0x1.0404d08738d62p0
++0x1.f1d895b2a5fdap-1
++0x1.55472046b4703p351
++0x1.f63882efa2ec0p-1
++0x1.f367c590b00e1p-1
++0x1.5251b7177fe50p501
++0x1.49f2a03e6057ap-140
++0x1.d5a68682d9946p-1
++0x1.fcdd65a9229b0p-1
++0x1.98bea1a0d0fbep681
++0x1.260d06b5edc4bp-336
++0x1.f5d520240b30ap-1
++0x1.f8715777db2f7p-1
++0x1.b3b0b64c86e27p-1
++0x1.ae637316fa604p2
++0x1.79919761b73adp43
++0x1.bd55c268d4f40p-1
++0x1.c81103f744ee1p4
++0x1.deeeb24db6f46p-1
++0x1.1056a7ba848e4p566
++0x1.b167817c24607p-513
++0x1.95d245973230bp798
++0x1.04d551a6da2dcp-921
++0x1.df2572264569fp92
++0x1.fb105105409c1p-1
++0x1.277ce2d7a1945p20
++0x1.fc93d4234f18bp-1
++0x1.be9f65acd2fa6p-911
++0x1.0548c4cb78cd1p400
++0x1.794c300f69a14p688
++0x1.7dda15569e759p731
++0x1.fdc9d6a00fb8ep-1
++0x1.faae623a143f1p-1
++0x1.8128373a5b95ep-608
++0x1.c2e13445f6ca7p316
++0x1.01d3a3dd89524p0
++0x1.aee2578e3f114p-1
++0x1.863ff7799e878p-266
++0x1.ea8897550748bp-262
++0x1.0652f24fd5820p0
++0x1.56114467afa90p1
++0x1.01b4561c918a5p0
++0x1.21cd64b06baebp339
++0x1.3d6384a8fd1b3p-35
++0x1.01af659ea1389p0
++0x1.fa8ed0ab15042p-724
++0x1.47c1f4babad96p785
++0x1.fc47829fd7bdfp-1
++0x1.f3d2241382331p-1
++0x1.0a0897e048564p0
++0x1.957ab3f18f8e3p-446
++0x1.5aad466994dacp506
++0x1.fba8a2b4ab119p-1
++0x1.003c906ab1a79p0
++0x1.7039f057a155fp-678
++0x1.f85964e37aae8p-1
++0x1.53e2e0469deecp-711
++0x1.f0cb530a2bf7dp658
++0x1.af8d471733d1dp-1022
++0x1.a684e3b3af12dp-239
++0x1.fd26d7fa466b5p1
++0x1.ebd3605467082p163
++0x1.e29567ed6afecp-11
++0x1.073757004a5a1p0
++0x1.022334168530bp0
++0x1.d4a6e162f4ceap575
++0x1.00dbb330a556fp0
++0x1.276b872c49045p0
++0x1.51e835ab51aafp-7
++0x1.e3c106b648377p-184
++0x1.5a46f2460d290p-46
++0x1.199a05d85e80dp-258
++0x1.cde614a60f60ap-1
++0x1.50f3a79e68493p-152
++0x1.2c9af562aa58dp0
++0x1.f695411839d24p-1
++0x1.e53e5125bcdffp413
++0x1.03e4c3218f178p0
++0x1.d66213dc2e585p-820
++0x1.ff5b9106a784ep-1
++0x1.4d4990f481852p-15
++0x1.39a5976ee7210p-879
++0x1.f5e4d494092e7p-1
++0x1.2bb040585ffdep-28
++0x1.f707b3cd873d2p-1
++0x1.fc1a353ea30eap-1
++0x1.fc44366f2d5c7p-1
++0x1.f9fb832b4f54fp-1
+diff -urN glibc-2.17-c758a686/benchtests/Makefile glibc-2.17-c758a686/benchtests/Makefile
+--- glibc-2.17-c758a686/benchtests/Makefile	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/Makefile	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,164 @@
++# Copyright (C) 2013-2015 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 benchmark tests.  The only useful target here is `bench`.
++# Add benchmark functions in alphabetical order.
++
++# Run python scripts with $(PYTHON).
++PYTHON := python
++
++subdir := benchtests
++
++include ../Makeconfig
++bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 ffs ffsll \
++	      log log2 modf pow rint sin sincos sinh sqrt tan tanh
++
++bench-pthread := pthread_once
++
++bench := $(bench-math) $(bench-pthread)
++
++# String function benchmarks.
++string-bench := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \
++		mempcpy memset rawmemchr stpcpy stpncpy strcasecmp strcasestr \
++		strcat strchr strchrnul strcmp strcpy strcspn strlen \
++		strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \
++		strspn strstr strcpy_chk stpcpy_chk memrchr strsep strtok
++string-bench-all := $(string-bench)
++
++stdlib-bench := strtod
++
++benchset := $(string-bench-all) $(stdlib-bench)
++
++CFLAGS-bench-ffs.c += -fno-builtin
++CFLAGS-bench-ffsll.c += -fno-builtin
++
++bench-malloc := malloc-thread
++
++$(addprefix $(objpfx)bench-,$(bench-math)): $(libm)
++$(addprefix $(objpfx)bench-,$(bench-pthread)): $(shared-thread-library)
++$(objpfx)bench-malloc-thread: $(shared-thread-library)
++
++
++
++# Rules to build and execute the benchmarks.  Do not put any benchmark
++# parameters beyond this point.
++
++# We don't want the benchmark programs to run in parallel since that could
++# affect their performance.
++.NOTPARALLEL:
++
++include ../Rules
++
++binaries-bench := $(addprefix $(objpfx)bench-,$(bench))
++binaries-benchset := $(addprefix $(objpfx)bench-,$(benchset))
++binaries-bench-malloc := $(addprefix $(objpfx)bench-,$(bench-malloc))
++
++# The default duration: 10 seconds.
++ifndef BENCH_DURATION
++BENCH_DURATION := 10
++endif
++
++CPPFLAGS-nonlib += -DDURATION=$(BENCH_DURATION)
++
++# Use clock_gettime to measure performance of functions.  The default is to use
++# HP_TIMING if it is available.
++ifdef USE_CLOCK_GETTIME
++CPPFLAGS-nonlib += -DUSE_CLOCK_GETTIME
++endif
++
++DETAILED_OPT :=
++
++ifdef DETAILED
++DETAILED_OPT := -d
++endif
++
++# This makes sure CPPFLAGS-nonlib and CFLAGS-nonlib are passed
++# for all these modules.
++cpp-srcs-left := $(binaries-benchset:=.c) $(binaries-bench:=.c) \
++		 $(binaries-bench-malloc:=.c)
++lib := nonlib
++include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
++
++extra-objs += json-lib.o
++
++bench-deps := bench-skeleton.c bench-timing.h Makefile
++
++run-bench = $(test-wrapper-env) \
++	    $(run-program-env) \
++	    $($*-ENV) $(rtld-prefix) $${run}
++
++timing-type := $(objpfx)bench-timing-type
++
++bench-clean:
++	rm -f $(binaries-bench) $(addsuffix .o,$(binaries-bench))
++	rm -f $(binaries-benchset) $(addsuffix .o,$(binaries-benchset))
++	rm -f $(binaries-bench-malloc) $(addsuffix .o,$(binaries-bench-malloc))
++	rm -f $(timing-type) $(addsuffix .o,$(timing-type))
++
++bench: $(timing-type) bench-set bench-func bench-malloc
++
++bench-set: $(binaries-benchset)
++	for run in $^; do \
++	  echo "Running $${run}"; \
++	  $(run-bench) > $${run}.out; \
++	done
++
++bench-malloc: $(binaries-bench-malloc)
++	run=$(objpfx)bench-malloc-thread; \
++	for thr in 1 8 16 32; do \
++	  echo "Running $${run} $${thr}"; \
++	  $(run-bench) $${thr} > $${run}-$${thr}.out; \
++	done
++
++# Build and execute the benchmark functions.  This target generates JSON
++# formatted bench.out.  Each of the programs produce independent JSON output,
++# so one could even execute them individually and process it using any JSON
++# capable language or tool.
++bench-func: $(binaries-bench)
++	{ timing_type=$$($(timing-type)); \
++	echo "{\"timing_type\": \"$${timing_type}\","; \
++	echo " \"functions\": {"; \
++	for run in $^; do \
++	  if ! [ "x$${run}" = "x$<" ]; then \
++	    echo ","; \
++	  fi; \
++	  echo "Running $${run}" >&2; \
++	  $(run-bench) $(DETAILED_OPT); \
++	done; \
++	echo; \
++	echo " }"; \
++	echo "}"; } > $(objpfx)bench.out-tmp; \
++	if [ -f $(objpfx)bench.out ]; then \
++	  mv -f $(objpfx)bench.out $(objpfx)bench.out.old; \
++	fi; \
++	mv -f $(objpfx)bench.out-tmp $(objpfx)bench.out
++	$(PYTHON) scripts/validate_benchout.py $(objpfx)bench.out \
++		scripts/benchout.schema.json
++
++$(timing-type) $(binaries-bench) $(binaries-benchset) \
++	$(binaries-bench-malloc): %: %.o $(objpfx)json-lib.o \
++  $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
++  $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
++	$(+link)
++
++$(objpfx)bench-%.c: %-inputs $(bench-deps)
++	{ if [ -n "$($*-INCLUDE)" ]; then \
++	  cat $($*-INCLUDE); \
++	fi; \
++	$(PYTHON) scripts/bench.py $(patsubst %-inputs,%,$<); } > $@-tmp
++	mv -f $@-tmp $@
+diff -urN glibc-2.17-c758a686/benchtests/modf-inputs glibc-2.17-c758a686/benchtests/modf-inputs
+--- glibc-2.17-c758a686/benchtests/modf-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/modf-inputs	2015-06-20 21:22:16.301457983 -0400
+@@ -0,0 +1,4 @@
++## includes: math.h
++## args: double:<double *>
++42.0
++-42.0
+diff -urN glibc-2.17-c758a686/pow-inputs glibc-2.17-c758a686/benchtests/pow-inputs
+--- glibc-2.17-c758a686/benchtests/pow-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/pow-inputs	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,511 @@
++## args: double:double
++## ret: double
++## includes: math.h
++42.0, 42.0
++-0x1.086f771a2b37bp696, 0x1.592b453fe869fp-81
++0x1.19eb12518e61bp-217, 0x1.c87753325f271p59
++0x1.5c68b7b390060p-869, -0x1.0000000000000p-64
++0x1.d96cb2cd196ebp3, 0x1.0000000000000p-64
++-0x1.f7cb93ee0ba9bp-238, 0x1.b7f046c622df6p691
++0x1.5cf5307b64e94p-233, 0x1.4499d7e88a731p124
++0x1.58bc610fde155p756, -0x1.0000000000000p-64
++0x1.11e4c61e2489ep9, 0x1.f3ddd0aadf9e9p94
++0x1.064765103f18ap-245, 0x1.a413811779c11p89
++-0x1.a26e540b1b5e0p77, 0x1.5987a1b0f6368p897
++0x1.465db461ffd24p681, -0x1.0000000000000p-64
++-0x1.b986d646b93b4p-100, -0x1.936ff2a7c8adep-420
++0x1.af0d371d0a43dp-197, 0x1.f185f2aba0958p217
++0x1.13ce451492820p115, -0x1.1598c3d54c625p81
++0x1.d5ec14b6de205p-604, -0x1.0000000000000p-64
++0x1.cf8ad6a495d19p-100, 0x1.8d2563e08105dp7
++0x1.1a7d3100f9ef4p-636, -0x1.0000000000000p-64
++-0x1.6dd9a7d0122f5p421, 0x1.199895f013a09p49
++0x1.b892e5125d7d1p-345, 0x1.0000000000000p-64
++0x1.5dfa7063ce092p996, 0x1.0000000000000p-64
++0x1.9e7d74cdbf190p512, -0x1.3d1b5206e8127p237
++0x1.b941e202e240dp-325, -0x1.0000000000000p-64
++-0x1.fbe85766fae96p-463, 0x1.91c903c89b075p85
++0x1.eab5553bcdfbap-957, 0x1.ab0a06811189cp90
++0x1.4c2c90f483a09p917, -0x1.0000000000000p-64
++0x1.014bc72248db8p439, -0x1.e1bef116ca6d9p112
++-0x1.6733d0746880bp-316, 0x1.8a34e6c887c39p-107
++-0x1.5a9b05cc4e1c4p461, -0x1.88d2560562b17p-798
++0x1.9690663e74e47p967, -0x1.0000000000000p-64
++-0x1.125986687c812p-159, -0x1.bd3236342d0f4p550
++0x1.3d6422e5177bep-951, 0x1.3878a292f55d9p226
++-0x1.9922669366d2dp590, -0x1.ae14d63976e00p-684
++0x1.d838c66e05cc9p256, 0x1.0000000000000p-64
++0x1.c319328022c2cp890, -0x1.4a627098d6e49p170
++0x1.0deee25028507p461, 0x1.310f343ce0281p94
++0x1.279923dac3d31p147, 0x1.0000000000000p-64
++0x1.e27fe364ee0b4p963, -0x1.107d33f004629p245
++-0x1.8160e4b7efcecp833, -0x1.9612560bf9302p-472
++-0x1.7814633c7452bp-821, -0x1.d36af1ef2c42fp636
++0x1.bac865bccd66ep113, -0x1.454be507db267p19
++0x1.c75b53051ead0p-931, -0x1.0000000000000p-64
++-0x1.cab4e5935aeaep318, -0x1.6794550b87520p-257
++0x1.088056b5fbc0dp-459, 0x1.0000000000000p-64
++0x1.1f8eb28937183p748, -0x1.b2a940cf17bc0p217
++0x1.ba85352faba13p-796, -0x1.0000000000000p-64
++0x1.1d3984c620975p460, 0x1.0000000000000p-64
++0x1.37acd13a9ea78p1019, 0x1.0000000000000p-64
++0x1.0e9d041b054d3p-411, 0x1.0000000000000p-64
++0x1.a156c095ec992p102, -0x1.46f561fd1fda9p98
++-0x1.273ca2d449455p471, -0x1.fa6c92046c475p-860
++-0x1.7b475167ae88ep-116, -0x1.eba627003ccc5p-339
++0x1.2996c344cf7dcp-564, 0x1.21df51e88e157p161
++-0x1.7d29f253d3e79p636, -0x1.8e30a1ba55f7fp77
++0x1.99ffe6fb747bep1003, -0x1.8b1047a0ed3b3p67
++0x1.248c46b353471p251, -0x1.3aa8631084564p8
++-0x1.500c56dfd8fa0p-869, 0x1.819212336e2afp-523
++0x1.012185cb5e155p-672, 0x1.dcbc907d906f0p203
++0x1.964221fe0b0c5p-260, -0x1.0000000000000p-64
++-0x1.172f10899cbcep669, 0x1.e4e656fea6c19p663
++0x1.e356e63b681dep989, -0x1.dd9d772868663p41
++0x1.ccd0118265376p287, -0x1.22ae0058250b6p184
++0x1.3de177d6762ebp742, -0x1.ebc180d571e12p58
++0x1.04caa30a223c6p-294, 0x1.0000000000000p-64
++-0x1.e0ffa63b800fcp-938, 0x1.0a2c229973ed9p149
++0x1.e0ffa63b800fcp-938, 0x1.0a2c229973ed9p149
++0x1.d43815bff9e7dp-685, 0x1.825755f8cae4bp168
++0x1.fe3b21bec8806p456, 0x1.0000000000000p-64
++0x1.b26d766ab1f27p-162, 0x1.184f242e49092p249
++-0x1.1c70d750f61abp-899, 0x1.e3f3e7ec803dap759
++0x1.220fe763e4353p897, 0x1.6a6f650adecc0p141
++0x1.d6f7716723825p-58, 0x1.0000000000000p-64
++0x1.2b0242282c767p308, 0x1.c9dd84f859214p104
++0x1.7d0ee4b3bb946p-563, -0x1.9d1683c6f5c5ap226
++-0x1.8547b5d202937p967, -0x1.14e58570b43a5p-765
++-0x1.568636c53d51fp-638, 0x1.164257f3ab632p-455
++0x1.6d7936f1f5553p-435, 0x1.8f26767f92ccbp147
++0x1.7c18551f15775p147, -0x1.0000000000000p-64
++-0x1.f2ac8209992fbp-965, 0x1.5faaf4ec0340cp-236
++-0x1.f57620fa5afd6p-69, -0x1.096166fce916ep-683
++-0x1.5054f3c0b1320p-215, 0x1.8c01c0a19db1bp-285
++0x1.e41e64f79a6a9p404, 0x1.0000000000000p-64
++0x1.71fc41e25fe85p-413, 0x1.4acb80e80f0b2p214
++0x1.fbf477dec9138p-661, 0x1.0000000000000p-64
++0x1.7575c7cd67604p498, 0x1.0000000000000p-64
++-0x1.f4dd41d434b62p-205, -0x1.981f66551fd64p805
++0x1.76ac564847250p-870, -0x1.0000000000000p-64
++0x1.bb0e222493e31p-632, 0x1.16ad202a7c871p27
++-0x1.079a76db55d95p-974, -0x1.19d4717967203p-409
++0x1.68a7c79597132p-227, 0x1.6c3871ff9ad60p195
++0x1.4961c76e0940cp271, -0x1.0000000000000p-64
++0x1.04cf75ca8337cp-273, -0x1.0000000000000p-64
++0x1.4fffe4a25f260p152, -0x1.a0e3a7e58a0d3p149
++0x1.c125c40bb88b6p-281, 0x1.bedf8672d605fp215
++0x1.bcd59440339b5p67, -0x1.d225c2cc02d3bp60
++0x1.670e80ab2399bp-841, 0x1.887061c29e4afp131
++0x1.7c6ef76479beep839, -0x1.0f72a2967e041p98
++0x1.272f8550905f7p-961, 0x1.21a6d4787c14cp190
++0x1.0a33d4e39655cp-424, 0x1.4dafa3da87794p162
++0x1.a34e21945e568p-641, 0x1.3a0a05d61f5e4p119
++-0x1.b57493dffe1c3p68, -0x1.8e19843fbbd1ep515
++0x1.a8ce11ea61121p248, -0x1.7b2376aa515e8p115
++-0x1.5feca3ddab161p-509, 0x1.3e0c341715e1cp217
++0x1.6695a0cf6063fp-689, 0x1.1852d463ea98ep37
++0x1.9367127039f77p-293, 0x1.adbe75323caaap47
++0x1.6ad5c2f704166p-336, -0x1.9bf7b7271daefp100
++0x1.6791a1f6e89bap-845, 0x1.07e4c362cf895p92
++-0x1.20d7f6086ddb2p143, 0x1.687a7454403f4p337
++-0x1.9bd727a165453p-810, 0x1.742fe1f2bf2dbp-551
++0x1.40c3b16a0dba0p438, -0x1.67a872ec62dadp90
++0x1.5e0ab0f983abfp629, -0x1.0000000000000p-64
++0x1.c929a231173cfp844, -0x1.f25c7501c8144p116
++-0x1.410ad6057e935p204, 0x1.bdb5a3d649e74p-928
++0x1.9f222254cab3fp-817, -0x1.0000000000000p-64
++0x1.7f7d22b44403fp1007, -0x1.2299d752e308dp177
++0x1.41f824f624f36p511, -0x1.0000000000000p-64
++0x1.9fbb158e5d5dfp-525, 0x1.f803767193e3fp31
++-0x1.e6a1216cab6d4p-260, 0x1.100d3600b5996p935
++-0x1.dd23855d0cc3ep1003, 0x1.3411e38397aaep-158
++-0x1.3a9e0585f7979p-827, -0x1.db64725e35a3cp-259
++0x1.ce93a02ba2924p866, 0x1.0000000000000p-64
++0x1.445bf157156d4p-100, 0x1.0000000000000p-64
++-0x1.ba1ca38fc92ebp-848, -0x1.9270247b4b009p-609
++-0x1.5ac2b6a0c0476p-172, -0x1.595d419d9babdp-399
++-0x1.94f2b24fd7b65p839, -0x1.a42b466df80e1p519
++0x1.bf66704c603f1p-859, 0x1.430eb110359f6p-63
++0x1.e9ccb07667b5fp-435, 0x1.e7cec7c8e2138p229
++-0x1.bcd59440339b5p67, -0x1.d225c2cc02d3bp60
++0x1.a5e7c0a9c79d2p-503, -0x1.0000000000000p-64
++0x1.91aa125544e6ep681, -0x1.0000000000000p-64
++0x1.5371f5af7cd6ep-628, 0x1.078a57c0c5e30p147
++-0x1.2890a668b0252p-207, 0x1.ec956130d1ea0p411
++0x1.70f496a3b1319p-183, 0x1.9f04e4dd9dee0p159
++-0x1.ab4c0689a295cp375, 0x1.ec1627c9f2374p-617
++-0x1.390d459924f44p-348, -0x1.8e36a55756005p481
++0x1.c1b483579742ap101, 0x1.a05a357f2d54fp236
++0x1.d0a84005691b7p763, -0x1.68f840a20c734p60
++0x1.f32d34d1fffd4p-40, 0x1.fc09869af26f1p131
++-0x1.e693e5dbee2e0p207, 0x1.2301f18cd9d27p817
++0x1.1f72a3d4f7881p-764, 0x1.4617565381163p177
++-0x1.7f69c3aee139ep-648, 0x1.1f42e1d53ae48p597
++-0x1.adc7f1f9fdc02p38, -0x1.a07af4087ad66p1011
++-0x1.923d01b1c3960p-276, 0x1.2c6710910e47ap889
++0x1.6b60a2accafe3p977, -0x1.78f4404c514b7p170
++-0x1.0a2a3540be5a3p302, 0x1.3259b15ad5075p-333
++-0x1.11e4c61e2489ep9, 0x1.f3ddd0aadf9e9p94
++0x1.e02943925b096p-651, 0x1.3e5010a3be270p137
++0x1.9887e07a7b4bdp-835, -0x1.0000000000000p-64
++0x1.fb9fd6c57d283p-969, -0x1.eb21f1c75479dp195
++0x1.55fb70ae2db62p-910, 0x1.b77402b5190d5p10
++-0x1.38b1775c225eep723, 0x1.7595a59a7ba8dp901
++0x1.fbdc30f777a6ap649, -0x1.ea19f696739e0p183
++0x1.c2b5309403401p760, -0x1.0000000000000p-64
++-0x1.3d6de154feafep496, -0x1.9763760be8c9dp-161
++0x1.1c0a33e2b3719p-116, -0x1.0000000000000p-64
++0x1.06b1024b8b4bap471, -0x1.cd9f24d503076p59
++-0x1.6d0d67d7d2ad2p627, 0x1.35c77413a4d2fp190
++-0x1.881467b6c56d5p-194, -0x1.465995072de7cp707
++0x1.1147d4d59a3a5p-952, -0x1.0000000000000p-64
++-0x1.c319328022c2cp890, -0x1.4a627098d6e49p170
++0x1.993864ddbc05dp562, 0x1.0000000000000p-64
++0x1.f9abd78250a64p633, -0x1.f104e2772f8cep141
++-0x1.4d87f27b51978p-916, 0x1.073e35dc85a96p-1003
++0x1.1e8e0347dd99bp278, 0x1.0000000000000p-64
++0x1.7fbfc71fde6edp891, -0x1.0000000000000p-64
++-0x1.ae86836ca4d83p659, -0x1.5153616fefc6ap-61
++0x1.0452d237e1de7p-518, 0x1.296675c74320cp87
++0x1.12fc06ee54ac1p615, -0x1.0000000000000p-64
++0x1.887c234a8cc63p-708, 0x1.ae5fb57f66c84p175
++0x1.4978c021c25cbp-130, -0x1.115a65f48b23cp80
++-0x1.a1e733c9fd87fp552, 0x1.cef7045a6012ap811
++0x1.f98611b7c6a51p538, -0x1.0000000000000p-64
++-0x1.858f201dffc93p26, 0x1.6a110485981d4p-285
++0x1.84297333218cep712, 0x1.497396c926ddfp73
++0x1.12c3e319b6a54p-783, 0x1.0000000000000p-64
++-0x1.8ee011da43d65p-879, 0x1.7b6cf1473438ep670
++-0x1.4978c021c25cbp-130, -0x1.115a65f48b23cp80
++0x1.f057a19099427p-736, 0x1.0000000000000p-64
++0x1.407a2417c0b48p413, -0x1.90cbb0161a8c6p12
++0x1.04f492d848a39p-816, 0x1.ec7fb651e4df9p225
++-0x1.5290f79114db5p-971, -0x1.feede687f8cf3p-101
++0x1.fb0cc227fae39p-669, 0x1.924f06f662685p143
++-0x1.7d10c2a023848p734, -0x1.86a912207d0c3p757
++-0x1.5ebd0337bf9f3p945, 0x1.cb53f1b618ab5p465
++0x1.cef8d3cce5e81p531, -0x1.0000000000000p-64
++0x1.cdc7962fdc900p51, 0x1.0000000000000p-64
++-0x1.04f492d848a39p-816, 0x1.ec7fb651e4df9p225
++-0x1.23221091a234fp828, -0x1.b08e262c8eca5p972
++0x1.bc16f113ad6ebp-101, 0x1.7c8311241b744p169
++0x1.e1c163876ccdcp843, -0x1.0000000000000p-64
++0x1.3daea5a429d79p-639, 0x1.0000000000000p-64
++0x1.e99204b546e58p215, -0x1.0000000000000p-64
++-0x1.950493326e8b2p679, 0x1.fdc874cefc875p-615
++0x1.016dd4fb0abd2p853, -0x1.c82dd72b4ab44p102
++0x1.d0f6737fbcdbbp-353, 0x1.081a8002b8e53p211
++0x1.f1d1f5c67bb5ap-321, 0x1.d64ec22c49552p176
++-0x1.8a60721e2686ap880, -0x1.936f75de69956p-750
++0x1.8368e4ed700bbp-57, 0x1.0000000000000p-64
++-0x1.7c5d037e915cep538, -0x1.aa30914f141e5p-886
++-0x1.9ff485cb26fa7p227, 0x1.82c1703140ceep465
++-0x1.bc56157fec778p-542, -0x1.898e228074677p-385
++0x1.eb16d56eb1d78p-224, 0x1.393ef32f107adp205
++-0x1.10bf71d60a4d1p-524, 0x1.335ac0ca90f62p1004
++0x1.392bc7ade8723p528, -0x1.50ea12907473fp21
++0x1.a26d44e3b408fp-896, 0x1.beda15a2a2799p129
++0x1.6d0d67d7d2ad2p627, 0x1.35c77413a4d2fp190
++-0x1.47a744db0c087p689, -0x1.0445309d5d5bdp-205
++0x1.0d3c074692057p781, -0x1.885716d3dcfbap146
++0x1.5feca3ddab161p-509, 0x1.3e0c341715e1cp217
++0x1.001af5dcc9beep589, 0x1.0000000000000p-64
++0x1.0b0f700297c73p388, 0x1.0000000000000p-64
++-0x1.4591e2de659a7p796, 0x1.4ab1a273f0697p736
++0x1.1e68964b6cc85p6, -0x1.d50762f9e9ce4p59
++0x1.40a7f08b7509dp-373, 0x1.6784b7c373049p207
++0x1.c43b310d38279p-924, 0x1.d4b5d23a0b96dp239
++0x1.421436f55761ep-12, 0x1.320481b0055a7p227
++-0x1.135fa0f337e6ep856, -0x1.ed172226e05edp335
++-0x1.d0a84005691b7p763, -0x1.68f840a20c734p60
++-0x1.6153c39025700p908, -0x1.87eff6801054cp257
++0x1.ad64258a1c8aep201, -0x1.eb202553cc800p129
++0x1.09a810c8ff945p866, -0x1.0000000000000p-64
++0x1.d14433f742c09p-360, 0x1.f4ff819b628ddp21
++0x1.0c04a59d1fa4fp562, 0x1.66b354392a531p134
++-0x1.84297333218cep712, 0x1.497396c926ddfp73
++-0x1.fb9fd6c57d283p-969, -0x1.eb21f1c75479dp195
++0x1.dd87e7279e72bp748, -0x1.0000000000000p-64
++0x1.e494b3d72a143p612, -0x1.3b94e6aa337a0p-57
++0x1.4a6b277bdabe4p-613, -0x1.0000000000000p-64
++0x1.aa78012aaa9c7p338, 0x1.0000000000000p-64
++-0x1.ab74577adade9p149, -0x1.2057c78ee21ccp31
++0x1.3974c5e1e2049p105, -0x1.d3dbb0fb0baf1p54
++0x1.c83bb023360a9p879, -0x1.0c6922624c625p97
++-0x1.e21c0605b5f2bp-634, 0x1.f28232c2ebba3p-74
++0x1.e61ed69f4f3e5p558, -0x1.0ee6a03187e13p128
++0x1.d32cb4d190af4p-556, -0x1.0000000000000p-64
++0x1.97a202fe3d99bp812, -0x1.12eba5e07e17fp131
++0x1.5cbf140578025p750, -0x1.0000000000000p-64
++0x1.8754d2c071fd1p-796, -0x1.0000000000000p-64
++-0x1.c24a21659e391p874, 0x1.8fca31719d26fp-203
++0x1.db5587ed33e3dp-392, -0x1.0000000000000p-64
++0x1.59b6e3bd2734fp959, -0x1.0000000000000p-64
++-0x1.2f68f32a5979ep367, 0x1.d77b92aecf0f8p-414
++0x1.73e621f69389dp222, -0x1.1235366e0a84bp216
++0x1.076b75274a516p-7, -0x1.0000000000000p-64
++0x1.2505e4b701385p-178, -0x1.0000000000000p-64
++0x1.ae0c974a70a8fp607, 0x1.0000000000000p-64
++0x1.b2c344636c704p595, -0x1.9d1b879d64e7dp213
++-0x1.a6f695e9d29eep-629, 0x1.dad8811e62691p422
++0x1.e5aca4566a08ap234, -0x1.645ed34f63b48p65
++0x1.67faa10de96c9p-929, 0x1.0000000000000p-64
++0x1.503a50f3f36c9p-313, 0x1.a1b537c589279p212
++-0x1.e62711b5b18aap-336, 0x1.176d22b7c6703p-81
++-0x1.78e6d2fb3c6c8p-802, -0x1.4354b70f8d56ap-407
++-0x1.a9b890e6a309bp-974, -0x1.fc73521e05c84p446
++0x1.605c070891e95p751, -0x1.00e8a0f55071cp255
++-0x1.8e249352e8ed4p-690, -0x1.d751a5bb2c420p-254
++0x1.67246027c2465p584, 0x1.3aaa16d492946p178
++0x1.c53735a56d1edp610, -0x1.630662efaf0c6p60
++0x1.d54a131bae182p142, -0x1.a313606a0459dp220
++0x1.38afe5f1ed5b4p-779, 0x1.0000000000000p-64
++0x1.f2aa76462ad42p-982, 0x1.0000000000000p-64
++0x1.e188a166c06b6p45, 0x1.0000000000000p-64
++0x1.fbe85766fae96p-463, 0x1.91c903c89b075p85
++0x1.3342d36ecf081p28, -0x1.0000000000000p-64
++0x1.c2b0a036a1828p719, 0x1.0000000000000p-64
++0x1.ba7f308dc60ddp517, -0x1.b38d014638da6p246
++-0x1.075aa7ba85f42p624, -0x1.a357d32f45a61p-867
++0x1.1fbb4362bf313p995, 0x1.d039c2c0e18bfp-6
++-0x1.150426e803137p622, -0x1.9bafe2efa3e89p39
++-0x1.3f2456d5cba52p116, 0x1.fa9ec45f18306p-389
++0x1.8e58945bd1087p-701, 0x1.0000000000000p-64
++-0x1.ab0ef29932d78p111, 0x1.4313d75c1df97p658
++0x1.ee3e13dd00d34p1016, 0x1.d6b3d3b9034c1p85
++-0x1.7f0bd006c0d62p-324, 0x1.8210646a5ccddp871
++-0x1.c004d2256a5b8p402, -0x1.a01df480fdcb7p98
++-0x1.3717c2e75f865p-749, -0x1.628ab47e4b9c7p-879
++-0x1.dfb414ca1e89fp780, -0x1.b1a6d17b59340p927
++0x1.2bb340a5c99b8p772, -0x1.4cb4a208cd38ap49
++0x1.983d90ffcdc95p-131, 0x1.294857e7a5d9dp66
++0x1.0789a00a3ff0fp-950, -0x1.0000000000000p-64
++0x1.6816c6cd93ea9p112, 0x1.985412f1ac3d6p104
++0x1.3c0e604f8974bp-226, 0x1.0000000000000p-64
++0x1.07acb29e12fc1p687, -0x1.edff80d6b306fp107
++0x1.22c1d3b2c0e45p135, -0x1.9a5dc703e46dbp204
++0x1.ede956a719d56p248, -0x1.80e8e672e144fp156
++-0x1.ff6263662c8fbp-263, 0x1.cf3867b2bac05p652
++0x1.f01e46c129d76p-5, 0x1.00d113cf96023p137
++0x1.45cf928146851p636, 0x1.26b1c5666d711p131
++-0x1.768376c2f7584p563, 0x1.017143ae97b27p545
++-0x1.1f72a3d4f7881p-764, 0x1.4617565381163p177
++0x1.dd9431675dbb5p-114, 0x1.0000000000000p-64
++-0x1.64cc1762105b7p-569, -0x1.2d69b27570067p840
++0x1.bd1077dadd530p235, 0x1.0000000000000p-64
++0x1.0aa166c2b93bdp488, -0x1.48d03430453b8p213
++-0x1.b513845f09747p-331, -0x1.d04e154527b26p685
++0x1.5c97b3a12df62p696, -0x1.e160e008f7d3ap89
++0x1.8eec91bde3d69p-376, -0x1.0000000000000p-64
++0x1.7d29f253d3e79p636, -0x1.8e30a1ba55f7fp77
++0x1.c004d2256a5b8p402, -0x1.a01df480fdcb7p98
++0x1.52b9d41aaa1e9p-589, -0x1.292cb15f1459dp46
++-0x1.ea9ca6fa0919ep-279, -0x1.601e44b6a588cp40
++# pow slow path at 240 bits
++# Implemented in sysdeps/ieee754/dbl-64/slowpow.c
++## name: 240bits
++0x1.01fcd33493ea3p596, -0x1.724bd4e887783p-14
++0x1.032ff59ab34fdp-540, -0x1.61e3632080b87p-24
++0x1.045c337b80f53p304, 0x1.dc3404c30fa69p-56
++0x1.0681338469475p-294, -0x1.3562210f27dfap-51
++0x1.0b55c01eab2a6p-447, -0x1.cd7162fecd483p-48
++0x1.0b74d4b709002p-811, -0x1.0af1478682e96p-50
++0x1.0e4d10f3aabc8p664, 0x1.e2bde3471eaa1p-55
++0x1.110607de11aa5p120, 0x1.dcec269cfd865p-47
++0x1.132aa4cc6f38bp-751, 0x1.366ca7979d9bbp-8
++0x1.138ae6f5a6dadp-680, 0x1.890a0755fce7ap-40
++0x1.1b7b95bdc6400p467, 0x1.ec36f5f75ce4cp-8
++0x1.1c20e7f14086cp-788, 0x1.f22967f8b5d7cp-48
++0x1.278262637b59cp446, -0x1.1aab83169f61cp-10
++0x1.2936f2eb01500p-234, -0x1.aa25c56c7a42ap-51
++0x1.2991068d7df8dp-895, -0x1.e22e0335a6813p-19
++0x1.2a4320a5a4e06p342, 0x1.a60de202d0f39p0
++0x1.2baa57016f98bp445, -0x1.19b39156d7af6p-42
++0x1.3003b731560f2p189, -0x1.d03a35d7809bbp-6
++0x1.3098f631b79b3p322, 0x1.936cf77d12901p-58
++0x1.329f9083895d6p-470, 0x1.c4e0407eac9e1p-60
++0x1.32e62120a48dep-373, 0x1.8c03970ea6143p-15
++0x1.3b69741c89827p-951, 0x1.d7e2d50ab916bp-13
++0x1.46d346d411a30p-451, -0x1.5bed1300261dcp-37
++0x1.48d0870fc99a7p-691, -0x1.4f6541a43b8cdp-5
++0x1.49ae5141ea416p-825, 0x1.cfc4b51dbe592p-24
++0x1.4d1fb5a2a4d73p738, -0x1.d2a54658b1df9p-50
++0x1.4ddb12f9500cbp962, 0x1.48bc1158eb70ap-15
++0x1.4f51d32b02376p758, 0x1.11d1409aaea9fp-27
++0x1.54f723dd63e3bp605, 0x1.6c02f2514de2ap-23
++0x1.5529070b8d631p-489, 0x1.1c3dd76010b92p-37
++0x1.569bf17eb40dfp217, -0x1.8cb97627ae884p-31
++0x1.5e2892c719a5ap817, 0x1.f0e3d4b66e9c0p-11
++0x1.619a049c49284p329, -0x1.0bc7b3735d182p-12
++0x1.62e6745b17235p344, 0x1.86dcb0cd4e584p-39
++0x1.6532120398cb6p374, -0x1.dd57d385dde4ap-56
++0x1.6ab9873394341p712, 0x1.6cec233df7f19p-59
++0x1.6d7c56b0ec1f9p723, -0x1.864ae3aa72d4ap-11
++0x1.6decf38117b3ap-629, 0x1.e1c8b1eaebfbbp-27
++0x1.6f57771705979p518, -0x1.44fbe6fcf4182p-24
++0x1.6f57b14f5f248p880, 0x1.e2554493e7f0cp-2
++0x1.6fee9735004b7p-71, 0x1.8eaf1527d88bep-48
++0x1.7190e00c6cae0p-495, 0x1.705594f79ee43p-33
++0x1.7238a1904c29cp40, 0x1.d454673e675eep-30
++0x1.76aa529cae2a7p-457, -0x1.0652207d202acp-45
++0x1.78e630a117b59p-105, 0x1.ecb1a67d5b9dcp-32
++0x1.7d0976b552b5bp-316, -0x1.9c52a2a02f146p1
++0x1.80a10162f3c9ep-462, 0x1.af6ef1f1d004ep-54
++0x1.8794943d6e34bp-745, -0x1.0c7df064d51e9p-10
++0x1.8a3d749288cbcp-469, 0x1.a9bf9202d914fp-46
++0x1.8da421e64749bp-540, -0x1.494a81df89b6bp-26
++0x1.8e05154795810p247, 0x1.3c04802f44ddcp-47
++0x1.91b9d616c0878p-313, 0x1.a3c9263d26b2ap-30
++0x1.95e973a94d414p-229, 0x1.d83d8244e6566p-28
++0x1.9a3217b4fb0e5p-990, 0x1.82853149b1e30p-42
++0x1.9e2556775fc02p-377, -0x1.a6ec93193a127p-38
++0x1.9e83d7b0c831fp-906, 0x1.6a3485e3e4fe8p-21
++0x1.a51cf0f0f49f7p751, 0x1.07b941a3af664p-12
++0x1.a883c2cef7802p-432, 0x1.b5ee3711a8260p-34
++0x1.aca70602f90f3p205, -0x1.a40d85c2b0ddap-55
++0x1.b118069c4e0f8p133, 0x1.85ed946b41169p0
++0x1.b1ada0a8ca383p-699, 0x1.ddfec76f67c1fp-37
++0x1.b236b6872f638p419, 0x1.fa8f6525758b6p-5
++0x1.b2413258b83b1p892, -0x1.bcea65c80772bp-12
++0x1.b51563dac9885p-571, 0x1.7a1e16e485fdcp-30
++0x1.b5e4833e40f76p-445, 0x1.44e23325bcc3fp-22
++0x1.b6a2168ec3212p-674, -0x1.35bda0265f18bp-30
++0x1.b8dd676727fa1p124, 0x1.3605e6ec76006p-29
++0x1.b95437f961192p-500, 0x1.9276767f94721p-10
++0x1.bb6647f65218ap741, -0x1.b9dd250927a8ap-6
++0x1.bffdf0efb5c4ep-703, 0x1.85fac77188c01p-9
++0x1.c0345583020c9p236, 0x1.de31b044cb918p-37
++0x1.c4b9163604b90p548, 0x1.0a51f116977d3p-17
++0x1.c66ec323be811p-726, -0x1.8829c716f5ddbp-24
++0x1.c69da72348031p-390, 0x1.109f77bb4a2a2p-37
++0x1.c712558c00177p-883, -0x1.9cf047e60fa38p-8
++0x1.c74df6d64da29p-154, -0x1.bdba55e26ef07p2
++0x1.c75fa2c065d1dp731, 0x1.fa827749d723cp-21
++0x1.c8f5b7f54aa5fp-998, 0x1.59fa40e2d7a95p-10
++0x1.c957e3768f0c2p-102, 0x1.0047f59669535p-5
++0x1.ce0615637c099p-737, 0x1.b1795333136d6p-59
++0x1.d1a7872210098p245, -0x1.afd8c410a1918p-16
++0x1.d39ee7b8cae5ep722, 0x1.639a1575eb95cp-56
++0x1.d4b4276a02096p-5, -0x1.7ff8354a6ba9cp-21
++0x1.d500d1daf1bfcp-352, 0x1.e4c7243104fa7p-34
++0x1.d684c68e86321p-661, -0x1.11305765580a9p-13
++0x1.db08f6fcae9f5p-637, -0x1.a8cba163bd1dep-21
++0x1.db09e6535414dp809, -0x1.0b10e70ed8d88p-48
++0x1.e50573d07ecc0p41, 0x1.19ec44b6d99e6p-58
++0x1.e59505ef043e0p926, -0x1.3201c7a1e8882p-62
++0x1.e6b9b28e678a4p546, 0x1.70e042daa89e7p-30
++0x1.e9a4e6bbbf235p-851, -0x1.1d70f7b787412p-21
++0x1.ea68a16e4b7c9p-733, -0x1.ee7f337779825p-34
++0x1.f0e76025ece1cp642, -0x1.bdc0d0d7020d5p-57
++0x1.f1bcb1d70f84bp-568, 0x1.98c5d3b11e934p-21
++0x1.f568146a8c658p240, 0x1.4def9749a6a7ep-44
++0x1.f75bd43867225p-454, 0x1.34b1e5cb0df40p-16
++0x1.fae7a09d10f34p955, -0x1.f7f8439082552p-31
++0x1.fae913d4f952ep-809, -0x1.4b649402fce63p-6
++0x1.fe6d725408f24p484, -0x1.25f4f6441d2e4p-12
++0x1.ff6393f9150ccp-718, 0x1.a0cb50a9bf2f3p-31
++# pow slowest path at 768 bits
++# Implemented in sysdeps/ieee754/dbl-64/slowpow.c
++## name: 768bits
++1.0000000000000020, 1.5
++0x1.006777b4b61dep843, -0x1.67e3145491872p-1
++0x1.0477a5cfb1972p-402, 0x1.8742e7a1ce99dp-1
++0x1.0827a160ab475p-239, 0x1.fcae51d2d997dp-1
++0x1.083723672b1a4p-204, 0x1.baddc57f1404cp-2
++0x1.0b39f4b2f5c4fp-546, 0x1.7d02a31183f36p-1
++0x1.0e2d62ea9d078p-68, 0x1.8afb43919ece2p3
++0x1.0fedd1fd9bdc5p-1011, 0x1.c0ce64b178832p-6
++0x1.10b984764821ep724, -0x1.36e872083e630p-4
++0x1.12424342d99bbp686, -0x1.f8d4e18b1b309p-5
++0x1.1335f40a059c7p1014, -0x1.5818e19224448p-2
++0x1.14185484cbdb2p-780, 0x1.23f8d7d596280p-4
++0x1.14f5b49e12b8fp-751, 0x1.522c717bca3eap0
++0x1.15fe345b21e2bp399, -0x1.0a09061cd1de9p-1
++0x1.17c3e75436530p104, -0x1.ef30d09c541e9p0
++0x1.1e5296bbfeea7p747, -0x1.f68df5996bfedp-1
++0x1.1efdd081a8d35p-90, 0x1.7c7d10d98a3c9p-1
++0x1.203101f62452ap317, -0x1.3be834bfd34fap-1
++0x1.29cb8617add92p968, -0x1.9cbe73f892a16p-6
++0x1.2d75353d5df74p719, -0x1.e2f317d7b2c01p-1
++0x1.2f08247664913p592, -0x1.35ab9793384a5p-2
++0x1.2ff58217e86d7p725, -0x1.2c98b6be067ccp-2
++0x1.3113614c8b9e1p159, -0x1.fc2f4279c8cbep-1
++0x1.3115402118c24p134, -0x1.d435f65f0eefcp1
++0x1.32e5a1ba96cdap52, -0x1.f7d8248930c17p-1
++0x1.346f712d4c234p78, -0x1.830235fa4eb2cp3
++0x1.35ea84ad8b4fap742, -0x1.728dd1bc7d70cp-3
++0x1.36b91497c147ep579, -0x1.b7e7b0d1ad44dp-2
++0x1.3752c6b5da9e6p351, -0x1.2a00f003acdd1p-1
++0x1.3bccb31761b21p-193, 0x1.bdd7b5da189c8p1
++0x1.42c0b561c10bep-850, 0x1.dcdee5de63ebcp-3
++0x1.4520f56ca1422p-471, 0x1.348c312c9f319p-1
++0x1.46e7406c8e11ep546, -0x1.876f67bed28c4p0
++0x1.4ba3f35d2f4afp-333, 0x1.6e39f0895a072p-3
++0x1.4cb3303ab8786p-838, 0x1.fe88a032de46ap-1
++0x1.4d61505a36a60p234, -0x1.45c3e271db1fep1
++0x1.4fcff0e946b1ep909, -0x1.90fa07de4eea5p-1
++0x1.5172c6b32f2aep293, -0x1.fb0fa58fc74abp-2
++0x1.51e4b4afeb58ap-2, 0x1.f184d702a5f4bp3
++0x1.5212b31c06068p306, -0x1.e8e5c1b09f30dp-2
++0x1.55c7413fbdd0cp-168, 0x1.68687102fa0b8p-3
++0x1.5975f5580b29cp361, -0x1.cda627a0b0899p-3
++0x1.5b3d77ff20607p-694, 0x1.95877099718f5p-4
++0x1.5b85e6f45d26fp763, -0x1.b727a35d92656p-4
++0x1.5c83b2d038766p-984, 0x1.4232c330c81b9p-1
++0x1.5ec6e7e275af2p773, -0x1.8da470ca7dd62p-1
++0x1.60b0e6123149bp-743, 0x1.25a696ab5fc09p-4
++0x1.6567f1ab52caap-769, 0x1.ff57c1e78cc81p-3
++0x1.689cb423d7ec7p95, -0x1.71d3f5a46c36fp-2
++0x1.69e2a022e3db6p-672, 0x1.209f77b27f146p-1
++0x1.6a6bb05202fd0p-621, 0x1.bc1f316194126p-5
++0x1.72b181bf25fd7p303, -0x1.629be448db4f7p1
++0x1.7667d46544feap887, -0x1.e92ef7681c985p-3
++0x1.776f45edc5aa6p967, -0x1.8b34366de0584p-3
++0x1.77d4e3169e8fdp889, -0x1.7159c5a0e440ep-4
++0x1.792c56f01b25ep-474, 0x1.45237144dc76dp-2
++0x1.7c4d814b67ce3p-30, 0x1.32f4217aa69bfp2
++0x1.7fec1487cd8c2p-790, 0x1.373ec1a13952fp-4
++0x1.8280e15921e7bp-544, 0x1.17f4d1f294f23p-2
++0x1.8be4858d98288p395, -0x1.8ecf7076c1cadp-3
++0x1.8c1a3651b2a3cp251, -0x1.fe464693b592fp-1
++0x1.95b8339b15437p-805, 0x1.c590d48f70e09p-4
++0x1.9ea712eab015cp643, -0x1.9f9a2005cd04dp-2
++0x1.9ec010ebb0fb4p966, -0x1.322de55e2f27dp-3
++0x1.a055b4cacfb90p692, -0x1.45a6d0302680bp-4
++0x1.a2541721f7549p508, -0x1.46b5008fed93ap0
++0x1.aa4ea2a62e6d3p146, -0x1.4948a7f0b9447p-2
++0x1.aeab6627bd7fep-883, 0x1.e334b6e331bcfp-4
++0x1.afc9062dd5d6cp285, -0x1.704640b7e8a60p0
++0x1.b2e0e5768b8a4p700, -0x1.e3cc63841415cp-1
++0x1.b44dd7483ff8fp762, -0x1.376275f0c7542p0
++0x1.b461c649ef81fp-297, 0x1.757d3606ad420p-2
++0x1.b47177acf880bp162, -0x1.dbc2c7336fcdcp-3
++0x1.b5d597a5647bep312, -0x1.0d87f0669fd98p-3
++0x1.b5f5f6894898fp824, -0x1.aeec9752febccp-2
++0x1.b78b84a583db6p711, -0x1.443983558960ap-1
++0x1.ba15f474f95a7p250, -0x1.9d46c49adf4ecp1
++0x1.ba6e74fdcaafap685, -0x1.c69a403d3e719p-3
++0x1.c14ed18d4eb53p652, -0x1.231bb32f82a5fp-1
++0x1.c44727ecf4620p-965, 0x1.c61391aad6567p-6
++0x1.c492c6882ec27p-423, 0x1.6bb9123ab40fdp-1
++0x1.c525d219db143p-681, 0x1.5e10738bb6aefp-5
++0x1.ca9510663b619p878, -0x1.8966f1a726428p-2
++0x1.d2d4d70d57384p-769, 0x1.eec5e348f3c65p-5
++0x1.d3275243b3fd2p-203, 0x1.a56f87acf7afbp1
++0x1.d5d3022665384p-509, 0x1.d4f984b477a34p-5
++0x1.dabf72e2c886fp642, -0x1.e930d581ea0c3p-3
++0x1.daffa04064cf7p799, -0x1.b944c271f477bp-1
++0x1.db25c4ae37695p710, -0x1.ff84b0c08defdp-3
++0x1.dc06652f06a70p-689, 0x1.f2eb368dd304ap-3
++0x1.e09726def851ap-784, 0x1.8d62918b2f6a5p-5
++0x1.e1561576de8f5p-470, 0x1.983137f5396b2p-2
++0x1.e5e4c7891da9bp-871, 0x1.5775130263654p-5
++0x1.eca182884f17fp-295, 0x1.af55d3375f461p-3
++0x1.f1c172bc4f401p-360, 0x1.f40476496c282p-4
++0x1.f244722a51df2p548, -0x1.20f7a2f2fc3e8p-2
++0x1.f422f159f235bp126, -0x1.339620de97b69p1
++0x1.f43463d9cef16p-845, 0x1.2c364792462fep-3
++0x1.f8b79758182dap-884, 0x1.ed6174093fca4p-6
++0x1.fa5c677254961p133, -0x1.c91962524971ep-1
++0x1.ff0544adacb78p649, -0x1.6c17c3a7210e2p-1
+diff -urN glibc-2.17-c758a686/benchtests/pthread_once-inputs glibc-2.17-c758a686/benchtests/pthread_once-inputs
+--- glibc-2.17-c758a686/benchtests/pthread_once-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/pthread_once-inputs	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,9 @@
++# This tests the common-case scenario for pthread_once.
++# We have a single thread that runs a no-op initialization once and then
++# repeatedly runs checks of the initialization (i.e., an acquire load and
++# conditional jump) in a tight loop.
++# scripts/bench.py doesn't handle function pointers, so we just use void *:
++## args: pthread_once_t *:void *
++## includes: pthread.h
++## include-sources: pthread_once-source.c
++&once, once_handler
+diff -urN glibc-2.17-c758a686/pthread_once-source.c glibc-2.17-c758a686/benchtests/pthread_once-source.c
+--- glibc-2.17-c758a686/benchtests/pthread_once-source.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/pthread_once-source.c	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,25 @@
++/* Measure pthread_once best-case latency (i.e., when already initialized.
++
++   Copyright (C) 2014 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/>.  */
++
++static pthread_once_t once = PTHREAD_ONCE_INIT;
++
++static void
++once_handler (void)
++{
++}
+diff -urN glibc-2.17-c758a686/benchtests/README glibc-2.17-c758a686/benchtests/README
+--- glibc-2.17-c758a686/benchtests/README	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/README	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,99 @@
++Using the glibc microbenchmark suite
++====================================
++
++The glibc microbenchmark suite automatically generates code for specified
++functions, builds and calls them repeatedly for given inputs to give some
++basic performance properties of the function.
++
++Running the benchmark:
++=====================
++
++The benchmark needs python 2.7 or later in addition to the
++dependencies required to build the GNU C Library.  One may run the
++benchmark by invoking make as follows:
++
++  $ make bench
++
++This runs each function for 10 seconds and appends its output to
++benchtests/bench.out.  To ensure that the tests are rebuilt, one could run:
++
++  $ make bench-clean
++
++The duration of each test can be configured setting the BENCH_DURATION variable
++in the call to make.  One should run `make bench-clean' before changing
++BENCH_DURATION.
++
++  $ make BENCH_DURATION=1 bench
++
++The benchmark suite does function call measurements using architecture-specific
++high precision timing instructions whenever available.  When such support is
++not available, it uses clock_gettime (CLOCK_PROCESS_CPUTIME_ID).  One can force
++the benchmark to use clock_gettime by invoking make as follows:
++
++  $ make USE_CLOCK_GETTIME=1 bench
++
++Again, one must run `make bench-clean' before changing the measurement method.
++
++Adding a function to benchtests:
++===============================
++
++If the name of the function is `foo', then the following procedure should allow
++one to add `foo' to the bench tests:
++
++- Append the function name to the bench variable in the Makefile.
++
++- Make a file called `foo-inputs` to provide the definition and input for the
++  function.  The file should have some directives telling the parser script
++  about the function and then one input per line.  Directives are lines that
++  have a special meaning for the parser and they begin with two hashes '##'.
++  The following directives are recognized:
++
++  - args: This should be assigned a colon separated list of types of the input
++    arguments.  This directive may be skipped if the function does not take any
++    inputs.  One may identify output arguments by nesting them in <>.  The
++    generator will create variables to get outputs from the calling function.
++  - ret: This should be assigned the type that the function returns.  This
++    directive may be skipped if the function does not return a value.
++  - includes: This should be assigned a comma-separated list of headers that
++    need to be included to provide declarations for the function and types it
++    may need (specifically, this includes using "#include <header>").
++  - include-sources: This should be assigned a comma-separated list of source
++    files that need to be included to provide definitions of global variables
++    and functions (specifically, this includes using "#include "source").
++    See pthread_once-inputs and pthreads_once-source.c for an example of how
++    to use this to benchmark a function that needs state across several calls.
++  - init: Name of an initializer function to call to initialize the benchtest.
++  - name: See following section for instructions on how to use this directive.
++
++  Lines beginning with a single hash '#' are treated as comments.  See
++  pow-inputs for an example of an input file.
++
++Multiple execution units per function:
++=====================================
++
++Some functions have distinct performance characteristics for different input
++domains and it may be necessary to measure those separately.  For example, some
++math functions perform computations at different levels of precision (64-bit vs
++240-bit vs 768-bit) and mixing them does not give a very useful picture of the
++performance of these functions.  One could separate inputs for these domains in
++the same file by using the `name' directive that looks something like this:
++
++  ##name: 240bit
++
++See the pow-inputs file for an example of what such a partitioned input file
++would look like.
++
++Benchmark Sets:
++==============
++
++In addition to standard benchmarking of functions, one may also generate
++custom outputs for a set of functions.  This is currently used by string
++function benchmarks where the aim is to compare performance between
++implementations at various alignments and for various sizes.
++
++To add a benchset for `foo':
++
++- Add `foo' to the benchset variable.
++- Write your bench-foo.c that prints out the measurements to stdout.
++- On execution, a bench-foo.out is created in $(objpfx) with the contents of
++  stdout.
+diff -urN glibc-2.17-c758a686/rint-inputs glibc-2.17-c758a686/benchtests/rint-inputs
+--- glibc-2.17-c758a686/benchtests/rint-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/rint-inputs	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,7 @@
++## args: double
++## ret: double
++## includes: math.h
++78.5
++-78.5
++4503599627370497.0
++-4503599627370497.0
+diff -urN glibc-2.17-c758a686/benchtests/scripts/benchout.schema.json glibc-2.17-c758a686/benchtests/scripts/benchout.schema.json
+--- glibc-2.17-c758a686/benchtests/scripts/benchout.schema.json	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/scripts/benchout.schema.json	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,42 @@
++{
++  "title": "benchmark",
++  "type": "object",
++  "properties": {
++    "timing-type": {
++      "type": "string"
++    },
++    "functions": {
++      "title": "Associative array of functions",
++      "type": "object",
++      "patternProperties": {
++        "^[_a-zA-Z][_a-zA-Z0-9]+$": {
++          "title": "Function names",
++          "type": "object",
++          "patternProperties": {
++            "^[_a-zA-Z0-9]*$": {
++              "title": "Function variants",
++              "type": "object",
++              "properties": {
++                "duration": {"type": "number"},
++                "iterations": {"type": "number"},
++                "max": {"type": "number"},
++                "min": {"type": "number"},
++                "mean": {"type": "number"},
++                "timings": {
++                  "type": "array",
++                  "items": {"type": "number"}
++                }
++              },
++              "required": ["duration", "iterations", "max", "min", "mean"],
++              "additionalProperties": false
++            }
++          },
++          "additionalProperties": false
++        }
++      },
++      "minProperties": 1
++    }
++  },
++  "required": ["timing-type", "functions"],
++  "additionalProperties": false
++}
+diff -urN glibc-2.17-c758a686/benchtests/scripts/bench.py glibc-2.17-c758a686/benchtests/scripts/bench.py
+--- glibc-2.17-c758a686/benchtests/scripts/bench.py	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/scripts/bench.py	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,308 @@
++#!/usr/bin/python
++# Copyright (C) 2014 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/>.
++
++"""Benchmark program generator script
++
++This script takes a function name as input and generates a program using
++an input file located in the benchtests directory.  The name of the
++input file should be of the form foo-inputs where 'foo' is the name of
++the function.
++"""
++
++from __future__ import print_function
++import sys
++import os
++import itertools
++
++# Macro definitions for functions that take no arguments.  For functions
++# that take arguments, the STRUCT_TEMPLATE, ARGS_TEMPLATE and
++# VARIANTS_TEMPLATE are used instead.
++DEFINES_TEMPLATE = '''
++#define CALL_BENCH_FUNC(v, i) %(func)s ()
++#define NUM_VARIANTS (1)
++#define NUM_SAMPLES(v) (1)
++#define VARIANT(v) FUNCNAME "()"
++'''
++
++# Structures to store arguments for the function call.  A function may
++# have its inputs partitioned to represent distinct performance
++# characteristics or distinct flavors of the function.  Each such
++# variant is represented by the _VARIANT structure.  The ARGS structure
++# represents a single set of arguments.
++STRUCT_TEMPLATE = '''
++#define CALL_BENCH_FUNC(v, i) %(func)s (%(func_args)s)
++
++struct args
++{
++%(args)s
++  double timing;
++};
++
++struct _variants
++{
++  const char *name;
++  int count;
++  struct args *in;
++};
++'''
++
++# The actual input arguments.
++ARGS_TEMPLATE = '''
++struct args in%(argnum)d[%(num_args)d] = {
++%(args)s
++};
++'''
++
++# The actual variants, along with macros defined to access the variants.
++VARIANTS_TEMPLATE = '''
++struct _variants variants[%(num_variants)d] = {
++%(variants)s
++};
++
++#define NUM_VARIANTS %(num_variants)d
++#define NUM_SAMPLES(i) (variants[i].count)
++#define VARIANT(i) (variants[i].name)
++'''
++
++# Epilogue for the generated source file.
++EPILOGUE = '''
++#define RESULT(__v, __i) (variants[(__v)].in[(__i)].timing)
++#define RESULT_ACCUM(r, v, i, old, new) \\
++        ((RESULT ((v), (i))) = (RESULT ((v), (i)) * (old) + (r)) / ((new) + 1))
++#define BENCH_FUNC(i, j) ({%(getret)s CALL_BENCH_FUNC (i, j);})
++#define FUNCNAME "%(func)s"
++#include "bench-skeleton.c"'''
++
++
++def gen_source(func, directives, all_vals):
++    """Generate source for the function
++
++    Generate the C source for the function from the values and
++    directives.
++
++    Args:
++      func: The function name
++      directives: A dictionary of directives applicable to this function
++      all_vals: A dictionary input values
++    """
++    # The includes go in first.
++    for header in directives['includes']:
++        print('#include <%s>' % header)
++
++    for header in directives['include-sources']:
++        print('#include "%s"' % header)
++
++    # Print macros.  This branches out to a separate routine if
++    # the function takes arguments.
++    if not directives['args']:
++        print(DEFINES_TEMPLATE % {'func': func})
++        outargs = []
++    else:
++        outargs = _print_arg_data(func, directives, all_vals)
++
++    # Print the output variable definitions if necessary.
++    for out in outargs:
++        print(out)
++
++    # If we have a return value from the function, make sure it is
++    # assigned to prevent the compiler from optimizing out the
++    # call.
++    if directives['ret']:
++        print('static %s volatile ret;' % directives['ret'])
++        getret = 'ret = '
++    else:
++        getret = ''
++
++    # Test initialization.
++    if directives['init']:
++        print('#define BENCH_INIT %s' % directives['init'])
++
++    print(EPILOGUE % {'getret': getret, 'func': func})
++
++
++def _print_arg_data(func, directives, all_vals):
++    """Print argument data
++
++    This is a helper function for gen_source that prints structure and
++    values for arguments and their variants and returns output arguments
++    if any are found.
++
++    Args:
++      func: Function name
++      directives: A dictionary of directives applicable to this function
++      all_vals: A dictionary input values
++
++    Returns:
++      Returns a list of definitions for function arguments that act as
++      output parameters.
++    """
++    # First, all of the definitions.  We process writing of
++    # CALL_BENCH_FUNC, struct args and also the output arguments
++    # together in a single traversal of the arguments list.
++    func_args = []
++    arg_struct = []
++    outargs = []
++
++    for arg, i in zip(directives['args'], itertools.count()):
++        if arg[0] == '<' and arg[-1] == '>':
++            pos = arg.rfind('*')
++            if pos == -1:
++                die('Output argument must be a pointer type')
++
++            outargs.append('static %s out%d;' % (arg[1:pos], i))
++            func_args.append(' &out%d' % i)
++        else:
++            arg_struct.append('  %s volatile arg%d;' % (arg, i))
++            func_args.append('variants[v].in[i].arg%d' % i)
++
++    print(STRUCT_TEMPLATE % {'args' : '\n'.join(arg_struct), 'func': func,
++                             'func_args': ', '.join(func_args)})
++
++    # Now print the values.
++    variants = []
++    for (k, vals), i in zip(all_vals.items(), itertools.count()):
++        out = ['  {%s, 0},' % v for v in vals]
++
++        # Members for the variants structure list that we will
++        # print later.
++        variants.append('  {"%s", %d, in%d},' % (k, len(vals), i))
++        print(ARGS_TEMPLATE % {'argnum': i, 'num_args': len(vals),
++                               'args': '\n'.join(out)})
++
++    # Print the variants and the last set of macros.
++    print(VARIANTS_TEMPLATE % {'num_variants': len(all_vals),
++                               'variants': '\n'.join(variants)})
++    return outargs
++
++
++def _process_directive(d_name, d_val):
++    """Process a directive.
++
++    Evaluate the directive name and value passed and return the
++    processed value. This is a helper function for parse_file.
++
++    Args:
++      d_name: Name of the directive
++      d_val: The string value to process
++
++    Returns:
++      The processed value, which may be the string as it is or an object
++      that describes the directive.
++    """
++    # Process the directive values if necessary.  name and ret don't
++    # need any processing.
++    if d_name.startswith('include'):
++        d_val = d_val.split(',')
++    elif d_name == 'args':
++        d_val = d_val.split(':')
++
++    # Return the values.
++    return d_val
++
++
++def parse_file(func):
++    """Parse an input file
++
++    Given a function name, open and parse an input file for the function
++    and get the necessary parameters for the generated code and the list
++    of inputs.
++
++    Args:
++      func: The function name
++
++    Returns:
++      A tuple of two elements, one a dictionary of directives and the
++      other a dictionary of all input values.
++    """
++    all_vals = {}
++    # Valid directives.
++    directives = {
++            'name': '',
++            'args': [],
++            'includes': [],
++            'include-sources': [],
++            'ret': '',
++            'init': ''
++    }
++
++    try:
++        with open('%s-inputs' % func) as f:
++            for line in f:
++                # Look for directives and parse it if found.
++                if line.startswith('##'):
++                    try:
++                        d_name, d_val = line[2:].split(':', 1)
++                        d_name = d_name.strip()
++                        d_val = d_val.strip()
++                        directives[d_name] = _process_directive(d_name, d_val)
++                    except (IndexError, KeyError):
++                        die('Invalid directive: %s' % line[2:])
++
++                # Skip blank lines and comments.
++                line = line.split('#', 1)[0].rstrip()
++                if not line:
++                    continue
++
++                # Otherwise, we're an input.  Add to the appropriate
++                # input set.
++                cur_name = directives['name']
++                all_vals.setdefault(cur_name, [])
++                all_vals[cur_name].append(line)
++    except IOError as ex:
++        die("Failed to open input file (%s): %s" % (ex.filename, ex.strerror))
++
++    return directives, all_vals
++
++
++def die(msg):
++    """Exit with an error
++
++    Prints an error message to the standard error stream and exits with
++    a non-zero status.
++
++    Args:
++      msg: The error message to print to standard error
++    """
++    print('%s\n' % msg, file=sys.stderr)
++    sys.exit(os.EX_DATAERR)
++
++
++def main(args):
++    """Main function
++
++    Use the first command line argument as function name and parse its
++    input file to generate C source that calls the function repeatedly
++    for the input.
++
++    Args:
++      args: The command line arguments with the program name dropped
++
++    Returns:
++      os.EX_USAGE on error and os.EX_OK on success.
++    """
++    if len(args) != 1:
++        print('Usage: %s <function>' % sys.argv[0])
++        return os.EX_USAGE
++
++    directives, all_vals = parse_file(args[0])
++    gen_source(args[0], directives, all_vals)
++    return os.EX_OK
++
++
++if __name__ == '__main__':
++    sys.exit(main(sys.argv[1:]))
+diff -urN glibc-2.17-c758a686/benchtests/scripts/validate_benchout.py glibc-2.17-c758a686/benchtests/scripts/validate_benchout.py
+--- glibc-2.17-c758a686/benchtests/scripts/validate_benchout.py	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/scripts/validate_benchout.py	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,85 @@
++#!/usr/bin/python
++# Copyright (C) 2014 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/>.
++"""Benchmark output validator
++
++Given a benchmark output file in json format and a benchmark schema file,
++validate the output against the schema.
++"""
++
++from __future__ import print_function
++import json
++import sys
++import os
++
++try:
++    import jsonschema
++except ImportError:
++    print('Could not find jsonschema module.  Output not validated.')
++    # Return success because we don't want the bench target to fail just
++    # because the jsonschema module was not found.
++    sys.exit(os.EX_OK)
++
++
++def validate_bench(benchfile, schemafile):
++    """Validate benchmark file
++
++    Validate a benchmark output file against a JSON schema.
++
++    Args:
++        benchfile: The file name of the bench.out file.
++        schemafile: The file name of the JSON schema file to validate
++        bench.out against.
++
++    Exceptions:
++        jsonschema.ValidationError: When bench.out is not valid
++        jsonschema.SchemaError: When the JSON schema is not valid
++        IOError: If any of the files are not found.
++    """
++    with open(benchfile, 'r') as bfile:
++        with open(schemafile, 'r') as sfile:
++            bench = json.load(bfile)
++            schema = json.load(sfile)
++            jsonschema.validate(bench, schema)
++
++    # If we reach here, we're all good.
++    print("Benchmark output in %s is valid." % benchfile)
++
++
++def main(args):
++    """Main entry point
++
++    Args:
++        args: The command line arguments to the program
++
++    Returns:
++        0 on success or a non-zero failure code
++
++    Exceptions:
++        Exceptions thrown by validate_bench
++    """
++    if len(args) != 2:
++        print("Usage: %s <bench.out file> <bench.out schema>" % sys.argv[0],
++                file=sys.stderr)
++        return os.EX_USAGE
++
++    validate_bench(args[0], args[1])
++    return os.EX_OK
++
++
++if __name__ == '__main__':
++    sys.exit(main(sys.argv[1:]))
+diff -urN glibc-2.17-c758a686/benchtests/sincos-inputs glibc-2.17-c758a686/benchtests/sincos-inputs
+--- glibc-2.17-c758a686/benchtests/sincos-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/sincos-inputs	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,27 @@
++## includes: math.h
++## args: double:<double *>:<double *>
++0.9
++2.3
++3.7
++3.9
++4.0
++4.7
++5.9
++0x1.000000cf4a2a1p0
++0x1.0000010b239a8p0
++0x1.00000162a932ap0
++0x1.000002d452a11p0
++0x1.000005bc7d86cp0
++## name: 768bits
++0.93340582292648832662962377071381
++2.3328432680770916363144351635128
++3.7439477503636453548097051680088
++3.9225160069792437411706487182528
++4.0711651639931289992091478779912
++4.7858438478542097982426639646292
++5.9840767662578002727968851104379
++0x1.000000cf4a2a2p0
++0x1.0000010b239a9p0
++0x1.00000162a932bp0
++0x1.000002d452a10p0
++0x1.000005bc7d86dp0
+diff -urN glibc-2.17-c758a686/benchtests/sinh-inputs glibc-2.17-c758a686/benchtests/sinh-inputs
+--- glibc-2.17-c758a686/benchtests/sinh-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/sinh-inputs	2015-06-20 21:22:16.302457953 -0400
+@@ -0,0 +1,303 @@
++## args: double
++## ret: double
++## includes: math.h
++0x1.bcb6129b5ff2bp8
++-0x1.63057386325ebp9
++0x1.62f1d7dc4e8bfp9
++0x1.d038a32d61933p8
++-0x1.e471c1bac1ce4p-7
++0x1.a552c2076a2c0p4
++0x1.ea80c14d17262p4
++0x1.62e67590a0733p9
++0x1.62edf5f8ef2d6p9
++-0x1.23f9c5b9b41c5p6
++-0x1.62fac5eb878c6p9
++0x1.3e57e666e2e04p3
++0x1.bab6037e306ecp4
++0x1.aeceb373ec08dp5
++0x1.62ff7470df95dp9
++-0x1.6c62d6c0af55fp6
++-0x1.633c1105ee490p9
++-0x1.c6d344d145206p5
++0x1.50fc32aba8311p-15
++-0x1.62eff1edf3d60p9
++-0x1.7019f600db82cp7
++-0x1.ecea83f0b3977p-4
++0x1.6302c49c75ac4p9
++-0x1.1929f6abc031bp8
++-0x1.c6abd4778861bp3
++0x1.df98b1662cf01p8
++-0x1.0a9950e69a9dep-23
++0x1.62f873b46c417p9
++-0x1.6300b68646dc7p9
++-0x1.465a556d29a85p-7
++0x1.63018139cc344p9
++0x1.62f23680e783cp9
++-0x1.0469009da6a29p-16
++0x1.baaef71d93bc9p-22
++0x1.62f446bf431b8p9
++0x1.62ecb5c679f45p9
++0x1.632045a8a7ef9p9
++-0x1.66e894b6d218cp6
++0x1.62ee439267fe4p9
++-0x1.632432d0e9e8fp9
++0x1.5d07807c20bb9p1
++0x1.aa3c546601d68p6
++-0x1.2cdd0674e4abfp7
++0x1.62e9f2b4a0744p9
++0x1.631844f7a96d0p9
++-0x1.2bf936af0bb54p4
++-0x1.848c54c9d08a5p-13
++-0x1.a38c970185777p-6
++0x1.b1d18499dc98dp-27
++0x1.02c7030513fd7p-15
++-0x1.bdcec5aecd2eep-17
++0x1.633c66e5307e9p9
++0x1.6061d09a4b532p-10
++0x1.eb7555bb47463p5
++-0x1.6327e1c51ff78p9
++-0x1.316943f542202p-26
++0x1.6e54069de0b49p-9
++0x1.bd8310798ec44p-8
++0x1.cc4af059aa66ap8
++-0x1.9a5ff5ea279f8p6
++-0x1.9725c1ddcc807p5
++-0x1.6317b78869f21p9
++0x1.9d2f87fc603f4p5
++0x1.213554dad3888p9
++0x1.6302b7464cd16p9
++0x1.493644a3cb32cp9
++0x1.62f1877c1501ep9
++-0x1.6315b48bf51f2p9
++0x1.633cd176d9771p9
++0x1.6328531b0a130p9
++0x1.6304f3ed14c82p9
++-0x1.62e9313aabeb2p9
++-0x1.c1b3f715f7ad9p-6
++-0x1.c43692f7b838cp-24
++-0x1.6323360b63d60p9
++-0x1.562ea1c51f0f0p7
++0x1.600ef62445c5ep4
++-0x1.7f4191bd896cbp-2
++-0x1.f4d3f0d1b85eep7
++-0x1.62fc3361285d3p9
++0x1.3395d7ec1a5dbp-18
++-0x1.3ccc114df227ap-23
++-0x1.5bb910de6973fp-24
++0x1.83f8e51d82968p6
++-0x1.a729d2ed077a7p8
++-0x1.1b005777a51cdp7
++-0x1.62fa736043269p9
++0x1.97df8447ce884p-22
++-0x1.09774517f3944p7
++-0x1.d042739a998a6p-27
++0x1.8a1a0335512a5p-23
++0x1.632396c691df1p9
++0x1.0f45b5a6c79f5p-21
++-0x1.0d68a2dbd6a04p-2
++-0x1.239ff60f28877p6
++0x1.632b742e1d0c9p9
++0x1.ee36b15df2fc4p7
++0x1.7e02f6f960a46p-18
++0x1.f1a48503e33b1p-22
++-0x1.6319f733c541fp9
++-0x1.5f2434426cd39p-16
++0x1.630c71268199ap9
++-0x1.4d2140c9727ddp8
++0x1.8713c2f7dd25ap-6
++0x1.69bb815d57e03p-22
++-0x1.633a822e16e6fp9
++0x1.62f667f0092adp9
++-0x1.ba2396d33e90cp8
++-0x1.62fdf19fea01cp9
++0x1.8195955afb315p7
++0x1.6337149eda940p9
++-0x1.633754b36f51ap9
++0x1.9356878778911p4
++0x1.6318527f69db0p9
++-0x1.ee0742d151b97p-18
++-0x1.88703361b4ad5p3
++-0x1.631675fa3bc04p9
++-0x1.f2bd954cf1c51p-27
++-0x1.d897a0d2877f2p3
++-0x1.630fb3c419c60p9
++-0x1.62e861c33ae29p9
++-0x1.84acb4c33fff9p1
++-0x1.378b42b89d79dp-22
++0x1.2825d1de625c8p6
++0x1.631f833e694f8p9
++-0x1.36853687b4e6dp-20
++0x1.9b9a335db58d1p-21
++0x1.e3928304b1b20p7
++0x1.6316835c7cf05p9
++0x1.6303738c05d04p9
++-0x1.3c0e136ebb1d3p8
++0x1.96cf3250cc987p-8
++0x1.652cb53670db0p6
++0x1.6440639342e8ep-4
++0x1.4512d30165887p1
++0x1.6337b63365473p9
++0x1.449ee05b6ff3ep-12
++-0x1.d1ecf009b1e3ap8
++-0x1.be8e1102ed7f3p-12
++0x1.62fa155e6e26ep9
++-0x1.de739010d6091p7
++-0x1.8c1a422a7d8b8p4
++0x1.465d81dad540ep7
++0x1.3db012d4e554dp5
++-0x1.5329b46ad494ep8
++-0x1.5695b6e7fcd02p6
++0x1.6300e31dc8554p9
++0x1.630252d0050e1p9
++0x1.8d80571cb3337p-11
++-0x1.62e93642f1118p9
++-0x1.fb2f329c0bb96p6
++0x1.9d18d4dc71c0bp-15
++0x1.6311f75346d75p9
++-0x1.7498c57682670p-9
++0x1.f690a6c3716cbp-3
++0x1.d63fe6b5c7c89p7
++-0x1.a2388127452f0p-19
++0x1.0738a10cb2383p6
++-0x1.ca36b52292e65p-3
++0x1.62ea1202d9816p9
++0x1.1e4701aec3142p-22
++0x1.6322f270f7ff5p9
++0x1.62e6b6e528603p9
++0x1.54c5f63777d5ap0
++-0x1.02a544984fd67p-5
++-0x1.ab3a9254e8794p5
++-0x1.6321d7d010e1ap9
++0x1.6335078d8f6f1p9
++0x1.6336a46b6c9bap9
++-0x1.630397a6b37e0p9
++-0x1.baead70b0c2bap4
++0x1.988527731f959p-20
++0x1.cfd2c4878fd4ep6
++-0x1.ce3bf20083050p8
++-0x1.d3e823224ebe4p8
++0x1.31a6458858034p7
++-0x1.62f3821bac3f3p9
++-0x1.1043c4ca951fbp-23
++-0x1.074b075fe582ap-6
++0x1.62f9213f8bc1fp9
++0x1.415f919197b6cp-26
++0x1.d6c6f6b983d6cp7
++-0x1.631537abd1539p9
++0x1.631ca21fe1f5ap9
++-0x1.b276e5fc0915ap8
++0x1.630a6325d4276p9
++-0x1.3c6721ec5fd14p-11
++-0x1.6330b03f5aa48p9
++-0x1.30b15478c1933p-5
++-0x1.630ef52917607p9
++0x1.d20df37103516p-21
++-0x1.a69a66dbd2ea1p8
++-0x1.c69e923a07adcp6
++0x1.6a7f505fea5d9p-17
++-0x1.ca384346f16a9p8
++0x1.32a202fb0895dp7
++-0x1.320c539d2690cp8
++0x1.10c193b381a23p-10
++-0x1.2a2bb2e417439p6
++-0x1.d1b6a4e76701bp-10
++0x1.ba51c02ad2c00p-8
++0x1.4eb503a5e519cp6
++0x1.632b31037059ap9
++-0x1.f03c46b9d44dbp-25
++0x1.0810152df1887p-4
++-0x1.f6a97309476d8p6
++-0x1.f56fa7db86bf4p5
++0x1.df804326360d0p4
++-0x1.141d54326d8a1p7
++0x1.0078e7f84d8d8p6
++0x1.cef6f7b56f8c2p-19
++0x1.0d0ce07e697a5p-15
++0x1.6326673bf0ee0p9
++0x1.3c1dd34b185a1p6
++0x1.ddc3c42ec39bap6
++-0x1.632752aab262cp9
++0x1.630e01d39d028p9
++0x1.dac293f73d850p5
++0x1.631510cd8cc49p9
++-0x1.028ed1e8dd32dp-17
++-0x1.b0bb57c60b6a0p5
++-0x1.783bf33152679p-18
++0x1.c5d5e473ebbbbp-26
++-0x1.915ff68d55569p5
++-0x1.633510495d169p9
++0x1.6312d35913b55p9
++0x1.6d20f44123714p7
++-0x1.6303c0b5329e9p9
++-0x1.62faa7a46d17bp9
++-0x1.633196bcef4aap9
++0x1.6329f34ef70a1p9
++0x1.3877f0875dea2p5
++-0x1.413e167d515b4p-8
++0x1.f017e3196ac82p3
++0x1.230e2092aaa0ep5
++-0x1.7b67d6318a255p7
++0x1.04c9f0425e693p2
++-0x1.1ebe27d65ffa7p6
++-0x1.62f596dff99e7p9
++-0x1.496ec324e967fp5
++0x1.2f75110873a31p8
++0x1.62ec21c319df7p9
++-0x1.487513da26b06p5
++0x1.6329675608d9fp9
++-0x1.1de0320fc0737p9
++0x1.73d4f770b54e0p5
++0x1.62ef2138efd07p9
++-0x1.7cd5764bf11ffp7
++0x1.402ca060e1497p8
++0x1.632cc11415f53p9
++-0x1.631ec3cf4a7b9p9
++-0x1.278e06c2c4ea4p-17
++-0x1.62f55568a253dp9
++0x1.6310e758dfd28p9
++-0x1.3d480025e3245p7
++-0x1.4517c5d83e40fp-1
++0x1.6307c4b105e8bp9
++0x1.630181fc28954p9
++-0x1.8d2e660962aa3p-9
++-0x1.98df07527c0bbp8
++-0x1.a27ee2e3a28adp-10
++0x1.6387b36f3b875p8
++-0x1.05cbb323669c8p7
++-0x1.52594428d68c5p1
++-0x1.4c9235b765b89p-18
++0x1.632a66cd5c94bp9
++-0x1.62fbd7e6a4400p9
++-0x1.728176d7c18f0p-24
++0x1.62e6378477ec7p9
++-0x1.632b611f08364p9
++-0x1.25a7b6bd7d0d0p-3
++0x1.00efd61470d55p-10
++-0x1.6336976d5e8adp9
++-0x1.359ca2cc9fc70p-12
++0x1.5e2af7dfe1034p9
++0x1.62fb546601bb5p9
++-0x1.630544284f262p9
++0x1.0b72226f94781p3
++-0x1.1fb7b0f3e9cecp-22
++0x1.c7b7361a9d625p5
++0x1.dde5178b689c3p5
++-0x1.13d52288f4693p-15
++0x1.1868b4ff4df0bp-22
++-0x1.a9369360a2239p-18
++0x1.d35412055367bp7
++-0x1.35d973c1b14fbp1
++-0x1.6316075c46ee9p9
++0x1.7c96f7ff40e1ep-25
++0x1.2b2582d457cd0p6
++-0x1.a28481bf5abc7p6
++0x1.467a936424936p8
++0x1.a1ca4036cbf56p-4
++-0x1.34b9e14e1af56p5
++0x1.00e73296682cap7
++-0x1.01f6e4bd76df4p-13
++-0x1.d84f005ebcd13p-7
++-0x1.632dc46b7230cp9
++-0x1.724f81862e781p-25
++0x1.62f6f6ca932f5p9
++-0x1.b07147eb43dd0p4
+diff -urN glibc-2.17-c758a686/benchtests/sin-inputs glibc-2.17-c758a686/benchtests/sin-inputs
+--- glibc-2.17-c758a686/benchtests/sin-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/sin-inputs	2015-06-20 21:22:16.303457923 -0400
+@@ -0,0 +1,2913 @@
++## includes: math.h
++## args: double
++## ret: double
++0x1.4e31719759424p353
++-0x1.202ae0c324949p20
++-0x1.0f8c771855528p-8
++-0x1.339f22dc85e76p22
++-0x1.904e251c945aap343
++0x1.e13c5531993aep-2
++0x1.5b05529d780f3p-24
++0x1.41e8f0676cd4ep8
++0x1.411e056bd6bcap-2
++-0x1.0ca910674bec9p11
++0x1.0c7df3a6a06b7p0
++0x1.ef4075c4a3c3bp-11
++0x1.52224219293bbp791
++0x1.c227d66030144p3
++0x1.b2a5d2451fcc7p0
++-0x1.56a2c78366fcfp19
++0x1.0e02525c58105p26
++-0x1.e39c357c7c18bp404
++-0x1.a4b3865993274p15
++0x1.871d4238016f0p1
++0x1.9c0ff32380748p-12
++0x1.89db74b290234p-4
++-0x1.46c0d53d48490p40
++0x1.d2b7221564888p739
++0x1.1ed4f44792d40p30
++-0x1.f4cff05c7df9fp24
++-0x1.130783c5347b2p19
++0x1.f439e3a751c06p0
++-0x1.630814d89b60ep23
++0x1.e641156ac4981p28
++0x1.b09f366ca1e8dp-1
++-0x1.5e9a670db3d03p33
++-0x1.130fb139e93b7p546
++0x1.138355fdffae2p36
++-0x1.20908459428fep42
++0x1.8a1293891effap-2
++0x1.d3fd23a93e82cp0
++0x1.9c95c4a9d8f7fp848
++-0x1.23c7340f1b756p-8
++-0x1.aa82b642da2d7p304
++0x1.1d4f233dfb177p26
++-0x1.b55807b7ef532p-2
++-0x1.971032fa3d5e8p21
++0x1.d4e9e5d2cb6eap29
++0x1.bc051494f7144p23
++-0x1.661bf799c255fp201
++0x1.052840edc4f07p24
++0x1.0551d741e16d9p10
++-0x1.3c365242efbadp690
++-0x1.a1bcf06ea66e7p244
++-0x1.4b20e44b06e11p14
++0x1.3e5112fb02b33p45
++-0x1.89cb01f331009p18
++-0x1.de6db48d64d8ap-1
++-0x1.d0bce02378eb6p24
++0x1.3a9b24b4ad685p32
++-0x1.e0c1554a97eabp136
++0x1.398670a088410p23
++0x1.7c2150ddf2a1bp-1
++0x1.2153d792ddc8bp599
++-0x1.ed7986b460920p34
++0x1.6de72477b695fp789
++0x1.0a1a8631872ccp1
++-0x1.df4c22cbd016fp14
++0x1.1b96201522f46p28
++-0x1.8c8ea54e4ea92p13
++-0x1.e36b62515b546p725
++-0x1.62b4633089889p965
++0x1.e1dcf4a52ec6ap23
++0x1.3d7fb4750aed3p34
++-0x1.ede78680f7292p40
++0x1.96c0917ba637bp959
++-0x1.e051760806b8bp-2
++-0x1.e86f230e487d2p-16
++-0x1.1d3397349ac97p8
++-0x1.ddf236157546cp743
++-0x1.70c031efdc4f9p415
++0x1.233ff3c09d84ap9
++0x1.3edab4c5f3a26p0
++0x1.6c93b47873059p436
++-0x1.3237841f0b0bep237
++-0x1.8760d1293a1f3p-13
++-0x1.a18c37bc89a24p1
++-0x1.3f2766f7d26b6p542
++-0x1.bec6222bee7a6p-1
++0x1.f26ce5fd59845p456
++0x1.5b32c136e1f9dp18
++-0x1.b7ed411870c8fp6
++-0x1.72aa75c106ffap42
++0x1.db2c644144982p915
++0x1.1415b4c83775bp24
++-0x1.25a7566e7f67cp10
++-0x1.9facd2a3d5418p18
++0x1.78e1e40bdde9cp47
++-0x1.5c33011915d84p0
++0x1.ff6852a9c8d2cp22
++-0x1.cc23573b9a1c2p37
++-0x1.824f12c733c82p-2
++-0x1.3cab932de7796p37
++-0x1.1c4df62e7d177p1
++0x1.c1b95025989fcp14
++0x1.832e22eeb5989p-5
++0x1.452f327db73f8p10
++-0x1.290d05147591cp1002
++-0x1.beaa851f05e92p-1
++0x1.ad58373023277p513
++0x1.f93821eb50de3p42
++0x1.1bda02f0f3f9fp1
++-0x1.38d441441abf9p33
++-0x1.624000e54a29cp631
++-0x1.d98c1179cdcb5p22
++-0x1.c44511ec2f8b4p28
++-0x1.30ef1448b9e93p-2
++-0x1.c308f108883c4p333
++0x1.12e7d2402f07ep7
++-0x1.e74a96ae3bb5fp132
++0x1.c31f54a536722p4
++-0x1.56e14428bc436p-6
++0x1.edb3a48cb14d9p-1
++-0x1.f027b77ce5bddp14
++-0x1.0c53346de6015p40
++0x1.b19cf55c66693p14
++-0x1.a19e001e2c6a1p16
++-0x1.0e2865378e3aep3
++-0x1.f65794e9df99fp47
++0x1.e1ee854626d4ep536
++-0x1.940bd6337c84cp-13
++-0x1.2cbf8175aa84ap17
++-0x1.961bc1591e602p3
++-0x1.87b2b0601d2fap1
++-0x1.772c74a581f96p751
++-0x1.59e08127aee39p23
++0x1.a527c23e0a4e1p0
++0x1.eb60950795a35p-2
++-0x1.1e46f002c96a2p-2
++-0x1.9acc80758e051p8
++0x1.a45c62bacde78p29
++-0x1.5d26d76eeb16fp39
++0x1.326df3a5344d2p18
++0x1.adc29195a1e2dp15
++0x1.ff9265140dcf4p89
++0x1.76b20648c5b8dp19
++0x1.5ca4265555944p-1
++-0x1.9cc0e0deeb24bp2
++-0x1.325eb43fe815fp-11
++0x1.36bcc00217c62p393
++0x1.b78b3134ed03ap8
++-0x1.889c50b50e994p355
++-0x1.03938396f299ep13
++0x1.8f76b03720eeep25
++-0x1.2ff306722b5a0p-20
++-0x1.9166f7eede8c9p753
++-0x1.ac96117a61cb3p35
++-0x1.cf3642f86351ep5
++-0x1.65ef55c9472d7p28
++-0x1.d7e391105fa79p978
++0x1.1c6cd319235fap46
++-0x1.aa7970ac6beb8p40
++-0x1.cff1e6c12b98dp27
++-0x1.d0e054e560649p39
++0x1.fe0175557d0dap-2
++0x1.862a0150c14c8p24
++0x1.ab0df0da7ef0dp0
++0x1.452292fcc9743p-2
++0x1.b525530505534p991
++0x1.80e514cb850ebp14
++0x1.e83385b509520p673
++0x1.f73857e61fd2ep36
++-0x1.c140a422bbc7ap10
++0x1.6a3836b018674p666
++0x1.420174d78cfd8p11
++0x1.34bb45e923e9dp1
++0x1.b90f228298b54p25
++-0x1.399605f4445a3p203
++0x1.c95d15ef0ce1ep-1
++0x1.6ed1160abd68ep8
++-0x1.40bbe306fa9b5p46
++0x1.da8267a8f6494p46
++0x1.6407626ac4921p3
++0x1.5635a0a1b6c48p0
++0x1.a2e9e58ba39c0p31
++0x1.d4e0d618fbcfap697
++0x1.973f27485658dp166
++0x1.d17c3143c6d80p529
++0x1.d936e70a9f908p16
++-0x1.0a8ba2bc9bb3ap107
++0x1.17e910c087095p26
++0x1.4e23340e98273p991
++-0x1.5f6a72e7950c9p-1
++0x1.d29737bd89976p187
++0x1.a7db27e5bb0fbp33
++-0x1.dbcf01f3ac92fp19
++-0x1.40aa778cc7865p-2
++0x1.f16163407b344p-1
++-0x1.32b196585adb2p26
++-0x1.c83eb643cf122p165
++0x1.291fa0c5f8d40p-4
++-0x1.7ab62403e1a78p680
++0x1.68f2830723d8dp-2
++-0x1.54cf77dd7d83fp11
++0x1.aee6014383723p16
++-0x1.39ced0bf900c2p-2
++-0x1.e3ce76406226fp-25
++-0x1.7e5623b6bd702p20
++0x1.478a64a7d9020p369
++0x1.8888438f4aa60p495
++0x1.804b902d0663ep-6
++0x1.74c501d7381dcp0
++0x1.65c56626b3f5dp20
++0x1.7ca955c1db56bp-2
++-0x1.3257f754500c2p6
++0x1.93b0e2b87951bp807
++0x1.78c226a06ff9dp881
++-0x1.2a61e2ec72661p26
++0x1.515561fe9c724p109
++0x1.f04611a3f263cp-5
++0x1.ef0196a9c0554p25
++0x1.58bb53a309d66p147
++-0x1.b67d94ed2b039p22
++-0x1.a08f75ea1519bp-24
++-0x1.9b14260bb0430p855
++0x1.018fe4f13cc1ep563
++-0x1.42f125d031ba6p663
++0x1.7cdb837d7a326p8
++-0x1.885d54001463ap0
++0x1.e315d2bcdedaap0
++0x1.cbd6f6692bc81p-3
++0x1.f5be652eb0059p4
++0x1.260be58c40562p84
++-0x1.0fe3d67fb0d33p0
++-0x1.a665d08300b9bp21
++-0x1.879cf57ffe1b5p18
++-0x1.8896d5a45e3d5p-2
++0x1.182964987bd99p15
++0x1.ae4ed76c12ddcp-1
++-0x1.2b387213c40c0p10
++-0x1.190326f5c5c9bp506
++0x1.fc8ab2a922d40p56
++0x1.84ba0399b0479p34
++0x1.196320ea67543p801
++0x1.c6f8306ba2e53p541
++0x1.f79d44a0719afp7
++0x1.8ca3c3000d226p7
++-0x1.c434b33e05c76p-5
++0x1.868d10df4adcbp-2
++0x1.d365237c3ee46p-1
++-0x1.2f53a0332a1b2p949
++0x1.23fb93f05a5acp40
++0x1.7170c1501bd5ap-26
++0x1.bbb7d3ba1b005p650
++0x1.41c1575e5df36p6
++0x1.46d3f4d9169a3p39
++0x1.c9fa657c758adp16
++-0x1.c463d1e0760e3p5
++0x1.0ef4e317bbeb3p45
++-0x1.6b8f175a47735p1022
++-0x1.9cbcb495f934fp0
++0x1.b035202e76644p429
++0x1.dfea1413ef865p-1
++0x1.c30c667184d73p4
++-0x1.6e4350ad76c38p6
++0x1.11023720f1a27p-17
++0x1.7d39738644047p5
++0x1.08e8904336050p26
++-0x1.a0f4632092bf4p31
++-0x1.31db61e58f2c6p327
++-0x1.216362a55985cp21
++0x1.59afd473ae079p620
++0x1.a67b229194875p0
++-0x1.102f35c99abdcp408
++0x1.7c8930f344010p8
++-0x1.236814c694776p26
++-0x1.69695069a7660p-2
++-0x1.4833d2eb288d6p23
++-0x1.6253b6dbdbdf0p-2
++-0x1.cebd11d7b8c60p23
++-0x1.6e47719d8cbdap23
++-0x1.bc0e60a3d372cp-24
++-0x1.aea4a37abf07bp-2
++0x1.a424422079a3cp0
++0x1.5f4ad2d1ae141p0
++0x1.9d1c7329661c5p4
++0x1.c95da42d6a20ap5
++-0x1.637d860a40277p911
++-0x1.777bf17319cfep11
++-0x1.b8f294e0feb0bp5
++0x1.f8dab5af1a40fp44
++-0x1.4e822143a7e22p-6
++-0x1.30f1a29272a12p0
++0x1.ec9c45a34f565p548
++0x1.5b2031d5f55c2p9
++-0x1.596311decda04p24
++-0x1.88dea317671eep84
++0x1.1672932dd9083p-1
++-0x1.dceba122a6c97p3
++0x1.2a5880f1f8375p15
++0x1.db8507740bf47p19
++0x1.51a6f417b2d0bp-25
++0x1.17296500d6e03p26
++-0x1.05a473760addep-1
++-0x1.95e0b2c256513p20
++-0x1.150cf2ae9f714p19
++0x1.f69660154e06fp0
++-0x1.9aab65d69ac86p25
++0x1.097f676316fabp8
++0x1.e60dc42ce17c8p356
++-0x1.6f236799d0618p18
++-0x1.ddef96de04f2fp-3
++-0x1.4f76b349a0943p-25
++0x1.e41e1113025c6p779
++0x1.026094b0f4060p17
++0x1.69b29144b9540p-1
++-0x1.b55194638c050p34
++-0x1.b78f56c9abb41p38
++0x1.eda3e2bbf366bp4
++-0x1.dd66f0d648089p-2
++0x1.f70f54c519e03p5
++0x1.b2ed91264f4b0p736
++-0x1.7e89b7cbfeef2p790
++0x1.9ebdd376c6af6p669
++-0x1.31bcf466a0f71p38
++-0x1.db600765a5820p880
++0x1.83720115e49bap19
++-0x1.72f7158f3031dp485
++0x1.b493a52c77e8ap262
++-0x1.61b575ab7671cp-1
++-0x1.d872154df6929p25
++-0x1.966b0439fdb8ap949
++-0x1.48ec6657af67cp-2
++0x1.b79c505f0f0cap0
++0x1.8cb2918d277b2p556
++-0x1.57d9c07b3aff9p-1
++-0x1.928615736e2c3p0
++-0x1.89a736dbeb43ep273
++0x1.78484185770a7p-1
++-0x1.9716820109e97p82
++0x1.e772957d51225p36
++0x1.082be0a48a4ddp23
++-0x1.fcb8f111481cbp-2
++0x1.9221f605bd679p8
++-0x1.4901b4e9ae99fp19
++-0x1.107b70bf37787p19
++0x1.116bf43b5a0c9p-1
++-0x1.aaf0763749048p25
++0x1.9958546576d59p2
++0x1.7f1374d7f65b5p13
++0x1.2b12a66cfcbfcp24
++-0x1.032e0018d5e31p93
++-0x1.b47f10ba68386p-22
++-0x1.3d2b81e149a51p-1
++-0x1.421ff5c85a241p24
++0x1.e600548bb210dp-18
++-0x1.678015108956ep-1
++-0x1.e02ab7babc6e4p21
++0x1.209470304e32ap9
++-0x1.e80132771d75dp0
++-0x1.a3344487bd369p27
++0x1.e1eb2267b7fdcp496
++-0x1.7721478b2d466p14
++-0x1.9f701607ace6bp32
++-0x1.3b5b74d34ada7p-12
++0x1.2477a5441ffd0p9
++0x1.d66a76c489eb1p3
++-0x1.5bed268942217p0
++0x1.2f7b251d454efp3
++0x1.7e30f5f452228p10
++0x1.eb98508ea666dp-10
++0x1.2fcfe5c7591f1p0
++-0x1.a0ac164173a04p17
++-0x1.468a06a5522b9p21
++-0x1.5824c7106d618p16
++0x1.eb81c45f51ccdp40
++-0x1.a3e486adaff0ep479
++0x1.1974e0f299718p592
++-0x1.e5a1e74789b73p45
++-0x1.619690cc59a49p807
++-0x1.aebff5a970e6cp15
++-0x1.bfffc1c94a5fcp203
++0x1.c6ca100bb7092p674
++0x1.b95db5be3c216p-9
++0x1.1f43a01f3499cp875
++-0x1.de5737f187a25p6
++-0x1.b0bb15e917960p24
++0x1.26c0670524e93p17
++-0x1.809321a40d4a8p-1
++0x1.9dcd443d72518p484
++0x1.6dbde56f8d28fp28
++0x1.0842a4feb907ap1011
++0x1.e22643ea2d366p840
++-0x1.5a6d36e2f784fp0
++0x1.941a537fbac6bp-19
++0x1.735171a8af18ep390
++-0x1.6c21854e6ac4ep-2
++-0x1.4966b64a86f86p13
++-0x1.9151a1dcc653ap-2
++0x1.d39194332f055p-2
++0x1.3441f2d9046a4p45
++-0x1.63827188db8d2p27
++0x1.6638414088a1ep-1
++-0x1.a6bfc2a427d20p12
++-0x1.a69f971d4e130p25
++-0x1.d3300078065d9p46
++0x1.4f37818518d61p356
++-0x1.ad6bd45d98764p32
++-0x1.2fbf90a8a2c99p877
++-0x1.ff71d39bd81cap22
++0x1.5fdec455fd1a8p20
++-0x1.226887072ca0ap377
++0x1.f72e43d6cf555p951
++0x1.dc26c361d9df5p2
++-0x1.0294c7e317c97p24
++-0x1.7ed5874833105p-1
++0x1.719536cabadbep803
++-0x1.ec79d4096ea8fp27
++0x1.eec6d47320e53p261
++0x1.a1f7f00ab9ef0p19
++-0x1.131f85094d6b2p-3
++-0x1.62fd06cec62e9p920
++0x1.3ac61495513e6p-10
++0x1.38a2e3a18c65dp-1
++0x1.4a7fb2f2fb6e3p-7
++-0x1.2d23b2b1b0716p467
++0x1.654b17175f19dp-17
++-0x1.9e9791bea55b9p12
++-0x1.1ba351d709f03p-20
++-0x1.17cf2637f69aep956
++0x1.e97fa01af0da4p12
++-0x1.2fc4818397878p805
++-0x1.cde053fdf18dep33
++0x1.1e57e7c749fb6p907
++-0x1.b6423794860bcp-2
++-0x1.5f6ab21f70061p39
++-0x1.a8d663f09366ap694
++-0x1.ec4db28b5e248p-2
++0x1.56f98549fccb5p7
++0x1.94cd10662c26cp21
++0x1.22fce3cdc1d23p258
++-0x1.c59f864bc9d01p336
++-0x1.265292b9f7156p26
++-0x1.f079443577dbbp24
++-0x1.361ac7035cb65p1
++-0x1.e74096e5beb90p12
++-0x1.7230603fa3279p47
++-0x1.e9cbe08e63864p0
++-0x1.6ebb6528c0777p27
++0x1.5c5af7dbb0328p928
++0x1.fa7c83278e735p19
++0x1.331b21b0a2c88p2
++0x1.f56ef59955713p32
++-0x1.248d826402212p822
++-0x1.2a96722b314a5p11
++0x1.ce7975ddf3677p-19
++-0x1.954ab0cb2f1dfp0
++-0x1.ee8861dc9cd21p1
++0x1.b8c9d509b7774p0
++-0x1.accac3020df12p24
++-0x1.c0b1048baa584p13
++-0x1.247b04589de3bp32
++0x1.7908215d3793ap-22
++-0x1.8a0a5596f99e3p283
++-0x1.30e8b0467a611p-14
++0x1.7688417c5e950p25
++0x1.071177de1d758p-1
++-0x1.55a7203e5bb54p-11
++-0x1.4beda7f02fc58p0
++-0x1.8e6c752f1efcfp30
++-0x1.c96c975bef932p31
++-0x1.8123d67897403p24
++-0x1.bd6ae1f640868p426
++0x1.9fecb3cbf41c7p490
++-0x1.a15bc3ae996e6p8
++-0x1.05b3619b69842p14
++-0x1.0442141ed67adp13
++-0x1.e57d71c2d90aap6
++-0x1.509d16f50ec01p544
++-0x1.9010e6a39e0aep831
++-0x1.e7b93430ad1d5p1
++-0x1.5f96469e388c6p418
++-0x1.2d5ed5dc35c75p134
++0x1.85cd87f4cc346p-2
++0x1.8b37f442cf6e9p0
++0x1.9b1ae7a4ae625p0
++-0x1.53c115a7be97bp38
++-0x1.ff32d7edcd704p-14
++-0x1.953fa5f60bd50p8
++-0x1.f45e927d7ec3fp-1
++-0x1.45de4402c93edp-1
++-0x1.8fab8457e4c73p2
++-0x1.e062920d6e2b6p-2
++0x1.d85f469b95361p577
++-0x1.98b8e736546f7p21
++0x1.baf561d55a741p17
++0x1.a72bd7daabe8bp105
++-0x1.1ef7f1c2e5c9bp-18
++0x1.0435b73182174p18
++0x1.561e661a58867p-13
++-0x1.2f150336c7ec0p3
++0x1.ac91a59fb0bcap3
++-0x1.078942a38f20cp1
++-0x1.718d90b3efe95p-1
++0x1.8dba84562c1a1p-25
++0x1.9f94a2a92cc63p25
++0x1.529ab6f344416p15
++0x1.a005943ddb8eep0
++0x1.ac93d3c825de4p19
++-0x1.1140b5380990ep-2
++-0x1.8ef2408d49792p9
++-0x1.ca5042b95a883p11
++0x1.7c287447df731p599
++-0x1.e15023bd4744cp210
++0x1.657882484d13fp23
++0x1.e88f328b258fdp23
++0x1.855dc0e37b99ap395
++0x1.598187ea5ae51p33
++-0x1.637ae365b4384p-1
++-0x1.1923e00bf8e04p1
++-0x1.5f4ed07d8a997p16
++0x1.268767573e897p22
++0x1.ad3f47ad94f57p227
++-0x1.05cc81c2d4884p25
++0x1.bc8e47678920ap0
++-0x1.f772a716fb113p-22
++0x1.bcdc73da531a3p-7
++-0x1.b526f046be5e2p-2
++-0x1.f888c3eda4f44p92
++0x1.6f90f7637cce6p924
++0x1.6ae52307d05c4p18
++-0x1.40ea87b7fb3a9p2
++0x1.270c426bb2c09p38
++0x1.d82674e4cec0cp874
++0x1.2dc86702ce991p122
++0x1.e15520525a088p19
++-0x1.ea28530234be7p17
++0x1.9ba9b4938d1fep8
++-0x1.8dcf703e176e2p12
++-0x1.cc265742b5c6ep0
++0x1.0065329f84432p554
++-0x1.161137df0d91bp1
++0x1.8fb0027634696p0
++0x1.b9fa22d8a4cfep0
++-0x1.667ba642c426bp628
++0x1.6ea694c30205bp27
++0x1.49f3651093200p822
++-0x1.79f5a0df3fcebp667
++-0x1.b53dd3f934f2ep427
++-0x1.0565b1cf6e355p20
++-0x1.7ef691c9c2091p-1
++0x1.2f6062f73a03ap-2
++0x1.d4f4c36b692b3p3
++-0x1.945c555415314p3
++-0x1.e1efa2575c11bp284
++0x1.daa7f3648ccb3p680
++-0x1.5ad77206e5e6ap-2
++0x1.c79a40f6473f6p29
++0x1.48fcb0b8cc309p73
++-0x1.c0cb8090ed1dbp-8
++-0x1.9411631355aa0p2
++-0x1.4a1e129f65869p234
++-0x1.7619e7382b57bp-7
++-0x1.80f5c7807337ep5
++0x1.e30ba2147b72ap23
++0x1.faaab405c970ap10
++-0x1.8db3b01985f05p-17
++0x1.b155055e2c9bcp-12
++0x1.7b1531e9dea19p16
++-0x1.3f4041f462a08p35
++-0x1.809d32d7edc1cp18
++-0x1.261472134e23bp-6
++0x1.9a6785f0bd19bp406
++0x1.8227140a3e10dp491
++-0x1.ef5aa000c8afbp845
++0x1.41c582661c062p2
++0x1.67fca3ca351fdp-2
++-0x1.eb4e319782bc5p0
++0x1.2f2de7f12ed11p0
++0x1.f5a6b78c7b2e5p4
++-0x1.1297c67142642p1007
++-0x1.e1f4a032a77f6p0
++-0x1.088754e6657a4p1
++-0x1.75e1d72e80fbap30
++0x1.78b350a1f00e8p22
++0x1.271167a076a83p44
++0x1.e70f437159d71p-2
++0x1.87e957b57fa84p75
++-0x1.677a102f413c2p0
++0x1.8fc497cbb0095p-20
++-0x1.d25da5b15d323p-1
++0x1.76e7f1f9d8687p72
++-0x1.36d924ab23541p25
++0x1.b6964733ca4b5p1003
++-0x1.fb16015e8942bp-1
++-0x1.70a972441252ap981
++0x1.7e76507a8675bp-17
++-0x1.1cd0058f54456p122
++-0x1.c0fb733c7fc31p-3
++0x1.9eeeb2ae4b3ebp710
++-0x1.adb9d02c6d361p1
++-0x1.8043944ab395cp-2
++-0x1.3929134a7aa22p6
++-0x1.afef537037707p22
++0x1.f95dd74ff9bd0p265
++-0x1.46ee17ceaa71fp-1
++-0x1.7f6ea716e7feep317
++-0x1.1e22240f16846p-1
++-0x1.20a474cb7609fp24
++0x1.70e043acc61e5p16
++-0x1.7eefa2d58eb0ep337
++-0x1.5f0916075f895p25
++0x1.587ca1f01e2f3p4
++0x1.ec1f57978ca5fp-3
++0x1.03b1a7547b5f9p313
++0x1.b92e15306ee93p-1
++-0x1.b52f21e5fe14bp-17
++0x1.0e10b6ab5a214p-8
++0x1.8c4b96284f26ap24
++0x1.5f0360b127d60p-1
++-0x1.9b60e1c781a78p501
++0x1.20dad3315b635p586
++0x1.34af961f320dep220
++-0x1.300e85c202993p41
++-0x1.4d8eb16113ddap-6
++-0x1.73d644b4030d5p0
++-0x1.368a658fa09f8p2
++0x1.0c89d6b268d24p20
++0x1.bb1a765ce28fdp47
++0x1.8f4006e283f2fp13
++0x1.92eb72301aaadp-20
++0x1.d3c0d2e0def1cp14
++-0x1.5bb3b4c71a538p268
++-0x1.64f9c74e4f02cp409
++0x1.092eb44978cc3p1
++-0x1.871aa3260142cp12
++0x1.b2231204c9adcp14
++0x1.169a93b39b7c8p-2
++-0x1.aea221c5784dep439
++-0x1.bc398053cf866p725
++0x1.5c55063fa98a0p26
++-0x1.6d60d14fab3ffp19
++-0x1.61a907b23322ep26
++-0x1.3e2aa7e0685c7p28
++0x1.1870b10038923p-1
++0x1.3a52b1e143ab8p28
++0x1.7bb547d4e8b19p18
++-0x1.1f24978e6140fp507
++-0x1.a95f874fe9ca8p42
++0x1.65ecb6f9f87dap0
++-0x1.71a20409c9197p0
++0x1.385a123a7bc69p-22
++-0x1.2f9e350b93eefp0
++-0x1.1485e2b270712p19
++0x1.3ac6f562d19b3p-2
++0x1.6476142969e6cp325
++-0x1.56463176cb1a3p283
++0x1.20e5f768ccce0p0
++0x1.319f01a378b2cp2
++-0x1.8969458ad3464p-2
++0x1.b1f7254761461p-2
++-0x1.6cf2f4320d01fp0
++-0x1.7906d597ec6d3p806
++0x1.4efb250a0b393p-20
++-0x1.6c12c573e5d7dp5
++0x1.daafd30c1507cp24
++0x1.9d6185d00050ep996
++0x1.934ac1f1b9ed3p231
++-0x1.1a45e56568952p-2
++0x1.65bfa7b4278fcp16
++-0x1.1aace0acffbdbp1
++-0x1.68d463926e0dep-1
++0x1.b1dab378ca1c2p25
++-0x1.506cf2a809fddp704
++0x1.358a15ae4294dp-13
++-0x1.42c3c05c5826ap390
++0x1.2fcbf708a00e3p3
++-0x1.3677e200ab18ap-15
++0x1.2873c5d55c2cfp-22
++-0x1.2724526c9752dp-21
++0x1.8d9b06275b83dp12
++-0x1.b12f058122586p181
++0x1.527573274a8d4p8
++0x1.195f40a45ebb6p0
++0x1.27e087658825dp-1
++-0x1.2fa5c194bf350p8
++0x1.aee9b799e7960p9
++0x1.e7068384c91e9p19
++-0x1.9c15b7bbbe8efp786
++0x1.5e87f540349a7p36
++0x1.4c6543847dd73p496
++0x1.c589e3ee9a17ap33
++0x1.c807c6669378cp-1
++0x1.3adbb27f40e7ep0
++0x1.5b0442a02b1cfp23
++-0x1.4603d2868b08bp-2
++-0x1.28a4e5eda874ep277
++-0x1.a25a728b6e591p147
++-0x1.12e453911f316p808
++-0x1.e2b24769906d4p32
++0x1.f884d2ae76492p-1
++0x1.fda586dbd3223p18
++-0x1.3f09d311f4081p893
++0x1.289fb3f9141abp16
++-0x1.41f333066913dp19
++0x1.dee9e7bf987c9p976
++-0x1.32a5b4fa2e6b2p0
++-0x1.e20aa461c2157p34
++-0x1.4a66f2ea0a5c0p45
++-0x1.5ff44343e926dp0
++-0x1.c88e22ba7c82cp0
++-0x1.4026b50f54360p0
++-0x1.7afb6345c0c15p24
++-0x1.c17db7ae50ae9p8
++-0x1.120ae360cb67dp11
++-0x1.4cb780f424d93p13
++-0x1.27eb05143f027p25
++-0x1.20c813e3aed73p709
++-0x1.86d2e433d192fp889
++0x1.0961e47b86039p0
++-0x1.8abfe08bbc72cp599
++-0x1.d6de9255f915fp0
++0x1.37c9063f4c54fp34
++0x1.ef29e5cc63bd3p8
++0x1.b0e307f445021p34
++-0x1.2dd254b5abc94p5
++0x1.774825660c90bp-8
++-0x1.059295ecd45d1p0
++0x1.4fedc45fad571p26
++0x1.f40711380db13p7
++-0x1.b95cb138eca91p35
++-0x1.51ef12b10b034p-2
++0x1.ed7034a4ba5fdp26
++0x1.3407c59c49bd0p0
++0x1.103160b4631c0p21
++0x1.e19f639692ac0p261
++-0x1.9fae70cb2d56cp31
++0x1.38ee669963b88p21
++0x1.99cb42f6c9388p355
++-0x1.bcda7573c7ce4p927
++-0x1.6291301099b9bp30
++-0x1.d782c2e2c92bbp15
++-0x1.784e8037661c5p19
++0x1.36744643c4a42p36
++0x1.c381c73ba6b44p5
++-0x1.8e6584afbb6bap29
++0x1.60ef319355c1dp478
++0x1.754fa41b33911p888
++-0x1.dc27a33bf6306p-18
++0x1.b33d46d5e22fdp18
++0x1.2bc62656f694ap827
++0x1.3d75b544d079fp-2
++0x1.e054c651bc3dep960
++0x1.1a72c20a37235p14
++0x1.aed6f37f159a8p4
++-0x1.01992507d64dcp11
++0x1.3b56f71608c5ep0
++-0x1.d7e042bfb55fcp16
++-0x1.eb3e0216540efp894
++-0x1.4fd1c1f7dd5c2p46
++0x1.02f127955effep0
++0x1.cdbb710ee6b4bp40
++0x1.090911a7b9637p-2
++0x1.d74c64e6dda8dp29
++-0x1.98a6009907880p158
++0x1.a5cc91ee0faa7p41
++0x1.943d06841a6c8p34
++0x1.8ac7d5e70a232p-2
++0x1.ba2c04cc3ef8dp3
++-0x1.b58f95aa564d9p0
++-0x1.973e5700e6b4bp20
++0x1.b7a3524725846p0
++-0x1.128721b885a46p17
++0x1.bc6b54987973cp19
++0x1.b4ad251ee68e4p-2
++-0x1.50fc219493101p842
++0x1.d58ae142787d9p-1
++0x1.316d83c961b95p4
++0x1.34d343338acc5p9
++-0x1.8045f5444a6b6p24
++-0x1.839b72308621ep1
++-0x1.0e7452e31d1a4p17
++-0x1.24c7e44469182p1
++0x1.da29e623ef67ep-2
++-0x1.0dbce3889c2c5p800
++0x1.3bcca50129997p-2
++-0x1.6b0ab247362d3p806
++-0x1.600922864a5cbp12
++0x1.0389370f595d0p-17
++0x1.7ccf72e3efcffp23
++-0x1.cb8b1074ff472p-2
++0x1.b7a66671d9bc0p557
++-0x1.c55a54873485dp5
++-0x1.ed643182b4f8fp-1
++0x1.3d6fb3a57bc7ap-2
++-0x1.20776336f7781p1
++0x1.42b72105c6ed8p612
++0x1.06a4d6dd3a5c4p-2
++0x1.830a33db5faf6p0
++-0x1.bec3309e61a85p25
++-0x1.cdd4202956c13p9
++-0x1.456894b0fe5e2p-9
++-0x1.5e75c7bfd1c26p13
++0x1.2511840847d4ap1
++-0x1.311d36a26ce96p25
++0x1.7b3583c108d12p368
++0x1.2b3ea65fb3fb0p3
++0x1.9d531434f54aap1
++0x1.b097301ac5504p16
++0x1.8c8b55474e5dbp0
++-0x1.1e79f18b6a2e0p44
++0x1.ff9ad1733ab79p-2
++0x1.475ca4f6bbc44p937
++-0x1.bf0114ace534bp177
++-0x1.b91072375d8a4p-2
++0x1.84fcc3902af81p971
++-0x1.81eec4a99819fp18
++-0x1.18a9e42a54f34p0
++-0x1.4019e136b83dcp-2
++-0x1.78f283c624525p-2
++0x1.2701b12d4f844p22
++0x1.36fc85bbb6070p401
++0x1.6b35225fd0908p94
++0x1.e6e2131951debp279
++-0x1.b82af00e76418p14
++0x1.be658653e6766p256
++-0x1.385b70831cafap29
++0x1.d3f5c24cbc413p-2
++0x1.f93972d50cfb3p-1
++0x1.3b7813b2681acp0
++-0x1.7f27f0e41cc47p24
++-0x1.eb9b45f3358c3p9
++-0x1.236842aae5290p1
++-0x1.69135229dc5c9p4
++-0x1.a81f93c59e748p11
++0x1.21ed75692e14fp32
++0x1.7ce2f7e7f462dp30
++0x1.f9bfe445d11b5p2
++-0x1.80d5201176135p10
++-0x1.6502724d070d2p26
++-0x1.756325ea0de70p357
++-0x1.14982063b0f3bp18
++-0x1.b62bd1473f7b4p683
++-0x1.cbc8c7e76a18dp22
++0x1.01ff77285718bp-1
++0x1.149063aaa5e7fp26
++0x1.36a8923cacda4p25
++-0x1.3db72554025e2p10
++-0x1.445e35540ca90p493
++0x1.51bf04c8ae132p-25
++0x1.6f5394c33dd94p5
++-0x1.1ff746f462c25p-21
++-0x1.109b702903094p10
++-0x1.d5c5e7e8246e0p2
++-0x1.52b9318533d0ep8
++-0x1.73c380e23710fp11
++0x1.63a440fa11bbbp230
++-0x1.5d2961e3f707ap704
++0x1.8b42849cca6abp1
++0x1.8bc2e1537e745p10
++-0x1.406c125032124p701
++0x1.50850019bb449p-7
++0x1.7df5d165411e6p-21
++-0x1.c089e1db09fa1p24
++0x1.fd15959b89b57p18
++0x1.722ac54ce4ca6p28
++0x1.9ed9928e455fep-9
++-0x1.58698376f1cc9p4
++-0x1.0cf1601dabfd0p-13
++-0x1.23afd7ed7fb9dp-1
++0x1.be965057282e2p112
++-0x1.696652132ab94p18
++0x1.77458321cdbd7p549
++-0x1.417ae73977eeep-22
++0x1.85abf3e024aacp-12
++-0x1.b9cc71340e0abp-1
++-0x1.2f5e246efd99ap1
++0x1.700f73433df7ep-1
++0x1.6016960e7dd29p205
++0x1.fb0380828c4cbp39
++-0x1.630bb6882ef0cp8
++0x1.f6646483933acp-1
++-0x1.aa81e7a2dc38fp614
++-0x1.0a2d10e978ec2p154
++-0x1.7df4b33b5344fp5
++0x1.d702811d5c6abp984
++-0x1.ec22926e5a82ep-21
++0x1.34039400fe24cp11
++-0x1.bd6547ae731d4p0
++-0x1.ab8f03598b253p-1
++-0x1.2c2aa517d17b7p152
++0x1.d5afc263e2f26p7
++0x1.2f1b33b063f94p0
++-0x1.45a626aafd49ap45
++-0x1.a819d0880c43ap8
++-0x1.6fd166b7cf8a9p28
++0x1.8f14c6d951680p-2
++-0x1.f95a164067f69p-6
++0x1.89b4a08a38cb0p14
++0x1.a4b996c33a6bdp37
++0x1.4aeb0322ec440p-1
++-0x1.a420305ddf0dep20
++0x1.5b68332d5fe77p189
++-0x1.6929678422be5p19
++0x1.dd2126a36ab02p10
++0x1.98f53759e6cc2p776
++0x1.c327955ab4d9cp600
++0x1.c152d36d52060p-1
++0x1.794e9268cf1f9p-3
++0x1.0fd9b34cf9e14p0
++-0x1.f1c2c3f721d38p24
++-0x1.c2f18449c0b1cp-13
++0x1.1f6f72691226fp26
++-0x1.9eba60739e9fdp22
++0x1.55e6b0539f3bap982
++-0x1.deaf371270943p6
++-0x1.9d3ae228b1311p12
++-0x1.fecfd748896e1p0
++0x1.fd5a059f9c172p-2
++0x1.c7a7c29f81427p24
++0x1.36ca81fa9a1adp684
++0x1.8c3ff49ca4904p12
++0x1.1d0d849df4253p1
++0x1.f52c4094b100fp36
++0x1.3349a0a047c9ap24
++0x1.397f1147f1b4ap-7
++-0x1.c7ea6242b1fa7p12
++-0x1.01f5933842764p38
++0x1.81c1a5562ef0dp29
++-0x1.71a012ad6b2dap-2
++0x1.4e0114b92be2dp846
++-0x1.ea54b35d3f7e3p11
++-0x1.8758771ca14b1p580
++-0x1.a17a467fd6aadp8
++0x1.f18514b3d4bc4p0
++-0x1.acfaf20b2d004p15
++0x1.5985717523c39p8
++-0x1.8c04a7df8a0dfp-1
++-0x1.2f9d510841af2p-1
++0x1.153361ad245bep11
++-0x1.85103699de39cp16
++0x1.2df047f79c291p201
++-0x1.489e6110776d9p0
++-0x1.6b8242e1f61e9p-1
++-0x1.9bb0554427766p995
++-0x1.5661e39faa45ap14
++-0x1.6c4da055e41c0p24
++-0x1.d4e2a3a4090cdp175
++-0x1.e5e790e8baa1bp-14
++-0x1.129e75c7aff37p6
++0x1.5375038c8dd70p27
++-0x1.c04a313036171p992
++-0x1.e12566734cc7bp976
++-0x1.ed8b413aed34dp716
++0x1.a3e0646c6265dp738
++0x1.74a4333e87a2bp9
++0x1.5d02455d1bb3dp15
++0x1.712c9673a7d13p-26
++0x1.4840b2e17f6edp1006
++0x1.2053e5b7f6eedp26
++-0x1.b5a30398cb230p-14
++0x1.fe83c131a134dp0
++-0x1.63f1305740debp8
++0x1.ff796761e132ep34
++-0x1.7d193269b00f9p22
++0x1.94e78186aeac5p25
++-0x1.278cb595be809p-2
++0x1.d4ccc2ff780b8p42
++-0x1.ef8b614873906p0
++0x1.c8b7f506376c4p33
++-0x1.97b4b07142435p-2
++0x1.1efd54bfbe9fbp100
++0x1.1560d1a87593fp27
++0x1.5e8c0545cfcf4p26
++0x1.9c69e6fd6459ep637
++-0x1.4b25e05d58b46p863
++-0x1.81ec10a304cf8p774
++-0x1.1f9604ed5dc18p-1
++0x1.becfd05c673b6p20
++0x1.bde267b487883p183
++-0x1.d917f2a793ddbp5
++0x1.e85f16573a72dp919
++-0x1.0cc5657e9b661p1
++-0x1.446982673e881p9
++0x1.e84e42461caddp326
++-0x1.a479565cee358p-2
++-0x1.2e7db1f9f89dap3
++-0x1.6807f62188ee4p19
++-0x1.f9a73671b8d07p1
++0x1.1beef08374679p0
++0x1.1dafc2f5778abp25
++0x1.9250a762e1ba1p20
++0x1.f9812520917ecp12
++-0x1.0da0d4531229dp416
++-0x1.72ff65f41d183p-2
++-0x1.164d766bf45fep19
++-0x1.3c7a02cb96b62p-1
++0x1.3fd9603c15434p-1
++0x1.6ed333c5adb05p-15
++-0x1.b35ad0e907efcp23
++0x1.ee8f5619a8d0cp-1
++0x1.4523c70e30a5ep45
++0x1.74f607e52d238p-1
++-0x1.0fc6108958cecp1
++0x1.9ccf57ca88ef6p621
++-0x1.0809650c00191p20
++0x1.ccf645ad30624p-2
++0x1.40a22315ce02ap10
++-0x1.4b4f6440c04d3p0
++0x1.e846d4c3490f2p593
++0x1.f92f20b5d8cafp-7
++0x1.b90bb5fd78cd4p786
++0x1.16afb2cf4deb8p538
++-0x1.1aa4248addfffp5
++-0x1.587286bdceb7cp1
++-0x1.2ce667139fd6ep26
++0x1.2fe84506f5385p963
++0x1.3acb00c272448p-16
++0x1.e0a3c2d64fee3p719
++-0x1.b487d227fdec7p-2
++0x1.faa152bb52391p18
++-0x1.e79f5357231aep15
++0x1.c65bb6c53d3dap-23
++-0x1.ddfa475af1db1p674
++0x1.d15766ea575b6p754
++0x1.cc77931bf80adp1
++-0x1.39d87172d2d3ap955
++0x1.eee6f4a4110bdp829
++0x1.a81e612359044p-12
++-0x1.2876e2ba2738cp-2
++-0x1.281e96b11431ap20
++0x1.1679654620215p634
++-0x1.c19584949678cp0
++0x1.b8da124791494p-2
++-0x1.e18f25739b74dp607
++-0x1.4b5b316466f4ep-1
++-0x1.c3f2d4a621a5fp12
++0x1.7ca620f840a2cp828
++-0x1.e2a1c45179529p-6
++0x1.03b8346424511p-2
++0x1.b135621e69725p551
++0x1.28f6635324af0p1
++0x1.ce24171b296d6p23
++0x1.7fca444e86945p24
++-0x1.de18458a2ee35p699
++-0x1.10aaf42a372b8p-10
++0x1.3175567afe205p25
++0x1.b3ea9658f5c1ep-2
++0x1.5cdfe0c3508c0p27
++0x1.718706e31a168p-12
++0x1.4b2475de57328p581
++0x1.7e06534da3912p26
++-0x1.bc4683ab53857p24
++-0x1.dcbd172495052p-11
++0x1.953bb577e3442p8
++0x1.c704b77880f42p960
++-0x1.e1cdd796bd369p25
++0x1.c6f0846cfe9e4p-2
++-0x1.6a35f6969e604p22
++-0x1.648dc686aa66dp-1
++-0x1.7362b1dd212ddp198
++0x1.7311f4cc57a57p-2
++0x1.437536a391f64p-16
++0x1.989c90dd19204p34
++-0x1.8382a5f03a8c2p-10
++0x1.ef9bf32947b5ap8
++0x1.4e8642971464ep9
++-0x1.873e050c19a35p403
++0x1.3b96e14be3ce6p9
++-0x1.acdfb08fca270p9
++0x1.a48c61da23d9ep255
++-0x1.f23d367e7d312p-1
++0x1.8657c785cda01p21
++0x1.b834d785cb551p0
++0x1.2e9e363624743p-1
++0x1.d6bc40afd2e5cp1
++-0x1.b28dd3c03580bp25
++0x1.464f2654be753p15
++0x1.0e66174c1a5b8p57
++0x1.9513603120188p-11
++0x1.d8f947940be48p462
++0x1.f555e2ba605b4p15
++-0x1.39e4b7d1c13c1p2
++0x1.77b477c4ce082p450
++0x1.db29e26cbb155p12
++-0x1.09437624580b4p1
++-0x1.54e64408c718dp-8
++0x1.bc6023572bcc5p24
++-0x1.b434a601701d7p601
++-0x1.f4b1d689b2dd0p11
++-0x1.0169d2091a98fp-2
++0x1.3f8ff3fa74d41p-5
++-0x1.8c80c2779ce0cp2
++0x1.868886f5a1110p10
++0x1.9c4df0b876ebfp-25
++-0x1.71f585d4559b8p0
++0x1.8de525de7f0b7p2
++0x1.4176a6a108549p39
++-0x1.5f815601d20b9p-2
++-0x1.a38f23bfc9035p19
++0x1.c5d840b1da838p-1
++-0x1.34bd228405e26p24
++0x1.57512021aabcap26
++-0x1.bca9f6e287c33p-14
++0x1.5ac0c1a2f4fafp24
++-0x1.994ab36e7d723p2
++-0x1.328d45a5fc470p341
++-0x1.64af70ee7def2p-4
++0x1.ee1db2f62022fp0
++0x1.5f2dd10e6a6ecp-20
++-0x1.838631f252728p42
++-0x1.19cf34161b21dp11
++0x1.9f91840121c5ap-22
++0x1.9dbe335793b39p41
++-0x1.839fc42eeae8cp103
++0x1.eef9e6c8ffb8ap6
++0x1.8541c004e3180p22
++-0x1.8c1920d4c1503p85
++0x1.b218a059a4570p-2
++-0x1.a58d75620b198p667
++-0x1.6efd621a14b0cp17
++-0x1.099e53d938376p14
++-0x1.18d6e5d70b10fp-1
++-0x1.5788e732cd976p11
++0x1.07ef71676445cp34
++-0x1.ca4487363d2c1p27
++0x1.dc926279d77cep263
++0x1.8753049e6d5e1p-24
++0x1.65f042ee1fc9dp47
++0x1.bc3453e531abap-1
++0x1.bcc4873bb393bp6
++0x1.116535b98ffadp42
++0x1.de18a3376458ep8
++0x1.db06306746181p13
++0x1.84c37202fcf43p1
++0x1.866395219626bp18
++-0x1.141071db29322p257
++-0x1.73ef56ec1f623p950
++0x1.e4d520d681029p25
++-0x1.9eeee3bb51702p1
++0x1.f0d4059310340p11
++0x1.5183a5f0807cap12
++0x1.1bfe251a8c4a8p21
++-0x1.1a87e14b480c2p0
++-0x1.7edd86bc0ed71p628
++-0x1.ab66712e5be65p12
++-0x1.5780654d83cf9p20
++0x1.0e08e43c171b7p-23
++-0x1.88da66ec65c0dp324
++0x1.5c5926ec4f1a2p-2
++0x1.decdf19a88501p4
++-0x1.5bb127177c60fp935
++0x1.7744646704854p0
++-0x1.cddb237f3dfcdp672
++-0x1.8c87310c7aa0ep16
++0x1.1a8aa57389535p-1
++-0x1.b27e20d250282p26
++-0x1.facbf497fa225p576
++0x1.fac832440d064p-1
++-0x1.228927aeb745fp-2
++0x1.3cd4a0cdd1361p47
++-0x1.85c831564ddeap1
++-0x1.83f066bfc1359p14
++-0x1.b753f35ab1670p14
++-0x1.76e0b3655bb28p30
++0x1.4ef00786f3c9fp27
++0x1.2621a3ae6c888p2
++0x1.f0f6471c67c9bp-2
++-0x1.ad9653d2d06aep-2
++-0x1.f6717146079e5p22
++-0x1.27ea06c37db0dp982
++0x1.567a43608f4dcp8
++0x1.c2aec319a9eb1p3
++-0x1.0c9f22529d27dp-3
++0x1.f675c28973d34p6
++-0x1.b1ba46b0c8b89p-9
++-0x1.348066bcb437ap-1
++-0x1.c1e203c94dc06p19
++-0x1.bd2d4187954e7p30
++-0x1.85eb466fe1e41p-13
++-0x1.2ce2532f3a652p11
++0x1.ee2be60192dfep-2
++0x1.7c77736361d2ep619
++-0x1.9bb2716c8b4e1p21
++0x1.458cc63edc9ebp16
++0x1.427fa56cf1226p791
++-0x1.cd4a90f4529cfp0
++0x1.5a66116e3a525p585
++-0x1.a44717a44cee8p9
++-0x1.89c766e207c5bp47
++0x1.8497829793fafp-2
++-0x1.b169742951e02p18
++-0x1.6f4840b361b11p-23
++-0x1.caa2b00a5545ap22
++0x1.158d27d29b47cp25
++-0x1.c113704bba518p0
++0x1.ad9bf10cb5ff8p14
++-0x1.4e0a32305965bp-2
++0x1.067fe63e938a4p-23
++0x1.b96914a1b3a21p438
++0x1.63dfb19a046cep34
++0x1.db0804f3c7c9ep0
++-0x1.8410d2e1034b3p0
++-0x1.d1aaf2398a33dp-2
++-0x1.bbb454f7f7f07p24
++-0x1.c9acc42e8d061p19
++0x1.203d60670cd9fp-8
++-0x1.767535411c076p-1
++0x1.60cc4040d39f1p422
++-0x1.d10600cb8001bp29
++0x1.b8e581930f94dp-1
++-0x1.355566120a0b9p1
++0x1.45b580cae60afp18
++0x1.d911332e98370p0
++-0x1.91177292f4cabp8
++-0x1.418ad2d34bae0p-10
++0x1.8291b4650a69ep-1
++-0x1.79d9f4f590c73p24
++0x1.a6c83045cbf27p20
++0x1.671f710ecd668p1008
++0x1.318ea4b002d99p-10
++0x1.a7b8b355e681ap46
++-0x1.8f1101e38969cp61
++0x1.be31961f3aa50p160
++0x1.0836b413055ffp647
++-0x1.95d046a1ab722p919
++0x1.fc127769b2558p421
++-0x1.fa2d535dfb0ffp0
++-0x1.19df965ee45d7p653
++0x1.c409446d99c17p615
++0x1.259ea3875295cp42
++0x1.1d90964dac75cp23
++0x1.2019d5248771cp42
++-0x1.328307633514ap1
++0x1.a28317d7099c2p23
++0x1.ac9cd6e82d051p19
++-0x1.32f0c45d72d8dp0
++0x1.76fa3642a2e9ap2
++-0x1.f5cac7ebb5a18p7
++0x1.76df575b7cff4p12
++-0x1.714c26d8c8d24p-26
++0x1.14a3e3533f825p2
++-0x1.aca7465e17036p-1
++-0x1.6ea6365296b7fp37
++0x1.903ff0fd1d1d1p816
++-0x1.0acae1b832bffp618
++0x1.0b9fb4c808dd7p15
++-0x1.fc968462e80a1p42
++0x1.971fe623dd7bbp-12
++0x1.b2c787b5a85fbp10
++0x1.6af4437902edap-26
++0x1.eafdf13258e48p22
++0x1.40dcf08370d64p-16
++0x1.3c49f4603b25ep158
++0x1.7d156688d9d5ep203
++0x1.ea6ec75e3a3f8p14
++-0x1.39770057684f9p335
++-0x1.203f737ae7869p-12
++0x1.820394211c83fp551
++0x1.2a2466c9759cfp21
++0x1.d7edd63490c31p-1
++0x1.da78c7461ca5cp20
++-0x1.5eada05f63f1ap12
++0x1.4d0466560feb1p23
++0x1.f840d32accedbp576
++0x1.f017d5329baeep34
++-0x1.28f2e2a8c25a1p6
++-0x1.3b6705c364a3bp-12
++-0x1.dce5f1df42de0p0
++0x1.0d48966683a4ep1
++-0x1.1c63a7cadb22ap-22
++-0x1.16ba8367f31fdp156
++-0x1.8b3e13c7f3a03p21
++0x1.97fcd0035fe76p23
++0x1.bec9562483afbp1
++-0x1.88e6d0eac076bp3
++0x1.5b15217b8879ep10
++0x1.aedeb39054577p271
++0x1.3fb5b2335be6dp-15
++-0x1.c331a14d8c473p-5
++-0x1.bfc2a2cb84079p17
++0x1.3c11d271df1bap24
++-0x1.13ea25a9e3f6bp108
++0x1.2e2b40a38617ap-1
++-0x1.f528b5d80128cp-21
++0x1.6aadf20c0b366p542
++-0x1.f50a1346f56cep306
++0x1.2d5b105aa946fp0
++0x1.f5a63052565cdp15
++-0x1.cdc68541a84efp8
++0x1.bd32141c6c295p25
++-0x1.4ddb2056462ccp24
++0x1.7830865a59204p23
++0x1.468106f7529f8p5
++-0x1.025cc0f22a1fbp37
++-0x1.c00d57ad60ac5p0
++-0x1.2a4135493a5ccp35
++-0x1.2afa33c25a200p603
++0x1.74f407f05f616p8
++0x1.5b8937978050fp21
++0x1.7a5db0fda57f4p16
++0x1.4695f2bc976e0p0
++0x1.f481e2cf35d18p-2
++0x1.c262e34521fb6p-1
++0x1.2cbc860c13474p17
++0x1.64d371b08759ep15
++0x1.da18e713e4cb9p-5
++0x1.abc9a6f91a6d6p-8
++0x1.2df6d29bbc5b5p1012
++0x1.aa2cb76cdfa0bp0
++-0x1.5fe9976d6cd0bp12
++0x1.85f14525bfb00p-1
++0x1.49b43399b1c42p106
++-0x1.9cd354c208505p-15
++-0x1.9d4235a514407p2
++0x1.ee0a16b3daac7p17
++0x1.fcc165f31733fp0
++0x1.e5e150a67c9f2p-4
++-0x1.75a4c2ba36cecp26
++0x1.e94cf46939e6cp755
++-0x1.0b7b352b6c592p-1
++0x1.d4f714edbb965p21
++-0x1.e1e8645c60564p747
++0x1.0a3fd37d282e1p-1
++0x1.9621f5e7054c9p-2
++-0x1.c1a72478daa53p867
++-0x1.985c42bec01c7p0
++-0x1.1cf386cd14914p8
++-0x1.5f67a73764c42p614
++-0x1.522cd68c1bf68p26
++-0x1.d799532d49d5ap674
++0x1.46bb22a16728cp5
++0x1.389933b0164ffp10
++0x1.a5f50513df15bp99
++-0x1.be02a2624e3e2p-6
++0x1.842b00d07b638p18
++0x1.2411e326586bap-1
++-0x1.e39ec39ec78acp100
++-0x1.9a0136520b211p-20
++0x1.473bd1a29d139p-12
++0x1.5997d3e7d9cfcp596
++0x1.c569803b425e1p13
++-0x1.a38fc2debd07bp914
++-0x1.e7a0c727b8c85p-13
++0x1.fec181572dc93p143
++-0x1.9d59b64a201eep-2
++0x1.730c81ab84d39p18
++0x1.0b25801e3ab2dp4
++0x1.23a5f5c54b7b8p1
++0x1.322b0576073e0p0
++-0x1.c1f8e33410fe8p-11
++0x1.867ef74ad8684p499
++0x1.364d612cd2496p1
++-0x1.caec529ba1df2p42
++-0x1.b99d77d2009bdp0
++-0x1.4bf4f0d4925c5p909
++-0x1.79d630227d604p512
++-0x1.fbbc014403c00p855
++0x1.32e5e1654b2a2p-1
++0x1.c94ed499f75c2p25
++-0x1.805ce3fcfd6cap236
++-0x1.38c217951cfeap14
++0x1.d2c6423a89b18p32
++0x1.fa9fb7906c851p8
++0x1.6a2e105660a34p460
++-0x1.3bb4055b92b4bp20
++0x1.19b7d1cb31d88p5
++-0x1.b710d75b84f62p30
++-0x1.abc2246751c8dp-2
++0x1.a9454155ad3bap5
++-0x1.8107e221264ecp30
++0x1.3554a38510ef4p-2
++-0x1.8c392588b88aap-2
++0x1.6a61e531ae636p-1
++0x1.522c04ef79576p-2
++-0x1.585b113866998p935
++0x1.6572d38c4566bp324
++-0x1.01c407a78269bp-2
++0x1.c667704230cf4p119
++-0x1.c26e3294a15b7p609
++0x1.398957506d8ebp0
++0x1.e0b6730234a2ap12
++0x1.5f55247076d4cp886
++0x1.91a7e436c803ap85
++-0x1.b405442f13b0dp-1
++-0x1.89197589af46bp12
++0x1.b689827fcf442p0
++0x1.e511f183f3761p38
++0x1.8bbf8044036dap-21
++0x1.a6f9739fb14bdp715
++-0x1.e0b26088aa820p260
++0x1.7ba5e059f9881p23
++0x1.fe66a754c0fd2p25
++0x1.6c6a32bf8575ep-1
++0x1.eaaca56a33a78p-1
++0x1.9015009c0d6f2p359
++-0x1.6cb7f41a689d7p511
++0x1.aacc71d5bacbdp95
++0x1.29e4c477b18a8p36
++-0x1.ef83a0fc79d14p-3
++0x1.32e2c2a316640p21
++0x1.ec0675ef5c64dp18
++-0x1.dbfc56a89d5c5p-17
++-0x1.cbf486a4cadf0p927
++0x1.07936134292b1p8
++0x1.b151d4537a8d3p192
++0x1.67efc2818dc90p323
++-0x1.9cd295f2ce662p16
++-0x1.821820585b1efp0
++-0x1.e5de90be0509ap-6
++0x1.d26fa3ccb06acp-1
++0x1.0f26767f7e19ep9
++0x1.9732e3a149dcfp2
++-0x1.738c626bee029p22
++0x1.ebc397d721a35p-10
++0x1.628a90978e6e9p313
++-0x1.7e31f7114dea8p15
++0x1.79cc77a2bab11p10
++0x1.2983d646690f3p588
++-0x1.5eafc23db65cbp32
++0x1.8942a552364e4p-2
++0x1.e3ccf6eb08b48p25
++0x1.7880661b82c3cp13
++-0x1.960bb106193b4p3
++0x1.512562f1663f3p-9
++0x1.d73bb4b91b054p-1
++0x1.da72a35c1109ap0
++0x1.b7ab22fa83736p844
++0x1.d13c003e58e8fp-1
++-0x1.ad34c4a774bafp-2
++0x1.215ee10881727p787
++0x1.94e87183d84f5p-2
++0x1.e67e95b1bfec2p5
++-0x1.13b3721046567p433
++-0x1.3496b371b7047p-20
++0x1.a20233bcdcf1ep478
++-0x1.8b2493a06a535p-1
++0x1.a84f74a1a6298p15
++0x1.20bc40cdba97ep-2
++0x1.d77ea17713c46p99
++-0x1.6206e0239f1adp43
++-0x1.d3e2555f60ea3p-1
++0x1.aac214994c1dap-23
++0x1.b16e41716b9a4p1012
++-0x1.bff49465bba1fp-5
++0x1.3922b5075dd33p-23
++-0x1.826d62aa4fc16p1
++0x1.c787f3022d540p17
++0x1.0e8f744f79d08p8
++0x1.8224508569db1p4
++0x1.3551056491610p39
++-0x1.d97a27aa772f1p24
++-0x1.080464f37e4f9p-1
++-0x1.ef7ec170b1cc7p-14
++-0x1.56a34672be8a3p0
++0x1.568ce0836dad1p0
++0x1.68e4d1349211cp0
++-0x1.cdd5647152dccp0
++-0x1.df937407c9261p-2
++0x1.dbedf324f26c8p42
++0x1.e61e938251d5bp-26
++0x1.27aa70e4f9180p10
++-0x1.2beb30d17d09fp11
++0x1.fc2f613c865cfp612
++-0x1.18a437c0c0337p989
++0x1.497f7636bc81ep5
++0x1.eefc152fee26ap-1
++0x1.e01e636b8c0e8p13
++0x1.641203e8ff6c4p10
++0x1.7cd5f6dc77b45p-1
++-0x1.a8c463d05a384p-18
++-0x1.939935c60bc6dp32
++-0x1.112004f389f0bp26
++-0x1.e3dd8706dbb77p-2
++-0x1.06660332f032dp0
++-0x1.2df664008c6b8p946
++-0x1.db05f1c0a68afp-2
++-0x1.c148b6e43e444p8
++-0x1.5de1353d73697p4
++0x1.66fdf2d6b465bp9
++-0x1.62c167e6e4b10p23
++0x1.9eaa3110cddb2p86
++0x1.88c261dc17162p11
++0x1.1309b29673b81p-2
++-0x1.2bb1f6b417cb9p30
++0x1.087814c0ec7fap624
++-0x1.e0c945389d582p8
++0x1.7943a676a5441p24
++-0x1.320c04ceb42ffp-21
++0x1.d909361bb3862p45
++0x1.3b65434a04806p23
++-0x1.afd001facc7b1p-2
++0x1.0b19c619a640ep-10
++0x1.0957e03dfef54p38
++0x1.24e94466217eap-8
++0x1.63119435659e9p0
++0x1.3f3e90058cdf8p32
++0x1.9c5120fa60573p-20
++0x1.4582f3a60e340p46
++-0x1.909e3202d81a4p4
++-0x1.0437d4ebf5610p-9
++0x1.6539d39ccc38ap568
++-0x1.41a5b0bbfb9bcp6
++0x1.7e8bb37871e1cp19
++-0x1.ad8ad1bbd74e5p18
++0x1.de4de49f18b51p25
++0x1.826ba7055be5dp0
++-0x1.ef63f73ede073p13
++0x1.3beb24857264ap-16
++-0x1.6f4b015987fdfp13
++-0x1.a1c3d13b1c1efp38
++0x1.e54744ab0b987p-18
++-0x1.30d3903b0fef8p0
++0x1.221cb2580e640p-2
++-0x1.3686a2b46f392p20
++-0x1.953a23666db27p23
++-0x1.0e27f512156c1p41
++0x1.8aeac1aea8951p507
++0x1.859272081065cp24
++-0x1.1421f542a190ap22
++-0x1.13f9b5260c5c6p1
++0x1.26e7e7db18108p-1
++-0x1.5c5fa31066b6fp24
++-0x1.f561528837944p47
++-0x1.296430993cfacp6
++-0x1.2d27a23459f85p12
++-0x1.532a550f8785ap8
++-0x1.97da24484f8b4p1002
++-0x1.6dd96318f0afdp-20
++0x1.c22a23981d826p880
++-0x1.bb6595d952b59p-9
++0x1.9d303417d2283p-8
++0x1.2fad41ad10377p3
++0x1.0fa034dfdbfacp97
++0x1.ac9f668620937p201
++-0x1.0926c03aab751p431
++-0x1.1122f714c565bp-24
++0x1.85b8127865850p194
++-0x1.70a2c17f946dcp41
++-0x1.41fda46167f73p23
++-0x1.25ad23c987dc1p11
++-0x1.8b7901317fc7dp-14
++0x1.3a39378fff8f4p7
++-0x1.27d681a249f5cp30
++0x1.cb79b21c83a00p65
++0x1.6682c62f9ee17p544
++0x1.9722e5ad48a83p0
++-0x1.6877c6503e926p-11
++0x1.60bdc18e9615ap38
++0x1.71209215d4d4dp166
++0x1.3b3083c9e79aep29
++0x1.226c15a2738fbp20
++-0x1.850e61bf2adc0p46
++0x1.cf59c1a465033p4
++-0x1.f28f75a1e366ap-2
++-0x1.ddfe107392c51p752
++0x1.ad9a867a0f388p7
++0x1.c190d52d7d990p-2
++0x1.40f39083588dcp0
++-0x1.72a507fb05048p23
++-0x1.cb11020748b01p915
++0x1.1af08708ba5cap15
++-0x1.627c101f73406p530
++0x1.689206a8915abp318
++-0x1.cb6761b5dea79p634
++0x1.c2e0d162c326cp404
++-0x1.718305de4f896p17
++-0x1.e93fc085fd701p-2
++0x1.11ece54e13460p5
++0x1.8727425cf3cd8p24
++-0x1.b42da698277c1p45
++-0x1.6596f74580a61p749
++0x1.5527e4a40304ap13
++0x1.e44661960fc6ep861
++-0x1.f172b70a99607p-1
++-0x1.0551459f69b31p1
++0x1.fe53e03d64618p-23
++-0x1.32fa65f2e7445p-18
++0x1.d186c41b4314ep15
++0x1.554651879adf5p21
++0x1.11ffd2256e002p-2
++0x1.af32d40afb747p25
++0x1.7f07047f01402p46
++-0x1.7d6eb6b631adep325
++0x1.368db60e46f81p0
++-0x1.7dff648d5243bp2
++-0x1.8c2ec01e5fedcp0
++0x1.2a285014439ffp25
++0x1.97d7a7e9d1488p267
++-0x1.aa7e802105b2bp3
++0x1.71f44577ef0e0p30
++-0x1.c348a7a1cf0cap-5
++-0x1.e3c124e128e3cp513
++0x1.6382e3388fe7ep0
++-0x1.535d11123ca67p-1
++0x1.cb8544daa77adp232
++0x1.c711c1bebf09bp-2
++-0x1.5af6028fa5346p944
++-0x1.96048340a5514p22
++0x1.f72ff33637c6bp22
++0x1.19acb5b9c1f96p849
++0x1.2812a646b9299p-1
++0x1.75f772acd0271p614
++-0x1.182e332b82935p951
++-0x1.20dda567e407ap389
++-0x1.aabc54e09bf9fp5
++0x1.e6b50061378a4p40
++0x1.2f68852bc70d7p0
++-0x1.823b97f7229a4p-15
++0x1.c4e326b2e2dbfp21
++0x1.7e4f6774b8a2ep-1
++0x1.1ab614657417dp98
++0x1.f3e634c32e8b7p3
++0x1.e9e836b498598p-9
++-0x1.1c64235980810p10
++-0x1.aafc1207ad818p-2
++0x1.9f3d233a5c111p-5
++0x1.7999c2260403cp31
++-0x1.f30211be994f6p24
++-0x1.0c43722a9bbbep-6
++0x1.930ee35921be4p-1
++-0x1.5d6213b5f1254p22
++-0x1.7d22615123c54p1
++0x1.83b3112e046efp46
++0x1.f41974f304112p603
++-0x1.3a66e15aa8fe4p20
++0x1.a13001aba9f6bp852
++0x1.412aa2c7532c4p-14
++-0x1.c81352e8264c2p23
++-0x1.591d02625a9b5p22
++-0x1.c41166b01542dp20
++-0x1.5131d3c932102p2
++0x1.3e0812627d769p0
++-0x1.42230381aec5ep24
++-0x1.f2b3323fb84d7p10
++0x1.eb6774d11a107p309
++0x1.66bfe7efc9981p413
++0x1.7393b483ef4c9p18
++0x1.1c23a0ccf4a1fp5
++0x1.f726a29f3c7b0p-1
++0x1.56a6c4b8f4c03p0
++-0x1.d81fc1be44ccap0
++0x1.acb2a2c71b283p0
++-0x1.fc027711d2a95p42
++0x1.fc337688991dap0
++0x1.199a1661ea960p13
++-0x1.3b86d2611c320p27
++-0x1.61c2d21282edfp26
++-0x1.64e50317eefc2p785
++0x1.def315b3fe290p780
++0x1.cf1e17c160022p-18
++-0x1.38eda7d8530bep24
++-0x1.808c94ffe4d91p-1
++0x1.4610f3e719abep7
++-0x1.1e9381dc4ec70p-11
++0x1.43cba0bf131a0p13
++-0x1.dc42b575ed4d3p1013
++-0x1.6ed8149cc7bc6p-1
++0x1.4a60f7c0d69e4p13
++-0x1.538585ddb4696p23
++-0x1.0864d6a255b66p19
++0x1.fbb200de88ab3p20
++0x1.0121e4f96ae33p19
++0x1.d249f66c94efap-26
++0x1.f22cd10757b66p-17
++-0x1.dc648333c448cp28
++-0x1.bd93661102aabp6
++0x1.111ac7383f502p24
++-0x1.2b702455abc46p3
++-0x1.0a6586568a0d4p0
++-0x1.66ac624962909p45
++0x1.28169042cc3a5p12
++0x1.f66474e488ef9p22
++-0x1.9537062a41765p14
++0x1.c121e1e9723f6p-20
++-0x1.9f26e345e6c69p45
++-0x1.c04f565228f00p23
++-0x1.3f2a165966b01p14
++0x1.e49031acb773fp4
++0x1.45d4862b31a5dp14
++0x1.d3f8a349399cdp651
++-0x1.95bf4422cf479p21
++-0x1.5e80e7683c406p38
++0x1.cf9e839f22581p-13
++-0x1.bcbd040073ae7p42
++0x1.0dbf80c846440p1
++0x1.b967a548e9278p25
++-0x1.09f7d6e2794a9p36
++0x1.f52b73cf4435bp957
++-0x1.7bc586cbd1a46p12
++0x1.ec2ca0ba0169fp956
++0x1.7b4ec7011ab15p-14
++0x1.9590d2642b855p2
++-0x1.1792b47e89a3ep-2
++0x1.096e8355c6a33p387
++-0x1.0309a65ffc7d0p389
++0x1.bbe450a514bbbp23
++-0x1.c2a0c154c1ea8p22
++0x1.8c8840b2a87e4p-1
++0x1.bc053744b4d71p525
++-0x1.0bad1023cf416p26
++0x1.6c74f2f70249fp-2
++-0x1.df29e2bbca95ep-20
++0x1.541ef0a6c96dap25
++0x1.228634785edb5p959
++-0x1.2e5246cb79ea9p-2
++-0x1.e27d61cf42df9p-1
++0x1.92d2218c0d244p-3
++-0x1.28dab0f8375dbp19
++-0x1.6a69c59ed57f1p24
++0x1.bc5c338bdaad2p9
++0x1.1b86b1509d103p-2
++0x1.96f70720b437fp-1
++0x1.ec2dd7a3ff01bp11
++0x1.6d674707f674dp24
++0x1.8ccc84df77093p467
++-0x1.fce2734699b46p131
++0x1.78c0233339f48p-24
++-0x1.10d36236e14f4p-22
++0x1.0e5087309073ap0
++-0x1.964d52d42dd8bp184
++0x1.ae23e780b9411p-21
++-0x1.54204161ed466p836
++-0x1.954a4649af744p41
++0x1.bdbbb7d31f152p-1
++-0x1.56e0943fe5998p-22
++-0x1.36a8e4332551dp927
++0x1.020b52f89937ap23
++0x1.d7a20332bdd63p11
++0x1.3b0dd5979b6adp-2
++0x1.c0e8434f16674p-10
++0x1.87e7f538c365dp25
++0x1.d3e821a1bc5a8p7
++-0x1.96b7d456e788bp25
++-0x1.3ad9e1e70f896p943
++0x1.53ee76bc80972p-3
++0x1.96fa10c429e87p-9
++-0x1.8056956d2cfadp24
++0x1.c741b2b122791p6
++0x1.ba3a96c89b1b3p166
++-0x1.83990344b014bp766
++-0x1.3e571252648bap15
++-0x1.3bb1972c795a9p9
++0x1.adb4d3351c887p43
++-0x1.ff802660bf9a5p0
++0x1.6e469006517f7p47
++-0x1.900d500fb6d49p26
++-0x1.c76ab659c3834p25
++0x1.e521b219c20dbp-7
++0x1.921a034787ed3p10
++0x1.e995010c15b21p8
++0x1.8c2b466dd9540p47
++-0x1.04c05174f23b9p12
++-0x1.93b6b3adbef7bp392
++0x1.c56de7617c8d9p-1
++0x1.5160533d35ef7p19
++0x1.e130936be6602p-1
++-0x1.739414d989802p16
++0x1.31b1d2c632ab2p-1
++-0x1.c31d635f38768p22
++0x1.bbb4f5b78c9c5p32
++-0x1.e445c444330bcp388
++-0x1.8c4be45fbe950p-1
++-0x1.837291c50b911p-2
++0x1.a8e1958326948p22
++0x1.3489902ffcd05p89
++0x1.3937a140c8ebdp102
++0x1.6e18d2c91a6ddp-1
++-0x1.ca05a2df5e759p-7
++0x1.2cfef3c22cd0bp130
++-0x1.4cf717964a9bfp7
++0x1.54579498874b1p24
++0x1.c107738f9b691p12
++0x1.7bff9229e04d2p-2
++-0x1.d03de2576ff0fp3
++0x1.5f7b7021a52d5p45
++-0x1.1942d4250cc59p402
++-0x1.e0e3e37700163p34
++0x1.e9b38334f06d3p655
++-0x1.58ee600866d4ep189
++0x1.5ef6e7cc455f0p289
++-0x1.2c28461a00b92p4
++0x1.10d365a1e8d8ap21
++0x1.468d92dd56b89p7
++-0x1.6abfb0ce30badp23
++-0x1.5f89a14d0efd0p-2
++0x1.15d3e3cd4669ep539
++0x1.4713f780aa584p-2
++0x1.3b21b2c71e99bp26
++-0x1.48b56671059e1p-11
++0x1.1bc1d481ce9dbp69
++-0x1.b1ae27d09baa0p-2
++0x1.33d7670cbf8a4p8
++-0x1.6ac4255cad8dfp-8
++0x1.62dab6f6b3009p34
++0x1.425c721226be2p442
++-0x1.275535869b097p9
++0x1.ecb7c62bea980p0
++0x1.bbcc660f5e0a8p15
++-0x1.1f9e74b3579c2p0
++0x1.fd7275569c113p36
++0x1.dea7467ccaa26p-2
++0x1.a791b0a57606ap24
++-0x1.82cad3f8be955p22
++-0x1.4157360076d26p-1
++0x1.c97d10ced4329p0
++-0x1.932787d6383efp2
++-0x1.c01812d3d51a9p-2
++-0x1.1c84d6fec1316p609
++-0x1.0f01559dc82d6p-25
++0x1.00f5458920f43p4
++-0x1.43719306d3215p1
++0x1.c656d370d0ffbp354
++0x1.0e11c40e388b9p26
++-0x1.290134e6aff9cp35
++0x1.1040550bddeb0p-9
++0x1.9a7781da48013p4
++-0x1.0a9e5772e3233p-8
++-0x1.0d91b0bf21e8ap-1
++0x1.948055d3de56dp27
++-0x1.3e88a1b46969ep40
++0x1.bbcbb014c46c2p10
++0x1.e9d0279c4b0a1p20
++-0x1.b6238112f8687p398
++-0x1.e242654542bebp-11
++0x1.a762d2287829dp988
++0x1.9bd01053b4464p8
++-0x1.f8cd636f4e283p837
++0x1.aa1c81bd7973bp47
++0x1.970f71af84cc4p21
++-0x1.aeb236cb2b17ep431
++-0x1.93c0e6c9d5101p4
++0x1.6a8314d7ab46ep14
++-0x1.dff0340ed9b5fp23
++-0x1.20d4206297414p0
++-0x1.bfe4e19c4431ep16
++-0x1.e364e69ce1acbp-2
++0x1.da3807b2bef2cp5
++0x1.7d5bf5fdf17d8p3
++0x1.403cb40fa6ed7p-2
++-0x1.e5eb014cd4696p-2
++-0x1.12c867efadb58p-1
++-0x1.17b9111cd2dedp47
++0x1.5fbd06f46a166p20
++0x1.3fa931008c3ddp12
++-0x1.671603ed400c7p39
++-0x1.f3a3f55752ffap381
++-0x1.06d0b08cc2f3ap19
++-0x1.20f970c57de9fp405
++0x1.26bca4618e8c6p450
++-0x1.e84bc67cbae25p21
++-0x1.847b219c71e8ap-19
++0x1.6485a7df487c2p-5
++0x1.79e9b12eaade0p0
++-0x1.ea3177ec5e17ap1
++0x1.9061b7ce1ba79p-11
++0x1.aabb7153d3d41p0
++-0x1.cd05349e06fb9p453
++-0x1.387bd166fd5c6p6
++-0x1.5b7dc65df367ap16
++-0x1.f014b7e23834fp0
++0x1.be4041821c70ap5
++-0x1.bb11127a3673ep-2
++-0x1.69b7a36b6d3a1p44
++-0x1.d182b403ec2d6p435
++-0x1.fa162577a34bfp356
++0x1.837c5378cbac9p1
++0x1.f6aa460693a38p25
++-0x1.30e5c6ba6d18bp0
++0x1.f26723819b91ap-1
++-0x1.a81dc27444846p14
++0x1.3ec314460be45p-21
++-0x1.a92ed0de504fdp25
++0x1.026645ce3b546p5
++-0x1.d783568871061p-20
++-0x1.94e5527db2c75p27
++-0x1.67f7371aa18ffp23
++0x1.d3c365bbdea80p4
++-0x1.9e1a5225f6428p211
++-0x1.258ad3e2c8fa6p28
++0x1.3136354b964fdp-2
++-0x1.96d4f40d26403p10
++0x1.095bd56107f24p5
++0x1.9fce92abc33f3p19
++-0x1.ce7553d981cd1p-1
++-0x1.e601531fa6475p22
++-0x1.6ab42170809bcp2
++-0x1.b251d2575cac5p-18
++-0x1.4c41d161ca889p-20
++-0x1.1072d2e8dc7acp42
++-0x1.59f0d7ec9545cp27
++0x1.60e971fce2225p-1
++-0x1.cae6a23b7284cp7
++0x1.65457653e73cep10
++0x1.e5d2c1b0f8814p-6
++-0x1.2379c4cafa4c7p2
++-0x1.a10a970cc1572p1023
++-0x1.ca2f3652ecb2bp0
++0x1.eef9a3fc5f760p19
++-0x1.e34471bd585d3p0
++0x1.c01c5448e8150p12
++-0x1.bc8e94cc562d0p-1
++-0x1.df2934c9a3eb9p-19
++0x1.932107520d49bp0
++-0x1.664d64c583dc0p26
++-0x1.df503401587dep23
++0x1.ff26b5f73eb26p0
++0x1.223f61fd260f6p15
++-0x1.388ca56b6eb09p-9
++0x1.c843f6cbf0218p0
++-0x1.5b55b55f69e3dp12
++-0x1.55d2b6c9ccac1p-17
++0x1.8fab8647c1b20p25
++-0x1.c39c1323c517cp26
++0x1.9b8cb5c150892p567
++-0x1.075482bdba47ap11
++-0x1.9eb9c5f4e9bfep-12
++0x1.9301916eb43c8p-2
++-0x1.8b05471774a4dp36
++0x1.0cd1f741bc013p-1
++-0x1.4dcce7d816178p952
++0x1.5bb4d5a081463p313
++-0x1.512e913b3aec4p43
++-0x1.4363149bdc7b9p13
++-0x1.363bc2214c09bp1
++0x1.773a72172fd88p-1
++0x1.585f6579ec411p13
++0x1.d5f6f68d24a76p-2
++0x1.69fd3358c8b0ap-23
++-0x1.a4b6f1189e5dbp6
++0x1.0de1b1a9735c3p-2
++-0x1.dce0808027bddp22
++0x1.0e7ce079de804p-8
++0x1.9f5a738b4d6eep-2
++-0x1.8462d5daae41ap11
++-0x1.68674675a393bp24
++-0x1.e10d4227c6195p-2
++0x1.9efc93f7ae5e0p856
++0x1.b21722c3599a5p998
++-0x1.9230777d2e819p2
++-0x1.234b04e484f07p-1
++0x1.f0a83169e44f8p21
++-0x1.551ab52bbf836p10
++-0x1.954191e744c98p778
++0x1.2b5df36e4639ap687
++0x1.6febe142407c9p-1
++0x1.b0a7d19a8a36bp14
++-0x1.283335399df8ap582
++-0x1.ff008550804a8p21
++-0x1.7b3e67a391ce4p23
++0x1.1d85929407a6dp24
++0x1.5da834d23e5a3p447
++-0x1.4692871c1db20p8
++-0x1.afc295fcdbcb4p12
++-0x1.9f23a78c18795p-1
++0x1.6080b280acfddp17
++-0x1.2e5266ef4d581p26
++-0x1.24b7b38d26da1p257
++-0x1.c53977510263cp4
++-0x1.fb19403b773a8p-1
++-0x1.244143543f68cp-9
++-0x1.de8675a5953d7p-10
++-0x1.127a02301391cp25
++-0x1.e81cd0632e8f1p-6
++-0x1.8f0832d2d654fp23
++0x1.8d0592c41d57fp-1
++-0x1.5bb7a2c85295ap829
++0x1.5d0f05a6628d0p33
++0x1.0fa8504e8dc88p26
++0x1.efa587af6be2ep1
++0x1.0e33b1aa5c9bap7
++0x1.2910965c221adp24
++0x1.7117912e9cc38p-19
++-0x1.14f1f66cce91bp309
++0x1.253d965df51d6p-2
++0x1.c129f2121f395p8
++0x1.725be7dae8d66p19
++-0x1.93edb5e7fb6cfp5
++0x1.5018651cc719fp-1
++-0x1.cb02c64f918bfp46
++-0x1.f46340a22bb84p21
++0x1.8f68f646ec9f2p43
++-0x1.6d9a331135c58p25
++-0x1.170ac534d5637p44
++0x1.a4a742eb49b6dp25
++-0x1.7020056638407p607
++0x1.48deb525372e9p-1
++-0x1.33e8601f36771p-1
++0x1.ec3874c4618a1p96
++0x1.fc37d39694eb5p39
++-0x1.ff4071cb454c4p10
++-0x1.ed9d16ccafc18p730
++0x1.7745c1d7844b9p-2
++0x1.577ea4e34c3b6p437
++-0x1.3207305c1a799p0
++0x1.0917100431cc1p-21
++0x1.2c183093fa529p603
++-0x1.2c5d51ba70531p14
++0x1.608c1509bfa83p148
++-0x1.f839c173e805dp14
++-0x1.98e12705bc31ep995
++0x1.3a50f5332c5c9p123
++0x1.a3c53078bbb14p14
++0x1.7774161aba4aep38
++0x1.f77d9613e7c1dp-1
++0x1.087e662e1679bp0
++-0x1.f6a5441a51460p9
++-0x1.943ec15bcfd0fp-24
++0x1.ca08a5623522dp836
++-0x1.b94390a4ec03bp21
++0x1.f028210e4643ep86
++-0x1.a08b00ea57565p0
++-0x1.d32a26194266ep33
++0x1.f9c00577e6bdap14
++0x1.2aa9d7f90174dp-2
++-0x1.a73675bf09391p24
++0x1.8e42320f970aap-5
++-0x1.456e713f4c160p26
++0x1.0a7c735c32ef7p370
++-0x1.599d856aa3f83p126
++-0x1.a2aeb2b04f0a4p-1
++0x1.1b9611214c8efp38
++0x1.b79443495fae2p555
++0x1.bb96e62f437c0p449
++-0x1.d8628272405eep331
++0x1.3e7d077075b34p3
++0x1.f02863b1964cfp-18
++0x1.bc64148bb2bcbp963
++-0x1.abbfa06274d7ep-2
++0x1.4124c7371ae20p-12
++0x1.01bea1cd85371p-2
++-0x1.86f4c7d558b23p365
++-0x1.2d7045098fc2bp6
++0x1.12cdd38e1f1fcp40
++-0x1.cf87f031ba281p-1
++0x1.900f77d2e17b8p-3
++-0x1.780482ed78ed2p0
++-0x1.c0b7e330a1569p622
++0x1.e964c06440769p21
++-0x1.0575c6582a7e8p219
++0x1.014cb3689dba2p364
++0x1.757270c3f8b5ep6
++0x1.f4b96482cda61p25
++0x1.b56110293d311p31
++0x1.c319d66d3a8c0p-15
++0x1.42d33307c41bdp14
++0x1.ea5575e42d23ap17
++-0x1.a6e025cb863c7p0
++0x1.cc5d70ede499dp27
++0x1.e359a47239531p0
++-0x1.d8d93754b2b11p29
++-0x1.8ca7b5053585fp1000
++0x1.d9d5310c25ca5p-1
++0x1.8d9430af4511fp961
++-0x1.66d8a6638d99bp512
++0x1.b41ad75a8801bp9
++-0x1.6a1f971fa26b6p-14
++0x1.ab5c81ae14fe6p-1
++0x1.1f8577d10b9c5p971
++0x1.cdd440ab2d669p9
++0x1.4951f5844ad5ep4
++0x1.ec76109115f59p10
++-0x1.5e9a80ad92f6cp0
++0x1.a0e386b6ccb40p253
++-0x1.987135136f652p-15
++-0x1.4972078157c11p18
++0x1.71af54cd3edcbp-22
++0x1.2cb9c16feca61p4
++-0x1.881612ba1bac0p23
++-0x1.a1bc462181294p6
++0x1.59e7f20d1a85ap20
++0x1.6efbf694bc721p795
++-0x1.194d02c8696c5p1
++-0x1.c29f770300210p40
++-0x1.465474694864dp5
++-0x1.be79c39a626abp-2
++0x1.a84f059ce3c46p0
++0x1.7aa4e54b620c4p8
++0x1.3da7c7bc6677fp-8
++0x1.f69225fe61ad2p28
++-0x1.64de33982551ap-1
++-0x1.914f65e648df9p27
++0x1.8a6b04c753621p4
++0x1.9bbe37ce952f4p151
++-0x1.dde326d0cc835p989
++0x1.98c0d3cdf20d3p21
++-0x1.284c014de6027p-7
++0x1.88d835cac3b12p0
++-0x1.b6db809206af5p2
++-0x1.e565b22e34e93p32
++0x1.749c6053c4d99p27
++-0x1.117985fc29082p-3
++-0x1.4aea6753378aep18
++0x1.e0dab03922291p582
++0x1.6215370395220p-11
++0x1.c6fd922332304p23
++0x1.634a06577ffe6p14
++0x1.7a0794ef5f1b2p-17
++0x1.12abd5b589964p-2
++-0x1.7dc825820bbc5p-1
++0x1.8dac9227f7521p19
++-0x1.152a74beb6671p0
++0x1.91c8274862218p-1
++0x1.6b46c437366a9p2
++0x1.91be1642b829cp-4
++-0x1.9bbe55e1e875bp0
++0x1.cf53d39670350p30
++-0x1.6106a19021fd0p25
++0x1.b4f8156fc19c5p951
++0x1.e681709062081p40
++-0x1.d940928c3f987p2
++0x1.691480d2f533ap737
++-0x1.85c093aaae1ecp900
++-0x1.5affb35c6bf7fp26
++-0x1.dc84061a932cfp17
++0x1.ee1e42315879ep25
++0x1.678d23f005c62p764
++-0x1.ec9774244565cp535
++-0x1.9271662cb2093p16
++-0x1.f83131ca71ccdp-17
++0x1.ca7930f286682p13
++0x1.a7255589c90d3p-11
++0x1.53ac82fd92bd9p14
++0x1.a47a64b427441p43
++-0x1.3a1722f39b3dep25
++-0x1.9f33140b8a810p312
++0x1.d03d52df1c72bp688
++-0x1.1c6fc748fa1e5p43
++0x1.0b3414a9938eep2
++0x1.dd0da78a5d1d8p633
++-0x1.4c4580f79db55p36
++-0x1.92c9b7d98ad52p16
++0x1.33a582ad335b4p8
++0x1.8412d4cdc4b13p2
++-0x1.6d70c0e74843fp-1
++-0x1.094ee77340bdep25
++0x1.29f1d2a5785f4p1014
++-0x1.d15b11be3fe7bp7
++0x1.58a4143823bb5p291
++0x1.902405ab3dbd7p-12
++-0x1.927bb2a52a3a0p22
++0x1.72dfe5a32fb2bp26
++-0x1.84fd5529c70e0p-2
++-0x1.309e3082bb94bp3
++0x1.1f345701b89f5p1
++0x1.7dad63072bcb5p20
++-0x1.ade4901d73471p99
++-0x1.c22aa72bdcd7cp-24
++-0x1.f59845faa6563p18
++-0x1.ad6e102c9bc28p18
++0x1.0fb34286e7064p0
++0x1.94a631bd3477bp-13
++0x1.210a974f1dccfp10
++-0x1.2e4bb56104384p0
++-0x1.baefd380be2d4p9
++0x1.ed1987f86a22ap36
++0x1.774a94a24ef7fp21
++-0x1.2df7e52525ce2p23
++-0x1.b56ff18142c84p244
++0x1.5cf265da00a46p0
++0x1.2301239fc121cp8
++0x1.422ed28d49c39p695
++0x1.737c10c4444c9p-15
++0x1.2d1c455042173p729
++-0x1.7ab92567a3677p47
++-0x1.a93bc46c3f91cp-1
++0x1.a84da7b1e13e8p764
++0x1.01b0716556196p7
++0x1.9279d0b582281p52
++0x1.87062189adde4p283
++0x1.1b0bf0a2108b2p36
++-0x1.5eb4d47d17207p46
++-0x1.2d48f70490ef9p41
++0x1.02a927e62e4ccp229
++0x1.64ece5d8585f1p-10
++0x1.f348233a76acap526
++0x1.18ae26a877ec0p-2
++0x1.f29784bc68275p47
++0x1.6001f45f7971bp12
++0x1.a22b2698b25fap352
++-0x1.e03a853c027d9p29
++-0x1.a95c30e27b155p978
++0x1.54ba70dc907bbp8
++0x1.2973942fbefc1p-2
++-0x1.d880a44876022p-2
++-0x1.5714a530cbfe6p-8
++-0x1.cafc377dc6968p152
++-0x1.d75a05f2b42e7p32
++0x1.457431b89e9fap-1
++-0x1.1459601867581p0
++0x1.d012824c3e9bdp-2
++0x1.cba0151869ee4p-15
++-0x1.28514551cf3c2p41
++0x1.1a8f5790ecb1bp-2
++-0x1.e3ca859ef8af9p-20
++0x1.61d8824c0577cp17
++0x1.0dbc60263979ap0
++0x1.13ae60bcf616cp11
++0x1.2b64749c50115p1
++-0x1.d4d6b06398109p6
++0x1.62482046dcfa3p-10
++-0x1.144d5089806e4p0
++-0x1.2a84e1516c3b9p-3
++0x1.a4a9c383e277ep15
++-0x1.b6a4a184f369cp14
++0x1.0934a50d726c4p-2
++0x1.9fac46d3bac78p-2
++-0x1.0f3d41801c34ap830
++-0x1.ddf6e4b3ae58dp14
++-0x1.f8c654fd8faf6p578
++-0x1.83e3d444fb99cp9
++-0x1.29462350fde9fp18
++0x1.c2d23298201f5p32
++0x1.38dbe21a97dc9p765
++0x1.b0ff117ae0c79p4
++-0x1.936ba48a606fep-8
++-0x1.5ed053069752fp9
++0x1.73c4c4bf7d0eep5
++-0x1.e7005748bed43p-1
++-0x1.5f9f348eb0d61p-14
++-0x1.fd0626e287666p-10
++0x1.272f865f58d3fp1
++0x1.89aa61b27b617p19
++0x1.d3c0a3db910c4p703
++-0x1.28c846d807abfp17
++-0x1.ff57f267de4afp650
++0x1.2f37531444d22p-1
++0x1.295914905d114p-2
++-0x1.a2cc76af10462p-2
++-0x1.7e2a733986885p-12
++-0x1.b026f4918478bp581
++-0x1.940790b8f17d3p-17
++0x1.0bea736dfa349p20
++0x1.4c5ab26cb0893p17
++0x1.cb8c42b26858cp4
++-0x1.65eb419220961p8
++-0x1.49628342f28b6p25
++-0x1.0b70b20ac9274p-17
++0x1.22d8177d1ee00p1
++-0x1.df4a5041f3718p-24
++-0x1.ad8cf7fdfad7fp-1
++0x1.a24842645f612p5
++0x1.36eac1a4ee651p13
++0x1.f72fc2f8c5b6cp0
++0x1.60901647c0c3bp18
++0x1.983594e2c3028p2
++-0x1.ae2e63b37144dp-2
++0x1.63d9f29bc831cp3
++-0x1.3f91157ed1b34p30
++-0x1.f6a1a206c06cfp791
++0x1.e5ba950e3dd7dp9
++0x1.3db5f00ed6a5bp-2
++-0x1.e758d3fa84fb9p14
++0x1.26a215493eb73p-1
++-0x1.9fbdd53b4633ap25
++0x1.c6bd362b83b42p28
++0x1.a57c06d6537a5p-3
++-0x1.4d5ac675483eap-1
++0x1.1b5483494381dp10
++-0x1.a5e0731359db6p-17
++0x1.d3285119915d0p-1
++-0x1.9be71114e21b1p18
++-0x1.ea8b7689adf04p125
++0x1.78fea6e183fbep3
++0x1.f0cf91eb94836p278
++-0x1.3306524c34930p191
++-0x1.4a2f071f69873p17
++-0x1.ff2122f77561ap-2
++0x1.511377046730fp229
++0x1.14d73581dc669p976
++-0x1.eb7e33dcfee72p35
++-0x1.f4dbe5a5ff877p6
++-0x1.d825938e1c238p6
++0x1.5f0be541c74cap-6
++0x1.079e24e0494c1p18
++-0x1.34a8d3f3b42a6p901
++0x1.34dc83fb0c6e7p-2
++0x1.cf75150d00db1p0
++-0x1.f031f0e0356b2p882
++0x1.6b7973cd0aa93p862
++-0x1.310095a968ce1p-2
++-0x1.2866d1eec6cc3p-16
++0x1.8191b0738f308p613
++0x1.456f53f700f99p7
++0x1.62847459e8128p183
++-0x1.ba63e002b502dp-1
++-0x1.1fc736191f77ep2
++0x1.37572263819e5p-2
++-0x1.7ae3b64ce441bp0
++0x1.202e1625823d7p11
++0x1.789183b6d53c2p33
++-0x1.9f1015a572e03p27
++0x1.ac19f4c66f202p21
++0x1.3ffd935b47f14p827
++-0x1.21ec60724c4d4p-23
++-0x1.7d92c063e1943p794
++-0x1.3329c4f9bcf9fp-1
++-0x1.fb79b1e12f1b9p-1
++-0x1.b453f204e2828p572
++-0x1.05e91426fc791p287
++-0x1.a0aca06187ac4p-2
++-0x1.944d07402e20dp10
++0x1.8b84302c454dap-1
++0x1.57da67e840d07p-2
++-0x1.5e139699b437cp0
++-0x1.9611421dfe9a2p2
++-0x1.dfe0a6790c2a1p15
++-0x1.8d68a527dc4fep9
++0x1.75d6920bfd64fp1
++0x1.6ea3c72a463d9p0
++0x1.017036841b9aep45
++-0x1.b24cc456e7eecp11
++-0x1.8fddc0abaff9ap16
++-0x1.2415b665f8c99p26
++0x1.8e6f32ff35e01p12
++-0x1.e26252412c215p-2
++0x1.955a700a5a653p-8
++0x1.0ea7178825459p46
++0x1.296d37b08b64ep140
++0x1.166047ebdfbedp977
++-0x1.4bcc33f01f7a1p36
++-0x1.98d541beb3ab0p367
++0x1.d75a350666c4ep36
++0x1.c04822eb730fcp105
++0x1.da66e151417f3p296
++0x1.cb5376938dbe0p20
++0x1.2bf8f7b48e8f0p15
++0x1.8258537a3087ap19
++-0x1.3f6af42d9b4e8p19
++-0x1.123aa03954350p38
++-0x1.768367b440c00p2
++-0x1.406233b0d0f57p1
++0x1.d8af4507de888p270
++0x1.1ed46343e62d9p16
++-0x1.0d2394e306c24p25
++-0x1.2a47265c02b22p13
++0x1.67f5d015d7adfp-2
++0x1.6c7e32a8599bep24
++0x1.4ff3f3faf1308p-17
++0x1.6035a2fc3ea56p-2
++-0x1.e85e0106abbc3p764
++0x1.86eae4c63027cp-1
++0x1.c79935bc19ae9p24
++0x1.a99b811fcf714p-3
++0x1.dc958723955fap32
++-0x1.f256339f1d6d3p-1
++0x1.fb29c0800abbep8
++0x1.bfad063d46fa8p37
++0x1.12b4c290f307cp0
++-0x1.8cd584141bce7p26
++-0x1.ba60a391b830dp4
++-0x1.56d524c7c30dap41
++0x1.6ffee3009fd2bp26
++0x1.8bb180dc99719p8
++0x1.6e1fe42f432d5p-10
++-0x1.37a006c891712p46
++0x1.2f1c942c39c55p402
++-0x1.238be2f2d8cf2p863
++-0x1.2b9d539b3b59ap21
++0x1.73b8e458a50b9p21
++-0x1.2768e227b49b5p-2
++0x1.1516936960c2ep26
++-0x1.ddde71ae89716p47
++0x1.cde9e237806c8p332
++0x1.14df62ffadc86p22
++-0x1.cef3d59d11bbfp0
++0x1.147587cc39596p11
++-0x1.184116faeabd4p6
++-0x1.52c9054a194efp532
++0x1.00f111e190f7cp18
++0x1.d7f525064b7ccp536
++0x1.0d44e7cc02644p100
++-0x1.16d8e062f9b27p33
++-0x1.57b431dc4ddc9p-25
++0x1.b6ece13eb981ep-18
++-0x1.ef7cd24e26cddp28
++-0x1.bedb764df5e91p14
++-0x1.7a53f5bc491f2p-2
++-0x1.c75c474186d48p-21
++-0x1.7948a2340f8ccp27
++0x1.7f28459c4c5b7p-3
++0x1.7dba412384bdap24
++0x1.f1a1763482009p751
++0x1.e89f662826886p703
++-0x1.cac75138c3526p13
++0x1.39e786d2dc05dp9
++-0x1.c0de8654d9d2cp-23
++-0x1.b5b83454d5726p24
++0x1.dfd9b4f326a02p9
++0x1.5a792494bf6a7p602
++0x1.c4f9f5fc40745p-1
++-0x1.dec4154d34035p22
++-0x1.d20985b372880p13
++0x1.e08322497ccc7p34
++-0x1.088f34cbb4570p-3
++0x1.153a418434cf5p-1
++0x1.e10de5e9186fep0
++-0x1.dd6d97c9413f8p14
++0x1.2386d6bba99b2p22
++0x1.feb6a2da00daap-2
++0x1.e1ce1507325e8p33
++-0x1.282147169eea5p755
++0x1.bb36d35a952fep-2
++-0x1.f78ac5d6e92e7p31
++-0x1.3fbb37d76149cp464
++0x1.c565b245f458ap-2
++0x1.63dd7410e99b0p46
++0x1.374ad2ddaa195p20
++-0x1.7679872738853p47
++0x1.9d2e621a95f51p10
++-0x1.63681742e61f1p160
++0x1.723377f56685fp25
++0x1.d4b42063b45aap-10
++0x1.faa64445b0a9fp5
++0x1.9f13f08a2c68cp24
++0x1.5e08863f90e4ep634
++0x1.3520f14a3d100p12
++-0x1.6dec1180c4a30p23
++-0x1.363ad7dd94e15p91
++0x1.957711c469872p4
++0x1.6a78174e047cdp283
++0x1.e9ce64d645dcbp25
++-0x1.aa5cc3fc79e94p540
++0x1.313657c5c4981p298
++0x1.6c129238ecbdbp0
++0x1.817ff5141d57ep0
++-0x1.a1a6536a8fe4cp926
++0x1.bbd8e12bdc612p0
++0x1.1a0a03f67cd7bp2
++-0x1.415d0133cd310p2
++0x1.08b0c1e34b29dp35
++-0x1.e428432cbb7d5p9
++-0x1.b9bd67795f0c3p0
++-0x1.a893152e49e16p5
++-0x1.e81760a539c99p33
++-0x1.9d53d5c59a937p38
++-0x1.cefea277671d9p11
++0x1.ff43248d63df5p24
++0x1.593914af16198p-21
++-0x1.f34910fa15b18p0
++0x1.58dab48d5e553p0
++0x1.0a37f2b44bad6p35
++-0x1.fc5f828ec77eap-15
++-0x1.6592d152f9b08p472
++-0x1.85a5754cd7c5bp12
++-0x1.3c3e25ef48b5ap726
++0x1.d27767aecb29dp5
++-0x1.ee967500bcd88p19
++0x1.be64452b706aap-2
++0x1.9406e7378ff47p3
++0x1.ca3c24bcd59c8p25
++0x1.407c766a773cdp29
++0x1.26ef70700dfa8p789
++-0x1.b493b77a34bb6p-21
++-0x1.2d5334bdb970ap3
++-0x1.f31ed51dda243p-1
++-0x1.561677af890b4p-2
++-0x1.52ad65df5e675p29
++-0x1.46d5938b70d32p22
++0x1.bd8b859bdf9eep23
++0x1.a515f6afc22e2p8
++0x1.697520652bfd6p-1
++-0x1.cca3159203943p11
++0x1.c7a4967c92f5ep21
++-0x1.e4076083ff124p118
++0x1.4795b3dc73be5p21
++0x1.4f5cc76450352p25
++0x1.5d66d43044e72p-12
++0x1.6e6e764a0b517p376
++-0x1.3c2c46d020cafp0
++-0x1.71878383e54a0p11
++-0x1.90106128d6098p13
++-0x1.345da3083c0cap37
++0x1.1f3a52c232082p1
++-0x1.b387718274c28p28
++0x1.c4c15722ddd7dp4
++-0x1.c67b533fc5d98p18
++0x1.9ec4236ad4513p0
++-0x1.262a57b5908ddp581
++0x1.138ff2f62ed96p924
++-0x1.2a3377ef850f0p9
++-0x1.558bc5f67ee33p-14
++0x1.e888750254606p-22
++-0x1.f9d0d50d11f2ep37
++-0x1.777ae766c28a2p29
++-0x1.09e346e656647p17
++0x1.eb546416c8f84p293
++0x1.174e663e83926p36
++-0x1.ba27457883c9dp-13
++0x1.0e21179146e72p1
++-0x1.dc30b5c7227e5p-1
++0x1.1c5330a65cc14p-23
++0x1.776655ee11a36p634
++-0x1.4c06c77fa9d4cp21
++0x1.0d94e52fa5002p19
++0x1.7401000fb7cacp24
++-0x1.d7d3544b26309p0
++0x1.93c922c6fe31ep-2
++-0x1.a3a0a3914f51ep-1
++-0x1.4059b70d2e1ecp24
++-0x1.8d2e12a9a241dp38
++0x1.0a7df2e2ab942p296
++-0x1.8b1a329e5ca50p0
++-0x1.006b53dc2aef5p1
++0x1.e69e734d01bbep21
++-0x1.8586769b7591ap20
++0x1.e609e60aa3770p804
++-0x1.f62974bd1fcbfp13
++0x1.c487460dd09fep7
++-0x1.301c302e779c3p20
++0x1.c142e3e9c59afp-1
++0x1.37b9223a076c1p0
++0x1.9ed467a1acc4ap7
++0x1.85f744c68532ap-20
++0x1.a76c83c5cb5abp9
++0x1.2e4d91120cf95p743
++0x1.20a2a661fc64cp6
++-0x1.de8b904fc74c5p17
++-0x1.3efab0ae9c967p390
++-0x1.baaaa4beb4737p-1
++0x1.c7a8c31fb995dp292
++0x1.0ac905d847bf4p-1
++0x1.3e16b224f5c6bp0
++0x1.f24711f81bd86p-13
++0x1.278ae68d14b89p25
++0x1.13031191b1bbbp357
++-0x1.0ef5a328fd16ep13
++0x1.725d3352c48d0p-1
++-0x1.4b4e915a26043p4
++0x1.14d3f243c8183p21
++-0x1.0adfb179858e8p-12
++0x1.2048f1cff6f18p1
++-0x1.56b496d283959p-2
++0x1.0ae9d3320c997p1
++0x1.76b1309a080c2p-1
++0x1.40edd36c748b1p37
++0x1.cf356041cb269p20
++-0x1.2a6e248dc8560p40
++-0x1.565ee78e2b2e6p-23
++-0x1.8958f521381a8p1
++0x1.fd0df44606563p-22
++-0x1.a9612691423a1p-22
++-0x1.16bab391b0ce9p13
++-0x1.0c3ef5c0a4b6ep-13
++0x1.930b260dda0a5p13
++0x1.82c01684f4c65p678
++0x1.2c88b588e9bcap4
++-0x1.e11bd2ef6de2ep-1
++0x1.8944d76626ab7p669
++-0x1.693890da99eb1p708
++0x1.78b1c579b4d4bp1
++0x1.745707b19c6c6p-2
++-0x1.89a741e1dfe7bp23
++-0x1.d99707ee6300ap8
++0x1.635006e567dddp168
++-0x1.37f2423f6167ap0
++-0x1.736a4513d92c2p-10
++-0x1.676693b285b0ep584
++-0x1.8c741522b0a01p15
++-0x1.34b35744794b8p30
++-0x1.0d6de0053f3f3p1
++0x1.e1acd5fefb9f4p551
++-0x1.288825d0eac71p480
++0x1.7e1cc30d3316bp25
++0x1.2b46a2786f662p10
++-0x1.e35d76793d823p18
++0x1.b36c0651aa89ap949
++-0x1.ead715358b740p-1
++0x1.87c461d4ae342p29
++-0x1.7582e22ec0fffp682
++0x1.ccee33c7e403cp-1
++-0x1.c129832b83460p26
++-0x1.a73d4529d4d51p-1
++-0x1.7a9417de1e482p-2
++-0x1.cfe415b09159fp5
++0x1.9937b7d8057d3p-25
++-0x1.1185143f94830p33
++-0x1.d243651a4c153p41
++0x1.738c07ff28a5fp33
++-0x1.8c5de38eee632p1
++-0x1.c81275f494f57p-1
++-0x1.9fd4660ed63a1p25
++0x1.18e380b5f2781p44
++-0x1.497f37a345aa8p934
++0x1.0bc797ce995e4p47
++-0x1.490600f788389p539
++-0x1.92e3e1c5eb894p4
++0x1.d6977199168acp335
++0x1.d06137ede4884p959
++0x1.b25ac40cef705p432
++0x1.695eb77a3a499p-1
++-0x1.7e5900737e9ebp17
++0x1.639e337b89a9dp238
++0x1.e967a4713d5a0p43
++0x1.56f9e4a16d041p346
++0x1.b90fe0e573bd2p902
++0x1.8fc2151c3268ap13
++-0x1.0c5b50a95ef55p-19
++-0x1.cd09619d8ede1p5
++0x1.e23a368aeff4bp45
++0x1.a299d6fc56011p-2
++-0x1.7946b6c035ce1p6
++0x1.f0c2d3f3f6809p23
++-0x1.857651fc6cb0bp22
++0x1.8b6c9589243edp28
++0x1.d0063763af7b7p-6
++0x1.a03a279df3b61p-12
++-0x1.8f6440dd3a571p15
++0x1.5702115e3395dp11
++0x1.753293dcaaa78p0
++0x1.691ec4d9bd585p165
++-0x1.b671f3877ed27p0
++0x1.97af437bbd99bp36
++0x1.664c00fb70dcap26
++-0x1.94f1c6757b92ap27
++0x1.97dd3222f8901p36
++-0x1.ab2ec50e36b5ap16
++-0x1.42ab81528cdc5p29
++0x1.9537a3e475a1bp-1
++0x1.69ba402842bdfp-2
++0x1.204fa031269b9p12
++0x1.acd0117b50401p10
++-0x1.6f1e24963cba0p24
++-0x1.3678853a3c342p17
++-0x1.1c7fc2d0f2645p1
++-0x1.af8373184d592p-2
++-0x1.f931f3789237ep3
++0x1.05b356c5c6808p-10
++0x1.e49f04420f1a3p0
++0x1.f535c5c0909a8p198
++-0x1.82dc21619e2b7p34
++0x1.479b9359aa14bp35
++0x1.92d325fbe6eecp11
++0x1.909ea21f78d00p1
++0x1.435cd7c1ee887p8
++-0x1.3a9fc4354363cp44
++-0x1.00b646dd4b498p10
++-0x1.11a1e6e51f4f5p115
++0x1.1a7ac52b21875p-2
++0x1.e6a8849733aefp-19
++0x1.6962c39edf43dp25
++-0x1.ea1d7661b1044p68
++0x1.0337f102c6521p26
++-0x1.762915df91144p289
++0x1.446ae20aa874cp-2
++0x1.94e331e8c93a0p16
++-0x1.7c7b439118666p25
++-0x1.5f8ad60de99e9p6
++0x1.549137cc746edp-21
++-0x1.21d9e6074ed97p0
++-0x1.574861d5d2449p6
++0x1.331650a915232p11
++0x1.e646a1f117d41p25
++0x1.2018d63454393p-2
++0x1.4cb4c39f91e0dp28
++-0x1.5dcfb2b00277cp-14
++0x1.daa065c9d4747p-3
++-0x1.628af5ece9cb0p-9
++-0x1.0443e4cad7780p-1
++-0x1.dedc5001517b5p0
++-0x1.9605a6741836bp-2
++-0x1.0eac403d3a375p-8
++-0x1.907957a46c55dp33
++-0x1.bdd996400fb39p366
++0x1.5d60d6c3bc1e3p13
++-0x1.f684f28967382p-9
++0x1.d2bc13e424342p0
++0x1.1306d48e431d2p123
++0x1.a44ac34907179p254
++0x1.80a0b504d05cfp46
++-0x1.c4c130a5a2ab3p4
++0x1.aa9875a0ad120p42
++0x1.92f40304c3502p-1
++-0x1.5a086217bae89p-1
++-0x1.7f92461fb7863p221
++0x1.dcaa21c629a7bp20
++0x1.973c70526c1c4p10
++-0x1.58f6b3cebb936p0
++0x1.366af7287b353p26
++-0x1.a150963ef219bp-13
++0x1.8dcb25a44c4a5p25
++-0x1.abb293ca64809p16
++-0x1.55ce241f8abe8p4
++0x1.e0113452c0f03p38
++-0x1.27fc007f4c82bp-1
++0x1.abcb74a6eeb53p1009
++0x1.53b0f0bb07b86p14
++-0x1.54c8141b03f12p36
++-0x1.0736e6ee73839p30
++0x1.75f8001aae382p33
++-0x1.024ad6d77126bp1
++0x1.57d661a9e1759p778
++-0x1.28dc4531d726dp-20
++0x1.34b0271d50e17p1
++-0x1.13b720a462992p0
++-0x1.f2dec31d45c7ap0
++0x1.51ddf26d6dc8fp14
++0x1.4f8eb36cd79c9p15
++-0x1.a3eab77c6bc5ap-2
++0x1.3536c2505e758p24
++-0x1.a48c91ce6acf6p1
++-0x1.cfe614d084590p-1
++-0x1.37c223479d8e5p34
++0x1.3ab302a5e1187p19
++-0x1.19bfb39635af3p9
++0x1.50f1731d7f698p-2
++-0x1.c5f92281bfc73p35
++-0x1.f69343f49bb20p13
++-0x1.82723036a9e57p7
++0x1.e4ed355b3c00ap-23
++0x1.7ebd829292355p0
++0x1.6a20975fc296dp6
++0x1.814aa1f83ddc5p19
++-0x1.e9fb42073effdp883
++0x1.61d877698a956p25
++0x1.dcc1f7b93cb11p-2
++0x1.fcbe6062a5d86p-1
++0x1.b28d50696ad27p44
++0x1.57bab70bb9f72p-5
++0x1.f8c9631dd7bebp4
++-0x1.cd4e077c60321p453
++0x1.8f7c10d20a751p700
++-0x1.9e3aa6a16e660p16
++-0x1.4e1b47763daf8p3
++-0x1.2039d5a282e43p45
++0x1.15d7a3ccd36b3p12
++0x1.b32b804c5c7bbp21
++0x1.bc2f721362d31p-21
++-0x1.a77f51d99609ap-2
++-0x1.78254470e56f2p885
++0x1.065b616a9cb9ep20
++0x1.a455362c38b73p17
++0x1.7cd9012d31cc5p19
++0x1.f38b658d5c5c8p13
++0x1.a1d8c7cb3e755p46
++-0x1.8720419fcf071p861
++0x1.c9d664de86fa0p11
++-0x1.3032c7cb3f4f5p20
++-0x1.4c5cb2dee8a4cp15
++-0x1.af5bd3377809ep32
++-0x1.8a3584d35cbb4p3
++-0x1.5173771549c2cp3
++0x1.70c313d51072cp6
++0x1.f6f0b32aae83fp321
++-0x1.cec9d1bb2b60cp624
++-0x1.cd421185a053cp-2
++0x1.7195806a8c89dp23
++0x1.2ad661d2aa35bp324
++0x1.72be4126e7236p523
++0x1.d9a36630b8946p-10
++0x1.7fa3815765425p19
++-0x1.70c7d60688adbp-10
++-0x1.eaa751f3372a5p0
++0x1.bdeaf5b08c989p-24
++-0x1.3a9f0155171a9p33
++0x1.3cdd52c4dc184p0
++-0x1.1bd7b2d4c4423p-1
++-0x1.9f5150c2b709ap20
++-0x1.89d8068abc6f1p842
++-0x1.ceec2438b810bp21
++-0x1.a948a503102a9p21
++-0x1.cf78364f7fc71p27
++-0x1.08deb24991385p0
++0x1.70133227579bep-2
++0x1.6205800dc93f8p0
++-0x1.4e2a376e6f0e0p721
++0x1.e30d43adb903bp35
++0x1.f64210657b93ap12
++-0x1.28618129a1956p14
++-0x1.47e9104d7daf9p-1
++-0x1.a032301a639dcp0
++0x1.64d8d4817d586p22
++0x1.bfbe973aefd26p17
++-0x1.a99ba07350567p196
++-0x1.8683c572cc281p545
++0x1.904e746fd5521p26
++-0x1.1ab434d351229p0
++0x1.78bb5749ecc74p-24
++-0x1.5a1f9122af4e0p-1
++-0x1.0096f76176198p1014
++-0x1.c374b2142bb05p-23
++-0x1.14c5717c7ab84p46
++0x1.304756bf39c0dp26
++0x1.032157b7ad5b4p12
++0x1.0167a4376c0c5p404
++-0x1.2b33e07d94903p815
++-0x1.0546b04e2f28ep1
++0x1.4e7a67202b6c7p222
++-0x1.1569c5f7c9a43p22
++-0x1.7a4f25a89b8d7p0
++-0x1.b19b42481db05p7
++0x1.2fb006b058a81p44
++0x1.41bb26e7ea591p22
++0x1.9edc565a8a7ccp750
++0x1.da4e0046b9d06p9
++0x1.53b98665e609cp0
++-0x1.42b700ad8d530p18
++0x1.1fdfb58958afdp414
++-0x1.56b4353a278a4p43
++-0x1.f706a5edd47b4p691
++0x1.ac72f4f2109fcp59
++0x1.77e333e16d85dp13
++0x1.ee51c6871309bp605
++-0x1.c61080b14654fp0
++# sin slowest path at 768 bits
++# Implemented in sysdeps/ieee754/dbl-64/sincos32.c
++## name: 768bits
++0.93340582292648832662962377071381
++2.3328432680770916363144351635128
++3.7439477503636453548097051680088
++3.9225160069792437411706487182528
++4.0711651639931289992091478779912
++4.7858438478542097982426639646292
++5.9840767662578002727968851104379
++-0x1.946913945ef0bp919
++0x1.1c8780f7a4682p611
++-0x1.e5baa0e086df7p435
++0x1.215b6544ccd9dp988
++-0x1.0400243513f3ep355
++0x1.af2591e3a6c8dp352
++-0x1.8469102c2b910p496
++-0x1.ad614701ebe00p373
++-0x1.53d895d79f028p79
++-0x1.c1f47655dbf06p748
++0x1.955383c0fe4dbp236
++0x1.fd00b10489e25p1017
++-0x1.1ac573f72a900p617
++-0x1.e6c5a2c754d63p668
++-0x1.c04c06d3c9bb6p169
++-0x1.6b50c75d0379fp154
++-0x1.e404e32d17aa6p374
++-0x1.13f7e64dd059fp981
++0x1.b83c446cc221fp197
++-0x1.6884818ec1e2bp34
++-0x1.efaea6e07ba1ep118
++-0x1.2f4a042ea2aa5p925
++-0x1.7f2ce5eec3a1ap435
++0x1.e099963c33c2ep382
++-0x1.9e21f646e47e4p72
++-0x1.1276c444b2602p767
++-0x1.091891781b177p631
++0x1.623ba2d6dd62dp940
++0x1.b41e736053e23p204
++0x1.0fdab611b5e72p853
++0x1.e438955b23efap180
++-0x1.743616457e1abp981
++0x1.06b554eea34dep70
++-0x1.83d775bab0aa6p260
++-0x1.2389541676301p787
++0x1.ec20d06255fc4p43
++0x1.f4b9d28ce2dd6p729
++-0x1.aa5f20f1a2b4ap222
++0x1.17d374c688e49p844
++0x1.3adc16a4b2461p173
++0x1.3b87c3935314ep829
++-0x1.6c5b05b13f352p661
++0x1.c76c8671f2d00p207
++-0x1.a19d949bd5ef8p301
++-0x1.ff232524cd4f5p699
++0x1.b23a63ccbf933p429
++-0x1.260cc706b7092p86
++-0x1.b4b845158c16fp607
++-0x1.6b29c047caf4ap1003
++-0x1.5451e75d6c4e5p93
++-0x1.1ce9d2b02f8b8p173
++-0x1.5f9141de74c66p228
++-0x1.8477c7f84ee2fp795
++0x1.8c20366e61996p771
++-0x1.fa14b5d1e2278p929
++-0x1.7838e2f1f3458p630
++-0x1.908427a2b2b25p89
++-0x1.4f35846a0e4f5p906
++-0x1.6ad7d5bd4f80bp26
++-0x1.e079761c09377p692
++0x1.98ac66fb30c7dp342
++0x1.cfe96007166fdp648
++0x1.2554008adbf67p470
++0x1.37c43698bc76cp113
++0x1.0eb237971695bp629
++-0x1.dbd26599b0a10p295
++-0x1.72a877adef21ap763
++0x1.cb57400936f56p750
++-0x1.82def1457c813p937
++0x1.b16f3533cdb98p897
++0x1.67f3805325585p654
++-0x1.673ba2ec64800p409
++-0x1.ce15a75f15e94p464
++0x1.fa20f59a4d4efp447
++0x1.4ac8c2d45ccbfp105
++0x1.a47d934601d32p685
++0x1.1c4d64b15b946p989
++-0x1.c8409231e383ap884
++0x1.1c4ff63867e5ep479
++-0x1.569bb7635282ep208
++0x1.27e6e0f904293p386
++-0x1.8d4e92ca6aaa5p455
++0x1.0da3b3fbc6164p128
++-0x1.0808e0778b59fp148
++0x1.c13a5641139ebp550
++-0x1.908b307add0ebp662
++0x1.49eb1291c429ap216
++0x1.fc58c4ac0478cp86
++0x1.6a2e33b334902p445
++0x1.27f611aee303bp387
++0x1.5ddb515b26a4ap933
++0x1.437534c005adep412
++0x1.55de40b98c58bp151
++-0x1.98d521c355be2p813
++-0x1.6e04203014222p146
++0x1.e4d52737fa44fp179
++-0x1.1e3fa3fb95c37p782
++-0x1.082555c869c25p980
++-0x1.1b1e726bdbf7ep429
++0x1.f475c1183eeb5p844
+diff -urN glibc-2.17-c758a686/benchtests/sqrt-inputs glibc-2.17-c758a686/benchtests/sqrt-inputs
+--- glibc-2.17-c758a686/benchtests/sqrt-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/sqrt-inputs	2015-06-20 21:22:16.303457923 -0400
+@@ -0,0 +1,10 @@
++## args: double
++## ret: double
++## includes: math.h
++0.25
++0.75
++2.0
++4.0
++2209.0
++6642.25
++15190.5625
+diff -urN glibc-2.17-c758a686/benchtests/tanh-inputs glibc-2.17-c758a686/benchtests/tanh-inputs
+--- glibc-2.17-c758a686/benchtests/tanh-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/tanh-inputs	2015-06-20 21:22:16.303457923 -0400
+@@ -0,0 +1,203 @@
++## args: double
++## ret: double
++## includes: math.h
++-0x1.79ea722d33e33p-9
++-0x1.94d4e0c3df9bcp3
++-0x1.b63e91ff711e0p0
++-0x1.299707cfa0a5ap-5
++-0x1.35ec261f6be52p-19
++-0x1.d139c624e1f41p-49
++-0x1.ba38b666e3abap-6
++-0x1.83f902d2c81afp3
++-0x1.dc37227180c76p-51
++-0x1.922cb3b58f124p-3
++0x1.3579562644365p1
++0x1.3d52b2702b0dap3
++-0x1.f7e79460fc57ep-7
++-0x1.3f96b4611fb28p0
++-0x1.a82265377c4bbp1
++-0x1.ced121527ff6ap0
++0x1.e4e26333b349ep-4
++0x1.8c5fd0ab12b60p-40
++0x1.c1b891cbc8f77p0
++-0x1.223b80efcf234p-33
++0x1.7184670fd30eep-41
++-0x1.8a4421ee0d23ap-1
++-0x1.67e981e763866p-41
++-0x1.368b80b14c57bp1
++-0x1.66353498bb0efp-39
++0x1.1aa8449c2cce7p-18
++-0x1.d70654bb75b1ep-43
++0x1.c84f96b02d6f2p2
++-0x1.f327d6a043438p-9
++0x1.212b318a2bf91p-49
++0x1.6253304db0fedp3
++0x1.ca25248faffc4p-32
++0x1.d502b71784735p2
++-0x1.5c6891472b6bdp-29
++-0x1.c05af046daa21p0
++-0x1.3f35f7d788487p4
++0x1.f71314c80ac27p1
++0x1.ffb1e0c514641p2
++0x1.cad8c2d932d94p-32
++-0x1.ff34f15f5e3e6p-3
++0x1.6156d70921443p-53
++-0x1.4b5a84c95c083p0
++0x1.c22fd4b9cc811p3
++0x1.3fa1e66f4df60p2
++-0x1.90f3f58afd000p-52
++0x1.0d16c5632879dp1
++0x1.421a752ee683cp1
++-0x1.4b25106b6dd56p3
++0x1.ac89b6ae063b4p0
++-0x1.f5a005d7de302p1
++0x1.263f96335fa00p-25
++-0x1.81c160ff9fde2p2
++-0x1.4c0a56228350bp4
++-0x1.2c2e339d063c9p-47
++-0x1.b57eb40fc048ep-21
++-0x1.53a807e326e09p-39
++0x1.535963f5cea8ap-43
++-0x1.d049e60c0ecd3p-23
++-0x1.ad3f8713c45ccp1
++-0x1.b955931acef5cp-35
++0x1.480e5368b9fb9p-33
++0x1.9f8f61aff6da0p-54
++-0x1.80ed544374dd1p2
++0x1.0a15b06364b72p-42
++-0x1.2700a6bd0f1cbp3
++0x1.8257449cfd281p-42
++-0x1.a96977ae27fb0p1
++0x1.0fbf54939b136p-16
++-0x1.68dc338c13b02p0
++-0x1.08c49666633fcp1
++0x1.7112c1edd1600p1
++0x1.45aa62e647503p-13
++0x1.24318616e191cp1
++0x1.2712f5e21b96ap-52
++0x1.cd76975043db0p-32
++0x1.9ab2842033f1fp-15
++0x1.9cf3279d8ff3ep-21
++0x1.dccc3241d912ep-48
++-0x1.b2a4e543a5268p0
++-0x1.9802a51e2fa5ap0
++0x1.3da4954669e1fp-27
++-0x1.d4670486ae6c5p-50
++0x1.12d690cf283ebp-25
++0x1.34763296811bdp-39
++-0x1.2f5427f0973cdp1
++-0x1.44a7f0d39a7cbp-18
++0x1.c954869657fd0p-45
++0x1.c99220da8d555p3
++0x1.a067b10753d0cp2
++-0x1.4cfdd35756bc5p-10
++0x1.5090825895bd5p-43
++0x1.bbbc049609e09p-34
++-0x1.d79730d4df424p1
++0x1.4aeba21a72c73p-11
++0x1.72115177d9511p2
++-0x1.3a4015774746fp3
++0x1.555713307b9b4p-37
++0x1.a877a7a5a6963p-46
++0x1.ba8ad1105bb80p-6
++0x1.e500b2666c494p0
++-0x1.7c7801ef98594p1
++-0x1.89c34195ab10dp-21
++-0x1.9653b765a54c3p1
++0x1.cbc5464770c96p1
++0x1.80dd335890daap-29
++0x1.a88610813e760p-35
++0x1.3bf7077dcaeb2p1
++-0x1.58fc25c99925ep-51
++0x1.99f184fd14ba6p-37
++0x1.a5c077f3ec9fbp3
++0x1.1676a1bd6d7fdp-31
++-0x1.151f61d509024p0
++-0x1.82b1234ed4accp-21
++-0x1.9c78a7464a06ap2
++0x1.81db55fe7d6a8p0
++-0x1.403546a25090dp3
++-0x1.884175facb7a0p-5
++-0x1.8cd807cf97147p2
++0x1.28b7d3631da7ap-16
++-0x1.dbdfc6a3b7a56p3
++-0x1.93ca444439063p2
++-0x1.863014637e6b2p-40
++0x1.6f0606cba779fp-48
++0x1.e4bb004a92da3p0
++0x1.4e7cd59b97811p-22
++0x1.d82513d934824p0
++0x1.08ea668aed516p-4
++-0x1.4eb052c08e36ep3
++-0x1.947540f62626bp-38
++-0x1.9d4c17b3aa3e3p-18
++0x1.ffdc334c6a7a3p3
++-0x1.f01e851ab2990p-45
++-0x1.040ac02963464p-37
++0x1.deca67ef259e8p3
++0x1.7ea616ef23425p-31
++-0x1.5ad5526a35b13p1
++-0x1.18477773e1136p2
++-0x1.da68368e73652p1
++0x1.d47856d151708p-32
++-0x1.8dff62e84740bp2
++0x1.512c92bc3fd5ap-42
++0x1.0d46e50f3e34bp-38
++-0x1.f2cba4b66f7aep3
++-0x1.1bd6063435779p1
++-0x1.314a92dc0593ap1
++0x1.78e992e23299dp3
++0x1.547ba4fcc9d15p1
++-0x1.10b63582d5e5fp1
++0x1.2bc994ee38c37p-3
++-0x1.8edd86fbebfb1p3
++-0x1.0f5bf4ace5c69p-54
++0x1.e38d83d2c8025p-43
++-0x1.9c31372efb7c2p-25
++-0x1.01ea8256aa697p3
++0x1.b68125750b075p-9
++-0x1.49f40645faf47p0
++-0x1.72a777e07e732p-8
++0x1.198ea0f0d15eep1
++-0x1.ecc6037c6538ap-21
++-0x1.e649c0259ccc7p3
++0x1.06f1640c8e2a4p0
++-0x1.693d851f3cfeep-10
++-0x1.0087454a6db2ep1
++-0x1.05519085ee41cp-51
++-0x1.df8af593c9a6dp2
++-0x1.fa5552ca0ed82p-13
++0x1.5d5fa0d6d5003p-9
++0x1.726ff56109b1fp2
++-0x1.17fe022e20687p2
++0x1.261da31e2fd34p-35
++-0x1.55b5028331f05p1
++-0x1.5b3682390c9a9p2
++-0x1.2e7715356184dp-16
++0x1.5be03400eeeb7p0
++-0x1.b530c329abc95p2
++0x1.b3c9837089937p-50
++0x1.9286b5e44023fp3
++0x1.106137779070bp2
++0x1.df2ad20740b3dp-26
++-0x1.1ae7653a10472p4
++0x1.1cecd7b22c032p4
++0x1.e16190519649ep-48
++-0x1.43ad33cd63d71p3
++0x1.f978d68c76a16p2
++0x1.340975e58a8a7p2
++0x1.2ca3d4cef3844p3
++-0x1.75fb149690f20p0
++0x1.1c6be31b1d0b9p4
++0x1.1b54873bb0292p0
++-0x1.73c327f48e34fp-33
++0x1.0e0354caf6818p-54
++-0x1.168b022d669ccp1
++-0x1.816c547ac8d97p-45
++-0x1.ee86709f7750bp2
++-0x1.137d50ed8e775p1
++0x1.094c253414b65p-22
++0x1.87a6a3e8c8b4fp-37
++0x1.9c4674b85fc58p-9
++0x1.2ba8d7d38efa2p-43
++0x1.35e7234d9a485p4
+diff -urN glibc-2.17-c758a686/benchtests/tan-inputs glibc-2.17-c758a686/benchtests/tan-inputs
+--- glibc-2.17-c758a686/benchtests/tan-inputs	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/benchtests/tan-inputs	2015-06-20 21:22:16.304457892 -0400
+@@ -0,0 +1,3456 @@
++## args: double
++## ret: double
++## includes: math.h
++-0x1.8223b3a325943p573
++0x1.a8a424675610fp845
++0x1.923370ded0653p554
++-0x1.759b34bb0cfdbp553
++-0x1.a390469582e59p924
++-0x1.cd9252152d901p462
++-0x1.e2d1d2e34fd97p568
++-0x1.b59d71a85565ep-15
++-0x1.be1224d8f2474p629
++-0x1.327c5786c74fbp559
++0x1.75e1260927766p519
++-0x1.d1ae866714e99p662
++0x1.a086249ef7bb6p159
++-0x1.008130223996dp463
++-0x1.f77636d051905p336
++0x1.dfed4714271cdp574
++0x1.7204451a9cfdfp372
++-0x1.31ab43b06eac7p703
++0x1.4866b5a4dfafdp978
++-0x1.cf2ba523a76c6p815
++-0x1.25bc94b7d96b8p604
++-0x1.b986e7275d085p225
++-0x1.8d4ed15015b22p740
++-0x1.58d231c6a5340p390
++0x1.5f14b443ceb0fp0
++0x1.40ae43729ddcap969
++-0x1.d4e9674fd10a8p528
++0x1.24d8e4308a916p413
++-0x1.b143609970b27p101
++0x1.b609b67cc8c6fp974
++-0x1.8fc291f86553fp171
++0x1.b24a7238fb771p275
++-0x1.cde032076fb81p545
++0x1.bbb5f22a04b44p794
++0x1.5bdaf73cb6febp803
++-0x1.58c180ec8edecp408
++0x1.b5e6345064274p152
++-0x1.83bd627132077p50
++-0x1.bb46e4e6e61a0p585
++0x1.bb9757f54f100p733
++0x1.c55d070f0ac5fp438
++0x1.3476a63166a0ep648
++-0x1.a15f134f42095p828
++-0x1.32e840e69acadp392
++-0x1.bf17857e50b11p559
++0x1.f73021afd46e7p407
++0x1.9f00e7f88fb55p775
++0x1.f64fe31245205p510
++-0x1.857c82089e8dbp933
++-0x1.e7c0240150699p244
++0x1.85f1e1ff46b97p607
++-0x1.8ac482283b408p507
++0x1.655985eb933b4p332
++-0x1.6e7ad10117706p577
++-0x1.9f9b018c5a565p944
++0x1.e15694711c05bp690
++0x1.623803fd581a2p555
++-0x1.58f8b25bde0c0p477
++-0x1.e019f3e23ca4fp648
++-0x1.6f1b061695e57p6
++-0x1.c4e4506f6c270p698
++-0x1.9249404f2bd69p-12
++0x1.f6df00b66684ap227
++-0x1.0a5ff4bbd59fap973
++-0x1.783723759a83fp66
++-0x1.f21b84834aef7p246
++-0x1.8e49927eadea1p587
++-0x1.eca7d45f5234dp631
++0x1.41b1c5ef9873cp95
++0x1.d449a6e011e9ep107
++-0x1.7caa53d604056p443
++0x1.7288a5f18c0aep556
++0x1.8d7ba3b2300e6p183
++-0x1.1747478ffe5b4p148
++-0x1.769a84af31c8ap851
++-0x1.e41b6039c9d89p23
++-0x1.273bf4a49e223p408
++-0x1.2d74708a8d553p7
++-0x1.71a9314bbf5abp11
++0x1.63c804f1dcb3bp654
++0x1.a81bb1a86a2f5p368
++-0x1.bbb1d0d267af6p679
++0x1.574264e94bcacp646
++-0x1.1ee57113a55bbp916
++-0x1.e043311b22e8ap45
++-0x1.2fd7c5340e069p842
++-0x1.2faa426020fadp642
++-0x1.92507362ad808p175
++-0x1.9318c5c281337p897
++-0x1.aeada555a018ep178
++0x1.04d4f6535e33fp367
++-0x1.e49b378f96eb8p749
++-0x1.064e801d2dc83p75
++-0x1.64deb34cefc2fp403
++0x1.6d2e677f31896p467
++-0x1.466ac0cf4dd29p746
++-0x1.609c83df01cf5p137
++0x1.d960e2cbe66a9p449
++-0x1.602bd715ecb91p46
++-0x1.b0af218f7c6a5p629
++-0x1.21a921acce2fdp22
++-0x1.f83004121d518p837
++0x1.4ca7a2fb63bc5p156
++0x1.191295449db9bp54
++0x1.c9bd7171fde58p949
++-0x1.e4162302d0c20p397
++0x1.077f42760d255p258
++0x1.a3b173403bf03p644
++-0x1.c9ff841ec836dp889
++0x1.acf92502f5b3cp624
++-0x1.b8c23518af5e3p508
++-0x1.88e416ff6ad6dp268
++0x1.6280e7b9872b9p807
++-0x1.7cd6b732512b1p212
++-0x1.67ee930f4dcfcp388
++0x1.64f4659e0b759p93
++0x1.6cfa374d378c3p788
++0x1.c1082531b7386p261
++-0x1.b8d1e18e1c2ccp953
++-0x1.46d403df71732p268
++0x1.07f2566a38fafp589
++-0x1.cb5ed766d06c9p356
++0x1.64e9c5f032a8bp358
++-0x1.a81485a8eb7a9p15
++-0x1.29d6113c439ffp960
++0x1.46f14425dfb7cp-22
++-0x1.46d884db8e124p760
++0x1.b6b2023f59712p442
++-0x1.f8fea40ac8ffep855
++-0x1.d363d57ed5fe2p800
++0x1.385f65d4ccb30p812
++-0x1.b13d912fc1851p600
++-0x1.189687400f8b5p930
++-0x1.3359b450bf3bfp285
++-0x1.64d114ac159fep767
++-0x1.9bc8e4afa247fp213
++0x1.1299f68a1c892p327
++0x1.8bca15f2a63b3p771
++0x1.92d6366b40cd5p704
++-0x1.c7cbe0307540ap1005
++0x1.d2bfc0eb2f0f9p665
++0x1.788336461cdf9p887
++0x1.64c99758893dbp728
++0x1.364825de23c96p378
++-0x1.033600f7ce301p531
++-0x1.34862202e7ecap256
++0x1.6a6f4552a83b5p949
++-0x1.a55017d2ab992p179
++-0x1.a70fc12d64d86p591
++-0x1.7f00f4d75d44fp563
++-0x1.58a4c1d691cb1p209
++0x1.37a2726f0d414p445
++0x1.b7c3035071ef7p459
++-0x1.3c5d37b781aecp256
++0x1.a979508d7bd0dp576
++0x1.708213f2fd915p528
++-0x1.2054b2257c924p889
++-0x1.0446b4b20cd97p573
++0x1.9cba327cc49c7p207
++0x1.f14ce310e4517p147
++-0x1.8e4313d57243bp405
++0x1.32f131e4e2c5dp-7
++0x1.7b7d4171a5b89p761
++-0x1.768b96404272dp319
++0x1.e389677da758ap725
++-0x1.f7f1270f6df26p963
++0x1.97bd878c7b4e3p597
++-0x1.b35ac52109914p372
++0x1.86a351193c827p418
++0x1.c78c9454775e2p325
++-0x1.f7093192ede9bp819
++-0x1.8f7823d7fe58fp200
++-0x1.2068039af64a2p944
++0x1.95a951ef8e07ap424
++0x1.98b5776341626p241
++-0x1.661af6c71f830p275
++-0x1.bded24148bf8fp265
++-0x1.da06d35c1e049p352
++0x1.50c4c103b3adep946
++-0x1.d89fc3a1a0038p683
++0x1.e01904f9e518bp65
++-0x1.904ac477905adp21
++-0x1.566ae646625edp938
++0x1.3fec71e5f5cbcp514
++-0x1.88db248db4dbfp865
++-0x1.5dc2c3388d7bbp213
++-0x1.b5ac97796d94cp400
++-0x1.7bbad1b8269a2p305
++0x1.2115275214bf2p809
++-0x1.b6727037ce307p726
++0x1.983327e1249b5p120
++-0x1.d10951541ff1fp728
++-0x1.4f84e0b4a8cd1p28
++0x1.0dbc3589068fdp241
++0x1.1e9a9359bb743p399
++0x1.a923364cdc026p924
++-0x1.20ab54a355b5ap996
++-0x1.90c1f77a05003p285
++-0x1.2772c2d8adf26p15
++-0x1.d75d54bd7efd8p221
++0x1.5d0352b2cac14p335
++0x1.92297454b3ba4p203
++-0x1.e74193f05cdd7p411
++0x1.e526b6137b06ep800
++0x1.e99bb5f69bb23p558
++-0x1.12fb97edc8ef7p509
++0x1.93f9f4c363c48p114
++-0x1.7da8c406ad9edp290
++-0x1.681230393be1dp694
++-0x1.c8ec5071ed259p771
++-0x1.1010810f5ddd5p158
++0x1.c74a81bf3dfe1p502
++0x1.1a36b350bffb4p326
++0x1.9997153de8d50p936
++-0x1.2a4b83a44adb1p262
++0x1.143135a73f62dp112
++-0x1.a9fb66d704d20p924
++0x1.52ad267e9e691p941
++-0x1.960237aa0b476p456
++-0x1.86f60247145c7p1002
++-0x1.40fc032059f50p822
++0x1.36e3e02584408p699
++-0x1.19f154949871bp690
++0x1.955050762de4dp982
++0x1.da92c16dc3379p408
++-0x1.7db2843ebc2e9p106
++-0x1.5ed053da6629fp251
++0x1.7a438137d5cf5p379
++0x1.848bf06d16cb5p742
++-0x1.10c327274daf3p243
++0x1.e7d565d867a08p675
++-0x1.fe4a75adfcf0ep507
++-0x1.27ffc345d783ap83
++0x1.7505c7af55362p582
++0x1.e91a6585b3efep39
++-0x1.c3f6c7813dc77p258
++0x1.aa1a94fbb80afp391
++-0x1.f91010d34d5a1p575
++-0x1.d1c5e776352f8p81
++-0x1.42ed75713379fp760
++-0x1.443db008d07f8p671
++-0x1.62b031d37d269p872
++-0x1.e74ca5fa66410p11
++-0x1.24c032fc2a37cp54
++0x1.b10d0082d4525p430
++-0x1.52a7436543c32p449
++0x1.80de825c86b09p478
++0x1.aeb2530eace81p186
++-0x1.069422760f985p379
++0x1.d254b2b61ba52p468
++0x1.859f00c1dfdb4p946
++0x1.b77c51fdbe932p801
++-0x1.d84b803d9a2a9p653
++0x1.fdeee09bb33b3p522
++-0x1.977296b455844p588
++-0x1.4da2b665db234p110
++0x1.6e4656ff0b546p687
++-0x1.427ef58be39fep749
++0x1.5458b4f78e18bp1020
++0x1.dbf6b5a443ad8p63
++0x1.fabc4531c35d3p786
++0x1.750be012c6154p365
++0x1.d406b5ad76da9p348
++-0x1.136ac7e63a7a4p852
++0x1.f38d97e18ed30p770
++-0x1.86eb94206ac9bp845
++-0x1.9fd97758ea039p519
++0x1.57e104a418329p842
++-0x1.f47a53b612eedp131
++-0x1.8c7f907591c6ep317
++-0x1.7797a7c218b28p683
++0x1.a65d35c8b88bfp445
++0x1.e2eb60871eb89p30
++0x1.569f174caec6bp914
++-0x1.b83cc28d283bdp-9
++0x1.4e3625ca8ae68p798
++-0x1.5b0a1690ba66cp1010
++-0x1.b964703464db3p516
++0x1.594d72f510320p234
++0x1.e0fd20fb450c9p195
++-0x1.4c71468889a23p828
++-0x1.b0550500c4f1ap615
++-0x1.0660b078d6f3ep275
++0x1.1aea54022a7c9p566
++0x1.944f35657817bp909
++-0x1.b918b7742beb2p620
++0x1.30c8214b4ebd4p1003
++0x1.b4b1127df81bbp636
++0x1.499bc35bdb268p230
++0x1.239303c6019cep75
++-0x1.2ddf17942d7abp335
++-0x1.c1cd51bb6ef20p219
++0x1.317ef522313edp576
++0x1.6622455a81f5ap165
++0x1.a7cd35a9a03cfp611
++0x1.55f8a593d1051p681
++-0x1.8ac0e40f85b62p207
++0x1.339c053ef2e4fp974
++0x1.07bac767e2915p807
++0x1.0572243093b94p336
++-0x1.7e6d32d8e9b1fp573
++0x1.05f97096a8c08p301
++0x1.a0f3f063dc5c8p319
++0x1.079d71aaef5c9p133
++0x1.aae49653bc771p-9
++-0x1.de13b5b4f8b8bp779
++0x1.ed07835644d79p859
++-0x1.86ae6094e5cb8p640
++0x1.f45d03d3167a8p44
++-0x1.1c9161ed1811ap657
++0x1.ba5ae0f7f6255p730
++0x1.3dc4917e05df6p199
++-0x1.637eb2e09fc81p-20
++-0x1.35c8010ca51abp558
++0x1.46b46213d42d3p263
++0x1.e82bb7d6f0966p439
++-0x1.4a5335f72040ep748
++-0x1.9150364d7a3e8p521
++0x1.811436d27e101p345
++0x1.1e6fd3d8c4c47p24
++-0x1.d3dd14d8c8a72p195
++0x1.7f6fa7878270ep615
++0x1.0e23f7c6192b9p883
++-0x1.64fb914120bf9p181
++-0x1.5b9b402c6b12dp216
++-0x1.67072619357dfp556
++0x1.cb6d523053edcp116
++0x1.0400b6f327cadp209
++-0x1.cb1c2559a73a8p538
++-0x1.0832e6f8f9389p562
++-0x1.e237659a26998p113
++-0x1.d390a323282adp250
++-0x1.2abb75708ac0ep1000
++0x1.93bcf2432f778p707
++0x1.bbdbe0f57dba0p780
++0x1.9ce4a245e8487p56
++-0x1.f65290202bc33p297
++0x1.2286377c2a7bep402
++-0x1.25ba94a2a1b39p23
++-0x1.7e7034f66b646p226
++0x1.dfd3921f61b6fp865
++0x1.8e77026d1dd42p947
++-0x1.259a210ae8dbbp883
++-0x1.ff947770042f4p50
++-0x1.b11b83cbe34a6p138
++-0x1.ed02f523ba5fap948
++0x1.fae0c20538cfdp378
++-0x1.f106f16618a36p390
++0x1.12f06118a71a6p435
++0x1.f459e36013ac6p193
++-0x1.b71e601c8937ep647
++0x1.741dd54a711bap303
++-0x1.5fd0806197195p648
++0x1.c08a364cba1c4p476
++-0x1.0fae377d13b6bp376
++-0x1.284b125539b1bp740
++0x1.1b26509b3d375p643
++-0x1.b3d3e132b5f3ep409
++0x1.f5e2c4a09c6f3p579
++-0x1.27c3958127ffcp568
++0x1.3d88f5ed5e951p522
++0x1.9f271783e03d7p573
++-0x1.e470858d1dc67p587
++0x1.cb625701aabb5p297
++-0x1.583541c8ef4a9p519
++-0x1.cff7a379366fdp449
++0x1.ff5284d44492bp734
++-0x1.36bec43199ee1p-24
++0x1.21c7f78d864fep503
++0x1.e84e55708a34cp1003
++-0x1.bc6db2028ef2dp357
++-0x1.03dc7515aba2fp362
++0x1.d36d2291f6b57p427
++-0x1.6b09f585f9193p808
++-0x1.9c94e5c6b368fp214
++-0x1.b637e724f9976p589
++0x1.c782220738d46p18
++-0x1.55e0e443747ecp298
++-0x1.ae36671f9deb3p951
++-0x1.ab18e77da892bp237
++-0x1.b8214411e595cp533
++-0x1.905e068e442f4p539
++-0x1.9dac66939446bp803
++-0x1.30d441b8ea8f2p401
++0x1.2023c219ba756p306
++0x1.9b83c3efed8c5p14
++-0x1.3f0ef3440cb1ap1000
++0x1.fe50609963492p823
++-0x1.b29653a0b816dp53
++0x1.3cb0a7690e4f5p279
++-0x1.3bfba620e087ap429
++-0x1.82e784a2946a4p187
++-0x1.f2a2a27a31febp659
++-0x1.1f6e730cbc7f3p330
++0x1.232570e622955p1006
++0x1.815d92a977bc4p742
++-0x1.afefb62db66b2p361
++-0x1.393f51c4b001fp-21
++0x1.2e0a56d573c24p551
++-0x1.85c9e0d20fc03p13
++-0x1.ddf8e355bc110p27
++-0x1.c421925083f29p63
++-0x1.477b658be3782p332
++-0x1.dfa7e1f25247bp101
++-0x1.0ef1e0f8a34ebp836
++-0x1.9736b5b40d3a6p328
++-0x1.fc2130e5cb2ddp72
++0x1.cb19b23ae4117p87
++0x1.5e908222450d6p683
++0x1.83d3300fda787p465
++-0x1.1f75315eae92cp312
++-0x1.4f87c66f9c24bp218
++-0x1.20a0c7bb5ab06p713
++-0x1.4379a08c0b472p507
++-0x1.37c013509290bp25
++0x1.30733493bc82ap796
++0x1.451a0144b107fp12
++0x1.d3b5609052753p696
++-0x1.baded35e9b11fp215
++-0x1.9010f587e1588p838
++0x1.0e02515adc0f5p656
++-0x1.786204df84f7ap400
++0x1.cd5976e18d08ap562
++0x1.a3b8b07edd8a5p695
++0x1.272c360b4a09cp240
++0x1.c76272882f071p807
++-0x1.05a6b23f98b31p854
++-0x1.309684da428b4p519
++-0x1.b0b45682b1411p156
++0x1.16d122510e170p482
++0x1.d219a347bf3b0p121
++0x1.76ddc05352dfep610
++0x1.2f8b83aa236f5p634
++-0x1.bff5136871c7cp321
++-0x1.449411e1a1534p786
++-0x1.6b9964e711a38p523
++0x1.610080e646a92p572
++-0x1.5a2035384b325p183
++0x1.2f15b33162e14p520
++0x1.5edd45422f82ep694
++0x1.adc571bdc2896p1021
++0x1.11ede09781861p818
++-0x1.384970657fe1cp731
++-0x1.b93df7e5ba775p747
++-0x1.80e8650f78da7p617
++-0x1.ceac833c51ddfp745
++0x1.6531a38ced12cp46
++0x1.91fb517112447p535
++0x1.52a4566db4283p745
++0x1.dc0275f484b73p935
++-0x1.a14ae7206183fp724
++-0x1.b3dcb3a37ca8cp-6
++-0x1.e79600282da96p149
++0x1.b8758421e1862p507
++-0x1.2547846b083e9p-6
++-0x1.84e3629cbab35p361
++-0x1.c716339c7bd00p830
++0x1.d39d1592b1957p616
++-0x1.c416c32a4efa9p963
++-0x1.c966d274ac272p421
++-0x1.39623033efda7p13
++-0x1.47b562fb33e7ap61
++-0x1.908e8784678e6p615
++0x1.90b9900e518b3p163
++0x1.836e560de08e8p164
++0x1.772670b0b8d27p226
++0x1.7fd2e348de960p918
++-0x1.3cd1201cba22fp198
++-0x1.a7dbd2320565cp159
++0x1.ca98f6aef3966p325
++-0x1.d0c1a2329035bp2
++-0x1.c0d31445503d7p530
++0x1.c4b027bbc1746p567
++0x1.32341565ed07ep159
++-0x1.8c7b4695abfe2p513
++-0x1.4578608c13f56p-22
++0x1.5bab8379ff00cp49
++0x1.306e7570eda77p869
++0x1.732110fa64bafp393
++-0x1.1146f698db29bp160
++0x1.6885a0cfa919ap211
++0x1.714b252420ac9p858
++-0x1.486b66411fe7ap398
++0x1.18421057ffa6ep237
++-0x1.e731c4f710eddp197
++0x1.7cff352552c84p37
++-0x1.6abf14aa70dacp746
++-0x1.f29b55bb8fe31p416
++0x1.a77473515adf8p195
++-0x1.4922814b5a637p498
++-0x1.9ce303b95ccc7p511
++-0x1.fc646726a5f20p951
++-0x1.21eac2c21fe54p113
++-0x1.e4e213df08c2ap265
++-0x1.887dd5a85818ep912
++-0x1.bbb2171b888c8p103
++0x1.8b34a46c873c2p501
++0x1.70e367db79ea0p241
++0x1.7ce0039ed7da4p808
++-0x1.c7fc26380f6c6p101
++0x1.18c360c75aad0p234
++0x1.fee2f67629486p962
++0x1.a4d7a588fe8bbp-3
++0x1.570291341d887p437
++-0x1.a10e9531b0df8p337
++-0x1.ca6825fbb4bf7p602
++-0x1.c8d000ca12af8p113
++0x1.b74a232faf0c9p-10
++0x1.1dfd417243258p88
++0x1.c755e373bd292p806
++-0x1.3124b71499691p1020
++0x1.a84680e1992ccp483
++0x1.c5b2c448b0259p534
++0x1.c54e340119590p56
++0x1.42d4e3fc4a7dbp943
++-0x1.6f81959716f0ep600
++0x1.38fac2222482ap313
++0x1.aa4840527639dp-25
++0x1.9ad706bfe85f3p1020
++0x1.2f2da18ecac33p825
++0x1.6ee875bc8e577p747
++0x1.da3412d07c978p387
++0x1.cd8e14f3d97dep105
++0x1.cd6cc00d3cff1p360
++-0x1.f7bd4156bade4p679
++0x1.9d89611d9047ep925
++-0x1.2b41b1691def0p18
++-0x1.806210fa000dfp258
++-0x1.2f49e07812d94p116
++0x1.339605b7fab92p1020
++-0x1.0c09f7db12243p891
++-0x1.81a2a42a061d3p903
++0x1.a791057d419b5p888
++0x1.581315b6920c6p-21
++-0x1.c5f64504ae5f4p791
++0x1.8982e6ced130fp227
++-0x1.d0db364678c1fp12
++0x1.43aa32552d958p657
++0x1.899c234387f3ap633
++-0x1.41470481079e0p614
++-0x1.2aa723c52c3c4p920
++-0x1.bcede1fa49331p512
++-0x1.f37ac77972cdap-18
++-0x1.e22c64e877035p779
++0x1.754480a7b3bf9p898
++0x1.6ae1a66d4b83dp6
++-0x1.90c107ffacd38p913
++0x1.b9381618da422p371
++0x1.a981920976fa2p680
++0x1.3a6ec4b57bc2ap15
++-0x1.28dcc1f6d20bdp108
++0x1.4326147c15728p335
++-0x1.2259a0e73e4f4p122
++-0x1.11cc764de91bbp18
++0x1.f481816abfcb9p72
++-0x1.c1d2d049ee85fp-23
++0x1.61e4d0a08bebdp12
++0x1.d86ed0f586a17p516
++0x1.b100560d69d98p432
++-0x1.50b8331476685p30
++0x1.9f32c7425b9f6p739
++-0x1.d89d2066c2887p0
++-0x1.61ee079dde498p465
++-0x1.3602968762b9ap32
++0x1.4c2c9725ac92ep-20
++-0x1.3a0d7321c02abp108
++-0x1.b1325468e8fdbp781
++-0x1.613d634860a5cp756
++0x1.41f616b0ffe33p752
++-0x1.61a3765afebf9p788
++-0x1.538be659aab9ap199
++0x1.da3661b9d7828p8
++-0x1.76e835de4916dp-21
++0x1.83db501e98db6p965
++0x1.184bd1b938793p927
++-0x1.6352b0ec9b3bbp851
++-0x1.e00891c81db9fp966
++0x1.6d2bc0bc2c25fp29
++0x1.16f205d5ea0efp341
++-0x1.222b02360aa21p423
++-0x1.c43fc00ad0827p175
++0x1.4a9da6ed14181p96
++0x1.742f7252b3888p-24
++0x1.e3a1434f237eap-6
++0x1.788f015a48ed8p487
++0x1.fdd0a707a7b24p120
++0x1.bab124b6990f7p10
++0x1.c8ffe2cf83b94p755
++0x1.2372c778a1441p348
++0x1.612b072d760cbp958
++0x1.609f218942867p274
++0x1.0483c3df44e59p24
++-0x1.6f1a40a16d5e7p406
++-0x1.784bf15a26f31p173
++-0x1.7fd4e7bec6056p611
++-0x1.c478c30401e95p33
++0x1.0bbaf1e77d127p947
++-0x1.0e6da7540b809p122
++-0x1.47a8d09dbc89ap895
++0x1.bc06021871563p927
++-0x1.f89bc1de14148p464
++0x1.98a2f4afe66b7p674
++0x1.5f0bb5633b7dbp833
++-0x1.8ce676f64c1f2p25
++-0x1.4c8a51a1b0cbap555
++-0x1.8210c69bcd3f0p26
++-0x1.0b4731be2b020p855
++0x1.73d857da7baa2p23
++0x1.01075749d6fc6p689
++-0x1.112e67981aa71p146
++0x1.b01dd2c3cacd8p793
++-0x1.cd5737ff4c257p433
++-0x1.3e519196e9292p729
++0x1.5b65b0284bd0dp839
++-0x1.1c4762b976c53p-10
++0x1.794245506f756p32
++-0x1.4e1c35958207bp707
++0x1.c3913360602d8p800
++0x1.83f2621884b92p26
++0x1.c069f020301dcp328
++0x1.b27b85f417892p184
++0x1.e004a34aff785p750
++0x1.29fc70b6808adp70
++0x1.2ec1a69b905fcp919
++0x1.df6a235533225p599
++0x1.438a2370d9eebp231
++-0x1.dddd767c99337p889
++0x1.0568d154a2870p18
++-0x1.3363041710f4ap216
++-0x1.64eb7482628abp653
++-0x1.3772b3ab575c6p0
++-0x1.1bdee549c535bp184
++0x1.d556148c8ea18p820
++0x1.6d31247f5cf60p84
++0x1.aec7658e1d55ep-7
++-0x1.df40a65c08fd9p16
++-0x1.359021a96067ep851
++-0x1.47ef93788827ep585
++-0x1.d9a6960c12269p688
++0x1.67a8b27b1b917p158
++-0x1.d6d2a6399e8d2p292
++0x1.431a4325d3651p320
++0x1.b274e747ec490p365
++0x1.d042571362911p3
++0x1.3ffff11ae8155p254
++-0x1.ea8cf38a078e5p25
++-0x1.da1f81d728183p288
++-0x1.d2f442f6baea0p3
++-0x1.1125e418910dbp22
++0x1.e28ee7f211bc6p608
++-0x1.c7b590b383ae1p490
++-0x1.ec07032c9fe8ap417
++-0x1.2f82b55eebd81p266
++-0x1.2d0c72c2a6eaap3
++0x1.7654c41150714p-8
++-0x1.cb7ba6fe71addp17
++-0x1.ea76b17ba5274p1
++-0x1.cee634f158cf0p478
++0x1.9389c0f24345cp-5
++0x1.ff0ab7bfdc77ep0
++-0x1.5a2a9634b735ep118
++0x1.a99a656f9766fp9
++0x1.25e6b6c33e77ap760
++0x1.5c07b3fdfc784p24
++0x1.659bd21884363p21
++0x1.a1e2d2a599b2cp-2
++-0x1.b669c6b9ff4eap954
++-0x1.227fe1b1d363dp375
++-0x1.9d8815914355cp23
++0x1.08f9c73e5d0b1p58
++0x1.06ebc1e205a69p11
++-0x1.c475c33c6e4d9p419
++0x1.26e2f03c3b568p952
++0x1.142e653198e2ap876
++0x1.a17610c798c44p385
++-0x1.5d25b7f4ed01ap784
++-0x1.553e05b0c2d7fp1
++0x1.ac28301a1a99dp-5
++0x1.1e2830cae9f10p585
++-0x1.89ecf76a7976bp784
++-0x1.36a6c7f575816p91
++-0x1.3290c1e3ab0fap439
++0x1.571f2024af517p407
++-0x1.9e9f16af2b7f2p-19
++0x1.547107a4abf1ap556
++0x1.8d9bb18e74c7fp327
++0x1.6bf844726431dp79
++0x1.6882c40a36829p521
++0x1.5e33a37495769p499
++0x1.aa1c25076a0c0p54
++0x1.af11a32c8711cp844
++0x1.842ef2865faebp19
++0x1.69ab61853a58ap25
++0x1.9955a12bf91eap155
++0x1.e8a7220cbb889p593
++0x1.c275a73192796p259
++0x1.f79d74bb2c42ep261
++-0x1.b80435f49efd4p25
++-0x1.a3f243a5aba38p960
++0x1.ab2a83515090ep837
++-0x1.b93c62ada1c23p12
++0x1.b042d7b712ce3p608
++0x1.e173865ea2fbfp711
++-0x1.c721e58a282efp25
++0x1.b7dd57c5e569fp171
++0x1.a148e142f39b9p699
++0x1.2a5fa6d540fa0p62
++0x1.34bb57427099cp574
++0x1.6f2dc0bc39621p500
++-0x1.0cc9448729503p734
++-0x1.c234d03687945p494
++0x1.7bccb6482f77ep4
++-0x1.8c5e908aa7fb5p831
++0x1.b1df92d2ec3b8p283
++0x1.e333354359049p989
++-0x1.e892b0f07a619p220
++-0x1.ec44220b9f17ep8
++0x1.f25a34ac7fbc6p7
++-0x1.7472b4254d705p367
++0x1.22e011afd6d0ep345
++0x1.065d20ae2ee95p117
++-0x1.6418273399593p831
++0x1.388612f03819dp40
++-0x1.dfc0d7643e76fp-6
++-0x1.7689e01d3ef5fp189
++0x1.f48a26de3d1a5p673
++-0x1.3a86439ca37c9p-23
++-0x1.de0cb3b3a1df8p355
++0x1.8fca33d3d5d24p550
++-0x1.5ee022e10d5ecp145
++0x1.d65386a7e7b24p408
++0x1.a75471ed7f723p3
++0x1.84a43795ffed7p-25
++0x1.270743fc743fdp404
++0x1.3fdc27ff3d6f6p16
++0x1.c2ca7781852bdp415
++0x1.783d81633686dp295
++0x1.0c62c5098c3c2p-4
++0x1.abe5e0d2c9c74p9
++0x1.8763249337c43p522
++-0x1.354a300bdf2b4p9
++0x1.77f8512b9b058p494
++0x1.85e423863bfb1p299
++-0x1.ff6a529c5f799p582
++-0x1.af91845aed73dp292
++0x1.bbe7d76864319p838
++-0x1.6b92a5b928341p42
++-0x1.bc96d3fe8ae11p453
++-0x1.4cf8e5fdb6606p14
++0x1.d7a286a93d573p552
++-0x1.1e168326fabfcp619
++0x1.2b78d4cf920a5p-11
++-0x1.8b6761d15a192p11
++0x1.7e41058d14f88p444
++0x1.4ed112f6fe397p276
++-0x1.4db517680987fp623
++-0x1.2224f5210184cp332
++0x1.bebb126a84646p845
++-0x1.3890a2fcd6ed1p771
++-0x1.ff3303971888bp-10
++-0x1.c088d7303166fp9
++0x1.3da6a7f5bc078p14
++0x1.151f505312964p29
++-0x1.3d0bb60c7b363p104
++-0x1.6b9a26936754ap496
++-0x1.9199b437eccc0p127
++-0x1.aa36d2b9371b7p445
++-0x1.0b8f350ea5f8cp-22
++-0x1.f1f4b4b0405cdp-11
++0x1.3105b5f0ba9bcp-15
++-0x1.aa88d154a4ddep551
++-0x1.0f68f1251f868p291
++-0x1.9f078781f160cp1012
++-0x1.9cabe23aae521p577
++-0x1.4dae06e7b4120p16
++-0x1.e43e623d48c49p-18
++-0x1.29ccb1801e4c7p77
++-0x1.6adca332f1fe7p-13
++0x1.4d98f1ff8002dp-9
++-0x1.b5a3575f4713fp470
++-0x1.6374a29768141p237
++0x1.af58667bcfbf2p127
++0x1.128ff1d95cbe2p22
++-0x1.1cd1c2bf75c3dp394
++-0x1.911146b47e563p965
++0x1.c9b034c25b038p1003
++-0x1.f45070caf3082p630
++0x1.dab7970bc1de9p1
++0x1.4aea409a375dfp287
++0x1.59d34792a5525p482
++-0x1.50cd458fc25dep253
++-0x1.759d44cd1fd81p269
++-0x1.04a6060096d96p-3
++-0x1.604b42f7ccab0p419
++0x1.c30db3408e834p20
++0x1.f7d0003cef355p465
++-0x1.d33647c71ddf6p713
++0x1.941117709cdfdp23
++-0x1.8aaa468ff284bp786
++-0x1.4c6536f0b6777p-16
++0x1.8c86677fee3afp133
++-0x1.0b1b35dbd7737p325
++0x1.de2f93f581a04p12
++-0x1.5a3ba4b477d56p15
++0x1.e83645234e293p24
++-0x1.3fca1310ff561p74
++-0x1.2aeb7470b2da6p635
++-0x1.3f3ad4cd76224p25
++0x1.09752219591d6p-12
++0x1.bc88b48080aa6p31
++-0x1.e98923b202a64p20
++0x1.bf0474f0f41e2p104
++0x1.a4e9d3f2451a8p3
++-0x1.3541735027a8bp560
++-0x1.f73dd55c810dfp23
++-0x1.505b10dc0eae6p912
++0x1.3649c1c465dd4p17
++-0x1.c777e501c8dfcp21
++-0x1.5701a0b3897a4p11
++-0x1.c320c380b445cp712
++-0x1.1b36c09e0a14ep663
++0x1.f60ea3f1a14cbp561
++0x1.c6a3005c06a44p-18
++0x1.af722598ce867p659
++0x1.d636c36a5d8afp187
++-0x1.16a3c0a4e81aap-7
++-0x1.8f3db57790c2ap-19
++0x1.703ca04fb8f62p-17
++0x1.f73de47c2fb9ep35
++0x1.973a34ff90b9dp-18
++-0x1.d08281fbb5c2cp838
++-0x1.be0f904e8c33fp342
++-0x1.e01d440fbebdap-18
++-0x1.df0f220b1c2acp-15
++-0x1.bcc990cf09edap-25
++0x1.8a350004b6021p21
++0x1.0746671992572p12
++0x1.bca1f2ae769dap-25
++0x1.1c0ee394715fap13
++0x1.bc9a351ecab48p356
++-0x1.3e4cb5ef07939p17
++-0x1.f2b664e58004dp1
++-0x1.f42ee6d0e89ddp19
++0x1.5f0a34dcee39dp20
++-0x1.1debc4db7ecf6p20
++0x1.0fc713f5c5de6p-3
++-0x1.5d4db109cd5c4p5
++0x1.73e807d8297f3p-17
++-0x1.676ce231eda86p861
++0x1.ebfa67a80676ep-10
++-0x1.b9f6a30ee6469p-21
++-0x1.c73277e6727fdp601
++0x1.74de03b6dea40p159
++-0x1.2259c59f68e46p-16
++-0x1.cd68d2e6479f4p-23
++-0x1.47b7f6102f2c2p10
++0x1.cf24a2347776cp-27
++-0x1.b725b137fdd1dp-3
++-0x1.009047102718cp993
++0x1.0771b34af6f2fp-8
++0x1.049d06f739b38p699
++-0x1.e8c0710c55d89p-17
++0x1.23b5322648c9dp-12
++0x1.cf0fe10d20725p2
++0x1.50052516748d2p0
++-0x1.afddd01d4ff78p2
++-0x1.3e0df401f7903p381
++-0x1.c9fc3321d1d88p8
++-0x1.8b10a044fbcabp-16
++-0x1.89260258d6e7bp14
++0x1.db24554246421p-25
++-0x1.420505cd0119bp521
++-0x1.917894697053fp264
++0x1.4e4bc6a5bd810p-22
++0x1.613766f0b8925p-21
++0x1.96bde6095382ap-1
++0x1.0028d14831ce2p18
++-0x1.c2174546c88c0p1017
++0x1.83ec835c217c5p-10
++0x1.fe32319f71affp913
++0x1.3fa26558eafebp-9
++-0x1.170bc0306f9d3p14
++-0x1.2da6158b9104bp-6
++0x1.da4016ececc3cp23
++0x1.4aeb75f4274a8p74
++0x1.0feda4108c230p-11
++-0x1.9e9580350379ap975
++0x1.8c72429a6c6b8p803
++-0x1.753eb56c15fc4p205
++-0x1.a8d226aa188ddp10
++0x1.552f237c39a5cp24
++-0x1.5101e740c55d2p-2
++0x1.f83282678cd2bp87
++0x1.380e51076f80ep17
++-0x1.4e58c2d312887p1011
++-0x1.709a10ec34872p-8
++0x1.c115c4b52dd81p-11
++0x1.dbf4f68b24b22p175
++0x1.fdcfc21030c47p13
++0x1.e3c234340a70cp870
++-0x1.7ef4c3f9f118ep-17
++0x1.4d8ec7ddbe0a5p-5
++-0x1.ca4ae67422cf1p46
++-0x1.1e79333cf2819p-16
++0x1.088641b858387p14
++-0x1.93191290365a6p163
++0x1.f321d1dd96f4fp756
++0x1.e771b71cceff9p8
++-0x1.ae56c771a7cffp18
++0x1.4ba1448b1d144p408
++0x1.8439648ab93dep17
++0x1.65f514736d787p943
++0x1.fb6472b3bce83p334
++-0x1.73e6857d4cf54p879
++-0x1.0cb95433e6b2fp-1
++-0x1.27ae632085c5ap2
++0x1.f68fe052bec12p753
++0x1.a8cc8446b7afcp17
++-0x1.9e2494726de25p25
++0x1.d825d64df0641p10
++-0x1.ba99b6fb023c9p141
++-0x1.53a8b1ea85f56p11
++0x1.bfa5e68028b9cp930
++0x1.feccf31f1a983p-5
++-0x1.88d3a0062385ap-16
++0x1.50f3313a7d76cp24
++0x1.3ba8870e96502p727
++0x1.fffc900187a9bp761
++-0x1.683c12d0f5288p-5
++0x1.89f8430bf5854p895
++-0x1.dd1c76087e343p-11
++-0x1.2be8706763f1ep-9
++0x1.359462ac17cd2p15
++-0x1.a972c2fa07af1p1
++-0x1.fce055f5fd92fp397
++0x1.93d615d9775fdp7
++-0x1.a734a251665eap-21
++-0x1.96aec33f91274p3
++-0x1.d088b0ef518b3p24
++-0x1.e36ff2227faa0p664
++-0x1.968c9528f761cp-18
++-0x1.55feb6226d9c6p-12
++-0x1.c5fbf2dc0f1d5p374
++-0x1.30df34bf0f038p-5
++0x1.75ff2344da2ebp638
++-0x1.6c95073fd64f5p-3
++-0x1.80ecb21eaf859p23
++0x1.a395a3209e01ep24
++-0x1.08fa41560be83p-17
++0x1.f5129125f47e1p-24
++0x1.ea61c1b68dbaep-25
++0x1.f9980204cad5bp13
++0x1.ca5571cae9585p300
++0x1.1457460444b6fp308
++0x1.f75fc7df35e9bp463
++-0x1.259877b2c7433p808
++0x1.4c4fd2558a03dp-2
++-0x1.77e600a0f8d1ap10
++0x1.ce0a20f8622dbp782
++-0x1.163735c430e54p21
++-0x1.077f533341f7ap-25
++-0x1.5bbea1334dce3p22
++0x1.17edb056a1e69p582
++-0x1.ab2f3216588abp-8
++0x1.ad5473156bcecp608
++0x1.495167c77e0b7p1002
++0x1.ce1fb4d50c2d2p-2
++0x1.0b6367a2e5b51p-13
++0x1.4bebf24710022p18
++0x1.cf035256dea51p-15
++-0x1.b2d165e3c4438p329
++-0x1.415066810a6ebp5
++0x1.231e43a52fc6cp759
++-0x1.3ad3866e7e5a8p-23
++-0x1.f5ac52c3f7320p364
++-0x1.3d01b455ea097p-23
++0x1.a57f56aa1cc32p9
++0x1.043250b5cbb79p892
++0x1.49de321920550p721
++0x1.c870766bd9d53p80
++-0x1.c4fd755e743ffp21
++-0x1.b37d062015770p-2
++0x1.5022353402118p0
++-0x1.c896463f5386cp-7
++0x1.6f2f169391729p-17
++0x1.bd8476b405432p250
++0x1.322de42f4c84ap22
++0x1.c3a2c33bf9e6ap43
++0x1.9793e2027ca1bp19
++-0x1.cced16209f116p-5
++-0x1.535c83351d7dap13
++0x1.5ab2e7182498ep1
++0x1.c2aa0412973d9p19
++0x1.6d5087c15f8b6p8
++-0x1.cd9e619dfc1f9p272
++-0x1.a291f0cf8c7f3p491
++-0x1.7726454f22bc9p16
++0x1.01d737edff679p-18
++-0x1.2eee17c89d93ep18
++0x1.d690a2fbc75ddp17
++0x1.e477309fee5e9p-5
++0x1.265176315b6b7p548
++0x1.d036d3c6d89f6p4
++-0x1.70e42649dec93p26
++0x1.685656f96535ap21
++-0x1.1cfd02fa51fdep-2
++0x1.75d1455fcfa44p590
++-0x1.718613f6ca999p645
++-0x1.b254238b7bab4p472
++0x1.7afe534d5251bp-9
++-0x1.b3cdb07891d41p-2
++-0x1.f956817bbdd80p704
++0x1.e04a74104462dp14
++-0x1.d953d153059f4p43
++0x1.9a4fa2868350dp878
++0x1.7efdd4f9e156dp671
++0x1.940ad2c424e0dp69
++-0x1.4d5ad6e0fa515p-12
++-0x1.975f1701f1516p10
++0x1.686ff10e39dcbp-18
++-0x1.47c80041fd8f7p-6
++0x1.0bbcf0786c446p-1
++-0x1.7dc7163623c62p-16
++0x1.c773a0bde09abp14
++-0x1.59776427dd29ep22
++-0x1.c428306233d02p1
++-0x1.2b34449d61818p18
++0x1.946545746e430p568
++0x1.fc5d70b15d6a1p-12
++-0x1.33c530a2e703ap198
++0x1.4586c7aaed300p23
++0x1.4047f3cea71fcp21
++0x1.d95a0359eb81ep13
++-0x1.2027133fa9651p-15
++0x1.4c9c737d289bbp993
++0x1.29ed82663c830p19
++0x1.2a2431406668dp964
++0x1.140c003d7b003p692
++-0x1.ca47d1c5105abp778
++-0x1.1e42d4bc3a5bbp621
++-0x1.c487c6add8db4p104
++0x1.5240c7e94fca2p346
++0x1.8a21e49e99f87p739
++-0x1.ec7a3732512efp665
++-0x1.e7e0c60c72a8dp666
++-0x1.4b2df12f55803p16
++-0x1.1a11950ff7262p253
++0x1.913010e21977cp22
++-0x1.557b91af754ddp548
++-0x1.1a5a85b93333cp0
++-0x1.152436888890cp10
++0x1.6242f32a2b3a9p24
++-0x1.33e4b774b0406p79
++0x1.4d20507145703p18
++0x1.805ee638666c7p1001
++0x1.2088f31deb3dep26
++-0x1.2136d4a8edf58p369
++-0x1.a5c002d03e071p350
++0x1.8e25144772023p619
++-0x1.49c336247aab8p20
++0x1.209f141d6a3f0p905
++-0x1.7df363dd844bbp301
++-0x1.d8c5a2fad0ddcp843
++0x1.955904e859e69p-2
++0x1.b78170f9c0f21p396
++-0x1.1856132fbf136p-1
++0x1.daadd2d9a8fb5p366
++-0x1.904c42e144851p840
++-0x1.1086823c84588p579
++-0x1.eee3b28d8e277p18
++-0x1.601eb2587f407p532
++-0x1.e77f45947cdeap646
++0x1.ac9d1257a463dp8
++-0x1.6022b4ad26dfbp0
++0x1.35d246dce052dp257
++-0x1.d87a368873c5ap11
++0x1.b79c7081c299ep249
++-0x1.e9b573eed4beep380
++0x1.87fb012c6dbe8p22
++0x1.9ff675e52fd5ap10
++-0x1.e768e1c4dc0c4p336
++0x1.eadd71dae6ae0p12
++0x1.8097a2036b3f4p926
++0x1.88fb542f66420p9
++0x1.6548027f7a3a1p23
++-0x1.9830129387949p17
++0x1.c3d7c15bf28c5p4
++-0x1.53daf69f10b1dp0
++-0x1.b90f21ac330e5p21
++-0x1.9b0a377b76cdep21
++-0x1.d0a0a05604f38p-1
++0x1.e3e8b72617fc0p17
++0x1.ed2f26a4f9de4p19
++0x1.af91858c30b58p20
++0x1.4abc00b2bfabfp24
++0x1.dc67b22b6d111p5
++-0x1.c247046a455a1p9
++-0x1.fb41c728f7cbcp14
++-0x1.891962b6634f3p7
++-0x1.7cbac2b76a18ep13
++-0x1.fb101566432dcp25
++0x1.90448733f0f47p23
++-0x1.8884367e47700p13
++-0x1.37d7a4bfa5918p15
++0x1.778a11c7fccd0p22
++-0x1.33526112284dbp22
++0x1.acb6870fb9e6ap21
++-0x1.5a7ec1b268139p0
++-0x1.0ea0c6bcbb4cdp17
++0x1.0eeb153b1d5cep-2
++0x1.2915060d6792dp19
++-0x1.f1c193bf9731cp7
++-0x1.a37b92d1c834bp17
++0x1.ea6c164f563d3p5
++-0x1.c1a342aeeff9cp18
++0x1.341f80345a109p18
++-0x1.b96f42fb8bf4ep21
++0x1.ed99773e5e0b2p-3
++-0x1.1b9c620a22bdcp20
++-0x1.93a342bce9d83p25
++-0x1.5647879df4c39p5
++0x1.1b5a74379d8bcp22
++-0x1.f65e80bbc64e4p1
++-0x1.f514118cd579cp14
++-0x1.d72c805888cd1p20
++0x1.891fc407363cbp0
++-0x1.f5f910e2a922ap21
++0x1.13ab76a6396c5p6
++-0x1.779c34504754cp7
++-0x1.0f44243ca88f6p4
++-0x1.94d8e73e1e8d3p14
++-0x1.86ae04f21b804p22
++-0x1.dbaf1624ab130p11
++-0x1.e2b2534178f87p5
++-0x1.cd1f04e46ab89p4
++-0x1.534e73dbf82d9p6
++0x1.d77307aacf285p16
++-0x1.d02d057014609p22
++0x1.63c7f14ec1826p18
++-0x1.4700d06054318p23
++-0x1.8c9e77f2c5169p20
++-0x1.4440d5499645bp13
++0x1.f830d1530dc5cp6
++-0x1.3158f1b64b60dp16
++-0x1.fa3cd6daa1a84p14
++-0x1.6f453297966cfp2
++-0x1.b50c62db9fa33p24
++-0x1.1f01b348e43cfp3
++0x1.f96f42e962369p15
++-0x1.d42235ed34040p11
++0x1.6a97b4ebe527ap25
++-0x1.069365a978478p19
++-0x1.301312077210ep5
++-0x1.079ed7eb88a2cp20
++0x1.e181d27a14ee9p22
++-0x1.1a6ef1e1b02b6p1
++0x1.605322092fdb1p16
++0x1.28cc961d4d565p1
++-0x1.0d1b956eefd65p21
++0x1.136a46db7583dp12
++-0x1.463a51e655419p3
++0x1.06b280c58f749p4
++-0x1.81a8422a0e891p10
++-0x1.36d660b754afep2
++-0x1.869b518b7abf6p23
++-0x1.ca5da55d82232p6
++0x1.c7b553dac1cd9p7
++-0x1.5c85b71c923d3p9
++0x1.cd38e05f93bd8p23
++-0x1.72322760da308p6
++0x1.2696c6205df80p-2
++-0x1.c31466f5abe12p5
++0x1.53ca818613b56p15
++-0x1.6d0e32af8c7fap25
++-0x1.82c493bc254bfp7
++0x1.29b5476d3c003p-3
++0x1.545ad52476bedp2
++0x1.210de622c50fcp13
++-0x1.4ce9501256fecp7
++0x1.bec8f2a75761fp-4
++-0x1.ef455712f7403p24
++-0x1.05ac51c61d35dp10
++-0x1.179912e48e4d8p2
++0x1.8309468cee051p-1
++0x1.4ba7338d7adb9p-4
++-0x1.86fb84d7687fbp13
++-0x1.b440d2dfa7cfdp-3
++-0x1.f21935fed929cp24
++0x1.248647fb68621p9
++-0x1.49cbf71886ed9p-4
++-0x1.46b18502c494cp6
++0x1.d60453a7627dcp9
++0x1.90d72030622a0p-3
++-0x1.99dc012169112p20
++0x1.5b1582ba1840ep26
++-0x1.a2d0e6722064cp10
++0x1.51d930a0faa1cp-1
++-0x1.e2f5b411dfbe0p11
++-0x1.8978d711c2457p-3
++0x1.9f390111d8e17p-4
++-0x1.64e526c906dd9p15
++0x1.3442b50cfed58p17
++0x1.696de2ba96decp3
++-0x1.1797a538e22cfp14
++0x1.6b9a91b6bc0b6p15
++-0x1.230dd7b9de0efp25
++-0x1.c570875d25b1cp17
++-0x1.4e93f3cd23d0ep7
++0x1.836bf1949fdd9p-1
++0x1.d55994d3bc6a5p22
++0x1.34976081e3c93p0
++0x1.325232301be88p-2
++-0x1.724d85212c2bep21
++0x1.f6ea543e490d8p16
++0x1.9816822b9c9eap5
++-0x1.2c5942e617f9fp25
++0x1.9916d5a987c95p4
++-0x1.9e10b7e75a799p17
++0x1.cd41449ad1c08p14
++0x1.bfbd219130397p10
++-0x1.d299552d58110p20
++-0x1.10990673db383p24
++0x1.6860579da3e41p4
++0x1.57c17718caa8fp16
++-0x1.d480c713e380cp2
++-0x1.5ef770cc4fd6fp-2
++0x1.63fe54f142182p-3
++-0x1.e57fe1748c166p25
++0x1.38e472a1b69aep-1
++-0x1.d7eb84d9725a8p19
++0x1.979751083fa46p0
++0x1.af7d8295ca361p0
++0x1.93d6033938ce4p16
++0x1.60d5f07b31fe1p23
++0x1.d345416a2b360p14
++-0x1.1451d5a8abe28p26
++-0x1.da4ba1007d69fp7
++-0x1.5c7583f8bbbb3p22
++0x1.8c85070cab228p20
++0x1.bc26967cda999p17
++0x1.bcfc7238281b7p14
++-0x1.f936f6a071917p0
++0x1.c00e11c935746p0
++0x1.759dc14fe7eb9p10
++0x1.26c7d5b4b926ep5
++0x1.c6512134c5122p-3
++-0x1.9ebe3455ed58fp9
++-0x1.be4832965373ep17
++0x1.7f68b772cfc9ep18
++0x1.baca2181e77dep17
++-0x1.c2f755dd7a244p19
++0x1.c4de32af2dd91p18
++0x1.589f6697070fap22
++-0x1.4a37b4210f303p8
++-0x1.4ecfe0a126fb0p5
++0x1.89dcb692c40e7p10
++0x1.7d6342e0df42fp21
++-0x1.0aec35f5f853bp-3
++-0x1.7f68335d52ca5p10
++-0x1.84f6e31758356p5
++0x1.3a5a166d0b827p16
++-0x1.eba706d2de457p8
++0x1.489f72add92f9p5
++-0x1.da6b250d6a545p23
++-0x1.e50b35770abc5p-4
++0x1.4b1b40263e386p6
++-0x1.e6864361f583bp6
++-0x1.bf8ca4dc53bfcp23
++0x1.5de1b4a13724fp5
++-0x1.3ccf14da239a8p16
++-0x1.2c352220b6d92p19
++-0x1.7a1a04680b72bp9
++-0x1.63e577fdaa152p15
++0x1.8dd7323abf3d4p-2
++-0x1.7896d1e003d8cp5
++-0x1.b4a72034750d1p19
++-0x1.c9752551240f4p0
++0x1.88c816d89c028p7
++-0x1.e765347c03b1bp1
++-0x1.f5a3e6d431f22p10
++-0x1.bcbd4269b3468p-3
++0x1.27d5c33a2b9cdp24
++0x1.c24173c80f8fap-3
++0x1.e5d8c7f661bdfp12
++0x1.f248554706676p23
++0x1.6b9b012dc2faap25
++-0x1.c53702c39d6b5p10
++-0x1.ba8441a0e4b94p13
++0x1.6276f46c87421p23
++-0x1.cab117d6a7540p2
++-0x1.696a408d00cd8p22
++0x1.a85c0033d55eap20
++-0x1.f1d5338e62f8fp17
++-0x1.cab73716e3a08p6
++0x1.7ff7625f9ca6dp23
++0x1.fee2e4e051542p25
++-0x1.898ec4cbce2fap13
++0x1.054c5714bee5bp1
++-0x1.e769a1325c9b3p18
++-0x1.00ef90bb0ea31p13
++0x1.d99cf6f223a12p7
++-0x1.4802b635a9faep6
++0x1.5c49e6bca57d7p9
++0x1.9cfa3500116d8p3
++0x1.20a380697021fp22
++-0x1.cc9ee1c701912p-2
++-0x1.159814f41ffddp12
++0x1.bcdae38e2096bp19
++-0x1.a4c564a58485ep0
++-0x1.b3ccf11be8cb0p3
++-0x1.2e036784747fdp-4
++0x1.3178b79bf23d6p15
++0x1.762022e7db160p3
++-0x1.19abb2ad29c47p0
++0x1.702aa52a2b081p2
++-0x1.3b2f85e3448eap15
++0x1.fba527184dd2dp0
++-0x1.0e13b3dc07053p5
++-0x1.6e3d0266ae8b8p5
++0x1.5a2d64a6aa882p14
++-0x1.409c93e21717ap0
++-0x1.90c8d5e8d4dbbp-1
++-0x1.c6f751e442d8dp14
++0x1.ba19007f25633p1
++-0x1.30f675c6b9d89p10
++0x1.f5966161ca0f3p19
++0x1.8f2fb44baebe3p-1
++0x1.974bc69c68cabp24
++0x1.c56de726c32d3p0
++-0x1.10dc876280044p10
++-0x1.0aae85d11cbc7p3
++0x1.fc6cb52005104p15
++0x1.05e5130ff091ap25
++0x1.e1ba941321d52p1
++0x1.66c5a13cdadc8p5
++-0x1.55c8322221dc9p14
++-0x1.92bdc5556bd73p14
++0x1.096e742861630p1
++0x1.2a16e7c69bc3bp4
++0x1.da44529305931p16
++-0x1.c2d2d332c16bfp24
++0x1.20c675f6fe727p5
++-0x1.d38d6225474d3p23
++-0x1.481de5e77c136p2
++0x1.d279c02f61ae3p2
++-0x1.e7d9573de4581p11
++0x1.35fe74c080235p-1
++-0x1.ac005162cad81p12
++-0x1.13b0a70cb376fp22
++-0x1.ebb45106c5803p24
++-0x1.1dc057ac89a8ap3
++-0x1.b8c0d151742e0p16
++0x1.970375264e6a1p10
++0x1.7e866527c9d49p12
++0x1.c2ddf22b1bccbp1
++-0x1.ab4174efa2f0ap15
++-0x1.e253067271c08p2
++0x1.0d4fb486d614ep1
++-0x1.abd6e292f5548p17
++0x1.eda5e7728b075p14
++0x1.1454a6c45a426p23
++-0x1.25e591a6a9a8cp0
++-0x1.7cfbf5669ec46p12
++-0x1.4679e1cbdf113p8
++-0x1.ce9af0afc0c65p4
++0x1.62f4634b7620ep4
++0x1.62a9b3c2b9823p23
++-0x1.1769864efbd8dp3
++0x1.f34715ef52c0fp-4
++-0x1.8b62623c188c7p8
++0x1.7975e1f8c7996p-4
++-0x1.3bb2403639e82p0
++0x1.b19f02fc16c82p17
++0x1.570b03b60ea6ap25
++0x1.7b12645745ec7p25
++0x1.c49c016ba07efp-3
++-0x1.9654e0923906cp1
++0x1.df287182db6fap-1
++0x1.8082a573c5c90p9
++0x1.067783759fc7ap1
++-0x1.0193d3485481bp19
++-0x1.f21fe48c86139p25
++0x1.3b79f760c1f6bp6
++-0x1.dfea72f0a3541p24
++-0x1.6c0bc68338735p4
++-0x1.585dc43d90bdcp-4
++0x1.0b4a74ddaeffbp7
++-0x1.96334231685ddp-1
++0x1.f6f5538f88159p3
++0x1.9b4c653dc6242p-4
++0x1.8be735e377e26p-1
++0x1.e11465e6856f1p0
++-0x1.7198d0b28bc64p-1
++0x1.dcbed3c85165ap9
++-0x1.75cf96486fb5fp8
++0x1.bc5d4762ed95ap18
++-0x1.b4ab765a2ce10p2
++0x1.eb8d56eda92c4p6
++0x1.513d51d6c544ep21
++-0x1.724cb58ad93ecp-2
++-0x1.ae2f075a1c1e9p-4
++0x1.3b27a36ab9d59p18
++-0x1.3d35f4b149caap20
++0x1.5d2301f5b984dp10
++-0x1.b4f9911c7cbd5p5
++-0x1.3c85c4e8893f2p0
++0x1.ff16d24d0bd20p-1
++-0x1.587e438ccd381p17
++0x1.ef7cf5c296d36p22
++0x1.e83847d5313bep18
++0x1.7e01f150d09a5p4
++0x1.d1c293dd145c8p3
++-0x1.585e926cd5b1bp-2
++-0x1.fb42f3ec59b27p3
++-0x1.59b854f3c58b0p13
++-0x1.f841b3d82549ap6
++0x1.4aaa17e78776ap13
++0x1.be3491ea08398p19
++-0x1.8157656f77f49p10
++-0x1.ef5b133a05238p9
++-0x1.a84b3275b47aep-2
++0x1.d2d40379eed33p-2
++-0x1.b38e5132a2518p1
++0x1.0b583593881eap1
++0x1.de0c21d2e13f6p2
++0x1.e57f91ef79d08p21
++-0x1.35787426e7659p0
++-0x1.2fc096d91558cp10
++0x1.ca92d112801e6p-1
++0x1.c130f673f9d00p3
++0x1.ab43360e99861p7
++-0x1.dfc494915cb98p16
++-0x1.662a1708721aep23
++-0x1.632a633f7b779p10
++0x1.900746f103c7bp18
++-0x1.1725a276c7758p13
++-0x1.01e616e258a20p10
++0x1.161df51eb42d5p16
++-0x1.9116109f57baep-4
++0x1.0924248619f04p-3
++-0x1.528a30859b8aap1
++0x1.3214b1efe1264p11
++-0x1.279bd7646bb1fp14
++0x1.9cac25e81f355p5
++-0x1.c1b4e4b65f4c8p15
++0x1.b9446219929c9p24
++0x1.85dbc095a8b7ap15
++-0x1.71a3c59471916p19
++0x1.390f94db871c9p3
++-0x1.667266143481ep-1
++-0x1.3f41661ad1011p-3
++0x1.39e7b0627a056p4
++0x1.4be6257d4db36p1
++-0x1.42b4f39ad58a8p21
++-0x1.0ddfc3c773e9cp0
++0x1.3e0b505a62bfep23
++0x1.17ae947b55a16p3
++-0x1.450e033bf3474p3
++0x1.fc5a706652876p3
++-0x1.ec85a78011932p-2
++-0x1.1a2587c2acc7ap19
++-0x1.0413c7bd307d9p-3
++-0x1.c14f93438c9c7p24
++0x1.c23452cc49201p0
++-0x1.822bd11a73bb1p-4
++-0x1.50a39655d03a3p19
++0x1.93da259e63c6bp19
++0x1.2b38c33777246p0
++0x1.16ab521fc8f08p-2
++-0x1.bd2e1426c0b97p9
++-0x1.3f66f1cab29c2p24
++-0x1.89542080e7b23p2
++-0x1.a57e9572fab9ap-4
++-0x1.ea38e30d4f2e9p-1
++-0x1.6980315b826ffp21
++-0x1.5f0ed5102c7e4p23
++-0x1.bcee5575ad4e3p25
++-0x1.f9a690462f13fp-4
++0x1.b19d857513a36p20
++-0x1.b14a15fcc1146p8
++0x1.949ce3f3aeaedp13
++0x1.d8b3403249e60p16
++0x1.b42cd3bb4ca54p-2
++0x1.805807a27361bp7
++0x1.fa5ab42962ce2p24
++-0x1.390543514c4d6p7
++-0x1.a786543bad777p8
++0x1.d38f169be1c02p18
++0x1.a22dd22ff3ad6p3
++0x1.5dafb7808dbe5p-4
++0x1.c9dde4e221c90p-2
++0x1.ad9804a975e98p7
++-0x1.6b6343d804919p-4
++0x1.40efa3258a7e0p-2
++0x1.4994104561818p15
++-0x1.202c76ef257b1p10
++0x1.9dabc7786d2c8p3
++-0x1.1bcf75d5e6e6ap4
++-0x1.8802471c77a93p1
++-0x1.8edc21142d145p2
++0x1.21c2c22bbc29cp10
++-0x1.6a6c82b8898ddp4
++0x1.a3adf1a7b1a13p3
++0x1.49d3d7c9f2254p13
++0x1.b79d130f9431dp-1
++0x1.0d1b7459c7e69p1
++0x1.ab10c361ca6dep6
++-0x1.fc0e761dad4fbp3
++0x1.c45ad1e916b60p-4
++0x1.077d3554fe489p0
++0x1.dc36d78d24b31p3
++0x1.60ae735b6f4b7p0
++0x1.ee39527f71eb4p15
++-0x1.6e7213bcc9467p0
++0x1.431002c64536ep16
++0x1.e5be6089f8d20p1
++0x1.5e46b0f01f53dp23
++0x1.69fff66d50910p0
++-0x1.a0e9131bb56dbp18
++0x1.674805aee7412p-1
++-0x1.dabff64ead53ap0
++0x1.d4a2274cff182p-1
++0x1.fb3a27edc048bp1
++0x1.a82744aaa00eap-4
++0x1.302d4443c6c04p0
++-0x1.2dc450ab7367fp-2
++0x1.3cada637e6251p23
++-0x1.1ba7f471bf8cep18
++-0x1.a9a1b0bc1f9f7p1
++-0x1.21a6435313043p-4
++-0x1.72f020a7330b1p20
++-0x1.9d4906d826708p-1
++-0x1.b78fc5f05bc95p3
++-0x1.156706eda9f85p4
++-0x1.59c5832441b87p11
++-0x1.de49e509aa110p9
++0x1.e395a4ef1ad69p-2
++-0x1.085cd295378c4p5
++0x1.3a3167bb15567p19
++0x1.f1c1f7a981956p17
++-0x1.d57eb0ccc1192p24
++0x1.49c4a7fce174dp12
++0x1.42a6f5366340bp3
++0x1.c73946000ef3cp15
++0x1.31ce910c8f277p-4
++0x1.0e1e520b20462p7
++0x1.3c2672f8a2c03p12
++0x1.0f9a64fdeb055p7
++0x1.922625557e01ep-1
++-0x1.abd306314559dp0
++-0x1.1cdb82c46c748p22
++0x1.f8b26607a6659p12
++0x1.e5f5a3659806ep16
++0x1.8a997615a5e47p4
++-0x1.9a88b64eed8c5p12
++-0x1.d685f50d87896p23
++0x1.817095a80c3b6p-1
++0x1.6142c7c1265e2p14
++-0x1.d148003201454p5
++0x1.2e8a76f17e51dp14
++0x1.427402f1c86dcp0
++0x1.9b2d423fdfa51p-4
++-0x1.86f0c60e56f2ep-2
++0x1.b32e43a763dc8p-1
++-0x1.8cff449c1e97dp24
++-0x1.880110436ba05p-1
++-0x1.97b7d36271db4p1
++0x1.f30b30d1aa293p-4
++0x1.e5ada37f74455p19
++-0x1.c26e223a61790p22
++0x1.13a14657deeb3p4
++-0x1.6478570f08c98p0
++0x1.ceda65c15f255p11
++-0x1.f62630fc890a7p22
++-0x1.7782824757591p24
++-0x1.98bfd567b54f1p-1
++0x1.1c6955755acc0p3
++0x1.65ac87fd01210p4
++0x1.7bf572a17df2bp-2
++-0x1.10ba33750f2b8p12
++0x1.0eb2a5c9e5ab7p11
++-0x1.a36377f89ac61p9
++-0x1.1ef0e24d3ae7ep25
++-0x1.754f03aa6e28dp4
++0x1.ee53f7fbf6eafp-2
++0x1.f50fe52b03ffbp2
++-0x1.638950b33d379p1
++0x1.3995d5405f180p2
++-0x1.9d77e47674aa8p8
++-0x1.32a0f62f354a3p21
++0x1.26dbc38bc8937p22
++0x1.3b7b3206286bdp-1
++-0x1.4ee7f59ce5c39p4
++-0x1.d6a1e75344b65p13
++-0x1.d718e5bc70942p10
++0x1.3f5d423f663fcp13
++0x1.f01b35c0d9d59p25
++-0x1.8bcc84208bd5dp-3
++-0x1.181ad4f3244b1p16
++0x1.0273210f71286p18
++0x1.d29bc36a4515dp11
++0x1.a20d92a1419efp15
++0x1.2f51d558be78cp16
++-0x1.5e6b84e9ec483p10
++-0x1.16a2b6ee1de0cp11
++-0x1.569474dd1954cp16
++0x1.fb10a07b26f8fp19
++0x1.8585c235045a7p5
++0x1.d3337464c4076p2
++-0x1.972fd5ff17f98p3
++-0x1.2ed312782dbfbp17
++-0x1.efa051135e1aap8
++-0x1.f710d597fef71p8
++0x1.aa8dd6f8a9beap9
++0x1.9f1dc377cf120p2
++0x1.62c3a7358a4f6p11
++0x1.34efa6be82f88p14
++-0x1.184f25cf949f5p0
++-0x1.3f7491d3e3894p12
++-0x1.f221e4559b24dp3
++-0x1.f342571a6ca3ep1
++-0x1.b50c874b791dcp23
++-0x1.6b12a335d95e7p-2
++0x1.73cf16b52cc79p2
++-0x1.b18fd6ef0fcc4p-4
++0x1.261c17c736b83p0
++-0x1.c86005afe1b46p0
++0x1.0fd231c7aab56p-3
++0x1.3b66100eade0cp-4
++0x1.1b62615d4579dp1
++0x1.cadb62a061c44p24
++0x1.3ae06343b6bcbp14
++0x1.f291c2e85d959p-3
++-0x1.061340896769bp1
++-0x1.2bd0077f3cf19p-2
++-0x1.ad7016b69a63fp-4
++-0x1.e62a635c849dap20
++-0x1.0b91a74b137c8p13
++-0x1.90d2306d27347p8
++0x1.844f36ffbcbf5p7
++0x1.a43987044698dp3
++0x1.4b28a54b06fd8p2
++-0x1.13f7a05c3396fp-1
++-0x1.a7f08659fdc44p7
++-0x1.6230f3bb15667p1
++-0x1.bb4c27fb03a6fp19
++-0x1.abd3330e2907dp0
++0x1.a10a926b01f22p20
++0x1.4ef4737029ef8p20
++-0x1.4fbc07dc0319fp21
++0x1.4f5cf32c6f33fp20
++0x1.9246404054591p0
++-0x1.6556d1b2edaedp-2
++-0x1.8609762c8b440p19
++0x1.f7e69735662a3p25
++-0x1.e924f3e7030bep15
++-0x1.9288c5e79cf59p-1
++-0x1.576322583b5e2p3
++-0x1.36e724118914dp17
++0x1.5af0268d084b3p0
++-0x1.8677c0dacd6e4p3
++-0x1.5499134382165p4
++0x1.bbca46c3b4d52p0
++-0x1.163cb68bf3dccp-1
++0x1.cef2e67ee56dfp5
++0x1.f6364662207f1p22
++-0x1.c2e3f1f65d52dp1
++-0x1.9d8c95af70b3fp2
++0x1.a14de64f1781ep1
++0x1.b20186799badbp14
++-0x1.399014458c7f0p-3
++-0x1.0fc4b2f3ed7c7p-4
++-0x1.eded7159875dep0
++-0x1.a263c32babe5cp-1
++0x1.f58cb01f888cap-4
++-0x1.697672487c482p18
++0x1.5c460397011dbp-1
++0x1.07b5c65ec8ad3p15
++-0x1.4eb6a36be78ecp-4
++0x1.e310154adf232p-4
++-0x1.da842458624edp2
++0x1.35a40221fabbbp3
++0x1.ffcc323b881e2p-4
++0x1.ee99c7c780be9p-4
++-0x1.f901049a4f638p11
++0x1.d3e7502eab4b6p-3
++-0x1.253ef59d5b22bp3
++0x1.059d75fdfb006p1
++0x1.cbbfe23e9b204p1
++0x1.d708f03a832c7p-1
++-0x1.ab75a3d27c91ep-4
++-0x1.6be4347f71cc1p-4
++-0x1.e8c9e1c74124ep-2
++-0x1.0e5f50bd9ab17p0
++-0x1.057b22cc1ca57p-2
++-0x1.4214a3145eee7p16
++-0x1.8ff493b4d0161p3
++0x1.ff71c54ac0722p1
++-0x1.cbeb16791916dp2
++-0x1.dbaa7305da875p2
++-0x1.9e4ca5923b8f7p5
++0x1.85a4e1dc18565p4
++-0x1.66a210312f4fcp3
++-0x1.60ff74a0b47d6p-4
++0x1.2262b5f1adeacp-1
++0x1.4c7db0b6a7422p4
++0x1.e3e8f16cceb2ep6
++0x1.ff5074ef37c49p0
++-0x1.10e6c770bce9bp4
++0x1.c6a3a0025e5dap22
++-0x1.0bb1439478f5dp-2
++-0x1.6fb0156408828p2
++0x1.b28ff518979b6p1
++0x1.9f63566d75ba1p0
++-0x1.cdbd94929acf6p16
++0x1.f3dd143481244p-4
++0x1.5769939835a80p-1
++-0x1.6b4ea312b9249p-2
++-0x1.a73b84ba8d9a0p-1
++-0x1.841c832628699p-2
++0x1.15d930c5d9513p4
++0x1.41317671877f1p24
++0x1.c75165ddd78c0p0
++0x1.693575a9d1138p3
++-0x1.717b171687985p16
++-0x1.945b94a09037dp-4
++0x1.927ee26038e68p2
++-0x1.f599772ffd90bp19
++-0x1.5c5b47eaa8583p0
++0x1.89ecc1f399ce5p2
++-0x1.9feaa603120d3p-4
++-0x1.61b0d15368a4cp19
++-0x1.dd65243b8102ap-3
++-0x1.d01653391399cp-4
++0x1.a6fa353616c25p-1
++-0x1.186f755c9547ap13
++0x1.8ea3a743322dbp4
++0x1.01f3d2122c4b1p13
++-0x1.b43ad29df2703p2
++-0x1.7ae312c61df29p2
++0x1.b8bdf3bef563bp11
++0x1.f8e434e9db303p-3
++-0x1.f2c9a511ea803p1
++-0x1.97c2f0e9d43b1p-1
++-0x1.116c80ce25470p-4
++-0x1.5a980694bcb2fp-2
++-0x1.32e545c122be7p17
++0x1.fa5101a1db44ep1
++-0x1.acbb05a4fcad6p2
++0x1.9c7b63462ad27p-1
++-0x1.0b5fc67ab2279p-3
++-0x1.db886026a7769p3
++-0x1.fc0015986ba7dp3
++0x1.08da532d7c2d8p2
++0x1.1efed083d86d2p3
++-0x1.93ddc734949adp-1
++-0x1.8139b09417df1p5
++0x1.b19e95af39a66p-4
++0x1.fa36f74895f3dp-3
++-0x1.8a50f1b23e664p2
++0x1.eb65d4abdfdddp24
++-0x1.5b58c5cf71143p11
++-0x1.93789271d3e79p1
++0x1.32d8d3818df7fp-1
++0x1.a02656baff621p3
++0x1.456822523692ep-1
++0x1.9e821342b14aep24
++-0x1.bacbd3affeb41p1
++-0x1.5b4543a6420e3p1
++0x1.94c0e4a504564p20
++0x1.12189312e1789p3
++-0x1.5465839d51246p16
++0x1.212ec63d1fc28p-2
++0x1.ea2df3e7023d5p-3
++0x1.de0b83c02018ap3
++-0x1.8240253b43da4p2
++0x1.767607eab92e7p0
++0x1.d9ccb717b987ap0
++-0x1.98dee08d0a3adp3
++-0x1.dcfca0020809dp-1
++0x1.7f869312366ebp22
++0x1.cd961413f209cp-1
++-0x1.3221407824fffp2
++0x1.2ade9658e1126p2
++0x1.b34083bdc8115p2
++-0x1.980922c6e082cp-2
++0x1.799832b5bfa6bp26
++-0x1.a56c15d91cd8bp-4
++0x1.44a3a79631f72p-1
++0x1.dda0957785a67p-3
++-0x1.c54b66b69cac8p2
++-0x1.b0cc178214892p0
++-0x1.c1e5f06ea400fp17
++-0x1.d29493a595f5ep2
++0x1.8bdae6ba44b4bp-3
++0x1.8d26f713baf31p13
++0x1.8cb220c346946p3
++0x1.71de257cb436dp3
++-0x1.a52e1674a0f6dp-2
++-0x1.418065835e8cfp2
++-0x1.a4d5d76840286p-4
++-0x1.3ed0116e38f5ep2
++-0x1.87c515996b87cp20
++0x1.35d67495a3d85p13
++-0x1.430b146120c64p13
++0x1.ce7d04c15930bp2
++-0x1.704f325206940p2
++-0x1.9e18f50e6cf7fp2
++0x1.5269e51b29116p0
++0x1.227c74bba7565p4
++0x1.a81c022b943a6p-1
++-0x1.a105212679fabp-2
++0x1.b87ac53cacaf7p18
++0x1.e71b216138183p17
++-0x1.1668a6b611528p3
++-0x1.586af282ee66ap3
++-0x1.a646106bb9884p1
++-0x1.781022484b783p2
++0x1.4c9ab7f28c644p10
++-0x1.c6dbc36bae35bp-1
++0x1.55352240eedc3p4
++0x1.b6f2b21a2eae2p22
++0x1.9664d29b9e356p3
++0x1.f3919543276fcp3
++0x1.7cc834f6358cbp-2
++0x1.9f07d58ef3ac7p5
++0x1.9de5b20a4a764p1
++-0x1.8aea705541631p18
++-0x1.0952739540b5ap4
++0x1.2993d67ddc894p0
++-0x1.cecb056b46a86p3
++-0x1.585ba625ce37dp4
++-0x1.2c85b49135c11p6
++0x1.1b03f53976b8bp2
++0x1.804b5294eab8bp2
++-0x1.15f090515ae7ap1
++-0x1.c40c30eea2397p2
++-0x1.d222d4cc61156p0
++0x1.491254db782e2p9
++0x1.089244b067d20p3
++0x1.847fe11643736p3
++0x1.aae600dfbb0d6p0
++-0x1.c60c05a64e456p2
++0x1.d3772608146aap16
++0x1.210261c1bad19p19
++0x1.7f61635ba6212p1
++0x1.e03d05d58d78dp1
++0x1.6fa5277426dffp2
++0x1.7dd7a003f1fc5p8
++0x1.d3c3c54fb269bp0
++0x1.456084e1be432p-1
++-0x1.9f35500c78f46p-4
++0x1.b17ad24d5328bp21
++0x1.45a4a452108b8p3
++0x1.ee7835a4a15cap2
++-0x1.5c88834020c4dp4
++0x1.8195e389f02f0p1
++-0x1.4d25e7891a5e3p1
++0x1.a368603b90642p2
++-0x1.fc1e4287a59a4p2
++-0x1.087e41d357143p12
++0x1.ccdb52d850e64p14
++-0x1.ae95e02bbf2c6p2
++0x1.d32c40fb7eed5p1
++0x1.f4be74fc543aep-3
++-0x1.c549772b73225p-3
++-0x1.8e5cd0178d9fdp20
++0x1.c81356a2c080ep-1
++0x1.ed40040dadbe7p8
++0x1.9914806c4c867p20
++-0x1.501a27c66dd4ep21
++0x1.dad8e19368949p18
++0x1.4d9500c7ef7d7p0
++-0x1.dc10c31391064p-4
++-0x1.fc9d741aa8b78p15
++0x1.467ff5c092692p6
++-0x1.57a300f11a56dp10
++-0x1.3289b70ab408bp-3
++-0x1.406e2614c2a4ep4
++-0x1.7320110d87bd1p17
++0x1.ad9f174b85f67p-4
++-0x1.6c05d0f81d05ap5
++0x1.4d9fc757d40a4p2
++-0x1.900c147490e47p1
++-0x1.9bf4951c2d822p2
++-0x1.f57e420cd00b7p3
++0x1.748fa1fba98f6p-2
++-0x1.7a48c776cf20ep3
++0x1.5e1a45452622dp-2
++0x1.ed24031124eddp-5
++0x1.e691f37be2dacp3
++0x1.231531dd30f1dp-2
++-0x1.564fa0bfd60b1p18
++-0x1.ac70324dce95dp1
++0x1.a0d493588e057p23
++0x1.f98780fb132a7p2
++0x1.90ebc38d03a87p0
++0x1.ff96e2f54d04dp24
++-0x1.bf74b63ca40bbp2
++0x1.9af727dde69f1p0
++-0x1.e44071bd7b86bp1
++-0x1.28d786fdcd052p26
++0x1.8692e232cdae6p3
++0x1.9b50469f50d88p-4
++0x1.3ab662a7c7a65p-1
++-0x1.d085169ef3012p2
++0x1.bade31b1d2841p13
++0x1.264cf12a5f18cp-3
++0x1.eaf301a2af660p1
++0x1.e09f42ccc01f3p3
++0x1.4fef37206f995p20
++0x1.3e7ff15ec0784p4
++0x1.6ef7504e7c351p0
++-0x1.65bfb1e6dffa7p4
++0x1.034610cc74f21p4
++-0x1.e7cdf2d5b5d7ap1
++-0x1.56d207d3b7f15p26
++0x1.9ade7656cdb52p-4
++0x1.da34f1f8ba414p-4
++-0x1.0620a0b7e0120p25
++0x1.0aa527ccceddep12
++-0x1.ff9b102c34c06p-1
++-0x1.680934192f0eep-4
++0x1.633c770deedcdp4
++0x1.ac3d562aa3882p23
++-0x1.fd93150cab59cp13
++-0x1.2e68b5aeb1933p1
++0x1.16a1b3634e220p4
++-0x1.9a3017378b041p2
++-0x1.9c6406add3380p-1
++0x1.d28307b34902fp10
++0x1.a256a6fc28529p0
++-0x1.fc32d7015c25ap3
++-0x1.90fe456ab6cd4p-3
++-0x1.d82302f16ed56p3
++0x1.e29194bbd8108p-4
++0x1.ba28875f65f3fp2
++0x1.aa02215f4279dp3
++0x1.04b274650ae6dp16
++0x1.5720460ea9547p4
++0x1.d3565193466b6p25
++-0x1.18ab75ac729b0p3
++0x1.62b49423eac50p13
++-0x1.5d5f51118764fp4
++-0x1.0d11554e6379ep-3
++-0x1.f7b3b55dfdf96p-5
++0x1.d97d4089c87fdp3
++-0x1.74dd56532f950p-3
++0x1.f41ba46bbb346p3
++0x1.15305286fef88p26
++-0x1.6c32d3a71f573p20
++-0x1.65a80408231a7p-2
++-0x1.ef3b14f8fa244p15
++-0x1.4060641b877f0p7
++0x1.bb6e36c2071b4p20
++-0x1.3a30a6c1a2f5dp3
++-0x1.74ae12ec6a97bp1
++0x1.29d196ea1da27p2
++0x1.bfbfc35e1396cp2
++-0x1.967993d8f656bp3
++0x1.7f6f16b033158p15
++0x1.9e5a06b632d09p2
++-0x1.de52b7137b48ap-1
++0x1.42702419de7adp18
++0x1.87fba15348b74p-4
++0x1.f1d4d2ed50b91p1
++-0x1.f58ce2e3bed62p20
++-0x1.0343179c7f2d3p4
++0x1.c08e07f343f5fp0
++0x1.c1bfa71d8698ep2
++-0x1.3b5384007645cp3
++-0x1.985c0097100f5p8
++-0x1.31a462d00219dp14
++-0x1.a1d1359744ef1p19
++-0x1.4a50169190a5dp19
++-0x1.47152657669dcp26
++0x1.08ae25f622e03p0
++-0x1.4a3ce79774730p1
++0x1.4a69800ca5d1ep0
++0x1.f5fc930d18d8dp4
++0x1.643412561c61fp-4
++-0x1.e07966a7404c6p11
++-0x1.e6fbf6a0a6034p3
++-0x1.fbd6e37a14101p2
++-0x1.5a7960250d793p2
++-0x1.a26cb448f2963p11
++0x1.d54cc4dab0dc2p0
++0x1.d49952cff6480p20
++-0x1.a34ce477fb20bp-3
++-0x1.9cec55870bb73p14
++-0x1.cc4e1541cff60p15
++0x1.17e2f5c7ae2dap0
++-0x1.de61b653424aep5
++-0x1.9f6f34286c574p10
++0x1.d2b86784608d6p-2
++-0x1.3395902eb25c8p20
++0x1.69cdb5f2237f6p21
++-0x1.50aa7555719afp1
++0x1.450902d00dba0p14
++-0x1.3581552b644e7p17
++0x1.0c1ca2229363cp1
++-0x1.aa0c55ea1366ap-2
++0x1.935996dd54b32p16
++0x1.3506f3b2a8c5bp4
++-0x1.9ef4a31a3a5b3p21
++0x1.6aed610ee94e6p3
++0x1.9ec537389a85fp2
++-0x1.b61b32703965cp0
++-0x1.47b533489ac3cp14
++-0x1.7a086173ea69ep-4
++-0x1.9096e7b165d22p-1
++-0x1.832a11dca8760p15
++0x1.b46a101d0d0d8p-1
++-0x1.754e34245b1d5p2
++0x1.bd9a871af2cbcp19
++0x1.91cd45ac60878p6
++-0x1.f90ce27d3136fp-1
++0x1.c793155aaf605p-2
++-0x1.43c3752dba4e3p4
++0x1.734ff4f414827p0
++-0x1.5694b43404e9dp1
++0x1.15ff858370de7p17
++-0x1.6cb074bf09b29p-1
++0x1.e15824dff4832p0
++-0x1.a49b82d01f413p15
++0x1.4e92a530645fap10
++-0x1.0fb4501d2b553p8
++0x1.6722853482a22p2
++-0x1.e5ff02b36b547p3
++0x1.8fd106fbca583p1
++-0x1.cd3b94e6e9646p-2
++-0x1.67e73006e1cbbp25
++-0x1.798fe4eef94dap4
++-0x1.9f845051b854ap0
++-0x1.1801059eda986p-2
++-0x1.e43bb3c1ba526p18
++-0x1.858b7675fe3fep15
++-0x1.95e2345d5fe0bp4
++-0x1.3c5416ca090bap19
++-0x1.495fa628eb2fcp-2
++-0x1.7ef11453fd131p0
++0x1.97369592c74a1p20
++0x1.e538f5fd514c9p-4
++0x1.3bdd939d79b75p1
++0x1.51de3650db77cp13
++0x1.0f1761cd1a600p-4
++0x1.148233b993d99p2
++0x1.93cd375850c5ep12
++0x1.27629514fe508p-1
++0x1.bb10511526fa8p-2
++0x1.02fab5f81d1e0p11
++0x1.59dbf0784024cp1
++0x1.83fca118a0f13p11
++0x1.549503148702ep20
++-0x1.ebc3651a9536ap0
++-0x1.a174916f8923ap10
++-0x1.e62893a7af3aap-2
++-0x1.f566616109d72p7
++-0x1.6270b6860dc86p4
++0x1.a88e8569e224ap2
++-0x1.4f3ae6b9b7d44p15
++0x1.565a510728736p3
++0x1.ae5ff3ea9acf8p10
++-0x1.cdaad52eecbb7p-2
++0x1.14fe36e4c388fp-4
++-0x1.b0fac12481c0cp-2
++0x1.4f9e7648c99dcp24
++0x1.fff1f1682d85cp23
++-0x1.4e07d1cba1b3ep22
++-0x1.aece66271bb23p-3
++-0x1.480661fd12984p3
++-0x1.cc42214f97882p9
++0x1.9f8941c90d141p1
++-0x1.a7cb21d392653p-4
++0x1.f45fb2a44f985p21
++-0x1.73ea53f7b5a83p0
++0x1.ae0e97a5a226ap2
++0x1.7116e4f8efeb7p13
++0x1.b8689636e09d7p1
++0x1.f87ea145c3eeap4
++-0x1.7fb3d33c4b6f7p1
++0x1.816ed7aac792bp-1
++0x1.d46e75812b0cfp17
++0x1.a94d05d52e058p-3
++0x1.857ca451b8d1dp21
++-0x1.dfe14188b48a1p14
++0x1.7c5cb7db4b247p-3
++-0x1.5b00f07b798c2p26
++0x1.4927153475bd8p3
++-0x1.659684713be27p-1
++0x1.4b69e654ab5ecp14
++0x1.599ca7a34504cp7
++-0x1.e234942683626p-4
++0x1.2dc9e2b98afd5p12
++-0x1.11eff3e09aa18p1
++0x1.66a8713d0f478p-4
++0x1.ae07b611b2ed9p25
++0x1.e5d5673df6e1ep2
++-0x1.bc9a57d63d9cap-3
++-0x1.f150f7c1a2718p22
++0x1.a39e27b64a20ep0
++-0x1.662a54062851dp4
++0x1.c17bb0a5e2ee3p-2
++0x1.2cde97703beb8p3
++0x1.76c2a0f2dca13p1
++0x1.44ef2264d458cp13
++-0x1.39785220a1e11p3
++0x1.0a9a846a9e8e0p3
++-0x1.4c66f2ff6cd5fp26
++-0x1.a3cf306fe7875p2
++-0x1.f8fad771fd336p-4
++0x1.56cce173621b0p23
++-0x1.8b40322bb8a97p1
++0x1.e9b391467db49p8
++-0x1.c0b11253299d7p2
++0x1.ce6213f40c4ddp3
++0x1.98a4658fa2de2p0
++-0x1.7714e7503ccfcp1
++-0x1.e2c751117856dp-3
++-0x1.116370d84cda0p1
++-0x1.8a95106b4dd41p1
++-0x1.83a101240371bp-1
++0x1.a87241ef9f0afp1
++-0x1.887e6438b7d77p0
++-0x1.c51f915cee016p21
++-0x1.90afb3af83a46p-2
++-0x1.dd69445e1bce5p7
++0x1.52ede1630d384p25
++0x1.e5cb3017006a4p-3
++0x1.7b37a1ae9bea3p22
++-0x1.564077be3ff7dp19
++0x1.0127514e5d65fp-1
++-0x1.86f6945344917p2
++-0x1.e27824003e156p-4
++0x1.20f513644333bp6
++-0x1.4d48e7c7bd1c2p17
++0x1.df4f418ae8bcdp0
++0x1.b530d7eb8c491p14
++0x1.ae84640c8c195p-3
++-0x1.99d503f399970p3
++-0x1.7bac758737ddcp23
++-0x1.b2e7529718232p5
++0x1.d99e875cf2a8dp12
++0x1.ad3fa0d2f24b0p-2
++0x1.fd0875247597fp17
++-0x1.d28dd391af036p8
++-0x1.18c393d58dd4ep10
++-0x1.7a2a73ac407fep10
++0x1.885ec3882da73p1
++-0x1.f4c664113f0d4p1
++0x1.dc61d2bd58699p-3
++0x1.50f330caf00fdp9
++-0x1.2b4c2627a3648p24
++-0x1.bddb32bea8700p-1
++0x1.e55ac08bf2b42p0
++0x1.e75cf1f0cd76ap0
++-0x1.aeb8e3625b94ap-2
++0x1.75a741f3c5a9ap-1
++-0x1.017500e83e2dap7
++-0x1.935241a43297ep2
++-0x1.8c08819bbaca3p12
++0x1.28f7569578c0fp15
++0x1.9a68f5a0e6cb9p25
++0x1.e99ce04bdef98p-1
++-0x1.566b2614bedb3p22
++-0x1.eb5840a35fdc6p25
++0x1.75489211def83p19
++-0x1.832cc5ad826a8p4
++0x1.746297f53d755p1
++-0x1.a92422038c33dp23
++0x1.c94a716ac9472p2
++-0x1.a780f5b351552p11
++0x1.39b4a689dc65fp15
++-0x1.063fd407d19b2p17
++0x1.6c96851c4c0bbp-3
++0x1.343a53f0ac710p-1
++-0x1.78da56a8efd89p-4
++-0x1.2e08371fa4c1dp1
++-0x1.9cb170edaa8d6p0
++-0x1.c47b95e92d85fp5
++0x1.22d540cd4e25bp0
++0x1.c0d7f6f009ad8p11
++-0x1.694c81226c9d5p0
++0x1.559fe2c8a2cb1p15
++-0x1.be71b00f82b6dp-4
++-0x1.949d26f8956a4p0
++-0x1.e794823d81668p2
++-0x1.913cc722037aep4
++-0x1.6c89e06ae49a0p7
++-0x1.d85ac741cf404p-1
++0x1.827ce70a4080ep-4
++0x1.d00906b80e8fep1
++0x1.a5eb32c312d71p3
++-0x1.1c82507185876p-4
++-0x1.2745f53788520p8
++-0x1.d59f5009d4e5cp2
++0x1.cc2070bdb8850p18
++0x1.1720074ab1a4ep1
++0x1.8cd267087035ep1
++-0x1.e5066000552e0p1
++-0x1.894bb7d7746d1p0
++-0x1.ffc9031f3af42p16
++-0x1.9867b7cae951ep11
++0x1.33ffa6ff96953p-4
++0x1.18b8b52580f2dp-1
++0x1.8036540909c52p1
++0x1.cf69072d92af2p9
++0x1.980aa121c5e65p1
++0x1.5f89c3f3a61c7p25
++-0x1.2e09a10012e1fp5
++-0x1.a585c7402c27ep-2
++-0x1.485eb3f6d7ecep-3
++-0x1.f9bd852a74583p10
++-0x1.3b7f83fbcda42p1
++-0x1.6591217c65a71p17
++-0x1.7b21e6ee5ca9cp17
++-0x1.c979f792dbca7p11
++-0x1.77bf75c469ac6p0
++0x1.d16b6275c0f7dp14
++0x1.4917f41f8b6a2p1
++-0x1.19cd525e86beap9
++-0x1.6e5003f71a811p14
++-0x1.370ab7f9719f2p14
++0x1.386006d492b82p3
++0x1.1a58e03059f7cp12
++0x1.2500012feb2d9p7
++0x1.4d36d2e22e8d4p5
++-0x1.f3e1a009ee07cp23
++0x1.4668d78d78095p12
++0x1.79aa13307ebf8p3
++-0x1.c487960e89b2bp2
++-0x1.06e8a5658fb35p-2
++0x1.55c7f05a491fdp24
++-0x1.0523e2d088c7bp11
++-0x1.f62864f5158c9p19
++0x1.c49ce5492ee6dp-3
++0x1.cdb9120e5b67ep17
++0x1.8f8a5268e820ep-4
++0x1.6ee1e30d592a4p0
++-0x1.812844c5cb134p2
++0x1.6df1755141fd4p24
++-0x1.728300fa1781fp14
++0x1.8947c3e79ed66p0
++-0x1.9844d48620c7fp8
++0x1.23655019dc226p2
++0x1.a9e1473cc8a13p12
++0x1.66305231c4640p7
++0x1.82af66fe8c503p2
++-0x1.bc6b01062138ep15
++-0x1.896955bc6c769p-1
++-0x1.a9ee65b00a2e8p21
++0x1.f4c3e6cd69231p-5
++0x1.9013f5a753f8ep8
++-0x1.d92d8497ba609p24
++-0x1.2e2681d1e84bap3
++0x1.8be4435259a45p7
++0x1.79c7f5a2e6e62p2
++0x1.acdbe4eb4b925p22
++-0x1.35aae23bd5519p3
++-0x1.733ba7e8564aep20
++0x1.f77991555ff26p-5
++-0x1.1c5745f873d55p-3
++-0x1.1b14e11d332dcp-3
++-0x1.c731514f4f896p20
++0x1.a0c5c483ebf17p7
++-0x1.36b1d13cb2c7ap19
++-0x1.7a38c0bb685a4p2
++0x1.6236e4c6b17b5p10
++-0x1.f2b9767a6798ep1
++-0x1.3958443bc6781p3
++0x1.d6f1f3d9224a2p13
++0x1.81b9f2569be9bp-2
++-0x1.8f52243d1205fp2
++0x1.2e2e25cd3e4a7p3
++0x1.d34c76b790df9p2
++0x1.7a91752f07156p26
++-0x1.454b06030e52cp1
++0x1.2c40025ab0e66p3
++-0x1.76d66036ed303p18
++0x1.667592a8df4efp25
++0x1.415511ec79f5ep1
++-0x1.7bbb12490183cp26
++0x1.824ec336555b6p1
++-0x1.b8dd16e17d94dp-1
++0x1.7df770031af25p3
++0x1.7bff02b791614p-3
++0x1.13f597d144c47p4
++0x1.81e4962b19a23p0
++0x1.3900731ded692p13
++0x1.9ed1c64a3942bp0
++-0x1.e87ae52969fcdp-4
++0x1.79bb77cc1f90cp2
++0x1.14693020af9bfp23
++0x1.8b61256862012p0
++0x1.edae80414ab70p3
++-0x1.93ab70cfa5b06p20
++0x1.8ba9c535f5d61p1
++-0x1.805ee155735acp1
++-0x1.838ec4acbd018p-2
++0x1.f32f63eb94fabp2
++0x1.e241b1649d3b8p5
++-0x1.3253458419677p10
++0x1.e0df72e4e1543p11
++0x1.e11d606072ff9p3
++0x1.86c16681265b6p5
++0x1.8628f44708c8bp23
++-0x1.e00f07434fc92p9
++-0x1.c17540870ee47p3
++-0x1.9e5bb19dd040bp3
++-0x1.4b2ae7e7eb36bp7
++0x1.563c647e67c1cp14
++0x1.9fd3804bf753ap1
++-0x1.e01b361851110p5
++0x1.f4c404c183defp3
++0x1.91f9d60737e96p3
++0x1.c2b2e43a35dc2p3
++-0x1.93d6f51eaa6b7p0
++0x1.077b77efc4f82p4
++-0x1.5a77916ce4424p4
++-0x1.68b4d3263da38p21
++-0x1.f374766b6ed6ap2
++-0x1.a9a9833b70761p0
++0x1.e32a36975f82ep13
++-0x1.faee82ffb3f86p3
++0x1.e36e2752045d0p24
++-0x1.65cd92ab90cd5p3
++-0x1.2c9e444e88b94p3
++0x1.f120d034d2381p10
++-0x1.a9a8f0b3f6514p-4
++0x1.936706bd2d06ep1
++0x1.a0c1379968e55p15
++-0x1.857891fb49f2dp0
++-0x1.56d056a4a7495p25
++0x1.903154bd06e72p0
++0x1.6682d268e3100p4
++0x1.3193534e62ce4p10
++-0x1.8436b490e2355p3
++0x1.c780d229e6f70p1
++-0x1.c56866de11a8fp3
++0x1.882d57bffac4ep17
++0x1.5c9b122b1d7fcp-3
++0x1.844794defc7edp0
++0x1.ee2d82135ae68p-4
++0x1.85279651395efp16
++-0x1.2cd1153d349f2p19
++0x1.7b6dd3b4f477ep12
++-0x1.7288f46a576b0p1
++-0x1.f8c0e0fc4bb49p2
++-0x1.183706bd54880p3
++0x1.ba0d572401eb1p-2
++0x1.ca518633bac17p7
++0x1.cd57538cf882cp-3
++-0x1.8381b568c9479p9
++0x1.1e9183ce544bcp13
++0x1.6acba6699c0b9p4
++-0x1.ec73039e9f0d4p20
++-0x1.6477f2857b071p-3
++0x1.e4a176c91821cp9
++-0x1.8c0b56ccb6472p4
++0x1.88bb9270ccca0p0
++0x1.01872043ef4f6p26
++0x1.a699a703d54f0p2
++-0x1.4f9480c72527fp11
++-0x1.f3922598eb070p25
++0x1.ec1122cf73e00p11
++0x1.1a5df470f93f2p3
++0x1.2c4ac04f45ad8p2
++0x1.420df3f07e2e9p1
++-0x1.da3007b6e32e6p-3
++0x1.c58594ba64852p5
++0x1.97f94564a530ep1
++-0x1.8f2f3232703fap23
++-0x1.3aced1c22945fp3
++-0x1.9fc3b1f2df6bap18
++-0x1.2f9400213bfacp26
++-0x1.5a93a1aecd7f8p23
++0x1.e21fb377f0629p3
++-0x1.60d2b29133715p2
++-0x1.b35fd552a06bdp2
++0x1.f888f3bf0894ap3
++0x1.6179c63df740ap2
++-0x1.1b57e16b67305p12
++0x1.2df7a492a55aap3
++0x1.f5a8c595b66f3p12
++0x1.eb9b31a499310p0
++-0x1.fa29138391d8dp24
++-0x1.31e9737787955p22
++-0x1.50bec0d665bd3p4
++0x1.240336c6f50ecp20
++-0x1.234332620141dp2
++-0x1.494922947d1dep13
++-0x1.4589500e3dc0cp-4
++-0x1.c5b106e6c98c4p3
++-0x1.8e5975aebe391p1
++0x1.4acbd1eca3685p16
++0x1.3767b5309ae35p25
++-0x1.ab55b215961b5p19
++0x1.9bbb7240953bcp6
++0x1.2a69c6c2ce166p-4
++0x1.236446d855ea1p26
++0x1.007d67d2f6ae5p14
++-0x1.465752c4bba54p4
++0x1.c2c120ada26efp24
++0x1.89d8e773ca030p0
++-0x1.47d112473b7d2p23
++-0x1.961ec43a6ac1bp0
++0x1.cb149641f5e31p25
++-0x1.445105fd4a114p13
++-0x1.fbecb12a6b027p23
++-0x1.7d2f532f070e7p24
++0x1.8623305d4e6b2p12
++0x1.9d4e770b846b6p20
++0x1.2e6f72255a4e3p25
++0x1.217f53ffa3517p18
++-0x1.114cf59a17da7p22
++-0x1.9058c29b9c42cp0
++0x1.8b4964313d448p0
++-0x1.1324f4ac83d84p17
++0x1.8cdc938858e1cp1
++-0x1.8e3ac7bd1d9bap1
++0x1.91dd306db21b7p3
++0x1.1dabf17b5d5ecp11
++-0x1.8c5023b0520fbp17
++0x1.519133d1a30c1p0
++-0x1.83f8b0095f08fp11
++0x1.a2c384402e2dep0
++-0x1.99604221a841bp-3
++-0x1.238c553c5b382p11
++0x1.255263c1e7ea1p-2
++-0x1.f6abe2ca3fa18p-4
++-0x1.28b610d704296p2
++0x1.7fe030dd6870bp21
++-0x1.9277b3b585daap1
++0x1.4aba5560a518fp18
++0x1.d8b2d183392ffp12
++0x1.606e50d62a689p3
++-0x1.c9fe06391a2ffp6
++0x1.33a2c66357454p2
++-0x1.c14834e7cc6fep20
++0x1.70fe71d9a61a1p10
++0x1.9124214c779abp0
++0x1.36fe96d18bbb1p5
++0x1.ac0886bed0cbap-3
++0x1.c394c39ec727ep21
++0x1.8ede90b9ad083p1
++-0x1.63f723efeb8aap6
++-0x1.8006a11624d6fp9
++-0x1.991dd79a46696p14
++0x1.624f7005c927ap-3
++-0x1.5a1bc5448ef00p15
++-0x1.a1b2d04dd23dbp22
++0x1.fbdae5e7003fep9
++0x1.77e2f5191b00ap26
++0x1.6acd972fb203ep7
++-0x1.92e403fb5cd1fp1
++-0x1.bdb8819563c37p3
++-0x1.978c07f231d8cp-4
++0x1.d394c0387504bp3
++0x1.2ad084ae8150fp2
++0x1.1c84d77148aeep-3
++0x1.6cdec2610b6e2p9
++-0x1.ad36f42f1539cp10
++0x1.6b7736f489b84p23
++0x1.428d260202acdp-3
++-0x1.ac7df640f2e9dp-3
++-0x1.383325e10f339p16
++-0x1.9072c3baac08ep2
++-0x1.8d25202dfe5e9p1
++0x1.56cce34ce0a0fp3
++-0x1.87e0b26002871p0
++0x1.e58bf4dbae4e0p8
++0x1.f721c656141c5p-5
++0x1.936a122b128a9p3
++-0x1.9d77a3df09bffp0
++0x1.fee682c2083b1p-5
++0x1.0df346c938fa6p20
++-0x1.79a4807dc1c7cp12
++0x1.43cb96fb17819p15
++-0x1.f6cba0b606489p3
++0x1.279ff1f5aa40ep2
++-0x1.4a0200fac8a92p13
++-0x1.5bb4a64995a2fp6
++-0x1.8cfdf28a87367p1
++0x1.b33a47d6a5006p12
++-0x1.2d44128359d7ap3
++0x1.8e27c5f19370ep1
++0x1.b172a51df2790p12
++0x1.9418b67f79674p2
++-0x1.18472016853adp-4
++0x1.429a944c7fc15p-3
++-0x1.848c2357e315bp0
++0x1.94ffc4b0437b7p-3
++0x1.0ab3c61460bf1p23
++0x1.c46df37c82e74p3
++0x1.ae4073dbb6faap1
++-0x1.333756903e0d4p2
++0x1.9897d041ad55ap0
++-0x1.dc34d00205413p-3
++0x1.11d895596200dp0
++0x1.2c40f229821eap3
++0x1.cdf886a7aa583p1
++0x1.981c0286db7cep1
++-0x1.9e091230bd3a4p0
++0x1.793f34193764dp-4
++0x1.bb2a40332c042p-3
++-0x1.f14492192a73fp-4
++0x1.706253767db02p-1
++-0x1.89a6c7e27292bp0
++-0x1.9ecc544fb92bbp0
++-0x1.929732055c207p3
++0x1.7446d51c7b42dp-3
++-0x1.86ed158a74c67p0
++0x1.514041392ff26p2
++0x1.82d476bb8edb4p0
++0x1.7fd9b27331c05p-1
++0x1.f5b7d49823843p3
++-0x1.f69264abeafa3p3
++-0x1.3b9c9235047b1p-3
++-0x1.618cb26e482adp3
++-0x1.7ff1014b720ddp2
++0x1.89c1b5f05dc6ep0
++0x1.8433102ecaabcp0
++0x1.1a6f4686b08cbp-4
++0x1.f6e9f6c4c11d8p2
++0x1.f420f4826d0ebp3
++-0x1.07e6c7ee77297p-4
++-0x1.883073624792fp0
++-0x1.413bd59318f29p10
++-0x1.eccdd630f04c1p-5
++0x1.ca83404a9139bp-4
++-0x1.2fb1d040fa704p2
++-0x1.ec2965839cdf8p-4
++-0x1.980927a49fc8ep0
++-0x1.8891479510a4cp0
++-0x1.160f00148547bp4
++0x1.2c829387de51dp3
++-0x1.b823d3652d1f6p-4
++0x1.610211fe18f2cp4
++-0x1.4814c0233ff45p4
++-0x1.910a500100124p3
++-0x1.938eb41b840f3p2
++0x1.8b3dc18cdc10cp-3
++0x1.82bbb15b4a321p0
++-0x1.7ca807b240b48p0
++-0x1.e41654090b761p-6
++0x1.2e37b710fc120p2
++0x1.f6b7940e7b623p3
++0x1.110c63611fdc6p3
++0x1.02ee201bcaac4p-1
++-0x1.15cc478b9585fp-3
++0x1.eaa6a5dba0880p-3
++-0x1.5064263da0e06p18
++0x1.29e4125754701p2
++-0x1.9877831252381p-4
++0x1.8f2e232e9ac5dp2
++0x1.2d80559c80ef0p3
++-0x1.9254d7b9c8444p0
++-0x1.f4e9e64183d12p-1
++-0x1.f4c7a7634e935p3
++-0x1.9abbe3194229cp0
++-0x1.9919748132712p0
++0x1.5f26256acb653p3
++0x1.5763e1d0c726bp1
++-0x1.94ff2678d1f72p-3
++-0x1.a90bb2e15f04ap0
++0x1.2dd9e546986a5p3
++-0x1.f740c1ba3020dp2
++0x1.c64395e34728dp-2
++0x1.e3d0458eabfd8p1
++-0x1.ed0765e6ea0f5p-3
++0x1.dab346294cbdap-4
++0x1.f61623d7e20b5p3
++0x1.af9281c09646cp1
++0x1.1b1e15cd3bcc5p16
++0x1.06c4c10e6c8dep-4
++0x1.dd07569c3c3ccp-2
++-0x1.c15824199f02ep1
++0x1.5243561208a38p-4
++-0x1.f416f571790f9p2
++-0x1.caef3657e7abbp1
++0x1.83fbe5b4af7dcp0
++-0x1.8853d6f37a1efp0
++-0x1.46da6147a1b10p4
++0x1.302416be4e2a1p2
++-0x1.f2f8a5dc53cf4p2
++0x1.6055e6e35bb41p-1
++0x1.143d145693511p2
++-0x1.6950a182bf9a2p-4
++-0x1.8fcc8236972a5p2
++0x1.e9cb13665b011p14
++-0x1.f393f56d36bd5p2
++-0x1.6965240cd8bcap3
++0x1.941dd006b64ffp2
++-0x1.f1e3d41258e12p1
++-0x1.fccf763e37c40p-2
++-0x1.b796d71e63f83p0
++-0x1.92b6c5b1be835p3
++0x1.9ce932c77615dp0
++-0x1.73fbf1729d68fp2
++0x1.478eb664414a1p4
++0x1.56d8470b12ea3p1
++-0x1.3e8954f72e006p1
++0x1.f65e065d156a7p3
++0x1.84664031b46b2p4
++-0x1.f47a93802ea52p2
++-0x1.e9592161077e5p-1
++-0x1.2bd1669992834p3
++0x1.6e2943a16b8e1p-3
++-0x1.e7d855d59c297p-4
++0x1.8f433768a46fdp1
++-0x1.e515d3f871f61p-4
++0x1.90af17c3b46a3p1
++0x1.888852da31b55p0
++0x1.2b2b219aba250p-4
++0x1.acd68248a4138p3
++0x1.2e88f26ed5c10p4
++-0x1.93d8526e03271p2
++0x1.326cd7502e35dp3
++0x1.97cf340cdd0aap1
++0x1.9bf172a79ddddp1
++0x1.f762e63f6aa11p3
++-0x1.a352761c52850p-4
++-0x1.8ca4b46938898p0
++0x1.5faf86ccf0263p3
++-0x1.59de804f2786ep-3
++-0x1.1411b2e66b984p4
++0x1.c1744154cb07cp-2
++-0x1.e470062fd9902p-4
++0x1.96cdb4f1f7df7p1
++0x1.23fc15223f81ep2
++0x1.36a273c93939cp-4
++-0x1.cc76161ba5551p2
++0x1.30a473160c957p2
++-0x1.2b9fd42df7d03p11
++0x1.96269286b7ffdp1
++-0x1.26acf7d9c5873p-4
++0x1.4e9a05aed7b47p-2
++0x1.8c2310e286165p3
++0x1.2e7ea55e6bab4p3
++-0x1.947447e283cf8p0
++-0x1.5def45dd8c82dp3
++-0x1.3562b72377e9dp17
++-0x1.827dc1096f2c7p2
++-0x1.864d742b9a86ap0
++0x1.020c84197b2d6p-4
++-0x1.c2b3209b520f2p3
++0x1.4d46507b92ebfp1
++0x1.f7a911dc6f5edp3
++0x1.546ab7b47b80dp-4
++-0x1.8e74270390650p0
++0x1.798ef3689843dp4
++0x1.e4ed141ca4042p2
++-0x1.912b60e8b2288p1
++-0x1.a446f3b0c931fp-3
++0x1.8a8ca0324e319p1
++0x1.85f9f17f3303bp-4
++-0x1.8da4b789837fbp0
++0x1.e0c1b65e1731fp0
++0x1.51d9359cbafe5p0
++-0x1.8c93e53362a95p0
++0x1.2cb685f56e9c7p3
++-0x1.24ca32a7d2e7fp-4
++-0x1.f3a7d55be814ap2
++-0x1.5f5563552f3dbp1
++0x1.9651239a8f51cp23
++0x1.7883f140d86e3p4
++-0x1.f5d4704cadef3p3
++-0x1.1a8b81c161806p-4
++0x1.13a766d95ae15p-3
++-0x1.788d1565e8c73p0
++-0x1.5a00b1d8bf722p4
++-0x1.142ef555a9f1dp2
++-0x1.9f5fd239129c0p1
++-0x1.9234030e398e9p0
++-0x1.de3ee1a88c608p25
++0x1.98b413f614dd1p1
++0x1.919893496d760p0
++0x1.cb4c6209daacdp1
++0x1.716aa6b3989dep0
++0x1.388236a8a2105p17
++0x1.2d8ea65a5418ep3
++0x1.8d3b6586a1f83p1
++0x1.2ee22305d240cp2
++0x1.513c50ad7096ap0
++0x1.274f61da084fcp21
++0x1.8e999360ff9bfp2
++-0x1.634ee01f1e244p3
++0x1.f56b84f17d59ep3
++0x1.90cd66c769319p3
++0x1.948793a745cb3p1
++-0x1.922cc64d4c613p2
++0x1.9202f01408a2ep1
++0x1.647af0f3e78e8p0
++0x1.92c404a15ff85p3
++0x1.296510b2025d9p3
++0x1.8af4d01937e3dp1
++-0x1.905807696feddp2
++-0x1.c5e746b866817p3
++-0x1.74abf60c7458dp11
++0x1.9fd310b80fc3fp-1
++-0x1.0088c702d520ep3
++0x1.99e684301b40dp1
++0x1.9e40e369cece9p0
++0x1.9a10f4d7ad560p0
++-0x1.119517d95be1dp0
++0x1.6507f65c0a11ap-10
++-0x1.8d7e97db6ee5dp1
++0x1.77b3e74ff2733p0
++-0x1.9142f42793975p2
++0x1.b08f86307ef40p0
++-0x1.07f605feceabcp6
++0x1.847750d22aedap0
++0x1.da8917abe3345p-1
++0x1.996981db39a5cp1
++0x1.84af267337c45p0
++-0x1.2d1e62cdb58fep3
++0x1.57eb741c405e9p0
++-0x1.9306d461c4f0dp1
++0x1.97511167e78b7p1
++0x1.a378c189bb9f2p0
++0x1.9f116139e3045p3
++0x1.0e56b2d056bd2p1
++0x1.9022d6b0f776ap2
++-0x1.9a66b69d283d3p16
++0x1.93f2d78fa20b8p2
++-0x1.960097e81f663p1
++-0x1.f16b11682801ap2
++0x1.7c5836e306cd7p4
++0x1.931ce13cf2e8ep3
++-0x1.9604801aef305p1
++-0x1.6047b5e1f6282p4
++0x1.8afcb3ed73526p1
++0x1.f6f66374ec272p3
++-0x1.637a71d0dd8cap3
++-0x1.f503c3e728412p3
++-0x1.6752748f04736p12
++0x1.c39482bf49bafp0
++-0x1.776fc1f105341p1
++-0x1.1c8c0693eea0ep4
++0x1.bf500107c5bf8p1
++-0x1.c8cc1330ebb0fp3
++-0x1.9fc43100011e3p1
++-0x1.0218334d9287bp4
++-0x1.873dc40133dc7p2
++-0x1.6108e6ac3ce75p2
++0x1.827f54be95fd2p2
++-0x1.b3b9c1b2bc85bp1
++0x1.6a566601abe51p1
++-0x1.1838e51e22a74p3
++-0x1.ec20a2f393847p-1
++0x1.50e3f2decb26bp0
++0x1.9e5c631aefd23p1
++0x1.e380f3f3d1435p1
++0x1.2d2396f6e3d53p21
++-0x1.d37267e0da8b8p2
++-0x1.dc488296aade7p-5
++0x1.46ec674ce2a5dp13
++0x1.554101eac799cp13
++0x1.2f3013f5a6c54p8
++0x1.6f83a66c663f4p4
++-0x1.2b08f43aab39cp11
++-0x1.e1e0d1853224dp-1
++0x1.d771b17516553p6
++-0x1.887044239cfe8p1
++-0x1.a1db55509e8a4p1
++-0x1.bfa480fc2440ep0
++-0x1.6d6e63cfe5182p16
++-0x1.fb48863e0822ep0
++0x1.9f00e03bd225cp2
++0x1.759ad7d2fd408p-6
++0x1.127da379773a8p0
++0x1.f29402cc634ddp2
++-0x1.9952a78ed61b8p2
++0x1.97dd5139447c3p1
++-0x1.a76e765e68c3cp1
++0x1.8e67566cd5e8ep2
++0x1.1b03a778e2d96p0
++0x1.5082b4b12d87dp0
++-0x1.b7f804e64ad6dp-1
++-0x1.fd8ec1fbdfc91p-1
++-0x1.c72146ec63767p0
++-0x1.535215502bb28p9
++-0x1.7b86638bd0a8ep4
++0x1.2ee16587be28ap25
++0x1.e01b63e9ed441p-5
++0x1.694304bf328eep8
++0x1.ad55c78d3654dp3
++0x1.9eee975660a8ap3
++-0x1.c8b2561c9f81cp3
++0x1.8283c7a80a610p0
++0x1.5b20d2df32431p4
++0x1.9cd6a2f10b171p1
++-0x1.420cc50d7cdc2p8
++-0x1.dd9861944bbb3p3
++0x1.34a7a7976a495p0
++-0x1.d583650030438p-6
++0x1.d460c5cf3f543p0
++-0x1.d465b0c30b6edp1
++0x1.3c7da5c7e5924p1
++0x1.2346875c60507p2
++0x1.8a7b81be25ee8p2
++-0x1.397700c5fcc57p2
++-0x1.69d2e1c810103p14
++0x1.a85411bd063ccp1
++-0x1.0e29e1cbda382p1
++0x1.9a5e601081659p1
++-0x1.a7889779ffa67p0
++-0x1.438e04868ccc9p4
++-0x1.baa5420b07fdap0
++-0x1.6db8900accb05p19
++0x1.a8aec73d93c27p3
++-0x1.77d4072c1ccf2p0
++-0x1.21f6b21bc817ep2
++-0x1.f6a2f62a6cb31p2
++-0x1.fc06459a51fb8p2
++-0x1.9af657156b1f3p2
++0x1.506bb4f11e78cp0
++-0x1.33ebc72ee6932p2
++0x1.ae86415f42273p2
++-0x1.9bf4a6fe8e910p1
++-0x1.e96e9164690fcp21
++0x1.6947f51227604p2
++0x1.6013a22a2ddd3p1
++-0x1.6af96677a90abp4
++0x1.8afb44943c65ep3
++0x1.8edc46a59110dp1
++-0x1.27672769919c5p3
++-0x1.965194e8561b3p0
++0x1.3b1025ed73e67p1
++-0x1.847770922125cp3
++-0x1.dd5f522fb2873p-5
++-0x1.5efb85cc876f7p4
++-0x1.e68de705848ebp-5
++0x1.7ead02ce67bbcp1
++0x1.a051e272e6562p1
++-0x1.86e703217068ep2
++-0x1.9f42e3ab98d72p1
++0x1.67ed973022fefp1
++0x1.2fecd6c002277p9
++0x1.78c3e7b8861cdp1
++-0x1.a871661620c12p-6
++0x1.f44003f7dc467p1
++-0x1.8de9c11f74395p0
++-0x1.e819107f5c6e2p3
++0x1.95cc935ccd8b3p3
++-0x1.8f4ed509b97e5p0
++0x1.69451445560b1p1
++-0x1.95ef447fbd184p3
++0x1.86f83259b5fd7p0
++0x1.0477224f543aep4
++-0x1.84b8700c2e94ap2
++-0x1.d83170e4e3d42p23
++-0x1.8f0f6463688c9p3
++-0x1.627477b68d92cp4
++0x1.b08cf6f35c65fp1
++0x1.408dd4780aba4p6
++0x1.1086512459ff1p9
++0x1.3909f67380c33p3
++-0x1.949b71c1a11cep2
++-0x1.8d1345e55533bp3
++-0x1.8713c256b3756p2
++-0x1.dbc685c55e3f5p25
++0x1.fa1540a9be9a3p3
++0x1.861632597290fp21
++0x1.8a92623188bf5p2
++-0x1.306816f3567cdp3
++-0x1.46c942568bb98p4
++-0x1.493192769939fp-5
++0x1.6c7626b593bc1p15
++-0x1.de9ae14ed3b14p-5
++-0x1.9ceab67fd3361p17
++-0x1.4635c7e723683p14
++-0x1.f66857bcde805p5
++0x1.1404718e327a9p5
++-0x1.8bead04147772p0
++0x1.67f23030a3b9cp-5
++-0x1.605b1167aec6bp26
++0x1.c492b71449ac9p-5
++-0x1.896c46f57416fp0
++0x1.f67af48b080f1p4
++-0x1.2bf7f4c847654p2
++0x1.d16a349978580p5
++-0x1.62f916740779cp8
++0x1.88d1874b175c6p0
++-0x1.44bb24ced7803p23
++-0x1.8b3367f4a1c9ap1
++0x1.f904679db18c3p10
++0x1.8af0b3bf1bc0ap1
++0x1.91bd642036dc7p-5
++0x1.e05700bd746ecp-5
++0x1.442c71d7052dfp11
++-0x1.c0860397d57f6p-5
++0x1.22fa512afd525p15
++-0x1.17963471d9c22p9
++0x1.dc53e5919c4e9p-5
++-0x1.f0ab744dd7c5ap12
++0x1.6c6b174f1b2ddp25
++-0x1.c0e8e1d4be4ddp21
++-0x1.527b6735e78fdp-5
++-0x1.eb2570edcb498p-6
++-0x1.827ee5ca4565ep17
++-0x1.d312763bdbfc9p-5
++-0x1.1be7c35c5187dp21
++0x1.bb05e3cf5bed1p8
++0x1.2b35242e28392p2
++0x1.2c478726c2eadp3
++-0x1.f601e4eb21834p-7
++-0x1.aa9224d5c7b99p12
++0x1.ee4f61f98712ap25
++-0x1.f11477e64dd5fp25
++-0x1.eacea5fdf0447p22
++0x1.8090172f53488p-5
++-0x1.874452a514b8ap-5
++0x1.b09b7525da067p-5
++-0x1.a4a65761b73e4p19
++-0x1.3edf87b67bac9p11
++0x1.40df32ab49b60p16
++0x1.ad82d260cd27cp12
++-0x1.79d575123f3d3p4
++0x1.1a420309f1acfp19
++-0x1.e3d2815fcea1ap-5
++0x1.9564275cad6b1p20
++0x1.b22d964fa5da9p16
++-0x1.ac6ec099f3767p12
++-0x1.3a56c36fd71f8p5
++-0x1.10a2668b9a962p19
++-0x1.f582e4fb4b9fcp3
++-0x1.c91490880d0abp9
++-0x1.ed1516dd4512ap-5
++-0x1.bd52b3aaf56cbp20
++-0x1.5f8674c2c25b3p3
++-0x1.0c0c55ef2b998p20
++-0x1.d192227536e73p24
++-0x1.2faaa2ecfe577p24
++-0x1.b90651cb301d0p-5
++-0x1.ac3b63b519eadp-5
++-0x1.2bd446f3ca7f3p2
++0x1.a430460e6a9b6p12
++-0x1.b3d576f970023p-5
++-0x1.a78456f24ad8bp21
++-0x1.8e6d24c106191p-5
++-0x1.445ac22c0535bp10
++0x1.6006b3be58fcdp5
++0x1.e2c9a30fed3dbp-5
++0x1.a9c595abf1803p17
++-0x1.dda6a16942918p5
++0x1.882b80046b531p-5
++0x1.e312c4711d211p-5
++-0x1.ffc9304847f6ep23
++0x1.e2bdf53a0e7eap-6
++0x1.aafe55c56b961p4
++-0x1.a42c00873fe91p19
++-0x1.6e05225136648p14
++0x1.8b6d7748a44d0p1
++-0x1.4f9b15e74489bp24
++-0x1.d0f83650acd18p10
++0x1.75d88737c154ep10
++0x1.fd9f30446da4cp12
++-0x1.ea0f976d9c95fp8
++-0x1.2e7ce0068807bp3
++0x1.408f556f1b433p22
++-0x1.33dd44ccdcad4p9
++-0x1.1392b23681ed7p22
++-0x1.a07451f59178ap0
++0x1.4be7960b80101p-5
++-0x1.c35dd7637fabbp3
++-0x1.14eaf252d4e69p24
++-0x1.eb5cb6f319984p12
++-0x1.ff5795cc9e8c9p25
++0x1.f373c7948157ap2
++0x1.8b11d503c9621p9
++-0x1.a6fba484a1e0dp23
++0x1.185dc1c0b0020p9
++-0x1.4205d4a32810fp8
++0x1.ba7665e0e6ca3p-6
++-0x1.9114139572d64p2
++0x1.8550d5a435556p6
++0x1.9217f777d16afp1
++0x1.523d75d52216bp22
++0x1.eaf44618ace9cp25
++-0x1.0ce264ba236dep25
++-0x1.dd0c66bca284fp4
++0x1.e133b560a7249p-5
++0x1.2e73200b72efcp3
++0x1.31d3f1c22bbefp-5
++-0x1.160c73ebb453bp9
++0x1.725517d421c01p23
++-0x1.b322115912690p8
++0x1.3123b6c190157p15
++-0x1.f7c6d4c05900ep2
++0x1.4199c1016ddbep21
++-0x1.939ab538fcf52p1
++-0x1.fe9b67751e8e2p16
++0x1.8194d6944c477p15
++0x1.84ddc763e1a66p0
++-0x1.4e1de2c8b8b84p-5
++0x1.f2b9c3f27bde1p11
++-0x1.616ef1dab5092p3
++0x1.f592e4f2759fep3
++0x1.4aa7e080f1cdbp11
++0x1.ce0a91e4edc80p-6
++0x1.534af4542f502p9
++0x1.9a5816c8c9b58p-5
++0x1.71ed06e256291p11
++0x1.1a3b208fc7a34p17
++0x1.93a935a59f8c6p2
++0x1.d0cc856988238p6
++-0x1.1aba30a4c9984p9
++-0x1.f8c461cdebee7p21
++-0x1.899a449c6c3ebp20
++0x1.363ec045afdeep9
++0x1.439216bc4453bp8
++0x1.4447c6df4c7afp17
++-0x1.9911c1e4c62abp15
++0x1.e16500b58f801p-6
++-0x1.b705b75ed89fbp22
++-0x1.01e46049e5a39p20
++-0x1.932304c2d6686p-5
++-0x1.e6d670226ad2ap-6
++-0x1.bd07e41c8e8bcp18
++0x1.4a0e422534f2bp-8
++-0x1.6940b30465840p8
++0x1.d733705bedd6ep-6
++0x1.d5cc051d8c218p19
++-0x1.2c33e54a305f1p3
++-0x1.e8b8d19effe41p-7
++-0x1.3251544f616aep10
++0x1.7695f68f3e6c7p15
++0x1.8b4f237050232p1
++0x1.0f3804c1ac573p26
++0x1.63b6402daf587p25
++-0x1.ef19b46fc82d1p-5
++0x1.5b24532eef37bp8
++0x1.e3cc25433e63dp8
++-0x1.6adbc65e81bf0p-6
++0x1.4af2127550ba6p19
++0x1.0b0534813be5dp10
++0x1.406e85cef6faep18
++0x1.3624f311203b4p24
++0x1.c539d648b5762p4
++0x1.d33de1b06857cp22
++0x1.088795083936fp26
++-0x1.46d32700ac723p13
++0x1.90cd33bd76f26p3
++-0x1.bc8b039abda5dp-5
++0x1.118c66b20ff59p24
++0x1.86aa4299069edp17
++-0x1.8c0d566b825bdp6
++0x1.a2f000766a5dcp-8
++0x1.f125b5925ecdcp9
++-0x1.42e27168a01e5p-6
++0x1.8d07c5da62627p-5
++-0x1.300382649922bp25
++-0x1.c6af64d64da9bp21
++-0x1.dbf9b7e4544d8p-5
++-0x1.ae66a3b7f8d1ep8
++-0x1.68cae1e2a98b1p25
++-0x1.d9d0e40f5b316p18
++0x1.9240a42e12154p4
++-0x1.85efc5a65c092p5
++0x1.c25b32c0f3a22p21
++-0x1.8ce4e51fc72bcp20
++0x1.2d88a67e7f4d5p6
++-0x1.f9fab7bee125dp2
++0x1.d5ab6667f00aap-5
++-0x1.8de195b535d34p0
++0x1.856a236431247p5
++-0x1.9355b20d3597fp3
++0x1.c86242004b43bp16
++-0x1.f075e5ac52efcp7
++0x1.128a500680aadp22
++-0x1.e05591544f544p21
++0x1.93efc221f8e59p2
++0x1.ab2f462bf74fcp5
++0x1.c49bd6a3c1818p4
++0x1.7b8ad50c7bfecp13
++0x1.fc4e96888c2d1p-6
++-0x1.58d6c2c5e054cp-5
++-0x1.2f6ec7a1377e0p14
++0x1.c58a842a616dbp3
++0x1.834dd78309187p18
++-0x1.c3a496c1450d1p-5
++0x1.f4d2b45c847dfp3
++0x1.8c356160ce725p1
++0x1.3142d7811c731p2
++0x1.93a9516a96a0bp3
++0x1.a1bee68429794p7
++0x1.b95dc334a2bc6p8
++-0x1.19cef672a9a47p-6
++-0x1.d27957ab51079p-5
++-0x1.f326d3c218f96p-7
++-0x1.3663f5c2f7a7ep21
++0x1.92d2c298efc0ep3
++0x1.0c0ac140813e9p14
++0x1.f042d0f375d37p-5
++-0x1.33d93108cefb4p17
++0x1.49bb63dc63385p26
++-0x1.6c4a43fe47766p15
++0x1.ef7b348d27a11p-5
++0x1.75c9e12812395p26
++0x1.646c466065168p13
++0x1.c6a595a4cf1eep-5
++0x1.633eb2bb2135cp13
++0x1.1d6fd48d68d10p16
++0x1.909086ce4aa7bp19
++0x1.33e475eaa77c1p6
++0x1.dd76962579da8p4
++0x1.2f6ff6e564b1cp2
++-0x1.250d605076831p-5
++-0x1.eb5e5279788d8p-5
++-0x1.8d7a8777145a7p1
++0x1.987364729a434p19
++0x1.dabe4125b97b3p-5
++0x1.b17e331eb6789p6
++0x1.6db837fb7d483p-5
++0x1.974bf2de99250p-5
++0x1.eb7783df9a7d7p24
++0x1.d4a382fdca607p-5
++0x1.c819b06815072p-5
++-0x1.884961789ce26p0
++-0x1.49abd42b2da4ap11
++-0x1.c22025eda45c0p-5
++0x1.1507f3d165044p4
++0x1.98d962253bc23p0
++0x1.91d604536b2ddp1
++-0x1.97e455ad89b74p14
++-0x1.e048a7162e609p24
++-0x1.b0f2a035fc460p-5
++-0x1.dfae87af15a41p-5
++0x1.5957d3127c4ecp-5
++-0x1.e19520fdfdde8p18
++0x1.14bbb5a3d4a9ep-5
++0x1.40e1e0445bbe9p20
++0x1.d11a60dfe5ccbp13
++-0x1.2864a79b70a9fp12
++-0x1.d586268ab9766p-5
++0x1.e86f11c2cfc20p-6
++0x1.44cca2c6d41b2p-6
++-0x1.96a014873a351p-5
++-0x1.8d81a234eaeb3p21
++0x1.3a1533e669917p5
++0x1.8ba860cf520bep1
++0x1.4265b33954e48p10
++-0x1.a249f7fe5c4e5p17
++-0x1.2e1957e00bdd5p4
++-0x1.8240d5065f3b6p17
++0x1.8d74a29263a5ap0
++0x1.951506f271652p1
++0x1.e92041ee927e3p-6
++0x1.ed2dc6dcf4002p-6
++0x1.2c92337f90e49p2
++-0x1.683c21e808cdep-5
++-0x1.9a0b940509413p-6
++0x1.98f7007ee0945p1
++0x1.a2320700475bbp-7
++0x1.bd43201cd4e31p-5
++-0x1.cc04710864fd6p-5
++0x1.a21c8714da14ep-5
++0x1.773693ef8fa14p-5
++0x1.79803001fe5dap-5
++-0x1.2c32c75512fe9p2
++0x1.844f25e75eb2fp0
++-0x1.95d877a17a280p2
++0x1.948a43d9d7741p1
++0x1.971c84f87b377p0
++0x1.9127e7382bcc8p-5
++0x1.93fe639e0db3dp0
++0x1.2f4d04d0c8b60p3
++-0x1.902934f6cec25p0
++-0x1.97e5e2e8c9690p0
++-0x1.2e7f34a41089ap2
++-0x1.dbf4d63956dabp-5
++0x1.7de270a1cef9dp-5
++-0x1.a8cfd796dd749p-5
++-0x1.867323de7c548p0
++-0x1.583b54858a854p-5
++0x1.5a32b5f87c731p-6
++-0x1.a893c3b3f116dp-5
++0x1.8dba0559b03f2p-5
++-0x1.8fddc49a817aap0
++0x1.8dfc56712ea84p1
++-0x1.5ec35128245fbp3
++0x1.2ed721b3e7cf3p2
++0x1.f6f6b38e4a725p2
++0x1.8d7636d60e4a2p0
++0x1.f53e24706a8adp2
++-0x1.2b8e75888ccddp2
++0x1.798c20cba7df8p4
++-0x1.c28770144413dp3
++0x1.99b0411242349p1
++-0x1.899d668f66224p0
++-0x1.9584c477164dfp1
++0x1.894db4cfedf00p0
++0x1.478fe109931cbp4
++0x1.60ecc69ceb31cp3
++-0x1.2daad0f631f1ap3
++-0x1.90c0775e5bbd9p3
++-0x1.9563261499472p1
++-0x1.8cce8733835a8p1
++-0x1.8e5bd67aad0bdp1
++0x1.2f88b005dd5c1p3
++0x1.2f79b51aa1b2ep3
++0x1.c5ba9020db5c7p3
++-0x1.91834694280eap3
++-0x1.f59d31d57b57cp3
++0x1.9f12216e6b6e5p0
++0x1.9094e7026c1ebp3
++0x1.155cc046ffb5bp4
++-0x1.848890adc4715p0
++0x1.90ad119b10f12p2
++-0x1.8d9a028100e2cp0
++0x1.c60477c5553dfp3
++0x1.91b295b42732dp3
++-0x1.93e8041f128acp3
++0x1.88cc56d1e4905p0
++-0x1.925832396eb4ap3
++0x1.8a73075e37e87p1
++-0x1.138d60f880517p4
++-0x1.97cf677cc2b69p1
++0x1.915aa29d49dbcp1
++0x1.873b8780d5106p0
++0x1.94c856a2d7bb6p1
++-0x1.90628588db51ap3
++-0x1.8f5770d7d1d70p1
++0x1.c5579491935bbp3
++-0x1.78da03f27aa07p4
++0x1.9209877319a62p1
++-0x1.2aea80b631733p2
++0x1.2f75e48cddd2cp3
++-0x1.5fb7273fcc453p3
++-0x1.8488702ff0c32p0
++-0x1.93dda7bee871ep0
++-0x1.93b653501d3c1p2
++0x1.9205222724e5bp1
++0x1.2df4a1196323ep2
++0x1.6108a416f100ap3
++-0x1.8db7954424fc7p0
++0x1.2bb8a1817846fp3
++-0x1.8abed04ecb123p0
++0x1.92d5f27ca693fp0
++-0x1.2a3e75ea2ae07p2
++-0x1.90fb35edc8d06p0
++0x1.9a76161e739c7p0
++# tan slow path at 240 bits
++# Implemented in sysdeps/ieee754/dbl-64/mptan.c
++# Range reduction is done using mp arithmetic.
++## name: 240bits
++0x1.ee5a221c1ec30p750
++0x1.d0b7237b90954p983
++0x1.50aee539c99e6p817
++-0x1.63457438d44aap53
++-0x1.294211dbd13e4p213
++-0x1.d71b609ef9723p651
++0x1.9c3fc4df7e48ep242
++0x1.ab8b7376e687ep989
++-0x1.23f9a2342724ap746
++0x1.119932858dd5ap966
++0x1.172f40abffae1p573
++-0x1.f9bb63afd3e82p824
++0x1.1d49b6073fd25p1018
++0x1.3825a112069d0p360
++0x1.8e64d153eac98p839
++0x1.e87296bff194bp410
++0x1.607562a57b7cbp149
++0x1.79bab59092899p902
++0x1.de5304e52acddp608
++-0x1.418357b7072b6p987
++-0x1.b86e0050bf853p732
++-0x1.a1efd6e7ed2f7p903
++-0x1.d8f94109ae4a3p874
++0x1.4f3247a1eea1ep815
++0x1.bdea912ba38d1p109
++-0x1.c8df81ba65338p846
++0x1.fdeb13595a17bp798
++0x1.767af536202fcp99
++-0x1.2a30021aae9e6p527
++-0x1.28dee7f401161p970
++0x1.4619840d88992p101
++0x1.6bfc225d005a2p837
++0x1.1e1af0e150b94p594
++0x1.bb40b53e0e710p107
++-0x1.509896c78f606p883
++0x1.d89291baa92acp34
++-0x1.3d17f161b743ep327
++-0x1.39c6a16a6c7c6p264
++0x1.c76d60078cecfp545
++-0x1.154493e3be839p980
++-0x1.b3df5360e6cbfp245
++-0x1.f0c52280d0aadp653
++-0x1.d93ce79dfe195p45
++0x1.88dd7769601fep966
++0x1.a903f553288eap298
++0x1.4ecba03f7132fp152
++-0x1.ee34e7eac85fap992
++-0x1.010e46c3cd107p876
++-0x1.b56fd64fe1fbdp323
++0x1.2c50c6911febep742
++0x1.740dc6b962c9bp422
++-0x1.617e2227cbff6p224
++-0x1.1ad286314c58bp940
++0x1.ac1745b651b5fp649
++0x1.fddce309449cfp982
++0x1.73aa443462592p182
++0x1.7d2e10f57bf82p306
++-0x1.93eef4d8c4abep433
++0x1.3d9bd192c5d05p408
++0x1.1ba6707e8de9ap833
++-0x1.c2f6f7c9e74b3p766
++0x1.404e24bccecfcp457
++-0x1.7a40f3ff05d01p530
++-0x1.10de718a052b3p202
++0x1.406e1464adc55p557
++0x1.9e19028382754p550
++0x1.635c94cbc7020p982
++0x1.984492142a1c0p81
++0x1.4b64a03a03816p428
++0x1.247c4191da022p961
++0x1.c141e714fe35cp908
++0x1.1b3621a4c2bafp257
++0x1.53d5e3c854773p294
++0x1.0747d33080a32p824
++0x1.1632770278ce8p845
++-0x1.c782e7d005b27p622
++0x1.593837dacc255p851
++-0x1.ec2ff0a8e0bcdp569
++-0x1.b594936bb511ep82
++0x1.9b45519d36598p976
++-0x1.9b8684eaa71c6p944
++-0x1.a3d743632fed4p395
++-0x1.b73bd248a7a07p401
++-0x1.dbc2269986a9dp213
++0x1.1db1d61aaef59p102
++0x1.2e8bb0f1ad8e5p797
++0x1.e883f6710822bp235
++-0x1.869ff130d5a8ap348
++0x1.2fa330ffa7b9bp49
++-0x1.0504a5188eddbp500
++-0x1.0d0a04316e717p622
++0x1.e020a6a980593p957
++0x1.869895a12103dp1011
++-0x1.a069a71af1389p432
++-0x1.814d711d1c525p904
++0x1.3648160c04db0p640
++-0x1.fafcf58cb570cp724
++-0x1.00bdd7f58135ep394
++0x1.e4d721588529ep259
++-0x1.2b364691f9147p192
++-0x1.7932c5bb927a9p463
++0x1.d185a23e7a264p121
++-0x1.d82395a639e87p578
++0x1.d19bd28cdb538p1020
++-0x1.91e123b92a975p528
++-0x1.f5b921ff6813fp866
++-0x1.f233e109dede1p346
++0x1.22b5274acfea5p28
++-0x1.b12c358527025p560
++0x1.87f9c3636f7a7p770
++-0x1.b7cfb4bd9ef9fp559
++0x1.ab30f4cdb2826p927
++0x1.3121e66534c09p996
++0x1.32ff26e56b243p66
++-0x1.6a3155c7bbc49p381
++0x1.0629119d19fe7p306
++0x1.666f07ccc3516p444
++-0x1.71b82433bfd05p656
++0x1.787bb435c6119p237
++-0x1.bb81028d4e92ep822
++-0x1.f956b52f53507p930
++-0x1.9f75e34d740f3p394
++0x1.babfd6b429321p307
++-0x1.0546727a98f2fp892
++-0x1.24e7a5b4ab558p36
++0x1.91b656ffc9015p48
++0x1.f214d6691dbc8p813
++-0x1.7508047526de4p708
++-0x1.6e0884d03f494p595
++-0x1.abf2f140b46a1p958
++0x1.cd37e24ae01d2p996
++0x1.874b5349798ddp791
++0x1.5db704095417cp479
++-0x1.385f265e0be6dp529
++-0x1.77d7f72971477p254
++0x1.c1d572032a2bcp231
++0x1.c5f3b1b1e6cb1p985
++0x1.112e0044fe943p152
++-0x1.c39e821cde6d0p860
++0x1.70f7800567a4cp831
++-0x1.bf2987be14b54p43
++0x1.005dc191f8155p428
++0x1.15ae534e6771bp286
++0x1.c90422cac4067p433
++0x1.ce9e737328102p189
++0x1.809d12529d2fcp385
++0x1.1063e5c391f7dp222
++0x1.d2ec86f035aecp981
++-0x1.196f9101def40p684
++0x1.c63095b4787cbp964
++-0x1.974c637b88001p971
++-0x1.1f4ff59ad6375p982
++-0x1.fd2845fc76df9p832
++0x1.1e2872f75696dp150
++0x1.550941834ba74p642
++0x1.0d163506e72bbp960
++-0x1.c4ac9745073bap738
++0x1.8fd3f61e48e52p625
++-0x1.5f9425e8039f3p636
++0x1.3e4f37281e892p558
++0x1.3373f1db8806cp990
++-0x1.038965f403b17p774
++-0x1.bd5b377d53669p945
++-0x1.07b3f085c6733p689
++0x1.3544b2eed1abfp262
++0x1.1532c11ac2507p832
++-0x1.c00c9609102c4p786
++0x1.ad9637e0c897bp581
++-0x1.fe4bc0f718a8cp569
++0x1.0692371444ef5p700
++0x1.cb4e64433e84cp965
++-0x1.69d26008baa73p236
++0x1.62f9711ed5d1ep464
++0x1.e930d2860dadap435
++-0x1.909f574e6549cp658
++0x1.00e4f31691d23p399
++-0x1.0d5823a83628bp540
++-0x1.c7b743f92fb3fp569
++0x1.7dee11c9dafa3p670
++0x1.529be63463210p939
++0x1.62bd520c84081p874
++0x1.c993466a75c4cp61
++-0x1.33b0260c2549bp495
++0x1.09e87208ab6ffp625
++0x1.0ae9e4d036946p291
++0x1.07d5649391891p165
++-0x1.bee4e05b04714p586
++0x1.2b0994ee5f218p167
++0x1.ebfc830d19d34p992
++0x1.382612ecb922ap979
++-0x1.21c82431ac446p1022
++0x1.6196b60f1c50fp190
++-0x1.c25ea71d737a2p248
++0x1.d024774408b26p335
++-0x1.f5ce472da3a21p644
++-0x1.81a011e0b6271p851
++0x1.9cd0227a58f39p939
++-0x1.8698a10662bffp544
++0x1.a07c20fa799d8p622
++-0x1.d126c657c582bp880
++# tan slowest path at 768 bits
++# Implemented in sysdeps/ieee754/dbl-64/mptan.c
++## name: 768bits
++0x1.dffffffffff1fp-22
++0x1.810f60836538dp143
++-0x1.e877a52501e08p134
+diff -urN glibc-2.17-c758a686/debug/test-strcpy_chk.c glibc-2.17-c758a686/debug/test-strcpy_chk.c
+--- glibc-2.17-c758a686/debug/test-strcpy_chk.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/debug/test-strcpy_chk.c	2015-06-20 21:22:16.304457892 -0400
+@@ -54,6 +54,10 @@
+ #include <setjmp.h>
+ #include <signal.h>
+ 
++static int test_main (void);
++#define TEST_FUNCTION test_main ()
++#include "../test-skeleton.c"
++
+ volatile int chk_fail_ok;
+ jmp_buf chk_fail_buf;
+ 
+@@ -110,24 +114,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));;
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src, dlen);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -151,14 +137,8 @@
+     s1[i] = 32 + 23 * i % (max_char - 32);
+   s1[len] = 0;
+ 
+-  if (HP_TIMING_AVAIL && dlen > len)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s2, s1, len, dlen);
+-
+-  if (HP_TIMING_AVAIL && dlen > len)
+-    putchar ('\n');
+ }
+ 
+ static void
+@@ -290,28 +270,12 @@
+     }
+ }
+ 
+-int
++static int
+ test_main (void)
+ {
+   size_t i;
+ 
+-  struct sigaction sa;
+-  sa.sa_handler = handler;
+-  sa.sa_flags = 0;
+-  sigemptyset (&sa.sa_mask);
+-
+-  sigaction (SIGABRT, &sa, NULL);
+-
+-  /* Avoid all the buffer overflow messages on stderr.  */
+-  int fd = open (_PATH_DEVNULL, O_WRONLY);
+-  if (fd == -1)
+-    close (STDERR_FILENO);
+-  else
+-    {
+-      dup2 (fd, STDERR_FILENO);
+-      close (fd);
+-    }
+-  setenv ("LIBC_FATAL_STDERR_", "1", 1);
++  set_fortify_handler (handler);
+ 
+   test_init ();
+ 
+@@ -389,5 +353,3 @@
+   do_random_tests ();
+   return ret;
+ }
+-
+-#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/debug/tst-chk1.c glibc-2.17-c758a686/debug/tst-chk1.c
+--- glibc-2.17-c758a686/debug/tst-chk1.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/debug/tst-chk1.c	2015-06-20 21:22:16.304457892 -0400
+@@ -20,7 +20,6 @@
+ #include <fcntl.h>
+ #include <locale.h>
+ #include <obstack.h>
+-#include <paths.h>
+ #include <setjmp.h>
+ #include <signal.h>
+ #include <stdio.h>
+@@ -119,23 +118,7 @@
+ static int
+ do_test (void)
+ {
+-  struct sigaction sa;
+-  sa.sa_handler = handler;
+-  sa.sa_flags = 0;
+-  sigemptyset (&sa.sa_mask);
+-
+-  sigaction (SIGABRT, &sa, NULL);
+-
+-  /* Avoid all the buffer overflow messages on stderr.  */
+-  int fd = open (_PATH_DEVNULL, O_WRONLY);
+-  if (fd == -1)
+-    close (STDERR_FILENO);
+-  else
+-    {
+-      dup2 (fd, STDERR_FILENO);
+-      close (fd);
+-    }
+-  setenv ("LIBC_FATAL_STDERR_", "1", 1);
++  set_fortify_handler (handler);
+ 
+   struct A { char buf1[9]; char buf2[1]; } a;
+   struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
+@@ -1366,7 +1349,7 @@
+       ret = 1;
+     }
+ 
+-  fd = posix_openpt (O_RDWR);
++  int fd = posix_openpt (O_RDWR);
+   if (fd != -1)
+     {
+       char enough[1000];
+diff -urN glibc-2.17-c758a686/debug/tst-longjmp_chk.c glibc-2.17-c758a686/debug/tst-longjmp_chk.c
+--- glibc-2.17-c758a686/debug/tst-longjmp_chk.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/debug/tst-longjmp_chk.c	2015-06-20 21:22:16.305457862 -0400
+@@ -1,3 +1,5 @@
++/* Basic test to make sure doing a longjmp to a jmpbuf with an invalid sp
++   is caught by the fortification code.  */
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <paths.h>
+@@ -8,6 +10,12 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ 
++
++static int do_test(void);
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
++
++
+ static jmp_buf b;
+ 
+ 
+@@ -43,26 +51,10 @@
+ }
+ 
+ 
+-int
+-main (void)
++static int
++do_test (void)
+ {
+-  struct sigaction sa;
+-  sa.sa_handler = handler;
+-  sa.sa_flags = 0;
+-  sigemptyset (&sa.sa_mask);
+-
+-  sigaction (SIGABRT, &sa, NULL);
+-
+-  /* Avoid all the buffer overflow messages on stderr.  */
+-  int fd = open (_PATH_DEVNULL, O_WRONLY);
+-  if (fd == -1)
+-    close (STDERR_FILENO);
+-  else
+-    {
+-      dup2 (fd, STDERR_FILENO);
+-      close (fd);
+-    }
+-  setenv ("LIBC_FATAL_STDERR_", "1", 1);
++  set_fortify_handler (handler);
+ 
+ 
+   expected_to_fail = false;
+diff -urN glibc-2.17-c758a686/elf/dl-support.c glibc-2.17-c758a686/elf/dl-support.c
+--- glibc-2.17-c758a686/elf/dl-support.c	2015-06-20 23:38:08.194095607 -0400
++++ glibc-2.17-c758a686/elf/dl-support.c	2015-06-20 22:00:26.531904072 -0400
+@@ -90,12 +90,6 @@
+ /* Get architecture specific initializer.  */
+ #include <dl-procinfo.c>
+ 
+-/* We expect less than a second for relocation.  */
+-#ifdef HP_SMALL_TIMING_AVAIL
+-# undef HP_TIMING_AVAIL
+-# define HP_TIMING_AVAIL HP_SMALL_TIMING_AVAIL
+-#endif
+-
+ /* Initial value of the CPU clock.  */
+ #ifndef HP_TIMING_NONAVAIL
+ hp_timing_t _dl_cpuclock_offset;
+@@ -265,7 +259,7 @@
+ internal_function
+ _dl_non_dynamic_init (void)
+ {
+-  if (HP_TIMING_AVAIL)
++  if (HP_SMALL_TIMING_AVAIL)
+     HP_TIMING_NOW (_dl_cpuclock_offset);
+ 
+   if (!_dl_pagesize)
+diff -urN glibc-2.17-c758a686/elf/rtld.c glibc-2.17-c758a686/elf/rtld.c
+--- glibc-2.17-c758a686/elf/rtld.c	2015-06-20 23:38:08.170096325 -0400
++++ glibc-2.17-c758a686/elf/rtld.c	2015-06-20 22:06:24.194043066 -0400
+@@ -193,12 +193,6 @@
+ static struct libname_list _dl_rtld_libname;
+ static struct libname_list _dl_rtld_libname2;
+ 
+-/* We expect less than a second for relocation.  */
+-#ifdef HP_SMALL_TIMING_AVAIL
+-# undef HP_TIMING_AVAIL
+-# define HP_TIMING_AVAIL HP_SMALL_TIMING_AVAIL
+-#endif
+-
+ /* Variable for statistics.  */
+ #ifndef HP_TIMING_NONAVAIL
+ static hp_timing_t relocate_time;
+@@ -268,7 +262,7 @@
+ {
+   ElfW(Addr) start_addr;
+ 
+-  if (HP_TIMING_AVAIL)
++  if (HP_SMALL_TIMING_AVAIL)
+     {
+       /* If it hasn't happen yet record the startup time.  */
+       if (! HP_TIMING_INLINE)
+@@ -277,9 +271,6 @@
+       else
+ 	start_time = info->start_time;
+ #endif
+-
+-      /* Initialize the timing functions.  */
+-      HP_TIMING_DIFF_INIT ();
+     }
+ 
+   /* Transfer data about ourselves to the permanent link_map structure.  */
+@@ -315,9 +306,7 @@
+ 
+ #endif
+ 
+-#if HP_TIMING_AVAIL
+   HP_TIMING_NOW (GL(dl_cpuclock_offset));
+-#endif
+ 
+   /* Initialize the stack end variable.  */
+   __libc_stack_end = __builtin_frame_address (0);
+@@ -330,7 +319,7 @@
+ 
+ #ifndef HP_TIMING_NONAVAIL
+   hp_timing_t rtld_total_time;
+-  if (HP_TIMING_AVAIL)
++  if (HP_SMALL_TIMING_AVAIL)
+     {
+       hp_timing_t end_time;
+ 
+@@ -372,7 +361,7 @@
+ #define RESOLVE_MAP(sym, version, flags) (&bootstrap_map)
+ #include "dynamic-link.h"
+ 
+-  if (HP_TIMING_INLINE && HP_TIMING_AVAIL)
++  if (HP_TIMING_INLINE && HP_SMALL_TIMING_AVAIL)
+ #ifdef DONT_USE_BOOTSTRAP_MAP
+     HP_TIMING_NOW (start_time);
+ #else
+@@ -2720,7 +2709,7 @@
+   char *wp;
+ 
+   /* Total time rtld used.  */
+-  if (HP_TIMING_AVAIL)
++  if (HP_SMALL_TIMING_AVAIL)
+     {
+       HP_TIMING_PRINT (buf, sizeof (buf), *rtld_total_timep);
+       _dl_debug_printf ("\nruntime linker statistics:\n"
+@@ -2788,7 +2777,7 @@
+ 
+ #ifndef HP_TIMING_NONAVAIL
+   /* Time spend while loading the object and the dependencies.  */
+-  if (HP_TIMING_AVAIL)
++  if (HP_SMALL_TIMING_AVAIL)
+     {
+       char pbuf[30];
+       HP_TIMING_PRINT (buf, sizeof (buf), load_time);
+diff -urN glibc-2.17-c758a686/Makefile.in glibc-2.17-c758a686/Makefile.in
+--- glibc-2.17-c758a686/Makefile.in	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/Makefile.in	2015-06-20 21:22:16.305457862 -0400
+@@ -3,7 +3,7 @@
+ # Uncomment the line below if you want to do parallel build.
+ # PARALLELMFLAGS = -j 4
+ 
+-.PHONY: all install
++.PHONY: all install bench
+ 
+ all .DEFAULT:
+ 	$(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@
+@@ -11,3 +11,6 @@
+ install:
+ 	LANGUAGE=C LC_ALL=C; export LANGUAGE LC_ALL; \
+ 	$(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@
++
++bench bench-clean:
++	$(MAKE) -C $(srcdir)/benchtests $(PARALLELMFLAGS) objdir=`pwd` $@
+diff -urN glibc-2.17-c758a686/ports/sysdeps/alpha/hp-timing.h glibc-2.17-c758a686/ports/sysdeps/alpha/hp-timing.h
+--- glibc-2.17-c758a686/ports/sysdeps/alpha/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/alpha/hp-timing.h	2015-06-20 21:44:22.241186366 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  Alpha version.
+-   Copyright (C) 2001 Free Software Foundation, Inc.
++   Copyright (C) 2001-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Richard Henderson <rth@redhat.com>, 2001.
+ 
+@@ -20,52 +20,6 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-
+-/* The macros defined here use the timestamp counter in IA-64.  They
+-   provide a very accurate way to measure the time with very little
+-   overhead.  The time values themself have no real meaning, only
+-   differences are interesting.
+-
+-   The list of macros we need includes the following:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-*/
+-
+ /* We always have the timestamp register, but it's got only a 4 second
+    range.  Use it for ld.so profiling only.  */
+ #define HP_TIMING_AVAIL		(0)
+@@ -77,9 +31,6 @@
+ /* We use 32 bit values for the times.  */
+ typedef unsigned int hp_timing_t;
+ 
+-/* Set timestamp value to zero.  */
+-#define HP_TIMING_ZERO(VAR)	(VAR) = (0)
+-
+ /* The "rpcc" instruction returns a 32-bit counting half and a 32-bit
+    "virtual cycle counter displacement".  Subtracting the two gives us
+    a virtual cycle count.  */
+@@ -90,28 +41,6 @@
+     (VAR) = (int) (x_) - (int) (x_ >> 32);				      \
+   } while (0)
+ 
+-/* ??? Two rpcc instructions can be scheduled simultaneously.  */
+-#define HP_TIMING_DIFF_INIT() do { } while (0)
+-
+-/* It's simple arithmetic for us.  */
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-/* ??? Don't bother, since we're only used for ld.so.  */
+-#define HP_TIMING_ACCUM(Sum, Diff)  not implemented
+-
+-/* No threads, no extra work.  */
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-/* Print the time value.  */
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa_word (Val, __buf + sizeof (__buf), 10, 0);	      \
+-    int __len = (Len);							      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles")));  \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.c glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.c
+--- glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,23 +0,0 @@
+-/* Support for high precision, low overhead timing functions.  IA-64 version.
+-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@cygnus.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 <hp-timing.h>
+-
+-/* We have to define the variable for the overhead.  */
+-hp_timing_t _dl_hp_timing_overhead;
+diff -urN glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.h glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.h
+--- glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/ia64/hp-timing.h	2015-06-20 21:44:03.984740754 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  IA-64 version.
+-   Copyright (C) 2001-2012 Free Software Foundation, Inc.
++   Copyright (C) 2001-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
+ 
+@@ -20,56 +20,9 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-#include <ia64intrin.h>
+-
+-/* The macros defined here use the timestamp counter in IA-64.  They
+-   provide a very accurate way to measure the time with very little
+-   overhead.  The time values themself have no real meaning, only
+-   differences are interesting.
+-
+-   The list of macros we need includes the following:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-
+-*/
+-
+ /* We always assume having the timestamp register.  */
+ #define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
+ 
+ /* We indeed have inlined functions.  */
+ #define HP_TIMING_INLINE	(1)
+@@ -77,10 +30,6 @@
+ /* We use 64bit values for the times.  */
+ typedef unsigned long int hp_timing_t;
+ 
+-/* Set timestamp value to zero.  */
+-#define HP_TIMING_ZERO(Var)	(Var) = (0)
+-
+-
+ /* The Itanium/Merced has a bug where the ar.itc register value read
+    is not correct in some situations.  The solution is to read again.
+    For now we always do this until we know how to recognize a fixed
+@@ -95,53 +44,6 @@
+      while (REPEAT_READ (__itc));					      \
+      Var = __itc; })
+ 
+-/* Use two 'ar.itc' instructions in a row to find out how long it takes.  */
+-#define HP_TIMING_DIFF_INIT() \
+-  do {									      \
+-    int __cnt = 5;							      \
+-    GLRO(dl_hp_timing_overhead) = ~0ul;					      \
+-    do									      \
+-      {									      \
+-	hp_timing_t __t1, __t2;						      \
+-	HP_TIMING_NOW (__t1);						      \
+-	HP_TIMING_NOW (__t2);						      \
+-	if (__t2 - __t1 < GLRO(dl_hp_timing_overhead))			      \
+-	  GLRO(dl_hp_timing_overhead) = __t2 - __t1;			      \
+-      }									      \
+-    while (--__cnt > 0);						      \
+-  } while (0)
+-
+-/* It's simple arithmetic for us.  */
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-/* We have to jump through hoops to get this correctly implemented.  */
+-#define HP_TIMING_ACCUM(Sum, Diff) \
+-  do {									      \
+-    hp_timing_t __oldval;						      \
+-    hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);		      \
+-    hp_timing_t __newval;						      \
+-    do									      \
+-      {									      \
+-	__oldval = (Sum);						      \
+-	__newval = __oldval + __diff;					      \
+-      }									      \
+-    while (! __sync_bool_compare_and_swap (&Sum, __oldvar, __newval));	      \
+-  } while (0)
+-
+-/* No threads, no extra work.  */
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-/* Print the time value.  */
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa_word (Val, __buf + sizeof (__buf), 10, 0);	      \
+-    int __len = (Len);							      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " clock cycles", MIN (__len,			      \
+-					  (int) sizeof (" clock cycles")));   \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/ports/sysdeps/ia64/Makefile glibc-2.17-c758a686/ports/sysdeps/ia64/Makefile
+--- glibc-2.17-c758a686/ports/sysdeps/ia64/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/ports/sysdeps/ia64/Makefile	2015-06-20 22:31:17.725704221 -0400
+@@ -7,8 +7,6 @@
+ 
+ ifeq ($(subdir), csu)
+ CPPFLAGS-start.S = -D__ASSEMBLY__
+-sysdep_routines += hp-timing
+-elide-routines.os += hp-timing
+ 
+ ifeq (yes,$(build-shared))
+ # Compatibility
+diff -urN glibc-2.17-c758a686/Rules glibc-2.17-c758a686/Rules
+--- glibc-2.17-c758a686/Rules	2015-06-20 23:38:08.446088067 -0400
++++ glibc-2.17-c758a686/Rules	2015-06-20 21:22:16.305457862 -0400
+@@ -83,7 +83,7 @@
+ 
+ # This makes all the auxiliary and test programs.
+ 
+-.PHONY: others tests
++.PHONY: others tests bench
+ ifeq ($(multi-arch),no)
+ tests := $(filter-out $(tests-ifunc), $(tests))
+ xtests := $(filter-out $(xtests-ifunc), $(xtests))
+@@ -192,6 +192,7 @@
+ 	$(make-test-out) > $@
+ 
+ endif	# tests
++
+ 
+ .PHONY: distclean realclean subdir_distclean subdir_realclean \
+ 	subdir_clean subdir_mostlyclean subdir_testclean
+diff -urN glibc-2.17-c758a686/scripts/pylint glibc-2.17-c758a686/scripts/pylint
+--- glibc-2.17-c758a686/scripts/pylint	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/scripts/pylint	2015-06-20 21:22:16.305457862 -0400
+@@ -0,0 +1,5 @@
++#!/bin/sh
++# Simple wrapper around the pylint program that uses the pylintrc file to
++# validate the source code in files passed on command line.
++
++exec pylint --rcfile "${0%/*}/pylintrc" "$@"
+diff -urN glibc-2.17-c758a686/scripts/pylintrc glibc-2.17-c758a686/scripts/pylintrc
+--- glibc-2.17-c758a686/scripts/pylintrc	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/scripts/pylintrc	2015-06-20 21:22:16.305457862 -0400
+@@ -0,0 +1,274 @@
++[MASTER]
++
++# Specify a configuration file.
++#rcfile=
++
++# Python code to execute, usually for sys.path manipulation such as
++# pygtk.require().
++#init-hook=
++
++# Profiled execution.
++profile=no
++
++# Add files or directories to the blacklist. They should be base names, not
++# paths.
++ignore=CVS
++
++# Pickle collected data for later comparisons.
++persistent=yes
++
++# List of plugins (as comma separated values of python modules names) to load,
++# usually to register additional checkers.
++load-plugins=
++
++
++[MESSAGES CONTROL]
++
++# Enable the message, report, category or checker with the given id(s). You can
++# either give multiple identifier separated by comma (,) or put this option
++# multiple time. See also the "--disable" option for examples.
++#enable=
++
++# Disable the message, report, category or checker with the given id(s). You
++# can either give multiple identifiers separated by comma (,) or put this
++# option multiple times (only on the command line, not in the configuration
++# file where it should appear only once).You can also use "--disable=all" to
++# disable everything first and then reenable specific checks. For example, if
++# you want to run only the similarities checker, you can use "--disable=all
++# --enable=similarities". If you want to run only the classes checker, but have
++# no Warning level messages displayed, use"--disable=all --enable=classes
++# --disable=W"
++#disable=
++
++
++[REPORTS]
++
++# Set the output format. Available formats are text, parseable, colorized, msvs
++# (visual studio) and html. You can also give a reporter class, eg
++# mypackage.mymodule.MyReporterClass.
++output-format=text
++
++# Put messages in a separate file for each module / package specified on the
++# command line instead of printing them on stdout. Reports (if any) will be
++# written in a file name "pylint_global.[txt|html]".
++files-output=no
++
++# Tells whether to display a full report or only the messages
++reports=yes
++
++# Python expression which should return a note less than 10 (10 is the highest
++# note). You have access to the variables errors warning, statement which
++# respectively contain the number of errors / warnings messages and the total
++# number of statements analyzed. This is used by the global evaluation report
++# (RP0004).
++evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
++
++# Add a comment according to your evaluation note. This is used by the global
++# evaluation report (RP0004).
++comment=no
++
++# Template used to display messages. This is a python new-style format string
++# used to format the massage information. See doc for all details
++#msg-template=
++
++
++[MISCELLANEOUS]
++
++# List of note tags to take in consideration, separated by a comma.
++notes=FIXME,XXX,TODO
++
++
++[SIMILARITIES]
++
++# Minimum lines number of a similarity.
++min-similarity-lines=4
++
++# Ignore comments when computing similarities.
++ignore-comments=yes
++
++# Ignore docstrings when computing similarities.
++ignore-docstrings=yes
++
++# Ignore imports when computing similarities.
++ignore-imports=no
++
++
++[BASIC]
++
++# Required attributes for module, separated by a comma
++required-attributes=
++
++# List of builtins function names that should not be used, separated by a comma
++bad-functions=map,filter,apply,input
++
++# Regular expression which should only match correct module names
++module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
++
++# Regular expression which should only match correct module level names
++const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
++
++# Regular expression which should only match correct class names
++class-rgx=[A-Z_][a-zA-Z0-9]+$
++
++# Regular expression which should only match correct function names
++function-rgx=[a-z_][a-z0-9_]{2,30}$
++
++# Regular expression which should only match correct method names
++method-rgx=[a-z_][a-z0-9_]{2,30}$
++
++# Regular expression which should only match correct instance attribute names
++attr-rgx=[a-z_][a-z0-9_]{2,30}$
++
++# Regular expression which should only match correct argument names
++argument-rgx=[a-z_][a-z0-9_]{2,30}$
++
++# Regular expression which should only match correct variable names
++variable-rgx=[a-z_][a-z0-9_]{2,30}$
++
++# Regular expression which should only match correct attribute names in class
++# bodies
++class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$
++
++# Regular expression which should only match correct list comprehension /
++# generator expression variable names
++inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
++
++# Good variable names which should always be accepted, separated by a comma
++# f is a useful name for a file descriptor
++good-names=f,i,j,k,ex,Run,_
++
++# Bad variable names which should always be refused, separated by a comma
++bad-names=foo,bar,baz,toto,tutu,tata
++
++# Regular expression which should only match function or class names that do
++# not require a docstring.
++no-docstring-rgx=__.*__
++
++# Minimum line length for functions/classes that require docstrings, shorter
++# ones are exempt.
++docstring-min-length=-1
++
++
++[VARIABLES]
++
++# Tells whether we should check for unused import in __init__ files.
++init-import=no
++
++# A regular expression matching the beginning of the name of dummy variables
++# (i.e. not used).
++dummy-variables-rgx=_$|dummy
++
++# List of additional names supposed to be defined in builtins. Remember that
++# you should avoid to define new builtins when possible.
++additional-builtins=
++
++
++[FORMAT]
++
++# Maximum number of characters on a single line.
++max-line-length=79
++
++# Regexp for a line that is allowed to be longer than the limit.
++ignore-long-lines=^\s*(# )?<?https?://\S+>?$
++
++# Maximum number of lines in a module
++max-module-lines=1000
++
++# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
++# tab).
++indent-string='    '
++
++
++[TYPECHECK]
++
++# Tells whether missing members accessed in mixin class should be ignored. A
++# mixin class is detected if its name ends with "mixin" (case insensitive).
++ignore-mixin-members=yes
++
++# List of classes names for which member attributes should not be checked
++# (useful for classes with attributes dynamically set).
++ignored-classes=SQLObject
++
++# When zope mode is activated, add a predefined set of Zope acquired attributes
++# to generated-members.
++zope=no
++
++# List of members which are set dynamically and missed by pylint inference
++# system, and so shouldn't trigger E0201 when accessed. Python regular
++# expressions are accepted.
++generated-members=REQUEST,acl_users,aq_parent
++
++
++[CLASSES]
++
++# List of interface methods to ignore, separated by a comma. This is used for
++# instance to not check methods defines in Zope's Interface base class.
++ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
++
++# List of method names used to declare (i.e. assign) instance attributes.
++defining-attr-methods=__init__,__new__,setUp
++
++# List of valid names for the first argument in a class method.
++valid-classmethod-first-arg=cls
++
++# List of valid names for the first argument in a metaclass class method.
++valid-metaclass-classmethod-first-arg=mcs
++
++
++[IMPORTS]
++
++# Deprecated modules which should not be used, separated by a comma
++deprecated-modules=regsub,TERMIOS,Bastion,rexec
++
++# Create a graph of every (i.e. internal and external) dependencies in the
++# given file (report RP0402 must not be disabled)
++import-graph=
++
++# Create a graph of external dependencies in the given file (report RP0402 must
++# not be disabled)
++ext-import-graph=
++
++# Create a graph of internal dependencies in the given file (report RP0402 must
++# not be disabled)
++int-import-graph=
++
++
++[DESIGN]
++
++# Maximum number of arguments for function / method
++max-args=5
++
++# Argument names that match this expression will be ignored. Default to name
++# with leading underscore
++ignored-argument-names=_.*
++
++# Maximum number of locals for function / method body
++max-locals=15
++
++# Maximum number of return / yield for function / method body
++max-returns=6
++
++# Maximum number of branch for function / method body
++max-branches=12
++
++# Maximum number of statements in function / method body
++max-statements=50
++
++# Maximum number of parents for a class (see R0901).
++max-parents=7
++
++# Maximum number of attributes for a class (see R0902).
++max-attributes=7
++
++# Minimum number of public methods for a class (see R0903).
++min-public-methods=2
++
++# Maximum number of public methods for a class (see R0904).
++max-public-methods=20
++
++
++[EXCEPTIONS]
++
++# Exceptions that will emit a warning when being caught. Defaults to
++# "Exception"
++overgeneral-exceptions=Exception
+diff -urN glibc-2.17-c758a686/string/strtok.c glibc-2.17-c758a686/string/strtok.c
+--- glibc-2.17-c758a686/string/strtok.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/strtok.c	2015-06-20 21:22:16.305457862 -0400
+@@ -23,6 +23,10 @@
+ 
+ #undef strtok
+ 
++#ifndef STRTOK
++# define STRTOK strtok
++#endif
++
+ /* Parse S into tokens separated by characters in DELIM.
+    If S is NULL, the last string strtok() was called with is
+    used.  For example:
+@@ -33,9 +37,7 @@
+ 		// s = "abc\0=-def\0"
+ */
+ char *
+-strtok (s, delim)
+-     char *s;
+-     const char *delim;
++STRTOK (char *s, const char *delim)
+ {
+   char *token;
+ 
+diff -urN glibc-2.17-c758a686/string/test-memccpy.c glibc-2.17-c758a686/string/test-memccpy.c
+--- glibc-2.17-c758a686/string/test-memccpy.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-memccpy.c	2015-06-20 23:36:49.734443244 -0400
+@@ -74,24 +74,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute__ ((unused));
+-      hp_timing_t stop __attribute__ ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src, c, n);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -122,14 +104,8 @@
+   for (i = len; i + align1 < page_size && i < len + 64; ++i)
+     s1[i] = 32 + 32 * i % (max_char - 32);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, n %4zd, char %d, alignment %2zd/%2zd:", len, n, c, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s2, s1, c, len, n);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-memchr.c glibc-2.17-c758a686/string/test-memchr.c
+--- glibc-2.17-c758a686/string/test-memchr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-memchr.c	2015-06-20 23:36:49.736443184 -0400
+@@ -47,24 +47,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, c, n);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -97,14 +79,8 @@
+       buf1[align + len] = seek_char;
+     }
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd:", pos, align);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (char *) (buf1 + align), seek_char, len, result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-memcmp.c glibc-2.17-c758a686/string/test-memcmp.c
+--- glibc-2.17-c758a686/string/test-memcmp.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-memcmp.c	2015-06-20 23:36:49.736443184 -0400
+@@ -100,24 +100,6 @@
+ {
+   if (check_result (impl, s1, s2, len, exp_result) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2, len);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -147,14 +129,8 @@
+   s2[len] = align2;
+   s2[len - 1] -= exp_result;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, len, exp_result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-memcpy.c glibc-2.17-c758a686/string/test-memcpy.c
+--- glibc-2.17-c758a686/string/test-memcpy.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-memcpy.c	2015-06-20 23:36:49.736443184 -0400
+@@ -68,24 +68,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src, len);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -108,14 +90,8 @@
+   for (i = 0, j = 1; i < len; i++, j += 23)
+     s1[i] = j;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s2, s1, len);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-memmem.c glibc-2.17-c758a686/string/test-memmem.c
+--- glibc-2.17-c758a686/string/test-memmem.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-memmem.c	2015-06-20 23:36:49.736443184 -0400
+@@ -82,24 +82,6 @@
+   if (check_result (impl, haystack, haystack_len, needle, needle_len,
+ 		    expected) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, haystack, haystack_len, needle, needle_len);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -110,16 +92,10 @@
+   memcpy (tmpbuf, buf1 + idx, len);
+   memcpy (buf1 + idx, str, len);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("String %s, offset %zd:", str, idx);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, buf1, BUF1PAGES * page_size, str, len, buf1 + idx);
+ 
+   memcpy (buf1 + idx, tmpbuf, len);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+@@ -143,16 +119,10 @@
+ 	  buf1[idx + off] = ch;
+ 	}
+ 
+-      if (HP_TIMING_AVAIL)
+-	printf ("String %.*s, offset %zd:", (int) len, buf1 + idx, idx);
+-
+       FOR_EACH_IMPL (impl, 0)
+ 	do_one_test (impl, buf1, BUF1PAGES * page_size, buf1 + idx, len,
+ 		     buf1 + idx);
+ 
+-      if (HP_TIMING_AVAIL)
+-	putchar ('\n');
+-
+       memcpy (buf1 + idx, tmpbuf, len);
+     }
+ }
+diff -urN glibc-2.17-c758a686/string/test-memmove.c glibc-2.17-c758a686/string/test-memmove.c
+--- glibc-2.17-c758a686/string/test-memmove.c	2015-06-20 23:38:08.186095846 -0400
++++ glibc-2.17-c758a686/string/test-memmove.c	2015-06-20 23:36:49.737443154 -0400
+@@ -91,28 +91,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-#ifdef TEST_BCOPY
+-	  CALL (impl, src, dst, len);
+-#else
+-	  CALL (impl, dst, src, len);
+-#endif
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -135,14 +113,8 @@
+   for (i = 0, j = 1; i < len; i++, j += 23)
+     s1[i] = j;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s2, (char *) (buf2 + align1), s1, len);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-memset.c glibc-2.17-c758a686/string/test-memset.c
+--- glibc-2.17-c758a686/string/test-memset.c	2015-06-20 23:38:08.186095846 -0400
++++ glibc-2.17-c758a686/string/test-memset.c	2015-06-20 23:36:49.737443154 -0400
+@@ -92,29 +92,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-#ifdef TEST_BZERO
+-	  CALL (impl, s, n);
+-#else
+-	  CALL (impl, s, c, n);
+-#endif
+-
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -124,14 +101,8 @@
+   if (align + len > page_size)
+     return;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (char *) buf1 + align, c, len);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ #ifndef TEST_BZERO
+diff -urN glibc-2.17-c758a686/string/test-rawmemchr.c glibc-2.17-c758a686/string/test-rawmemchr.c
+--- glibc-2.17-c758a686/string/test-rawmemchr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-rawmemchr.c	2015-06-20 23:36:49.737443154 -0400
+@@ -49,24 +49,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, c);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -93,14 +75,8 @@
+   buf1[align + len] = -seek_char;
+   result = (char *) (buf1 + align + pos);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd:", pos, align);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (char *) (buf1 + align), seek_char, result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strcasecmp.c glibc-2.17-c758a686/string/test-strcasecmp.c
+--- glibc-2.17-c758a686/string/test-strcasecmp.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strcasecmp.c	2015-06-20 23:36:49.737443154 -0400
+@@ -73,24 +73,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -129,14 +111,8 @@
+   else
+     s2[len - 1] -= exp_result;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, exp_result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strcasestr.c glibc-2.17-c758a686/string/test-strcasestr.c
+--- glibc-2.17-c758a686/string/test-strcasestr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strcasestr.c	2015-06-20 23:36:49.737443154 -0400
+@@ -78,24 +78,6 @@
+ {
+   if (check_result (impl, s1, s2, exp_result) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~(hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ 
+@@ -135,15 +117,8 @@
+     }
+   s1[len1] = '\0';
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
+-	    len1, len2, align1, align2, fail ? "fail" : "found");
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strcat.c glibc-2.17-c758a686/string/test-strcat.c
+--- glibc-2.17-c758a686/string/test-strcat.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strcat.c	2015-06-20 23:36:49.737443154 -0400
+@@ -56,25 +56,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  dst[k] = '\0';
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -101,17 +82,11 @@
+   for (i = 0; i < len2; i++)
+     s2[i] = 32 + 23 * i % (max_char - 32);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len1, len2, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     {
+       s2[len2] = '\0';
+       do_one_test (impl, s2, s1);
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strchr.c glibc-2.17-c758a686/string/test-strchr.c
+--- glibc-2.17-c758a686/string/test-strchr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strchr.c	2015-06-20 23:36:49.737443154 -0400
+@@ -107,24 +107,6 @@
+ {
+   if (check_result (impl, s, c, exp_res) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, c);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -160,15 +142,8 @@
+   else
+     result = NULLRET (buf + align + len);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment in bytes %2zd:",
+-	    pos, align * sizeof (CHAR));
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, buf + align, seek_char, result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strcmp.c glibc-2.17-c758a686/string/test-strcmp.c
+--- glibc-2.17-c758a686/string/test-strcmp.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strcmp.c	2015-06-20 23:36:49.737443154 -0400
+@@ -161,24 +161,6 @@
+ {
+   if (check_result (impl, s1, s2, exp_result) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -214,14 +196,8 @@
+   s2[len + 1] = 24 + exp_result;
+   s2[len - 1] -= exp_result;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, exp_result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strcpy.c glibc-2.17-c758a686/string/test-strcpy.c
+--- glibc-2.17-c758a686/string/test-strcpy.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strcpy.c	2015-06-20 23:36:49.737443154 -0400
+@@ -92,24 +92,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));;
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -135,14 +117,8 @@
+     s1[i] = 32 + 23 * i % (max_char - 32);
+   s1[len] = 0;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignments in bytes %2zd/%2zd:", len, align1 * sizeof(CHAR), align2 * sizeof(CHAR));
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s2, s1, len);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-string.h glibc-2.17-c758a686/string/test-string.h
+--- glibc-2.17-c758a686/string/test-string.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-string.h	2015-06-20 21:48:02.050511490 -0400
+@@ -1,5 +1,5 @@
+ /* Test and measure string and memory functions.
+-   Copyright (C) 1999-2012 Free Software Foundation, Inc.
++   Copyright (C) 1999-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Written by Jakub Jelinek <jakub@redhat.com>, 1999.
+ 
+@@ -53,7 +53,6 @@
+ #include <ifunc-impl-list.h>
+ #define GL(x) _##x
+ #define GLRO(x) _##x
+-#include <hp-timing.h>
+ 
+ 
+ # define TEST_FUNCTION test_main ()
+@@ -67,8 +66,6 @@
+ unsigned int seed;
+ size_t page_size;
+ 
+-hp_timing_t _dl_hp_timing_overhead;
+-
+ # ifndef ITERATIONS
+ size_t iterations = 100000;
+ #  define ITERATIONS_OPTIONS \
+@@ -107,7 +104,7 @@
+ #define CALL(impl, ...)	\
+   (* (proto_t) (impl)->fn) (__VA_ARGS__)
+ 
+-#if defined TEST_IFUNC && defined TEST_NAME
++#ifdef TEST_NAME
+ /* Increase size of FUNC_LIST if assert is triggered at run-time.  */
+ static struct libc_ifunc_impl func_list[32];
+ static int func_count;
+@@ -159,16 +156,6 @@
+     if (!notall || impl->test)
+ #endif
+ 
+-#define HP_TIMING_BEST(best_time, start, end)	\
+-  do									\
+-    {									\
+-      hp_timing_t tmptime;						\
+-      HP_TIMING_DIFF (tmptime, start + _dl_hp_timing_overhead, end);	\
+-      if (best_time > tmptime)						\
+-	best_time = tmptime;						\
+-    }									\
+-  while (0)
+-
+ #ifndef BUF1PAGES
+ # define BUF1PAGES 1
+ #endif
+@@ -176,7 +163,7 @@
+ static void
+ test_init (void)
+ {
+-#if defined TEST_IFUNC && defined TEST_NAME
++#ifdef TEST_NAME
+   func_count = __libc_ifunc_impl_list (TEST_NAME, func_list,
+ 				       (sizeof func_list
+ 					/ sizeof func_list[0]));
+@@ -199,7 +186,6 @@
+     error (EXIT_FAILURE, errno, "mmap failed");
+   if (mprotect (buf2 + page_size, page_size, PROT_NONE))
+     error (EXIT_FAILURE, errno, "mprotect failed");
+-  HP_TIMING_DIFF_INIT ();
+   if (do_srandom)
+     {
+       printf ("Setting seed to 0x%x\n", seed);
+diff -urN glibc-2.17-c758a686/string/test-strlen.c glibc-2.17-c758a686/string/test-strlen.c
+--- glibc-2.17-c758a686/string/test-strlen.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strlen.c	2015-06-20 23:36:59.693145264 -0400
+@@ -72,24 +72,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -107,14 +89,8 @@
+     buf[align + i] = 1 + 11111 * i % MAX_CHAR;
+   buf[align + len] = 0;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd:", len, align);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (CHAR *) (buf + align), len);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strncasecmp.c glibc-2.17-c758a686/string/test-strncasecmp.c
+--- glibc-2.17-c758a686/string/test-strncasecmp.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strncasecmp.c	2015-06-20 23:36:59.694145234 -0400
+@@ -94,24 +94,6 @@
+ {
+   if (check_result (impl, s1, s2, n, exp_result) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2, n);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -150,14 +132,8 @@
+   else
+     s2[len - 1] -= exp_result;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, n, exp_result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strncat.c glibc-2.17-c758a686/string/test-strncat.c
+--- glibc-2.17-c758a686/string/test-strncat.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strncat.c	2015-06-20 23:36:59.694145234 -0400
+@@ -67,24 +67,6 @@
+       ret = 1;
+       return;
+     }
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  dst[k] = '\0';
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src, n);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -114,18 +96,11 @@
+   for (i = 0; i < len2; i++)
+     s2[i] = 32 + 23 * i % (max_char - 32);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd/%4zd, alignment %2zd/%2zd, N %4zd:",
+-	    len1, len2, align1, align2, n);
+-
+   FOR_EACH_IMPL (impl, 0)
+     {
+       s2[len2] = '\0';
+       do_one_test (impl, s2, s1, n);
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strncmp.c glibc-2.17-c758a686/string/test-strncmp.c
+--- glibc-2.17-c758a686/string/test-strncmp.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strncmp.c	2015-06-20 23:36:59.694145234 -0400
+@@ -75,24 +75,6 @@
+ {
+   if (check_result (impl, s1, s2, n, exp_result) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2, n);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -106,15 +88,10 @@
+     {
+       s1 = (char*)(buf1 + page_size);
+       s2 = (char*)(buf2 + page_size);
+-      if (HP_TIMING_AVAIL)
+-	printf ("Length %4zd/%4zd:", len, n);
+ 
+       FOR_EACH_IMPL (impl, 0)
+ 	do_one_test (impl, s1, s2, n, 0);
+ 
+-      if (HP_TIMING_AVAIL)
+-	putchar ('\n');
+-
+       return;
+     }
+ 
+@@ -144,14 +121,8 @@
+ 	s1[len] = 64;
+     }
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, n, exp_result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+@@ -189,14 +160,8 @@
+   if (len >= n)
+     s2[n - 1] -= exp_result;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (char*)s1, (char*)s2, n, exp_result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strncpy.c glibc-2.17-c758a686/string/test-strncpy.c
+--- glibc-2.17-c758a686/string/test-strncpy.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strncpy.c	2015-06-20 23:36:59.695145204 -0400
+@@ -90,24 +90,6 @@
+ 	    return;
+ 	  }
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute__ ((unused));
+-      hp_timing_t stop __attribute__ ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, dst, src, n);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -133,14 +115,8 @@
+   for (i = len + 1; i + align1 < page_size && i < len + 64; ++i)
+     s1[i] = 32 + 32 * i % (max_char - 32);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, n %4zd, alignment %2zd/%2zd:", len, n, align1, align2);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s2, s1, len, n);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strnlen.c glibc-2.17-c758a686/string/test-strnlen.c
+--- glibc-2.17-c758a686/string/test-strnlen.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strnlen.c	2015-06-20 23:36:59.695145204 -0400
+@@ -47,24 +47,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, maxlen);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -80,14 +62,8 @@
+     buf1[align + i] = 1 + 7 * i % max_char;
+   buf1[align + len] = 0;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd:", len, align);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (char *) (buf1 + align), maxlen, MIN (len, maxlen));
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strpbrk.c glibc-2.17-c758a686/string/test-strpbrk.c
+--- glibc-2.17-c758a686/string/test-strpbrk.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strpbrk.c	2015-06-20 23:36:59.695145204 -0400
+@@ -70,24 +70,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, rej);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -137,14 +119,8 @@
+     }
+   result = STRPBRK_RESULT (s, pos);
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd, rej len %2zd:", pos, align, len);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s, rej, result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strrchr.c glibc-2.17-c758a686/string/test-strrchr.c
+--- glibc-2.17-c758a686/string/test-strrchr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strrchr.c	2015-06-20 23:36:59.695145204 -0400
+@@ -73,24 +73,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, c);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -129,14 +111,8 @@
+   else
+     result = NULL;
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment in bytes %2zd:", pos, align * sizeof(CHAR));
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, (CHAR *) (buf + align), seek_char, result);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strspn.c glibc-2.17-c758a686/string/test-strspn.c
+--- glibc-2.17-c758a686/string/test-strspn.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strspn.c	2015-06-20 23:36:59.696145174 -0400
+@@ -74,24 +74,6 @@
+       ret = 1;
+       return;
+     }
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~ (hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s, acc);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ static void
+@@ -129,14 +111,8 @@
+       s[i] = '\0';
+     }
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd, alignment %2zd, acc len %2zd:", pos, align, len);
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s, acc, pos);
+-
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/string/test-strstr.c glibc-2.17-c758a686/string/test-strstr.c
+--- glibc-2.17-c758a686/string/test-strstr.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/string/test-strstr.c	2015-06-20 23:36:59.696145174 -0400
+@@ -77,24 +77,6 @@
+ {
+   if (check_result (impl, s1, s2, exp_result) < 0)
+     return;
+-
+-  if (HP_TIMING_AVAIL)
+-    {
+-      hp_timing_t start __attribute ((unused));
+-      hp_timing_t stop __attribute ((unused));
+-      hp_timing_t best_time = ~(hp_timing_t) 0;
+-      size_t i;
+-
+-      for (i = 0; i < 32; ++i)
+-	{
+-	  HP_TIMING_NOW (start);
+-	  CALL (impl, s1, s2);
+-	  HP_TIMING_NOW (stop);
+-	  HP_TIMING_BEST (best_time, start, stop);
+-	}
+-
+-      printf ("\t%zd", (size_t) best_time);
+-    }
+ }
+ 
+ 
+@@ -133,15 +115,9 @@
+     }
+   s1[len1] = '\0';
+ 
+-  if (HP_TIMING_AVAIL)
+-    printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
+-	    len1, len2, align1, align2, fail ? "fail" : "found");
+-
+   FOR_EACH_IMPL (impl, 0)
+     do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
+ 
+-  if (HP_TIMING_AVAIL)
+-    putchar ('\n');
+ }
+ 
+ static void
+diff -urN glibc-2.17-c758a686/sysdeps/generic/hp-timing-common.h glibc-2.17-c758a686/sysdeps/generic/hp-timing-common.h
+--- glibc-2.17-c758a686/sysdeps/generic/hp-timing-common.h	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/generic/hp-timing-common.h	2015-06-20 21:34:49.496580235 -0400
+@@ -0,0 +1,62 @@
++/* High precision, low overhead timing functions.  Generic version.
++   Copyright (C) 1998-2015 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/>.  */
++
++/* In case a platform supports timers in the hardware the following macros
++   and types must be defined:
++
++   - HP_TIMING_AVAIL: test for availability.
++
++   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
++     implemented using function calls but instead uses some inlined code
++     which might simply consist of a few assembler instructions.  We have to
++     know this since we might want to use the macros here in places where we
++     cannot make function calls.
++
++   - hp_timing_t: This is the type for variables used to store the time
++     values.  This type must be integral.
++
++   - HP_TIMING_NOW: place timestamp for current time in variable given as
++     parameter.
++*/
++
++/* The target supports hp-timing.  Share the common infrastructure.  */
++
++#include <string.h>
++#include <sys/param.h>
++#include <_itoa.h>
++
++/* Compute the difference between START and END, storing into DIFF.  */
++#define HP_TIMING_DIFF(Diff, Start, End)	((Diff) = (End) - (Start))
++
++/* Accumulate ADD into SUM.  No attempt is made to be thread-safe.  */
++#define HP_TIMING_ACCUM_NT(Sum, Diff)		((Sum) += (Diff))
++
++/* Write a decimal representation of the timing value into the given string.  */
++#define HP_TIMING_PRINT(Dest, Len, Val) 				\
++  do {									\
++    char __buf[20];							\
++    char *__dest = (Dest);						\
++    size_t __len = (Len);						\
++    char *__cp = _itoa ((Val), __buf + sizeof (__buf), 10, 0);		\
++    size_t __cp_len = MIN (__buf + sizeof (__buf) - __cp, __len);	\
++    memcpy (__dest, __cp, __cp_len);					\
++    memcpy (__dest + __cp_len, " cycles",				\
++	    MIN (__len - __cp_len, sizeof (" cycles")));		\
++    __dest[__len - 1] = '\0';						\
++  } while (0)
+diff -urN glibc-2.17-c758a686/sysdeps/generic/hp-timing.h glibc-2.17-c758a686/sysdeps/generic/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/generic/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/generic/hp-timing.h	2015-06-20 21:36:22.190764717 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  Generic version.
+-   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
++   Copyright (C) 1998-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+ 
+@@ -20,59 +20,17 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-
+ /* There are no generic definitions for the times.  We could write something
+    using the `gettimeofday' system call where available but the overhead of
+-   the system call might be too high.
+-
+-   In case a platform supports timers in the hardware the following macros
+-   and types must be defined:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-
+-*/
++   the system call might be too high.  */
+ 
+ /* Provide dummy definitions.  */
+ #define HP_TIMING_AVAIL		(0)
++#define HP_SMALL_TIMING_AVAIL	(0)
+ #define HP_TIMING_INLINE	(0)
+ typedef int hp_timing_t;
+-#define HP_TIMING_ZERO(Var)
+ #define HP_TIMING_NOW(var)
+-#define HP_TIMING_DIFF_INIT()
+ #define HP_TIMING_DIFF(Diff, Start, End)
+-#define HP_TIMING_ACCUM(Sum, Diff)
+ #define HP_TIMING_ACCUM_NT(Sum, Diff)
+ #define HP_TIMING_PRINT(Buf, Len, Val)
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h
+--- glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h	2015-06-20 23:38:08.609083190 -0400
++++ glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h	2015-06-20 22:07:15.207493957 -0400
+@@ -315,7 +315,7 @@
+   /* The object to be initialized first.  */
+   EXTERN struct link_map *_dl_initfirst;
+ 
+-#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
++#if HP_SMALL_TIMING_AVAIL
+   /* Start time on CPU clock.  */
+   EXTERN hp_timing_t _dl_cpuclock_offset;
+ #endif
+@@ -538,11 +538,6 @@
+   /* All search directories defined at startup.  */
+   EXTERN struct r_search_path_elem *_dl_init_all_dirs;
+ 
+-#if HP_TIMING_AVAIL || HP_SMALL_TIMING_AVAIL
+-  /* Overhead of a high-precision timing measurement.  */
+-  EXTERN hp_timing_t _dl_hp_timing_overhead;
+-#endif
+-
+ #ifdef NEED_DL_SYSINFO
+   /* Syscall handling improvements.  This is very specific to x86.  */
+   EXTERN uintptr_t _dl_sysinfo;
+diff -urN glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.c glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.c
+--- glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,23 +0,0 @@
+-/* Support for high precision, low overhead timing functions.  i686 version.
+-   Copyright (C) 1998, 2002 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 <hp-timing.h>
+-
+-/* We have to define the variable for the overhead.  */
+-hp_timing_t _dl_hp_timing_overhead;
+diff -urN glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.h glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/i386/i686/hp-timing.h	2015-06-20 23:03:58.919192570 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  i686 version.
+-   Copyright (C) 1998, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
++   Copyright (C) 1998-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+ 
+@@ -20,62 +20,9 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-
+-/* The macros defined here use the timestamp counter in i586 and up versions
+-   of the x86 processors.  They provide a very accurate way to measure the
+-   time with very little overhead.  The time values themself have no real
+-   meaning, only differences are interesting.
+-
+-   This version is for the i686 processors.  The difference to the i586
+-   version is that the timerstamp register is unconditionally used.  This is
+-   not the case for the i586 version where we have to perform runtime test
+-   whether the processor really has this capability.  We have to make this
+-   distinction since the sysdeps/i386/i586 code is supposed to work on all
+-   platforms while the i686 already contains i686-specific code.
+-
+-   The list of macros we need includes the following:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-
+-*/
+-
+ /* We always assume having the timestamp register.  */
+ #define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
+ 
+ /* We indeed have inlined functions.  */
+ #define HP_TIMING_INLINE	(1)
+@@ -83,9 +30,6 @@
+ /* We use 64bit values for the times.  */
+ typedef unsigned long long int hp_timing_t;
+ 
+-/* Set timestamp value to zero.  */
+-#define HP_TIMING_ZERO(Var)	(Var) = (0)
+-
+ /* That's quite simple.  Use the `rdtsc' instruction.  Note that the value
+    might not be 100% accurate since there might be some more instructions
+    running in this moment.  This could be changed by using a barrier like
+@@ -93,64 +37,6 @@
+    in accurate clock cycles here so we don't do this.  */
+ #define HP_TIMING_NOW(Var)	__asm__ __volatile__ ("rdtsc" : "=A" (Var))
+ 
+-/* Use two 'rdtsc' instructions in a row to find out how long it takes.  */
+-#define HP_TIMING_DIFF_INIT() \
+-  do {									      \
+-    if (GLRO(dl_hp_timing_overhead) == 0)				      \
+-      {									      \
+-	int __cnt = 5;							      \
+-	GLRO(dl_hp_timing_overhead) = ~0ull;				      \
+-	do								      \
+-	  {								      \
+-	    hp_timing_t __t1, __t2;					      \
+-	    HP_TIMING_NOW (__t1);					      \
+-	    HP_TIMING_NOW (__t2);					      \
+-	    if (__t2 - __t1 < GLRO(dl_hp_timing_overhead))		      \
+-	      GLRO(dl_hp_timing_overhead) = __t2 - __t1;		      \
+-	  }								      \
+-	while (--__cnt > 0);						      \
+-      }									      \
+-  } while (0)
+-
+-/* It's simple arithmetic for us.  */
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-/* We have to jump through hoops to get this correctly implemented.  */
+-#define HP_TIMING_ACCUM(Sum, Diff) \
+-  do {									      \
+-    int __not_done;							      \
+-    hp_timing_t __oldval = (Sum);					      \
+-    hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);		      \
+-    do									      \
+-      {									      \
+-	hp_timing_t __newval = __oldval + __diff;			      \
+-	int __temp0, __temp1;						      \
+-	__asm__ __volatile__ ("xchgl %0, %%ebx\n\t"			      \
+-			      "lock; cmpxchg8b %1\n\t"			      \
+-			      "sete %%bl\n\t"				      \
+-			      "xchgl %0, %%ebx"				      \
+-			      : "=SD" (__not_done), "=m" (Sum),		      \
+-				"=A" (__oldval), "=c" (__temp0)		      \
+-			      : "m" (Sum), "2" (__oldval),		      \
+-				"3" ((unsigned int) (__newval >> 32)),	      \
+-				"0" ((unsigned int) __newval));		      \
+-      }									      \
+-    while ((unsigned char) __not_done);					      \
+-  } while (0)
+-
+-/* No threads, no extra work.  */
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-/* Print the time value.  */
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0);		      \
+-    size_t __len = (Len);						      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles")));  \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/i386/i686/Makefile glibc-2.17-c758a686/sysdeps/i386/i686/Makefile
+--- glibc-2.17-c758a686/sysdeps/i386/i686/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/i386/i686/Makefile	2015-06-20 21:22:16.306457831 -0400
+@@ -1,8 +1,3 @@
+-ifeq ($(subdir),csu)
+-sysdep_routines += hp-timing
+-elide-routines.os += hp-timing
+-endif
+-
+ # So that we can test __m128's alignment
+ stack-align-test-flags += -msse
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/hp-timing.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/hp-timing.h	1969-12-31 19:00:00.000000000 -0500
+@@ -1,81 +0,0 @@
+-/* High precision, low overhead timing functions.  Linux/PPC32 version.
+-   Copyright (C) 2005 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 _HP_TIMING_H
+-#define _HP_TIMING_H	1
+-
+-
+-/* There are no generic definitions for the times.  We could write something
+-   using the `gettimeofday' system call where available but the overhead of
+-   the system call might be too high.
+-
+-   In case a platform supports timers in the hardware the following macros
+-   and types must be defined:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-
+-*/
+-
+-/* Provide dummy definitions.  */
+-#define HP_TIMING_AVAIL		(0)
+-#define HP_TIMING_INLINE	(0)
+-typedef unsigned long long int hp_timing_t;
+-#define HP_TIMING_ZERO(Var)
+-#define HP_TIMING_NOW(var)
+-#define HP_TIMING_DIFF_INIT()
+-#define HP_TIMING_DIFF(Diff, Start, End)
+-#define HP_TIMING_ACCUM(Sum, Diff)
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)
+-#define HP_TIMING_PRINT(Buf, Len, Val)
+-
+-/* Since this implementation is not available we tell the user about it.  */
+-#define HP_TIMING_NONAVAIL	1
+-
+-#endif /* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.c glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,24 +0,0 @@
+-/* Support for high precision, low overhead timing functions. 
+-   powerpc64 version.
+-   Copyright (C) 2005, 2008 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 <hp-timing.h>
+-
+-/* We have to define the variable for the overhead.  */
+-hp_timing_t _dl_hp_timing_overhead;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h	2015-06-20 23:38:08.326091657 -0400
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/power4/hp-timing.h	2015-06-20 21:38:56.874066681 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  powerpc64 version.
+-   Copyright (C) 2005, 2008 Free Software Foundation, Inc.
++   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+ 
+@@ -20,55 +20,9 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-#include <atomic.h>
+-
+-/* The macros defined here use the powerpc 64-bit time base register.
+-   The time base is nominally clocked at 1/8th the CPU clock, but this
+-   can vary.
+-
+-   The list of macros we need includes the following:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-
+-*/
+-
+ /* We always assume having the timestamp register.  */
+ #define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
+ 
+ /* We indeed have inlined functions.  */
+ #define HP_TIMING_INLINE	(1)
+@@ -76,13 +30,10 @@
+ /* We use 64bit values for the times.  */
+ typedef unsigned long long int hp_timing_t;
+ 
+-/* Set timestamp value to zero.  */
+-#define HP_TIMING_ZERO(Var)	(Var) = (0)
+-
+ /* That's quite simple.  Use the `mftb' instruction.  Note that the value
+    might not be 100% accurate since there might be some more instructions
+    running in this moment.  This could be changed by using a barrier like
+-   'lwsync' right before the `mftb' instruciton.  But we are not interested
++   'lwsync' right before the `mftb' instruction.  But we are not interested
+    in accurate clock cycles here so we don't do this.  */
+ 
+ #define HP_TIMING_NOW(Var)						\
+@@ -98,51 +49,6 @@
+     Var = ((hp_timing_t) hi << 32) | lo;				\
+   } while (0)
+ 
+-
+-/* Use two 'mftb' instructions in a row to find out how long it takes.
+-   On current POWER4, POWER5, and 970 processors mftb take ~10 cycles.  */
+-#define HP_TIMING_DIFF_INIT() \
+-  do {									      \
+-    if (GLRO(dl_hp_timing_overhead) == 0)				      \
+-      {									      \
+-	int __cnt = 5;							      \
+-	GLRO(dl_hp_timing_overhead) = ~0ull;				      \
+-	do								      \
+-	  {								      \
+-	    hp_timing_t __t1, __t2;					      \
+-	    HP_TIMING_NOW (__t1);					      \
+-	    HP_TIMING_NOW (__t2);					      \
+-	    if (__t2 - __t1 < GLRO(dl_hp_timing_overhead))		      \
+-	      GLRO(dl_hp_timing_overhead) = __t2 - __t1;		      \
+-	  }								      \
+-	while (--__cnt > 0);						      \
+-      }									      \
+-  } while (0)
+-
+-/* It's simple arithmetic in 64-bit.  */
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-/* We need to insure that this add is atomic in threaded environments.  We use
+-   __arch_atomic_exchange_and_add_64 from atomic.h to get thread safety.  */
+-#define HP_TIMING_ACCUM(Sum, Diff) \
+-  do {									      \
+-    hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);		      \
+-    __arch_atomic_exchange_and_add_64 (&(Sum), __diff);	                      \
+-  } while (0)
+-
+-/* No threads, no extra work.  */
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-/* Print the time value.  */
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0);		      \
+-    size_t __len = (Len);						      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " ticks", MIN (__len, sizeof (" ticks")));  \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.c glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,24 +0,0 @@
+-/* Support for high precision, low overhead timing functions. 
+-   powerpc64 version.
+-   Copyright (C) 2005 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 <hp-timing.h>
+-
+-/* We have to define the variable for the overhead.  */
+-hp_timing_t _dl_hp_timing_overhead;
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/hp-timing.h	2015-06-20 21:42:32.315524442 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  powerpc64 version.
+-   Copyright (C) 2005, 2008 Free Software Foundation, Inc.
++   Copyright (C) 2005-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
+ 
+@@ -20,55 +20,9 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-#include <atomic.h>
+-
+-/* The macros defined here use the powerpc 64-bit time base register.
+-   The time base is nominally clocked at 1/8th the CPU clock, but this
+-   can vary.
+-
+-   The list of macros we need includes the following:
+-
+-   - HP_TIMING_AVAIL: test for availability.
+-
+-   - HP_TIMING_INLINE: this macro is non-zero if the functionality is not
+-     implemented using function calls but instead uses some inlined code
+-     which might simply consist of a few assembler instructions.  We have to
+-     know this since we might want to use the macros here in places where we
+-     cannot make function calls.
+-
+-   - hp_timing_t: This is the type for variables used to store the time
+-     values.
+-
+-   - HP_TIMING_ZERO: clear `hp_timing_t' object.
+-
+-   - HP_TIMING_NOW: place timestamp for current time in variable given as
+-     parameter.
+-
+-   - HP_TIMING_DIFF_INIT: do whatever is necessary to be able to use the
+-     HP_TIMING_DIFF macro.
+-
+-   - HP_TIMING_DIFF: compute difference between two times and store it
+-     in a third.  Source and destination might overlap.
+-
+-   - HP_TIMING_ACCUM: add time difference to another variable.  This might
+-     be a bit more complicated to implement for some platforms as the
+-     operation should be thread-safe and 64bit arithmetic on 32bit platforms
+-     is not.
+-
+-   - HP_TIMING_ACCUM_NT: this is the variant for situations where we know
+-     there are no threads involved.
+-
+-   - HP_TIMING_PRINT: write decimal representation of the timing value into
+-     the given string.  This operation need not be inline even though
+-     HP_TIMING_INLINE is specified.
+-
+-*/
+-
+ /* We always assume having the timestamp register.  */
+ #define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
+ 
+ /* We indeed have inlined functions.  */
+ #define HP_TIMING_INLINE	(1)
+@@ -76,13 +30,10 @@
+ /* We use 64bit values for the times.  */
+ typedef unsigned long long int hp_timing_t;
+ 
+-/* Set timestamp value to zero.  */
+-#define HP_TIMING_ZERO(Var)	(Var) = (0)
+-
+ /* That's quite simple.  Use the `mftb' instruction.  Note that the value
+    might not be 100% accurate since there might be some more instructions
+    running in this moment.  This could be changed by using a barrier like
+-   'lwsync' right before the `mftb' instruciton.  But we are not interested
++   'lwsync' right before the `mftb' instruction.  But we are not interested
+    in accurate clock cycles here so we don't do this.  */
+ #ifdef _ARCH_PWR4
+ #define HP_TIMING_NOW(Var)	__asm__ __volatile__ ("mfspr %0,268" : "=r" (Var))
+@@ -90,50 +41,6 @@
+ #define HP_TIMING_NOW(Var)	__asm__ __volatile__ ("mftb %0" : "=r" (Var))
+ #endif
+ 
+-/* Use two 'mftb' instructions in a row to find out how long it takes.
+-   On current POWER4, POWER5, and 970 processors mftb take ~10 cycles.  */
+-#define HP_TIMING_DIFF_INIT() \
+-  do {									      \
+-    if (GLRO(dl_hp_timing_overhead) == 0)				      \
+-      {									      \
+-	int __cnt = 5;							      \
+-	GLRO(dl_hp_timing_overhead) = ~0ull;				      \
+-	do								      \
+-	  {								      \
+-	    hp_timing_t __t1, __t2;					      \
+-	    HP_TIMING_NOW (__t1);					      \
+-	    HP_TIMING_NOW (__t2);					      \
+-	    if (__t2 - __t1 < GLRO(dl_hp_timing_overhead))		      \
+-	      GLRO(dl_hp_timing_overhead) = __t2 - __t1;		      \
+-	  }								      \
+-	while (--__cnt > 0);						      \
+-      }									      \
+-  } while (0)
+-
+-/* It's simple arithmetic in 64-bit.  */
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-/* We need to insure that this add is atomic in threaded environments.  We use
+-   __arch_atomic_exchange_and_add_64 from atomic.h to get thread safety.  */
+-#define HP_TIMING_ACCUM(Sum, Diff) \
+-  do {									      \
+-    hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);		      \
+-    __arch_atomic_exchange_and_add_64 (&(Sum), __diff);	                      \
+-  } while (0)
+-
+-/* No threads, no extra work.  */
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-/* Print the time value.  */
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0);		      \
+-    size_t __len = (Len);						      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " ticks", MIN (__len, sizeof (" ticks")));  \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile	2015-06-20 23:38:08.082098958 -0400
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/Makefile	2015-06-20 21:22:16.306457831 -0400
+@@ -37,11 +37,6 @@
+ 
+ CFLAGS-libc-start.c += -fno-asynchronous-unwind-tables
+ 
+-ifeq ($(subdir),csu)
+-sysdep_routines += hp-timing
+-elide-routines.os += hp-timing
+-endif
+-
+ ifeq ($(subdir),elf)
+ # help gcc inline asm code from dl-machine.h
+ +cflags += -finline-limit=2000
+diff -urN glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.c glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.c
+--- glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,23 +0,0 @@
+-/* Support for high precision, low overhead timing functions.  sparcv9 version.
+-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by David S. Miller <davem@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 <hp-timing.h>
+-
+-/* We have to define the variable for the overhead.  */
+-hp_timing_t _dl_hp_timing_overhead;
+diff -urN glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.h glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/hp-timing.h	2015-06-20 21:43:48.754203254 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  sparcv9 version.
+-   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++   Copyright (C) 2001-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by David S. Miller <davem@redhat.com>, 2001.
+ 
+@@ -20,67 +20,17 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-
+ #define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
+ #define HP_TIMING_INLINE	(1)
+ 
+ typedef unsigned long long int hp_timing_t;
+ 
+-#define HP_TIMING_ZERO(Var)	(Var) = (0)
+-
+ #define HP_TIMING_NOW(Var) \
+       __asm__ __volatile__ ("rd %%tick, %L0\n\t" \
+ 			    "srlx %L0, 32, %H0" \
+ 			    : "=r" (Var))
+ 
+-#define HP_TIMING_DIFF_INIT() \
+-  do {									      \
+-    int __cnt = 5;							      \
+-    GLRO(dl_hp_timing_overhead) = ~0ull;				      \
+-    do									      \
+-      {									      \
+-	hp_timing_t __t1, __t2;						      \
+-	HP_TIMING_NOW (__t1);						      \
+-	HP_TIMING_NOW (__t2);						      \
+-	if (__t2 - __t1 < GLRO(dl_hp_timing_overhead))			      \
+-	  GLRO(dl_hp_timing_overhead) = __t2 - __t1;			      \
+-      }									      \
+-    while (--__cnt > 0);						      \
+-  } while (0)
+-
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-#define HP_TIMING_ACCUM(Sum, Diff)				\
+-do {								\
+-  hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);	\
+-  __asm__ __volatile__("srl	%L0, 0, %%g1\n\t"		\
+-		       "sllx	%H0, 32, %%g6\n\t"		\
+-		       "or	%%g1, %%g6, %%g1\n\t"		\
+-		       "1: ldx	[%1], %%g5\n\t"			\
+-		       "add	%%g5, %%g1, %%g6\n\t"		\
+-		       "casx	[%1], %%g5,  %%g6\n\t"		\
+-		       "cmp	%%g5, %%g6\n\t"			\
+-		       "bne,pn	%%xcc, 1b\n\t"			\
+-		       " nop"					\
+-		       : /* no outputs */			\
+-		       : "r" (__diff), "r" (&(Sum))		\
+-		       : "memory", "g1", "g5", "g6");		\
+-} while(0)
+-
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0);		      \
+-    int __len = (Len);							      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles")));  \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/Makefile glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/Makefile
+--- glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc32/sparcv9/Makefile	2015-06-20 21:22:16.307457801 -0400
+@@ -1,10 +1,5 @@
+ sysdep-CFLAGS += -mcpu=ultrasparc -Wa,-Av9a
+ 
+-ifeq ($(subdir),csu)
+-sysdep_routines += hp-timing
+-elide-routines.os += hp-timing
+-endif
+-
+ ifeq ($(have-as-vis3),yes)
+ ASFLAGS-.o += -Wa,-Av9d
+ ASFLAGS-.os += -Wa,-Av9d
+diff -urN glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.c glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.c
+--- glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,23 +0,0 @@
+-/* Support for high precision, low overhead timing functions.  sparc64 version.
+-   Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by David S. Miller <davem@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 <hp-timing.h>
+-
+-/* We have to define the variable for the overhead.  */
+-hp_timing_t _dl_hp_timing_overhead;
+diff -urN glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.h glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc64/hp-timing.h	2015-06-20 21:48:51.809000490 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  sparc64 version.
+-   Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++   Copyright (C) 2001-2015 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by David S. Miller <davem@redhat.com>, 2001.
+ 
+@@ -20,62 +20,14 @@
+ #ifndef _HP_TIMING_H
+ #define _HP_TIMING_H	1
+ 
+-#include <string.h>
+-#include <sys/param.h>
+-#include <_itoa.h>
+-
+ #define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
+ #define HP_TIMING_INLINE	(1)
+ 
+ typedef unsigned long int hp_timing_t;
+ 
+-#define HP_TIMING_ZERO(Var)	(Var) = (0)
+-
+ #define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rd %%tick, %0" : "=r" (Var))
+ 
+-#define HP_TIMING_DIFF_INIT() \
+-  do {									      \
+-    int __cnt = 5;							      \
+-    GLRO(dl_hp_timing_overhead) = ~0ull;				      \
+-    do									      \
+-      {									      \
+-	hp_timing_t __t1, __t2;						      \
+-	HP_TIMING_NOW (__t1);						      \
+-	HP_TIMING_NOW (__t2);						      \
+-	if (__t2 - __t1 < GLRO(dl_hp_timing_overhead))			      \
+-	  GLRO(dl_hp_timing_overhead) = __t2 - __t1;			      \
+-      }									      \
+-    while (--__cnt > 0);						      \
+-  } while (0)
+-
+-#define HP_TIMING_DIFF(Diff, Start, End)	(Diff) = ((End) - (Start))
+-
+-#define HP_TIMING_ACCUM(Sum, Diff)				\
+-do {								\
+-  hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);	\
+-  hp_timing_t tmp1, tmp2;					\
+-  __asm__ __volatile__("1: ldx	[%3], %0\n\t"			\
+-		       "add	%0, %2, %1\n\t"			\
+-		       "casx	[%3], %0,  %1\n\t"		\
+-		       "cmp	%0, %1\n\t"			\
+-		       "bne,pn	%%xcc, 1b\n\t"			\
+-		       " nop"					\
+-		       : "=&r" (tmp1), "=&r" (tmp2)		\
+-		       : "r" (__diff), "r" (&(Sum))		\
+-		       : "memory", "g1", "g5", "g6");		\
+-} while(0)
+-
+-#define HP_TIMING_ACCUM_NT(Sum, Diff)	(Sum) += (Diff)
+-
+-#define HP_TIMING_PRINT(Buf, Len, Val) \
+-  do {									      \
+-    char __buf[20];							      \
+-    char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0);		      \
+-    int __len = (Len);							      \
+-    char *__dest = (Buf);						      \
+-    while (__len-- > 0 && __cp < __buf + sizeof (__buf))		      \
+-      *__dest++ = *__cp++;						      \
+-    memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles")));  \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif	/* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/sparc/sparc64/Makefile glibc-2.17-c758a686/sysdeps/sparc/sparc64/Makefile
+--- glibc-2.17-c758a686/sysdeps/sparc/sparc64/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/sparc/sparc64/Makefile	2015-06-20 21:22:16.307457801 -0400
+@@ -1,8 +1,3 @@
+-ifeq ($(subdir),csu)
+-sysdep_routines += hp-timing
+-elide-routines.os += hp-timing
+-endif
+-
+ ifeq ($(subdir),string)
+ sysdep_routines += align-cpy
+ endif
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.c glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.c
+--- glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.c	1969-12-31 19:00:00.000000000 -0500
+@@ -1,2 +0,0 @@
+-/* We can use the i686 implementation without changes.  */
+-#include <sysdeps/i386/i686/hp-timing.c>
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.h glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.h
+--- glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/hp-timing.h	2015-06-20 21:43:09.403398207 -0400
+@@ -1,5 +1,5 @@
+ /* High precision, low overhead timing functions.  x86-64 version.
+-   Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
++   Copyright (C) 2002-2015 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
+@@ -17,24 +17,24 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #ifndef _HP_TIMING_H
++#define _HP_TIMING_H	1
+ 
+-/* We can use some of the i686 implementation without changes.  */
+-# include <sysdeps/i386/i686/hp-timing.h>
++/* We always assume having the timestamp register.  */
++#define HP_TIMING_AVAIL		(1)
++#define HP_SMALL_TIMING_AVAIL	(1)
++
++/* We indeed have inlined functions.  */
++#define HP_TIMING_INLINE	(1)
++
++/* We use 64bit values for the times.  */
++typedef unsigned long long int hp_timing_t;
+ 
+ /* The "=A" constraint used in 32-bit mode does not work in 64-bit mode.  */
+-# undef HP_TIMING_NOW
+-# define HP_TIMING_NOW(Var) \
++#define HP_TIMING_NOW(Var) \
+   ({ unsigned int _hi, _lo; \
+      asm volatile ("rdtsc" : "=a" (_lo), "=d" (_hi)); \
+      (Var) = ((unsigned long long int) _hi << 32) | _lo; })
+ 
+-/* The funny business for 32-bit mode is not required here.  */
+-# undef HP_TIMING_ACCUM
+-# define HP_TIMING_ACCUM(Sum, Diff)					      \
+-  do {									      \
+-    hp_timing_t __diff = (Diff) - GLRO(dl_hp_timing_overhead);		      \
+-    __asm__ __volatile__ ("lock; addq %1, %0"				      \
+-			  : "=m" (Sum) : "r" (__diff), "m" (Sum));	      \
+-  } while (0)
++#include <hp-timing-common.h>
+ 
+ #endif /* hp-timing.h */
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/Makefile glibc-2.17-c758a686/sysdeps/x86_64/Makefile
+--- glibc-2.17-c758a686/sysdeps/x86_64/Makefile	2015-06-20 23:38:08.530085553 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/Makefile	2015-06-20 21:22:16.307457801 -0400
+@@ -2,8 +2,6 @@
+ long-double-fcts = yes
+ 
+ ifeq ($(subdir),csu)
+-sysdep_routines += hp-timing
+-elide-routines.os += hp-timing
+ gen-as-const-headers += link-defines.sym
+ endif
+ 
+diff -urN glibc-2.17-c758a686/test-skeleton.c glibc-2.17-c758a686/test-skeleton.c
+--- glibc-2.17-c758a686/test-skeleton.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/test-skeleton.c	2015-06-20 21:22:16.307457801 -0400
+@@ -18,8 +18,10 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <errno.h>
++#include <fcntl.h>
+ #include <getopt.h>
+ #include <malloc.h>
++#include <paths.h>
+ #include <search.h>
+ #include <signal.h>
+ #include <stdio.h>
+@@ -194,6 +196,32 @@
+   exit (1);
+ }
+ 
++/* Set fortification error handler.  Used when tests want to verify that bad
++   code is caught by the library.  */
++static void
++__attribute__ ((unused))
++set_fortify_handler (void (*handler) (int sig))
++{
++  struct sigaction sa;
++
++  sa.sa_handler = handler;
++  sa.sa_flags = 0;
++  sigemptyset (&sa.sa_mask);
++
++  sigaction (SIGABRT, &sa, NULL);
++
++  /* Avoid all the buffer overflow messages on stderr.  */
++  int fd = open (_PATH_DEVNULL, O_WRONLY);
++  if (fd == -1)
++    close (STDERR_FILENO);
++  else
++    {
++      dup2 (fd, STDERR_FILENO);
++      close (fd);
++    }
++  setenv ("LIBC_FATAL_STDERR_", "1", 1);
++}
++
+ /* We provide the entry point here.  */
+ int
+ main (int argc, char *argv[])
diff --git a/SOURCES/glibc-rh1085290.patch b/SOURCES/glibc-rh1085290.patch
new file mode 100644
index 0000000..37f3c24
--- /dev/null
+++ b/SOURCES/glibc-rh1085290.patch
@@ -0,0 +1,60 @@
+commit dd3022d75e6fb8957843d6d84257a5d8457822d5
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Mar 27 19:49:51 2014 +0530
+
+    Return NULL for wildcard values in getnetgrent from nscd (BZ #16759)
+    
+    getnetgrent is supposed to return NULL for values that are wildcards
+    in the (host, user, domain) triplet.  This works correctly with nscd
+    disabled, but with it enabled, it returns a blank ("") instead of a
+    NULL.  This is easily seen with the output of `getent netgroup foonet`
+    for a netgroup foonet defined as follows in /etc/netgroup:
+    
+        foonet (,foo,)
+    
+    The output with nscd disabled is:
+    
+        foonet ( ,foo,)
+    
+    while with nscd enabled, it is:
+    
+        foonet (,foo,)
+    
+    The extra space with nscd disabled is due to the fact that `getent
+    netgroup` adds it if the return value from getnetgrent is NULL for
+    either host or user.
+
+diff --git glibc-2.17-c758a686/inet/getnetgrent_r.c glibc-2.17-c758a686/inet/getnetgrent_r.c
+index 62cdfda..f6d064d 100644
+--- glibc-2.17-c758a686/inet/getnetgrent_r.c
++++ glibc-2.17-c758a686/inet/getnetgrent_r.c
+@@ -235,6 +235,14 @@ endnetgrent (void)
+   __libc_lock_unlock (lock);
+ }
+ 
++static const char *
++get_nonempty_val (const char *in)
++{
++  if (*in == '\0')
++    return NULL;
++  return in;
++}
++
+ #ifdef USE_NSCD
+ static enum nss_status
+ nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
+@@ -243,11 +251,11 @@ nscd_getnetgrent (struct __netgrent *datap, char *buffer, size_t buflen,
+     return NSS_STATUS_UNAVAIL;
+ 
+   datap->type = triple_val;
+-  datap->val.triple.host = datap->cursor;
++  datap->val.triple.host = get_nonempty_val (datap->cursor);
+   datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1;
+-  datap->val.triple.user = datap->cursor;
++  datap->val.triple.user = get_nonempty_val (datap->cursor);
+   datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1;
+-  datap->val.triple.domain = datap->cursor;
++  datap->val.triple.domain = get_nonempty_val (datap->cursor);
+   datap->cursor = (char *) __rawmemchr (datap->cursor, '\0') + 1;
+ 
+   return NSS_STATUS_SUCCESS;
diff --git a/SOURCES/glibc-rh1085313.patch b/SOURCES/glibc-rh1085313.patch
new file mode 100644
index 0000000..648130e
--- /dev/null
+++ b/SOURCES/glibc-rh1085313.patch
@@ -0,0 +1,34 @@
+commit 58b930ae216bfa98cd60212b954b07b9963d6d04
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Sep 10 21:51:50 2014 +0530
+
+    Return failure in getnetgrent only when all netgroups have been searched (#17363)
+    
+    The netgroups lookup code fails when one of the groups in the search
+    tree is empty.  In such a case it only returns the leaves of the tree
+    after the blank netgroup.  This is because the line parser returns a
+    NOTFOUND status when the netgroup exists but is empty.  The
+    __getnetgrent_internal implementation needs to be fixed to try
+    remaining groups if the current group is entry.  This patch implements
+    this fix.  Tested on x86_64.
+    
+    	[BZ #17363]
+    	* inet/getnetgrent_r.c (__internal_getnetgrent_r): Try next
+    	group if the current group is empty.
+
+diff --git glibc-2.17-c758a686/inet/getnetgrent_r.c glibc-2.17-c758a686/inet/getnetgrent_r.c
+index f6d064d..e101537 100644
+--- glibc-2.17-c758a686/inet/getnetgrent_r.c
++++ glibc-2.17-c758a686/inet/getnetgrent_r.c
+@@ -297,7 +297,10 @@ __internal_getnetgrent_r (char **hostp, char **userp, char **domainp,
+     {
+       status = DL_CALL_FCT (*fct, (datap, buffer, buflen, &errno));
+ 
+-      if (status == NSS_STATUS_RETURN)
++      if (status == NSS_STATUS_RETURN
++	  /* The service returned a NOTFOUND, but there are more groups that we
++	     need to resolve before we give up.  */
++	  || (status == NSS_STATUS_NOTFOUND && datap->needed_groups != NULL))
+ 	{
+ 	  /* This was the last one for this group.  Look at next group
+ 	     if available.  */
diff --git a/SOURCES/glibc-rh1098042.patch b/SOURCES/glibc-rh1098042.patch
new file mode 100644
index 0000000..efda3ac
--- /dev/null
+++ b/SOURCES/glibc-rh1098042.patch
@@ -0,0 +1,28 @@
+commit cf26a0cb6a0bbaca46a01ddad6662e5e5159a32a
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu May 15 12:33:11 2014 +0530
+
+    Return EAI_AGAIN for AF_UNSPEC when herrno is TRY_AGAIN (BZ #16849)
+    
+    getaddrinfo correctly returns EAI_AGAIN for AF_INET and AF_INET6
+    queries.  For AF_UNSPEC however, an older change
+    (a682a1bf553b1efe4dbb03207fece5b719cec482) broke the check and due to
+    that the returned error was EAI_NONAME.
+    
+    This patch fixes the check so that a non-authoritative not-found is
+    returned as EAI_AGAIN to the user instead of EAI_NONAME.
+
+diff --git glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
+index 6258330..8f392b9 100644
+--- glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
++++ glibc-2.17-c758a686/sysdeps/posix/getaddrinfo.c
+@@ -867,8 +867,7 @@ gaih_inet (const char *name, const struct gaih_service *service,
+ 		      if (status != NSS_STATUS_TRYAGAIN
+ 			  || rc != ERANGE || herrno != NETDB_INTERNAL)
+ 			{
+-			  if (status == NSS_STATUS_TRYAGAIN
+-			      && herrno == TRY_AGAIN)
++			  if (herrno == TRY_AGAIN)
+ 			    no_data = EAI_AGAIN;
+ 			  else
+ 			    no_data = herrno == NO_DATA;
diff --git a/SOURCES/glibc-rh1098047.patch b/SOURCES/glibc-rh1098047.patch
new file mode 100644
index 0000000..b69deb5
--- /dev/null
+++ b/SOURCES/glibc-rh1098047.patch
@@ -0,0 +1,247 @@
+commit 16b293a7a6f65d8ff348a603d19e8fd4372fa3a9
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Apr 30 11:48:43 2014 +0530
+
+    Do not fail if one of the two responses to AF_UNSPEC fails (BZ #14308)
+    
+    [Fixes BZ #14308, #12994, #13651]
+    
+    AF_UNSPEC results in sending two queries in parallel, one for the A
+    record and the other for the AAAA record.  If one of these is a
+    referral, then the query fails, which is wrong.  It should return at
+    least the one successful response.
+    
+    The fix has two parts.  The first part makes the referral fall back to
+    the SERVFAIL path, which results in using the successful response.
+    There is a bug in that path however, due to which the second part is
+    necessary.  The bug here is that if the first response is a failure
+    and the second succeeds, __libc_res_nsearch does not detect that and
+    assumes a failure.  The case where the first response is a success and
+    the second fails, works correctly.
+    
+    This condition is produced by buggy routers, so here's a crude
+    interposable library that can simulate such a condition.  The library
+    overrides the recvfrom syscall and modifies the header of the packet
+    received to reproduce this scenario.  It has two key variables:
+    mod_packet and first_error.
+    
+    The mod_packet variable when set to 0, results in odd packets being
+    modified to be a referral.  When set to 1, even packets are modified
+    to be a referral.
+    
+    The first_error causes the first response to be a failure so that a
+    domain-appended search is performed to test the second part of the
+    __libc_nsearch fix.
+    
+    The driver for this fix is a simple getaddrinfo program that does an
+    AF_UNSPEC query.  I have omitted this since it should be easy to
+    implement.
+    
+    I have tested this on x86_64.
+    
+    The interceptor library source:
+    
+    /* Override recvfrom and modify the header of the first DNS response to make it
+       a referral and reproduce bz #845218.  We have to resort to this ugly hack
+       because we cannot make bind return the buggy response of a referral for the
+       AAAA record and an authoritative response for the A record.  */
+     #define _GNU_SOURCE
+     #include <sys/types.h>
+     #include <sys/socket.h>
+     #include <netinet/in.h>
+     #include <arpa/inet.h>
+     #include <stdio.h>
+     #include <stdbool.h>
+     #include <endian.h>
+     #include <dlfcn.h>
+     #include <stdlib.h>
+    
+    /* Lifted from resolv/arpa/nameser_compat.h.  */
+    typedef struct {
+        unsigned        id :16;         /*%< query identification number */
+     #if BYTE_ORDER == BIG_ENDIAN
+        /* fields in third byte */
+        unsigned        qr: 1;          /*%< response flag */
+        unsigned        opcode: 4;      /*%< purpose of message */
+        unsigned        aa: 1;          /*%< authoritive answer */
+        unsigned        tc: 1;          /*%< truncated message */
+        unsigned        rd: 1;          /*%< recursion desired */
+        /* fields
+         * in
+         * fourth
+         * byte
+         * */
+        unsigned        ra: 1;          /*%< recursion available */
+        unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+        unsigned        ad: 1;          /*%< authentic data from named */
+        unsigned        cd: 1;          /*%< checking disabled by resolver */
+        unsigned        rcode :4;       /*%< response code */
+     #endif
+     #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN
+        /* fields
+         * in
+         * third
+         * byte
+         * */
+        unsigned        rd :1;          /*%< recursion desired */
+        unsigned        tc :1;          /*%< truncated message */
+        unsigned        aa :1;          /*%< authoritive answer */
+        unsigned        opcode :4;      /*%< purpose of message */
+        unsigned        qr :1;          /*%< response flag */
+        /* fields
+         * in
+         * fourth
+         * byte
+         * */
+        unsigned        rcode :4;       /*%< response code */
+        unsigned        cd: 1;          /*%< checking disabled by resolver */
+        unsigned        ad: 1;          /*%< authentic data from named */
+        unsigned        unused :1;      /*%< unused bits (MBZ as of 4.9.3a3) */
+        unsigned        ra :1;          /*%< recursion available */
+     #endif
+        /* remaining
+         * bytes
+         * */
+        unsigned        qdcount :16;    /*%< number of question entries */
+        unsigned        ancount :16;    /*%< number of answer entries */
+        unsigned        nscount :16;    /*%< number of authority entries */
+        unsigned        arcount :16;    /*%< number of resource entries */
+    } HEADER;
+    
+    static int done = 0;
+    
+    /* Packets to modify.  0 for the odd packets and 1 for even packets.  */
+    static const int mod_packet = 0;
+    
+    /* Set to true if the first request should result in an error, resulting in a
+       search query.  */
+    static bool first_error = true;
+    
+    static ssize_t (*real_recvfrom) (int sockfd, void *buf, size_t len, int flags,
+    			  struct sockaddr *src_addr, socklen_t *addrlen);
+    
+    void
+    __attribute__ ((constructor))
+    init (void)
+    {
+      real_recvfrom = dlsym (RTLD_NEXT, "recvfrom");
+    
+      if (real_recvfrom == NULL)
+        {
+          printf ("Failed to get reference to recvfrom: %s\n", dlerror ());
+          printf ("Cannot simulate test\n");
+          abort ();
+        }
+    }
+    
+    /* Modify the second packet that we receive to set the header in a manner as to
+       reproduce BZ #845218.  */
+    static void
+    mod_buf (HEADER *h, int port)
+    {
+      if (done % 2 == mod_packet || (first_error && done == 1))
+        {
+          printf ("(Modifying header)");
+    
+          if (first_error && done == 1)
+    	h->rcode = 3;
+          else
+    	h->rcode = 0;	/* NOERROR == 0.  */
+          h->ancount = 0;
+          h->aa = 0;
+          h->ra = 0;
+          h->arcount = 0;
+        }
+      done++;
+    }
+    
+    ssize_t
+    recvfrom (int sockfd, void *buf, size_t len, int flags,
+    	  struct sockaddr *src_addr, socklen_t *addrlen)
+    {
+      ssize_t ret = real_recvfrom (sockfd, buf, len, flags, src_addr, addrlen);
+      int port = htons (((struct sockaddr_in *) src_addr)->sin_port);
+      struct in_addr addr = ((struct sockaddr_in *) src_addr)->sin_addr;
+      const char *host = inet_ntoa (addr);
+      printf ("\n*** From %s:%d: ", host, port);
+    
+      mod_buf (buf, port);
+    
+      printf ("returned %zd\n", ret);
+      return ret;
+    }
+
+ ChangeLog          | 11 +++++++++++
+ NEWS               | 14 +++++++-------
+ resolv/res_query.c |  7 +++++--
+ resolv/res_send.c  |  2 +-
+ 4 files changed, 24 insertions(+), 10 deletions(-)
+
+commit e35c53e397e7abbd41fedacdedcfa5af7b5c2c52
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue Jul 8 16:40:24 2014 +0530
+
+    Check value at resplen2 if it is not NULL
+    
+    There was a typo in the previous patch due to which resplen2 was
+    checked for non-zero instead of the value at resplen2.  Fix that and
+    improve the condition by checking resplen2 for non-NULL (instead of
+    answerp2) and also adding the check in a third place.
+
+ ChangeLog          | 3 +++
+ resolv/res_query.c | 9 +++++----
+ 2 files changed, 8 insertions(+), 4 deletions(-)
+
+diff -pruN glibc-2.17-c758a686/resolv/res_query.c glibc-2.17-c758a686/resolv/res_query.c
+--- glibc-2.17-c758a686/resolv/res_query.c	2012-12-25 08:32:13.000000000 +0530
++++ glibc-2.17-c758a686/resolv/res_query.c	2014-09-05 14:28:06.439191017 +0530
+@@ -378,7 +378,9 @@ __libc_res_nsearch(res_state statp,
+ 		ret = __libc_res_nquerydomain(statp, name, NULL, class, type,
+ 					      answer, anslen, answerp,
+ 					      answerp2, nanswerp2, resplen2);
+-		if (ret > 0 || trailing_dot)
++		if (ret > 0 || trailing_dot
++		    /* If the second response is valid then we use that.  */
++		    || (ret == 0 && resplen2 != NULL && *resplen2 > 0))
+ 			return (ret);
+ 		saved_herrno = h_errno;
+ 		tried_as_is++;
+@@ -418,7 +420,8 @@ __libc_res_nsearch(res_state statp,
+ 						      answer, anslen, answerp,
+ 						      answerp2, nanswerp2,
+ 						      resplen2);
+-			if (ret > 0)
++			if (ret > 0 || (ret == 0 && resplen2 != NULL
++					&& *resplen2 > 0))
+ 				return (ret);
+ 
+ 			if (answerp && *answerp != answer) {
+@@ -487,7 +490,8 @@ __libc_res_nsearch(res_state statp,
+ 		ret = __libc_res_nquerydomain(statp, name, NULL, class, type,
+ 					      answer, anslen, answerp,
+ 					      answerp2, nanswerp2, resplen2);
+-		if (ret > 0)
++		if (ret > 0 || (ret == 0 && resplen2 != NULL
++				&& *resplen2 > 0))
+ 			return (ret);
+ 	}
+ 
+diff -pruN glibc-2.17-c758a686/resolv/res_send.c glibc-2.17-c758a686/resolv/res_send.c
+--- glibc-2.17-c758a686/resolv/res_send.c	2014-09-05 14:28:30.039337246 +0530
++++ glibc-2.17-c758a686/resolv/res_send.c	2014-09-05 14:28:06.439191017 +0530
+@@ -1343,6 +1343,7 @@ send_dg(res_state statp,
+ 				(*thisresplenp > *thisanssizp)
+ 				? *thisanssizp : *thisresplenp);
+ 
++		next_ns:
+ 			if (recvresp1 || (buf2 != NULL && recvresp2)) {
+ 			  *resplen2 = 0;
+ 			  return resplen;
+@@ -1360,7 +1361,6 @@ send_dg(res_state statp,
+ 			    goto wait;
+ 			  }
+ 
+-		next_ns:
+ 			__res_iclose(statp, false);
+ 			/* don't retry if called from dig */
+ 			if (!statp->pfcode)
diff --git a/SOURCES/glibc-rh1103856.patch b/SOURCES/glibc-rh1103856.patch
new file mode 100644
index 0000000..d7c7676
--- /dev/null
+++ b/SOURCES/glibc-rh1103856.patch
@@ -0,0 +1,28 @@
+commit 4d653a59ffeae0f46f76a40230e2cfa9587b7e7e
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Fri May 30 22:43:52 2014 +0530
+
+    Add mmap usage in malloc_info output
+    
+    The current malloc_info xml output only has information about
+    allocations on the heap.  Display information about number of mappings
+    and total mmapped size to this to complete the picture.
+
+diff -pruN glibc-2.17-c758a686/malloc/malloc.c glibc-2.17-c758a686/malloc/malloc.c
+--- glibc-2.17-c758a686/malloc/malloc.c	2014-06-02 07:35:22.573256155 +0530
++++ glibc-2.17-c758a686/malloc/malloc.c	2014-06-02 07:34:58.856257177 +0530
+@@ -6553,12 +6553,14 @@ malloc_info (int options, FILE *fp)
+   fprintf (fp,
+ 	   "<total type=\"fast\" count=\"%zu\" size=\"%zu\"/>\n"
+ 	   "<total type=\"rest\" count=\"%zu\" size=\"%zu\"/>\n"
++	   "<total type=\"mmap\" count=\"%d\" size=\"%zu\"/>\n"
+ 	   "<system type=\"current\" size=\"%zu\"/>\n"
+ 	   "<system type=\"max\" size=\"%zu\"/>\n"
+ 	   "<aspace type=\"total\" size=\"%zu\"/>\n"
+ 	   "<aspace type=\"mprotect\" size=\"%zu\"/>\n"
+ 	   "</malloc>\n",
+ 	   total_nfastblocks, total_fastavail, total_nblocks, total_avail,
++	   mp_.n_mmaps, mp_.mmapped_mem,
+ 	   total_system, total_max_system,
+ 	   total_aspace, total_aspace_mprotect);
+ 
diff --git a/SOURCES/glibc-rh1103874.patch b/SOURCES/glibc-rh1103874.patch
new file mode 100644
index 0000000..4dd79df
--- /dev/null
+++ b/SOURCES/glibc-rh1103874.patch
@@ -0,0 +1,152 @@
+diff -pruN glibc-2.17-c758a686/nptl/sysdeps/pthread/unwind-forcedunwind.c glibc-2.17-c758a686/nptl/sysdeps/pthread/unwind-forcedunwind.c
+--- glibc-2.17-c758a686/nptl/sysdeps/pthread/unwind-forcedunwind.c	2010-05-04 16:57:23.000000000 +0530
++++ glibc-2.17-c758a686/nptl/sysdeps/pthread/unwind-forcedunwind.c	2014-06-02 23:00:02.901013275 +0530
+@@ -45,8 +45,10 @@ pthread_cancel_init (void)
+ 
+   if (__builtin_expect (libgcc_s_handle != NULL, 1))
+     {
+-      /* Force gcc to reload all values.  */
+-      asm volatile ("" ::: "memory");
++      /* Order reads so as to prevent speculation of loads
++	 of libgcc_s_{resume,personality,forcedunwind,getcfa}
++	 to points prior to the write barrier.  */
++      atomic_read_barrier ();
+       return;
+     }
+ 
+@@ -72,9 +74,14 @@ pthread_cancel_init (void)
+   libgcc_s_forcedunwind = forcedunwind;
+   PTR_MANGLE (getcfa);
+   libgcc_s_getcfa = getcfa;
+-  /* Make sure libgcc_s_handle is written last.  Otherwise,
+-     pthread_cancel_init might return early even when the pointer the
+-     caller is interested in is not initialized yet.  */
++  /* At the point at which any thread writes the handle
++     to libgcc_s_handle, the initialization is complete.
++     The writing of libgcc_s_handle is atomic. All other
++     threads reading libgcc_s_handle do so atomically. Any
++     thread that does not execute this function must issue
++     a read barrier to ensure that all of the above has
++     actually completed and that the values of the
++     function pointers are correct.   */
+   atomic_write_barrier ();
+   libgcc_s_handle = handle;
+ }
+@@ -91,13 +98,19 @@ __unwind_freeres (void)
+     }
+ }
+ 
+-void
+-_Unwind_Resume (struct _Unwind_Exception *exc)
++static __always_inline void
++_maybe_pthread_cancel_init (void)
+ {
+   if (__builtin_expect (libgcc_s_handle == NULL, 0))
+     pthread_cancel_init ();
+   else
+     atomic_read_barrier ();
++}
++
++void
++_Unwind_Resume (struct _Unwind_Exception *exc)
++{
++  _maybe_pthread_cancel_init ();
+ 
+   void (*resume) (struct _Unwind_Exception *exc) = libgcc_s_resume;
+   PTR_DEMANGLE (resume);
+@@ -108,10 +123,7 @@ __gcc_personality_v0 (int version, _Unwi
+ 		      struct _Unwind_Exception *ue_header,
+ 		      struct _Unwind_Context *context)
+ {
+-  if (__builtin_expect (libgcc_s_handle == NULL, 0))
+-    pthread_cancel_init ();
+-  else
+-    atomic_read_barrier ();
++  _maybe_pthread_cancel_init ();
+ 
+   _Unwind_Reason_Code (*personality)
+     (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+@@ -122,10 +136,7 @@ _Unwind_Reason_Code
+ _Unwind_ForcedUnwind (struct _Unwind_Exception *exc, _Unwind_Stop_Fn stop,
+ 		      void *stop_argument)
+ {
+-  if (__builtin_expect (libgcc_s_handle == NULL, 0))
+-    pthread_cancel_init ();
+-  else
+-    atomic_read_barrier ();
++  _maybe_pthread_cancel_init ();
+ 
+   _Unwind_Reason_Code (*forcedunwind)
+     (struct _Unwind_Exception *, _Unwind_Stop_Fn, void *)
+@@ -135,10 +148,7 @@ _Unwind_ForcedUnwind (struct _Unwind_Exc
+ _Unwind_Word
+ _Unwind_GetCFA (struct _Unwind_Context *context)
+ {
+-  if (__builtin_expect (libgcc_s_handle == NULL, 0))
+-    pthread_cancel_init ();
+-  else
+-    atomic_read_barrier ();
++  _maybe_pthread_cancel_init ();
+ 
+   _Unwind_Word (*getcfa) (struct _Unwind_Context *) = libgcc_s_getcfa;
+   PTR_DEMANGLE (getcfa);
+diff -pruN glibc-2.17-c758a686/sysdeps/gnu/unwind-resume.c glibc-2.17-c758a686/sysdeps/gnu/unwind-resume.c
+--- glibc-2.17-c758a686/sysdeps/gnu/unwind-resume.c	2010-05-04 16:57:23.000000000 +0530
++++ glibc-2.17-c758a686/sysdeps/gnu/unwind-resume.c	2014-06-02 23:02:26.812007078 +0530
+@@ -20,8 +20,11 @@
+ #include <dlfcn.h>
+ #include <stdio.h>
+ #include <unwind.h>
++#include <pthreadP.h>
++#include <sysdep.h>
+ #include <gnu/lib-names.h>
+ 
++static void *libgcc_s_handle;
+ static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+   (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+@@ -42,13 +45,32 @@ init (void)
+ 
+   libgcc_s_resume = resume;
+   libgcc_s_personality = personality;
++  atomic_write_barrier ();
++  /* At the point at which any thread writes the handle
++     to libgcc_s_handle, the initialization is complete.
++     The writing of libgcc_s_handle is atomic. All other
++     threads reading libgcc_s_handle do so atomically. Any
++     thread that does not execute this function must issue
++     a read barrier to ensure that all of the above has
++     actually completed and that the values of the
++     function pointers are correct.   */
++  libgcc_s_handle = handle;
+ }
+ 
++static __always_inline void
++_maybe_init (void)
++{
++  if (__builtin_expect (libgcc_s_handle == NULL, 0))
++    init ();
++  else
++    atomic_read_barrier ();
++}
++
++
+ void
+ _Unwind_Resume (struct _Unwind_Exception *exc)
+ {
+-  if (__builtin_expect (libgcc_s_resume == NULL, 0))
+-    init ();
++  _maybe_init ();
+   libgcc_s_resume (exc);
+ }
+ 
+@@ -58,8 +80,7 @@ __gcc_personality_v0 (int version, _Unwi
+                       struct _Unwind_Exception *ue_header,
+                       struct _Unwind_Context *context)
+ {
+-  if (__builtin_expect (libgcc_s_personality == NULL, 0))
+-    init ();
++  _maybe_init ();
+   return libgcc_s_personality (version, actions, exception_class,
+ 			       ue_header, context);
+ }
diff --git a/SOURCES/glibc-rh1120490-int128.patch b/SOURCES/glibc-rh1120490-int128.patch
new file mode 100644
index 0000000..2c539a2
--- /dev/null
+++ b/SOURCES/glibc-rh1120490-int128.patch
@@ -0,0 +1,60 @@
+Upstream patches to allow older compilers to use link.h:
+
+commit 30477995dc8a680283b4d6e02039bca09de83cf9
+Author: Marko Myllynen <myllynen@redhat.com>
+Date:   Fri May 30 10:50:21 2014 -0700
+
+    Replace __int128 with __int128_t
+    
+        * sysdeps/x86_64/link-defines.sym (BND_SIZE): Replace __int128
+        with __int128_t.
+
+commit 48332d822090e41253692053a00dfe224d3ebec0
+Author: H.J. Lu <hjl.tools@gmail.com>
+Date:   Fri Apr 25 09:33:41 2014 -0700
+
+    Replace __int128 with __int128_t in bits/link.h
+    
+    __int128 was added in GCC 4.6 and __int128_t was added before x86-64
+    was supported.  This patch replaces __int128 with __int128_t so that
+    the installed bits/link.h can be used with older GCC.
+    
+        * sysdeps/x86/bits/link.h (La_x86_64_regs): Replace __int128
+        with __int128_t.
+        (La_x86_64_retval): Likewise.
+
+diff -urN glibc-2.17-c758a686/sysdeps/x86/bits/link.h glibc-2.17-c758a686/sysdeps/x86/bits/link.h
+--- glibc-2.17-c758a686/sysdeps/x86/bits/link.h	2014-11-05 13:39:09.888988366 -0500
++++ glibc-2.17-c758a686/sysdeps/x86/bits/link.h	2014-11-05 13:39:52.800863646 -0500
+@@ -94,7 +94,7 @@
+   La_x86_64_xmm lr_xmm[8];
+   La_x86_64_vector lr_vector[8];
+ #ifndef __ILP32__
+-  __int128 lr_bnd[4];
++  __int128_t lr_bnd[4];
+ #endif
+ } La_x86_64_regs;
+ 
+@@ -110,8 +110,8 @@
+   La_x86_64_vector lrv_vector0;
+   La_x86_64_vector lrv_vector1;
+ #ifndef __ILP32__
+-  __int128 lrv_bnd0;
+-  __int128 lrv_bnd1;
++  __int128_t lrv_bnd0;
++  __int128_t lrv_bnd1;
+ #endif
+ } La_x86_64_retval;
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym
+--- glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym	2014-11-05 13:39:09.889988363 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym	2014-11-05 13:39:52.800863646 -0500
+@@ -6,7 +6,7 @@
+ XMM_SIZE		sizeof (La_x86_64_xmm)
+ YMM_SIZE		sizeof (La_x86_64_ymm)
+ ZMM_SIZE		sizeof (La_x86_64_zmm)
+-BND_SIZE		sizeof (__int128)
++BND_SIZE		sizeof (__int128_t)
+ 
+ LR_SIZE			sizeof (struct La_x86_64_regs)
+ LR_RDX_OFFSET		offsetof (struct La_x86_64_regs, lr_rdx)
diff --git a/SOURCES/glibc-rh1120490.patch b/SOURCES/glibc-rh1120490.patch
new file mode 100644
index 0000000..c2ab741
--- /dev/null
+++ b/SOURCES/glibc-rh1120490.patch
@@ -0,0 +1,190 @@
+commit 602f80ec8b966cfad3b61914cbe14ee606cedf6e
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue Sep 16 22:16:01 2014 +0530
+
+    Make __extern_always_inline usable on clang++ again
+    
+    The fix for BZ #17266 (884ddc5081278f488ef8cd49951f41cfdbb480ce)
+    removed changes that had gone into cdefs.h to make
+    __extern_always_inline usable with clang++.  This patch adds back
+    support for clang to detect if GNU inlining semantics are available,
+    this time without breaking the gcc use case.  The check put here is
+    based on the earlier patch and assertion[1] that checking if
+    __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE__ is defined is sufficient
+    to determine that clang++ suports GNU inlining semantics.
+    
+    Tested with a simple program that builds with __extern_always_inline
+    with the patch and fails compilation without it.
+    
+     #include <stdio.h>
+     #include <sys/cdefs.h>
+    
+    extern void foo_alias (void) __asm ("foo");
+    
+    __extern_always_inline void
+    foo (void)
+    {
+      puts ("hi oh world!");
+      return foo_alias ();
+    }
+    
+    void
+    foo_alias (void)
+    {
+      puts ("hell oh world");
+    }
+    
+    int
+    main ()
+    {
+      foo ();
+    }
+    
+    [1] https://sourceware.org/ml/libc-alpha/2012-12/msg00306.html
+    
+    	[BZ #17266]
+    	* misc/sys/cdefs.h: Define __extern_always_inline for clang
+    	4.2 and newer.
+
+commit 884ddc5081278f488ef8cd49951f41cfdbb480ce
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue Sep 16 14:08:48 2014 +0530
+
+    Revert to defining __extern_inline only for gcc-4.3+ (BZ #17266)
+    
+    The check for only __GNUC_STDC_INLINE__ and __GNUC_GNU_INLINE__ may
+    not be sufficient since those flags were added during initial support
+    for C99 inlining semantics.  There is also a problem with always
+    defining __extern_inline and __extern_always_inline, since it enables
+    inline wrapper functions even when GNU inlining semantics are not
+    guaranteed.  This, along with the possibility of such wrappers using
+    redirection (btowc for example) could result in compiler generating an
+    infinitely recusrive call to the function.
+    
+    In fact it was such a recursion that led to this code being written
+    the way it was; see:
+    
+    https://bugzilla.redhat.com/show_bug.cgi?id=186410
+    
+    The initial change was to fix bugs 14530 and 13741, but they can be
+    resolved by checking if __fortify_function and/or
+    __extern_always_inline are defined, as it has been done in this patch.
+    In addition, I have audited uses of __extern_always_inline to make
+    sure that none of the uses result in compilation errors.
+    
+    There is however a regression in this patch for llvm, since it reverts
+    the llvm expectation that __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE__
+    definition imply proper extern inline semantics.
+    
+    2014-09-16  Siddhesh Poyarekar  <siddhesh@redhat.com>
+    	    Jakub Jelinek  <jakub@redhat.com>
+    
+    	[BZ #17266]
+    	* libio/stdio.h: Check definition of __fortify_function
+    	instead of __extern_always_inline to include bits/stdio2.h.
+    	* math/bits/math-finite.h [__USE_XOPEN || __USE_ISOC99]: Also
+    	check if __extern_always_inline is defined.
+    	[__USE_MISC || __USE_XOPEN]: Likewise.
+    	[__USE_ISOC99] Likewise.
+    	* misc/sys/cdefs.h (__fortify_function): Define only if
+    	__extern_always_inline is defined.
+    	[!__cplusplus || __GNUC_PREREQ (4,3)]: Revert to defining
+    	__extern_always_inline and __extern_inline only for g++-4.3
+    	and newer or a compatible gcc.
+
+diff --git glibc-2.17-c758a686/libio/stdio.h glibc-2.17-c758a686/libio/stdio.h
+index d8c0bdb..1f4f837 100644
+--- glibc-2.17-c758a686/libio/stdio.h
++++ glibc-2.17-c758a686/libio/stdio.h
+@@ -932,7 +932,7 @@ extern void funlockfile (FILE *__stream) __THROW;
+ #ifdef __USE_EXTERN_INLINES
+ # include <bits/stdio.h>
+ #endif
+-#if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline
++#if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
+ # include <bits/stdio2.h>
+ #endif
+ #ifdef __LDBL_COMPAT
+diff --git glibc-2.17-c758a686/math/bits/math-finite.h glibc-2.17-c758a686/math/bits/math-finite.h
+index aa755de..0656645 100644
+--- glibc-2.17-c758a686/math/bits/math-finite.h
++++ glibc-2.17-c758a686/math/bits/math-finite.h
+@@ -251,7 +251,8 @@ extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
+ # endif
+ #endif
+ 
+-#if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99
++#if ((defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99) \
++     && defined __extern_always_inline)
+ /* lgamma.  */
+ __extern_always_inline double __NTH (lgamma (double __d))
+ {
+@@ -284,7 +285,8 @@ __extern_always_inline long double __NTH (lgammal (long double __d))
+ # endif
+ #endif
+ 
+-#if defined __USE_MISC || defined __USE_XOPEN
++#if ((defined __USE_MISC || defined __USE_XOPEN) \
++     && defined __extern_always_inline)
+ /* gamma.  */
+ __extern_always_inline double __NTH (gamma (double __d))
+ {
+@@ -422,7 +424,7 @@ extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrtl_finite);
+ # endif
+ #endif
+ 
+-#ifdef __USE_ISOC99
++#if defined __USE_ISOC99 && defined __extern_always_inline
+ /* tgamma.  */
+ extern double __gamma_r_finite (double, int *);
+ __extern_always_inline double __NTH (tgamma (double __d))
+diff --git glibc-2.17-c758a686/misc/sys/cdefs.h glibc-2.17-c758a686/misc/sys/cdefs.h
+index 04db956..01e81ba 100644
+--- glibc-2.17-c758a686/misc/sys/cdefs.h
++++ glibc-2.17-c758a686/misc/sys/cdefs.h
+@@ -131,7 +131,6 @@
+ /* Fortify support.  */
+ #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1)
+ #define __bos0(ptr) __builtin_object_size (ptr, 0)
+-#define __fortify_function __extern_always_inline __attribute_artificial__
+ 
+ #if __GNUC_PREREQ (4,3)
+ # define __warndecl(name, msg) \
+@@ -319,8 +318,17 @@
+ #endif
+ 
+ /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+-   inline semantics, unless -fgnu89-inline is used.  */
+-#if (!defined __cplusplus || __GNUC_PREREQ (4,3)) && defined __GNUC__
++   inline semantics, unless -fgnu89-inline is used.  Using __GNUC_STDC_INLINE__
++   or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions
++   older than 4.3 may define these macros and still not guarantee GNU inlining
++   semantics.
++
++   clang++ identifies itself as gcc-4.2, but has support for GNU inlining
++   semantics, that can be checked fot by using the __GNUC_STDC_INLINE_ and
++   __GNUC_GNU_INLINE__ macro definitions.  */
++#if (!defined __cplusplus || __GNUC_PREREQ (4,3) \
++     || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \
++			       || defined __GNUC_GNU_INLINE__)))
+ # if defined __GNUC_STDC_INLINE__ || defined __cplusplus
+ #  define __extern_inline extern __inline __attribute__ ((__gnu_inline__))
+ #  define __extern_always_inline \
+@@ -329,13 +337,10 @@
+ #  define __extern_inline extern __inline
+ #  define __extern_always_inline extern __always_inline
+ # endif
+-#elif defined __GNUC__ /* C++ and GCC <4.3.  */
+-# define __extern_inline extern __inline
+-# define __extern_always_inline \
+-  extern __always_inline
+-#else /* Not GCC.  */
+-# define __extern_inline  /* Ignore */
+-# define __extern_always_inline /* Ignore */
++#endif
++
++#ifdef __extern_always_inline
++# define __fortify_function __extern_always_inline __attribute_artificial__
+ #endif
+ 
+ /* GCC 4.3 and above allow passing all anonymous arguments of an
diff --git a/SOURCES/glibc-rh1125306.patch b/SOURCES/glibc-rh1125306.patch
new file mode 100644
index 0000000..6b19f7f
--- /dev/null
+++ b/SOURCES/glibc-rh1125306.patch
@@ -0,0 +1,20 @@
+commit a11892631d92f594c690d0d50a642b0d1aba58b8
+Author: Ondřej Bílka <neleai@seznam.cz>
+Date:   Wed May 7 14:08:57 2014 +0200
+
+    Fix typo in nscd/selinux.c
+
+diff --git glibc-2.17-c758a686/nscd/selinux.c glibc-2.17-c758a686/nscd/selinux.c
+index 9a8a5a8..eaed6dd 100644
+--- glibc-2.17-c758a686/nscd/selinux.c
++++ glibc-2.17-c758a686/nscd/selinux.c
+@@ -372,7 +372,7 @@ nscd_request_avc_has_perm (int fd, request_type req)
+   /* Get the security class for nscd.  If this fails we will likely be
+      unable to do anything unless avc_deny_unknown is 0.  */
+-  if ((sc_nscd = string_to_security_class ("nscd")) == 0
+-      && avc_deny_unknown == 1)
++  sc_nscd = string_to_security_class ("nscd");
++  if (sc_nscd == 0 && avc_deny_unknown == 1)
+     dbg_log (_("Error getting security class for nscd."));
+ 
+   /* Convert permission to AVC bits.  */
diff --git a/SOURCES/glibc-rh1132518-mpx.patch b/SOURCES/glibc-rh1132518-mpx.patch
new file mode 100644
index 0000000..43997d0
--- /dev/null
+++ b/SOURCES/glibc-rh1132518-mpx.patch
@@ -0,0 +1,386 @@
+# MPX Support for glibc:
+#
+# Note: Renamed configure.ac changes to configure.in changes.
+#
+# commit ea8ba7cd14d0f479bae8365ae5c4ef177bdd0aad
+# Author: Igor Zamyatin <igor.zamyatin@intel.com>
+# Date:   Wed Apr 16 14:43:16 2014 -0700
+# 
+#     Save/restore bound registers for _dl_runtime_profile
+# 
+#     This patch saves and restores bound registers in x86-64 PLT for
+#     ld.so profile and LD_AUDIT:
+# 
+#         * sysdeps/x86_64/bits/link.h (La_x86_64_regs): Add lr_bnd.
+#         (La_x86_64_retval): Add lrv_bnd0 and lrv_bnd1.
+#         * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Save
+#         Intel MPX bound registers before _dl_profile_fixup.
+#         * sysdeps/x86_64/dl-trampoline.h: Restore Intel MPX bound
+#         registers after _dl_profile_fixup.  Save and restore bound
+#         registers bnd0/bnd1 when calling _dl_call_pltexit.
+#         * sysdeps/x86_64/link-defines.sym (BND_SIZE): New.
+#         (LR_BND_OFFSET): Likewise.
+#         (LRV_BND0_OFFSET): Likewise.
+#         (LRV_BND1_OFFSET): Likewise.
+# 
+# commit a4c75cfd56e536c2b18556e8a482d88dffa0fffc
+# Author: Igor Zamyatin <igor.zamyatin@intel.com>
+# Date:   Tue Apr 1 10:16:04 2014 -0700
+# 
+#     Save/restore bound registers in _dl_runtime_resolve
+# 
+#     This patch saves and restores bound registers in symbol lookup for x86-64:
+# 
+#     1. Branches without BND prefix clear bound registers.
+#     2. x86-64 pass bounds in bound registers as specified in MPX psABI
+#     extension on hjl/mpx/master branch at
+# 
+#     https://github.com/hjl-tools/x86-64-psABI
+#     https://groups.google.com/forum/#!topic/x86-64-abi/KFsB0XTgWYc
+# 
+#     Binutils has been updated to create an alternate PLT to add BND prefix
+#     when branching to ld.so.
+# 
+#         * config.h.in (HAVE_MPX_SUPPORT): New #undef.
+#         * sysdeps/x86_64/configure.ac: Set HAVE_MPX_SUPPORT.
+#         * sysdeps/x86_64/configure: Regenerated.
+#         * sysdeps/x86_64/dl-trampoline.S (REGISTER_SAVE_AREA): New
+#         macro.
+#         (REGISTER_SAVE_RAX): Likewise.
+#         (REGISTER_SAVE_RCX): Likewise.
+#         (REGISTER_SAVE_RDX): Likewise.
+#         (REGISTER_SAVE_RSI): Likewise.
+#         (REGISTER_SAVE_RDI): Likewise.
+#         (REGISTER_SAVE_R8): Likewise.
+#         (REGISTER_SAVE_R9): Likewise.
+#         (REGISTER_SAVE_BND0): Likewise.
+#         (REGISTER_SAVE_BND1): Likewise.
+#         (REGISTER_SAVE_BND2): Likewise.
+#         (_dl_runtime_resolve): Use them.  Save and restore Intel MPX
+#         bound registers when calling _dl_fixup.
+# 
+diff -urN glibc-2.17-c758a686/config.h.in glibc-2.17-c758a686/config.h.in
+--- glibc-2.17-c758a686/config.h.in	2014-09-10 23:26:03.467045808 -0400
++++ glibc-2.17-c758a686/config.h.in	2014-09-10 23:27:41.532851928 -0400
+@@ -107,6 +107,9 @@
+ /* Define if assembler supports AVX512.  */
+ #undef  HAVE_AVX512_ASM_SUPPORT
+ 
++/* Define if assembler supports Intel MPX.  */
++#undef  HAVE_MPX_SUPPORT
++
+ /* Define if gcc supports FMA4.  */
+ #undef	HAVE_FMA4_SUPPORT
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/x86/bits/link.h glibc-2.17-c758a686/sysdeps/x86/bits/link.h
+--- glibc-2.17-c758a686/sysdeps/x86/bits/link.h	2014-09-10 23:26:03.467045808 -0400
++++ glibc-2.17-c758a686/sysdeps/x86/bits/link.h	2014-09-10 23:27:41.533851926 -0400
+@@ -93,6 +93,9 @@
+   uint64_t lr_rsp;
+   La_x86_64_xmm lr_xmm[8];
+   La_x86_64_vector lr_vector[8];
++#ifndef __ILP32__
++  __int128 lr_bnd[4];
++#endif
+ } La_x86_64_regs;
+ 
+ /* Return values for calls from PLT on x86-64.  */
+@@ -106,6 +109,10 @@
+   long double lrv_st1;
+   La_x86_64_vector lrv_vector0;
+   La_x86_64_vector lrv_vector1;
++#ifndef __ILP32__
++  __int128 lrv_bnd0;
++  __int128 lrv_bnd1;
++#endif
+ } La_x86_64_retval;
+ 
+ #define La_x32_regs La_x86_64_regs
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/configure glibc-2.17-c758a686/sysdeps/x86_64/configure
+--- glibc-2.17-c758a686/sysdeps/x86_64/configure	2014-09-10 23:26:03.573045598 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/configure	2014-09-10 23:27:41.532851928 -0400
+@@ -212,6 +212,33 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_novzeroupper" >&5
+ $as_echo "$libc_cv_cc_novzeroupper" >&6; }
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Intel MPX support" >&5
++$as_echo_n "checking for Intel MPX support... " >&6; }
++if ${libc_cv_asm_mpx+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat > conftest.s <<\EOF
++        bndmov %bnd0,(%rsp)
++EOF
++if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 1>&5'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }; then
++  libc_cv_asm_mpx=yes
++else
++  libc_cv_asm_mpx=no
++fi
++rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_mpx" >&5
++$as_echo "$libc_cv_asm_mpx" >&6; }
++if test $libc_cv_asm_mpx == yes; then
++  $as_echo "#define HAVE_MPX_SUPPORT 1" >>confdefs.h
++
++fi
++
+ $as_echo "#define PI_STATIC_AND_HIDDEN 1" >>confdefs.h
+ 
+ # work around problem with autoconf and empty lines at the end of files
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/configure.in glibc-2.17-c758a686/sysdeps/x86_64/configure.in
+--- glibc-2.17-c758a686/sysdeps/x86_64/configure.in	2014-09-10 23:26:03.468045806 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/configure.in	2014-09-10 23:27:41.532851928 -0400
+@@ -70,6 +70,21 @@
+ 		   [libc_cv_cc_novzeroupper=no])
+ ])
+ 
++dnl Check whether asm supports Intel MPX
++AC_CACHE_CHECK(for Intel MPX support, libc_cv_asm_mpx, [dnl
++cat > conftest.s <<\EOF
++        bndmov %bnd0,(%rsp)
++EOF
++if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
++  libc_cv_asm_mpx=yes
++else
++  libc_cv_asm_mpx=no
++fi
++rm -f conftest*])
++if test $libc_cv_asm_mpx == yes; then
++  AC_DEFINE(HAVE_MPX_SUPPORT)
++fi
++
+ dnl It is always possible to access static and hidden symbols in an
+ dnl position independent way.
+ AC_DEFINE(PI_STATIC_AND_HIDDEN)
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h
+--- glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h	2014-09-10 23:26:03.468045806 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h	2014-09-10 23:27:41.535851922 -0400
+@@ -63,6 +63,20 @@
+ 	movaps (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp), %xmm6
+ 	movaps (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp), %xmm7
+ 
++#ifndef __ILP32__
++# ifdef HAVE_MPX_SUPPORT
++	bndmov 		    (LR_BND_OFFSET)(%rsp), %bnd0  # Restore bound
++	bndmov (LR_BND_OFFSET +   BND_SIZE)(%rsp), %bnd1  # registers.
++	bndmov (LR_BND_OFFSET + BND_SIZE*2)(%rsp), %bnd2
++	bndmov (LR_BND_OFFSET + BND_SIZE*3)(%rsp), %bnd3
++# else
++	.byte 0x66,0x0f,0x1a,0x84,0x24;.long (LR_BND_OFFSET)
++	.byte 0x66,0x0f,0x1a,0x8c,0x24;.long (LR_BND_OFFSET + BND_SIZE)
++	.byte 0x66,0x0f,0x1a,0x94,0x24;.long (LR_BND_OFFSET + BND_SIZE*2)
++	.byte 0x66,0x0f,0x1a,0x9c,0x24;.long (LR_BND_OFFSET + BND_SIZE*3)
++# endif
++#endif
++
+ #ifdef RESTORE_AVX
+ 	/* Check if any xmm0-xmm7 registers are changed by audit
+ 	   module.  */
+@@ -222,6 +236,16 @@
+ 	vmovdqa %xmm1, (LRV_SIZE + XMM_SIZE)(%rcx)
+ #endif
+ 
++#ifndef __ILP32__
++# ifdef HAVE_MPX_SUPPORT
++	bndmov %bnd0, LRV_BND0_OFFSET(%rcx)  # Preserve returned bounds.
++	bndmov %bnd1, LRV_BND1_OFFSET(%rcx)
++# else
++	.byte  0x66,0x0f,0x1b,0x81;.long (LRV_BND0_OFFSET)
++	.byte  0x66,0x0f,0x1b,0x89;.long (LRV_BND1_OFFSET)
++# endif
++#endif
++
+ 	fstpt LRV_ST0_OFFSET(%rcx)
+ 	fstpt LRV_ST1_OFFSET(%rcx)
+ 
+@@ -254,6 +278,16 @@
+ 1:
+ #endif
+ 
++#ifndef __ILP32__
++# ifdef HAVE_MPX_SUPPORT
++	bndmov LRV_BND0_OFFSET(%rcx), %bnd0  # Restore bound registers.
++	bndmov LRV_BND1_OFFSET(%rcx), %bnd1
++# else
++	.byte  0x66,0x0f,0x1a,0x81;.long (LRV_BND0_OFFSET)
++	.byte  0x66,0x0f,0x1a,0x89;.long (LRV_BND1_OFFSET)
++# endif
++#endif
++
+ 	fldt LRV_ST1_OFFSET(%rsp)
+ 	fldt LRV_ST0_OFFSET(%rsp)
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S
+--- glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S	2014-09-10 23:26:03.468045806 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S	2014-09-10 23:27:41.534851924 -0400
+@@ -24,6 +24,30 @@
+ # error RTLD_SAVESPACE_SSE must be aligned to 32 bytes
+ #endif
+ 
++/* Area on stack to save and restore registers used for parameter
++   passing when calling _dl_fixup.  */
++#ifdef __ILP32__
++/* X32 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX.  */
++# define REGISTER_SAVE_AREA	(8 * 7)
++# define REGISTER_SAVE_RAX	0
++#else
++/* X86-64 saves RCX, RDX, RSI, RDI, R8 and R9 plus RAX as well as BND0,
++   BND1, BND2, BND3.  */
++# define REGISTER_SAVE_AREA	(8 * 7 + 16 * 4)
++/* Align bound register save area to 16 bytes.  */
++# define REGISTER_SAVE_BND0	0
++# define REGISTER_SAVE_BND1	(REGISTER_SAVE_BND0 + 16)
++# define REGISTER_SAVE_BND2	(REGISTER_SAVE_BND1 + 16)
++# define REGISTER_SAVE_BND3	(REGISTER_SAVE_BND2 + 16)
++# define REGISTER_SAVE_RAX	(REGISTER_SAVE_BND3 + 16)
++#endif
++#define REGISTER_SAVE_RCX	(REGISTER_SAVE_RAX + 8)
++#define REGISTER_SAVE_RDX	(REGISTER_SAVE_RCX + 8)
++#define REGISTER_SAVE_RSI	(REGISTER_SAVE_RDX + 8)
++#define REGISTER_SAVE_RDI	(REGISTER_SAVE_RSI + 8)
++#define REGISTER_SAVE_R8	(REGISTER_SAVE_RDI + 8)
++#define REGISTER_SAVE_R9	(REGISTER_SAVE_R8 + 8)
++
+ 	.text
+ 	.globl _dl_runtime_resolve
+ 	.type _dl_runtime_resolve, @function
+@@ -31,28 +55,63 @@
+ 	cfi_startproc
+ _dl_runtime_resolve:
+ 	cfi_adjust_cfa_offset(16) # Incorporate PLT
+-	subq $56,%rsp
+-	cfi_adjust_cfa_offset(56)
+-	movq %rax,(%rsp)	# Preserve registers otherwise clobbered.
+-	movq %rcx, 8(%rsp)
+-	movq %rdx, 16(%rsp)
+-	movq %rsi, 24(%rsp)
+-	movq %rdi, 32(%rsp)
+-	movq %r8, 40(%rsp)
+-	movq %r9, 48(%rsp)
+-	movq 64(%rsp), %rsi	# Copy args pushed by PLT in register.
+-	movq 56(%rsp), %rdi	# %rdi: link_map, %rsi: reloc_index
++	subq $REGISTER_SAVE_AREA,%rsp
++	cfi_adjust_cfa_offset(REGISTER_SAVE_AREA)
++	# Preserve registers otherwise clobbered.
++	movq %rax, REGISTER_SAVE_RAX(%rsp)
++	movq %rcx, REGISTER_SAVE_RCX(%rsp)
++	movq %rdx, REGISTER_SAVE_RDX(%rsp)
++	movq %rsi, REGISTER_SAVE_RSI(%rsp)
++	movq %rdi, REGISTER_SAVE_RDI(%rsp)
++	movq %r8, REGISTER_SAVE_R8(%rsp)
++	movq %r9, REGISTER_SAVE_R9(%rsp)
++#ifndef __ILP32__
++	# We also have to preserve bound registers.  These are nops if
++	# Intel MPX isn't available or disabled.
++# ifdef HAVE_MPX_SUPPORT
++	bndmov %bnd0, REGISTER_SAVE_BND0(%rsp)
++	bndmov %bnd1, REGISTER_SAVE_BND1(%rsp)
++	bndmov %bnd2, REGISTER_SAVE_BND2(%rsp)
++	bndmov %bnd3, REGISTER_SAVE_BND3(%rsp)
++# else
++	.byte 0x66,0x0f,0x1b,0x44,0x24,REGISTER_SAVE_BND0
++	.byte 0x66,0x0f,0x1b,0x4c,0x24,REGISTER_SAVE_BND1
++	.byte 0x66,0x0f,0x1b,0x54,0x24,REGISTER_SAVE_BND2
++	.byte 0x66,0x0f,0x1b,0x5c,0x24,REGISTER_SAVE_BND3
++# endif
++#endif
++	# Copy args pushed by PLT in register.
++	# %rdi: link_map, %rsi: reloc_index
++	movq (REGISTER_SAVE_AREA + 8)(%rsp), %rsi
++	movq REGISTER_SAVE_AREA(%rsp), %rdi
+ 	call _dl_fixup		# Call resolver.
+ 	movq %rax, %r11		# Save return value
+-	movq 48(%rsp), %r9	# Get register content back.
+-	movq 40(%rsp), %r8
+-	movq 32(%rsp), %rdi
+-	movq 24(%rsp), %rsi
+-	movq 16(%rsp), %rdx
+-	movq 8(%rsp), %rcx
+-	movq (%rsp), %rax
+-	addq $72, %rsp		# Adjust stack(PLT did 2 pushes)
+-	cfi_adjust_cfa_offset(-72)
++#ifndef __ILP32__
++	# Restore bound registers.  These are nops if Intel MPX isn't
++	# avaiable or disabled.
++# ifdef HAVE_MPX_SUPPORT
++	bndmov REGISTER_SAVE_BND3(%rsp), %bnd3
++	bndmov REGISTER_SAVE_BND2(%rsp), %bnd2
++	bndmov REGISTER_SAVE_BND1(%rsp), %bnd1
++	bndmov REGISTER_SAVE_BND0(%rsp), %bnd0
++# else
++	.byte 0x66,0x0f,0x1a,0x5c,0x24,REGISTER_SAVE_BND3
++	.byte 0x66,0x0f,0x1a,0x54,0x24,REGISTER_SAVE_BND2
++	.byte 0x66,0x0f,0x1a,0x4c,0x24,REGISTER_SAVE_BND1
++	.byte 0x66,0x0f,0x1a,0x44,0x24,REGISTER_SAVE_BND0
++# endif
++#endif
++	# Get register content back.
++	movq REGISTER_SAVE_R9(%rsp), %r9
++	movq REGISTER_SAVE_R8(%rsp), %r8
++	movq REGISTER_SAVE_RDI(%rsp), %rdi
++	movq REGISTER_SAVE_RSI(%rsp), %rsi
++	movq REGISTER_SAVE_RDX(%rsp), %rdx
++	movq REGISTER_SAVE_RCX(%rsp), %rcx
++	movq REGISTER_SAVE_RAX(%rsp), %rax
++	# Adjust stack(PLT did 2 pushes)
++	addq $(REGISTER_SAVE_AREA + 16), %rsp
++	cfi_adjust_cfa_offset(-(REGISTER_SAVE_AREA + 16))
+ 	jmp *%r11		# Jump to function address.
+ 	cfi_endproc
+ 	.size _dl_runtime_resolve, .-_dl_runtime_resolve
+@@ -130,6 +189,20 @@
+ 	movaps %xmm6, (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp)
+ 	movaps %xmm7, (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp)
+ 
++# ifndef __ILP32__
++#  ifdef HAVE_MPX_SUPPORT
++	bndmov %bnd0, 		   (LR_BND_OFFSET)(%rsp)  # Preserve bound
++	bndmov %bnd1, (LR_BND_OFFSET +   BND_SIZE)(%rsp)  # registers. Nops if
++	bndmov %bnd2, (LR_BND_OFFSET + BND_SIZE*2)(%rsp)  # MPX not available
++	bndmov %bnd3, (LR_BND_OFFSET + BND_SIZE*3)(%rsp)  # or disabled.
++#  else
++	.byte 0x66,0x0f,0x1b,0x84,0x24;.long (LR_BND_OFFSET)
++	.byte 0x66,0x0f,0x1b,0x8c,0x24;.long (LR_BND_OFFSET + BND_SIZE)
++	.byte 0x66,0x0f,0x1b,0x84,0x24;.long (LR_BND_OFFSET + BND_SIZE*2)
++	.byte 0x66,0x0f,0x1b,0x8c,0x24;.long (LR_BND_OFFSET + BND_SIZE*3)
++#  endif
++# endif
++
+ # if defined HAVE_AVX_SUPPORT || defined HAVE_AVX512_ASM_SUPPORT
+ 	.data
+ L(have_avx):
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym
+--- glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym	2014-09-10 23:26:03.468045806 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym	2014-09-10 23:27:41.535851922 -0400
+@@ -6,6 +6,7 @@
+ XMM_SIZE		sizeof (La_x86_64_xmm)
+ YMM_SIZE		sizeof (La_x86_64_ymm)
+ ZMM_SIZE		sizeof (La_x86_64_zmm)
++BND_SIZE		sizeof (__int128)
+ 
+ LR_SIZE			sizeof (struct La_x86_64_regs)
+ LR_RDX_OFFSET		offsetof (struct La_x86_64_regs, lr_rdx)
+@@ -18,6 +19,9 @@
+ LR_RSP_OFFSET		offsetof (struct La_x86_64_regs, lr_rsp)
+ LR_XMM_OFFSET		offsetof (struct La_x86_64_regs, lr_xmm)
+ LR_VECTOR_OFFSET	offsetof (struct La_x86_64_regs, lr_vector)
++#ifndef __ILP32__
++LR_BND_OFFSET		offsetof (struct La_x86_64_regs, lr_bnd)
++#endif
+ 
+ LRV_SIZE		sizeof (struct La_x86_64_retval)
+ LRV_RAX_OFFSET		offsetof (struct La_x86_64_retval, lrv_rax)
+@@ -28,3 +32,7 @@
+ LRV_ST1_OFFSET		offsetof (struct La_x86_64_retval, lrv_st1)
+ LRV_VECTOR0_OFFSET	offsetof (struct La_x86_64_retval, lrv_vector0)
+ LRV_VECTOR1_OFFSET	offsetof (struct La_x86_64_retval, lrv_vector1)
++#ifndef __ILP32__
++LRV_BND0_OFFSET		offsetof (struct La_x86_64_retval, lrv_bnd0)
++LRV_BND1_OFFSET		offsetof (struct La_x86_64_retval, lrv_bnd1)
++#endif
diff --git a/SOURCES/glibc-rh1133812-1.patch b/SOURCES/glibc-rh1133812-1.patch
new file mode 100644
index 0000000..963e6a4
--- /dev/null
+++ b/SOURCES/glibc-rh1133812-1.patch
@@ -0,0 +1,208 @@
+commit a1a6a401ab0a3c9f15fb7eaebbdcee24192254e8
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Aug 26 19:38:59 2014 +0200
+
+    __gconv_translit_find: Disable function [BZ #17187]
+    
+    This functionality has never worked correctly, and the implementation
+    contained a security vulnerability (CVE-2014-5119).
+
+2014-08-21  Florian Weimer  <fweimer@redhat.com>
+
+	[BZ #17187]
+	* iconv/gconv_trans.c (struct known_trans, search_tree, lock,
+	trans_compare, open_translit, __gconv_translit_find):
+	Remove module loading code.
+
+diff --git glibc-2.17-c758a686/iconv/gconv_trans.c glibc-2.17-c758a686/iconv/gconv_trans.c
+index 1e25854..d71c029 100644
+--- glibc-2.17-c758a686/iconv/gconv_trans.c
++++ glibc-2.17-c758a686/iconv/gconv_trans.c
+@@ -238,181 +238,11 @@ __gconv_transliterate (struct __gconv_step *step,
+   return __GCONV_ILLEGAL_INPUT;
+ }
+ 
+-
+-/* Structure to represent results of found (or not) transliteration
+-   modules.  */
+-struct known_trans
+-{
+-  /* This structure must remain the first member.  */
+-  struct trans_struct info;
+-
+-  char *fname;
+-  void *handle;
+-  int open_count;
+-};
+-
+-
+-/* Tree with results of previous calls to __gconv_translit_find.  */
+-static void *search_tree;
+-
+-/* We modify global data.   */
+-__libc_lock_define_initialized (static, lock);
+-
+-
+-/* Compare two transliteration entries.  */
+-static int
+-trans_compare (const void *p1, const void *p2)
+-{
+-  const struct known_trans *s1 = (const struct known_trans *) p1;
+-  const struct known_trans *s2 = (const struct known_trans *) p2;
+-
+-  return strcmp (s1->info.name, s2->info.name);
+-}
+-
+-
+-/* Open (maybe reopen) the module named in the struct.  Get the function
+-   and data structure pointers we need.  */
+-static int
+-open_translit (struct known_trans *trans)
+-{
+-  __gconv_trans_query_fct queryfct;
+-
+-  trans->handle = __libc_dlopen (trans->fname);
+-  if (trans->handle == NULL)
+-    /* Not available.  */
+-    return 1;
+-
+-  /* Find the required symbol.  */
+-  queryfct = __libc_dlsym (trans->handle, "gconv_trans_context");
+-  if (queryfct == NULL)
+-    {
+-      /* We cannot live with that.  */
+-    close_and_out:
+-      __libc_dlclose (trans->handle);
+-      trans->handle = NULL;
+-      return 1;
+-    }
+-
+-  /* Get the context.  */
+-  if (queryfct (trans->info.name, &trans->info.csnames, &trans->info.ncsnames)
+-      != 0)
+-    goto close_and_out;
+-
+-  /* Of course we also have to have the actual function.  */
+-  trans->info.trans_fct = __libc_dlsym (trans->handle, "gconv_trans");
+-  if (trans->info.trans_fct == NULL)
+-    goto close_and_out;
+-
+-  /* Now the optional functions.  */
+-  trans->info.trans_init_fct =
+-    __libc_dlsym (trans->handle, "gconv_trans_init");
+-  trans->info.trans_context_fct =
+-    __libc_dlsym (trans->handle, "gconv_trans_context");
+-  trans->info.trans_end_fct =
+-    __libc_dlsym (trans->handle, "gconv_trans_end");
+-
+-  trans->open_count = 1;
+-
+-  return 0;
+-}
+-
+-
+ int
+ internal_function
+ __gconv_translit_find (struct trans_struct *trans)
+ {
+-  struct known_trans **found;
+-  const struct path_elem *runp;
+-  int res = 1;
+-
+-  /* We have to have a name.  */
+-  assert (trans->name != NULL);
+-
+-  /* Acquire the lock.  */
+-  __libc_lock_lock (lock);
+-
+-  /* See whether we know this module already.  */
+-  found = __tfind (trans, &search_tree, trans_compare);
+-  if (found != NULL)
+-    {
+-      /* Is this module available?  */
+-      if ((*found)->handle != NULL)
+-	{
+-	  /* Maybe we have to reopen the file.  */
+-	  if ((*found)->handle != (void *) -1)
+-	    /* The object is not unloaded.  */
+-	    res = 0;
+-	  else if (open_translit (*found) == 0)
+-	    {
+-	      /* Copy the data.  */
+-	      *trans = (*found)->info;
+-	      (*found)->open_count++;
+-	      res = 0;
+-	    }
+-	}
+-    }
+-  else
+-    {
+-      size_t name_len = strlen (trans->name) + 1;
+-      int need_so = 0;
+-      struct known_trans *newp;
+-
+-      /* We have to continue looking for the module.  */
+-      if (__gconv_path_elem == NULL)
+-	__gconv_get_path ();
+-
+-      /* See whether we have to append .so.  */
+-      if (name_len <= 4 || memcmp (&trans->name[name_len - 4], ".so", 3) != 0)
+-	need_so = 1;
+-
+-      /* Create a new entry.  */
+-      newp = (struct known_trans *) malloc (sizeof (struct known_trans)
+-					    + (__gconv_max_path_elem_len
+-					       + name_len + 3)
+-					    + name_len);
+-      if (newp != NULL)
+-	{
+-	  char *cp;
+-
+-	  /* Clear the struct.  */
+-	  memset (newp, '\0', sizeof (struct known_trans));
+-
+-	  /* Store a copy of the module name.  */
+-	  newp->info.name = cp = (char *) (newp + 1);
+-	  cp = __mempcpy (cp, trans->name, name_len);
+-
+-	  newp->fname = cp;
+-
+-	  /* Search in all the directories.  */
+-	  for (runp = __gconv_path_elem; runp->name != NULL; ++runp)
+-	    {
+-	      cp = __mempcpy (__stpcpy ((char *) newp->fname, runp->name),
+-			      trans->name, name_len);
+-	      if (need_so)
+-		memcpy (cp, ".so", sizeof (".so"));
+-
+-	      if (open_translit (newp) == 0)
+-		{
+-		  /* We found a module.  */
+-		  res = 0;
+-		  break;
+-		}
+-	    }
+-
+-	  if (res)
+-	    newp->fname = NULL;
+-
+-	  /* In any case we'll add the entry to our search tree.  */
+-	  if (__tsearch (newp, &search_tree, trans_compare) == NULL)
+-	    {
+-	      /* Yickes, this should not happen.  Unload the object.  */
+-	      res = 1;
+-	      /* XXX unload here.  */
+-	    }
+-	}
+-    }
+-
+-  __libc_lock_unlock (lock);
+-
+-  return res;
++  /* This function always fails.  Transliteration module loading is
++     not implemented.  */
++  return 1;
+ }
+-- 
+1.9.3
+
diff --git a/SOURCES/glibc-rh1133812-2.patch b/SOURCES/glibc-rh1133812-2.patch
new file mode 100644
index 0000000..63e3557
--- /dev/null
+++ b/SOURCES/glibc-rh1133812-2.patch
@@ -0,0 +1,631 @@
+commit 585367266923156ac6fb789939a923641ba5aaf4
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed May 28 14:05:03 2014 +0200
+
+    manual: Update the locale documentation
+
+commit 4e8f95a0df7c2300b830ec12c0ae1e161bc8a8a3
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon May 12 15:24:12 2014 +0200
+
+    _nl_find_locale: Improve handling of crafted locale names [BZ #17137]
+    
+    Prevent directory traversal in locale-related environment variables
+    (CVE-2014-0475).
+
+commit d183645616b0533b3acee28f1a95570bffbdf50f
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed May 28 14:41:52 2014 +0200
+
+    setlocale: Use the heap for the copy of the locale argument
+    
+    This avoids alloca calls with potentially large arguments.
+
+diff -pruN glibc-2.17-c758a686/locale/findlocale.c glibc-2.17-c758a686/locale/findlocale.c
+--- glibc-2.17-c758a686/locale/findlocale.c	2013-08-11 04:22:55.000000000 +0530
++++ glibc-2.17-c758a686/locale/findlocale.c	2014-08-26 16:14:50.403253778 +0530
+@@ -17,6 +17,7 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <assert.h>
++#include <errno.h>
+ #include <locale.h>
+ #include <stdlib.h>
+ #include <string.h>
+@@ -57,6 +58,45 @@ struct loaded_l10nfile *_nl_locale_file_
+ 
+ const char _nl_default_locale_path[] attribute_hidden = LOCALEDIR;
+ 
++/* Checks if the name is actually present, that is, not NULL and not
++   empty.  */
++static inline int
++name_present (const char *name)
++{
++  return name != NULL && name[0] != '\0';
++}
++
++/* Checks that the locale name neither extremely long, nor contains a
++   ".." path component (to prevent directory traversal).  */
++static inline int
++valid_locale_name (const char *name)
++{
++  /* Not set.  */
++  size_t namelen = strlen (name);
++  /* Name too long.  The limit is arbitrary and prevents stack overflow
++     issues later.  */
++  if (__glibc_unlikely (namelen > 255))
++    return 0;
++  /* Directory traversal attempt.  */
++  static const char slashdot[4] = {'/', '.', '.', '/'};
++  if (__glibc_unlikely (memmem (name, namelen,
++				slashdot, sizeof (slashdot)) != NULL))
++    return 0;
++  if (namelen == 2 && __glibc_unlikely (name[0] == '.' && name [1] == '.'))
++    return 0;
++  if (namelen >= 3
++      && __glibc_unlikely (((name[0] == '.'
++			     && name[1] == '.'
++			     && name[2] == '/')
++			    || (name[namelen - 3] == '/'
++				&& name[namelen - 2] == '.'
++				&& name[namelen - 1] == '.'))))
++    return 0;
++  /* If there is a slash in the name, it must start with one.  */
++  if (__glibc_unlikely (memchr (name, '/', namelen) != NULL) && name[0] != '/')
++    return 0;
++  return 1;
++}
+ 
+ struct __locale_data *
+ internal_function
+@@ -65,7 +105,7 @@ _nl_find_locale (const char *locale_path
+ {
+   int mask;
+   /* Name of the locale for this category.  */
+-  char *loc_name;
++  char *loc_name = (char *) *name;
+   const char *language;
+   const char *modifier;
+   const char *territory;
+@@ -73,31 +113,39 @@ _nl_find_locale (const char *locale_path
+   const char *normalized_codeset;
+   struct loaded_l10nfile *locale_file;
+ 
+-  if ((*name)[0] == '\0')
++  if (loc_name[0] == '\0')
+     {
+       /* The user decides which locale to use by setting environment
+ 	 variables.  */
+-      *name = getenv ("LC_ALL");
+-      if (*name == NULL || (*name)[0] == '\0')
+-	*name = getenv (_nl_category_names.str
++      loc_name = getenv ("LC_ALL");
++      if (!name_present (loc_name))
++	loc_name = getenv (_nl_category_names.str
+ 			+ _nl_category_name_idxs[category]);
+-      if (*name == NULL || (*name)[0] == '\0')
+-	*name = getenv ("LANG");
++      if (!name_present (loc_name))
++	loc_name = getenv ("LANG");
++      if (!name_present (loc_name))
++	loc_name = (char *) _nl_C_name;
+     }
+ 
+-  if (*name == NULL || (*name)[0] == '\0'
+-      || (__builtin_expect (__libc_enable_secure, 0)
+-	  && strchr (*name, '/') != NULL))
+-    *name = (char *) _nl_C_name;
++  /* We used to fall back to the C locale if the name contains a slash
++     character '/', but we now check for directory traversal in
++     valid_locale_name, so this is no longer necessary.  */
+ 
+-  if (__builtin_expect (strcmp (*name, _nl_C_name), 1) == 0
+-      || __builtin_expect (strcmp (*name, _nl_POSIX_name), 1) == 0)
++  if (__builtin_expect (strcmp (loc_name, _nl_C_name), 1) == 0
++      || __builtin_expect (strcmp (loc_name, _nl_POSIX_name), 1) == 0)
+     {
+       /* We need not load anything.  The needed data is contained in
+ 	 the library itself.  */
+       *name = (char *) _nl_C_name;
+       return _nl_C[category];
+     }
++  else if (!valid_locale_name (loc_name))
++    {
++      __set_errno (EINVAL);
++      return NULL;
++    }
++
++  *name = loc_name;
+ 
+   /* We really have to load some data.  First we try the archive,
+      but only if there was no LOCPATH environment variable specified.  */
+diff -pruN glibc-2.17-c758a686/locale/setlocale.c glibc-2.17-c758a686/locale/setlocale.c
+--- glibc-2.17-c758a686/locale/setlocale.c	2013-08-11 04:22:55.000000000 +0530
++++ glibc-2.17-c758a686/locale/setlocale.c	2014-08-26 16:14:50.401253764 +0530
+@@ -272,6 +272,8 @@ setlocale (int category, const char *loc
+ 	 of entries of the form `CATEGORY=VALUE'.  */
+       const char *newnames[__LC_LAST];
+       struct __locale_data *newdata[__LC_LAST];
++      /* Copy of the locale argument, for in-place splitting.  */
++      char *locale_copy = NULL;
+ 
+       /* Set all name pointers to the argument name.  */
+       for (category = 0; category < __LC_LAST; ++category)
+@@ -281,7 +283,13 @@ setlocale (int category, const char *loc
+       if (__builtin_expect (strchr (locale, ';') != NULL, 0))
+ 	{
+ 	  /* This is a composite name.  Make a copy and split it up.  */
+-	  char *np = strdupa (locale);
++	  locale_copy = strdup (locale);
++	  if (__glibc_unlikely (locale_copy == NULL))
++	    {
++	      __libc_rwlock_unlock (__libc_setlocale_lock);
++	      return NULL;
++	    }
++	  char *np = locale_copy;
+ 	  char *cp;
+ 	  int cnt;
+ 
+@@ -299,6 +307,7 @@ setlocale (int category, const char *loc
+ 		{
+ 		error_return:
+ 		  __libc_rwlock_unlock (__libc_setlocale_lock);
++		  free (locale_copy);
+ 
+ 		  /* Bogus category name.  */
+ 		  ERROR_RETURN;
+@@ -391,8 +400,9 @@ setlocale (int category, const char *loc
+       /* Critical section left.  */
+       __libc_rwlock_unlock (__libc_setlocale_lock);
+ 
+-      /* Free the resources (the locale path variable).  */
++      /* Free the resources.  */
+       free (locale_path);
++      free (locale_copy);
+ 
+       return composite;
+     }
+diff -pruN glibc-2.17-c758a686/localedata/Makefile glibc-2.17-c758a686/localedata/Makefile
+--- glibc-2.17-c758a686/localedata/Makefile	2014-08-26 16:15:22.656474571 +0530
++++ glibc-2.17-c758a686/localedata/Makefile	2014-08-26 16:14:50.403253778 +0530
+@@ -77,7 +77,7 @@ locale_test_suite := tst_iswalnum tst_is
+ 
+ tests = $(locale_test_suite) tst-digits tst-setlocale bug-iconv-trans \
+ 	tst-leaks tst-mbswcs6 tst-xlocale1 tst-xlocale2 bug-usesetlocale \
+-	tst-strfmon1 tst-sscanf bug-setlocale1 tst-setlocale2
++	tst-strfmon1 tst-sscanf bug-setlocale1 tst-setlocale2 tst-setlocale3
+ ifeq (yes,$(build-shared))
+ ifneq (no,$(PERL))
+ tests: $(objpfx)mtrace-tst-leaks
+diff -pruN glibc-2.17-c758a686/localedata/tst-setlocale3.c glibc-2.17-c758a686/localedata/tst-setlocale3.c
+--- glibc-2.17-c758a686/localedata/tst-setlocale3.c	1970-01-01 05:30:00.000000000 +0530
++++ glibc-2.17-c758a686/localedata/tst-setlocale3.c	2014-08-26 16:14:50.403253778 +0530
+@@ -0,0 +1,203 @@
++/* Regression test for setlocale invalid environment variable handling.
++   Copyright (C) 2014 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>
++
++/* The result of setlocale may be overwritten by subsequent calls, so
++   this wrapper makes a copy.  */
++static char *
++setlocale_copy (int category, const char *locale)
++{
++  const char *result = setlocale (category, locale);
++  if (result == NULL)
++    return NULL;
++  return strdup (result);
++}
++
++static char *de_locale;
++
++static void
++setlocale_fail (const char *envstring)
++{
++  setenv ("LC_CTYPE", envstring, 1);
++  if (setlocale (LC_CTYPE, "") != NULL)
++    {
++      printf ("unexpected setlocale success for \"%s\" locale\n", envstring);
++      exit (1);
++    }
++  const char *newloc = setlocale (LC_CTYPE, NULL);
++  if (strcmp (newloc, de_locale) != 0)
++    {
++      printf ("failed setlocale call \"%s\" changed locale to \"%s\"\n",
++	      envstring, newloc);
++      exit (1);
++    }
++}
++
++static void
++setlocale_success (const char *envstring)
++{
++  setenv ("LC_CTYPE", envstring, 1);
++  char *newloc = setlocale_copy (LC_CTYPE, "");
++  if (newloc == NULL)
++    {
++      printf ("setlocale for \"%s\": %m\n", envstring);
++      exit (1);
++    }
++  if (strcmp (newloc, de_locale) == 0)
++    {
++      printf ("setlocale with LC_CTYPE=\"%s\" left locale at \"%s\"\n",
++	      envstring, de_locale);
++      exit (1);
++    }
++  if (setlocale (LC_CTYPE, de_locale) == NULL)
++    {
++      printf ("restoring locale \"%s\" with LC_CTYPE=\"%s\": %m\n",
++	      de_locale, envstring);
++      exit (1);
++    }
++  char *newloc2 = setlocale_copy (LC_CTYPE, newloc);
++  if (newloc2 == NULL)
++    {
++      printf ("restoring locale \"%s\" following \"%s\": %m\n",
++	      newloc, envstring);
++      exit (1);
++    }
++  if (strcmp (newloc, newloc2) != 0)
++    {
++      printf ("representation of locale \"%s\" changed from \"%s\" to \"%s\"",
++	      envstring, newloc, newloc2);
++      exit (1);
++    }
++  free (newloc);
++  free (newloc2);
++
++  if (setlocale (LC_CTYPE, de_locale) == NULL)
++    {
++      printf ("restoring locale \"%s\" with LC_CTYPE=\"%s\": %m\n",
++	      de_locale, envstring);
++      exit (1);
++    }
++}
++
++/* Checks that a known-good locale still works if LC_ALL contains a
++   value which should be ignored.  */
++static void
++setlocale_ignore (const char *to_ignore)
++{
++  const char *fr_locale = "fr_FR.UTF-8";
++  setenv ("LC_CTYPE", fr_locale, 1);
++  char *expected_locale = setlocale_copy (LC_CTYPE, "");
++  if (expected_locale == NULL)
++    {
++      printf ("setlocale with LC_CTYPE=\"%s\" failed: %m\n", fr_locale);
++      exit (1);
++    }
++  if (setlocale (LC_CTYPE, de_locale) == NULL)
++    {
++      printf ("failed to restore locale: %m\n");
++      exit (1);
++    }
++  unsetenv ("LC_CTYPE");
++
++  setenv ("LC_ALL", to_ignore, 1);
++  setenv ("LC_CTYPE", fr_locale, 1);
++  const char *actual_locale = setlocale (LC_CTYPE, "");
++  if (actual_locale == NULL)
++    {
++      printf ("setlocale with LC_ALL, LC_CTYPE=\"%s\" failed: %m\n",
++	      fr_locale);
++      exit (1);
++    }
++  if (strcmp (actual_locale, expected_locale) != 0)
++    {
++      printf ("setlocale under LC_ALL failed: got \"%s\", expected \"%s\"\n",
++	      actual_locale, expected_locale);
++      exit (1);
++    }
++  unsetenv ("LC_CTYPE");
++  setlocale_success (fr_locale);
++  unsetenv ("LC_ALL");
++  free (expected_locale);
++}
++
++static int
++do_test (void)
++{
++  /* The glibc test harness sets this environment variable
++     uncondionally.  */
++  unsetenv ("LC_ALL");
++
++  de_locale = setlocale_copy (LC_CTYPE, "de_DE.UTF-8");
++  if (de_locale == NULL)
++    {
++      printf ("setlocale (LC_CTYPE, \"de_DE.UTF-8\"): %m\n");
++      return 1;
++    }
++  setlocale_success ("C");
++  setlocale_success ("en_US.UTF-8");
++  setlocale_success ("/en_US.UTF-8");
++  setlocale_success ("//en_US.UTF-8");
++  setlocale_ignore ("");
++
++  setlocale_fail ("does-not-exist");
++  setlocale_fail ("/");
++  setlocale_fail ("/../localedata/en_US.UTF-8");
++  setlocale_fail ("en_US.UTF-8/");
++  setlocale_fail ("en_US.UTF-8/..");
++  setlocale_fail ("en_US.UTF-8/../en_US.UTF-8");
++  setlocale_fail ("../localedata/en_US.UTF-8");
++  {
++    size_t large_length = 1024;
++    char *large_name = malloc (large_length + 1);
++    if (large_name == NULL)
++      {
++	puts ("malloc failure");
++	return 1;
++      }
++    memset (large_name, '/', large_length);
++    const char *suffix = "en_US.UTF-8";
++    strcpy (large_name + large_length - strlen (suffix), suffix);
++    setlocale_fail (large_name);
++    free (large_name);
++  }
++  {
++    size_t huge_length = 64 * 1024 * 1024;
++    char *huge_name = malloc (huge_length + 1);
++    if (huge_name == NULL)
++      {
++	puts ("malloc failure");
++	return 1;
++      }
++    memset (huge_name, 'X', huge_length);
++    huge_name[huge_length] = '\0';
++    /* Construct a composite locale specification. */
++    const char *prefix = "LC_CTYPE=de_DE.UTF-8;LC_TIME=";
++    memcpy (huge_name, prefix, strlen (prefix));
++    setlocale_fail (huge_name);
++    free (huge_name);
++  }
++
++  return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff -pruN glibc-2.17-c758a686/manual/locale.texi glibc-2.17-c758a686/manual/locale.texi
+--- glibc-2.17-c758a686/manual/locale.texi	2013-08-11 04:22:55.000000000 +0530
++++ glibc-2.17-c758a686/manual/locale.texi	2014-08-26 16:14:50.404253785 +0530
+@@ -29,6 +29,7 @@ will follow the conventions preferred by
+ * Setting the Locale::          How a program specifies the locale
+                                  with library functions.
+ * Standard Locales::            Locale names available on all systems.
++* Locale Names::                Format of system-specific locale names.
+ * Locale Information::          How to access the information for the locale.
+ * Formatting Numbers::          A dedicated function to format numbers.
+ * Yes-or-No Questions::         Check a Response against the locale.
+@@ -99,14 +100,16 @@ locale named @samp{espana-castellano} to
+ most of Spain.
+ 
+ The set of locales supported depends on the operating system you are
+-using, and so do their names.  We can't make any promises about what
+-locales will exist, except for one standard locale called @samp{C} or
+-@samp{POSIX}.  Later we will describe how to construct locales.
+-@comment (@pxref{Building Locale Files}).
++using, and so do their names, except that the standard locale called
++@samp{C} or @samp{POSIX} always exist.  @xref{Locale Names}.
++
++In order to force the system to always use the default locale, the
++user can set the @code{LC_ALL} environment variable to @samp{C}.
+ 
+ @cindex combining locales
+-A user also has the option of specifying different locales for different
+-purposes---in effect, choosing a mixture of multiple locales.
++A user also has the option of specifying different locales for
++different purposes---in effect, choosing a mixture of multiple
++locales.  @xref{Locale Categories}.
+ 
+ For example, the user might specify the locale @samp{espana-castellano}
+ for most purposes, but specify the locale @samp{usa-english} for
+@@ -120,7 +123,7 @@ which locales apply.  However, the user
+ for a particular subset of those purposes.
+ 
+ @node Locale Categories, Setting the Locale, Choosing Locale, Locales
+-@section Categories of Activities that Locales Affect
++@section Locale Categories
+ @cindex categories for locales
+ @cindex locale categories
+ 
+@@ -128,7 +131,11 @@ The purposes that locales serve are grou
+ that a user or a program can choose the locale for each category
+ independently.  Here is a table of categories; each name is both an
+ environment variable that a user can set, and a macro name that you can
+-use as an argument to @code{setlocale}.
++use as the first argument to @code{setlocale}.
++
++The contents of the environment variable (or the string in the second
++argument to @code{setlocale}) has to be a valid locale name.
++@xref{Locale Names}.
+ 
+ @vtable @code
+ @comment locale.h
+@@ -172,7 +179,7 @@ for affirmative and negative responses.
+ @comment locale.h
+ @comment ISO
+ @item LC_ALL
+-This is not an environment variable; it is only a macro that you can use
++This is not a category; it is only a macro that you can use
+ with @code{setlocale} to set a single locale for all purposes.  Setting
+ this environment variable overwrites all selections by the other
+ @code{LC_*} variables or @code{LANG}.
+@@ -225,13 +232,7 @@ The symbols in this section are defined
+ @comment ISO
+ @deftypefun {char *} setlocale (int @var{category}, const char *@var{locale})
+ The function @code{setlocale} sets the current locale for category
+-@var{category} to @var{locale}.  A list of all the locales the system
+-provides can be created by running
+-
+-@pindex locale
+-@smallexample
+-  locale -a
+-@end smallexample
++@var{category} to @var{locale}.
+ 
+ If @var{category} is @code{LC_ALL}, this specifies the locale for all
+ purposes.  The other possible values of @var{category} specify an
+@@ -256,10 +257,9 @@ is passed in as @var{locale} parameter.
+ 
+ When you read the current locale for category @code{LC_ALL}, the value
+ encodes the entire combination of selected locales for all categories.
+-In this case, the value is not just a single locale name.  In fact, we
+-don't make any promises about what it looks like.  But if you specify
+-the same ``locale name'' with @code{LC_ALL} in a subsequent call to
+-@code{setlocale}, it restores the same combination of locale selections.
++If you specify the same ``locale name'' with @code{LC_ALL} in a
++subsequent call to @code{setlocale}, it restores the same combination
++of locale selections.
+ 
+ To be sure you can use the returned string encoding the currently selected
+ locale at a later time, you must make a copy of the string.  It is not
+@@ -275,20 +275,15 @@ for @var{category}.
+ If a nonempty string is given for @var{locale}, then the locale of that
+ name is used if possible.
+ 
++The effective locale name (either the second argument to
++@code{setlocale}, or if the argument is an empty string, the name
++obtained from the process environment) must be valid locale name.
++@xref{Locale Names}.
++
+ If you specify an invalid locale name, @code{setlocale} returns a null
+ pointer and leaves the current locale unchanged.
+ @end deftypefun
+ 
+-The path used for finding locale data can be set using the
+-@code{LOCPATH} environment variable. The default path for finding
+-locale data is system specific.  It is computed from the value given
+-as the prefix while configuring the C library.  This value normally is
+-@file{/usr} or @file{/}.  For the former the complete path is:
+-
+-@smallexample
+-/usr/lib/locale
+-@end smallexample
+-
+ Here is an example showing how you might use @code{setlocale} to
+ temporarily switch to a new locale.
+ 
+@@ -328,7 +323,7 @@ locale categories, and future versions o
+ portability, assume that any symbol beginning with @samp{LC_} might be
+ defined in @file{locale.h}.
+ 
+-@node Standard Locales, Locale Information, Setting the Locale, Locales
++@node Standard Locales, Locale Names, Setting the Locale, Locales
+ @section Standard Locales
+ 
+ The only locale names you can count on finding on all operating systems
+@@ -362,7 +357,94 @@ with the environment, rather than trying
+ locale explicitly by name.  Remember, different machines might have
+ different sets of locales installed.
+ 
+-@node Locale Information, Formatting Numbers, Standard Locales, Locales
++@node Locale Names, Locale Information, Standard Locales, Locales
++@section Locale Names
++
++The following command prints a list of locales supported by the
++system:
++
++@pindex locale
++@smallexample
++  locale -a
++@end smallexample
++
++@strong{Portability Note:} With the notable exception of the standard
++locale names @samp{C} and @samp{POSIX}, locale names are
++system-specific.
++
++Most locale names follow XPG syntax and consist of up to four parts:
++
++@smallexample
++@var{language}[_@var{territory}[.@var{codeset}]][@@@var{modifier}]
++@end smallexample
++
++Beside the first part, all of them are allowed to be missing.  If the
++full specified locale is not found, less specific ones are looked for.
++The various parts will be stripped off, in the following order:
++
++@enumerate
++@item
++codeset
++@item
++normalized codeset
++@item
++territory
++@item
++modifier
++@end enumerate
++
++For example, the locale name @samp{de_AT.iso885915@@euro} denotes a
++German-language locale for use in Austria, using the ISO-8859-15
++(Latin-9) character set, and with the Euro as the currency symbol.
++
++In addition to locale names which follow XPG syntax, systems may
++provide aliases such as @samp{german}.  Both categories of names must
++not contain the slash character @samp{/}.
++
++If the locale name starts with a slash @samp{/}, it is treated as a
++path relative to the configured locale directories; see @code{LOCPATH}
++below.  The specified path must not contain a component @samp{..}, or
++the name is invalid, and @code{setlocale} will fail.
++
++@strong{Portability Note:} POSIX suggests that if a locale name starts
++with a slash @samp{/}, it is resolved as an absolute path.  However,
++@theglibc{} treats it as a relative path under the directories listed
++in @code{LOCPATH} (or the default locale directory if @code{LOCPATH}
++is unset).
++
++Locale names which are longer than an implementation-defined limit are
++invalid and cause @code{setlocale} to fail.
++
++As a special case, locale names used with @code{LC_ALL} can combine
++several locales, reflecting different locale settings for different
++categories.  For example, you might want to use a U.S. locale with ISO
++A4 paper format, so you set @code{LANG} to @samp{en_US.UTF-8}, and
++@code{LC_PAPER} to @samp{de_DE.UTF-8}.  In this case, the
++@code{LC_ALL}-style combined locale name is
++
++@smallexample
++LC_CTYPE=en_US.UTF-8;LC_TIME=en_US.UTF-8;LC_PAPER=de_DE.UTF-8;@dots{}
++@end smallexample
++
++followed by other category settings not shown here.
++
++@vindex LOCPATH
++The path used for finding locale data can be set using the
++@code{LOCPATH} environment variable.  This variable lists the
++directories in which to search for locale definitions, separated by a
++colon @samp{:}.
++
++The default path for finding locale data is system specific.  A typical
++value for the @code{LOCPATH} default is:
++
++@smallexample
++/usr/share/locale
++@end smallexample
++
++The value of @code{LOCPATH} is ignored by privileged programs for
++security reasons, and only the default directory is used.
++
++@node Locale Information, Formatting Numbers, Locale Names, Locales
+ @section Accessing Locale Information
+ 
+ There are several ways to access locale information.  The simplest
diff --git a/SOURCES/glibc-rh1133812-3.patch b/SOURCES/glibc-rh1133812-3.patch
new file mode 100644
index 0000000..c94a5ff
--- /dev/null
+++ b/SOURCES/glibc-rh1133812-3.patch
@@ -0,0 +1,474 @@
+commit 2bf1804182cc4bd671193587c8d5e3de45a9618e
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Wed Jun 4 23:37:25 2014 +0000
+
+    Include LOCPATH in default test environment.
+    
+    Tests run using the default $(make-test-out) automatically get
+    GCONV_PATH and LC_ALL set, whether or not those environment variables
+    are actually needed for the individual test.  However, they do not get
+    LOCPATH set, meaning that a large number of tests have -ENV settings
+    just to set LOCPATH.
+    
+    This patch moves LOCPATH into the default environment used for all
+    tests, on the principle that like GCONV_PATH any settings needed to
+    use files associated with the newly built library, rather than any old
+    installed files, are appropriate to use by default.
+    
+    A further motivation is that various tests using .sh files also set
+    some combination of LC_ALL, GCONV_PATH and LOCPATH.  Preferably .sh
+    files should also use the default environment with any additions
+    required for the individual test.  Now, it was suggested in
+    <https://sourceware.org/ml/libc-alpha/2014-05/msg00715.html> that
+    various Makefile variables used in testing should be derived by
+    composing the -before-env and -after-env variables used when explicit
+    environment settings are required.  With such a change, it's also
+    natural for those variables to include the default settings (via some
+    intermediate makefile variable also used in make-test-out).
+    
+    Because some .sh files only set variables that correspond to the
+    default settings, or a subset thereof, and this applies to more of the
+    .sh files once LOCPATH is in the default settings, doing so reduces
+    the size of a revised version of
+    <https://sourceware.org/ml/libc-alpha/2014-05/msg00596.html>: scripts
+    only needing the (expanded) default settings will not need to receive
+    the separate -before-env and -after-env variables, only the single
+    variable they do at present.  So moving LOCPATH into the default
+    settings can reduce churn caused by subsequent patches.
+    
+    Tested x86_64 and x86.
+    
+    	* Rules (make-test-out): Include
+    	LOCPATH=$(common-objpfx)localedata in default environment.
+    	* debug/Makefile (tst-chk1-ENV): Remove variable.
+    	(tst-chk2-ENV): Likewise.
+    	(tst-chk3-ENV): Likewise.
+    	(tst-chk4-ENV): Likewise.
+    	(tst-chk5-ENV): Likewise.
+    	(tst-chk6-ENV): Likewise.
+    	(tst-lfschk1-ENV): Likewise.
+    	(tst-lfschk2-ENV): Likewise.
+    	(tst-lfschk3-ENV): Likewise.
+    	(tst-lfschk4-ENV): Likewise.
+    	(tst-lfschk5-ENV): Likewise.
+    	(tst-lfschk6-ENV): Likewise.
+    	* iconvdata/Makefile (bug-iconv6-ENV): Likewise.
+    	(tst-iconv7-ENV): Likewise.
+    	* intl/Makefile (LOCPATH-ENV): Likewise.
+    	(tst-codeset-ENV): Likewise.
+    	(tst-gettext3-ENV): Likewise.
+    	(tst-gettext5-ENV): Likewise.
+    	* libio/Makefile (tst-widetext-ENV): Don't set LOCPATH.
+    	(tst-fopenloc-ENV): Likewise.
+    	(tst-fgetws-ENV): Remove variable.
+    	(tst-ungetwc1-ENV): Likewise.
+    	(tst-ungetwc2-ENV): Likewise.
+    	(bug-ungetwc2-ENV): Likewise.
+    	(tst-swscanf-ENV): Likewise.
+    	(bug-ftell-ENV): Likewise.
+    	(tst-fgetwc-ENV): Likewise.
+    	(tst-fseek-ENV): Likewise.
+    	(tst-ftell-partial-wide-ENV): Likewise.
+    	(tst-ftell-active-handler-ENV): Likewise.
+    	(tst-ftell-append-ENV): Likewise.
+    	* posix/Makefile (tst-fnmatch-ENV): Likewise.
+    	(tst-regexloc-ENV): Likewise.
+    	(bug-regex1-ENV): Likewise.
+    	(tst-regex-ENV): Likewise.
+    	(tst-regex2-ENV): Likewise.
+    	(bug-regex5-ENV): Likewise.
+    	(bug-regex6-ENV): Likewise.
+    	(bug-regex17-ENV): Likewise.
+    	(bug-regex18-ENV): Likewise.
+    	(bug-regex19-ENV): Likewise.
+    	(bug-regex20-ENV): Likewise.
+    	(bug-regex22-ENV): Likewise.
+    	(bug-regex23-ENV): Likewise.
+    	(bug-regex25-ENV): Likewise.
+    	(bug-regex26-ENV): Likewise.
+    	(bug-regex30-ENV): Likewise.
+    	(bug-regex32-ENV): Likewise.
+    	(bug-regex33-ENV): Likewise.
+    	(bug-regex34-ENV): Likewise.
+    	(bug-regex35-ENV): Likewise.
+    	(tst-rxspencer-ENV): Likewise.
+    	(tst-rxspencer-no-utf8-ENV): Likewise.
+    	* stdio-common/Makefile (tst-sprintf-ENV): Likewise.
+    	(tst-sscanf-ENV): Likewise.
+    	(tst-swprintf-ENV): Likewise.
+    	(tst-swscanf-ENV): Likewise.
+    	(test-vfprintf-ENV): Likewise.
+    	(scanf13-ENV): Likewise.
+    	(bug14-ENV): Likewise.
+    	(tst-grouping-ENV): Likewise.
+    	* stdlib/Makefile (tst-strtod-ENV): Likewise.
+    	(tst-strtod3-ENV): Likewise.
+    	(tst-strtod4-ENV): Likewise.
+    	(tst-strtod5-ENV): Likewise.
+    	(testmb2-ENV): Likewise./
+    	* string/Makefile (tst-strxfrm-ENV): Likewise.
+    	(tst-strxfrm2-ENV): Likewise.
+    	(bug-strcoll1-ENV): Likewise.
+    	(test-strcasecmp-ENV): Likewise.
+    	(test-strncasecmp-ENV): Likewise.
+    	* time/Makefile (tst-strptime-ENV): Likewise.
+    	(tst-ftime_l-ENV): Likewise.
+    	* wcsmbs/Makefile (tst-btowc-ENV): Likewise.
+    	(tst-mbrtowc-ENV): Likewise.
+    	(tst-wcrtomb-ENV): Likewise.
+    	(tst-mbrtowc2-ENV): Likewise.
+    	(tst-c16c32-1-ENV): Likewise.
+    	(tst-mbsnrtowcs-ENV): Likewise.
+    
+    localedata/ChangeLog:
+    	* Makefile (TEST_MBWC_ENV): Remove variable.
+    	(tst_iswalnum-ENV): Likewise.
+    	(tst_iswalpha-ENV): Likewise.
+    	(tst_iswcntrl-ENV): Likewise.
+    	(tst_iswctype-ENV): Likewise.
+    	(tst_iswdigit-ENV): Likewise.
+    	(tst_iswgraph-ENV): Likewise.
+    	(tst_iswlower-ENV): Likewise.
+    	(tst_iswprint-ENV): Likewise.
+    	(tst_iswpunct-ENV): Likewise.
+    	(tst_iswspace-ENV): Likewise.
+    	(tst_iswupper-ENV): Likewise.
+    	(tst_iswxdigit-ENV): Likewise.
+    	(tst_mblen-ENV): Likewise.
+    	(tst_mbrlen-ENV): Likewise.
+    	(tst_mbrtowc-ENV): Likewise.
+    	(tst_mbsrtowcs-ENV): Likewise.
+    	(tst_mbstowcs-ENV): Likewise.
+    	(tst_mbtowc-ENV): Likewise.
+    	(tst_strcoll-ENV): Likewise.
+    	(tst_strfmon-ENV): Likewise.
+    	(tst_strxfrm-ENV): Likewise.
+    	(tst_swscanf-ENV): Likewise.
+    	(tst_towctrans-ENV): Likewise.
+    	(tst_towlower-ENV): Likewise.
+    	(tst_towupper-ENV): Likewise.
+    	(tst_wcrtomb-ENV): Likewise.
+    	(tst_wcscat-ENV): Likewise.
+    	(tst_wcschr-ENV): Likewise.
+    	(tst_wcscmp-ENV): Likewise.
+    	(tst_wcscoll-ENV): Likewise.
+    	(tst_wcscpy-ENV): Likewise.
+    	(tst_wcscspn-ENV): Likewise.
+    	(tst_wcslen-ENV): Likewise.
+    	(tst_wcsncat-ENV): Likewise.
+    	(tst_wcsncmp-ENV): Likewise.
+    	(tst_wcsncpy-ENV): Likewise.
+    	(tst_wcspbrk-ENV): Likewise.
+    	(tst_wcsrtombs-ENV): Likewise.
+    	(tst_wcsspn-ENV): Likewise.
+    	(tst_wcsstr-ENV): Likewise.
+    	(tst_wcstod-ENV): Likewise.
+    	(tst_wcstok-ENV): Likewise.
+    	(tst_wcstombs-ENV): Likewise.
+    	(tst_wcswidth-ENV): Likewise.
+    	(tst_wcsxfrm-ENV): Likewise.
+    	(tst_wctob-ENV): Likewise.
+    	(tst_wctomb-ENV): Likewise.
+    	(tst_wctrans-ENV): Likewise.
+    	(tst_wctype-ENV): Likewise.
+    	(tst_wcwidth-ENV): Likewise.
+    	(tst-digits-ENV): Likewise.
+    	(tst-mbswcs6-ENV): Likewise.
+    	(tst-xlocale1-ENV): Likewise.
+    	(tst-xlocale2-ENV): Likewise.
+    	(tst-strfmon1-ENV): Likewise.
+    	(tst-strptime-ENV): Likewise.
+    	(tst-setlocale-ENV): Don't set LOCPATH.
+    	(bug-iconv-trans-ENV): Remove variable.
+    	(tst-sscanf-ENV): Likewise.
+    	(tst-leaks-ENV): Don't set LOCPATH.
+    	(bug-setlocale1-ENV): Remove variable.
+    	(bug-setlocale1-static-ENV): Likewise.
+    	(tst-setlocale2-ENV): Likewise.
+
+diff --git glibc-2.17-c758a686/Rules glibc-2.17-c758a686/Rules
+index feb304d..9f1a445 100644
+--- glibc-2.17-c758a686/Rules
++++ glibc-2.17-c758a686/Rules
+@@ -191,7 +191,8 @@ ifneq "$(strip $(tests) $(xtests) $(test-srcs))" ""
+ # from the test programs and whatever input files are present.
+ 
+ make-test-out = $(test-wrapper-env) \
+-		GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \
++		GCONV_PATH=$(common-objpfx)iconvdata \
++		LOCPATH=$(common-objpfx)localedata LC_ALL=C \
+ 		$($*-ENV) $(host-built-program-cmd) $($*-ARGS)
+ $(objpfx)%-bp.out: %.input $(objpfx)%-bp
+ 	$(make-test-out) > $@ < $(word 1,$^)
+diff --git glibc-2.17-c758a686/debug/Makefile glibc-2.17-c758a686/debug/Makefile
+index b599a22..c284c51 100644
+--- glibc-2.17-c758a686/debug/Makefile
++++ glibc-2.17-c758a686/debug/Makefile
+@@ -109,18 +109,6 @@ CFLAGS-tst-lfschk3.c = -Wno-format
+ CFLAGS-tst-lfschk4.cc = -Wno-format
+ CFLAGS-tst-lfschk5.cc = -Wno-format
+ CFLAGS-tst-lfschk6.cc = -Wno-format
+-tst-chk1-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-chk2-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-chk3-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-chk4-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-chk5-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-chk6-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-lfschk1-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-lfschk2-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-lfschk3-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-lfschk4-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-lfschk5-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-lfschk6-ENV = LOCPATH=$(common-objpfx)localedata
+ LDLIBS-tst-chk4 = -lstdc++
+ LDLIBS-tst-chk5 = -lstdc++
+ LDLIBS-tst-chk6 = -lstdc++
+diff --git glibc-2.17-c758a686/iconvdata/Makefile glibc-2.17-c758a686/iconvdata/Makefile
+index 074d330..d98b6bd 100644
+--- glibc-2.17-c758a686/iconvdata/Makefile
++++ glibc-2.17-c758a686/iconvdata/Makefile
+@@ -73,9 +73,6 @@ tests += bug-iconv3
+ endif
+ 
+ test-srcs := tst-table-from tst-table-to
+-
+-bug-iconv6-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-iconv7-ENV = LOCPATH=$(common-objpfx)localedata
+ endif
+ 
+ # No code here is in libc.so.
+diff --git glibc-2.17-c758a686/intl/Makefile glibc-2.17-c758a686/intl/Makefile
+index f11449d..10051f6 100644
+--- glibc-2.17-c758a686/intl/Makefile
++++ glibc-2.17-c758a686/intl/Makefile
+@@ -118,11 +118,6 @@ CFLAGS-tst-gettext4.c = -DOBJPFX=\"$(objpfx)\"
+ CFLAGS-tst-gettext5.c = -DOBJPFX=\"$(objpfx)\"
+ CFLAGS-tst-gettext6.c = -DOBJPFX=\"$(objpfx)\"
+ 
+-LOCPATH-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-codeset-ENV = $(LOCPATH-ENV)
+-tst-gettext3-ENV = $(LOCPATH-ENV)
+-tst-gettext5-ENV = $(LOCPATH-ENV)
+-
+ ifeq ($(have-thread-library),yes)
+ ifeq (yes,$(build-shared))
+ $(addprefix $(objpfx),$(multithread-test-srcs)): $(shared-thread-library)
+diff --git glibc-2.17-c758a686/libio/Makefile glibc-2.17-c758a686/libio/Makefile
+index b324ccc..4552360 100644
+--- glibc-2.17-c758a686/libio/Makefile
++++ glibc-2.17-c758a686/libio/Makefile
+@@ -148,17 +148,8 @@ CFLAGS-tst_putwc.c = -DOBJPFX=\"$(objpfx)\"
+ 
+ tst_wprintf2-ARGS = "Some Text"
+ 
+-tst-widetext-ENV = LOCPATH=$(common-objpfx)localedata LANGUAGE=C
+-tst-fopenloc-ENV = LOCPATH=$(common-objpfx)localedata \
+-		   MALLOC_TRACE=$(objpfx)tst-fopenloc.mtrace
+-tst-fgetws-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-ungetwc1-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-ungetwc2-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-ungetwc2-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-swscanf-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-ftell-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-fgetwc-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-fseek-ENV = LOCPATH=$(common-objpfx)localedata
++tst-widetext-ENV = LANGUAGE=C
++tst-fopenloc-ENV = MALLOC_TRACE=$(objpfx)tst-fopenloc.mtrace
+ 
+ generated = tst-fopenloc.mtrace tst-fopenloc.check
+ 
+diff --git glibc-2.17-c758a686/localedata/Makefile glibc-2.17-c758a686/localedata/Makefile
+index d7ab445..20da00c 100644
+--- glibc-2.17-c758a686/localedata/Makefile
++++ glibc-2.17-c758a686/localedata/Makefile
+@@ -215,79 +215,13 @@
+ 		     $(addprefix --prefix=,$(install_root)) $$locale; \
+ 	echo ' done'; \
+ 
+-# The mbwc-tests need some environment setup to find the locale data files
+-TEST_MBWC_ENV:= LOCPATH=$(common-objpfx)localedata
+-tst_iswalnum-ENV = $(TEST_MBWC_ENV)
+-tst_iswalpha-ENV = $(TEST_MBWC_ENV)
+-tst_iswcntrl-ENV = $(TEST_MBWC_ENV)
+-tst_iswctype-ENV = $(TEST_MBWC_ENV)
+-tst_iswdigit-ENV = $(TEST_MBWC_ENV)
+-tst_iswgraph-ENV = $(TEST_MBWC_ENV)
+-tst_iswlower-ENV = $(TEST_MBWC_ENV)
+-tst_iswprint-ENV = $(TEST_MBWC_ENV)
+-tst_iswpunct-ENV = $(TEST_MBWC_ENV)
+-tst_iswspace-ENV = $(TEST_MBWC_ENV)
+-tst_iswupper-ENV = $(TEST_MBWC_ENV)
+-tst_iswxdigit-ENV = $(TEST_MBWC_ENV)
+-tst_mblen-ENV = $(TEST_MBWC_ENV)
+-tst_mbrlen-ENV = $(TEST_MBWC_ENV)
+-tst_mbrtowc-ENV = $(TEST_MBWC_ENV)
+-tst_mbsrtowcs-ENV = $(TEST_MBWC_ENV)
+-tst_mbstowcs-ENV = $(TEST_MBWC_ENV)
+-tst_mbtowc-ENV = $(TEST_MBWC_ENV)
+-tst_strcoll-ENV = $(TEST_MBWC_ENV)
+-tst_strfmon-ENV = $(TEST_MBWC_ENV)
+-tst_strxfrm-ENV = $(TEST_MBWC_ENV)
+-tst_swscanf-ENV = $(TEST_MBWC_ENV)
+-tst_towctrans-ENV = $(TEST_MBWC_ENV)
+-tst_towlower-ENV = $(TEST_MBWC_ENV)
+-tst_towupper-ENV = $(TEST_MBWC_ENV)
+-tst_wcrtomb-ENV = $(TEST_MBWC_ENV)
+-tst_wcscat-ENV = $(TEST_MBWC_ENV)
+-tst_wcschr-ENV = $(TEST_MBWC_ENV)
+-tst_wcscmp-ENV = $(TEST_MBWC_ENV)
+-tst_wcscoll-ENV = $(TEST_MBWC_ENV)
+-tst_wcscpy-ENV = $(TEST_MBWC_ENV)
+-tst_wcscspn-ENV = $(TEST_MBWC_ENV)
+-tst_wcslen-ENV = $(TEST_MBWC_ENV)
+-tst_wcsncat-ENV = $(TEST_MBWC_ENV)
+-tst_wcsncmp-ENV = $(TEST_MBWC_ENV)
+-tst_wcsncpy-ENV = $(TEST_MBWC_ENV)
+-tst_wcspbrk-ENV = $(TEST_MBWC_ENV)
+-tst_wcsrtombs-ENV = $(TEST_MBWC_ENV)
+-tst_wcsspn-ENV = $(TEST_MBWC_ENV)
+-tst_wcsstr-ENV = $(TEST_MBWC_ENV)
+-tst_wcstod-ENV = $(TEST_MBWC_ENV)
+-tst_wcstok-ENV = $(TEST_MBWC_ENV)
+-tst_wcstombs-ENV = $(TEST_MBWC_ENV)
+-tst_wcswidth-ENV = $(TEST_MBWC_ENV)
+-tst_wcsxfrm-ENV = $(TEST_MBWC_ENV)
+-tst_wctob-ENV = $(TEST_MBWC_ENV)
+-tst_wctomb-ENV = $(TEST_MBWC_ENV)
+-tst_wctrans-ENV = $(TEST_MBWC_ENV)
+-tst_wctype-ENV = $(TEST_MBWC_ENV)
+-tst_wcwidth-ENV = $(TEST_MBWC_ENV)
+-tst-digits-ENV = $(TEST_MBWC_ENV)
+-tst-mbswcs6-ENV = $(TEST_MBWC_ENV)
+-tst-xlocale1-ENV = $(TEST_MBWC_ENV)
+-tst-xlocale2-ENV = $(TEST_MBWC_ENV)
+-tst-strfmon1-ENV = $(TEST_MBWC_ENV)
+-tst-strptime-ENV = $(TEST_MBWC_ENV)
++tst-setlocale-ENV = LC_ALL=ja_JP.EUC-JP
+ 
+-tst-setlocale-ENV = LOCPATH=$(common-objpfx)localedata LC_ALL=ja_JP.EUC-JP
+-
+-bug-iconv-trans-ENV = LOCPATH=$(common-objpfx)localedata
+-
+-tst-sscanf-ENV = LOCPATH=$(common-objpfx)localedata
+-
+-tst-leaks-ENV = MALLOC_TRACE=$(objpfx)tst-leaks.mtrace \
+-		LOCPATH=$(common-objpfx)localedata
++tst-leaks-ENV = MALLOC_TRACE=$(objpfx)tst-leaks.mtrace
+ $(objpfx)mtrace-tst-leaks: $(objpfx)tst-leaks.out
+ 	$(common-objpfx)malloc/mtrace $(objpfx)tst-leaks.mtrace > $@
+ 
+-bug-setlocale1-ENV = LOCPATH=$(common-objpfx)localedata
+ bug-setlocale1-ARGS = $(common-objpfx)
+-tst-setlocale2-ENV = LOCPATH=$(common-objpfx)localedata
+ 
+ $(objdir)/iconvdata/gconv-modules:
+ 	$(MAKE) -C ../iconvdata subdir=iconvdata $@
+diff --git glibc-2.17-c758a686/posix/Makefile glibc-2.17-c758a686/posix/Makefile
+index 328c2c5..3d75971 100644
+--- glibc-2.17-c758a686/posix/Makefile
++++ glibc-2.17-c758a686/posix/Makefile
+@@ -203,27 +203,7 @@ tst-dir-ARGS = `pwd` `cd $(common-objdir)/$(subdir); pwd` `cd $(common-objdir);
+ tst-chmod-ARGS = $(objdir)
+ tst-vfork3-ARGS = --test-dir=$(objpfx)
+ 
+-tst-fnmatch-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-regexloc-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex1-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-regex-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-regex2-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex5-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex6-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex17-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex18-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex19-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex20-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex22-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex23-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex25-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex26-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex30-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex32-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex33-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-regex34-ENV = LOCPATH=$(common-objpfx)localedata
+ tst-rxspencer-ARGS = --utf8 rxspencer/tests
+-tst-rxspencer-ENV = LOCPATH=$(common-objpfx)localedata
+ tst-pcre-ARGS = PCRE.tests
+ tst-boost-ARGS = BOOST.tests
+ bug-glob1-ARGS = "$(objpfx)"
+diff --git glibc-2.17-c758a686/stdio-common/Makefile glibc-2.17-c758a686/stdio-common/Makefile
+index f179eab..5f8e534 100644
+--- glibc-2.17-c758a686/stdio-common/Makefile
++++ glibc-2.17-c758a686/stdio-common/Makefile
+@@ -118,13 +118,6 @@ CFLAGS-scanf17.c = -I../libio -I../stdlib -I../wcsmbs -I../time -I../string \
+ 
+ # We know the test has a format string problem.
+ CFLAGS-tst-sprintf.c = -Wno-format
+-tst-sprintf-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-sscanf-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-swprintf-ENV = LOCPATH=$(common-objpfx)localedata
+-test-vfprintf-ENV = LOCPATH=$(common-objpfx)localedata
+-scanf13-ENV = LOCPATH=$(common-objpfx)localedata
+-bug14-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-grouping-ENV = LOCPATH=$(common-objpfx)localedata
+ 
+ CPPFLAGS += $(libio-mtsafe)
+ 
+diff --git glibc-2.17-c758a686/stdlib/Makefile glibc-2.17-c758a686/stdlib/Makefile
+index d7a562f..0fdf7cc 100644
+--- glibc-2.17-c758a686/stdlib/Makefile
++++ glibc-2.17-c758a686/stdlib/Makefile
+@@ -123,11 +123,6 @@ include ../Rules
+ # Testdir has to be named stdlib and needs to be writable
+ test-canon-ARGS = --test-dir=${common-objpfx}stdlib
+ 
+-tst-strtod-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-strtod3-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-strtod4-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-strtod5-ENV = LOCPATH=$(common-objpfx)localedata
+-testmb2-ENV = LOCPATH=$(common-objpfx)localedata
+ bug-fmtmsg1-ENV = SEV_LEVEL=foo,11,newsev
+ 
+ # Run a test on the header files we use.
+diff --git glibc-2.17-c758a686/string/Makefile glibc-2.17-c758a686/string/Makefile
+index 5a76872..70b9c19 100644
+--- glibc-2.17-c758a686/string/Makefile
++++ glibc-2.17-c758a686/string/Makefile
+@@ -67,9 +67,6 @@ include ../Rules
+ tester-ENV = LANGUAGE=C
+ inl-tester-ENV = LANGUAGE=C
+ noinl-tester-ENV = LANGUAGE=C
+-tst-strxfrm-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-strxfrm2-ENV = LOCPATH=$(common-objpfx)localedata
+-bug-strcoll1-ENV = LOCPATH=$(common-objpfx)localedata
+ CFLAGS-inl-tester.c = -fno-builtin
+ CFLAGS-noinl-tester.c = -fno-builtin
+ CFLAGS-tst-strlen.c = -fno-builtin
+diff --git glibc-2.17-c758a686/time/Makefile glibc-2.17-c758a686/time/Makefile
+index b7f3dba..a07c041 100644
+--- glibc-2.17-c758a686/time/Makefile
++++ glibc-2.17-c758a686/time/Makefile
+@@ -55,7 +55,4 @@ CFLAGS-test_time.c = -Wno-format
+ tst-getdate-ENV= DATEMSK=datemsk TZDIR=${common-objpfx}timezone/testdata
+ test_time-ARGS= EST5EDT CST
+ 
+-tst-strptime-ENV = LOCPATH=${common-objpfx}localedata
+-tst-ftime_l-ENV = LOCPATH=${common-objpfx}localedata
+-
+ bug-getdate1-ARGS = ${objpfx}bug-getdate1-fmt
+diff --git glibc-2.17-c758a686/wcsmbs/Makefile glibc-2.17-c758a686/wcsmbs/Makefile
+index 197ca7d..42843a6 100644
+--- glibc-2.17-c758a686/wcsmbs/Makefile
++++ glibc-2.17-c758a686/wcsmbs/Makefile
+@@ -80,10 +80,3 @@ CPPFLAGS += $(libio-mtsafe)
+ 
+ # We need to find the default version of strtold_l in stdlib.
+ CPPFLAGS-wcstold_l.c = -I../stdlib
+-
+-tst-btowc-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-mbrtowc-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-wcrtomb-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-mbrtowc2-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-c16c32-1-ENV = LOCPATH=$(common-objpfx)localedata
+-tst-mbsnrtowcs-ENV = LOCPATH=$(common-objpfx)localedata
+--- glibc-2.17-c758a686/localedata/Makefile	2014-08-26 21:38:56.564751630 +0530
++++ glibc-2.17-c758a686/localedata/Makefile.new	2014-08-26 21:40:16.596223207 +0530
diff --git a/SOURCES/glibc-rh1138520.patch b/SOURCES/glibc-rh1138520.patch
new file mode 100644
index 0000000..1ddb051
--- /dev/null
+++ b/SOURCES/glibc-rh1138520.patch
@@ -0,0 +1,145 @@
+commit af37a8a3496327a6e5617a2c76f17aa1e8db835e
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Mon Jan 27 11:32:44 2014 +0530
+
+    Avoid undefined behaviour in netgroupcache
+    
+    Using a buffer after it has been reallocated is undefined behaviour,
+    so get offsets of the triplets in the old buffer before reallocating
+    it.
+
+commit 5d41dadf31bc8a2f9c34c40d52a442d3794e405c
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Fri Jan 24 13:51:15 2014 +0530
+
+    Adjust pointers to triplets in netgroup query data (BZ #16474)
+    
+    The _nss_*_getnetgrent_r query populates the netgroup results in the
+    allocated buffer and then sets the result triplet to point to strings
+    in the buffer.  This is a problem when the buffer is reallocated since
+    the pointers to the triplet strings are no longer valid.  The pointers
+    need to be adjusted so that they now point to strings in the
+    reallocated buffer.
+
+commit 980cb5180e1b71224a57ca52b995c959b7148c09
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Jan 16 10:20:22 2014 +0530
+
+    Don't use alloca in addgetnetgrentX (BZ #16453)
+
+    addgetnetgrentX has a buffer which is grown as per the needs of the
+    requested size either by using alloca or by falling back to malloc if
+    the size is larger than 1K.  There are two problems with the alloca
+    bits: firstly, it doesn't really extend the buffer since it does not
+    use the return value of the extend_alloca macro, which is the location
+    of the reallocated buffer.  Due to this the buffer does not actually
+    extend itself and hence a subsequent write may overwrite stuff on the
+    stack.
+
+    The second problem is more subtle - the buffer growth on the stack is
+    discontinuous due to block scope local variables.  Combine that with
+    the fact that unlike realloc, extend_alloca does not copy over old
+    content and you have a situation where the buffer just has garbage in
+    the space where it should have had data.
+
+    This could have been fixed by adding code to copy over old data
+    whenever we call extend_alloca, but it seems unnecessarily
+    complicated.  This code is not exactly a performance hotspot (it's
+    called when there is a cache miss, so factors like network lookup or
+    file reads will dominate over memory allocation/reallocation), so this
+    premature optimization is unnecessary.
+    
+    Thanks Brad Hubbard <bhubbard@redhat.com> for his help with debugging
+    the problem.
+
+diff -pruN glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+--- glibc-2.17-c758a686/nscd/netgroupcache.c	2014-04-09 12:13:58.618582111 +0530
++++ glibc-2.17-c758a686/nscd/netgroupcache.c	2014-04-09 12:07:21.486598665 +0530
+@@ -93,7 +93,6 @@ addgetnetgrentX (struct database_dyn *db
+   size_t buffilled = sizeof (*dataset);
+   char *buffer = NULL;
+   size_t nentries = 0;
+-  bool use_malloc = false;
+   size_t group_len = strlen (key) + 1;
+   union
+   {
+@@ -138,7 +137,7 @@ addgetnetgrentX (struct database_dyn *db
+     }
+ 
+   memset (&data, '\0', sizeof (data));
+-  buffer = alloca (buflen);
++  buffer = xmalloc (buflen);
+   first_needed.elem.next = &first_needed.elem;
+   memcpy (first_needed.elem.name, key, group_len);
+   data.needed_groups = &first_needed.elem;
+@@ -218,21 +217,24 @@ addgetnetgrentX (struct database_dyn *db
+ 
+ 				if (buflen - req->key_len - bufused < needed)
+ 				  {
+-				    size_t newsize = MAX (2 * buflen,
+-							  buflen + 2 * needed);
+-				    if (use_malloc || newsize > 1024 * 1024)
+-				      {
+-					buflen = newsize;
+-					char *newbuf = xrealloc (use_malloc
+-								 ? buffer
+-								 : NULL,
+-								 buflen);
+-
+-					buffer = newbuf;
+-					use_malloc = true;
+-				      }
+-				    else
+-				      extend_alloca (buffer, buflen, newsize);
++				    buflen += MAX (buflen, 2 * needed);
++				    /* Save offset in the old buffer.  We don't
++				       bother with the NULL check here since
++				       we'll do that later anyway.  */
++				    size_t nhostdiff = nhost - buffer;
++				    size_t nuserdiff = nuser - buffer;
++				    size_t ndomaindiff = ndomain - buffer;
++
++				    char *newbuf = xrealloc (buffer, buflen);
++				    /* Fix up the triplet pointers into the new
++				       buffer.  */
++				    nhost = (nhost ? newbuf + nhostdiff
++					     : NULL);
++				    nuser = (nuser ? newbuf + nuserdiff
++					     : NULL);
++				    ndomain = (ndomain ? newbuf + ndomaindiff
++					       : NULL);
++				    buffer = newbuf;
+ 				  }
+ 
+ 				nhost = memcpy (buffer + bufused,
+@@ -299,18 +301,8 @@ addgetnetgrentX (struct database_dyn *db
+ 		      }
+ 		    else if (status == NSS_STATUS_UNAVAIL && e == ERANGE)
+ 		      {
+-			size_t newsize = 2 * buflen;
+-			if (use_malloc || newsize > 1024 * 1024)
+-			  {
+-			    buflen = newsize;
+-			    char *newbuf = xrealloc (use_malloc
+-						     ? buffer : NULL, buflen);
+-
+-			    buffer = newbuf;
+-			    use_malloc = true;
+-			  }
+-			else
+-			  extend_alloca (buffer, buflen, newsize);
++			buflen *= 2;
++			buffer = xrealloc (buffer, buflen);
+ 		      }
+ 		  }
+ 
+@@ -446,8 +438,7 @@ addgetnetgrentX (struct database_dyn *db
+     }
+ 
+  out:
+-  if (use_malloc)
+-    free (buffer);
++  free (buffer);
+ 
+   *resultp = dataset;
+ 
diff --git a/SOURCES/glibc-rh1140250.patch b/SOURCES/glibc-rh1140250.patch
new file mode 100644
index 0000000..570adbe
--- /dev/null
+++ b/SOURCES/glibc-rh1140250.patch
@@ -0,0 +1,346 @@
+commit 7fe9e2e089f4990b7d18d0798f591ab276b15f2b
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri Jun 5 10:50:38 2015 +0200
+
+    posix_fallocate: Emulation fixes and documentation [BZ #15661]
+    
+    Handle signed integer overflow correctly.  Detect and reject O_APPEND.
+    Document drawbacks of emulation.
+    
+    This does not completely address bug 15661, but improves the situation
+    somewhat.
+
+commit 543ef578c3304661713950b37abd0c916f52ecf0
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date:   Tue Aug 25 23:42:01 2015 -0700
+
+    Fix broken overflow check in posix_fallocate [BZ 18873]
+    
+    * sysdeps/posix/posix_fallocate.c (posix_fallocate):
+    * sysdeps/posix/posix_fallocate64.c (__posix_fallocate64_l64):
+    Fix parenthesization typo.
+
+Index: b/manual/filesys.texi
+===================================================================
+--- a/manual/filesys.texi
++++ b/manual/filesys.texi
+@@ -1723,6 +1723,7 @@ modify the attributes of a file.
+                                  access a file.
+ * File Times::                  About the time attributes of a file.
+ * File Size::			Manually changing the size of a file.
++* Storage Allocation::          Allocate backing storage for files.
+ @end menu
+ 
+ @node Attribute Meanings
+@@ -3232,6 +3233,99 @@ is a requirement of @code{mmap}.  The pr
+ real size, and when it has finished a final @code{ftruncate} call should
+ set the real size of the file.
+ 
++@node Storage Allocation
++@subsection Storage Allocation
++@cindex allocating file storage
++@cindex file allocation
++@cindex storage allocating
++
++@cindex file fragmentation
++@cindex fragmentation of files
++@cindex sparse files
++@cindex files, sparse
++Most file systems support allocating large files in a non-contiguous
++fashion: the file is split into @emph{fragments} which are allocated
++sequentially, but the fragments themselves can be scattered across the
++disk.  File systems generally try to avoid such fragmentation because it
++decreases performance, but if a file gradually increases in size, there
++might be no other option than to fragment it.  In addition, many file
++systems support @emph{sparse files} with @emph{holes}: regions of null
++bytes for which no backing storage has been allocated by the file
++system.  When the holes are finally overwritten with data, fragmentation
++can occur as well.
++
++Explicit allocation of storage for yet-unwritten parts of the file can
++help the system to avoid fragmentation.  Additionally, if storage
++pre-allocation fails, it is possible to report the out-of-disk error
++early, often without filling up the entire disk.  However, due to
++deduplication, copy-on-write semantics, and file compression, such
++pre-allocation may not reliably prevent the out-of-disk-space error from
++occurring later.  Checking for write errors is still required, and
++writes to memory-mapped regions created with @code{mmap} can still
++result in @code{SIGBUS}.
++
++@deftypefun int posix_fallocate (int @var{fd}, off_t @var{offset}, off_t @var{length})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++@c If the file system does not support allocation,
++@c @code{posix_fallocate} has a race with file extension (if
++@c @var{length} is zero) or with concurrent writes of non-NUL bytes (if
++@c @var{length} is positive).
++
++Allocate backing store for the region of @var{length} bytes starting at
++byte @var{offset} in the file for the descriptor @var{fd}.  The file
++length is increased to @samp{@var{length} + @var{offset}} if necessary.
++
++@var{fd} must be a regular file opened for writing, or @code{EBADF} is
++returned.  If there is insufficient disk space to fulfill the allocation
++request, @code{ENOSPC} is returned.
++
++@strong{Note:} If @code{fallocate} is not available (because the file
++system does not support it), @code{posix_fallocate} is emulated, which
++has the following drawbacks:
++
++@itemize @bullet
++@item
++It is very inefficient because all file system blocks in the requested
++range need to be examined (even if they have been allocated before) and
++potentially rewritten.  In contrast, with proper @code{fallocate}
++support (see below), the file system can examine the internal file
++allocation data structures and eliminate holes directly, maybe even
++using unwritten extents (which are pre-allocated but uninitialized on
++disk).
++
++@item
++There is a race condition if another thread or process modifies the
++underlying file in the to-be-allocated area.  Non-null bytes could be
++overwritten with null bytes.
++
++@item
++If @var{fd} has been opened with the @code{O_APPEND} flag, the function
++will fail with an @code{errno} value of @code{EBADF}.
++
++@item
++If @var{length} is zero, @code{ftruncate} is used to increase the file
++size as requested, without allocating file system blocks.  There is a
++race condition which means that @code{ftruncate} can accidentally
++truncate the file if it has been extended concurrently.
++@end itemize
++
++On Linux, if an application does not benefit from emulation or if the
++emulation is harmful due to its inherent race conditions, the
++application can use the Linux-specific @code{fallocate} function, with a
++zero flag argument.  For the @code{fallocate} function, @theglibc{} does
++not perform allocation emulation if the file system does not support
++allocation.  Instead, an @code{EOPNOTSUPP} is returned to the caller.
++
++@end deftypefun
++
++@deftypefun int posix_fallocate64 (int @var{fd}, off64_t @var{length}, off64_t @var{offset})
++@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
++
++This function is a variant of @code{posix_fallocate64} which accepts
++64-bit file offsets on all platforms.
++
++@end deftypefun
++
+ @node Making Special Files
+ @section Making Special Files
+ @cindex creating special files
+Index: b/sysdeps/posix/posix_fallocate.c
+===================================================================
+--- a/sysdeps/posix/posix_fallocate.c
++++ b/sysdeps/posix/posix_fallocate.c
+@@ -18,26 +18,36 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <unistd.h>
++#include <stdint.h>
++#include <sys/fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/statfs.h>
+ 
+-/* Reserve storage for the data of the file associated with FD.  */
++/* Reserve storage for the data of the file associated with FD.  This
++   emulation is far from perfect, but the kernel cannot do not much
++   better for network file systems, either.  */
+ 
+ int
+ posix_fallocate (int fd, __off_t offset, __off_t len)
+ {
+   struct stat64 st;
+-  struct statfs f;
+ 
+-  /* `off_t' is a signed type.  Therefore we can determine whether
+-     OFFSET + LEN is too large if it is a negative value.  */
+   if (offset < 0 || len < 0)
+     return EINVAL;
+-  if (offset + len < 0)
++
++  /* Perform overflow check.  The outer cast relies on a GCC
++     extension.  */
++  if ((__off_t) ((uint64_t) offset + (uint64_t) len) < 0)
+     return EFBIG;
+ 
+-  /* First thing we have to make sure is that this is really a regular
+-     file.  */
++  /* pwrite below will not do the right thing in O_APPEND mode.  */
++  {
++    int flags = __fcntl (fd, F_GETFL, 0);
++    if (flags < 0 || (flags & O_APPEND) != 0)
++      return EBADF;
++  }
++
++  /* We have to make sure that this is really a regular file.  */
+   if (__fxstat64 (_STAT_VER, fd, &st) != 0)
+     return EBADF;
+   if (S_ISFIFO (st.st_mode))
+@@ -47,6 +57,8 @@ posix_fallocate (int fd, __off_t offset,
+ 
+   if (len == 0)
+     {
++      /* This is racy, but there is no good way to satisfy a
++	 zero-length allocation request.  */
+       if (st.st_size < offset)
+ 	{
+ 	  int ret = __ftruncate (fd, offset);
+@@ -58,19 +70,36 @@ posix_fallocate (int fd, __off_t offset,
+       return 0;
+     }
+ 
+-  /* We have to know the block size of the filesystem to get at least some
+-     sort of performance.  */
+-  if (__fstatfs (fd, &f) != 0)
+-    return errno;
+-
+-  /* Try to play safe.  */
+-  if (f.f_bsize == 0)
+-    f.f_bsize = 512;
+-
+-  /* Write something to every block.  */
+-  for (offset += (len - 1) % f.f_bsize; len > 0; offset += f.f_bsize)
++  /* Minimize data transfer for network file systems, by issuing
++     single-byte write requests spaced by the file system block size.
++     (Most local file systems have fallocate support, so this fallback
++     code is not used there.)  */
++
++  unsigned increment;
++  {
++    struct statfs64 f;
++
++    if (__fstatfs64 (fd, &f) != 0)
++      return errno;
++    if (f.f_bsize == 0)
++      increment = 512;
++    else if (f.f_bsize < 4096)
++      increment = f.f_bsize;
++    else
++      /* NFS does not propagate the block size of the underlying
++	 storage and may report a much larger value which would still
++	 leave holes after the loop below, so we cap the increment at
++	 4096.  */
++      increment = 4096;
++  }
++
++  /* Write a null byte to every block.  This is racy; we currently
++     lack a better option.  Compare-and-swap against a file mapping
++     might additional local races, but requires interposition of a
++     signal handler to catch SIGBUS.  */
++  for (offset += (len - 1) % increment; len > 0; offset += increment)
+     {
+-      len -= f.f_bsize;
++      len -= increment;
+ 
+       if (offset < st.st_size)
+ 	{
+Index: b/sysdeps/posix/posix_fallocate64.c
+===================================================================
+--- a/sysdeps/posix/posix_fallocate64.c
++++ b/sysdeps/posix/posix_fallocate64.c
+@@ -18,26 +18,36 @@
+ #include <errno.h>
+ #include <fcntl.h>
+ #include <unistd.h>
++#include <stdint.h>
++#include <sys/fcntl.h>
+ #include <sys/stat.h>
+ #include <sys/statfs.h>
+ 
+-/* Reserve storage for the data of the file associated with FD.  */
++/* Reserve storage for the data of the file associated with FD.  This
++   emulation is far from perfect, but the kernel cannot do not much
++   better for network file systems, either.  */
+ 
+ int
+ __posix_fallocate64_l64 (int fd, __off64_t offset, __off64_t len)
+ {
+   struct stat64 st;
+-  struct statfs64 f;
+ 
+-  /* `off64_t' is a signed type.  Therefore we can determine whether
+-     OFFSET + LEN is too large if it is a negative value.  */
+   if (offset < 0 || len < 0)
+     return EINVAL;
+-  if (offset + len < 0)
++
++  /* Perform overflow check.  The outer cast relies on a GCC
++     extension.  */
++  if ((__off64_t) ((uint64_t) offset + (uint64_t) len) < 0)
+     return EFBIG;
+ 
+-  /* First thing we have to make sure is that this is really a regular
+-     file.  */
++  /* pwrite64 below will not do the right thing in O_APPEND mode.  */
++  {
++    int flags = __fcntl (fd, F_GETFL, 0);
++    if (flags < 0 || (flags & O_APPEND) != 0)
++      return EBADF;
++  }
++
++  /* We have to make sure that this is really a regular file.  */
+   if (__fxstat64 (_STAT_VER, fd, &st) != 0)
+     return EBADF;
+   if (S_ISFIFO (st.st_mode))
+@@ -47,6 +57,8 @@ __posix_fallocate64_l64 (int fd, __off64
+ 
+   if (len == 0)
+     {
++      /* This is racy, but there is no good way to satisfy a
++	 zero-length allocation request.  */
+       if (st.st_size < offset)
+ 	{
+ 	  int ret = __ftruncate64 (fd, offset);
+@@ -58,19 +70,36 @@ __posix_fallocate64_l64 (int fd, __off64
+       return 0;
+     }
+ 
+-  /* We have to know the block size of the filesystem to get at least some
+-     sort of performance.  */
+-  if (__fstatfs64 (fd, &f) != 0)
+-    return errno;
+-
+-  /* Try to play safe.  */
+-  if (f.f_bsize == 0)
+-    f.f_bsize = 512;
+-
+-  /* Write something to every block.  */
+-  for (offset += (len - 1) % f.f_bsize; len > 0; offset += f.f_bsize)
++  /* Minimize data transfer for network file systems, by issuing
++     single-byte write requests spaced by the file system block size.
++     (Most local file systems have fallocate support, so this fallback
++     code is not used there.)  */
++
++  unsigned increment;
++  {
++    struct statfs64 f;
++
++    if (__fstatfs64 (fd, &f) != 0)
++      return errno;
++    if (f.f_bsize == 0)
++      increment = 512;
++    else if (f.f_bsize < 4096)
++      increment = f.f_bsize;
++    else
++      /* NFS clients do not propagate the block size of the underlying
++	 storage and may report a much larger value which would still
++	 leave holes after the loop below, so we cap the increment at
++	 4096.  */
++      increment = 4096;
++  }
++
++  /* Write a null byte to every block.  This is racy; we currently
++     lack a better option.  Compare-and-swap against a file mapping
++     might address local races, but requires interposition of a signal
++     handler to catch SIGBUS.  */
++  for (offset += (len - 1) % increment; len > 0; offset += increment)
+     {
+-      len -= f.f_bsize;
++      len -= increment;
+ 
+       if (offset < st.st_size)
+ 	{
diff --git a/SOURCES/glibc-rh1140272-avx512.patch b/SOURCES/glibc-rh1140272-avx512.patch
new file mode 100644
index 0000000..5905e7b
--- /dev/null
+++ b/SOURCES/glibc-rh1140272-avx512.patch
@@ -0,0 +1,1158 @@
+#
+# AVX-512 support for glibc:
+#
+# Notes: Renamed configure.ac changes to configure.in.
+#
+# commit aa4de9cea5c07d43caeaca9722c2d417e9a2919c
+# Author: H.J. Lu <hjl.tools@gmail.com>
+# Date:   Fri Mar 14 08:51:25 2014 -0700
+# 
+#     Check AVX-512 assembler support first
+# 
+#     It checks AVX-512 assembler support first and sets libc_cv_cc_avx512 to
+#     $libc_cv_asm_avx512, instead of yes.  GCC won't support AVX-512 if
+#     assembler doesn't support it.
+# 
+#         * sysdeps/x86_64/configure.ac: Check AVX-512 assembler support
+#         first.  Disable AVX-512 GCC support if assembler doesn't support
+#         it.
+#         * sysdeps/x86_64/configure: Regenerated.
+# 
+# commit 2d63a517e4084ec80403cd9f278690fa8b676cc4
+# Author: Igor Zamyatin <igor.zamyatin@intel.com>
+# Date:   Thu Mar 13 11:10:22 2014 -0700
+# 
+#     Save and restore AVX-512 zmm registers to x86-64 ld.so
+#     
+#     AVX-512 ISA adds 512-bit zmm registers.  This patch updates
+#     _dl_runtime_profile to pass zmm registers to run-time audit. It also
+#     changes _dl_x86_64_save_sse and _dl_x86_64_restore_sse to upport zmm
+#     registers, which are called when only when RTLD_PREPARE_FOREIGN_CALL
+#     is used.  Its performance impact is minimum.
+#     
+#         * config.h.in (HAVE_AVX512_SUPPORT): New #undef.
+#         (HAVE_AVX512_ASM_SUPPORT): Likewise.
+#         * sysdeps/x86_64/bits/link.h (La_x86_64_zmm): New.
+#         (La_x86_64_vector): Add zmm.
+#         * sysdeps/x86_64/Makefile (tests): Add tst-audit10.
+#         (modules-names): Add tst-auditmod10a and tst-auditmod10b.
+#         ($(objpfx)tst-audit10): New target.
+#         ($(objpfx)tst-audit10.out): Likewise.
+#         (tst-audit10-ENV): New.
+#         (AVX512-CFLAGS): Likewise.
+#         (CFLAGS-tst-audit10.c): Likewise.
+#         (CFLAGS-tst-auditmod10a.c): Likewise.
+#         (CFLAGS-tst-auditmod10b.c): Likewise.
+#         * sysdeps/x86_64/configure.ac: Set config-cflags-avx512,
+#         HAVE_AVX512_SUPPORT and HAVE_AVX512_ASM_SUPPORT.
+#         * sysdeps/x86_64/configure: Regenerated.
+#         * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Add
+#         AVX-512 zmm register support.
+#         (_dl_x86_64_save_sse): Likewise.
+#         (_dl_x86_64_restore_sse): Likewise.
+#         * sysdeps/x86_64/dl-trampoline.h: Updated to support different
+#         size vector registers.
+#         * sysdeps/x86_64/link-defines.sym (YMM_SIZE): New.
+#         (ZMM_SIZE): Likewise. 
+#         * sysdeps/x86_64/tst-audit10.c: New file.
+#         * sysdeps/x86_64/tst-auditmod10a.c: Likewise.
+#         * sysdeps/x86_64/tst-auditmod10b.c: Likewise.
+# 
+# In addition adds:
+# https://sourceware.org/ml/libc-alpha/2014-09/msg00228.html
+# To extend zmm register checking.
+#
+diff -urN glibc-2.17-c758a686/config.h.in glibc-2.17-c758a686/config.h.in
+--- glibc-2.17-c758a686/config.h.in	2014-09-10 23:11:14.605787816 -0400
++++ glibc-2.17-c758a686/config.h.in	2014-09-10 23:16:36.331167056 -0400
+@@ -101,6 +101,12 @@
+ /* Define if gcc supports VEX encoding.  */
+ #undef	HAVE_SSE2AVX_SUPPORT
+ 
++/* Define if compiler supports AVX512.  */
++#undef  HAVE_AVX512_SUPPORT
++
++/* Define if assembler supports AVX512.  */
++#undef  HAVE_AVX512_ASM_SUPPORT
++
+ /* Define if gcc supports FMA4.  */
+ #undef	HAVE_FMA4_SUPPORT
+ 
+diff -urN glibc-2.17-c758a686/sysdeps/x86/bits/link.h glibc-2.17-c758a686/sysdeps/x86/bits/link.h
+--- glibc-2.17-c758a686/sysdeps/x86/bits/link.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86/bits/link.h	2014-09-10 23:16:36.331167056 -0400
+@@ -66,6 +66,8 @@
+ typedef float La_x86_64_xmm __attribute__ ((__vector_size__ (16)));
+ typedef float La_x86_64_ymm
+     __attribute__ ((__vector_size__ (32), __aligned__ (16)));
++typedef double La_x86_64_zmm
++    __attribute__ ((__vector_size__ (64), __aligned__ (16)));
+ # else
+ typedef float La_x86_64_xmm __attribute__ ((__mode__ (__V4SF__)));
+ # endif
+@@ -74,6 +76,7 @@
+ {
+ # if __GNUC_PREREQ (4,0)
+   La_x86_64_ymm ymm[2];
++  La_x86_64_zmm zmm[1];
+ # endif
+   La_x86_64_xmm xmm[4];
+ } La_x86_64_vector __attribute__ ((__aligned__ (16)));
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/configure glibc-2.17-c758a686/sysdeps/x86_64/configure
+--- glibc-2.17-c758a686/sysdeps/x86_64/configure	2014-09-10 23:11:15.000787061 -0400
++++ glibc-2.17-c758a686/sysdeps/x86_64/configure	2014-09-10 23:16:36.338167042 -0400
+@@ -91,6 +91,59 @@
+ 
+ fi
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX512 support in assembler" >&5
++$as_echo_n "checking for AVX512 support in assembler... " >&6; }
++if ${libc_cv_asm_avx512+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  cat > conftest.s <<\EOF
++        vmovdqu64 %zmm0, (%rsp)
++EOF
++if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 1>&5'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }; then
++  libc_cv_asm_avx512=yes
++else
++  libc_cv_asm_avx512=no
++fi
++rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_avx512" >&5
++$as_echo "$libc_cv_asm_avx512" >&6; }
++if test $libc_cv_asm_avx512 == yes; then
++  $as_echo "#define HAVE_AVX512_ASM_SUPPORT 1" >>confdefs.h
++
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX512 support" >&5
++$as_echo_n "checking for AVX512 support... " >&6; }
++if ${libc_cv_cc_avx512+:} false; then :
++  $as_echo_n "(cached) " >&6
++else
++  if { ac_try='${CC-cc} -mavx512f -xc /dev/null -S -o /dev/null'
++  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
++  (eval $ac_try) 2>&5
++  ac_status=$?
++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++  test $ac_status = 0; }; }; then :
++  libc_cv_cc_avx512=$libc_cv_asm_avx512
++else
++  libc_cv_cc_avx512=no
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_avx512" >&5
++$as_echo "$libc_cv_cc_avx512" >&6; }
++if test $libc_cv_cc_avx512 = yes; then
++  $as_echo "#define HAVE_AVX512_SUPPORT 1" >>confdefs.h
++
++fi
++config_vars="$config_vars
++config-cflags-avx512 = $libc_cv_cc_avx512"
++
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AVX encoding of SSE instructions" >&5
+ $as_echo_n "checking for AVX encoding of SSE instructions... " >&6; }
+ if ${libc_cv_cc_sse2avx+:} false; then :
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/configure.in glibc-2.17-c758a686/sysdeps/x86_64/configure.in
+--- glibc-2.17-c758a686/sysdeps/x86_64/configure.in	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/configure.in	2014-09-10 23:16:36.338167042 -0400
+@@ -21,6 +21,30 @@
+   AC_DEFINE(HAVE_AVX_SUPPORT)
+ fi
+ 
++dnl Check if asm supports AVX512.
++AC_CACHE_CHECK(for AVX512 support in assembler, libc_cv_asm_avx512, [dnl
++cat > conftest.s <<\EOF
++        vmovdqu64 %zmm0, (%rsp)
++EOF
++if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then
++  libc_cv_asm_avx512=yes
++else
++  libc_cv_asm_avx512=no
++fi
++rm -f conftest*])
++if test $libc_cv_asm_avx512 == yes; then
++  AC_DEFINE(HAVE_AVX512_ASM_SUPPORT)
++fi
++
++dnl Check if -mavx512f works.
++AC_CACHE_CHECK(for AVX512 support, libc_cv_cc_avx512, [dnl
++LIBC_TRY_CC_OPTION([-mavx512f], [libc_cv_cc_avx512=$libc_cv_asm_avx512], [libc_cv_cc_avx512=no])
++])
++if test $libc_cv_cc_avx512 = yes; then
++  AC_DEFINE(HAVE_AVX512_SUPPORT)
++fi
++LIBC_CONFIG_VAR([config-cflags-avx512], [$libc_cv_cc_avx512])
++
+ dnl Check if -msse2avx works.
+ AC_CACHE_CHECK(for AVX encoding of SSE instructions, libc_cv_cc_sse2avx, [dnl
+ LIBC_TRY_CC_OPTION([-msse2avx],
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h
+--- glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.h	2014-09-10 23:16:36.334167050 -0400
+@@ -19,14 +19,14 @@
+ 
+ #ifdef RESTORE_AVX
+ 	/* This is to support AVX audit modules.  */
+-	vmovdqu %ymm0,		      (LR_VECTOR_OFFSET)(%rsp)
+-	vmovdqu %ymm1, (LR_VECTOR_OFFSET +   VECTOR_SIZE)(%rsp)
+-	vmovdqu %ymm2, (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp)
+-	vmovdqu %ymm3, (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp)
+-	vmovdqu %ymm4, (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp)
+-	vmovdqu %ymm5, (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp)
+-	vmovdqu %ymm6, (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp)
+-	vmovdqu %ymm7, (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp)
++	VMOV %VEC(0),		      (LR_VECTOR_OFFSET)(%rsp)
++	VMOV %VEC(1), (LR_VECTOR_OFFSET +   VECTOR_SIZE)(%rsp)
++	VMOV %VEC(2), (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp)
++	VMOV %VEC(3), (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp)
++	VMOV %VEC(4), (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp)
++	VMOV %VEC(5), (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp)
++	VMOV %VEC(6), (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp)
++	VMOV %VEC(7), (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp)
+ 
+ 	/* Save xmm0-xmm7 registers to detect if any of them are
+ 	   changed by audit module.  */
+@@ -72,7 +72,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm0, (LR_VECTOR_OFFSET)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu	(LR_VECTOR_OFFSET)(%rsp), %ymm0
++2:	VMOV (LR_VECTOR_OFFSET)(%rsp), %VEC(0)
+ 	vmovdqa	%xmm0, (LR_XMM_OFFSET)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE)(%rsp), %xmm1, %xmm8
+@@ -81,7 +81,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm1, (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu	(LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp), %ymm1
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE)(%rsp), %VEC(1)
+ 	vmovdqa	%xmm1, (LR_XMM_OFFSET + XMM_SIZE)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE*2)(%rsp), %xmm2, %xmm8
+@@ -90,7 +90,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm2, (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp), %ymm2
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*2)(%rsp), %VEC(2)
+ 	vmovdqa	%xmm2, (LR_XMM_OFFSET + XMM_SIZE*2)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE*3)(%rsp), %xmm3, %xmm8
+@@ -99,7 +99,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm3, (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp), %ymm3
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*3)(%rsp), %VEC(3)
+ 	vmovdqa	%xmm3, (LR_XMM_OFFSET + XMM_SIZE*3)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE*4)(%rsp), %xmm4, %xmm8
+@@ -108,7 +108,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm4, (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp), %ymm4
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*4)(%rsp), %VEC(4)
+ 	vmovdqa	%xmm4, (LR_XMM_OFFSET + XMM_SIZE*4)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE*5)(%rsp), %xmm5, %xmm8
+@@ -117,7 +117,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm5, (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp), %ymm5
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*5)(%rsp), %VEC(5)
+ 	vmovdqa	%xmm5, (LR_XMM_OFFSET + XMM_SIZE*5)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE*6)(%rsp), %xmm6, %xmm8
+@@ -126,7 +126,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm6, (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp), %ymm6
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*6)(%rsp), %VEC(6)
+ 	vmovdqa	%xmm6, (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp)
+ 
+ 1:	vpcmpeqq (LR_SIZE + XMM_SIZE*7)(%rsp), %xmm7, %xmm8
+@@ -135,7 +135,7 @@
+ 	je 2f
+ 	vmovdqa	%xmm7, (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp)
+ 	jmp 1f
+-2:	vmovdqu (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp), %ymm7
++2:	VMOV (LR_VECTOR_OFFSET + VECTOR_SIZE*7)(%rsp), %VEC(7)
+ 	vmovdqa	%xmm7, (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp)
+ 
+ 1:
+@@ -213,8 +213,8 @@
+ 
+ #ifdef RESTORE_AVX
+ 	/* This is to support AVX audit modules.  */
+-	vmovdqu %ymm0, LRV_VECTOR0_OFFSET(%rcx)
+-	vmovdqu %ymm1, LRV_VECTOR1_OFFSET(%rcx)
++	VMOV %VEC(0), LRV_VECTOR0_OFFSET(%rcx)
++	VMOV %VEC(1), LRV_VECTOR1_OFFSET(%rcx)
+ 
+ 	/* Save xmm0/xmm1 registers to detect if they are changed
+ 	   by audit module.  */
+@@ -243,13 +243,13 @@
+ 	vpmovmskb %xmm2, %esi
+ 	cmpl $0xffff, %esi
+ 	jne 1f
+-	vmovdqu LRV_VECTOR0_OFFSET(%rsp), %ymm0
++	VMOV LRV_VECTOR0_OFFSET(%rsp), %VEC(0)
+ 
+ 1:	vpcmpeqq (LRV_SIZE + XMM_SIZE)(%rsp), %xmm1, %xmm2
+ 	vpmovmskb %xmm2, %esi
+ 	cmpl $0xffff, %esi
+ 	jne 1f
+-	vmovdqu LRV_VECTOR1_OFFSET(%rsp), %ymm1
++	VMOV LRV_VECTOR1_OFFSET(%rsp), %VEC(1)
+ 
+ 1:
+ #endif
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S
+--- glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/dl-trampoline.S	2014-09-10 23:16:36.334167050 -0400
+@@ -96,7 +96,7 @@
+ 
+ 	/* Actively align the La_x86_64_regs structure.  */
+ 	andq $0xfffffffffffffff0, %rsp
+-# ifdef HAVE_AVX_SUPPORT
++# if defined HAVE_AVX_SUPPORT || defined HAVE_AVX512_ASM_SUPPORT
+ 	/* sizeof(La_x86_64_regs).  Need extra space for 8 SSE registers
+ 	   to detect if any xmm0-xmm7 registers are changed by audit
+ 	   module.  */
+@@ -130,7 +130,7 @@
+ 	movaps %xmm6, (LR_XMM_OFFSET + XMM_SIZE*6)(%rsp)
+ 	movaps %xmm7, (LR_XMM_OFFSET + XMM_SIZE*7)(%rsp)
+ 
+-# ifdef HAVE_AVX_SUPPORT
++# if defined HAVE_AVX_SUPPORT || defined HAVE_AVX512_ASM_SUPPORT
+ 	.data
+ L(have_avx):
+ 	.zero 4
+@@ -138,7 +138,7 @@
+ 	.previous
+ 
+ 	cmpl	$0, L(have_avx)(%rip)
+-	jne	1f
++	jne	L(defined)
+ 	movq	%rbx, %r11		# Save rbx
+ 	movl	$1, %eax
+ 	cpuid
+@@ -147,18 +147,54 @@
+ 	// AVX and XSAVE supported?
+ 	andl	$((1 << 28) | (1 << 27)), %ecx
+ 	cmpl	$((1 << 28) | (1 << 27)), %ecx
+-	jne	2f
++	jne	10f
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	// AVX512 supported in processor?
++	movq	%rbx, %r11		# Save rbx
++	xorl	%ecx, %ecx
++	mov	$0x7, %eax
++	cpuid
++	andl	$(1 << 16), %ebx
++#  endif
+ 	xorl	%ecx, %ecx
+ 	// Get XFEATURE_ENABLED_MASK
+ 	xgetbv
+-	andl	$0x6, %eax
+-2:	subl	$0x5, %eax
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	test	%ebx, %ebx
++	movq	%r11, %rbx		# Restore rbx
++	je	20f
++	// Verify that XCR0[7:5] = '111b' and
++	// XCR0[2:1] = '11b' which means
++	// that zmm state is enabled
++	andl	$0xe6, %eax
++	cmpl	$0xe6, %eax
++	jne	20f
++	movl	%eax, L(have_avx)(%rip)
++L(avx512):
++#   define RESTORE_AVX
++#   define VMOV    vmovdqu64
++#   define VEC(i)  zmm##i
++#   define MORE_CODE
++#   include "dl-trampoline.h"
++#   undef VMOV
++#   undef VEC
++#   undef RESTORE_AVX
++#  endif
++20:	andl	$0x6, %eax
++10:	subl	$0x5, %eax
+ 	movl	%eax, L(have_avx)(%rip)
+ 	cmpl	$0, %eax
+ 
+-1:	js	L(no_avx)
++L(defined):
++	js	L(no_avx)
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	cmpl	$0xe6, L(have_avx)(%rip)
++	je	L(avx512)
++#  endif
+ 
+ #  define RESTORE_AVX
++#  define VMOV    vmovdqu
++#  define VEC(i)  ymm##i
+ #  define MORE_CODE
+ #  include "dl-trampoline.h"
+ 
+@@ -180,9 +216,9 @@
+ 	.align 16
+ 	cfi_startproc
+ _dl_x86_64_save_sse:
+-# ifdef HAVE_AVX_SUPPORT
++# if defined HAVE_AVX_SUPPORT || defined HAVE_AVX512_ASM_SUPPORT
+ 	cmpl	$0, L(have_avx)(%rip)
+-	jne	1f
++	jne	L(defined_5)
+ 	movq	%rbx, %r11		# Save rbx
+ 	movl	$1, %eax
+ 	cpuid
+@@ -191,21 +227,43 @@
+ 	// AVX and XSAVE supported?
+ 	andl	$((1 << 28) | (1 << 27)), %ecx
+ 	cmpl	$((1 << 28) | (1 << 27)), %ecx
+-	jne	2f
++	jne	1f
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	// AVX512 supported in a processor?
++	movq	%rbx, %r11              # Save rbx
++	xorl	%ecx,%ecx
++	mov	$0x7,%eax
++	cpuid
++	andl	$(1 << 16), %ebx
++#  endif
+ 	xorl	%ecx, %ecx
+ 	// Get XFEATURE_ENABLED_MASK
+ 	xgetbv
+-	andl	$0x6, %eax
+-	cmpl	$0x6, %eax
+-	// Nonzero if SSE and AVX state saving is enabled.
+-	sete	%al
+-2:	leal	-1(%eax,%eax), %eax
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	test	%ebx, %ebx
++	movq	%r11, %rbx		# Restore rbx
++	je	2f
++	// Verify that XCR0[7:5] = '111b' and
++	// XCR0[2:1] = '11b' which means
++	// that zmm state is enabled
++	andl	$0xe6, %eax
++	movl	%eax, L(have_avx)(%rip)
++	cmpl	$0xe6, %eax
++	je	L(avx512_5)
++#  endif
++
++2:	andl	$0x6, %eax
++1:	subl	$0x5, %eax
+ 	movl	%eax, L(have_avx)(%rip)
+ 	cmpl	$0, %eax
+ 
+-1:	js	L(no_avx5)
++L(defined_5):
++	js	L(no_avx5)
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	cmpl	$0xe6, L(have_avx)(%rip)
++	je	L(avx512_5)
++#  endif
+ 
+-#  define YMM_SIZE 32
+ 	vmovdqa %ymm0, %fs:RTLD_SAVESPACE_SSE+0*YMM_SIZE
+ 	vmovdqa %ymm1, %fs:RTLD_SAVESPACE_SSE+1*YMM_SIZE
+ 	vmovdqa %ymm2, %fs:RTLD_SAVESPACE_SSE+2*YMM_SIZE
+@@ -215,6 +273,18 @@
+ 	vmovdqa %ymm6, %fs:RTLD_SAVESPACE_SSE+6*YMM_SIZE
+ 	vmovdqa %ymm7, %fs:RTLD_SAVESPACE_SSE+7*YMM_SIZE
+ 	ret
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++L(avx512_5):
++	vmovdqu64 %zmm0, %fs:RTLD_SAVESPACE_SSE+0*ZMM_SIZE
++	vmovdqu64 %zmm1, %fs:RTLD_SAVESPACE_SSE+1*ZMM_SIZE
++	vmovdqu64 %zmm2, %fs:RTLD_SAVESPACE_SSE+2*ZMM_SIZE
++	vmovdqu64 %zmm3, %fs:RTLD_SAVESPACE_SSE+3*ZMM_SIZE
++	vmovdqu64 %zmm4, %fs:RTLD_SAVESPACE_SSE+4*ZMM_SIZE
++	vmovdqu64 %zmm5, %fs:RTLD_SAVESPACE_SSE+5*ZMM_SIZE
++	vmovdqu64 %zmm6, %fs:RTLD_SAVESPACE_SSE+6*ZMM_SIZE
++	vmovdqu64 %zmm7, %fs:RTLD_SAVESPACE_SSE+7*ZMM_SIZE
++	ret
++#  endif
+ L(no_avx5):
+ # endif
+ 	movdqa	%xmm0, %fs:RTLD_SAVESPACE_SSE+0*XMM_SIZE
+@@ -235,9 +305,13 @@
+ 	.align 16
+ 	cfi_startproc
+ _dl_x86_64_restore_sse:
+-# ifdef HAVE_AVX_SUPPORT
++# if defined HAVE_AVX_SUPPORT || defined HAVE_AVX512_ASM_SUPPORT
+ 	cmpl	$0, L(have_avx)(%rip)
+ 	js	L(no_avx6)
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++	cmpl	$0xe6, L(have_avx)(%rip)
++	je	L(avx512_6)
++#  endif
+ 
+ 	vmovdqa %fs:RTLD_SAVESPACE_SSE+0*YMM_SIZE, %ymm0
+ 	vmovdqa %fs:RTLD_SAVESPACE_SSE+1*YMM_SIZE, %ymm1
+@@ -248,6 +322,18 @@
+ 	vmovdqa %fs:RTLD_SAVESPACE_SSE+6*YMM_SIZE, %ymm6
+ 	vmovdqa %fs:RTLD_SAVESPACE_SSE+7*YMM_SIZE, %ymm7
+ 	ret
++#  ifdef HAVE_AVX512_ASM_SUPPORT
++L(avx512_6):
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+0*ZMM_SIZE, %zmm0
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+1*ZMM_SIZE, %zmm1
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+2*ZMM_SIZE, %zmm2
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+3*ZMM_SIZE, %zmm3
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+4*ZMM_SIZE, %zmm4
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+5*ZMM_SIZE, %zmm5
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+6*ZMM_SIZE, %zmm6
++	vmovdqu64 %fs:RTLD_SAVESPACE_SSE+7*ZMM_SIZE, %zmm7
++	ret
++#  endif
+ L(no_avx6):
+ # endif
+ 	movdqa	%fs:RTLD_SAVESPACE_SSE+0*XMM_SIZE, %xmm0
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym
+--- glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/link-defines.sym	2014-09-10 23:16:36.335167048 -0400
+@@ -4,6 +4,8 @@
+ --
+ VECTOR_SIZE		sizeof (La_x86_64_vector)
+ XMM_SIZE		sizeof (La_x86_64_xmm)
++YMM_SIZE		sizeof (La_x86_64_ymm)
++ZMM_SIZE		sizeof (La_x86_64_zmm)
+ 
+ LR_SIZE			sizeof (struct La_x86_64_regs)
+ LR_RDX_OFFSET		offsetof (struct La_x86_64_regs, lr_rdx)
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/Makefile glibc-2.17-c758a686/sysdeps/x86_64/Makefile
+--- glibc-2.17-c758a686/sysdeps/x86_64/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/Makefile	2014-09-10 23:22:04.269518711 -0400
+@@ -37,6 +37,20 @@
+ 
+ $(objpfx)tst-quad1pie: $(objpfx)tst-quadmod1pie.o
+ $(objpfx)tst-quad2pie: $(objpfx)tst-quadmod2pie.o
++
++tests += tst-audit10
++modules-names += tst-auditmod10a tst-auditmod10b
++
++$(objpfx)tst-audit10: $(objpfx)tst-auditmod10a.so
++$(objpfx)tst-audit10.out: $(objpfx)tst-auditmod10b.so
++tst-audit10-ENV = LD_AUDIT=$(objpfx)tst-auditmod10b.so
++
++ifeq (yes,$(config-cflags-avx512))
++AVX512-CFLAGS = -mavx512f
++CFLAGS-tst-audit10.c += $(AVX512-CFLAGS)
++CFLAGS-tst-auditmod10a.c += $(AVX512-CFLAGS)
++CFLAGS-tst-auditmod10b.c += $(AVX512-CFLAGS)
++endif
+ endif
+ 
+ ifeq ($(subdir),csu)
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/tst-audit10.c glibc-2.17-c758a686/sysdeps/x86_64/tst-audit10.c
+--- glibc-2.17-c758a686/sysdeps/x86_64/tst-audit10.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/tst-audit10.c	2014-09-10 23:16:36.335167048 -0400
+@@ -0,0 +1,70 @@
++/* Copyright (C) 2012-2014 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 case for x86-64 preserved registers in dynamic linker.  */
++
++#ifdef __AVX512F__
++#include <stdlib.h>
++#include <string.h>
++#include <cpuid.h>
++#include <immintrin.h>
++
++static int
++avx512_enabled (void)
++{
++  unsigned int eax, ebx, ecx, edx;
++
++  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0
++      || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE))
++    return 0;
++
++  __cpuid_count (7, 0, eax, ebx, ecx, edx);
++  if (!(ebx & bit_AVX512F))
++    return 0;
++
++  asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
++
++  /* Verify that ZMM, YMM and XMM states are enabled.  */
++  return (eax & 0xe6) == 0xe6;
++}
++
++
++extern __m512i audit_test (__m512i, __m512i, __m512i, __m512i,
++			   __m512i, __m512i, __m512i, __m512i);
++int
++main (void)
++{
++  /* Run AVX512 test only if AVX512 is supported.  */
++  if (avx512_enabled ())
++    {
++      __m512i zmm = _mm512_setzero_si512 ();
++      __m512i ret = audit_test (zmm, zmm, zmm, zmm, zmm, zmm, zmm, zmm);
++
++      zmm = _mm512_set1_epi64 (0x12349876);
++
++      if (memcmp (&zmm, &ret, sizeof (ret)))
++	abort ();
++    }
++  return 0;
++}
++#else
++int
++main (void)
++{
++  return 0;
++}
++#endif
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10a.c glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10a.c
+--- glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10a.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10a.c	2014-09-10 23:16:36.335167048 -0400
+@@ -0,0 +1,65 @@
++/* Copyright (C) 2012-2014 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 case for x86-64 preserved registers in dynamic linker.  */
++
++#ifdef __AVX512F__
++#include <stdlib.h>
++#include <string.h>
++#include <immintrin.h>
++
++__m512i
++audit_test (__m512i x0, __m512i x1, __m512i x2, __m512i x3,
++	    __m512i x4, __m512i x5, __m512i x6, __m512i x7)
++{
++  __m512i zmm;
++
++  zmm = _mm512_set1_epi64 (1);
++  if (memcmp (&zmm, &x0, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (2);
++  if (memcmp (&zmm, &x1, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (3);
++  if (memcmp (&zmm, &x2, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (4);
++  if (memcmp (&zmm, &x3, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (5);
++  if (memcmp (&zmm, &x4, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (6);
++  if (memcmp (&zmm, &x5, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (7);
++  if (memcmp (&zmm, &x6, sizeof (zmm)))
++    abort ();
++
++  zmm = _mm512_set1_epi64 (8);
++  if (memcmp (&zmm, &x7, sizeof (zmm)))
++    abort ();
++
++  return _mm512_setzero_si512 ();
++}
++#endif
+diff -urN glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10b.c glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10b.c
+--- glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10b.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86_64/tst-auditmod10b.c	2014-09-10 23:16:36.336167046 -0400
+@@ -0,0 +1,219 @@
++/* Copyright (C) 2012-2014 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/>.  */
++
++/* Verify that changing AVX512 registers in audit library won't affect
++   function parameter passing/return.  */
++
++#include <dlfcn.h>
++#include <stdint.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++#include <bits/wordsize.h>
++#include <gnu/lib-names.h>
++
++unsigned int
++la_version (unsigned int v)
++{
++  setlinebuf (stdout);
++
++  printf ("version: %u\n", v);
++
++  char buf[20];
++  sprintf (buf, "%u", v);
++
++  return v;
++}
++
++void
++la_activity (uintptr_t *cookie, unsigned int flag)
++{
++  if (flag == LA_ACT_CONSISTENT)
++    printf ("activity: consistent\n");
++  else if (flag == LA_ACT_ADD)
++    printf ("activity: add\n");
++  else if (flag == LA_ACT_DELETE)
++    printf ("activity: delete\n");
++  else
++    printf ("activity: unknown activity %u\n", flag);
++}
++
++char *
++la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag)
++{
++  char buf[100];
++  const char *flagstr;
++  if (flag == LA_SER_ORIG)
++    flagstr = "LA_SET_ORIG";
++  else if (flag == LA_SER_LIBPATH)
++    flagstr = "LA_SER_LIBPATH";
++  else if (flag == LA_SER_RUNPATH)
++    flagstr = "LA_SER_RUNPATH";
++  else if (flag == LA_SER_CONFIG)
++    flagstr = "LA_SER_CONFIG";
++  else if (flag == LA_SER_DEFAULT)
++    flagstr = "LA_SER_DEFAULT";
++  else if (flag == LA_SER_SECURE)
++    flagstr = "LA_SER_SECURE";
++  else
++    {
++       sprintf (buf, "unknown flag %d", flag);
++       flagstr = buf;
++    }
++  printf ("objsearch: %s, %s\n", name, flagstr);
++
++  return (char *) name;
++}
++
++unsigned int
++la_objopen (struct link_map *l, Lmid_t lmid, uintptr_t *cookie)
++{
++  printf ("objopen: %ld, %s\n", lmid, l->l_name);
++
++  return 3;
++}
++
++void
++la_preinit (uintptr_t *cookie)
++{
++  printf ("preinit\n");
++}
++
++unsigned int
++la_objclose  (uintptr_t *cookie)
++{
++  printf ("objclose\n");
++  return 0;
++}
++
++uintptr_t
++la_symbind64 (Elf64_Sym *sym, unsigned int ndx, uintptr_t *refcook,
++	      uintptr_t *defcook, unsigned int *flags, const char *symname)
++{
++  printf ("symbind64: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
++	  symname, (long int) sym->st_value, ndx, *flags);
++
++  return sym->st_value;
++}
++
++#include <tst-audit.h>
++
++#ifdef __AVX512F__
++#include <immintrin.h>
++#include <cpuid.h>
++
++static int
++check_avx512 (void)
++{
++  unsigned int eax, ebx, ecx, edx;
++
++  if (__get_cpuid (1, &eax, &ebx, &ecx, &edx) == 0
++      || (ecx & (bit_AVX | bit_OSXSAVE)) != (bit_AVX | bit_OSXSAVE))
++    return 0;
++
++  __cpuid_count (7, 0, eax, ebx, ecx, edx);
++  if (!(ebx & bit_AVX512F))
++    return 0;
++
++  asm ("xgetbv" : "=a" (eax), "=d" (edx) : "c" (0));
++
++  /* Verify that ZMM, YMM and XMM states are enabled.  */
++  return (eax & 0xe6) == 0xe6;
++}
++
++#else
++#include <emmintrin.h>
++#endif
++
++ElfW(Addr)
++pltenter (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
++	  uintptr_t *defcook, La_regs *regs, unsigned int *flags,
++	  const char *symname, long int *framesizep)
++{
++  printf ("pltenter: symname=%s, st_value=%#lx, ndx=%u, flags=%u\n",
++	  symname, (long int) sym->st_value, ndx, *flags);
++
++#ifdef __AVX512F__
++  if (check_avx512 () && strcmp (symname, "audit_test") == 0)
++    {
++      __m512i zero = _mm512_setzero_si512 ();
++      if (memcmp (&regs->lr_vector[0], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[1], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[2], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[3], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[4], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[5], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[6], &zero, sizeof (zero))
++	  || memcmp (&regs->lr_vector[7], &zero, sizeof (zero)))
++	abort ();
++
++      for (int i = 0; i < 8; i++)
++	regs->lr_vector[i].zmm[0]
++	  = (La_x86_64_zmm) _mm512_set1_epi64 (i + 1);
++
++      __m512i zmm = _mm512_set1_epi64 (-1);
++      asm volatile ("vmovdqa64 %0, %%zmm0" : : "x" (zmm) : "xmm0" );
++      asm volatile ("vmovdqa64 %0, %%zmm1" : : "x" (zmm) : "xmm1" );
++      asm volatile ("vmovdqa64 %0, %%zmm2" : : "x" (zmm) : "xmm2" );
++      asm volatile ("vmovdqa64 %0, %%zmm3" : : "x" (zmm) : "xmm3" );
++      asm volatile ("vmovdqa64 %0, %%zmm4" : : "x" (zmm) : "xmm4" );
++      asm volatile ("vmovdqa64 %0, %%zmm5" : : "x" (zmm) : "xmm5" );
++      asm volatile ("vmovdqa64 %0, %%zmm6" : : "x" (zmm) : "xmm6" );
++      asm volatile ("vmovdqa64 %0, %%zmm7" : : "x" (zmm) : "xmm7" );
++
++      *framesizep = 1024;
++    }
++#endif
++
++  return sym->st_value;
++}
++
++unsigned int
++pltexit (ElfW(Sym) *sym, unsigned int ndx, uintptr_t *refcook,
++	 uintptr_t *defcook, const La_regs *inregs, La_retval *outregs,
++	 const char *symname)
++{
++  printf ("pltexit: symname=%s, st_value=%#lx, ndx=%u, retval=%tu\n",
++	  symname, (long int) sym->st_value, ndx,
++	  (ptrdiff_t) outregs->int_retval);
++
++#ifdef __AVX512F__
++  if (check_avx512 () && strcmp (symname, "audit_test") == 0)
++    {
++      __m512i zero = _mm512_setzero_si512 ();
++      if (memcmp (&outregs->lrv_vector0, &zero, sizeof (zero)))
++	abort ();
++
++      for (int i = 0; i < 8; i++)
++	{
++	  __m512i zmm = _mm512_set1_epi64 (i + 1);
++	  if (memcmp (&inregs->lr_vector[i], &zmm, sizeof (zmm)) != 0)
++	    abort ();
++	}
++
++      outregs->lrv_vector0.zmm[0]
++	= (La_x86_64_zmm) _mm512_set1_epi64 (0x12349876);
++
++      __m512i zmm = _mm512_set1_epi64 (-1);
++      asm volatile ("vmovdqa64 %0, %%zmm0" : : "x" (zmm) : "xmm0" );
++      asm volatile ("vmovdqa64 %0, %%zmm1" : : "x" (zmm) : "xmm1" );
++    }
++#endif
++
++  return 0;
++}
+diff -urN glibc-2.17-c758a686/sysdeps/x86/Makefile glibc-2.17-c758a686/sysdeps/x86/Makefile
+--- glibc-2.17-c758a686/sysdeps/x86/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86/Makefile	2014-09-11 16:06:03.121319867 -0400
+@@ -2,8 +2,8 @@
+ CFLAGS-.os += $(if $(filter $(@F),$(patsubst %,%.os,$(all-rtld-routines))),\
+ 		   -mno-sse -mno-mmx)
+ 
+-tests: $(objpfx)tst-xmmymm.out
+-$(objpfx)tst-xmmymm.out: ../sysdeps/x86/tst-xmmymm.sh $(objpfx)ld.so
++tests: $(objpfx)tst-xmmymmzmm.out
++$(objpfx)tst-xmmymmzmm.out: ../sysdeps/x86/tst-xmmymmzmm.sh $(objpfx)ld.so
+ 	@echo "Checking ld.so for SSE register use.  This will take a few seconds..."
+ 	$(SHELL) $< $(objpfx) '$(NM)' '$(OBJDUMP)' '$(READELF)' > $@
+ endif
+diff -urN glibc-2.17-c758a686/sysdeps/x86/tst-xmmymm.sh glibc-2.17-c758a686/sysdeps/x86/tst-xmmymm.sh
+--- glibc-2.17-c758a686/sysdeps/x86/tst-xmmymm.sh	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86/tst-xmmymm.sh	1969-12-31 19:00:00.000000000 -0500
+@@ -1,103 +0,0 @@
+-#! /bin/bash
+-# Make sure no code in ld.so uses xmm/ymm registers on x86-64.
+-# Copyright (C) 2009-2012 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
+-
+-objpfx="$1"
+-NM="$2"
+-OBJDUMP="$3"
+-READELF="$4"
+-
+-tmp=$(mktemp ${objpfx}tst-xmmymm.XXXXXX)
+-trap 'rm -f "$tmp"' 1 2 3 15
+-
+-# List of object files we have to test
+-rtldobjs=$($READELF -W -wi ${objpfx}dl-allobjs.os |
+-    awk '/^ </ { if ($5 == "(DW_TAG_compile_unit)") c=1; else c=0 } $2 == "DW_AT_name" { if (c == 1) print $NF }' |
+-    sed 's,\(.*/\|\)\([_[:alnum:]-]*[.]\).$,\2os,')
+-rtldobjs="$rtldobjs $(ar t ${objpfx}rtld-libc.a)"
+-
+-# OBJECT symbols can be ignored.
+-$READELF -sW ${objpfx}dl-allobjs.os ${objpfx}rtld-libc.a |
+-egrep " OBJECT  *GLOBAL " |
+-awk '{if ($7 != "ABS") print $8 }' |
+-sort -u > "$tmp"
+-declare -a objects
+-objects=($(cat "$tmp"))
+-
+-objs="dl-runtime.os"
+-tocheck="dl-runtime.os"
+-
+-while test -n "$objs"; do
+-  this="$objs"
+-  objs=""
+-
+-  for f in $this; do
+-    undef=$($NM -u "$objpfx"../*/"$f" | awk '{print $2}')
+-    if test -n "$undef"; then
+-      for s in $undef; do
+-	for obj in ${objects[*]} "_GLOBAL_OFFSET_TABLE_"; do
+-	  if test "$obj" = "$s"; then
+-	    continue 2
+-	  fi
+-	done
+-        for o in $rtldobjs; do
+-	  ro=$(echo "$objpfx"../*/"$o")
+-	  if $NM -g --defined-only "$ro" | egrep -qs " $s\$"; then
+-	    if ! (echo "$tocheck $objs" | fgrep -qs "$o"); then
+-	      echo "$o needed for $s"
+-	      objs="$objs $o"
+-	    fi
+-	    break;
+-	  fi
+-	done
+-      done
+-    fi
+-  done
+-  tocheck="$tocheck$objs"
+-done
+-
+-echo
+-echo
+-echo "object files needed: $tocheck"
+-
+-cp /dev/null "$tmp"
+-for f in $tocheck; do
+-  $OBJDUMP -d "$objpfx"../*/"$f" |
+-  awk 'BEGIN { last="" } /^[[:xdigit:]]* <[_[:alnum:]]*>:$/ { fct=substr($2, 2, length($2)-3) } /,%[xy]mm[[:digit:]]*$/ { if (last != fct) { print fct; last=fct} }' |
+-  while read fct; do
+-    if test "$fct" = "_dl_runtime_profile" -o "$fct" = "_dl_x86_64_restore_sse"; then
+-      continue;
+-    fi
+-    echo "function $fct in $f modifies xmm/ymm" >> "$tmp"
+-    result=1
+-  done
+-done
+-
+-if test -s "$tmp"; then
+-  echo
+-  echo
+-  cat "$tmp"
+-  result=1
+-else
+-  result=0
+-fi
+-
+-rm "$tmp"
+-exit $result
+diff -urN glibc-2.17-c758a686/sysdeps/x86/tst-xmmymmzmm.sh glibc-2.17-c758a686/sysdeps/x86/tst-xmmymmzmm.sh
+--- glibc-2.17-c758a686/sysdeps/x86/tst-xmmymmzmm.sh	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/x86/tst-xmmymmzmm.sh	2014-09-11 16:05:10.073426623 -0400
+@@ -0,0 +1,103 @@
++#! /bin/bash
++# Make sure no code in ld.so uses xmm/ymm/zmm registers on x86-64.
++# Copyright (C) 2009-2012 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
++
++objpfx="$1"
++NM="$2"
++OBJDUMP="$3"
++READELF="$4"
++
++tmp=$(mktemp ${objpfx}tst-xmmymmzmm.XXXXXX)
++trap 'rm -f "$tmp"' 1 2 3 15
++
++# List of object files we have to test
++rtldobjs=$($READELF -W -wi ${objpfx}dl-allobjs.os |
++    awk '/^ </ { if ($5 == "(DW_TAG_compile_unit)") c=1; else c=0 } $2 == "DW_AT_name" { if (c == 1) print $NF }' |
++    sed 's,\(.*/\|\)\([_[:alnum:]-]*[.]\).$,\2os,')
++rtldobjs="$rtldobjs $(ar t ${objpfx}rtld-libc.a)"
++
++# OBJECT symbols can be ignored.
++$READELF -sW ${objpfx}dl-allobjs.os ${objpfx}rtld-libc.a |
++egrep " OBJECT  *GLOBAL " |
++awk '{if ($7 != "ABS") print $8 }' |
++sort -u > "$tmp"
++declare -a objects
++objects=($(cat "$tmp"))
++
++objs="dl-runtime.os"
++tocheck="dl-runtime.os"
++
++while test -n "$objs"; do
++  this="$objs"
++  objs=""
++
++  for f in $this; do
++    undef=$($NM -u "$objpfx"../*/"$f" | awk '{print $2}')
++    if test -n "$undef"; then
++      for s in $undef; do
++	for obj in ${objects[*]} "_GLOBAL_OFFSET_TABLE_"; do
++	  if test "$obj" = "$s"; then
++	    continue 2
++	  fi
++	done
++        for o in $rtldobjs; do
++	  ro=$(echo "$objpfx"../*/"$o")
++	  if $NM -g --defined-only "$ro" | egrep -qs " $s\$"; then
++	    if ! (echo "$tocheck $objs" | fgrep -qs "$o"); then
++	      echo "$o needed for $s"
++	      objs="$objs $o"
++	    fi
++	    break;
++	  fi
++	done
++      done
++    fi
++  done
++  tocheck="$tocheck$objs"
++done
++
++echo
++echo
++echo "object files needed: $tocheck"
++
++cp /dev/null "$tmp"
++for f in $tocheck; do
++  $OBJDUMP -d "$objpfx"../*/"$f" |
++  awk 'BEGIN { last="" } /^[[:xdigit:]]* <[_[:alnum:]]*>:$/ { fct=substr($2, 2, length($2)-3) } /,%[xyz]mm[[:digit:]]*$/ { if (last != fct) { print fct; last=fct} }' |
++  while read fct; do
++    if test "$fct" = "_dl_runtime_profile" -o "$fct" = "_dl_x86_64_restore_sse"; then
++      continue;
++    fi
++    echo "function $fct in $f modifies xmm/ymm/zmm" >> "$tmp"
++    result=1
++  done
++done
++
++if test -s "$tmp"; then
++  echo
++  echo
++  cat "$tmp"
++  result=1
++else
++  result=0
++fi
++
++rm "$tmp"
++exit $result
diff --git a/SOURCES/glibc-rh1140474.patch b/SOURCES/glibc-rh1140474.patch
new file mode 100644
index 0000000..c3ce5cd
--- /dev/null
+++ b/SOURCES/glibc-rh1140474.patch
@@ -0,0 +1,154 @@
+commit 41488498b6d9440ee66ab033808cce8323bba7ac
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed Sep 3 19:45:43 2014 +0200
+
+    CVE-2014-6040: Crashes on invalid input in IBM gconv modules [BZ #17325]
+    
+    These changes are based on the fix for BZ #14134 in commit
+    6e230d11837f3ae7b375ea69d7905f0d18eb79e5.
+
+diff --git glibc-2.17-c758a686/iconvdata/Makefile glibc-2.17-c758a686/iconvdata/Makefile
+index 0a410a1..b6327d6 100644
+--- glibc-2.17-c758a686/iconvdata/Makefile
++++ glibc-2.17-c758a686/iconvdata/Makefile
+@@ -297,6 +297,7 @@ $(objpfx)tst-iconv7.out: $(objpfx)gconv-modules \
+ $(objpfx)iconv-test.out: run-iconv-test.sh $(objpfx)gconv-modules \
+ 			 $(addprefix $(objpfx),$(modules.so)) \
+ 			 $(common-objdir)/iconv/iconv_prog TESTS
++	iconv_modules="$(modules)" \
+ 	$(SHELL) $< $(common-objdir) '$(test-wrapper)' > $@
+ 
+ $(objpfx)tst-tables.out: tst-tables.sh $(objpfx)gconv-modules \
+diff --git glibc-2.17-c758a686/iconvdata/ibm1364.c glibc-2.17-c758a686/iconvdata/ibm1364.c
+index 0b5484f..cf80993 100644
+--- glibc-2.17-c758a686/iconvdata/ibm1364.c
++++ glibc-2.17-c758a686/iconvdata/ibm1364.c
+@@ -221,7 +221,8 @@ enum
+ 	  ++rp2;							      \
+ 									      \
+ 	uint32_t res;							      \
+-	if (__builtin_expect (ch < rp2->start, 0)			      \
++	if (__builtin_expect (rp2->start == 0xffff, 0)			      \
++	    || __builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = DB_TO_UCS4[ch + rp2->idx],			      \
+ 		__builtin_expect (res, L'\1') == L'\0' && ch != '\0'))	      \
+ 	  {								      \
+diff --git glibc-2.17-c758a686/iconvdata/ibm932.c glibc-2.17-c758a686/iconvdata/ibm932.c
+index f5dca59..aa69d65 100644
+--- glibc-2.17-c758a686/iconvdata/ibm932.c
++++ glibc-2.17-c758a686/iconvdata/ibm932.c
+@@ -74,11 +74,12 @@
+ 	  }								      \
+ 									      \
+ 	ch = (ch * 0x100) + inptr[1];					      \
++	/* ch was less than 0xfd.  */					      \
++	assert (ch < 0xfd00);						      \
+ 	while (ch > rp2->end)						      \
+ 	  ++rp2;							      \
+ 									      \
+-	if (__builtin_expect (rp2 == NULL, 0)				      \
+-	    || __builtin_expect (ch < rp2->start, 0)			      \
++	if (__builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = __ibm932db_to_ucs4[ch + rp2->idx],		      \
+ 	    __builtin_expect (res, '\1') == 0 && ch !=0))		      \
+ 	  {								      \
+diff --git glibc-2.17-c758a686/iconvdata/ibm933.c glibc-2.17-c758a686/iconvdata/ibm933.c
+index f46dfb5..461fb5e 100644
+--- glibc-2.17-c758a686/iconvdata/ibm933.c
++++ glibc-2.17-c758a686/iconvdata/ibm933.c
+@@ -162,7 +162,7 @@ enum
+ 	while (ch > rp2->end)						      \
+ 	  ++rp2;							      \
+ 									      \
+-	if (__builtin_expect (rp2 == NULL, 0)				      \
++	if (__builtin_expect (rp2->start == 0xffff, 0)			      \
+ 	    || __builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = __ibm933db_to_ucs4[ch + rp2->idx],		      \
+ 		__builtin_expect (res, L'\1') == L'\0' && ch != '\0'))	      \
+diff --git glibc-2.17-c758a686/iconvdata/ibm935.c glibc-2.17-c758a686/iconvdata/ibm935.c
+index a8e4e6c..132d816 100644
+--- glibc-2.17-c758a686/iconvdata/ibm935.c
++++ glibc-2.17-c758a686/iconvdata/ibm935.c
+@@ -162,7 +162,7 @@ enum
+ 	while (ch > rp2->end)						      \
+ 	  ++rp2;							      \
+ 									      \
+-	if (__builtin_expect (rp2 == NULL, 0)				      \
++	if (__builtin_expect (rp2->start == 0xffff, 0)			      \
+ 	    || __builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = __ibm935db_to_ucs4[ch + rp2->idx],		      \
+ 		__builtin_expect (res, L'\1') == L'\0' && ch != '\0'))	      \
+diff --git glibc-2.17-c758a686/iconvdata/ibm937.c glibc-2.17-c758a686/iconvdata/ibm937.c
+index 239be61..69b154d 100644
+--- glibc-2.17-c758a686/iconvdata/ibm937.c
++++ glibc-2.17-c758a686/iconvdata/ibm937.c
+@@ -162,7 +162,7 @@ enum
+ 	while (ch > rp2->end)						      \
+ 	  ++rp2;							      \
+ 									      \
+-	if (__builtin_expect (rp2 == NULL, 0)				      \
++	if (__builtin_expect (rp2->start == 0xffff, 0)			      \
+ 	    || __builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = __ibm937db_to_ucs4[ch + rp2->idx],		      \
+ 		__builtin_expect (res, L'\1') == L'\0' && ch != '\0'))	      \
+diff --git glibc-2.17-c758a686/iconvdata/ibm939.c glibc-2.17-c758a686/iconvdata/ibm939.c
+index 5d0db36..9936e2c 100644
+--- glibc-2.17-c758a686/iconvdata/ibm939.c
++++ glibc-2.17-c758a686/iconvdata/ibm939.c
+@@ -162,7 +162,7 @@ enum
+ 	while (ch > rp2->end)						      \
+ 	  ++rp2;							      \
+ 									      \
+-	if (__builtin_expect (rp2 == NULL, 0)				      \
++	if (__builtin_expect (rp2->start == 0xffff, 0)			      \
+ 	    || __builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = __ibm939db_to_ucs4[ch + rp2->idx],		      \
+ 		__builtin_expect (res, L'\1') == L'\0' && ch != '\0'))	      \
+diff --git glibc-2.17-c758a686/iconvdata/ibm943.c glibc-2.17-c758a686/iconvdata/ibm943.c
+index be0c14f..c5d5742 100644
+--- glibc-2.17-c758a686/iconvdata/ibm943.c
++++ glibc-2.17-c758a686/iconvdata/ibm943.c
+@@ -75,11 +75,12 @@
+ 	  }								      \
+ 									      \
+ 	ch = (ch * 0x100) + inptr[1];					      \
++	/* ch was less than 0xfd.  */					      \
++	assert (ch < 0xfd00);						      \
+ 	while (ch > rp2->end)						      \
+ 	  ++rp2;							      \
+ 									      \
+-	if (__builtin_expect (rp2 == NULL, 0)				      \
+-	    || __builtin_expect (ch < rp2->start, 0)			      \
++	if (__builtin_expect (ch < rp2->start, 0)			      \
+ 	    || (res = __ibm943db_to_ucs4[ch + rp2->idx],		      \
+ 	    __builtin_expect (res, '\1') == 0 && ch !=0))		      \
+ 	  {								      \
+diff --git glibc-2.17-c758a686/iconvdata/run-iconv-test.sh glibc-2.17-c758a686/iconvdata/run-iconv-test.sh
+index c98c929..5dfb69f 100755
+--- glibc-2.17-c758a686/iconvdata/run-iconv-test.sh
++++ glibc-2.17-c758a686/iconvdata/run-iconv-test.sh
+@@ -184,6 +184,24 @@ while read utf8 from filename; do
+ 
+ done < TESTS2
+ 
++# Check for crashes in decoders.
++printf '\016\377\377\377\377\377\377\377' > $temp1
++for from in $iconv_modules ; do
++    echo $ac_n "test decoder $from $ac_c"
++    PROG=`eval echo $ICONV`
++    if $PROG < $temp1 >/dev/null 2>&1 ; then
++	: # fall through
++    else
++	status=$?
++	if test $status -gt 1 ; then
++	    echo "/FAILED"
++	    failed=1
++	    continue
++	fi
++    fi
++    echo "OK"
++done
++
+ exit $failed
+ # Local Variables:
+ #  mode:shell-script
diff --git a/SOURCES/glibc-rh1144133.patch b/SOURCES/glibc-rh1144133.patch
new file mode 100644
index 0000000..abefdf7
--- /dev/null
+++ b/SOURCES/glibc-rh1144133.patch
@@ -0,0 +1,55 @@
+commit 62058ce612ed3459501b4c4332e268edfe977f59
+Author: Carlos O'Donell <carlos@redhat.com>
+Date:   Mon Sep 29 13:14:21 2014 -0400
+
+    Correctly size profiling reloc table (bug 17411)
+    
+    During auditing or profiling modes the dynamic loader
+    builds a cache of the relocated PLT entries in order
+    to reuse them when called again through the same PLT
+    entry. This way the PLT entry is never completed and
+    the call into the resolver always results in profiling
+    or auditing code running.
+    
+    The problem is that the PLT relocation cache size
+    is not computed correctly. The size of the cache
+    should be "Size of a relocation result structure"
+    x "Number of PLT-related relocations". Instead the
+    code erroneously computes "Size of a relocation
+    result" x "Number of bytes worth of PLT-related
+    relocations". I can only assume this was a mistake
+    in the understanding of the value of DT_PLTRELSZ
+    which is the number of bytes of PLT-related relocs.
+    We do have a DT_RELACOUNT entry, which is a count
+    for dynamic relative relocs, but we have no
+    DT_PLTRELCOUNT and thus we need to compute it.
+    
+    This patch corrects the computation of the size of the
+    relocation table used by the glibc profiling code.
+    
+    For more details see:
+    https://sourceware.org/ml/libc-alpha/2014-09/msg00513.html
+    
+    	[BZ #17411]
+    	* elf/dl-reloc.c (_dl_relocate_object): Allocate correct amount for
+    	l_reloc_result.
+
+diff --git glibc-2.17-c758a686/elf/dl-reloc.c glibc-2.17-c758a686/elf/dl-reloc.c
+index d2c6dac..97a7119 100644
+--- glibc-2.17-c758a686/elf/dl-reloc.c
++++ glibc-2.17-c758a686/elf/dl-reloc.c
+@@ -279,8 +279,12 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
+ 			      l->l_name);
+ 	  }
+ 
+-	l->l_reloc_result = calloc (sizeof (l->l_reloc_result[0]),
+-				    l->l_info[DT_PLTRELSZ]->d_un.d_val);
++	size_t sizeofrel = l->l_info[DT_PLTREL]->d_un.d_val == DT_RELA
++			   ? sizeof (ElfW(Rela))
++			   : sizeof (ElfW(Rel));
++	size_t relcount = l->l_info[DT_PLTRELSZ]->d_un.d_val / sizeofrel;
++	l->l_reloc_result = calloc (sizeof (l->l_reloc_result[0]), relcount);
++
+ 	if (l->l_reloc_result == NULL)
+ 	  {
+ 	    errstring = N_("\
diff --git a/SOURCES/glibc-rh1144516.patch b/SOURCES/glibc-rh1144516.patch
new file mode 100644
index 0000000..8c45e74
--- /dev/null
+++ b/SOURCES/glibc-rh1144516.patch
@@ -0,0 +1,47 @@
+commit cfa4df95003c963c16d2102aef9c806f8175f373
+Author: Marcus Shawcroft <marcus.shawcroft@linaro.org>
+Date:   Tue Sep 24 12:59:06 2013 +0100
+
+    [AArch64] Adding sigcontextinfo.h
+
+diff --git a/ports/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h b/ports/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
+new file mode 100644
+index 0000000..42ff38e
+--- /dev/null
++++ b/ports/sysdeps/unix/sysv/linux/aarch64/sigcontextinfo.h
+@@ -0,0 +1,35 @@
++/* AArch64 definitions for signal handling calling conventions.
++   Copyright (C) 1996-2013 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/ucontext.h>
++#include "kernel-features.h"
++
++#define SIGCONTEXT siginfo_t *_si, struct ucontext *
++#define GET_PC(ctx) ((void *) (ctx)->uc_mcontext.pc)
++
++/* There is no reliable way to get the sigcontext unless we use a
++   three-argument signal handler.  */
++#define __sigaction(sig, act, oact) ({ \
++  (act)->sa_flags |= SA_SIGINFO; \
++  (__sigaction) (sig, act, oact); \
++})
++
++#define sigaction(sig, act, oact) ({ \
++  (act)->sa_flags |= SA_SIGINFO; \
++  (sigaction) (sig, act, oact); \
++})
diff --git a/SOURCES/glibc-rh1150282.patch b/SOURCES/glibc-rh1150282.patch
new file mode 100644
index 0000000..59de1df
--- /dev/null
+++ b/SOURCES/glibc-rh1150282.patch
@@ -0,0 +1,515 @@
+This patch provides a compatibility kludge for legacy applications
+which do not provide proper stack alignment.  It cannot be upstreamed.
+
+The kludge is active for both i386 and x86-64, but it is actually only
+needed on i386.
+
+In Fedora, the same effect was achieved by disabling multi-arch
+altogether:
+
+  https://bugzilla.redhat.com/show_bug.cgi?id=1471427
+
+Further discussion is on this internal bug:
+
+  https://bugzilla.redhat.com/show_bug.cgi?id=1478332
+
+
+--- glibc-2.17-c758a686/sysdeps/x86_64/multiarch/ifunc-impl-list.c	2012-12-24 20:02:13.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/x86_64/multiarch/ifunc-impl-list.c	2015-04-20 09:04:11.826569951 -0600
+@@ -212,6 +212,8 @@
+ 
+   /* Support sysdeps/x86_64/multiarch/strstr-c.c.  */
+   IFUNC_IMPL (i, name, strstr,
++	      IFUNC_IMPL_ADD (array, i, strstr, use_unaligned_strstr (),
++			      __strstr_sse2_unaligned)
+ 	      IFUNC_IMPL_ADD (array, i, strstr, HAS_SSE4_2, __strstr_sse42)
+ 	      IFUNC_IMPL_ADD (array, i, strstr, 1, __strstr_sse2))
+ 
+--- glibc-2.17-c758a686/sysdeps/x86_64/multiarch/init-arch.h	2012-12-24 20:02:13.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/x86_64/multiarch/init-arch.h	2015-04-20 12:15:17.984742925 -0600
+@@ -63,6 +63,34 @@
+ #else	/* __ASSEMBLER__ */
+ 
+ # include <sys/param.h>
++# include <sys/types.h>
++# include <sysdep.h>
++# include <stdbool.h>
++
++/* Ugly hack to make it possible to select a strstr and strcasestr
++   implementation that avoids using the stack for 16-byte aligned
++   SSE temporaries.  Doing so makes it possible to call the functions
++   with a stack that's not 16-byte aligned as can happen, for example,
++   as a result of compiling the functions' callers with the GCC
++   -mpreferred-stack-boubdary=2 or =3 option, or with the ICC
++   -falign-stack=assume-4-byte option.  See rhbz 1150282 for details.
++
++   The ifunc selector uses the unaligned version by default if this
++   file exists and is accessible.  */
++# define ENABLE_STRSTR_UNALIGNED_PATHNAME \
++    "/etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned"
++
++static bool __attribute__ ((unused))
++use_unaligned_strstr (void)
++{
++  struct stat unaligned_strstr_etc_sysconfig_file;
++
++  /* TLS may not have been set up yet, so avoid using stat since it tries to
++     set errno.  */
++  return INTERNAL_SYSCALL (stat, , 2,
++                           ENABLE_STRSTR_UNALIGNED_PATHNAME,
++                           &unaligned_strstr_etc_sysconfig_file) == 0;
++}
+ 
+ enum
+   {
+--- glibc-2.17-c758a686/sysdeps/x86_64/multiarch/Makefile	2012-12-24 20:02:13.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/x86_64/multiarch/Makefile	2015-04-20 09:04:11.854569626 -0600
+@@ -17,7 +17,7 @@
+ 		   strcat-sse2-unaligned strncat-sse2-unaligned \
+ 		   strcat-ssse3 strncat-ssse3 strlen-sse2-pminub \
+ 		   strnlen-sse2-no-bsf strrchr-sse2-no-bsf strchr-sse2-no-bsf \
+-		   memcmp-ssse3
++		   memcmp-ssse3 strstr-sse2-unaligned
+ ifeq (yes,$(config-cflags-sse4))
+ sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c varshift
+ CFLAGS-varshift.c += -msse4
+--- glibc-2.17-c758a686/sysdeps/x86_64/multiarch/strcasestr-c.c	2012-12-24 20:02:13.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/x86_64/multiarch/strcasestr-c.c	2015-04-20 09:04:11.861569545 -0600
+@@ -12,7 +12,8 @@
+ 
+ #if 1
+ libc_ifunc (__strcasestr,
+-	    HAS_SSE4_2 ? __strcasestr_sse42 : __strcasestr_sse2);
++	    HAS_SSE4_2 && !use_unaligned_strstr () ? __strcasestr_sse42 :
++	    __strcasestr_sse2);
+ #else
+ libc_ifunc (__strcasestr,
+ 	    0 ? __strcasestr_sse42 : __strcasestr_sse2);
+--- glibc-2.17-c758a686/sysdeps/x86_64/multiarch/strstr-c.c	2012-12-24 20:02:13.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/x86_64/multiarch/strstr-c.c	2015-04-20 09:04:11.866569487 -0600
+@@ -34,6 +34,7 @@
+ #include "string/strstr.c"
+ 
+ extern __typeof (__redirect_strstr) __strstr_sse42 attribute_hidden;
++extern __typeof (__redirect_strstr) __strstr_sse2_unaligned attribute_hidden;
+ extern __typeof (__redirect_strstr) __strstr_sse2 attribute_hidden;
+ 
+ #include "init-arch.h"
+@@ -41,7 +42,9 @@
+ /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
+    ifunc symbol properly.  */
+ extern __typeof (__redirect_strstr) __libc_strstr;
+-libc_ifunc (__libc_strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_sse2)
++libc_ifunc (__libc_strstr, HAS_SSE4_2 ? (use_unaligned_strstr () ?
++					 __strstr_sse2_unaligned :
++					 __strstr_sse42) : __strstr_sse2)
+ 
+ #undef strstr
+ strong_alias (__libc_strstr, strstr)
+--- glibc-2.17-c758a686/sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/x86_64/multiarch/strstr-sse2-unaligned.S	2015-04-20 09:04:11.866569487 -0600
+@@ -0,0 +1,374 @@
++/* strstr with unaligned loads
++   Copyright (C) 2009-2015 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 <sysdep.h>
++
++ENTRY(__strstr_sse2_unaligned)
++	movzbl	(%rsi), %eax
++	testb	%al, %al
++	je	L(empty)
++	movzbl	1(%rsi), %edx
++	testb	%dl, %dl
++	je	L(strchr)
++	movd	%eax, %xmm1
++	movd	%edx, %xmm2
++	movq	%rdi, %rax
++	andl	$4095, %eax
++	punpcklbw	%xmm1, %xmm1
++	cmpq	$4031, %rax
++	punpcklbw	%xmm2, %xmm2
++	punpcklwd	%xmm1, %xmm1
++	punpcklwd	%xmm2, %xmm2
++	pshufd	$0, %xmm1, %xmm1
++	pshufd	$0, %xmm2, %xmm2
++	ja	L(cross_page)
++	movdqu	(%rdi), %xmm3
++	pxor	%xmm5, %xmm5
++	movdqu	1(%rdi), %xmm4
++	movdqa	%xmm3, %xmm6
++	pcmpeqb	%xmm1, %xmm3
++	pcmpeqb	%xmm2, %xmm4
++	movdqu	16(%rdi), %xmm0
++	pcmpeqb	%xmm5, %xmm6
++	pminub	%xmm4, %xmm3
++	movdqa	%xmm3, %xmm4
++	movdqu	17(%rdi), %xmm3
++	pcmpeqb	%xmm0, %xmm5
++	pcmpeqb	%xmm2, %xmm3
++	por	%xmm6, %xmm4
++	pcmpeqb	%xmm1, %xmm0
++	pminub	%xmm3, %xmm0
++	por	%xmm5, %xmm0
++	pmovmskb	%xmm4, %r8d
++	pmovmskb	%xmm0, %eax
++	salq	$16, %rax
++	orq	%rax, %r8
++	je	L(next_32_bytes)
++L(next_pair_index):
++	bsf	%r8, %rax
++	addq	%rdi, %rax
++	cmpb	$0, (%rax)
++	je	L(zero1)
++	movzbl	2(%rsi), %edx
++	testb	%dl, %dl
++	je	L(found1)
++	cmpb	2(%rax), %dl
++	jne	L(next_pair)
++	xorl	%edx, %edx
++	jmp	L(pair_loop_start)
++
++	.p2align 4
++L(strchr):
++	movzbl	%al, %esi
++	jmp	__strchr_sse2
++
++	.p2align 4
++L(pair_loop):
++	addq	$1, %rdx
++	cmpb	2(%rax,%rdx), %cl
++	jne	L(next_pair)
++L(pair_loop_start):
++	movzbl	3(%rsi,%rdx), %ecx
++	testb	%cl, %cl
++	jne	L(pair_loop)
++L(found1):
++	ret
++L(zero1):
++	xorl	%eax, %eax
++	ret
++
++	.p2align 4
++L(next_pair):
++	leaq	-1(%r8), %rax
++	andq	%rax, %r8
++	jne	L(next_pair_index)
++
++	.p2align 4
++L(next_32_bytes):
++	movdqu	32(%rdi), %xmm3
++	pxor	%xmm5, %xmm5
++	movdqu	33(%rdi), %xmm4
++	movdqa	%xmm3, %xmm6
++	pcmpeqb	%xmm1, %xmm3
++	pcmpeqb	%xmm2, %xmm4
++	movdqu	48(%rdi), %xmm0
++	pcmpeqb	%xmm5, %xmm6
++	pminub	%xmm4, %xmm3
++	movdqa	%xmm3, %xmm4
++	movdqu	49(%rdi), %xmm3
++	pcmpeqb	%xmm0, %xmm5
++	pcmpeqb	%xmm2, %xmm3
++	por	%xmm6, %xmm4
++	pcmpeqb	%xmm1, %xmm0
++	pminub	%xmm3, %xmm0
++	por	%xmm5, %xmm0
++	pmovmskb	%xmm4, %eax
++	salq	$32, %rax
++	pmovmskb	%xmm0, %r8d
++	salq	$48, %r8
++	orq	%rax, %r8
++	je	L(loop_header)
++L(next_pair2_index):
++	bsfq	%r8, %rax
++	addq	%rdi, %rax
++	cmpb	$0, (%rax)
++	je	L(zero2)
++	movzbl	2(%rsi), %edx
++	testb	%dl, %dl
++	je	L(found2)
++	cmpb	2(%rax), %dl
++	jne	L(next_pair2)
++	xorl	%edx, %edx
++	jmp	L(pair_loop2_start)
++
++	.p2align 4
++L(pair_loop2):
++	addq	$1, %rdx
++	cmpb	2(%rax,%rdx), %cl
++	jne	L(next_pair2)
++L(pair_loop2_start):
++	movzbl	3(%rsi,%rdx), %ecx
++	testb	%cl, %cl
++	jne	L(pair_loop2)
++L(found2):
++	ret
++	L(zero2):
++	xorl	%eax, %eax
++	ret
++L(empty):
++	mov %rdi, %rax
++	ret
++
++	.p2align 4
++L(next_pair2):
++	leaq	-1(%r8), %rax
++	andq	%rax, %r8
++	jne	L(next_pair2_index)
++L(loop_header):
++	movq	$-512, %r11
++	movq	%rdi, %r9
++
++	pxor	%xmm7, %xmm7
++	andq	$-64, %rdi
++
++	.p2align 4
++L(loop):
++	movdqa	64(%rdi), %xmm3
++	movdqu	63(%rdi), %xmm6
++	movdqa	%xmm3, %xmm0
++	pxor	%xmm2, %xmm3
++	pxor	%xmm1, %xmm6
++	movdqa	80(%rdi), %xmm10
++	por	%xmm3, %xmm6
++	pminub	%xmm10, %xmm0
++	movdqu	79(%rdi), %xmm3
++	pxor	%xmm2, %xmm10
++	pxor	%xmm1, %xmm3
++	movdqa	96(%rdi), %xmm9
++	por	%xmm10, %xmm3
++	pminub	%xmm9, %xmm0
++	pxor	%xmm2, %xmm9
++	movdqa	112(%rdi), %xmm8
++	addq	$64, %rdi
++	pminub	%xmm6, %xmm3
++	movdqu	31(%rdi), %xmm4
++	pminub	%xmm8, %xmm0
++	pxor	%xmm2, %xmm8
++	pxor	%xmm1, %xmm4
++	por	%xmm9, %xmm4
++	pminub	%xmm4, %xmm3
++	movdqu	47(%rdi), %xmm5
++	pxor	%xmm1, %xmm5
++	por	%xmm8, %xmm5
++	pminub	%xmm5, %xmm3
++	pminub	%xmm3, %xmm0
++	pcmpeqb	%xmm7, %xmm0
++	pmovmskb	%xmm0, %eax
++	testl	%eax, %eax
++	je	L(loop)
++	pminub (%rdi), %xmm6
++	pminub 32(%rdi),%xmm4
++	pminub 48(%rdi),%xmm5
++	pcmpeqb %xmm7, %xmm6
++	pcmpeqb %xmm7, %xmm5
++	pmovmskb	%xmm6, %edx
++	movdqa	16(%rdi), %xmm8
++	pcmpeqb %xmm7, %xmm4
++	movdqu  15(%rdi), %xmm0
++	pmovmskb	%xmm5, %r8d
++	movdqa  %xmm8, %xmm3
++	pmovmskb	%xmm4, %ecx
++	pcmpeqb %xmm1,%xmm0
++	pcmpeqb %xmm2,%xmm3
++	salq	$32, %rcx
++	pcmpeqb %xmm7,%xmm8
++	salq	$48, %r8
++	pminub  %xmm0,%xmm3
++	orq	%rcx, %rdx
++	por	%xmm3,%xmm8
++	orq	%rdx, %r8
++	pmovmskb	%xmm8, %eax
++	salq	$16, %rax
++	orq	%rax, %r8
++	je	L(loop)
++L(next_pair_index3):
++	bsfq	%r8, %rcx
++	addq	%rdi, %rcx
++	cmpb	$0, (%rcx)
++	je	L(zero)
++	xorl	%eax, %eax
++	movzbl	2(%rsi), %edx
++	testb	%dl, %dl
++	je	L(success3)
++	cmpb	1(%rcx), %dl
++	jne	L(next_pair3)
++	jmp	L(pair_loop_start3)
++
++	.p2align 4
++L(pair_loop3):
++	addq	$1, %rax
++	cmpb	1(%rcx,%rax), %dl
++	jne	L(next_pair3)
++L(pair_loop_start3):
++	movzbl	3(%rsi,%rax), %edx
++	testb	%dl, %dl
++	jne	L(pair_loop3)
++L(success3):
++	lea	-1(%rcx), %rax
++	ret
++
++	.p2align 4
++L(next_pair3):
++	addq	%rax, %r11
++	movq	%rdi,  %rax
++	subq	%r9, %rax
++	cmpq	%r11, %rax
++	jl	L(switch_strstr)
++	leaq	-1(%r8), %rax
++	andq	%rax, %r8
++	jne	L(next_pair_index3)
++	jmp	L(loop)
++
++	.p2align 4
++L(switch_strstr):
++	movq	%rdi, %rdi
++	jmp	__strstr_sse2
++
++	.p2align 4
++L(cross_page):
++
++	movq	%rdi, %rax
++	pxor	%xmm0, %xmm0
++	andq	$-64, %rax
++	movdqa	(%rax), %xmm3
++	movdqu	-1(%rax), %xmm4
++	movdqa	%xmm3, %xmm8
++	movdqa	16(%rax), %xmm5
++	pcmpeqb	%xmm1, %xmm4
++	pcmpeqb	%xmm0, %xmm8
++	pcmpeqb	%xmm2, %xmm3
++	movdqa	%xmm5, %xmm7
++	pminub	%xmm4, %xmm3
++	movdqu	15(%rax), %xmm4
++	pcmpeqb	%xmm0, %xmm7
++	por	%xmm3, %xmm8
++	movdqa	%xmm5, %xmm3
++	movdqa	32(%rax), %xmm5
++	pcmpeqb	%xmm1, %xmm4
++	pcmpeqb	%xmm2, %xmm3
++	movdqa	%xmm5, %xmm6
++	pmovmskb	%xmm8, %ecx
++	pminub	%xmm4, %xmm3
++	movdqu	31(%rax), %xmm4
++	por	%xmm3, %xmm7
++	movdqa	%xmm5, %xmm3
++	pcmpeqb	%xmm0, %xmm6
++	movdqa	48(%rax), %xmm5
++	pcmpeqb	%xmm1, %xmm4
++	pmovmskb	%xmm7, %r8d
++	pcmpeqb	%xmm2, %xmm3
++	pcmpeqb	%xmm5, %xmm0
++	pminub	%xmm4, %xmm3
++	movdqu	47(%rax), %xmm4
++	por	%xmm3, %xmm6
++	movdqa	%xmm5, %xmm3
++	salq	$16, %r8
++	pcmpeqb	%xmm1, %xmm4
++	pcmpeqb	%xmm2, %xmm3
++	pmovmskb	%xmm6, %r10d
++	pminub	%xmm4, %xmm3
++	por	%xmm3, %xmm0
++	salq	$32, %r10
++	orq	%r10, %r8
++	orq	%rcx, %r8
++	movl	%edi, %ecx
++	pmovmskb	%xmm0, %edx
++	subl	%eax, %ecx
++	salq	$48, %rdx
++	orq	%rdx, %r8
++	shrq	%cl, %r8
++	je	L(loop_header)
++L(next_pair_index4):
++	bsfq	%r8, %rax
++	addq	%rdi, %rax
++	cmpb	$0, (%rax)
++	je	L(zero)
++
++	cmpq	%rax,%rdi
++	je	L(next_pair4)
++
++	movzbl	2(%rsi), %edx
++	testb	%dl, %dl
++	je	L(found3)
++	cmpb	1(%rax), %dl
++	jne	L(next_pair4)
++	xorl	%edx, %edx
++	jmp	L(pair_loop_start4)
++
++	.p2align 4
++L(pair_loop4):
++	addq	$1, %rdx
++	cmpb	1(%rax,%rdx), %cl
++	jne	L(next_pair4)
++L(pair_loop_start4):
++	movzbl	3(%rsi,%rdx), %ecx
++	testb	%cl, %cl
++	jne	L(pair_loop4)
++L(found3):
++	subq $1, %rax
++	ret
++
++	.p2align 4
++L(next_pair4):
++	leaq	-1(%r8), %rax
++	andq	%rax, %r8
++	jne	L(next_pair_index4)
++	jmp	L(loop_header)
++
++	.p2align 4
++L(found):
++	rep
++	ret
++
++	.p2align 4
++L(zero):
++	xorl	%eax, %eax
++	ret
++
++
++END(__strstr_sse2_unaligned)
+--- glibc-2.17-c758a686/sysdeps/i386/i686/multiarch/strstr-c.c	2012-12-24 20:02:13.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/i386/i686/multiarch/strstr-c.c	2015-04-20 09:04:11.876569371 -0600
+@@ -1,8 +1,6 @@
+ /* Multiple versions of strstr
+    All versions must be listed in ifunc-impl-list.c.  */
+ 
+-#include "init-arch.h"
+-
+ #define STRSTR __strstr_ia32
+ #if defined SHARED && defined DO_VERSIONING && !defined NO_HIDDEN
+ #undef libc_hidden_builtin_def
+@@ -17,13 +15,17 @@
+ 
+ #include "string/strstr.c"
+ 
++#include "init-arch.h"
++
+ extern __typeof (__redirect_strstr) __strstr_sse42 attribute_hidden;
+ extern __typeof (__redirect_strstr) __strstr_ia32 attribute_hidden;
+ 
+ /* Avoid DWARF definition DIE on ifunc symbol so that GDB can handle
+    ifunc symbol properly.  */
+ extern __typeof (__redirect_strstr) __libc_strstr;
+-libc_ifunc (__libc_strstr, HAS_SSE4_2 ? __strstr_sse42 : __strstr_ia32)
++libc_ifunc (__libc_strstr,
++	    HAS_SSE4_2 && !use_unaligned_strstr () ?
++	    __strstr_sse42 : __strstr_ia32)
+ 
+ #undef strstr
+ strong_alias (__libc_strstr, strstr)
diff --git a/SOURCES/glibc-rh1156331.patch b/SOURCES/glibc-rh1156331.patch
new file mode 100644
index 0000000..39ea469
--- /dev/null
+++ b/SOURCES/glibc-rh1156331.patch
@@ -0,0 +1,202 @@
+commit be349d7042de84c3c5157a5c1fbcad580aed33e1
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Dec 4 08:08:37 2014 +0530
+
+    ftell: seek to end only when there are unflushed bytes (BZ #17647)
+    
+    Currently we seek to end of file if there are unflushed writes or the
+    stream is in write mode, to get the current offset for writing in
+    append mode, which is the end of file.  The latter case (i.e. stream
+    is in write mode, but no unflushed writes) is unnecessary since it
+    will only happen when the stream has just been flushed, in which case
+    the recorded offset ought to be reliable.
+    
+    Removing that case lets ftell give the correct offset when it follows
+    an ftruncate.  The latter truncates the file, but does not change the
+    file position, due to which it is permissible to call ftell without an
+    intervening fseek call.
+    
+    Tested on x86_64 to verify that the added test case fails without the
+    patch and succeeds with it, and that there are no additional
+    regressions due to it.
+    
+            [BZ #17647]
+            * libio/fileops.c (do_ftell): Seek only when there are
+            unflushed writes.
+            * libio/wfileops.c (do_ftell_wide): Likewise.
+            * libio/tst-ftell-active-handler.c (do_ftruncate_test): New
+            test case.
+            (do_one_test): Call it.
+
+diff --git glibc-2.17-c758a686/libio/fileops.c glibc-2.17-c758a686/libio/fileops.c
+index e0d7b76..1fc5719 100644
+--- glibc-2.17-c758a686/libio/fileops.c
++++ glibc-2.17-c758a686/libio/fileops.c
+@@ -943,15 +943,14 @@ do_ftell (_IO_FILE *fp)
+      yet.  */
+   if (fp->_IO_buf_base != NULL)
+     {
+-      bool was_writing = (fp->_IO_write_ptr > fp->_IO_write_base
+-			  || _IO_in_put_mode (fp));
++      bool unflushed_writes = (fp->_IO_write_ptr > fp->_IO_write_base);
+ 
+       bool append_mode = (fp->_flags & _IO_IS_APPENDING) == _IO_IS_APPENDING;
+ 
+       /* When we have unflushed writes in append mode, seek to the end of the
+ 	 file and record that offset.  This is the only time we change the file
+ 	 stream state and it is safe since the file handle is active.  */
+-      if (was_writing && append_mode)
++      if (unflushed_writes && append_mode)
+ 	{
+ 	  result = _IO_SYSSEEK (fp, 0, _IO_seek_end);
+ 	  if (result == _IO_pos_BAD)
+@@ -961,7 +960,7 @@ do_ftell (_IO_FILE *fp)
+ 	}
+ 
+       /* Adjust for unflushed data.  */
+-      if (!was_writing)
++      if (!unflushed_writes)
+ 	offset -= fp->_IO_read_end - fp->_IO_read_ptr;
+       /* We don't trust _IO_read_end to represent the current file offset when
+ 	 writing in append mode because the value would have to be shifted to
+diff --git glibc-2.17-c758a686/libio/tst-ftell-active-handler.c glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
+index e9dc7b3..9f23c55 100644
+--- glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
++++ glibc-2.17-c758a686/libio/tst-ftell-active-handler.c
+@@ -88,6 +88,95 @@ static size_t file_len;
+ typedef int (*fputs_func_t) (const void *data, FILE *fp);
+ fputs_func_t fputs_func;
+ 
++/* This test verifies that the offset reported by ftell is correct after the
++   file is truncated using ftruncate.  ftruncate does not change the file
++   offset on truncation and hence, SEEK_CUR should continue to point to the
++   old offset and not be changed to the new offset.  */
++static int
++do_ftruncate_test (const char *filename)
++{
++  FILE *fp = NULL;
++  int fd;
++  int ret = 0;
++  struct test
++    {
++      const char *mode;
++      int fd_mode;
++    } test_modes[] = {
++	  {"r+", O_RDWR},
++	  {"w", O_WRONLY},
++	  {"w+", O_RDWR},
++	  {"a", O_WRONLY},
++	  {"a+", O_RDWR}
++    };
++
++  for (int j = 0; j < 2; j++)
++    {
++      for (int i = 0; i < sizeof (test_modes) / sizeof (struct test); i++)
++	{
++	  int fileret;
++	  printf ("\tftruncate: %s (file, \"%s\"): ",
++		  j == 0 ? "fopen" : "fdopen",
++		  test_modes[i].mode);
++
++	  if (j == 0)
++	    fileret = get_handles_fopen (filename, fd, fp, test_modes[i].mode);
++	  else
++	    fileret = get_handles_fdopen (filename, fd, fp,
++					  test_modes[i].fd_mode,
++					  test_modes[i].mode);
++
++	  if (fileret != 0)
++	    return fileret;
++
++	  /* Write some data.  */
++	  size_t written = fputs_func (data, fp);
++
++	  if (written == EOF)
++	    {
++	      printf ("fputs[1] failed to write data\n");
++	      ret |= 1;
++	    }
++
++	  /* Record the offset.  */
++	  long offset = ftell (fp);
++
++	  /* Flush data to allow switching active handles.  */
++	  if (fflush (fp))
++	    {
++	      printf ("Flush failed: %m\n");
++	      ret |= 1;
++	    }
++
++	  /* Now truncate the file.  */
++	  if (ftruncate (fd, 0) != 0)
++	    {
++	      printf ("Failed to truncate file: %m\n");
++	      ret |= 1;
++	    }
++
++	  /* ftruncate does not change the offset, so there is no need to call
++	     anything to be able to switch active handles.  */
++	  long new_offset = ftell (fp);
++
++	  /* The offset should remain unchanged since ftruncate does not update
++	     it.  */
++	  if (offset != new_offset)
++	    {
++	      printf ("Incorrect offset.  Expected %zu, but got %ld\n",
++		      offset, new_offset);
++
++	      ret |= 1;
++	    }
++	  else
++	    printf ("offset = %ld\n", offset);
++
++	  fclose (fp);
++	}
++    }
++
++  return ret;
++}
+ /* Test that ftell output after a rewind is correct.  */
+ static int
+ do_rewind_test (const char *filename)
+@@ -481,6 +570,7 @@ do_one_test (const char *filename)
+   ret |= do_write_test (filename);
+   ret |= do_append_test (filename);
+   ret |= do_rewind_test (filename);
++  ret |= do_ftruncate_test (filename);
+ 
+   return ret;
+ }
+diff --git glibc-2.17-c758a686/libio/wfileops.c glibc-2.17-c758a686/libio/wfileops.c
+index 6a088b1..71281c1 100644
+--- glibc-2.17-c758a686/libio/wfileops.c
++++ glibc-2.17-c758a686/libio/wfileops.c
+@@ -626,16 +626,15 @@ do_ftell_wide (_IO_FILE *fp)
+       const wchar_t *wide_read_base;
+       const wchar_t *wide_read_ptr;
+       const wchar_t *wide_read_end;
+-      bool was_writing = ((fp->_wide_data->_IO_write_ptr
+-			   > fp->_wide_data->_IO_write_base)
+-			  || _IO_in_put_mode (fp));
++      bool unflushed_writes = (fp->_wide_data->_IO_write_ptr
++			       > fp->_wide_data->_IO_write_base);
+ 
+       bool append_mode = (fp->_flags & _IO_IS_APPENDING) == _IO_IS_APPENDING;
+ 
+       /* When we have unflushed writes in append mode, seek to the end of the
+ 	 file and record that offset.  This is the only time we change the file
+ 	 stream state and it is safe since the file handle is active.  */
+-      if (was_writing && append_mode)
++      if (unflushed_writes && append_mode)
+ 	{
+ 	  result = _IO_SYSSEEK (fp, 0, _IO_seek_end);
+ 	  if (result == _IO_pos_BAD)
+@@ -674,7 +673,7 @@ do_ftell_wide (_IO_FILE *fp)
+       struct _IO_codecvt *cv = fp->_codecvt;
+       int clen = (*cv->__codecvt_do_encoding) (cv);
+ 
+-      if (!was_writing)
++      if (!unflushed_writes)
+ 	{
+ 	  if (clen > 0)
+ 	    {
diff --git a/SOURCES/glibc-rh1159169.patch b/SOURCES/glibc-rh1159169.patch
new file mode 100644
index 0000000..7c1453d
--- /dev/null
+++ b/SOURCES/glibc-rh1159169.patch
@@ -0,0 +1,42 @@
+commit ed6b0fe710b631b99ed9fc28cefedfe69a16dc55
+Author: Brad Hubbard <bhubbard@redhat.com>
+Date:   Wed Mar 18 14:51:26 2015 +0530
+
+    Use calloc to allocate xports (BZ #17542)
+    
+    If xports is NULL in xprt_register we malloc it but if sock >
+    _rpc_dtablesize() that memory does not get initialised and may in theory
+    contain any value. Later we make a conditional jump in svc_getreq_common
+    based on the uninitialised memory and this caused a general protection
+    fault in rpc.statd on an older version of glibc but this code has not
+    changed since that version.
+    
+    Following is the valgrind warning.
+    
+    ==26802== Conditional jump or move depends on uninitialised value(s)
+    ==26802==    at 0x5343A25: svc_getreq_common (in /lib64/libc-2.5.so)
+    ==26802==    by 0x534357B: svc_getreqset (in /lib64/libc-2.5.so)
+    ==26802==    by 0x10DE1F: ??? (in /sbin/rpc.statd)
+    ==26802==    by 0x10D0EF: main (in /sbin/rpc.statd)
+    ==26802==  Uninitialised value was created by a heap allocation
+    ==26802==    at 0x4C2210C: malloc (vg_replace_malloc.c:195)
+    ==26802==    by 0x53438BE: xprt_register (in /lib64/libc-2.5.so)
+    ==26802==    by 0x53450DF: svcudp_bufcreate (in /lib64/libc-2.5.so)
+    ==26802==    by 0x10FE32: ??? (in /sbin/rpc.statd)
+    ==26802==    by 0x10D13E: main (in /sbin/rpc.statd)
+
+diff --git glibc-2.17-c758a686/sunrpc/svc.c glibc-2.17-c758a686/sunrpc/svc.c
+index 8c4e8a5..c6ccf10 100644
+--- glibc-2.17-c758a686/sunrpc/svc.c
++++ glibc-2.17-c758a686/sunrpc/svc.c
+@@ -97,8 +97,8 @@ xprt_register (SVCXPRT *xprt)
+ 
+   if (xports == NULL)
+     {
+-      xports = (SVCXPRT **) malloc (_rpc_dtablesize () * sizeof (SVCXPRT *));
+-      if (xports == NULL) /* Don�t add handle */
++      xports = (SVCXPRT **) calloc (_rpc_dtablesize (), sizeof (SVCXPRT *));
++      if (xports == NULL) /* Don't add handle */
+ 	return;
+     }
+ 
diff --git a/SOURCES/glibc-rh1161666.patch b/SOURCES/glibc-rh1161666.patch
new file mode 100644
index 0000000..5285181
--- /dev/null
+++ b/SOURCES/glibc-rh1161666.patch
@@ -0,0 +1,125 @@
+commit 533bb7c2ae156ff2d49b2e0b20b33810ba5e2721
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Wed Nov 12 19:30:24 2014 +0530
+
+    Fix stack alignment when loader is invoked directly
+    
+    The s390 ABI requires the stack pointer to be aligned at 8-bytes.
+    When a program is invoked as an argument to the dynamic linker,
+    _dl_start_user adjusts the stack to remove the dynamic linker
+    arguments so that the program sees only its name and arguments.  This
+    may result in the stack being misaligned since each argument shift is
+    only a word and not a double-word.
+    
+    This is now fixed shifting argv and envp down instead of shifting argc
+    up and reclaiming the stack.  This requires _dl_argv to be adjusted
+    and hence, is no longer relro.
+
+diff --git glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-machine.h glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-machine.h
+index c56185c..79f8ef9 100644
+--- glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-machine.h
++++ glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-machine.h
+@@ -166,18 +166,49 @@ _dl_start_user:\n\
+ 	# See if we were run as a command with the executable file\n\
+ 	# name as an extra leading argument.\n\
+ 	l     %r1,_dl_skip_args@GOT12(0,%r12)\n\
+-	l     %r1,0(%r1)          # load _dl_skip_args\n\
++	l     %r1,0(%r1)	# load _dl_skip_args\n\
++	ltr   %r1,%r1\n\
++	je    .L4		# Skip the arg adjustment if there were none.\n\
+ 	# Get the original argument count.\n\
+ 	l     %r0,96(%r15)\n\
+ 	# Subtract _dl_skip_args from it.\n\
+ 	sr    %r0,%r1\n\
+-	# Adjust the stack pointer to skip _dl_skip_args words.\n\
+-	sll   %r1,2\n\
+-	ar    %r15,%r1\n\
+-	# Set the back chain to zero again\n\
+-	xc    0(4,%r15),0(%r15)\n\
+ 	# Store back the modified argument count.\n\
+ 	st    %r0,96(%r15)\n\
++	# Copy argv and envp forward to account for skipped argv entries.\n\
++	# We skipped at least one argument or we would not get here.\n\
++	la    %r6,100(%r15)	# Destination pointer i.e. &argv[0]\n\
++	lr    %r5,%r6\n\
++	lr    %r0,%r1\n\
++	sll   %r0,2\n		# Number of skipped bytes.\n\
++	ar    %r5,%r0		# Source pointer = Dest + Skipped args.\n\
++	# argv copy loop:\n\
++.L1:	l     %r7,0(%r5)	# Load a word from the source.\n\
++	st    %r7,0(%r6)	# Store the word in the destination.\n\
++	ahi   %r5,4\n\
++	ahi   %r6,4\n\
++	ltr   %r7,%r7\n\
++	jne   .L1		# Stop after copying the NULL.\n\
++	# envp copy loop:\n\
++.L2:	l     %r7,0(%r5)	# Load a word from the source.\n\
++	st    %r7,0(%r6)	# Store the word in the destination.\n\
++	ahi   %r5,4\n\
++	ahi   %r6,4\n\
++	ltr   %r7,%r7\n\
++	jne   .L2		# Stop after copying the NULL.\n\
++	# Now we have to zero out the envp entries after NULL to allow\n\
++	# start.S to properly find auxv by skipping zeroes.\n\
++	# zero out loop:\n\
++	lhi   %r7,0\n\
++.L3:	st    %r7,0(%r6)	# Store zero.\n\
++	ahi   %r6,4		# Advance dest pointer.\n\
++	ahi   %r1,-1		# Subtract one from the word count.\n\
++	ltr   %r1,%r1\n\
++	jne    .L3		# Keep copying if the word count is non-zero.\n\
++	# Adjust _dl_argv\n\
++	la    %r6,100(%r15)\n\
++	l     %r1,_dl_argv@GOT12(0,%r12)\n\
++	st    %r6,0(%r1)\n\
+ 	# The special initializer gets called with the stack just\n\
+ 	# as the application's entry point will see it; it can\n\
+ 	# switch stacks if it moves these contents over.\n\
+@@ -185,7 +216,7 @@ _dl_start_user:\n\
+ 	# Call the function to run the initializers.\n\
+ 	# Load the parameters:\n\
+ 	# (%r2, %r3, %r4, %r5) = (_dl_loaded, argc, argv, envp)\n\
+-	l     %r2,_rtld_local@GOT(%r12)\n\
++.L4:	l     %r2,_rtld_local@GOT(%r12)\n\
+ 	l     %r2,0(%r2)\n\
+ 	l     %r3,96(%r15)\n\
+ 	la    %r4,100(%r15)\n\
+@@ -198,6 +229,9 @@ _dl_start_user:\n\
+ 	l     %r14,_dl_fini@GOT(%r12)\n\
+ 	# Free stack frame\n\
+ 	ahi   %r15,96\n\
++	# Reload argc and argv for the user's entry point.\n\
++	# l     %r2,0(%r15)\n\
++	# la    %r3,4(%r15)\n\
+ 	# Jump to the user's entry point (saved in %r8).\n\
+ 	br    %r8\n\
+ .Llit:\n\
+diff --git glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-sysdep.h glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-sysdep.h
+new file mode 100644
+index 0000000..b992778
+--- /dev/null
++++ glibc-2.17-c758a686/sysdeps/s390/s390-32/dl-sysdep.h
+@@ -0,0 +1,23 @@
++/* System-specific settings for dynamic linker code.  S/390 version.
++   Copyright (C) 2014 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_next <dl-sysdep.h>
++
++/* _dl_argv cannot be attribute_relro, because _dl_start_user
++   might write into it after _dl_start returns.  */
++#define DL_ARGV_NOT_RELRO 1
diff --git a/SOURCES/glibc-rh1162847-p1.patch b/SOURCES/glibc-rh1162847-p1.patch
new file mode 100644
index 0000000..eab2afe
--- /dev/null
+++ b/SOURCES/glibc-rh1162847-p1.patch
@@ -0,0 +1,104 @@
+#
+# commit f8e3e9f31bfd71641418897228fa1732170b69cc
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Thu Oct 3 13:51:52 2013 +0930
+# 
+#     Correct little-endian relocation of UADDR64,32,16.
+# 
+#         * sysdeps/powerpc/powerpc32/dl-machine.c (__process_machine_rela):
+#         Correct handling of unaligned relocs for little-endian.
+#         * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela): Likewise.
+# 
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c	2014-11-11 18:51:36.140570654 -0500
+@@ -423,6 +423,12 @@
+ 			Elf32_Addr const finaladdr,
+ 			int rinfo)
+ {
++  union unaligned
++    {
++      unsigned u2 __attribute__ ((mode (HI)));
++      unsigned u4 __attribute__ ((mode (SI)));
++    } __attribute__((__packed__));
++
+   switch (rinfo)
+     {
+     case R_PPC_NONE:
+@@ -439,10 +445,7 @@
+       return;
+ 
+     case R_PPC_UADDR32:
+-      ((char *) reloc_addr)[0] = finaladdr >> 24;
+-      ((char *) reloc_addr)[1] = finaladdr >> 16;
+-      ((char *) reloc_addr)[2] = finaladdr >> 8;
+-      ((char *) reloc_addr)[3] = finaladdr;
++      ((union unaligned *) reloc_addr)->u4 = finaladdr;
+       break;
+ 
+     case R_PPC_ADDR24:
+@@ -460,8 +463,7 @@
+     case R_PPC_UADDR16:
+       if (__builtin_expect (finaladdr > 0x7fff && finaladdr < 0xffff8000, 0))
+ 	_dl_reloc_overflow (map,  "R_PPC_UADDR16", reloc_addr, refsym);
+-      ((char *) reloc_addr)[0] = finaladdr >> 8;
+-      ((char *) reloc_addr)[1] = finaladdr;
++      ((union unaligned *) reloc_addr)->u2 = finaladdr;
+       break;
+ 
+     case R_PPC_ADDR16_LO:
+diff -urN glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h	2014-11-11 18:51:36.141570651 -0500
+@@ -561,6 +561,12 @@
+   Elf64_Addr *const reloc_addr = reloc_addr_arg;
+   const int r_type = ELF64_R_TYPE (reloc->r_info);
+   const Elf64_Sym *const refsym = sym;
++  union unaligned
++    {
++      unsigned u2 __attribute__ ((mode (HI)));
++      unsigned u4 __attribute__ ((mode (SI)));
++      unsigned u8 __attribute__ ((mode (DI)));
++    } __attribute__((__packed__));
+ 
+   if (r_type == R_PPC64_RELATIVE)
+     {
+@@ -742,23 +748,11 @@
+       return;
+ 
+     case R_PPC64_UADDR64:
+-      /* We are big-endian.  */
+-      ((char *) reloc_addr_arg)[0] = (value >> 56) & 0xff;
+-      ((char *) reloc_addr_arg)[1] = (value >> 48) & 0xff;
+-      ((char *) reloc_addr_arg)[2] = (value >> 40) & 0xff;
+-      ((char *) reloc_addr_arg)[3] = (value >> 32) & 0xff;
+-      ((char *) reloc_addr_arg)[4] = (value >> 24) & 0xff;
+-      ((char *) reloc_addr_arg)[5] = (value >> 16) & 0xff;
+-      ((char *) reloc_addr_arg)[6] = (value >> 8) & 0xff;
+-      ((char *) reloc_addr_arg)[7] = (value >> 0) & 0xff;
++      ((union unaligned *) reloc_addr)->u8 = value;
+       return;
+ 
+     case R_PPC64_UADDR32:
+-      /* We are big-endian.  */
+-      ((char *) reloc_addr_arg)[0] = (value >> 24) & 0xff;
+-      ((char *) reloc_addr_arg)[1] = (value >> 16) & 0xff;
+-      ((char *) reloc_addr_arg)[2] = (value >> 8) & 0xff;
+-      ((char *) reloc_addr_arg)[3] = (value >> 0) & 0xff;
++      ((union unaligned *) reloc_addr)->u4 = value;
+       return;
+ 
+     case R_PPC64_ADDR32:
+@@ -782,10 +776,8 @@
+     case R_PPC64_UADDR16:
+       if (dont_expect ((value + 0x8000) >= 0x10000))
+ 	_dl_reloc_overflow (map, "R_PPC64_UADDR16", reloc_addr, refsym);
+-      /* We are big-endian.  */
+-      ((char *) reloc_addr_arg)[0] = (value >> 8) & 0xff;
+-      ((char *) reloc_addr_arg)[1] = (value >> 0) & 0xff;
+-      break;
++      ((union unaligned *) reloc_addr)->u2 = value;
++      return;
+ 
+     case R_PPC64_ADDR16_DS:
+       if (dont_expect ((value + 0x8000) >= 0x10000 || (value & 3) != 0))
diff --git a/SOURCES/glibc-rh1162847-p2.patch b/SOURCES/glibc-rh1162847-p2.patch
new file mode 100644
index 0000000..9c67ab6
--- /dev/null
+++ b/SOURCES/glibc-rh1162847-p2.patch
@@ -0,0 +1,45 @@
+#
+# commit 4cb81307b3771672864fa3a7498bd39c13267a00
+# Author: Alan Modra <amodra@gmail.com>
+# Date:   Fri Oct 4 12:48:51 2013 +0930
+# 
+#     Use stdint.h types in union unaligned.
+# 
+#         * sysdeps/powerpc/powerpc32/dl-machine.c (__process_machine_rela):
+#         Use stdint types in rather than __attribute__((mode())).
+#         * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela): Likewise.
+# 
+diff --git glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c
+index f81899a..aba3618 100644
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc32/dl-machine.c
+@@ -418,8 +418,8 @@ __process_machine_rela (struct link_map *map,
+ {
+   union unaligned
+     {
+-      unsigned u2 __attribute__ ((mode (HI)));
+-      unsigned u4 __attribute__ ((mode (SI)));
++      uint16_t u2;
++      uint32_t u4;
+     } __attribute__((__packed__));
+ 
+   switch (rinfo)
+diff --git glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+index b69a1ce..18cf157 100644
+--- glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
++++ glibc-2.17-c758a686/sysdeps/powerpc/powerpc64/dl-machine.h
+@@ -563,10 +563,10 @@ elf_machine_rela (struct link_map *map,
+   const Elf64_Sym *const refsym = sym;
+   union unaligned
+     {
+-      unsigned u2 __attribute__ ((mode (HI)));
+-      unsigned u4 __attribute__ ((mode (SI)));
+-      unsigned u8 __attribute__ ((mode (DI)));
+-    } __attribute__((__packed__));
++      uint16_t u2;
++      uint32_t u4;
++      uint64_t u8;
++    } __attribute__ ((__packed__));
+ 
+   if (r_type == R_PPC64_RELATIVE)
+     {
diff --git a/SOURCES/glibc-rh1162895-1.patch b/SOURCES/glibc-rh1162895-1.patch
new file mode 100644
index 0000000..12594d7
--- /dev/null
+++ b/SOURCES/glibc-rh1162895-1.patch
@@ -0,0 +1,23 @@
+commit f6c44d475104e931bab2b4ffa499961088de673c
+Author: Alan Modra <amodra@gmail.com>
+Date:   Mon Jul 14 21:14:50 2014 +0930
+
+    Correct DT_PPC64_NUM
+    
+    	[BZ #17153]
+    	* elf/elf.h (DT_PPC64_NUM): Correct value.
+    	* NEWS: Add to fixed bug list.
+
+diff --git glibc-2.17-c758a686/elf/elf.h glibc-2.17-c758a686/elf/elf.h
+index 40e87b2..78815e8 100644
+--- glibc-2.17-c758a686/elf/elf.h
++++ glibc-2.17-c758a686/elf/elf.h
+@@ -2283,7 +2283,7 @@ typedef Elf32_Addr Elf32_Conflict;
+ #define DT_PPC64_OPD	(DT_LOPROC + 1)
+ #define DT_PPC64_OPDSZ	(DT_LOPROC + 2)
+ #define DT_PPC64_OPT	(DT_LOPROC + 3)
+-#define DT_PPC64_NUM    3
++#define DT_PPC64_NUM    4
+ 
+ /* PowerPC64 specific values for the DT_PPC64_OPT Dyn entry.  */
+ #define PPC64_OPT_TLS		1
diff --git a/SOURCES/glibc-rh1162895-2.patch b/SOURCES/glibc-rh1162895-2.patch
new file mode 100644
index 0000000..0844319
--- /dev/null
+++ b/SOURCES/glibc-rh1162895-2.patch
@@ -0,0 +1,200 @@
+commit aa5f0ff11ad2cc85277c64cf65c723a9664e1149
+Author: Alan Modra <amodra@gmail.com>
+Date:   Wed Apr 16 19:33:32 2014 +0930
+
+    Correct IBM long double frexpl.
+    
+    Besides fixing the bugzilla, this also fixes corner-cases where the high
+    and low double differ greatly in magnitude, and handles a denormal
+    input without resorting to a fp rescale.
+    
+    	[BZ #16740]
+    	[BZ #16619]
+    	* sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Rewrite.
+    	* math/libm-test.inc (frexp_test_data): Add tests.
+
+diff --git glibc-2.17-c758a686/math/libm-test.inc glibc-2.17-c758a686/math/libm-test.inc
+index 5e6789f..a4bf0b8 100644
+--- glibc-2.17-c758a686/math/libm-test.inc
++++ glibc-2.17-c758a686/math/libm-test.inc
+@@ -5691,6 +5691,15 @@ frexp_test (void)
+   TEST_fI_f1 (frexp, 12.8L, 0.8L, 4);
+   TEST_fI_f1 (frexp, -27.34L, -0.854375L, 5);
+ 
++#if defined TEST_LDOUBLE && LDBL_MANT_DIG >= 106
++  TEST_fI_f1 (frexp, 1.0L-0x1p-106L, 1.0L-0x1p-106L, 0),
++  TEST_fI_f1 (frexp, 1.0L, 0.5L, 1),
++  TEST_fI_f1 (frexp, 1.0L+0x1p-105L, 0.5L+0x1p-106L, 1),
++  TEST_fI_f1 (frexp, -1.0L+0x1p-106L, -1.0L+0x1p-106L, 0),
++  TEST_fI_f1 (frexp, -1.0L, -0.5L, 1),
++  TEST_fI_f1 (frexp, -1.0L-0x1p-105L, -0.5L-0x1p-106L, 1),
++#endif
++
+   END (frexp);
+ }
+ 
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c	2015-06-16 15:37:44.293960271 -0400
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_frexpl.c	2015-06-16 13:53:25.578700428 -0400
+@@ -31,57 +31,115 @@
+ #include <math_private.h>
+ #include <math_ldbl_opt.h>
+ 
+-static const long double
+-two107 = 162259276829213363391578010288128.0; /* 0x4670000000000000, 0 */
+-
+ long double __frexpl(long double x, int *eptr)
+ {
+-	uint64_t hx, lx, ix, ixl;
+-	int64_t explo;
+-	double xhi, xlo;
+-
+-	ldbl_unpack (x, &xhi, &xlo);
+-	EXTRACT_WORDS64 (hx, xhi);
+-	EXTRACT_WORDS64 (lx, xlo);
+-	ixl = 0x7fffffffffffffffULL&lx;
+-	ix =  0x7fffffffffffffffULL&hx;
+-	*eptr = 0;
+-	if(ix>=0x7ff0000000000000ULL||ix==0) return x;	/* 0,inf,nan */
+-	if (ix<0x0010000000000000ULL) {		/* subnormal */
+-	    x *= two107;
+-	    xhi = ldbl_high (x);
+-	    EXTRACT_WORDS64 (hx, xhi);
+-	    ix = hx&0x7fffffffffffffffULL;
+-	    *eptr = -107;
++  uint64_t hx, lx, ix, ixl;
++  int64_t explo, expon;
++  double xhi, xlo;
++
++  ldbl_unpack (x, &xhi, &xlo);
++  EXTRACT_WORDS64 (hx, xhi);
++  EXTRACT_WORDS64 (lx, xlo);
++  ixl = 0x7fffffffffffffffULL & lx;
++  ix  = 0x7fffffffffffffffULL & hx;
++  expon = 0;
++  if (ix >= 0x7ff0000000000000ULL || ix == 0)
++    {
++      /* 0,inf,nan.  */
++      *eptr = expon;
++      return x;
++    }
++  expon = ix >> 52;
++  if (expon == 0)
++    {
++      /* Denormal high double, the low double must be 0.0.  */
++      int cnt;
++
++      /* Normalize.  */
++      if (sizeof (ix) == sizeof (long))
++	cnt = __builtin_clzl (ix);
++      else if ((ix >> 32) != 0)
++	cnt = __builtin_clzl ((long) (ix >> 32));
++      else
++	cnt = __builtin_clzl ((long) ix) + 32;
++      cnt = cnt - 12;
++      expon -= cnt;
++      ix <<= cnt + 1;
++    }
++  expon -= 1022;
++  ix &= 0x000fffffffffffffULL;
++  hx &= 0x8000000000000000ULL;
++  hx |= (1022LL << 52) | ix;
++
++  if (ixl != 0)
++    {
++      /* If the high double is an exact power of two and the low
++	 double has the opposite sign, then the exponent calculated
++	 from the high double is one too big.  */
++      if (ix == 0
++	  && (int64_t) (hx ^ lx) < 0)
++	{
++	  hx += 1LL << 52;
++	  expon -= 1;
++	}
++
++      explo = ixl >> 52;
++      if (explo == 0)
++	{
++	  /* The low double started out as a denormal.  Normalize its
++	     mantissa and adjust the exponent.  */
++	  int cnt;
++
++	  if (sizeof (ixl) == sizeof (long))
++	    cnt = __builtin_clzl (ixl);
++	  else if ((ixl >> 32) != 0)
++	    cnt = __builtin_clzl ((long) (ixl >> 32));
++	  else
++	    cnt = __builtin_clzl ((long) ixl) + 32;
++	  cnt = cnt - 12;
++	  explo -= cnt;
++	  ixl <<= cnt + 1;
++	}
++
++      /* With variable precision we can't assume much about the
++	 magnitude of the returned low double.  It may even be a
++	 denormal.  */
++      explo -= expon;
++      ixl &= 0x000fffffffffffffULL;
++      lx  &= 0x8000000000000000ULL;
++      if (explo <= 0)
++	{
++	  /* Handle denormal low double.  */
++	  if (explo > -52)
++	    {
++	      ixl |= 1LL << 52;
++	      ixl >>= 1 - explo;
++	    }
++	  else
++	    {
++	      ixl = 0;
++	      lx = 0;
++	      if ((hx & 0x7ff0000000000000ULL) == (1023LL << 52))
++		{
++		  /* Oops, the adjustment we made above for values a
++		     little smaller than powers of two turned out to
++		     be wrong since the returned low double will be
++		     zero.  This can happen if the input was
++		     something weird like 0x1p1000 - 0x1p-1000.  */
++		  hx -= 1LL << 52;
++		  expon += 1;
++		}
++	    }
++	  explo = 0;
+ 	}
+-	*eptr += (ix>>52)-1022;
++      lx |= (explo << 52) | ixl;
++    }
+ 
+-	if (ixl != 0ULL) {
+-	  explo = (ixl>>52) - (ix>>52) + 0x3fe;
+-	  if ((ixl&0x7ff0000000000000ULL) == 0LL) {
+-	    /* the lower double is a denormal so we need to correct its
+-	       mantissa and perhaps its exponent.  */
+-	    int cnt;
+-
+-	    if (sizeof (ixl) == sizeof (long))
+-	      cnt = __builtin_clzl (ixl);
+-	    else if ((ixl >> 32) != 0)
+-	      cnt = __builtin_clzl ((long) (ixl >> 32));
+-	    else
+-	      cnt = __builtin_clzl ((long) ixl) + 32;
+-	    cnt = cnt - 12;
+-	    lx = (lx&0x8000000000000000ULL) | ((explo-cnt)<<52)
+-	       | ((ixl<<(cnt+1))&0x000fffffffffffffULL);
+-	  } else
+-	    lx = (lx&0x800fffffffffffffULL) | (explo<<52);
+-	} else
+-	  lx = 0ULL;
+-
+-	hx = (hx&0x800fffffffffffffULL) | 0x3fe0000000000000ULL;
+-	INSERT_WORDS64 (xhi, hx);
+-	INSERT_WORDS64 (xlo, lx);
+-	x = ldbl_pack (xhi, xlo);
+-	return x;
++  INSERT_WORDS64 (xhi, hx);
++  INSERT_WORDS64 (xlo, lx);
++  x = ldbl_pack (xhi, xlo);
++  *eptr = expon;
++  return x;
+ }
+ #ifdef IS_IN_libm
+ long_double_symbol (libm, __frexpl, frexpl);
diff --git a/SOURCES/glibc-rh1162895-3.patch b/SOURCES/glibc-rh1162895-3.patch
new file mode 100644
index 0000000..e9bfbfa
--- /dev/null
+++ b/SOURCES/glibc-rh1162895-3.patch
@@ -0,0 +1,123 @@
+commit b0abbc21034f0e5edc49023d8fda0616173faf17
+Author: Alan Modra <amodra@gmail.com>
+Date:   Wed Apr 2 13:46:19 2014 +1030
+
+    Correct IBM long double nextafterl.
+    
+    Fix for values near a power of two, and some tidies.
+    
+    	[BZ #16739]
+    	* sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c (__nextafterl): Correct
+    	output when value is near a power of two.  Use int64_t for lx and
+    	remove casts.  Use decimal rather than hex exponent constants.
+    	Don't use long double multiplication when double will suffice.
+    	* math/libm-test.inc (nextafter_test_data): Add tests.
+    	* NEWS: Add 16739 and 16786 to bug list.
+
+diff --git glibc-2.17-c758a686/math/libm-test.inc glibc-2.17-c758a686/math/libm-test.inc
+index 19194f6..967b679 100644
+--- glibc-2.17-c758a686/math/libm-test.inc
++++ glibc-2.17-c758a686/math/libm-test.inc
+@@ -8199,6 +8208,14 @@ pow_test (void)
+ #if defined TEST_DOUBLE || defined TEST_LDOUBLE
+   TEST_ff_f (pow, -7.49321e+133, -9.80818e+16, 0, UNDERFLOW_EXCEPTION);
+ #endif
++#if defined TEST_LDOUBLE && LDBL_MANT_DIG == 106
++    TEST_ff_f (nextafter, 1.0L, -10.0L, 1.0L-0x1p-106L, NO_EXCEPTION),
++    TEST_ff_f (nextafter, 1.0L, 10.0L, 1.0L+0x1p-105L, NO_EXCEPTION),
++    TEST_ff_f (nextafter, 1.0L-0x1p-106L, 10.0L, 1.0L, NO_EXCEPTION),
++    TEST_ff_f (nextafter, -1.0L, -10.0L, -1.0L-0x1p-105L, NO_EXCEPTION),
++    TEST_ff_f (nextafter, -1.0L, 10.0L, -1.0L+0x1p-106L, NO_EXCEPTION),
++    TEST_ff_f (nextafter, -1.0L+0x1p-106L, -10.0L, -1.0L, NO_EXCEPTION),
++#endif
+ 
+   TEST_ff_f (pow, -1.0, -0xffffff, -1.0);
+   TEST_ff_f (pow, -1.0, -0x1fffffe, 1.0);
+diff --git glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
+index 30b1540..bf57cb8 100644
+--- glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
++++ glibc-2.17-c758a686/sysdeps/ieee754/ldbl-128ibm/s_nextafterl.c
+@@ -30,8 +30,7 @@ static char rcsid[] = "$NetBSD: $";
+ 
+ long double __nextafterl(long double x, long double y)
+ {
+-	int64_t hx,hy,ihx,ihy;
+-	uint64_t lx;
++	int64_t hx, hy, ihx, ihy, lx;
+ 	double xhi, xlo, yhi;
+ 
+ 	ldbl_unpack (x, &xhi, &xlo);
+@@ -79,19 +78,28 @@ long double __nextafterl(long double x, long double y)
+ 	      u = math_opt_barrier (x);
+ 	      x -= __LDBL_DENORM_MIN__;
+ 	      if (ihx < 0x0360000000000000LL
+-		  || (hx > 0 && (int64_t) lx <= 0)
+-		  || (hx < 0 && (int64_t) lx > 1)) {
++		  || (hx > 0 && lx <= 0)
++		  || (hx < 0 && lx > 1)) {
+ 		u = u * u;
+ 		math_force_eval (u);		/* raise underflow flag */
+ 	      }
+ 	      return x;
+ 	    }
+-	    if (ihx < 0x06a0000000000000LL) { /* ulp will denormal */
+-	      INSERT_WORDS64 (yhi, hx & (0x7ffLL<<52));
+-	      u = yhi;
+-	      u *= 0x1.0000000000000p-105L;
++	    /* If the high double is an exact power of two and the low
++	       double is the opposite sign, then 1ulp is one less than
++	       what we might determine from the high double.  Similarly
++	       if X is an exact power of two, and positive, because
++	       making it a little smaller will result in the exponent
++	       decreasing by one and normalisation of the mantissa.   */
++	    if ((hx & 0x000fffffffffffffLL) == 0
++		&& ((lx != 0 && (hx ^ lx) < 0)
++		    || (lx == 0 && hx >= 0)))
++	      ihx -= 1LL << 52;
++	    if (ihx < (106LL << 52)) { /* ulp will denormal */
++	      INSERT_WORDS64 (yhi, ihx & (0x7ffLL<<52));
++	      u = yhi * 0x1p-105;
+ 	    } else {
+-	      INSERT_WORDS64 (yhi, (hx & (0x7ffLL<<52))-(0x069LL<<52));
++	      INSERT_WORDS64 (yhi, (ihx & (0x7ffLL<<52))-(105LL<<52));
+ 	      u = yhi;
+ 	    }
+ 	    return x - u;
+@@ -109,8 +117,8 @@ long double __nextafterl(long double x, long double y)
+ 	      u = math_opt_barrier (x);
+ 	      x += __LDBL_DENORM_MIN__;
+ 	      if (ihx < 0x0360000000000000LL
+-		  || (hx > 0 && (int64_t) lx < 0 && lx != 0x8000000000000001LL)
+-		  || (hx < 0 && (int64_t) lx >= 0)) {
++		  || (hx > 0 && lx < 0 && lx != 0x8000000000000001LL)
++		  || (hx < 0 && lx >= 0)) {
+ 		u = u * u;
+ 		math_force_eval (u);		/* raise underflow flag */
+ 	      }
+@@ -118,12 +126,21 @@ long double __nextafterl(long double x, long double y)
+ 		x = -0.0L;
+ 	      return x;
+ 	    }
+-	    if (ihx < 0x06a0000000000000LL) { /* ulp will denormal */
+-	      INSERT_WORDS64 (yhi, hx & (0x7ffLL<<52));
+-	      u = yhi;
+-	      u *= 0x1.0000000000000p-105L;
++	    /* If the high double is an exact power of two and the low
++	       double is the opposite sign, then 1ulp is one less than
++	       what we might determine from the high double.  Similarly
++	       if X is an exact power of two, and negative, because
++	       making it a little larger will result in the exponent
++	       decreasing by one and normalisation of the mantissa.   */
++	    if ((hx & 0x000fffffffffffffLL) == 0
++		&& ((lx != 0 && (hx ^ lx) < 0)
++		    || (lx == 0 && hx < 0)))
++	      ihx -= 1LL << 52;
++	    if (ihx < (106LL << 52)) { /* ulp will denormal */
++	      INSERT_WORDS64 (yhi, ihx & (0x7ffLL<<52));
++	      u = yhi * 0x1p-105;
+ 	    } else {
+-	      INSERT_WORDS64 (yhi, (hx & (0x7ffLL<<52))-(0x069LL<<52));
++	      INSERT_WORDS64 (yhi, (ihx & (0x7ffLL<<52))-(105LL<<52));
+ 	      u = yhi;
+ 	    }
+ 	    return x + u;
diff --git a/SOURCES/glibc-rh1163509-1.patch b/SOURCES/glibc-rh1163509-1.patch
new file mode 100644
index 0000000..c8cd366
--- /dev/null
+++ b/SOURCES/glibc-rh1163509-1.patch
@@ -0,0 +1,834 @@
+Note: The __pthread_once definition in the new unified implementation in
+this patch has been edited. The original version of the patch had an old
+style declaration that was causing a -Werror=old-style-definition failure.
+
+commit 36875b06e0ed7f137190b9228bef553adfc338ba
+Author: Torvald Riegel <triegel@redhat.com>
+Date:   Wed May 8 16:35:10 2013 +0200
+
+    Fixed and unified pthread_once.
+    
+    [BZ #15215] This unifies various pthread_once architecture-specific
+    implementations which were using the same algorithm with slightly different
+    implementations.  It also adds missing memory barriers that are required for
+    correctness.
+
+diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/pthread_once.c
+new file mode 100644
+index 0000000000000000..2684b660958361d4
+--- /dev/null
++++ b/nptl/sysdeps/unix/sysv/linux/pthread_once.c
+@@ -0,0 +1,129 @@
++/* Copyright (C) 2003-2014 Free Software Foundation, Inc.
++   This file is part of the GNU C Library.
++   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
++
++   The GNU C Library is free software; you can redistribute it and/or
++   modify it under the terms of the GNU Lesser General Public
++   License as published by the Free Software Foundation; either
++   version 2.1 of the License, or (at your option) any later version.
++
++   The GNU C Library is distributed in the hope that it will be useful,
++   but WITHOUT ANY WARRANTY; without even the implied warranty of
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
++   Lesser General Public License for more details.
++
++   You should have 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 "pthreadP.h"
++#include <lowlevellock.h>
++#include <atomic.h>
++
++
++unsigned long int __fork_generation attribute_hidden;
++
++
++static void
++clear_once_control (void *arg)
++{
++  pthread_once_t *once_control = (pthread_once_t *) arg;
++
++  /* Reset to the uninitialized state here.  We don't need a stronger memory
++     order because we do not need to make any other of our writes visible to
++     other threads that see this value: This function will be called if we
++     get interrupted (see __pthread_once), so all we need to relay to other
++     threads is the state being reset again.  */
++  *once_control = 0;
++  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
++}
++
++
++/* This is similar to a lock implementation, but we distinguish between three
++   states: not yet initialized (0), initialization finished (2), and
++   initialization in progress (__fork_generation | 1).  If in the first state,
++   threads will try to run the initialization by moving to the second state;
++   the first thread to do so via a CAS on once_control runs init_routine,
++   other threads block.
++   When forking the process, some threads can be interrupted during the second
++   state; they won't be present in the forked child, so we need to restart
++   initialization in the child.  To distinguish an in-progress initialization
++   from an interrupted initialization (in which case we need to reclaim the
++   lock), we look at the fork generation that's part of the second state: We
++   can reclaim iff it differs from the current fork generation.
++   XXX: This algorithm has an ABA issue on the fork generation: If an
++   initialization is interrupted, we then fork 2^30 times (30 bits of
++   once_control are used for the fork generation), and try to initialize
++   again, we can deadlock because we can't distinguish the in-progress and
++   interrupted cases anymore.  */
++int
++__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
++{
++  while (1)
++    {
++      int oldval, val, newval;
++
++      /* We need acquire memory order for this load because if the value
++         signals that initialization has finished, we need to be see any
++         data modifications done during initialization.  */
++      val = *once_control;
++      atomic_read_barrier();
++      do
++	{
++	  /* Check if the initialization has already been done.  */
++	  if (__glibc_likely ((val & 2) != 0))
++	    return 0;
++
++	  oldval = val;
++	  /* We try to set the state to in-progress and having the current
++	     fork generation.  We don't need atomic accesses for the fork
++	     generation because it's immutable in a particular process, and
++	     forked child processes start with a single thread that modified
++	     the generation.  */
++	  newval = __fork_generation | 1;
++	  /* We need acquire memory order here for the same reason as for the
++	     load from once_control above.  */
++	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
++						     oldval);
++	}
++      while (__glibc_unlikely (val != oldval));
++
++      /* Check if another thread already runs the initializer.	*/
++      if ((oldval & 1) != 0)
++	{
++	  /* Check whether the initializer execution was interrupted by a
++	     fork.  We know that for both values, bit 0 is set and bit 1 is
++	     not.  */
++	  if (oldval == newval)
++	    {
++	      /* Same generation, some other thread was faster. Wait.  */
++	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
++	      continue;
++	    }
++	}
++
++      /* This thread is the first here.  Do the initialization.
++	 Register a cleanup handler so that in case the thread gets
++	 interrupted the initialization can be restarted.  */
++      pthread_cleanup_push (clear_once_control, once_control);
++
++      init_routine ();
++
++      pthread_cleanup_pop (0);
++
++
++      /* Mark *once_control as having finished the initialization.  We need
++         release memory order here because we need to synchronize with other
++         threads that want to use the initialized data.  */
++      atomic_write_barrier();
++      *once_control = 2;
++
++      /* Wake up all other threads.  */
++      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
++      break;
++    }
++
++  return 0;
++}
++weak_alias (__pthread_once, pthread_once)
++hidden_def (__pthread_once)
+diff --git a/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c
+deleted file mode 100644
+index a2111756374174f2..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/sparc/pthread_once.c
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-int
+-__pthread_once (once_control, init_routine)
+-     pthread_once_t *once_control;
+-     void (*init_routine) (void);
+-{
+-  while (1)
+-    {
+-      int oldval, val, newval;
+-
+-      val = *once_control;
+-      do
+-	{
+-	  /* Check if the initialized has already been done.  */
+-	  if ((val & 2) != 0)
+-	    return 0;
+-
+-	  oldval = val;
+-	  newval = (oldval & 3) | __fork_generation | 1;
+-	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+-						     oldval);
+-	}
+-      while (__builtin_expect (val != oldval, 0));
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted
+-	     by a fork.	 */
+-	  if (((oldval ^ newval) & -4) == 0)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Add one to *once_control.  */
+-      atomic_increment (once_control);
+-
+-      /* Wake up all other threads.  */
+-      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c
+deleted file mode 100644
+index 0897e1e004ef3278..0000000000000000
+--- a/sysdeps/unix/sysv/linux/aarch64/nptl/pthread_once.c
++++ /dev/null
+@@ -1,90 +0,0 @@
+-/* Copyright (C) 2004-2012 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  for (;;)
+-    {
+-      int oldval;
+-      int newval;
+-
+-      /* Pseudo code:
+-	 newval = __fork_generation | 1;
+-	 oldval = *once_control;
+-	 if ((oldval & 2) == 0)
+-	   *once_control = newval;
+-	 Do this atomically.
+-      */
+-      do
+-	{
+-	  newval = __fork_generation | 1;
+-	  oldval = *once_control;
+-	  if (oldval & 2)
+-	    break;
+-	} while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
+-
+-      /* Check if the initializer has already been done.  */
+-      if ((oldval & 2) != 0)
+-	return 0;
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) == 0)
+-	break;
+-
+-      /* Check whether the initializer execution was interrupted by a fork.  */
+-      if (oldval != newval)
+-	break;
+-
+-      /* Same generation, some other thread was faster. Wait.  */
+-      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+-    }
+-
+-  /* This thread is the first here.  Do the initialization.
+-     Register a cleanup handler so that in case the thread gets
+-     interrupted the initialization can be restarted.  */
+-  pthread_cleanup_push (clear_once_control, once_control);
+-
+-  init_routine ();
+-
+-  pthread_cleanup_pop (0);
+-
+-  /* Say that the initialisation is done.  */
+-  *once_control = __fork_generation | 2;
+-
+-  /* Wake up all other threads.  */
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c
+deleted file mode 100644
+index 0c03f1c816a2fad5..0000000000000000
+--- a/sysdeps/unix/sysv/linux/arm/nptl/pthread_once.c
++++ /dev/null
+@@ -1,89 +0,0 @@
+-/* Copyright (C) 2004-2012 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  for (;;)
+-    {
+-      int oldval;
+-      int newval;
+-
+-      /* Pseudo code:
+-	 newval = __fork_generation | 1;
+-	 oldval = *once_control;
+-	 if ((oldval & 2) == 0)
+-	   *once_control = newval;
+-	 Do this atomically.
+-      */
+-      do
+-	{
+-	  newval = __fork_generation | 1;
+-	  oldval = *once_control;
+-	  if (oldval & 2)
+-	    break;
+-	} while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
+-
+-      /* Check if the initializer has already been done.  */
+-      if ((oldval & 2) != 0)
+-	return 0;
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) == 0)
+-	break;
+-
+-      /* Check whether the initializer execution was interrupted by a fork.  */
+-      if (oldval != newval)
+-	break;
+-
+-      /* Same generation, some other thread was faster. Wait.  */
+-      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+-    }
+-
+-  /* This thread is the first here.  Do the initialization.
+-     Register a cleanup handler so that in case the thread gets
+-     interrupted the initialization can be restarted.  */
+-  pthread_cleanup_push (clear_once_control, once_control);
+-
+-  init_routine ();
+-
+-  pthread_cleanup_pop (0);
+-
+-  /* Say that the initialisation is done.  */
+-  *once_control = __fork_generation | 2;
+-
+-  /* Wake up all other threads.  */
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/ia64/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/ia64/nptl/pthread_once.c
+deleted file mode 100644
+index 7730935dfec85ae6..0000000000000000
+--- a/sysdeps/unix/sysv/linux/ia64/nptl/pthread_once.c
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-int
+-__pthread_once (once_control, init_routine)
+-     pthread_once_t *once_control;
+-     void (*init_routine) (void);
+-{
+-  while (1)
+-    {
+-      int oldval, val, newval;
+-
+-      val = *once_control;
+-      do
+-	{
+-	  /* Check if the initialized has already been done.  */
+-	  if ((val & 2) != 0)
+-	    return 0;
+-
+-	  oldval = val;
+-	  newval = (oldval & 3) | __fork_generation | 1;
+-	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+-						     oldval);
+-	}
+-      while (__builtin_expect (val != oldval, 0));
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted
+-	     by a fork.	 */
+-	  if (((oldval ^ newval) & -4) == 0)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Add one to *once_control.  */
+-      atomic_increment (once_control);
+-
+-      /* Wake up all other threads.  */
+-      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/m68k/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/m68k/nptl/pthread_once.c
+deleted file mode 100644
+index 8d81db602eee601f..0000000000000000
+--- a/sysdeps/unix/sysv/linux/m68k/nptl/pthread_once.c
++++ /dev/null
+@@ -1,90 +0,0 @@
+-/* Copyright (C) 2010-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Maxim Kuvyrkov <maxim@codesourcery.com>, 2010.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  for (;;)
+-    {
+-      int oldval;
+-      int newval;
+-
+-      /* Pseudo code:
+-	 newval = __fork_generation | 1;
+-	 oldval = *once_control;
+-	 if ((oldval & 2) == 0)
+-	   *once_control = newval;
+-	 Do this atomically.
+-      */
+-      do
+-	{
+-	  newval = __fork_generation | 1;
+-	  oldval = *once_control;
+-	  if (oldval & 2)
+-	    break;
+-	} while (atomic_compare_and_exchange_val_acq (once_control, newval, oldval) != oldval);
+-
+-      /* Check if the initializer has already been done.  */
+-      if ((oldval & 2) != 0)
+-	return 0;
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) == 0)
+-	break;
+-
+-      /* Check whether the initializer execution was interrupted by a fork.  */
+-      if (oldval != newval)
+-	break;
+-
+-      /* Same generation, some other thread was faster. Wait.  */
+-      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+-    }
+-
+-  /* This thread is the first here.  Do the initialization.
+-     Register a cleanup handler so that in case the thread gets
+-     interrupted the initialization can be restarted.  */
+-  pthread_cleanup_push (clear_once_control, once_control);
+-
+-  init_routine ();
+-
+-  pthread_cleanup_pop (0);
+-
+-  /* Say that the initialisation is done.  */
+-  *once_control = __fork_generation | 2;
+-
+-  /* Wake up all other threads.  */
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c
+deleted file mode 100644
+index 308da8bbce0c3800..0000000000000000
+--- a/sysdeps/unix/sysv/linux/mips/nptl/pthread_once.c
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-int
+-__pthread_once (once_control, init_routine)
+-     pthread_once_t *once_control;
+-     void (*init_routine) (void);
+-{
+-  while (1)
+-    {
+-      int oldval, val, newval;
+-
+-      val = *once_control;
+-      do
+-	{
+-	  /* Check if the initialized has already been done.  */
+-	  if ((val & 2) != 0)
+-	    return 0;
+-
+-	  oldval = val;
+-	  newval = (oldval & 3) | __fork_generation | 1;
+-	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+-						     oldval);
+-	}
+-      while (__builtin_expect (val != oldval, 0));
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted
+-	     by a fork.	 */
+-	  if (((oldval ^ newval) & -4) == 0)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Add one to *once_control.  */
+-      atomic_increment (once_control);
+-
+-      /* Wake up all other threads.  */
+-      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c
+deleted file mode 100644
+index 93ac29b24c440b2c..0000000000000000
+--- a/sysdeps/unix/sysv/linux/tile/nptl/pthread_once.c
++++ /dev/null
+@@ -1,94 +0,0 @@
+-/* Copyright (C) 2011-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Chris Metcalf <cmetcalf@tilera.com>, 2011.
+-   Based on work contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 <nptl/pthreadP.h>
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-int
+-__pthread_once (once_control, init_routine)
+-     pthread_once_t *once_control;
+-     void (*init_routine) (void);
+-{
+-  while (1)
+-    {
+-      int oldval, val, newval;
+-
+-      val = *once_control;
+-      do
+-	{
+-	  /* Check if the initialized has already been done.  */
+-	  if ((val & 2) != 0)
+-	    return 0;
+-
+-	  oldval = val;
+-	  newval = (oldval & 3) | __fork_generation | 1;
+-	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+-						     oldval);
+-	}
+-      while (__builtin_expect (val != oldval, 0));
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted
+-	     by a fork.	 */
+-	  if (((oldval ^ newval) & -4) == 0)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Add one to *once_control.  */
+-      atomic_increment (once_control);
+-
+-      /* Wake up all other threads.  */
+-      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
diff --git a/SOURCES/glibc-rh1163509-2.patch b/SOURCES/glibc-rh1163509-2.patch
new file mode 100644
index 0000000..78284d0
--- /dev/null
+++ b/SOURCES/glibc-rh1163509-2.patch
@@ -0,0 +1,294 @@
+This patch is based on the below upstream commit.
+It only includes relevant pthread_once bits.
+
+commit 08192659bbeae149e7cb1f4c43547257f7099bb0
+Author: Roland McGrath <roland@hack.frob.com>
+Date:   Mon Jul 7 09:28:38 2014 -0700
+
+    Get rid of nptl/sysdeps/ entirely!
+
+diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
+index ed1ea3498c397e5c..10c01d6023508e3c 100644
+--- a/nptl/pthread_once.c
++++ b/nptl/pthread_once.c
+@@ -1,6 +1,6 @@
+-/* Copyright (C) 2002-2012 Free Software Foundation, Inc.
++/* Copyright (C) 2003-2014 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+-   Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
++   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+ 
+    The GNU C Library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+@@ -9,7 +9,7 @@
+ 
+    The GNU C Library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+    Lesser General Public License for more details.
+ 
+    You should have received a copy of the GNU Lesser General Public
+@@ -18,37 +18,114 @@
+ 
+ #include "pthreadP.h"
+ #include <lowlevellock.h>
++#include <atomic.h>
+ 
+ 
++unsigned long int __fork_generation attribute_hidden;
+ 
+-static int once_lock = LLL_LOCK_INITIALIZER;
+ 
++static void
++clear_once_control (void *arg)
++{
++  pthread_once_t *once_control = (pthread_once_t *) arg;
++
++  /* Reset to the uninitialized state here.  We don't need a stronger memory
++     order because we do not need to make any other of our writes visible to
++     other threads that see this value: This function will be called if we
++     get interrupted (see __pthread_once), so all we need to relay to other
++     threads is the state being reset again.  */
++  *once_control = 0;
++  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
++}
+ 
++
++/* This is similar to a lock implementation, but we distinguish between three
++   states: not yet initialized (0), initialization finished (2), and
++   initialization in progress (__fork_generation | 1).  If in the first state,
++   threads will try to run the initialization by moving to the second state;
++   the first thread to do so via a CAS on once_control runs init_routine,
++   other threads block.
++   When forking the process, some threads can be interrupted during the second
++   state; they won't be present in the forked child, so we need to restart
++   initialization in the child.  To distinguish an in-progress initialization
++   from an interrupted initialization (in which case we need to reclaim the
++   lock), we look at the fork generation that's part of the second state: We
++   can reclaim iff it differs from the current fork generation.
++   XXX: This algorithm has an ABA issue on the fork generation: If an
++   initialization is interrupted, we then fork 2^30 times (30 bits of
++   once_control are used for the fork generation), and try to initialize
++   again, we can deadlock because we can't distinguish the in-progress and
++   interrupted cases anymore.  */
+ int
+ __pthread_once (once_control, init_routine)
+      pthread_once_t *once_control;
+      void (*init_routine) (void);
+ {
+-  /* XXX Depending on whether the LOCK_IN_ONCE_T is defined use a
+-     global lock variable or one which is part of the pthread_once_t
+-     object.  */
+-  if (*once_control == PTHREAD_ONCE_INIT)
++  while (1)
+     {
+-      lll_lock (once_lock, LLL_PRIVATE);
++      int oldval, val, newval;
+ 
+-      /* XXX This implementation is not complete.  It doesn't take
+-	 cancelation and fork into account.  */
+-      if (*once_control == PTHREAD_ONCE_INIT)
++      /* We need acquire memory order for this load because if the value
++         signals that initialization has finished, we need to be see any
++         data modifications done during initialization.  */
++      val = *once_control;
++      atomic_read_barrier();
++      do
+ 	{
+-	  init_routine ();
++	  /* Check if the initialization has already been done.  */
++	  if (__glibc_likely ((val & 2) != 0))
++	    return 0;
++
++	  oldval = val;
++	  /* We try to set the state to in-progress and having the current
++	     fork generation.  We don't need atomic accesses for the fork
++	     generation because it's immutable in a particular process, and
++	     forked child processes start with a single thread that modified
++	     the generation.  */
++	  newval = __fork_generation | 1;
++	  /* We need acquire memory order here for the same reason as for the
++	     load from once_control above.  */
++	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
++						     oldval);
++	}
++      while (__glibc_unlikely (val != oldval));
+ 
+-	  *once_control = !PTHREAD_ONCE_INIT;
++      /* Check if another thread already runs the initializer.	*/
++      if ((oldval & 1) != 0)
++	{
++	  /* Check whether the initializer execution was interrupted by a
++	     fork.  We know that for both values, bit 0 is set and bit 1 is
++	     not.  */
++	  if (oldval == newval)
++	    {
++	      /* Same generation, some other thread was faster. Wait.  */
++	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
++	      continue;
++	    }
+ 	}
+ 
+-      lll_unlock (once_lock, LLL_PRIVATE);
++      /* This thread is the first here.  Do the initialization.
++	 Register a cleanup handler so that in case the thread gets
++	 interrupted the initialization can be restarted.  */
++      pthread_cleanup_push (clear_once_control, once_control);
++
++      init_routine ();
++
++      pthread_cleanup_pop (0);
++
++
++      /* Mark *once_control as having finished the initialization.  We need
++         release memory order here because we need to synchronize with other
++         threads that want to use the initialized data.  */
++      atomic_write_barrier();
++      *once_control = 2;
++
++      /* Wake up all other threads.  */
++      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
++      break;
+     }
+ 
+   return 0;
+ }
+-strong_alias (__pthread_once, pthread_once)
++weak_alias (__pthread_once, pthread_once)
+ hidden_def (__pthread_once)
+diff --git a/nptl/sysdeps/unix/sysv/linux/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/pthread_once.c
+deleted file mode 100644
+index 2684b660958361d4..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/pthread_once.c
++++ /dev/null
+@@ -1,129 +0,0 @@
+-/* Copyright (C) 2003-2014 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-#include <atomic.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  /* Reset to the uninitialized state here.  We don't need a stronger memory
+-     order because we do not need to make any other of our writes visible to
+-     other threads that see this value: This function will be called if we
+-     get interrupted (see __pthread_once), so all we need to relay to other
+-     threads is the state being reset again.  */
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-/* This is similar to a lock implementation, but we distinguish between three
+-   states: not yet initialized (0), initialization finished (2), and
+-   initialization in progress (__fork_generation | 1).  If in the first state,
+-   threads will try to run the initialization by moving to the second state;
+-   the first thread to do so via a CAS on once_control runs init_routine,
+-   other threads block.
+-   When forking the process, some threads can be interrupted during the second
+-   state; they won't be present in the forked child, so we need to restart
+-   initialization in the child.  To distinguish an in-progress initialization
+-   from an interrupted initialization (in which case we need to reclaim the
+-   lock), we look at the fork generation that's part of the second state: We
+-   can reclaim iff it differs from the current fork generation.
+-   XXX: This algorithm has an ABA issue on the fork generation: If an
+-   initialization is interrupted, we then fork 2^30 times (30 bits of
+-   once_control are used for the fork generation), and try to initialize
+-   again, we can deadlock because we can't distinguish the in-progress and
+-   interrupted cases anymore.  */
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  while (1)
+-    {
+-      int oldval, val, newval;
+-
+-      /* We need acquire memory order for this load because if the value
+-         signals that initialization has finished, we need to be see any
+-         data modifications done during initialization.  */
+-      val = *once_control;
+-      atomic_read_barrier();
+-      do
+-	{
+-	  /* Check if the initialization has already been done.  */
+-	  if (__glibc_likely ((val & 2) != 0))
+-	    return 0;
+-
+-	  oldval = val;
+-	  /* We try to set the state to in-progress and having the current
+-	     fork generation.  We don't need atomic accesses for the fork
+-	     generation because it's immutable in a particular process, and
+-	     forked child processes start with a single thread that modified
+-	     the generation.  */
+-	  newval = __fork_generation | 1;
+-	  /* We need acquire memory order here for the same reason as for the
+-	     load from once_control above.  */
+-	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+-						     oldval);
+-	}
+-      while (__glibc_unlikely (val != oldval));
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted by a
+-	     fork.  We know that for both values, bit 0 is set and bit 1 is
+-	     not.  */
+-	  if (oldval == newval)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Mark *once_control as having finished the initialization.  We need
+-         release memory order here because we need to synchronize with other
+-         threads that want to use the initialized data.  */
+-      atomic_write_barrier();
+-      *once_control = 2;
+-
+-      /* Wake up all other threads.  */
+-      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
diff --git a/SOURCES/glibc-rh1163509-3.patch b/SOURCES/glibc-rh1163509-3.patch
new file mode 100644
index 0000000..17b2c93
--- /dev/null
+++ b/SOURCES/glibc-rh1163509-3.patch
@@ -0,0 +1,108 @@
+commit 63668b7084ac26865136e59fdf17781f9f49bd99
+Author: Torvald Riegel <triegel@redhat.com>
+Date:   Fri Oct 11 18:58:04 2013 +0300
+
+    pthread_once: Clean up constants.
+    
+    [BZ #15215] This just gives a name to the integer constants being used.
+
+diff --git a/nptl/pthreadP.h b/nptl/pthreadP.h
+index dda1032d5aa95234..1a842e06bff82479 100644
+--- a/nptl/pthreadP.h
++++ b/nptl/pthreadP.h
+@@ -159,6 +159,12 @@ enum
+ #define FUTEX_TID_MASK		0x3fffffff
+ 
+ 
++/* pthread_once definitions.  See __pthread_once for how these are used.  */
++#define __PTHREAD_ONCE_INPROGRESS	1
++#define __PTHREAD_ONCE_DONE		2
++#define __PTHREAD_ONCE_FORK_GEN_INCR	4
++
++
+ /* Internal variables.  */
+ 
+ 
+diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
+index 10c01d6023508e3c..595bd7e298003e00 100644
+--- a/nptl/pthread_once.c
++++ b/nptl/pthread_once.c
+@@ -40,8 +40,11 @@ clear_once_control (void *arg)
+ 
+ 
+ /* This is similar to a lock implementation, but we distinguish between three
+-   states: not yet initialized (0), initialization finished (2), and
+-   initialization in progress (__fork_generation | 1).  If in the first state,
++   states: not yet initialized (0), initialization in progress
++   (__fork_generation | __PTHREAD_ONCE_INPROGRESS), and initialization
++   finished (__PTHREAD_ONCE_DONE); __fork_generation does not use the bits
++   that are used for __PTHREAD_ONCE_INPROGRESS and __PTHREAD_ONCE_DONE (which
++   is what __PTHREAD_ONCE_FORK_GEN_INCR is used for).  If in the first state,
+    threads will try to run the initialization by moving to the second state;
+    the first thread to do so via a CAS on once_control runs init_routine,
+    other threads block.
+@@ -66,14 +69,14 @@ __pthread_once (once_control, init_routine)
+       int oldval, val, newval;
+ 
+       /* We need acquire memory order for this load because if the value
+-         signals that initialization has finished, we need to be see any
++         signals that initialization has finished, we need to see any
+          data modifications done during initialization.  */
+       val = *once_control;
+       atomic_read_barrier();
+       do
+ 	{
+ 	  /* Check if the initialization has already been done.  */
+-	  if (__glibc_likely ((val & 2) != 0))
++	  if (__glibc_likely ((val & __PTHREAD_ONCE_DONE) != 0))
+ 	    return 0;
+ 
+ 	  oldval = val;
+@@ -82,7 +85,7 @@ __pthread_once (once_control, init_routine)
+ 	     generation because it's immutable in a particular process, and
+ 	     forked child processes start with a single thread that modified
+ 	     the generation.  */
+-	  newval = __fork_generation | 1;
++	  newval = __fork_generation | __PTHREAD_ONCE_INPROGRESS;
+ 	  /* We need acquire memory order here for the same reason as for the
+ 	     load from once_control above.  */
+ 	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+@@ -91,11 +94,11 @@ __pthread_once (once_control, init_routine)
+       while (__glibc_unlikely (val != oldval));
+ 
+       /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
++      if ((oldval & __PTHREAD_ONCE_INPROGRESS) != 0)
+ 	{
+ 	  /* Check whether the initializer execution was interrupted by a
+-	     fork.  We know that for both values, bit 0 is set and bit 1 is
+-	     not.  */
++	     fork.  We know that for both values, __PTHREAD_ONCE_INPROGRESS
++	     is set and __PTHREAD_ONCE_DONE is not.  */
+ 	  if (oldval == newval)
+ 	    {
+ 	      /* Same generation, some other thread was faster. Wait.  */
+@@ -118,7 +121,7 @@ __pthread_once (once_control, init_routine)
+          release memory order here because we need to synchronize with other
+          threads that want to use the initialized data.  */
+       atomic_write_barrier();
+-      *once_control = 2;
++      *once_control = __PTHREAD_ONCE_DONE;
+ 
+       /* Wake up all other threads.  */
+       lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+diff --git a/nptl/sysdeps/unix/sysv/linux/fork.c b/nptl/sysdeps/unix/sysv/linux/fork.c
+index 0635bfdb6cdf0aa8..8c197cb8e4347959 100644
+--- a/nptl/sysdeps/unix/sysv/linux/fork.c
++++ b/nptl/sysdeps/unix/sysv/linux/fork.c
+@@ -146,8 +146,9 @@ __libc_fork (void)
+ 
+       assert (THREAD_GETMEM (self, tid) != ppid);
+ 
++      /* See __pthread_once.  */
+       if (__fork_generation_pointer != NULL)
+-	*__fork_generation_pointer += 4;
++	*__fork_generation_pointer += __PTHREAD_ONCE_FORK_GEN_INCR;
+ 
+       /* Adjust the PID field for the new process.  */
+       THREAD_SETMEM (self, pid, THREAD_GETMEM (self, tid));
diff --git a/SOURCES/glibc-rh1163509-4.patch b/SOURCES/glibc-rh1163509-4.patch
new file mode 100644
index 0000000..641face
--- /dev/null
+++ b/SOURCES/glibc-rh1163509-4.patch
@@ -0,0 +1,443 @@
+This patch is based on the below upstream commit.
+File deletions were altered to reflect file renames.
+
+commit f50277c19df0937ea9691ab7e7c642ecd3ed3d94
+Author: Torvald Riegel <triegel@redhat.com>
+Date:   Sun Oct 19 21:59:26 2014 +0200
+
+    pthread_once: Add fast path and remove x86 variants.
+
+diff --git a/nptl/pthread_once.c b/nptl/pthread_once.c
+index 595bd7e298003e00..2afb79c01fe0a61e 100644
+--- a/nptl/pthread_once.c
++++ b/nptl/pthread_once.c
+@@ -58,11 +58,13 @@ clear_once_control (void *arg)
+    initialization is interrupted, we then fork 2^30 times (30 bits of
+    once_control are used for the fork generation), and try to initialize
+    again, we can deadlock because we can't distinguish the in-progress and
+-   interrupted cases anymore.  */
+-int
+-__pthread_once (once_control, init_routine)
+-     pthread_once_t *once_control;
+-     void (*init_routine) (void);
++   interrupted cases anymore.
++   XXX: We split out this slow path because current compilers do not generate
++   as efficient code when the fast path in __pthread_once below is not in a
++   separate function.  */
++static int
++__attribute__ ((noinline))
++__pthread_once_slow (pthread_once_t *once_control, void (*init_routine) (void))
+ {
+   while (1)
+     {
+@@ -72,7 +74,7 @@ __pthread_once (once_control, init_routine)
+          signals that initialization has finished, we need to see any
+          data modifications done during initialization.  */
+       val = *once_control;
+-      atomic_read_barrier();
++      atomic_read_barrier ();
+       do
+ 	{
+ 	  /* Check if the initialization has already been done.  */
+@@ -130,5 +132,18 @@ __pthread_once (once_control, init_routine)
+ 
+   return 0;
+ }
++
++int
++__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
++{
++  /* Fast path.  See __pthread_once_slow.  */
++  int val;
++  val = *once_control;
++  atomic_read_barrier ();
++  if (__glibc_likely ((val & __PTHREAD_ONCE_DONE) != 0))
++    return 0;
++  else
++    return __pthread_once_slow (once_control, init_routine);
++}
+ weak_alias (__pthread_once, pthread_once)
+ hidden_def (__pthread_once)
+diff --git a/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S
+deleted file mode 100644
+index ca3b860a7f6f95ae..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/i386/pthread_once.S
++++ /dev/null
+@@ -1,178 +0,0 @@
+-/* Copyright (C) 2002-2012 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 <unwindbuf.h>
+-#include <sysdep.h>
+-#include <kernel-features.h>
+-#include <lowlevellock.h>
+-
+-
+-	.comm	__fork_generation, 4, 4
+-
+-	.text
+-
+-
+-	.globl	__pthread_once
+-	.type	__pthread_once,@function
+-	.align	16
+-	cfi_startproc
+-__pthread_once:
+-	movl	4(%esp), %ecx
+-	testl	$2, (%ecx)
+-	jz	1f
+-	xorl	%eax, %eax
+-	ret
+-
+-1:	pushl	%ebx
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (3, 0)
+-	pushl	%esi
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (6, 0)
+-	movl	%ecx, %ebx
+-	xorl	%esi, %esi
+-
+-	/* Not yet initialized or initialization in progress.
+-	   Get the fork generation counter now.  */
+-6:	movl	(%ebx), %eax
+-#ifdef PIC
+-	LOAD_PIC_REG(cx)
+-#endif
+-
+-5:	movl	%eax, %edx
+-
+-	testl	$2, %eax
+-	jnz	4f
+-
+-	andl	$3, %edx
+-#ifdef PIC
+-	orl	__fork_generation@GOTOFF(%ecx), %edx
+-#else
+-	orl	__fork_generation, %edx
+-#endif
+-	orl	$1, %edx
+-
+-	LOCK
+-	cmpxchgl %edx, (%ebx)
+-	jnz	5b
+-
+-	/* Check whether another thread already runs the initializer.  */
+-	testl	$1, %eax
+-	jz	3f	/* No -> do it.  */
+-
+-	/* Check whether the initializer execution was interrupted
+-	   by a fork.  */
+-	xorl	%edx, %eax
+-	testl	$0xfffffffc, %eax
+-	jnz	3f	/* Different for generation -> run initializer.  */
+-
+-	/* Somebody else got here first.  Wait.  */
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	movl	$FUTEX_WAIT|FUTEX_PRIVATE_FLAG, %ecx
+-#else
+-# if FUTEX_WAIT == 0
+-	movl	%gs:PRIVATE_FUTEX, %ecx
+-# else
+-	movl	$FUTEX_WAIT, %ecx
+-	orl	%gs:PRIVATE_FUTEX, %ecx
+-# endif
+-#endif
+-	movl	$SYS_futex, %eax
+-	ENTER_KERNEL
+-	jmp	6b
+-
+-3:	/* Call the initializer function after setting up the
+-	   cancellation handler.  Note that it is not possible here
+-	   to use the unwind-based cleanup handling.  This would require
+-	   that the user-provided function and all the code it calls
+-	   is compiled with exceptions.  Unfortunately this cannot be
+-	   guaranteed.  */
+-	subl	$UNWINDBUFSIZE+8, %esp
+-	cfi_adjust_cfa_offset (UNWINDBUFSIZE+8)
+-	movl	%ecx, %ebx		/* PIC register value.  */
+-
+-	leal	8+UWJMPBUF(%esp), %eax
+-	movl	$0, 4(%esp)
+-	movl	%eax, (%esp)
+-	call	__sigsetjmp@PLT
+-	testl	%eax, %eax
+-	jne	7f
+-
+-	leal	8(%esp), %eax
+-	call	HIDDEN_JUMPTARGET(__pthread_register_cancel)
+-
+-	/* Call the user-provided initialization function.  */
+-	call	*24+UNWINDBUFSIZE(%esp)
+-
+-	/* Pop the cleanup handler.  */
+-	leal	8(%esp), %eax
+-	call	HIDDEN_JUMPTARGET(__pthread_unregister_cancel)
+-	addl	$UNWINDBUFSIZE+8, %esp
+-	cfi_adjust_cfa_offset (-UNWINDBUFSIZE-8)
+-
+-	/* Sucessful run of the initializer.  Signal that we are done.  */
+-	movl	12(%esp), %ebx
+-	LOCK
+-	addl	$1, (%ebx)
+-
+-	/* Wake up all other threads.  */
+-	movl	$0x7fffffff, %edx
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	movl	$FUTEX_WAKE|FUTEX_PRIVATE_FLAG, %ecx
+-#else
+-	movl	$FUTEX_WAKE, %ecx
+-	orl	%gs:PRIVATE_FUTEX, %ecx
+-#endif
+-	movl	$SYS_futex, %eax
+-	ENTER_KERNEL
+-
+-4:	popl	%esi
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (6)
+-	popl	%ebx
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (3)
+-	xorl	%eax, %eax
+-	ret
+-
+-7:	/* __sigsetjmp returned for the second time.  */
+-	movl	20+UNWINDBUFSIZE(%esp), %ebx
+-	cfi_adjust_cfa_offset (UNWINDBUFSIZE+16)
+-	cfi_offset (3, -8)
+-	cfi_offset (6, -12)
+-	movl	$0, (%ebx)
+-
+-	movl	$0x7fffffff, %edx
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	movl	$FUTEX_WAKE|FUTEX_PRIVATE_FLAG, %ecx
+-#else
+-	movl	$FUTEX_WAKE, %ecx
+-	orl	%gs:PRIVATE_FUTEX, %ecx
+-#endif
+-	movl	$SYS_futex, %eax
+-	ENTER_KERNEL
+-
+-	leal	8(%esp), %eax
+-	call	HIDDEN_JUMPTARGET (__pthread_unwind_next)
+-	/* NOTREACHED */
+-	hlt
+-	cfi_endproc
+-	.size	__pthread_once,.-__pthread_once
+-
+-hidden_def (__pthread_once)
+-strong_alias (__pthread_once, pthread_once)
+diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S
+deleted file mode 100644
+index 7f5c0810fa16b987..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_once.S
++++ /dev/null
+@@ -1,193 +0,0 @@
+-/* Copyright (C) 2002-2012 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 <sysdep.h>
+-#include <kernel-features.h>
+-#include <tcb-offsets.h>
+-#include <lowlevellock.h>
+-
+-
+-	.comm	__fork_generation, 4, 4
+-
+-	.text
+-
+-
+-	.globl	__pthread_once
+-	.type	__pthread_once,@function
+-	.align	16
+-__pthread_once:
+-.LSTARTCODE:
+-	cfi_startproc
+-#ifdef SHARED
+-	cfi_personality(DW_EH_PE_pcrel | DW_EH_PE_sdata4 | DW_EH_PE_indirect,
+-			DW.ref.__gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_pcrel | DW_EH_PE_sdata4, .LexceptSTART)
+-#else
+-	cfi_personality(DW_EH_PE_udata4, __gcc_personality_v0)
+-	cfi_lsda(DW_EH_PE_udata4, .LexceptSTART)
+-#endif
+-	testl	$2, (%rdi)
+-	jz	1f
+-	xorl	%eax, %eax
+-	retq
+-
+-	/* Preserve the function pointer.  */
+-1:	pushq	%rsi
+-	cfi_adjust_cfa_offset(8)
+-	xorq	%r10, %r10
+-
+-	/* Not yet initialized or initialization in progress.
+-	   Get the fork generation counter now.  */
+-6:	movl	(%rdi), %eax
+-
+-5:	movl	%eax, %edx
+-
+-	testl	$2, %eax
+-	jnz	4f
+-
+-	andl	$3, %edx
+-	orl	__fork_generation(%rip), %edx
+-	orl	$1, %edx
+-
+-	LOCK
+-	cmpxchgl %edx, (%rdi)
+-	jnz	5b
+-
+-	/* Check whether another thread already runs the initializer.  */
+-	testl	$1, %eax
+-	jz	3f	/* No -> do it.  */
+-
+-	/* Check whether the initializer execution was interrupted
+-	   by a fork.  */
+-	xorl	%edx, %eax
+-	testl	$0xfffffffc, %eax
+-	jnz	3f	/* Different for generation -> run initializer.  */
+-
+-	/* Somebody else got here first.  Wait.  */
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	movl	$FUTEX_WAIT|FUTEX_PRIVATE_FLAG, %esi
+-#else
+-# if FUTEX_WAIT == 0
+-	movl	%fs:PRIVATE_FUTEX, %esi
+-# else
+-	movl	$FUTEX_WAIT, %esi
+-	orl	%fs:PRIVATE_FUTEX, %esi
+-# endif
+-#endif
+-	movl	$SYS_futex, %eax
+-	syscall
+-	jmp	6b
+-
+-	/* Preserve the pointer to the control variable.  */
+-3:	pushq	%rdi
+-	cfi_adjust_cfa_offset(8)
+-	pushq	%rdi
+-	cfi_adjust_cfa_offset(8)
+-
+-.LcleanupSTART:
+-	callq	*16(%rsp)
+-.LcleanupEND:
+-
+-	/* Get the control variable address back.  */
+-	popq	%rdi
+-	cfi_adjust_cfa_offset(-8)
+-
+-	/* Sucessful run of the initializer.  Signal that we are done.  */
+-	LOCK
+-	incl	(%rdi)
+-
+-	addq	$8, %rsp
+-	cfi_adjust_cfa_offset(-8)
+-
+-	/* Wake up all other threads.  */
+-	movl	$0x7fffffff, %edx
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	movl	$FUTEX_WAKE|FUTEX_PRIVATE_FLAG, %esi
+-#else
+-	movl	$FUTEX_WAKE, %esi
+-	orl	%fs:PRIVATE_FUTEX, %esi
+-#endif
+-	movl	$SYS_futex, %eax
+-	syscall
+-
+-4:	addq	$8, %rsp
+-	cfi_adjust_cfa_offset(-8)
+-	xorl	%eax, %eax
+-	retq
+-	.size	__pthread_once,.-__pthread_once
+-
+-
+-hidden_def (__pthread_once)
+-strong_alias (__pthread_once, pthread_once)
+-
+-
+-	.type	clear_once_control,@function
+-	.align	16
+-clear_once_control:
+-	cfi_adjust_cfa_offset(3 * 8)
+-	movq	(%rsp), %rdi
+-	movq	%rax, %r8
+-	movl	$0, (%rdi)
+-
+-	movl	$0x7fffffff, %edx
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	movl	$FUTEX_WAKE|FUTEX_PRIVATE_FLAG, %esi
+-#else
+-	movl	$FUTEX_WAKE, %esi
+-	orl	%fs:PRIVATE_FUTEX, %esi
+-#endif
+-	movl	$SYS_futex, %eax
+-	syscall
+-
+-	movq	%r8, %rdi
+-.LcallUR:
+-	call	_Unwind_Resume@PLT
+-	hlt
+-.LENDCODE:
+-	cfi_endproc
+-	.size	clear_once_control,.-clear_once_control
+-
+-
+-	.section .gcc_except_table,"a",@progbits
+-.LexceptSTART:
+-	.byte	DW_EH_PE_omit			# @LPStart format
+-	.byte	DW_EH_PE_omit			# @TType format
+-	.byte	DW_EH_PE_uleb128		# call-site format
+-	.uleb128 .Lcstend-.Lcstbegin
+-.Lcstbegin:
+-	.uleb128 .LcleanupSTART-.LSTARTCODE
+-	.uleb128 .LcleanupEND-.LcleanupSTART
+-	.uleb128 clear_once_control-.LSTARTCODE
+-	.uleb128  0
+-	.uleb128 .LcallUR-.LSTARTCODE
+-	.uleb128 .LENDCODE-.LcallUR
+-	.uleb128 0
+-	.uleb128  0
+-.Lcstend:
+-
+-
+-#ifdef SHARED
+-	.hidden	DW.ref.__gcc_personality_v0
+-	.weak	DW.ref.__gcc_personality_v0
+-	.section .gnu.linkonce.d.DW.ref.__gcc_personality_v0,"aw",@progbits
+-	.align	LP_SIZE
+-	.type	DW.ref.__gcc_personality_v0, @object
+-	.size	DW.ref.__gcc_personality_v0, LP_SIZE
+-DW.ref.__gcc_personality_v0:
+-	ASM_ADDR __gcc_personality_v0
+-#endif
diff --git a/SOURCES/glibc-rh1163509-5.patch b/SOURCES/glibc-rh1163509-5.patch
new file mode 100644
index 0000000..cc314ec
--- /dev/null
+++ b/SOURCES/glibc-rh1163509-5.patch
@@ -0,0 +1,720 @@
+This patch removes the following remaining architecture specific
+pthread_once implementations:
+
+- alpha, hppa, sh: Not used in RHEL.
+
+- s390: Was first moved, then renamed upstream by the following commits:
+
+  commit 52ae23b4bfa09fa1f42e3f659aaa057d1176d06b
+  Author: Roland McGrath <roland@hack.frob.com>
+  Date:   Thu Jun 26 09:31:11 2014 -0700
+
+      Move remaining S390 code out of nptl/.
+
+  commit bc89c0fc70ba952f78fc27fc261ec209be0a6732
+  Author: Torvald Riegel <triegel@redhat.com>
+  Date:   Mon Dec 8 18:32:14 2014 +0100
+
+      Remove custom pthread_once implementation on s390.
+
+- powerpc: Was removed upstream by the following commit:
+
+  commit 75ffb047f6ee2a545da8cf69dba9a979ca6271ce
+  Author: Adhemerval Zanella <azanella@linux.vnet.ibm.com>
+  Date:   Sun Apr 13 18:13:42 2014 -0500
+
+      PowerPC: Sync pthread_once with default implementation
+
+diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
+deleted file mode 100644
+index 52ab53f0a912d107..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/powerpc/pthread_once.c
++++ /dev/null
+@@ -1,110 +0,0 @@
+-/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  __asm __volatile (__lll_rel_instr);
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  for (;;)
+-    {
+-      int oldval;
+-      int newval;
+-      int tmp;
+-
+-      /* Pseudo code:
+-	 newval = __fork_generation | 1;
+-	 oldval = *once_control;
+-	 if ((oldval & 2) == 0)
+-	   *once_control = newval;
+-	 Do this atomically with an acquire barrier.
+-      */
+-      newval = __fork_generation | 1;
+-      __asm __volatile ("1:	lwarx	%0,0,%3" MUTEX_HINT_ACQ "\n"
+-			"	andi.	%1,%0,2\n"
+-			"	bne	2f\n"
+-			"	stwcx.	%4,0,%3\n"
+-			"	bne	1b\n"
+-			"2:	" __lll_acq_instr
+-			: "=&r" (oldval), "=&r" (tmp), "=m" (*once_control)
+-			: "r" (once_control), "r" (newval), "m" (*once_control)
+-			: "cr0");
+-
+-      /* Check if the initializer has already been done.  */
+-      if ((oldval & 2) != 0)
+-	return 0;
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) == 0)
+-	break;
+-
+-      /* Check whether the initializer execution was interrupted by a fork.  */
+-      if (oldval != newval)
+-	break;
+-
+-      /* Same generation, some other thread was faster. Wait.  */
+-      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+-    }
+-
+-
+-  /* This thread is the first here.  Do the initialization.
+-     Register a cleanup handler so that in case the thread gets
+-     interrupted the initialization can be restarted.  */
+-  pthread_cleanup_push (clear_once_control, once_control);
+-
+-  init_routine ();
+-
+-  pthread_cleanup_pop (0);
+-
+-
+-  /* Add one to *once_control to take the bottom 2 bits from 01 to 10.
+-     A release barrier is needed to ensure memory written by init_routine
+-     is seen in other threads before *once_control changes.  */
+-  int tmp;
+-  __asm __volatile (__lll_rel_instr "\n"
+-		    "1:	lwarx	%0,0,%2" MUTEX_HINT_REL "\n"
+-		    "	addi	%0,%0,1\n"
+-		    "	stwcx.	%0,0,%2\n"
+-		    "	bne-	1b"
+-		    : "=&b" (tmp), "=m" (*once_control)
+-		    : "r" (once_control), "m" (*once_control)
+-		    : "cr0");
+-
+-  /* Wake up all other threads.  */
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c b/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c
+deleted file mode 100644
+index 4bce7fec13ea3bb2..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/s390/pthread_once.c
++++ /dev/null
+@@ -1,108 +0,0 @@
+-/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  while (1)
+-    {
+-      int oldval;
+-      int newval;
+-
+-      /* Pseudo code:
+-	   oldval = *once_control;
+-	   if ((oldval & 2) == 0)
+-	    {
+-	      newval = (oldval & 3) | __fork_generation | 1;
+-	      *once_control = newval;
+-	    }
+-	 Do this atomically.  */
+-      __asm __volatile ("   l	 %1,%0\n"
+-			"0: lhi	 %2,2\n"
+-			"   tml	 %1,2\n"
+-			"   jnz	 1f\n"
+-			"   nr	 %2,%1\n"
+-			"   ahi	 %2,1\n"
+-			"   o	 %2,%3\n"
+-			"   cs	 %1,%2,%0\n"
+-			"   jl	 0b\n"
+-			"1:"
+-			: "=Q" (*once_control), "=&d" (oldval), "=&d" (newval)
+-			: "m" (__fork_generation), "m" (*once_control)
+-			: "cc" );
+-      /* Check if the initialized has already been done.  */
+-      if ((oldval & 2) != 0)
+-	  break;
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted
+-	     by a fork.	 */
+-	  if (((oldval ^ newval) & -4) == 0)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_futex_wait (once_control, newval, LLL_PRIVATE);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Add one to *once_control.  */
+-      __asm __volatile ("   l	 %1,%0\n"
+-			"0: lr	 %2,%1\n"
+-			"   ahi	 %2,1\n"
+-			"   cs	 %1,%2,%0\n"
+-			"   jl	 0b\n"
+-			: "=Q" (*once_control), "=&d" (oldval), "=&d" (newval)
+-			: "m" (*once_control) : "cc" );
+-
+-      /* Wake up all other threads.  */
+-      lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S
+deleted file mode 100644
+index 62b92d8b103ded65..0000000000000000
+--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_once.S
++++ /dev/null
+@@ -1,257 +0,0 @@
+-/* Copyright (C) 2003-2012 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 <unwindbuf.h>
+-#include <sysdep.h>
+-#include <kernel-features.h>
+-#include <lowlevellock.h>
+-#include "lowlevel-atomic.h"
+-
+-
+-	.comm	__fork_generation, 4, 4
+-
+-	.text
+-	.globl	__pthread_once
+-	.type	__pthread_once,@function
+-	.align	5
+-	cfi_startproc
+-__pthread_once:
+-	mov.l	@r4, r0
+-	tst	#2, r0
+-	bt	1f
+-	rts
+-	 mov	#0, r0
+-
+-1:
+-	mov.l	r12, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r12, 0)
+-	mov.l	r9, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r9, 0)
+-	mov.l	r8, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (r8, 0)
+-	sts.l	pr, @-r15
+-	cfi_adjust_cfa_offset (4)
+-	cfi_rel_offset (pr, 0)
+-	mov	r5, r8
+-	mov	r4, r9
+-
+-	/* Not yet initialized or initialization in progress.
+-	   Get the fork generation counter now.  */
+-6:
+-	mov.l	@r4, r1
+-	mova	.Lgot, r0
+-	mov.l	.Lgot, r12
+-	add	r0, r12
+-
+-5:
+-	mov	r1, r0
+-
+-	tst	#2, r0
+-	bf	4f
+-
+-	and	#3, r0
+-	mov.l	.Lfgen, r2
+-#ifdef PIC
+-	add	r12, r2
+-#endif
+-	mov.l	@r2, r3
+-	or	r3, r0	
+-	or	#1, r0
+-	mov	r0, r3
+-	mov	r1, r5
+-
+-	CMPXCHG (r5, @r4, r3, r2)
+-	bf	5b
+-
+-	/* Check whether another thread already runs the initializer.  */
+-	mov	r2, r0
+-	tst	#1, r0
+-	bt	3f	/* No -> do it.  */
+-
+-	/* Check whether the initializer execution was interrupted
+-	   by a fork.  */
+-	xor	r3, r0
+-	mov	#-4, r1	/* -4 = 0xfffffffc */
+-	tst	r1, r0
+-	bf	3f	/* Different for generation -> run initializer.  */
+-
+-	/* Somebody else got here first.  Wait.  */
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	mov	#(FUTEX_PRIVATE_FLAG|FUTEX_WAIT), r5
+-	extu.b	r5, r5
+-#else
+-	stc	gbr, r1
+-	mov.w	.Lpfoff, r2
+-	add	r2, r1
+-	mov.l	@r1, r5
+-# if FUTEX_WAIT != 0
+-	mov	#FUTEX_WAIT, r0
+-	or	r0, r5
+-# endif
+-#endif
+-	mov	r3, r6
+-	mov	#0, r7
+-	mov	#SYS_futex, r3
+-	extu.b	r3, r3
+-	trapa	#0x14
+-	SYSCALL_INST_PAD
+-	bra	6b
+-	 nop
+-
+-	.align	2
+-.Lgot:
+-	.long	_GLOBAL_OFFSET_TABLE_
+-#ifdef PIC
+-.Lfgen:	
+-	.long	__fork_generation@GOTOFF
+-#else
+-.Lfgen:	
+-	.long	__fork_generation
+-#endif
+-
+-3:
+-	/* Call the initializer function after setting up the
+-	   cancellation handler.  Note that it is not possible here
+-	   to use the unwind-based cleanup handling.  This would require
+-	   that the user-provided function and all the code it calls
+-	   is compiled with exceptions.  Unfortunately this cannot be
+-	   guaranteed.  */
+-	add	#-UNWINDBUFSIZE, r15
+-	cfi_adjust_cfa_offset (UNWINDBUFSIZE)
+-
+-	mov.l	.Lsigsetjmp, r1
+-	mov	#UWJMPBUF, r4
+-	add	r15, r4
+-	bsrf	r1
+-	 mov	#0, r5
+-.Lsigsetjmp0:
+-	tst	r0, r0
+-	bf	7f
+-
+-	mov.l	.Lcpush, r1
+-	bsrf	r1
+-	 mov	r15, r4
+-.Lcpush0:
+-
+-	/* Call the user-provided initialization function.  */
+-	jsr	@r8
+-	 nop
+-
+-	/* Pop the cleanup handler.  */
+-	mov.l	.Lcpop, r1
+-	bsrf	r1
+-	 mov	r15, r4
+-.Lcpop0:
+-
+-	add	#UNWINDBUFSIZE, r15
+-	cfi_adjust_cfa_offset (-UNWINDBUFSIZE)
+-
+-	/* Sucessful run of the initializer.  Signal that we are done.  */
+-	INC (@r9, r2)
+-	/* Wake up all other threads.  */
+-	mov	r9, r4
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	mov	#(FUTEX_PRIVATE_FLAG|FUTEX_WAKE), r5
+-	extu.b	r5, r5
+-#else
+-	stc	gbr, r1
+-	mov.w	.Lpfoff, r2
+-	add	r2, r1
+-	mov.l	@r1, r5
+-	mov	#FUTEX_WAKE, r0
+-	or	r0, r5
+-#endif
+-	mov	#-1, r6
+-	shlr	r6		/* r6 = 0x7fffffff */
+-	mov	#0, r7
+-	mov	#SYS_futex, r3
+-	extu.b	r3, r3
+-	trapa	#0x14
+-	SYSCALL_INST_PAD
+-
+-4:
+-	lds.l	@r15+, pr
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (pr)
+-	mov.l	@r15+, r8
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r8)
+-	mov.l	@r15+, r9
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r9)
+-	mov.l	@r15+, r12
+-	cfi_adjust_cfa_offset (-4)
+-	cfi_restore (r12)
+-	rts
+-	 mov	#0, r0
+-
+-7:
+-	/* __sigsetjmp returned for the second time.  */
+-	cfi_adjust_cfa_offset (UNWINDBUFSIZE+16)
+-	cfi_offset (r12, -4)
+-	cfi_offset (r9, -8)
+-	cfi_offset (r8, -12)
+-	cfi_offset (pr, -16)
+-	mov	#0, r7
+-	mov.l	r7, @r9
+-	mov	r9, r4
+-#ifdef __ASSUME_PRIVATE_FUTEX
+-	mov	#(FUTEX_PRIVATE_FLAG|FUTEX_WAKE), r5
+-#else
+-	stc	gbr, r1
+-	mov.w	.Lpfoff, r2
+-	add	r2, r1
+-	mov.l	@r1, r5
+-	mov	#FUTEX_WAKE, r0
+-	or	r0, r5
+-#endif
+-	extu.b	r5, r5
+-	mov	#-1, r6
+-	shlr	r6		/* r6 = 0x7fffffff */
+-	mov	#SYS_futex, r3
+-	extu.b	r3, r3
+-	trapa	#0x14
+-	SYSCALL_INST_PAD
+-
+-	mov.l	.Lunext, r1
+-	bsrf	r1
+-	 mov	r15, r4
+-.Lunext0:
+-	/* NOTREACHED */
+-	sleep
+-	cfi_endproc
+-
+-#ifndef __ASSUME_PRIVATE_FUTEX
+-.Lpfoff:
+-	.word	PRIVATE_FUTEX - TLS_PRE_TCB_SIZE
+-#endif
+-	.align	2
+-.Lsigsetjmp:
+-	.long	__sigsetjmp@PLT-(.Lsigsetjmp0-.)
+-.Lcpush:
+-	.long	HIDDEN_JUMPTARGET(__pthread_register_cancel)-.Lcpush0
+-.Lcpop:
+-	.long	HIDDEN_JUMPTARGET(__pthread_unregister_cancel)-.Lcpop0
+-.Lunext:
+-	.long	HIDDEN_JUMPTARGET(__pthread_unwind_next)-.Lunext0
+-	.size	__pthread_once,.-__pthread_once
+-
+-hidden_def (__pthread_once)
+-strong_alias (__pthread_once, pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/alpha/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/alpha/nptl/pthread_once.c
+deleted file mode 100644
+index c342e0a7a0965086..0000000000000000
+--- a/sysdeps/unix/sysv/linux/alpha/nptl/pthread_once.c
++++ /dev/null
+@@ -1,95 +0,0 @@
+-/* Copyright (C) 2003-2012 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-}
+-
+-int
+-__pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
+-{
+-  for (;;)
+-    {
+-      int oldval;
+-      int newval;
+-      int tmp;
+-
+-      /* Pseudo code:
+-	 newval = __fork_generation | 1;
+-	 oldval = *once_control;
+-	 if ((oldval & 2) == 0)
+-	   *once_control = newval;
+-	 Do this atomically.
+-      */
+-      newval = __fork_generation | 1;
+-      __asm __volatile (
+-		"1:	ldl_l	%0, %2\n"
+-		"	and	%0, 2, %1\n"
+-		"	bne	%1, 2f\n"
+-		"	mov	%3, %1\n"
+-		"	stl_c	%1, %2\n"
+-		"	beq	%1, 1b\n"
+-		"2:	mb"
+-		: "=&r" (oldval), "=&r" (tmp), "=m" (*once_control)
+-		: "r" (newval), "m" (*once_control));
+-
+-      /* Check if the initializer has already been done.  */
+-      if ((oldval & 2) != 0)
+-	return 0;
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) == 0)
+-	break;
+-
+-      /* Check whether the initializer execution was interrupted by a fork.  */
+-      if (oldval != newval)
+-	break;
+-
+-      /* Same generation, some other thread was faster. Wait.  */
+-      lll_futex_wait (once_control, oldval, LLL_PRIVATE);
+-    }
+-
+-  /* This thread is the first here.  Do the initialization.
+-     Register a cleanup handler so that in case the thread gets
+-     interrupted the initialization can be restarted.  */
+-  pthread_cleanup_push (clear_once_control, once_control);
+-
+-  init_routine ();
+-
+-  pthread_cleanup_pop (0);
+-
+-  /* Add one to *once_control to take the bottom 2 bits from 01 to 10.  */
+-  atomic_increment (once_control);
+-
+-  /* Wake up all other threads.  */
+-  lll_futex_wake (once_control, INT_MAX, LLL_PRIVATE);
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
+diff --git a/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c b/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c
+deleted file mode 100644
+index b920ebb22c10a569..0000000000000000
+--- a/sysdeps/unix/sysv/linux/hppa/nptl/pthread_once.c
++++ /dev/null
+@@ -1,93 +0,0 @@
+-/* Copyright (C) 2003-2012 Free Software Foundation, Inc.
+-   This file is part of the GNU C Library.
+-   Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
+-
+-   The GNU C Library is free software; you can redistribute it and/or
+-   modify it under the terms of the GNU Lesser General Public
+-   License as published by the Free Software Foundation; either
+-   version 2.1 of the License, or (at your option) any later version.
+-
+-   The GNU C Library is distributed in the hope that it will be useful,
+-   but WITHOUT ANY WARRANTY; without even the implied warranty of
+-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
+-   Lesser General Public License for more details.
+-
+-   You should have 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 "pthreadP.h"
+-#include <lowlevellock.h>
+-
+-
+-unsigned long int __fork_generation attribute_hidden;
+-
+-
+-static void
+-clear_once_control (void *arg)
+-{
+-  pthread_once_t *once_control = (pthread_once_t *) arg;
+-
+-  *once_control = 0;
+-  lll_private_futex_wake (once_control, INT_MAX);
+-}
+-
+-
+-int
+-__pthread_once (once_control, init_routine)
+-     pthread_once_t *once_control;
+-     void (*init_routine) (void);
+-{
+-  while (1)
+-    {
+-      int oldval, val, newval;
+-
+-      val = *once_control;
+-      do
+-	{
+-	  /* Check if the initialized has already been done.  */
+-	  if ((val & 2) != 0)
+-	    return 0;
+-
+-	  oldval = val;
+-	  newval = (oldval & 3) | __fork_generation | 1;
+-	  val = atomic_compare_and_exchange_val_acq (once_control, newval,
+-						     oldval);
+-	}
+-      while (__builtin_expect (val != oldval, 0));
+-
+-      /* Check if another thread already runs the initializer.	*/
+-      if ((oldval & 1) != 0)
+-	{
+-	  /* Check whether the initializer execution was interrupted
+-	     by a fork.	 */
+-	  if (((oldval ^ newval) & -4) == 0)
+-	    {
+-	      /* Same generation, some other thread was faster. Wait.  */
+-	      lll_private_futex_wait (once_control, newval);
+-	      continue;
+-	    }
+-	}
+-
+-      /* This thread is the first here.  Do the initialization.
+-	 Register a cleanup handler so that in case the thread gets
+-	 interrupted the initialization can be restarted.  */
+-      pthread_cleanup_push (clear_once_control, once_control);
+-
+-      init_routine ();
+-
+-      pthread_cleanup_pop (0);
+-
+-
+-      /* Add one to *once_control.  */
+-      atomic_increment (once_control);
+-
+-      /* Wake up all other threads.  */
+-      lll_private_futex_wake (once_control, INT_MAX);
+-      break;
+-    }
+-
+-  return 0;
+-}
+-weak_alias (__pthread_once, pthread_once)
+-hidden_def (__pthread_once)
diff --git a/SOURCES/glibc-rh1165192.patch b/SOURCES/glibc-rh1165192.patch
new file mode 100644
index 0000000..2ae1a66
--- /dev/null
+++ b/SOURCES/glibc-rh1165192.patch
@@ -0,0 +1,150 @@
+commit 03d2730b44cc2236318fd978afa2651753666c55
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Wed Apr 29 14:41:25 2015 +0200
+
+    CVE-2014-8121: Do not close NSS files database during iteration [BZ #18007]
+
+diff -up glibc-2.17-c758a686/nss/Makefile.rh1165192 glibc-2.17-c758a686/nss/Makefile
+--- glibc-2.17-c758a686/nss/Makefile.rh1165192	2015-01-14 21:22:57.558006945 +0100
++++ glibc-2.17-c758a686/nss/Makefile	2015-01-14 21:44:59.657777124 +0100
+@@ -38,7 +38,7 @@ install-bin             := getent makedb
+ makedb-modules = xmalloc hash-string
+ extra-objs		+= $(makedb-modules:=.o)
+ 
+-tests			= test-netdb tst-nss-test1 bug17079
++tests			= test-netdb tst-nss-test1 bug17079 tst-nss-getpwent
+ xtests			= bug-erange
+ 
+ include ../Makeconfig
+diff -up glibc-2.17-c758a686/nss/nss_files/files-XXX.c.rh1165192 glibc-2.17-c758a686/nss/nss_files/files-XXX.c
+--- glibc-2.17-c758a686/nss/nss_files/files-XXX.c.rh1165192	2015-01-14 21:22:14.630721754 +0100
++++ glibc-2.17-c758a686/nss/nss_files/files-XXX.c	2015-01-14 21:22:15.072725814 +0100
+@@ -135,7 +135,7 @@ CONCAT(_nss_files_set,ENTNAME) (int stay
+ 
+   __libc_lock_lock (lock);
+ 
+-  status = internal_setent (stayopen);
++  status = internal_setent (1);
+ 
+   if (status == NSS_STATUS_SUCCESS && fgetpos (stream, &position) < 0)
+     {
+diff -up glibc-2.17-c758a686/nss/tst-nss-getpwent.c.rh1165192 glibc-2.17-c758a686/nss/tst-nss-getpwent.c
+--- glibc-2.17-c758a686/nss/tst-nss-getpwent.c.rh1165192	2015-01-14 21:23:50.003236107 +0100
++++ glibc-2.17-c758a686/nss/tst-nss-getpwent.c	2015-01-14 21:46:39.912194368 +0100
+@@ -0,0 +1,116 @@
++/* Copyright (C) 2015 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 <pwd.h>
++#include <stdbool.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++int
++do_test (void)
++{
++  /* Count the number of entries in the password database, and fetch
++     data from the first and last entries.  */
++  size_t count = 0;
++  struct passwd * pw;
++  char *first_name = NULL;
++  uid_t first_uid = 0;
++  char *last_name = NULL;
++  uid_t last_uid = 0;
++  setpwent ();
++  while ((pw  = getpwent ()) != NULL)
++    {
++      if (first_name == NULL)
++	{
++	  first_name = strdup (pw->pw_name);
++	  if (first_name == NULL)
++	    {
++	      printf ("strdup: %m\n");
++	      return 1;
++	    }
++	  first_uid = pw->pw_uid;
++	}
++      
++      free (last_name);
++      last_name = strdup (pw->pw_name);
++      if (last_name == NULL)
++	{
++	  printf ("strdup: %m\n");
++	  return 1;
++	}
++      last_uid = pw->pw_uid;
++      ++count;
++    }
++  endpwent ();
++
++  if (count == 0)
++    {
++      printf ("No entries in the password database.\n");
++      return 0;
++    }
++
++  /* Try again, this time interleaving with name-based and UID-based
++     lookup operations.  The counts do not match if the interleaved
++     lookups affected the enumeration.  */
++  size_t new_count = 0;
++  setpwent ();
++  while ((pw  = getpwent ()) != NULL)
++    {
++      if (new_count == count)
++	{
++	  printf ("Additional entry in the password database.\n");
++	  return 1;
++	}
++      ++new_count;
++      struct passwd *pw2 = getpwnam (first_name);
++      if (pw2 == NULL)
++	{
++	  printf ("getpwnam (%s) failed: %m\n", first_name);
++	  return 1;
++	}
++      pw2 = getpwnam (last_name);
++      if (pw2 == NULL)
++	{
++	  printf ("getpwnam (%s) failed: %m\n", last_name);
++	  return 1;
++	}
++      pw2 = getpwuid (first_uid);
++      if (pw2 == NULL)
++	{
++	  printf ("getpwuid (%llu) failed: %m\n", (unsigned long long) first_uid);
++	  return 1;
++	}
++      pw2 = getpwuid (last_uid);
++      if (pw2 == NULL)
++	{
++	  printf ("getpwuid (%llu) failed: %m\n", (unsigned long long) last_uid);
++	  return 1;
++	}
++    }
++  endpwent ();
++  if (new_count < count)
++    {
++      printf ("Missing entry in the password database.\n");
++      return 1;
++    }
++  
++  return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
diff --git a/SOURCES/glibc-rh1165212.patch b/SOURCES/glibc-rh1165212.patch
new file mode 100644
index 0000000..359a7d2
--- /dev/null
+++ b/SOURCES/glibc-rh1165212.patch
@@ -0,0 +1,336 @@
+#
+# This is a special patch for rhel-6 to fix recursive dlopen.
+# It is likely the upstream patch will always be too risky for
+# rhel-6 and will involve reorganizing the way in which recursive
+# dlopen is allowed to operate and how the _r_debug and stap
+# points are used by gdb for the recursive case.
+#
+# This fix changes the internal API to duplicate the ldconfig
+# cache data. This means that at any point the cache can be
+# unmapped without any consequences. The caller is responsible
+# fore freeing the returned string.
+#
+# A regression test is added to verify the assertion for _r_debug
+# is no longer triggered due to the recursive dlopen. The test to
+# verify the fix in _dl_load_cache_lookup is not automated and
+# has to be run by hand.
+#
+# The original version of this patch was based on the first version
+# of the upstream patch posted here:
+#   https://sourceware.org/ml/libc-alpha/2014-12/msg00446.html
+# The current version has been modified to reflect the changes
+# made in the revision of the patch committed to trunk after
+# being posted for review here:
+#   https://sourceware.org/ml/libc-alpha/2014-12/msg00483.html
+
+This was committed upstream as:
+
+commit ccdb048df457d581f6ac7ede8b0c7a593a891dfa
+Author: Carlos O'Donell <carlos@systemhalted.org>
+Date:   Wed Jan 21 01:51:10 2015 -0500
+
+    Fix recursive dlopen.
+
+--- glibc-2.17-c758a686/dlfcn/Makefile	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/dlfcn/Makefile	2015-06-22 12:44:41.000000000 -0400
+@@ -35,12 +35,12 @@ endif
+ ifeq (yes,$(build-shared))
+ tests = glrefmain failtest tst-dladdr default errmsg1 tstcxaatexit \
+ 	bug-dlopen1 bug-dlsym1 tst-dlinfo bug-atexit1 bug-atexit2 \
+-	bug-atexit3 tstatexit
++	bug-atexit3 tstatexit tst-rec-dlopen
+ endif
+ modules-names = glreflib1 glreflib2 glreflib3 failtestmod defaultmod1 \
+ 		defaultmod2 errmsg1mod modatexit modcxaatexit \
+ 		bug-dlsym1-lib1 bug-dlsym1-lib2 bug-atexit1-lib \
+-		bug-atexit2-lib bug-atexit3-lib
++		bug-atexit2-lib bug-atexit3-lib moddummy1 moddummy2
+ 
+ failtestmod.so-no-z-defs = yes
+ glreflib2.so-no-z-defs = yes
+@@ -122,6 +122,8 @@ LDLIBS-bug-atexit3-lib.so = -lstdc++ -lg
+ $(objpfx)bug-atexit3: $(libdl)
+ $(objpfx)bug-atexit3.out: $(objpfx)bug-atexit3-lib.so
+ 
++$(objpfx)tst-rec-dlopen: $(libdl)
++$(objpfx)tst-rec-dlopen.out: $(objpfx)moddummy1.so $(objpfx)moddummy2.so
+ 
+ # Depend on libc.so so a DT_NEEDED is generated in the shared objects.
+ # This ensures they will load libc.so for needed symbols if loaded by
+--- glibc-2.17-c758a686/elf/dl-cache.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/elf/dl-cache.c	2015-06-22 12:44:39.000000000 -0400
+@@ -174,9 +174,12 @@ _dl_cache_libcmp (const char *p1, const
+ 
+ 
+ /* Look up NAME in ld.so.cache and return the file name stored there,
+-   or null if none is found.  */
+-
+-const char *
++   or null if none is found. 
++   The caller is responsible for freeing the returned string.  The ld.so.cache
++   may be unmapped at any time by a completing recursive dlopen and
++   this function must take care that it does not return references to
++   any data in the mapping.  */
++char *
+ internal_function
+ _dl_load_cache_lookup (const char *name)
+ {
+@@ -289,7 +292,17 @@ _dl_load_cache_lookup (const char *name)
+       && best != NULL)
+     _dl_debug_printf ("  trying file=%s\n", best);
+ 
+-  return best;
++  if (best == NULL)
++    return NULL;
++
++  /* The double copy is *required* since malloc may be interposed
++     and call dlopen itself whose completion would unmap the data
++     we are accessing. Therefore we must make the copy of the
++     mapping data without using malloc.  */
++  char *temp;
++  temp = alloca (strlen (best) + 1);
++  strcpy (temp, best);
++  return strdup (temp);
+ }
+ 
+ #ifndef MAP_COPY
+--- glibc-2.17-c758a686/elf/dl-load.c	2015-06-22 12:41:10.748836414 -0400
++++ glibc-2.17-c758a686/elf/dl-load.c	2015-06-22 12:44:39.000000000 -0400
+@@ -2232,7 +2232,7 @@ _dl_map_object (struct link_map *loader,
+ 	{
+ 	  /* Check the list of libraries in the file /etc/ld.so.cache,
+ 	     for compatibility with Linux's ldconfig program.  */
+-	  const char *cached = _dl_load_cache_lookup (name);
++	  char *cached = _dl_load_cache_lookup (name);
+ 
+ 	  if (cached != NULL)
+ 	    {
+@@ -2262,6 +2262,7 @@ _dl_map_object (struct link_map *loader,
+ 		      if (memcmp (cached, dirp, system_dirs_len[cnt]) == 0)
+ 			{
+ 			  /* The prefix matches.  Don't use the entry.  */
++			  free (cached);
+ 			  cached = NULL;
+ 			  break;
+ 			}
+@@ -2278,14 +2279,9 @@ _dl_map_object (struct link_map *loader,
+ 				    &fb, loader ?: GL(dl_ns)[nsid]._ns_loaded,
+ 				    LA_SER_CONFIG, &found_other_class, false);
+ 		  if (__builtin_expect (fd != -1, 1))
+-		    {
+-		      realname = local_strdup (cached);
+-		      if (realname == NULL)
+-			{
+-			  __close (fd);
+-			  fd = -1;
+-			}
+-		    }
++		    realname = cached;
++		  else
++		    free (cached);
+ 		}
+ 	    }
+ 	}
+--- glibc-2.17-c758a686/elf/dl-open.c	2015-06-22 12:41:16.348913620 -0400
++++ glibc-2.17-c758a686/elf/dl-open.c	2015-06-22 12:44:40.000000000 -0400
+@@ -221,7 +221,11 @@ dl_open_worker (void *a)
+ 	}
+     }
+ 
+-  assert (_dl_debug_initialize (0, args->nsid)->r_state == RT_CONSISTENT);
++  /* One might be tempted to assert that we are RT_CONSISTENT at this point, but that
++     may not be true if this is a recursive call to dlopen.
++     TODO: Fix all of the debug state so we end up at RT_CONSISTENT only when the last
++     recursive dlopen completes.  */
++  _dl_debug_initialize (0, args->nsid);
+ 
+   /* Load the named object.  */
+   struct link_map *new;
+--- glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h	2015-06-22 12:41:16.328913344 -0400
++++ glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h	2015-06-22 12:44:41.000000000 -0400
+@@ -895,8 +895,8 @@
+      internal_function;
+ 
+ /* Look up NAME in ld.so.cache and return the file name stored there,
+-   or null if none is found.  */
+-extern const char *_dl_load_cache_lookup (const char *name)
++   or null if none is found.  Caller must free returned string.  */
++extern char *_dl_load_cache_lookup (const char *name)
+      internal_function;
+ 
+ /* If the system does not support MAP_COPY we cannot leave the file open
+--- glibc-2.17-c758a686/dlfcn/tst-rec-dlopen.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/dlfcn/tst-rec-dlopen.c	2015-06-22 12:44:41.000000000 -0400
+@@ -0,0 +1,143 @@
++/* Test recursive dlopen using malloc hooks.
++   Copyright (C) 2015 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 <malloc.h>
++#include <dlfcn.h>
++
++#define DSO "moddummy1.so"
++#define FUNC "dummy1"
++
++#define DSO1 "moddummy2.so"
++#define FUNC1 "dummy2"
++
++/* Result of the called function.  */
++int func_result;
++
++/* Prototype for my hook.  */
++void *custom_malloc_hook (size_t, const void *);
++
++/* Pointer to old malloc hooks.  */
++void *(*old_malloc_hook) (size_t, const void *);
++
++/* Call function func_name in DSO dso_name via dlopen.  */
++void
++call_func (const char *dso_name, const char *func_name)
++{
++  int ret;
++  void *dso;
++  int (*func) (void);
++  char *err;
++
++  /* Open the DSO.  */
++  dso = dlopen (dso_name, RTLD_NOW|RTLD_GLOBAL);
++  if (dso == NULL)
++    {
++      err = dlerror ();
++      fprintf (stderr, "%s\n", err);
++      exit (1);
++    }
++  /* Clear any errors.  */
++  dlerror ();
++
++  /* Lookup func.  */
++  func = (int (*) (void)) dlsym (dso, func_name);
++  if (func == NULL)
++    {
++      err = dlerror ();
++      if (err != NULL)
++        {
++	  fprintf (stderr, "%s\n", err);
++	  exit (1);
++        }
++    }
++  /* Call func.  */
++  func_result = (*func) ();
++
++  /* Close the library and look for errors too.  */
++  ret = dlclose (dso);
++  if (ret != 0)
++    {
++      err = dlerror ();
++      fprintf (stderr, "%s\n", err);
++      exit (1);
++    }
++
++}
++
++/* Empty hook that does nothing.  */
++void *
++custom_malloc_hook (size_t size, const void *caller)
++{
++  void *result;
++  /* Restore old hooks.  */
++  __malloc_hook = old_malloc_hook;
++  /* First call a function in another library via dlopen.  */
++  call_func (DSO1, FUNC1);
++  /* Called recursively.  */
++  result = malloc (size);
++  /* Restore new hooks.  */
++  __malloc_hook = custom_malloc_hook;
++  return result;
++}
++
++static int
++do_test (void)
++{
++  /* Save old hook.  */
++  old_malloc_hook = __malloc_hook;
++  /* Install new hook.  */
++  __malloc_hook = custom_malloc_hook;
++
++  /* Bug 17702 fixes two things:
++       * A recursive dlopen unmapping the ld.so.cache.
++       * An assertion that _r_debug is RT_CONSISTENT at entry to dlopen.
++     We can only test the latter. Testing the former requires modifying
++     ld.so.conf to cache the dummy libraries, then running ldconfig,
++     then run the test. If you do all of that (and glibc's test
++     infrastructure doesn't support that yet) then the test will
++     SEGFAULT without the fix. If you don't do that, then the test
++     will abort because of the assert described in detail below.  */
++  call_func (DSO, FUNC);
++
++  /* Restore old hook.  */
++  __malloc_hook = old_malloc_hook;
++
++  /* The function dummy2() is called by the malloc hook. Check to
++     see that it was called. This ensures the second recursive
++     dlopen happened and we called the function in that library.
++     Before the fix you either get a SIGSEGV when accessing mmap'd
++     ld.so.cache data or an assertion failure about _r_debug not
++     beint RT_CONSISTENT.  We don't test for the SIGSEGV since it
++     would require finding moddummy1 or moddummy2 in the cache and
++     we don't have any infrastructure to test that, but the _r_debug
++     assertion triggers.  */
++  printf ("Returned result is %d\n", func_result);
++  if (func_result <= 0)
++    {
++      printf ("FAIL: Function call_func() not called.\n");
++      exit (1);
++    }
++
++  printf ("PASS: Function call_func() called more than once.\n");
++  return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+--- glibc-2.17-c758a686/dlfcn/moddummy1.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/dlfcn/moddummy1.c	2015-06-22 12:44:41.000000000 -0400
+@@ -0,0 +1,10 @@
++/* Provide a dummy DSO for tst-rec-dlopen to use.  */
++#include <stdio.h>
++#include <stdlib.h>
++
++int
++dummy1 (void)
++{
++  printf ("Called dummy1()\n");
++  return 1;
++}
+--- glibc-2.17-c758a686/dlfcn/moddummy2.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/dlfcn/moddummy2.c	2015-06-22 12:44:41.000000000 -0400
+@@ -0,0 +1,13 @@
++/* Provide a dummy DSO for tst-rec-dlopen to use.  */
++#include <stdio.h>
++#include <stdlib.h>
++
++int
++dummy2 (void)
++{
++  printf ("Called dummy2()\n");
++  /* If the outer dlopen is not dummy1 (becuase of some error)
++     then tst-rec-dlopen will see a value of -1 as the returned
++     result and fail.  */
++  return -1;
++}
diff --git a/SOURCES/glibc-rh1170118-CVE-2014-7817.patch b/SOURCES/glibc-rh1170118-CVE-2014-7817.patch
new file mode 100644
index 0000000..8515473
--- /dev/null
+++ b/SOURCES/glibc-rh1170118-CVE-2014-7817.patch
@@ -0,0 +1,163 @@
+#
+# commit a39208bd7fb76c1b01c127b4c61f9bfd915bfe7c
+# Author: Carlos O'Donell <carlos@redhat.com>
+# Date:   Wed Nov 19 11:44:12 2014 -0500
+# 
+#     CVE-2014-7817: wordexp fails to honour WRDE_NOCMD.
+#     
+#     The function wordexp() fails to properly handle the WRDE_NOCMD
+#     flag when processing arithmetic inputs in the form of "$((... ``))"
+#     where "..." can be anything valid. The backticks in the arithmetic
+#     epxression are evaluated by in a shell even if WRDE_NOCMD forbade
+#     command substitution. This allows an attacker to attempt to pass
+#     dangerous commands via constructs of the above form, and bypass
+#     the WRDE_NOCMD flag. This patch fixes this by checking for WRDE_NOCMD
+#     in exec_comm(), the only place that can execute a shell. All other
+#     checks for WRDE_NOCMD are superfluous and removed.
+#     
+#     We expand the testsuite and add 3 new regression tests of roughly
+#     the same form but with a couple of nested levels.
+#     
+#     On top of the 3 new tests we add fork validation to the WRDE_NOCMD
+#     testing. If any forks are detected during the execution of a wordexp()
+#     call with WRDE_NOCMD, the test is marked as failed. This is slightly
+#     heuristic since vfork might be used in the future, but it provides a
+#     higher level of assurance that no shells were executed as part of
+#     command substitution with WRDE_NOCMD in effect. In addition it doesn't
+#     require libpthread or libdl, instead we use the public implementation
+#     namespace function __register_atfork (already part of the public ABI
+#     for libpthread).
+#     
+#     Tested on x86_64 with no regressions.
+# 
+diff --git glibc-2.17-c758a686/posix/wordexp-test.c glibc-2.17-c758a686/posix/wordexp-test.c
+index 4957006..bdd65e4 100644
+--- glibc-2.17-c758a686/posix/wordexp-test.c
++++ glibc-2.17-c758a686/posix/wordexp-test.c
+@@ -27,6 +27,25 @@
+ 
+ #define IFS " \n\t"
+ 
++extern void *__dso_handle __attribute__ ((__weak__, __visibility__ ("hidden")));
++extern int __register_atfork (void (*) (void), void (*) (void), void (*) (void), void *);
++
++static int __app_register_atfork (void (*prepare) (void), void (*parent) (void), void (*child) (void))
++{
++  return __register_atfork (prepare, parent, child,
++			    &__dso_handle == NULL ? NULL : __dso_handle);
++}
++
++/* Number of forks seen.  */
++static int registered_forks;
++
++/* For each fork increment the fork count.  */
++static void
++register_fork (void)
++{
++  registered_forks++;
++}
++
+ struct test_case_struct
+ {
+   int retval;
+@@ -206,6 +225,12 @@ struct test_case_struct
+     { WRDE_SYNTAX, NULL, "$((2+))", 0, 0, { NULL, }, IFS },
+     { WRDE_SYNTAX, NULL, "`", 0, 0, { NULL, }, IFS },
+     { WRDE_SYNTAX, NULL, "$((010+4+))", 0, 0, { NULL }, IFS },
++    /* Test for CVE-2014-7817. We test 3 combinations of command
++       substitution inside an arithmetic expression to make sure that
++       no commands are executed and error is returned.  */
++    { WRDE_CMDSUB, NULL, "$((`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
++    { WRDE_CMDSUB, NULL, "$((1+`echo 1`))", WRDE_NOCMD, 0, { NULL, }, IFS },
++    { WRDE_CMDSUB, NULL, "$((1+$((`echo 1`))))", WRDE_NOCMD, 0, { NULL, }, IFS },
+ 
+     { -1, NULL, NULL, 0, 0, { NULL, }, IFS },
+   };
+@@ -258,6 +283,15 @@ main (int argc, char *argv[])
+ 	  return -1;
+     }
+ 
++  /* If we are not allowed to do command substitution, we install
++     fork handlers to verify that no forks happened.  No forks should
++     happen at all if command substitution is disabled.  */
++  if (__app_register_atfork (register_fork, NULL, NULL) != 0)
++    {
++      printf ("Failed to register fork handler.\n");
++      return -1;
++    }
++
+   for (test = 0; test_case[test].retval != -1; test++)
+     if (testit (&test_case[test]))
+       ++fail;
+@@ -367,6 +401,9 @@ testit (struct test_case_struct *tc)
+ 
+   printf ("Test %d (%s): ", ++tests, tc->words);
+ 
++  if (tc->flags & WRDE_NOCMD)
++    registered_forks = 0;
++
+   if (tc->flags & WRDE_APPEND)
+     {
+       /* initial wordexp() call, to be appended to */
+@@ -378,6 +415,13 @@ testit (struct test_case_struct *tc)
+     }
+   retval = wordexp (tc->words, &we, tc->flags);
+ 
++  if ((tc->flags & WRDE_NOCMD)
++      && (registered_forks > 0))
++    {
++	  printf ("FAILED fork called for WRDE_NOCMD\n");
++	  return 1;
++    }
++
+   if (tc->flags & WRDE_DOOFFS)
+       start_offs = sav_we.we_offs;
+ 
+diff --git glibc-2.17-c758a686/posix/wordexp.c glibc-2.17-c758a686/posix/wordexp.c
+index b6b65dd..26f3a26 100644
+--- glibc-2.17-c758a686/posix/wordexp.c
++++ glibc-2.17-c758a686/posix/wordexp.c
+@@ -893,6 +893,10 @@ exec_comm (char *comm, char **word, size_t *word_length, size_t *max_length,
+   pid_t pid;
+   int noexec = 0;
+ 
++  /* Do nothing if command substitution should not succeed.  */
++  if (flags & WRDE_NOCMD)
++    return WRDE_CMDSUB;
++
+   /* Don't fork() unless necessary */
+   if (!comm || !*comm)
+     return 0;
+@@ -2082,9 +2086,6 @@ parse_dollars (char **word, size_t *word_length, size_t *max_length,
+ 	    }
+ 	}
+ 
+-      if (flags & WRDE_NOCMD)
+-	return WRDE_CMDSUB;
+-
+       (*offset) += 2;
+       return parse_comm (word, word_length, max_length, words, offset, flags,
+ 			 quoted? NULL : pwordexp, ifs, ifs_white);
+@@ -2196,9 +2197,6 @@ parse_dquote (char **word, size_t *word_length, size_t *max_length,
+ 	  break;
+ 
+ 	case '`':
+-	  if (flags & WRDE_NOCMD)
+-	    return WRDE_CMDSUB;
+-
+ 	  ++(*offset);
+ 	  error = parse_backtick (word, word_length, max_length, words,
+ 				  offset, flags, NULL, NULL, NULL);
+@@ -2357,12 +2355,6 @@ wordexp (const char *words, wordexp_t *pwordexp, int flags)
+ 	break;
+ 
+       case '`':
+-	if (flags & WRDE_NOCMD)
+-	  {
+-	    error = WRDE_CMDSUB;
+-	    goto do_error;
+-	  }
+-
+ 	++words_offset;
+ 	error = parse_backtick (&word, &word_length, &max_length, words,
+ 				&words_offset, flags, pwordexp, ifs,
diff --git a/SOURCES/glibc-rh1173238.patch b/SOURCES/glibc-rh1173238.patch
new file mode 100644
index 0000000..fd16686
--- /dev/null
+++ b/SOURCES/glibc-rh1173238.patch
@@ -0,0 +1,380 @@
+Cannot be upstreamed.  rtkaio was removed from Fedora.
+
+diff -u --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio-le.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio-le.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio-le.abilist                 1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio-le.abilist 2015-04-28 19:44:03.038050864 -0400
+@@ -0,0 +1,41 @@
++GLIBC_2.17
++ GLIBC_2.17 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ lio_listio F
++ lio_listio64 F
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
+diff -ru --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/i386/nptl/librtkaio.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/i386/nptl/librtkaio.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/i386/nptl/librtkaio.abilist	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/i386/nptl/librtkaio.abilist	2015-04-23 17:51:48.159155741 -0600
+@@ -0,0 +1,49 @@
++GLIBC_2.1
++ GLIBC_2.1 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ lio_listio F
++ lio_listio64 F
++GLIBC_2.2
++ GLIBC_2.2 A
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.4
++ GLIBC_2.3.4 A
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++GLIBC_2.4
++ GLIBC_2.4 A
++ lio_listio F
++ lio_listio64 F
+diff -ru --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/librtkaio.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/librtkaio.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/librtkaio.abilist	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/nptl/librtkaio.abilist	2015-04-23 17:50:38.059113789 -0600
+@@ -0,0 +1,49 @@
++GLIBC_2.1
++ GLIBC_2.1 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ lio_listio F
++ lio_listio64 F
++GLIBC_2.2
++ GLIBC_2.2 A
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.4
++ GLIBC_2.3.4 A
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++GLIBC_2.4
++ GLIBC_2.4 A
++ lio_listio F
++ lio_listio64 F
+diff -ru --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio.abilist	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/powerpc/powerpc64/nptl/librtkaio.abilist	2015-04-23 21:19:41.204953576 -0600
+@@ -0,0 +1,54 @@
++GLIBC_2.3
++ GLIBC_2.3 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ lio_listio F
++ lio_listio64 F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.3
++ GLIBC_2.3.3 A
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.4
++ GLIBC_2.3.4 A
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++GLIBC_2.4
++ GLIBC_2.4 A
++ lio_listio F
++ lio_listio64 F
+diff -ru --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/nptl/librtkaio.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/nptl/librtkaio.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/nptl/librtkaio.abilist	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-32/nptl/librtkaio.abilist	2015-04-23 17:50:54.671886744 -0600
+@@ -0,0 +1,49 @@
++GLIBC_2.1
++ GLIBC_2.1 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ lio_listio F
++ lio_listio64 F
++GLIBC_2.2
++ GLIBC_2.2 A
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.4
++ GLIBC_2.3.4 A
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++GLIBC_2.4
++ GLIBC_2.4 A
++ lio_listio F
++ lio_listio64 F
+diff -ru --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/nptl/librtkaio.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/nptl/librtkaio.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/nptl/librtkaio.abilist	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/s390/s390-64/nptl/librtkaio.abilist	2015-04-23 17:52:01.366975232 -0600
+@@ -0,0 +1,54 @@
++GLIBC_2.2
++ GLIBC_2.2 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ lio_listio F
++ lio_listio64 F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.3
++ GLIBC_2.3.3 A
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.4
++ GLIBC_2.3.4 A
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++GLIBC_2.4
++ GLIBC_2.4 A
++ lio_listio F
++ lio_listio64 F
+diff -ru --new-file glibc-2.17-c758a686/sysdeps/unix/sysv/linux/x86_64/64/nptl/librtkaio.abilist glibc-2.17-c758a686/sysdeps/unix/sysv/linux/x86_64/64/nptl/librtkaio.abilist
+--- glibc-2.17-c758a686/sysdeps/unix/sysv/linux/x86_64/64/nptl/librtkaio.abilist	1969-12-31 17:00:00.000000000 -0700
++++ glibc-2.17-c758a686/sysdeps/unix/sysv/linux/x86_64/64/nptl/librtkaio.abilist	2015-04-23 17:51:12.091648671 -0600
+@@ -0,0 +1,54 @@
++GLIBC_2.2.5
++ GLIBC_2.2.5 A
++ aio_cancel F
++ aio_cancel64 F
++ aio_error F
++ aio_error64 F
++ aio_fsync F
++ aio_fsync64 F
++ aio_init F
++ aio_read F
++ aio_read64 F
++ aio_return F
++ aio_return64 F
++ aio_suspend F
++ aio_suspend64 F
++ aio_write F
++ aio_write64 F
++ clock_getcpuclockid F
++ clock_getres F
++ clock_gettime F
++ clock_nanosleep F
++ clock_settime F
++ lio_listio F
++ lio_listio64 F
++ shm_open F
++ shm_unlink F
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.3
++ GLIBC_2.3.3 A
++ timer_create F
++ timer_delete F
++ timer_getoverrun F
++ timer_gettime F
++ timer_settime F
++GLIBC_2.3.4
++ GLIBC_2.3.4 A
++ mq_close F
++ mq_getattr F
++ mq_notify F
++ mq_open F
++ mq_receive F
++ mq_send F
++ mq_setattr F
++ mq_timedreceive F
++ mq_timedsend F
++ mq_unlink F
++GLIBC_2.4
++ GLIBC_2.4 A
++ lio_listio F
++ lio_listio64 F
diff --git a/SOURCES/glibc-rh1173537.patch b/SOURCES/glibc-rh1173537.patch
new file mode 100644
index 0000000..bedde38
--- /dev/null
+++ b/SOURCES/glibc-rh1173537.patch
@@ -0,0 +1,65 @@
+commit c3ec475c5dd16499aa040908e11d382c3ded9692
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Mon May 26 11:40:08 2014 +0530
+
+    Use NSS_STATUS_TRYAGAIN to indicate insufficient buffer (BZ #16878)
+    
+    The netgroups nss modules in the glibc tree use NSS_STATUS_UNAVAIL
+    (with errno as ERANGE) when the supplied buffer does not have
+    sufficient space for the result.  This is wrong, because the canonical
+    way to indicate insufficient buffer is to set the errno to ERANGE and
+    the status to NSS_STATUS_TRYAGAIN, as is used by all other modules.
+    
+    This fixes nscd behaviour when the nss_ldap module returns
+    NSS_STATUS_TRYAGAIN to indicate that a netgroup entry is too long to
+    fit into the supplied buffer.
+
+diff --git glibc-2.17-c758a686/nscd/netgroupcache.c glibc-2.17-c758a686/nscd/netgroupcache.c
+index b3d40e9..edab174 100644
+--- glibc-2.17-c758a686/nscd/netgroupcache.c
++++ glibc-2.17-c758a686/nscd/netgroupcache.c
+@@ -197,11 +197,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 		    int e;
+ 		    status = getfct.f (&data, buffer + buffilled,
+ 				       buflen - buffilled - req->key_len, &e);
+-		    if (status == NSS_STATUS_RETURN
+-			|| status == NSS_STATUS_NOTFOUND)
+-		      /* This was either the last one for this group or the
+-			 group was empty.  Look at next group if available.  */
+-		      break;
+ 		    if (status == NSS_STATUS_SUCCESS)
+ 		      {
+ 			if (data.type == triple_val)
+@@ -320,11 +315,18 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
+ 			      }
+ 			  }
+ 		      }
+-		    else if (status == NSS_STATUS_UNAVAIL && e == ERANGE)
++		    else if (status == NSS_STATUS_TRYAGAIN && e == ERANGE)
+ 		      {
+ 			buflen *= 2;
+ 			buffer = xrealloc (buffer, buflen);
+ 		      }
++		    else if (status == NSS_STATUS_RETURN
++			     || status == NSS_STATUS_NOTFOUND
++			     || status == NSS_STATUS_UNAVAIL)
++		      /* This was either the last one for this group or the
++			 group was empty or the NSS module had an internal
++			 failure.  Look at next group if available.  */
++		      break;
+ 		  }
+ 
+ 	      enum nss_status (*endfct) (struct __netgrent *);
+diff --git glibc-2.17-c758a686/nss/nss_files/files-netgrp.c glibc-2.17-c758a686/nss/nss_files/files-netgrp.c
+index 34eae4c..bc0b367 100644
+--- glibc-2.17-c758a686/nss/nss_files/files-netgrp.c
++++ glibc-2.17-c758a686/nss/nss_files/files-netgrp.c
+@@ -252,7 +252,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result,
+   if (cp - host > buflen)
+     {
+       *errnop = ERANGE;
+-      status = NSS_STATUS_UNAVAIL;
++      status = NSS_STATUS_TRYAGAIN;
+     }
+   else
+     {
diff --git a/SOURCES/glibc-rh1176906.patch b/SOURCES/glibc-rh1176906.patch
new file mode 100644
index 0000000..e6afde1
--- /dev/null
+++ b/SOURCES/glibc-rh1176906.patch
@@ -0,0 +1,22 @@
+commit 7d81e8d6db95c112c297930a8f2f9617c305529a
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Dec 23 16:16:32 2014 +0100
+
+    iconvdata/run-iconv-test.sh: Actually test iconv modules
+    
+    Arjun Shankar noticed that this test case was not testing anything
+    because iconv was invoked without the required arguments.
+
+diff --git glibc-2.17-c758a686/iconvdata/run-iconv-test.sh glibc-2.17-c758a686/iconvdata/run-iconv-test.sh
+index 5dfb69f..1d0bf52 100755
+--- glibc-2.17-c758a686/iconvdata/run-iconv-test.sh
++++ glibc-2.17-c758a686/iconvdata/run-iconv-test.sh
+@@ -189,7 +189,7 @@ printf '\016\377\377\377\377\377\377\377' > $temp1
+ for from in $iconv_modules ; do
+     echo $ac_n "test decoder $from $ac_c"
+     PROG=`eval echo $ICONV`
+-    if $PROG < $temp1 >/dev/null 2>&1 ; then
++    if $PROG -f $from -t UTF8 < $temp1 >/dev/null 2>&1 ; then
+ 	: # fall through
+     else
+ 	status=$?
diff --git a/SOURCES/glibc-rh1183456.patch b/SOURCES/glibc-rh1183456.patch
new file mode 100644
index 0000000..021ec3b
--- /dev/null
+++ b/SOURCES/glibc-rh1183456.patch
@@ -0,0 +1,40 @@
+commit 3cb26316b45b23dc5cfecbafdc489b28c3a52029
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Thu Jan 29 10:30:09 2015 +0530
+
+    Initialize nscd stats data [BZ #17892]
+    
+    The padding bytes in the statsdata struct are not initialized, due to
+    which valgrind throws a warning:
+    
+    ==11384== Memcheck, a memory error detector
+    ==11384== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
+    ==11384== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
+    ==11384== Command: nscd -d
+    ==11384==
+    Fri 25 Apr 2014 10:34:53 AM CEST - 11384: handle_request: request received (Version = 2) from PID 11396
+    Fri 25 Apr 2014 10:34:53 AM CEST - 11384:       GETSTAT
+    ==11384== Thread 6:
+    ==11384== Syscall param socketcall.sendto(msg) points to uninitialised byte(s)
+    ==11384==    at 0x4E4ACDC: send (in /lib64/libpthread-2.12.so)
+    ==11384==    by 0x11AF6B: send_stats (in /usr/sbin/nscd)
+    ==11384==    by 0x112F75: nscd_run_worker (in /usr/sbin/nscd)
+    ==11384==    by 0x4E439D0: start_thread (in /lib64/libpthread-2.12.so)
+    ==11384==    by 0x599AB6C: clone (in /lib64/libc-2.12.so)
+    ==11384==  Address 0x15708395 is on thread 6's stack
+    
+    Fix the warning by initializing the structure.
+
+diff --git glibc-2.17-c758a686/nscd/nscd_stat.c glibc-2.17-c758a686/nscd/nscd_stat.c
+index 0f1f3c0..7aaa21b 100644
+--- glibc-2.17-c758a686/nscd/nscd_stat.c
++++ glibc-2.17-c758a686/nscd/nscd_stat.c
+@@ -94,6 +94,8 @@ send_stats (int fd, struct database_dyn dbs[lastdb])
+   struct statdata data;
+   int cnt;
+ 
++  memset (&data, 0, sizeof (data));
++
+   memcpy (data.version, compilation, sizeof (compilation));
+   data.debug_level = debug_level;
+   data.runtime = time (NULL) - start_time;
diff --git a/SOURCES/glibc-rh1183545.patch b/SOURCES/glibc-rh1183545.patch
new file mode 100644
index 0000000..a9ec106
--- /dev/null
+++ b/SOURCES/glibc-rh1183545.patch
@@ -0,0 +1,233 @@
+commit d5dd6189d506068ed11c8bfa1e1e9bffde04decd
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon Jan 21 17:41:28 2013 +0100
+
+    Fix parsing of numeric hosts in gethostbyname_r
+
+diff --git glibc-2.17-c758a686/nss/Makefile glibc-2.17-c758a686/nss/Makefile
+index 449a258..553eafa 100644
+--- glibc-2.17-c758a686/nss/Makefile
++++ glibc-2.17-c758a686/nss/Makefile
+@@ -37,7 +37,8 @@ install-bin             := getent makedb
+ makedb-modules = xmalloc hash-string
+ extra-objs		+= $(makedb-modules:=.o)
+ 
+-tests			= test-netdb tst-nss-test1 bug17079 tst-nss-getpwent
++tests			= test-netdb tst-nss-test1 bug17079 tst-nss-getpwent \
++			 test-digits-dots
+ xtests			= bug-erange
+ 
+ include ../Makeconfig
+diff --git glibc-2.17-c758a686/nss/digits_dots.c glibc-2.17-c758a686/nss/digits_dots.c
+index 2b86295..e007ef4 100644
+--- glibc-2.17-c758a686/nss/digits_dots.c
++++ glibc-2.17-c758a686/nss/digits_dots.c
+@@ -46,7 +46,10 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+     {
+       if (h_errnop)
+ 	*h_errnop = NETDB_INTERNAL;
+-      *result = NULL;
++      if (buffer_size == NULL)
++	*status = NSS_STATUS_TRYAGAIN;
++      else
++	*result = NULL;
+       return -1;
+     }
+ 
+@@ -83,14 +86,16 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 	}
+ 
+       size_needed = (sizeof (*host_addr)
+-		     + sizeof (*h_addr_ptrs) + strlen (name) + 1);
++		     + sizeof (*h_addr_ptrs)
++		     + sizeof (*h_alias_ptr) + strlen (name) + 1);
+ 
+       if (buffer_size == NULL)
+         {
+ 	  if (buflen < size_needed)
+ 	    {
++	      *status = NSS_STATUS_TRYAGAIN;
+ 	      if (h_errnop != NULL)
+-		*h_errnop = TRY_AGAIN;
++		*h_errnop = NETDB_INTERNAL;
+ 	      __set_errno (ERANGE);
+ 	      goto done;
+ 	    }
+@@ -109,7 +114,7 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 	      *buffer_size = 0;
+ 	      __set_errno (save);
+ 	      if (h_errnop != NULL)
+-		*h_errnop = TRY_AGAIN;
++		*h_errnop = NETDB_INTERNAL;
+ 	      *result = NULL;
+ 	      goto done;
+ 	    }
+@@ -149,7 +154,9 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 		  if (! ok)
+ 		    {
+ 		      *h_errnop = HOST_NOT_FOUND;
+-		      if (buffer_size)
++		      if (buffer_size == NULL)
++			*status = NSS_STATUS_NOTFOUND;
++		      else
+ 			*result = NULL;
+ 		      goto done;
+ 		    }
+@@ -190,7 +197,7 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 		  if (buffer_size == NULL)
+ 		    *status = NSS_STATUS_SUCCESS;
+ 		  else
+-		   *result = resbuf;
++		    *result = resbuf;
+ 		  goto done;
+ 		}
+ 
+@@ -201,15 +208,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 
+       if ((isxdigit (name[0]) && strchr (name, ':') != NULL) || name[0] == ':')
+ 	{
+-	  const char *cp;
+-	  char *hostname;
+-	  typedef unsigned char host_addr_t[16];
+-	  host_addr_t *host_addr;
+-	  typedef char *host_addr_list_t[2];
+-	  host_addr_list_t *h_addr_ptrs;
+-	  size_t size_needed;
+-	  int addr_size;
+-
+ 	  switch (af)
+ 	    {
+ 	    default:
+@@ -225,7 +223,10 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 	      /* This is not possible.  We cannot represent an IPv6 address
+ 		 in an `struct in_addr' variable.  */
+ 	      *h_errnop = HOST_NOT_FOUND;
+-	      *result = NULL;
++	      if (buffer_size == NULL)
++		*status = NSS_STATUS_NOTFOUND;
++	      else
++		*result = NULL;
+ 	      goto done;
+ 
+ 	    case AF_INET6:
+@@ -233,42 +234,6 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 	      break;
+ 	    }
+ 
+-	  size_needed = (sizeof (*host_addr)
+-			 + sizeof (*h_addr_ptrs) + strlen (name) + 1);
+-
+-	  if (buffer_size == NULL && buflen < size_needed)
+-	    {
+-	      if (h_errnop != NULL)
+-		*h_errnop = TRY_AGAIN;
+-	      __set_errno (ERANGE);
+-	      goto done;
+-	    }
+-	  else if (buffer_size != NULL && *buffer_size < size_needed)
+-	    {
+-	      char *new_buf;
+-	      *buffer_size = size_needed;
+-	      new_buf = realloc (*buffer, *buffer_size);
+-
+-	      if (new_buf == NULL)
+-		{
+-		  save = errno;
+-		  free (*buffer);
+-		  __set_errno (save);
+-		  *buffer = NULL;
+-		  *buffer_size = 0;
+-		  *result = NULL;
+-		  goto done;
+-		}
+-	      *buffer = new_buf;
+-	    }
+-
+-	  memset (*buffer, '\0', size_needed);
+-
+-	  host_addr = (host_addr_t *) *buffer;
+-	  h_addr_ptrs = (host_addr_list_t *)
+-	    ((char *) host_addr + sizeof (*host_addr));
+-	  hostname = (char *) h_addr_ptrs + sizeof (*h_addr_ptrs);
+-
+ 	  for (cp = name;; ++cp)
+ 	    {
+ 	      if (!*cp)
+@@ -281,7 +246,9 @@ __nss_hostname_digits_dots (const char *name, struct hostent *resbuf,
+ 		  if (inet_pton (AF_INET6, name, host_addr) <= 0)
+ 		    {
+ 		      *h_errnop = HOST_NOT_FOUND;
+-		      if (buffer_size)
++		      if (buffer_size == NULL)
++			*status = NSS_STATUS_NOTFOUND;
++		      else
+ 			*result = NULL;
+ 		      goto done;
+ 		    }
+diff --git glibc-2.17-c758a686/nss/getXXbyYY_r.c glibc-2.17-c758a686/nss/getXXbyYY_r.c
+index 1067744..44d00f4 100644
+--- glibc-2.17-c758a686/nss/getXXbyYY_r.c
++++ glibc-2.17-c758a686/nss/getXXbyYY_r.c
+@@ -179,6 +179,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
+     case -1:
+       return errno;
+     case 1:
++#ifdef NEED_H_ERRNO
++      any_service = true;
++#endif
+       goto done;
+     }
+ #endif
+@@ -288,7 +291,7 @@ done:
+     /* This happens when we weren't able to use a service for reasons other
+        than the module not being found.  In such a case, we'd want to tell the
+        caller that errno has the real reason for failure.  */
+-      *h_errnop = NETDB_INTERNAL;
++    *h_errnop = NETDB_INTERNAL;
+   else if (status != NSS_STATUS_SUCCESS && !any_service)
+     /* We were not able to use any service.  */
+     *h_errnop = NO_RECOVERY;
+diff --git glibc-2.17-c758a686/nss/test-digits-dots.c glibc-2.17-c758a686/nss/test-digits-dots.c
+new file mode 100644
+index 0000000..1efa344
+--- /dev/null
++++ glibc-2.17-c758a686/nss/test-digits-dots.c
+@@ -0,0 +1,38 @@
++/* Copyright (C) 2013 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/>.  */
++
++/* Testcase for BZ #15014 */
++
++#include <stdlib.h>
++#include <netdb.h>
++#include <errno.h>
++
++static int
++do_test (void)
++{
++  char buf[32];
++  struct hostent *result = NULL;
++  struct hostent ret;
++  int h_err = 0;
++  int err;
++
++  err = gethostbyname_r ("1.2.3.4", &ret, buf, sizeof (buf), &result, &h_err);
++  return err == ERANGE && h_err == NETDB_INTERNAL ? EXIT_SUCCESS : EXIT_FAILURE;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
diff --git a/SOURCES/glibc-rh1186491.patch b/SOURCES/glibc-rh1186491.patch
new file mode 100644
index 0000000..31dc1b5
--- /dev/null
+++ b/SOURCES/glibc-rh1186491.patch
@@ -0,0 +1,32 @@
+Patch not applicable to upstream, but the test failures not visible
+there anymore.  (The math tests have been reorganized.)
+
+--- glibc-2.17-c758a686/math/libm-test.inc	2015-01-22 10:53:11.015331338 -0500
++++ glibc-2.17-c758a686/math/libm-test.inc	2015-01-26 16:46:24.631769811 -0500
+@@ -521,7 +521,7 @@
+ }
+ 
+ 
+-static void
++static void __attribute__ ((noinline))
+ check_float_internal (const char *test_name, FLOAT computed, FLOAT expected,
+ 		      FLOAT max_ulp, int xfail, int exceptions,
+ 		      FLOAT *curr_max_error)
+@@ -610,7 +610,7 @@
+ }
+ 
+ 
+-static void
++static void __attribute__ ((noinline))
+ check_float (const char *test_name, FLOAT computed, FLOAT expected,
+ 	     FLOAT max_ulp, int xfail, int exceptions)
+ {
+@@ -619,7 +619,7 @@
+ }
+ 
+ 
+-static void
++static void __attribute__ ((noinline))
+ check_complex (const char *test_name, __complex__ FLOAT computed,
+ 	       __complex__ FLOAT expected,
+ 	       __complex__ FLOAT max_ulp, __complex__ int xfail,
diff --git a/SOURCES/glibc-rh1186620.patch b/SOURCES/glibc-rh1186620.patch
new file mode 100644
index 0000000..ef8f580
--- /dev/null
+++ b/SOURCES/glibc-rh1186620.patch
@@ -0,0 +1,95 @@
+commit 3e3002ffead0526d088c353f97475400367087da
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue Feb 24 12:57:26 2015 +0530
+
+    Skip logging for DNSSEC responses [BZ 14841]
+    
+    DNSSEC defines a number of response types that one me expect when the
+    DO bit is set.  We don't process any of them, but since we do allow
+    setting the DO bit, skip them without logging an error since it is
+    only a nuisance.
+    
+    Tested on x86_64.
+    
+    	[BZ #14841]
+    	* resolv/gethnamaddr.c (getanswer): Skip logging if
+    	RES_USE_DNSSEC is set.
+    	* resolv/nss_dns/dns-host.c (getanswer_r): Likewise.
+
+diff --git glibc-2.17-c758a686/resolv/gethnamaddr.c glibc-2.17-c758a686/resolv/gethnamaddr.c
+index a861a84..7fd0e49 100644
+--- glibc-2.17-c758a686/resolv/gethnamaddr.c
++++ glibc-2.17-c758a686/resolv/gethnamaddr.c
+@@ -331,23 +331,18 @@ getanswer (const querybuf *answer, int anslen, const char *qname, int qtype)
+ 			buflen -= n;
+ 			continue;
+ 		}
+-		if ((type == T_SIG) || (type == T_KEY) || (type == T_NXT)) {
+-			/* We don't support DNSSEC yet.  For now, ignore
+-			 * the record and send a low priority message
+-			 * to syslog.
+-			 */
+-			syslog(LOG_DEBUG|LOG_AUTH,
+-	       "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
+-			       qname, p_class(C_IN), p_type(qtype),
+-			       p_type(type));
+-			cp += n;
+-			continue;
+-		}
+ 		if (type != qtype) {
+-			syslog(LOG_NOTICE|LOG_AUTH,
++			/* Log a low priority message if we get an unexpected
++			 * record, but skip it if we are using DNSSEC since it
++			 * uses many different types in responses that do not
++			 * match QTYPE.
++			 */
++			if ((_res.options & RES_USE_DNSSEC) == 0) {
++				syslog(LOG_NOTICE|LOG_AUTH,
+ 	       "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
+-			       qname, p_class(C_IN), p_type(qtype),
+-			       p_type(type));
++					qname, p_class(C_IN), p_type(qtype),
++					p_type(type));
++			}
+ 			cp += n;
+ 			continue;		/* XXX - had_error++ ? */
+ 		}
+diff --git glibc-2.17-c758a686/resolv/nss_dns/dns-host.c glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
+index f715ab0..b16b0dd 100644
+--- glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
++++ glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
+@@ -820,26 +820,19 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
+ 	  linebuflen -= n;
+ 	  continue;
+ 	}
+-      if (__builtin_expect (type == T_SIG, 0)
+-	  || __builtin_expect (type == T_KEY, 0)
+-	  || __builtin_expect (type == T_NXT, 0))
+-	{
+-	  /* We don't support DNSSEC yet.  For now, ignore the record
+-	     and send a low priority message to syslog.  */
+-	  syslog (LOG_DEBUG | LOG_AUTH,
+-	       "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
+-		  qname, p_class (C_IN), p_type(qtype), p_type (type));
+-	  cp += n;
+-	  continue;
+-	}
+ 
+       if (type == T_A && qtype == T_AAAA && map)
+ 	have_to_map = 1;
+       else if (__builtin_expect (type != qtype, 0))
+ 	{
+-	  syslog (LOG_NOTICE | LOG_AUTH,
+-	       "gethostby*.getanswer: asked for \"%s %s %s\", got type \"%s\"",
+-		  qname, p_class (C_IN), p_type (qtype), p_type (type));
++	  /* Log a low priority message if we get an unexpected record, but
++	     skip it if we are using DNSSEC since it uses many different types
++	     in responses that do not match QTYPE.  */
++	  if ((_res.options & RES_USE_DNSSEC) == 0)
++	    syslog (LOG_NOTICE | LOG_AUTH,
++		    "gethostby*.getanswer: asked for \"%s %s %s\", "
++		    "got type \"%s\"",
++		    qname, p_class (C_IN), p_type (qtype), p_type (type));
+ 	  cp += n;
+ 	  continue;			/* XXX - had_error++ ? */
+ 	}
diff --git a/SOURCES/glibc-rh1188235.patch b/SOURCES/glibc-rh1188235.patch
new file mode 100644
index 0000000..9435bc8
--- /dev/null
+++ b/SOURCES/glibc-rh1188235.patch
@@ -0,0 +1,89 @@
+commit 5bd80bfe9ca0d955bfbbc002781bc7b01b6bcb06
+Author: Paul Pluzhnikov <ppluzhnikov@google.com>
+Date:   Fri Feb 6 00:30:42 2015 -0500
+
+    CVE-2015-1472: wscanf allocates too little memory
+    
+    BZ #16618
+    
+    Under certain conditions wscanf can allocate too little memory for the
+    to-be-scanned arguments and overflow the allocated buffer.  The
+    implementation now correctly computes the required buffer size when
+    using malloc.
+    
+    A regression test was added to tst-sscanf.
+
+--- glibc-2.17-c758a686/stdio-common/vfscanf.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/stdio-common/vfscanf.c	2015-05-28 14:01:58.512816390 -0400
+@@ -272,9 +272,10 @@
+       if (__builtin_expect (wpsize == wpmax, 0))			    \
+ 	{								    \
+ 	  CHAR_T *old = wp;						    \
+-	  size_t newsize = (UCHAR_MAX + 1 > 2 * wpmax			    \
+-			    ? UCHAR_MAX + 1 : 2 * wpmax);		    \
+-	  if (use_malloc || !__libc_use_alloca (newsize))		    \
++	  bool fits = __glibc_likely (wpmax <= SIZE_MAX / sizeof (CHAR_T) / 2); \
++	  size_t wpneed = MAX (UCHAR_MAX + 1, 2 * wpmax);		    \
++	  size_t newsize = fits ? wpneed * sizeof (CHAR_T) : SIZE_MAX;	    \
++	  if (!__libc_use_alloca (newsize))				    \
+ 	    {								    \
+ 	      wp = realloc (use_malloc ? wp : NULL, newsize);		    \
+ 	      if (wp == NULL)						    \
+@@ -286,14 +287,13 @@
+ 		}							    \
+ 	      if (! use_malloc)						    \
+ 		MEMCPY (wp, old, wpsize);				    \
+-	      wpmax = newsize;						    \
++	      wpmax = wpneed;						    \
+ 	      use_malloc = true;					    \
+ 	    }								    \
+ 	  else								    \
+ 	    {								    \
+ 	      size_t s = wpmax * sizeof (CHAR_T);			    \
+-	      wp = (CHAR_T *) extend_alloca (wp, s,			    \
+-					     newsize * sizeof (CHAR_T));    \
++	      wp = (CHAR_T *) extend_alloca (wp, s, newsize);		    \
+ 	      wpmax = s / sizeof (CHAR_T);				    \
+ 	      if (old != NULL)						    \
+ 		MEMCPY (wp, old, wpsize);				    \
+--- glibc-2.17-c758a686/stdio-common/tst-sscanf.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/stdio-common/tst-sscanf.c	2015-06-03 13:56:10.883924259 -0400
+@@ -196,5 +196,38 @@
+ 	}
+     }
+ 
++  /* BZ #16618
++     The test will segfault during SSCANF if the buffer overflow
++     is not fixed.  The size of `s` is such that it forces the use
++     of malloc internally and this triggers the incorrect computation.
++     Thus the value for SIZE is arbitrariy high enough that malloc
++     is used.  */
++  {
++#define SIZE 131072
++    CHAR *s = malloc ((SIZE + 1) * sizeof (*s));
++    if (s == NULL)
++      abort ();
++    for (size_t i = 0; i < SIZE; i++)
++      s[i] = L('0');
++    s[SIZE] = L('\0');
++    int i = 42;
++    /* Scan multi-digit zero into `i`.  */
++    if (SSCANF (s, L("%d"), &i) != 1)
++      {
++	printf ("FAIL: bug16618: SSCANF did not read one input item.\n");
++	result = 1;
++      }
++    if (i != 0)
++      {
++	printf ("FAIL: bug16618: Value of `i` was not zero as expected.\n");
++	result = 1;
++      }
++    free (s);
++    if (result != 1)
++      printf ("PASS: bug16618: Did not crash.\n");
++#undef SIZE
++  }
++
++
+   return result;
+ }
diff --git a/SOURCES/glibc-rh1189278-1.patch b/SOURCES/glibc-rh1189278-1.patch
new file mode 100644
index 0000000..012e005
--- /dev/null
+++ b/SOURCES/glibc-rh1189278-1.patch
@@ -0,0 +1,67 @@
+#
+# In rhel-6.x the Makerules are not entirely as mature as they are
+# in glibc 2.21 (from which the example link-libc-args is taken from).
+# In rhel-6.x the applications are not built like their counterpart
+# real applications, and because of that compiling DSOs that use TLS
+# will fail with undefined references to __tls_get_addr which resides
+# in ld.so and is never included in the link. This patch enhances
+# only the build-module and build-module-asneeded targets to include
+# a more fully and correct link line as the compiler driver would use
+# when constructing an application or DSO. We do not adjust the link
+# lines used to build lib* targets.
+#
+# The rest of this patch is brought in by glibc-rh1292018-0a.patch
+# where we need to link against ld.so from libm.so.
+#
+
+commit fab7ce3f5b4060bf62659e8b58529de4156b5a2f
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Fri May 31 16:16:33 2013 +0000
+
+    Link extra-libs consistently with libc and ld.so.
+
+diff -urN glibc-2.17-c758a686/Makerules glibc-2.17-c758a686/Makerules
+--- glibc-2.17-c758a686/Makerules	2015-02-18 19:53:00.000000000 -0500
++++ glibc-2.17-c758a686/Makerules	2015-02-18 20:08:33.299000028 -0500
+@@ -437,6 +437,25 @@
+ load-map-file = $(map-file:%=-Wl,--version-script=%)
+ endif
+ 
++# Compiler arguments to use to link a shared object with libc and
++# ld.so.  This is intended to be as similar as possible to a default
++# link with an installed libc.
++link-libc-args = -Wl,--start-group \
++                 $(libc-for-link) \
++                 $(common-objpfx)libc_nonshared.a \
++                 $(as-needed) $(elf-objpfx)ld.so $(no-as-needed) \
++                 -Wl,--end-group
++
++# The corresponding shared libc to use.  This may be modified for a
++# particular target.
++libc-for-link = $(common-objpfx)libc.so
++
++# The corresponding dependencies.  As these are used in dependencies,
++# not just commands, they cannot use target-specific variables so need
++# to name both possible libc.so objects.
++link-libc-deps = $(common-objpfx)libc.so $(common-objpfx)linkobj/libc.so \
++                 $(common-objpfx)libc_nonshared.a $(elf-objpfx)ld.so
++
+ # Pattern rule to build a shared object from an archive of PIC objects.
+ # This must come after the installation rules so Make doesn't try to
+ # build shared libraries in place from the installed *_pic.a files.
+@@ -518,12 +537,13 @@
+ # not for shared objects
+ define build-module
+ $(build-module-helper) -o $@ $(shlib-lds-flags) \
+-	  $(csu-objpfx)abi-note.o $(build-module-objlist)
++	  $(csu-objpfx)abi-note.o $(build-module-objlist) $(link-libc-args)
+ endef
+ define build-module-asneeded
+ $(build-module-helper) -o $@ $(shlib-lds-flags) \
+ 	  $(csu-objpfx)abi-note.o \
+-	  -Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed
++	  -Wl,--as-needed $(build-module-objlist) -Wl,--no-as-needed \
++	  $(link-libc-args)
+ endef
+ 
+ build-module-helper-objlist = \
diff --git a/SOURCES/glibc-rh1189278.patch b/SOURCES/glibc-rh1189278.patch
new file mode 100644
index 0000000..86c7f4d
--- /dev/null
+++ b/SOURCES/glibc-rh1189278.patch
@@ -0,0 +1,407 @@
+#
+# Based on this upstream commit:
+#
+# commit d8dd00805b8f3a011735d7a407097fb1c408d867
+# Author: H.J. Lu <hjl.tools@gmail.com>
+# Date:   Fri Nov 28 07:54:07 2014 -0800
+# 
+#     Resize DTV if the current DTV isn't big enough
+#     
+#     This patch changes _dl_allocate_tls_init to resize DTV if the current DTV
+#     isn't big enough.  Tested on X86-64, x32 and ia32.
+#     
+#         [BZ #13862]
+#         * elf/dl-tls.c: Include <atomic.h>.
+#         (oom): Remove #ifdef SHARED/#endif.
+#         (_dl_static_dtv, _dl_initial_dtv): Moved before ...
+#         (_dl_resize_dtv): This.  Extracted from _dl_update_slotinfo.
+#         (_dl_allocate_tls_init): Resize DTV if the current DTV isn't
+#         big enough.
+#         (_dl_update_slotinfo): Call _dl_resize_dtv to resize DTV.
+#         * nptl/Makefile (tests): Add tst-stack4.
+#         (modules-names): Add tst-stack4mod.
+#         ($(objpfx)tst-stack4): New.
+#         (tst-stack4mod.sos): Likewise.
+#         ($(objpfx)tst-stack4.out): Likewise.
+#         ($(tst-stack4mod.sos)): Likewise.
+#         (clean): Likewise.
+#         * nptl/tst-stack4.c: New file.
+#         * nptl/tst-stack4mod.c: Likewise.
+# 
+diff -urN glibc-2.17-c758a686/elf/dl-tls.c glibc-2.17-c758a686/elf/dl-tls.c
+--- glibc-2.17-c758a686/elf/dl-tls.c	2015-02-18 14:15:28.078461873 -0500
++++ glibc-2.17-c758a686/elf/dl-tls.c	2015-02-18 14:38:37.630374771 -0500
+@@ -24,6 +24,7 @@
+ #include <stdlib.h>
+ #include <unistd.h>
+ #include <sys/param.h>
++#include <atomic.h>
+ 
+ #include <tls.h>
+ #include <dl-tls.h>
+@@ -35,14 +36,12 @@
+ 
+ 
+ /* Out-of-memory handler.  */
+-#ifdef SHARED
+ static void
+ __attribute__ ((__noreturn__))
+ oom (void)
+ {
+   _dl_fatal_printf ("cannot allocate memory for thread-local data: ABORT\n");
+ }
+-#endif
+ 
+ 
+ size_t
+@@ -392,6 +391,52 @@
+   return result;
+ }
+ 
++static dtv_t *
++_dl_resize_dtv (dtv_t *dtv)
++{
++  /* Resize the dtv.  */
++  dtv_t *newp;
++  /* Load GL(dl_tls_max_dtv_idx) atomically since it may be written to by
++     other threads concurrently. -- We don't have the required atomic
++     infrastructure to load dl_tls_max_dtv_idx atomically, but on all the
++     architectures we care about it should load atomically. If this had
++     an atomic_load_acquire we would still be missing the releases for
++     the writes.  */
++  size_t newsize = GL(dl_tls_max_dtv_idx) + DTV_SURPLUS;
++  size_t oldsize = dtv[-1].counter;
++
++#if SHARED
++  if (dtv == GL(dl_initial_dtv))
++    {
++      /* This is the initial dtv that was either statically allocated in
++	 __libc_setup_tls or allocated during rtld startup using the
++	 dl-minimal.c malloc instead of the real malloc.  We can't free
++	 it, we have to abandon the old storage.  */
++
++      newp = malloc ((2 + newsize) * sizeof (dtv_t));
++      if (newp == NULL)
++	oom ();
++      memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t));
++    }
++  else
++#endif
++    {
++      newp = realloc (&dtv[-1],
++		      (2 + newsize) * sizeof (dtv_t));
++      if (newp == NULL)
++	oom ();
++    }
++
++  newp[0].counter = newsize;
++
++  /* Clear the newly allocated part.  */
++  memset (newp + 2 + oldsize, '\0',
++	  (newsize - oldsize) * sizeof (dtv_t));
++
++  /* Return the generation counter.  */
++  return &newp[1];
++}
++
+ 
+ void *
+ internal_function
+@@ -406,6 +451,16 @@
+   size_t total = 0;
+   size_t maxgen = 0;
+ 
++  /* Check if the current dtv is big enough.   */
++  if (dtv[-1].counter < GL(dl_tls_max_dtv_idx))
++    {
++      /* Resize the dtv.  */
++      dtv = _dl_resize_dtv (dtv);
++
++      /* Install this new dtv in the thread data structures.  */
++      INSTALL_DTV (result, &dtv[-1]);
++    }
++
+   /* We have to prepare the dtv for all currently loaded modules using
+      TLS.  For those which are dynamically loaded we add the values
+      indicating deferred allocation.  */
+@@ -637,41 +692,10 @@
+ 	      assert (total + cnt == modid);
+ 	      if (dtv[-1].counter < modid)
+ 		{
+-		  /* Reallocate the dtv.  */
+-		  dtv_t *newp;
+-		  size_t newsize = GL(dl_tls_max_dtv_idx) + DTV_SURPLUS;
+-		  size_t oldsize = dtv[-1].counter;
+-
+-		  assert (map->l_tls_modid <= newsize);
+-
+-		  if (dtv == GL(dl_initial_dtv))
+-		    {
+-		      /* This is the initial dtv that was allocated
+-			 during rtld startup using the dl-minimal.c
+-			 malloc instead of the real malloc.  We can't
+-			 free it, we have to abandon the old storage.  */
+-
+-		      newp = malloc ((2 + newsize) * sizeof (dtv_t));
+-		      if (newp == NULL)
+-			oom ();
+-		      memcpy (newp, &dtv[-1], (2 + oldsize) * sizeof (dtv_t));
+-		    }
+-		  else
+-		    {
+-		      newp = realloc (&dtv[-1],
+-				      (2 + newsize) * sizeof (dtv_t));
+-		      if (newp == NULL)
+-			oom ();
+-		    }
+-
+-		  newp[0].counter = newsize;
+-
+-		  /* Clear the newly allocated part.  */
+-		  memset (newp + 2 + oldsize, '\0',
+-			  (newsize - oldsize) * sizeof (dtv_t));
++		  /* Resize the dtv.  */
++		  dtv = _dl_resize_dtv (dtv);
+ 
+-		  /* Point dtv to the generation counter.  */
+-		  dtv = &newp[1];
++		  assert (modid <= dtv[-1].counter);
+ 
+ 		  /* Install this new dtv in the thread data
+ 		     structures.  */
+diff -urN glibc-2.17-c758a686/nptl/Makefile glibc-2.17-c758a686/nptl/Makefile
+--- glibc-2.17-c758a686/nptl/Makefile	2015-02-18 14:15:28.073462028 -0500
++++ glibc-2.17-c758a686/nptl/Makefile	2015-02-18 14:15:49.817786667 -0500
+@@ -251,7 +251,7 @@
+ 	tst-exec1 tst-exec2 tst-exec3 tst-exec4 \
+ 	tst-exit1 tst-exit2 tst-exit3 \
+ 	tst-stdio1 tst-stdio2 \
+-	tst-stack1 tst-stack2 tst-stack3 tst-pthread-getattr \
++	tst-stack1 tst-stack2 tst-stack3 tst-stack4 tst-pthread-getattr \
+ 	tst-unload \
+ 	tst-dlsym1 \
+ 	tst-sysconf \
+@@ -297,7 +297,7 @@
+ 
+ modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \
+ 		tst-tls5mod tst-tls5moda tst-tls5modb tst-tls5modc \
+-		tst-tls5modd tst-tls5mode tst-tls5modf \
++		tst-tls5modd tst-tls5mode tst-tls5modf tst-stack4mod \
+ 		tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod
+ extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) tst-cleanup4aux.o
+ test-extras += $(modules-names) tst-cleanup4aux
+@@ -459,6 +459,19 @@
+ 	$(common-objpfx)malloc/mtrace $(objpfx)tst-stack3.mtrace > $@
+ generated += tst-stack3-mem tst-stack3.mtrace
+ 
++$(objpfx)tst-stack4: $(libdl) $(shared-thread-library)
++tst-stack4mod.sos=$(shell for i in 0 1 2 3 4 5 6 7 8 9 10 \
++				   11 12 13 14 15 16 17 18 19; do \
++			    for j in 0 1 2 3 4 5 6 7 8 9 10 \
++				     11 12 13 14 15 16 17 18 19; do \
++			      echo $(objpfx)tst-stack4mod-$$i-$$j.so; \
++			    done; done)
++$(objpfx)tst-stack4.out: $(tst-stack4mod.sos)
++$(tst-stack4mod.sos): $(objpfx)tst-stack4mod.so
++	cp -f $< $@
++clean:
++	rm -f $(tst-stack4mod.sos)
++
+ $(objpfx)tst-cleanup4: $(objpfx)tst-cleanup4aux.o $(shared-thread-library)
+ $(objpfx)tst-cleanupx4: $(objpfx)tst-cleanup4aux.o $(shared-thread-library)
+ 
+diff -urN glibc-2.17-c758a686/nptl/tst-stack4.c glibc-2.17-c758a686/nptl/tst-stack4.c
+--- glibc-2.17-c758a686/nptl/tst-stack4.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/nptl/tst-stack4.c	2015-02-18 14:15:49.817786667 -0500
+@@ -0,0 +1,159 @@
++/* Test DTV size oveflow when pthread_create reuses old DTV and TLS is
++   used by dlopened shared object.
++   Copyright (C) 2014 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 <stdint.h>
++#include <dlfcn.h>
++#include <assert.h>
++#include <pthread.h>
++
++/* The choices of thread count, and file counts are arbitary.
++   The point is simply to run enough threads that an exiting
++   thread has it's stack reused by another thread at the same
++   time as new libraries have been loaded.  */
++#define DSO_SHARED_FILES 20
++#define DSO_OPEN_THREADS 20
++#define DSO_EXEC_THREADS 2
++
++/* Used to make sure that only one thread is calling dlopen and dlclose
++   at a time.  */
++pthread_mutex_t g_lock;
++
++typedef void (*function) (void);
++
++void *
++dso_invoke(void *dso_fun)
++{
++  function *fun_vec = (function *) dso_fun;
++  int dso;
++
++  for (dso = 0; dso < DSO_SHARED_FILES; dso++)
++    (*fun_vec[dso]) ();
++
++  pthread_exit (NULL);
++}
++
++void *
++dso_process (void * p)
++{
++  void *handle[DSO_SHARED_FILES];
++  function fun_vec[DSO_SHARED_FILES];
++  char dso_path[DSO_SHARED_FILES][100];
++  int dso;
++  uintptr_t t = (uintptr_t) p;
++
++  /* Open DSOs and get a function.  */
++  for (dso = 0; dso < DSO_SHARED_FILES; dso++)
++    {
++      sprintf (dso_path[dso], "tst-stack4mod-%i-%i.so", t, dso);
++
++      pthread_mutex_lock (&g_lock);
++
++      handle[dso] = dlopen (dso_path[dso], RTLD_NOW);
++      assert (handle[dso]);
++
++      fun_vec[dso] = (function) dlsym (handle[dso], "function");
++      assert (fun_vec[dso]);
++
++      pthread_mutex_unlock (&g_lock);
++    }
++
++  /* Spawn workers.  */
++  pthread_t thread[DSO_EXEC_THREADS];
++  int i, ret;
++  uintptr_t result = 0;
++  for (i = 0; i < DSO_EXEC_THREADS; i++)
++    {
++      pthread_mutex_lock (&g_lock);
++      ret = pthread_create (&thread[i], NULL, dso_invoke, (void *) fun_vec);
++      if (ret != 0)
++	{
++	  printf ("pthread_create failed: %d\n", ret);
++	  result = 1;
++	}
++      pthread_mutex_unlock (&g_lock);
++    }
++
++  if (!result)
++    for (i = 0; i < DSO_EXEC_THREADS; i++)
++      {
++	ret = pthread_join (thread[i], NULL);
++	if (ret != 0)
++	  {
++	    printf ("pthread_join failed: %d\n", ret);
++	    result = 1;
++	  }
++      }
++
++  /* Close all DSOs.  */
++  for (dso = 0; dso < DSO_SHARED_FILES; dso++)
++    {
++      pthread_mutex_lock (&g_lock);
++      dlclose (handle[dso]);
++      pthread_mutex_unlock (&g_lock);
++    }
++
++  /* Exit.  */
++  pthread_exit ((void *) result);
++}
++
++static int
++do_test (void)
++{
++  pthread_t thread[DSO_OPEN_THREADS];
++  int i,j;
++  int ret;
++  int result = 0;
++
++  pthread_mutex_init (&g_lock, NULL);
++
++  /* 100 is arbitrary here and is known to trigger PR 13862.  */
++  for (j = 0; j < 100; j++)
++    {
++      for (i = 0; i < DSO_OPEN_THREADS; i++)
++	{
++	  ret = pthread_create (&thread[i], NULL, dso_process,
++				(void *) (uintptr_t) i);
++	  if (ret != 0)
++	    {
++	      printf ("pthread_create failed: %d\n", ret);
++	      result = 1;
++	    }
++	}
++
++      if (result)
++	break;
++
++      for (i = 0; i < DSO_OPEN_THREADS; i++)
++	{
++	  ret = pthread_join (thread[i], NULL);
++	  if (ret != 0)
++	    {
++	      printf ("pthread_join failed: %d\n", ret);
++	      result = 1;
++	    }
++	}
++    }
++
++  return result;
++}
++
++#define TEST_FUNCTION do_test ()
++#define TIMEOUT 100
++#include "../test-skeleton.c"
+diff -urN glibc-2.17-c758a686/nptl/tst-stack4mod.c glibc-2.17-c758a686/nptl/tst-stack4mod.c
+--- glibc-2.17-c758a686/nptl/tst-stack4mod.c	1969-12-31 19:00:00.000000000 -0500
++++ glibc-2.17-c758a686/nptl/tst-stack4mod.c	2015-02-18 14:15:49.817786667 -0500
+@@ -0,0 +1,28 @@
++/* This tests DTV usage with TLS in dlopened shared object.
++   Copyright (C) 2014 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/>.  */
++
++/* 256 is arbitrary here and is known to trigger PR 13862.  */
++__thread int var[256] attribute_hidden = {0};
++
++void
++function (void)
++{
++  int i;
++  for (i = 0; i < sizeof (var) / sizeof (int); i++)
++    var[i] = i;
++}
diff --git a/SOURCES/glibc-rh1193797.patch b/SOURCES/glibc-rh1193797.patch
new file mode 100644
index 0000000..52b1251
--- /dev/null
+++ b/SOURCES/glibc-rh1193797.patch
@@ -0,0 +1,804 @@
+commit cf9313e7d1dd42addd6cf8c9277f0f18a62cdeff
+Author: Carlos O'Donell <carlos@systemhalted.org>
+Date:   Fri Mar 13 09:49:24 2015 -0400
+
+    Enhance nscd's inotify support (Bug 14906).
+
+--- glibc-2.17-c758a686/nscd/cache.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nscd/cache.c	2015-05-13 13:45:57.259958374 -0400
+@@ -272,28 +272,38 @@
+       while (runp != NULL)
+ 	{
+ #ifdef HAVE_INOTIFY
+-	  if (runp->inotify_descr == -1)
++	  if (runp->inotify_descr[TRACED_FILE] == -1)
+ #endif
+ 	    {
+ 	      struct stat64 st;
+ 
+ 	      if (stat64 (runp->fname, &st) < 0)
+ 		{
++		  /* Print a diagnostic that the traced file was missing.
++		     We must not disable tracing since the file might return
++		     shortly and we want to reload it at the next pruning.
++		     Disabling tracing here would go against the configuration
++		     as specified by the user via check-files.  */
+ 		  char buf[128];
+-		  /* We cannot stat() the file, disable file checking if the
+-		     file does not exist.  */
+-		  dbg_log (_("cannot stat() file `%s': %s"),
++		  dbg_log (_("checking for monitored file `%s': %s"),
+ 			   runp->fname, strerror_r (errno, buf, sizeof (buf)));
+-		  if (errno == ENOENT)
+-		    table->check_file = 0;
+ 		}
+ 	      else
+ 		{
+-		  if (st.st_mtime != table->file_mtime)
++		  /* This must be `!=` to catch cases where users turn the
++		     clocks back and we still want to detect any time difference
++		     in mtime.  */
++		  if (st.st_mtime != runp->mtime)
+ 		    {
+-		      /* The file changed.  Invalidate all entries.  */
++		      dbg_log (_("monitored file `%s` changed (mtime)"),
++			       runp->fname);
++		      /* The file changed. Invalidate all entries.  */
+ 		      now = LONG_MAX;
+-		      table->file_mtime = st.st_mtime;
++		      runp->mtime = st.st_mtime;
++#ifdef HAVE_INOTIFY
++		      /* Attempt to install a watch on the file.  */
++		      install_watches (runp);
++#endif
+ 		    }
+ 		}
+ 	    }
+--- glibc-2.17-c758a686/nscd/connections.c	2015-05-12 15:03:02.870274443 -0400
++++ glibc-2.17-c758a686/nscd/connections.c	2015-05-13 13:45:57.259958374 -0400
+@@ -974,6 +974,44 @@
+     finish_drop_privileges ();
+ }
+ 
++#ifdef HAVE_INOTIFY
++#define TRACED_FILE_MASK (IN_DELETE_SELF | IN_CLOSE_WRITE | IN_MOVE_SELF)
++#define TRACED_DIR_MASK (IN_DELETE_SELF | IN_CREATE | IN_MOVED_TO | IN_MOVE_SELF)
++void
++install_watches (struct traced_file *finfo)
++{
++  /* Use inotify support if we have it.  */
++  if (finfo->inotify_descr[TRACED_FILE] < 0)
++    finfo->inotify_descr[TRACED_FILE] = inotify_add_watch (inotify_fd,
++							   finfo->fname,
++			 				   TRACED_FILE_MASK);
++  if (finfo->inotify_descr[TRACED_FILE] < 0)
++    {
++      dbg_log (_("disabled inotify-based monitoring for file `%s': %s"),
++		 finfo->fname, strerror (errno));
++      return;
++    }
++  dbg_log (_("monitoring file `%s` (%d)"),
++	   finfo->fname, finfo->inotify_descr[TRACED_FILE]);
++  /* Additionally listen for events in the file's parent directory.
++     We do this because the file to be watched might be
++     deleted and then added back again.  When it is added back again
++     we must re-add the watch.  We must also cover IN_MOVED_TO to
++     detect a file being moved into the directory.  */
++  if (finfo->inotify_descr[TRACED_DIR] < 0)
++    finfo->inotify_descr[TRACED_DIR] = inotify_add_watch (inotify_fd,
++							  finfo->dname,
++							  TRACED_DIR_MASK);
++  if (finfo->inotify_descr[TRACED_DIR] < 0)
++    {
++      dbg_log (_("disabled inotify-based monitoring for directory `%s': %s"),
++		 finfo->fname, strerror (errno));
++      return;
++    }
++  dbg_log (_("monitoring directory `%s` (%d)"),
++	   finfo->dname, finfo->inotify_descr[TRACED_DIR]);
++}
++#endif
+ 
+ void
+ register_traced_file (size_t dbidx, struct traced_file *finfo)
+@@ -982,30 +1020,24 @@
+     return;
+ 
+   if (__builtin_expect (debug_level > 0, 0))
+-    dbg_log (_("register trace file %s for database %s"),
+-	     finfo->fname, dbnames[dbidx]);
++    dbg_log (_("monitoring file `%s' for database `%s' (%d)"),
++	     finfo->fname, dbnames[dbidx],
++             finfo->inotify_descr[TRACED_DIR]);
+ 
+ #ifdef HAVE_INOTIFY
+-  if (inotify_fd < 0
+-      || (finfo->inotify_descr = inotify_add_watch (inotify_fd, finfo->fname,
+-						    IN_DELETE_SELF
+-						    | IN_MODIFY)) < 0)
++  install_watches (finfo);
+ #endif
+-    {
+-      /* We need the modification date of the file.  */
+-      struct stat64 st;
+-
+-      if (stat64 (finfo->fname, &st) < 0)
+-	{
+-	  /* We cannot stat() the file, disable file checking.  */
+-	  dbg_log (_("cannot stat() file `%s': %s"),
+-		   finfo->fname, strerror (errno));
+-	  return;
+-	}
+ 
+-      finfo->inotify_descr = -1;
+-      finfo->mtime = st.st_mtime;
++  struct stat64 st;
++  if (stat64 (finfo->fname, &st) < 0)
++    {
++      /* We cannot stat() the file. Set mtime to zero and try again later.  */
++      dbg_log (_("stat failed for file `%s'; will try again later: %s"),
++               finfo->fname, strerror (errno));
++      finfo->mtime = 0;
+     }
++  else
++    finfo->mtime = st.st_mtime;
+ 
+   /* Queue up the file name.  */
+   finfo->next = dbs[dbidx].traced_files;
+@@ -1030,20 +1062,27 @@
+   for (number = pwddb; number < lastdb; ++number)
+     if (strcmp (key, dbnames[number]) == 0)
+       {
+-	if (number == hstdb)
++	struct traced_file *runp = dbs[number].traced_files;
++	while (runp != NULL)
+ 	  {
+-	    struct traced_file *runp = dbs[hstdb].traced_files;
+-	    while (runp != NULL)
+-	      if (runp->call_res_init)
+-		{
+-		  res_init ();
+-		  break;
+-		}
+-	      else
+-		runp = runp->next;
++	    /* Make sure we reload from file when checking mtime.  */
++	    runp->mtime = 0;
++#ifdef HAVE_INOTIFY
++	    /* During an invalidation we try to reload the traced
++	       file watches.  This allows the user to re-sync if
++	       inotify events were lost.  Similar to what we do during
++	       pruning.  */
++	    install_watches (runp);
++#endif
++	    if (runp->call_res_init)
++	      {
++		res_init ();
++		break;
++	      }
++	    runp = runp->next;
+ 	  }
+ 	break;
+-    }
++      }
+ 
+   if (number == lastdb)
+     {
+@@ -1871,6 +1910,234 @@
+ static time_t *starttime;
+ 
+ 
++#ifdef HAVE_INOTIFY
++/* Inotify event for changed file.  */
++union __inev
++{
++  struct inotify_event i;
++# ifndef PATH_MAX
++#  define PATH_MAX 1024
++# endif
++  char buf[sizeof (struct inotify_event) + PATH_MAX];
++};
++
++/* Returns 0 if the file is there otherwise -1.  */
++int
++check_file (struct traced_file *finfo)
++{
++  struct stat64 st;
++  /* We could check mtime and if different re-add
++     the watches, and invalidate the database, but we
++     don't because we are called from inotify_check_files
++     which should be doing that work.  If sufficient inotify
++     events were lost then the next pruning or invalidation
++     will do the stat and mtime check.  We don't do it here to
++     keep the logic simple.  */
++  if (stat64 (finfo->fname, &st) < 0)
++    return -1;
++  return 0;
++}
++
++/* Process the inotify event in INEV. If the event matches any of the files
++   registered with a database then mark that database as requiring its cache
++   to be cleared. We indicate the cache needs clearing by setting
++   TO_CLEAR[DBCNT] to true for the matching database.  */
++static void
++inotify_check_files (bool *to_clear, union __inev *inev)
++{
++  /* Check which of the files changed.  */
++  for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
++    {
++      struct traced_file *finfo = dbs[dbcnt].traced_files;
++
++      while (finfo != NULL)
++	{
++	  /* The configuration file was moved or deleted.
++	     We stop watching it at that point, and reinitialize.  */
++	  if (finfo->inotify_descr[TRACED_FILE] == inev->i.wd
++	      && ((inev->i.mask & IN_MOVE_SELF)
++		  || (inev->i.mask & IN_DELETE_SELF)
++		  || (inev->i.mask & IN_IGNORED)))
++	    {
++	      int ret;
++	      bool moved = (inev->i.mask & IN_MOVE_SELF) != 0;
++
++	      if (check_file (finfo) == 0)
++	        {
++		  dbg_log (_("ignored inotify event for `%s` (file exists)"),
++			   finfo->fname);
++		  return;
++		}
++
++	      dbg_log (_("monitored file `%s` was %s, removing watch"),
++		       finfo->fname, moved ? "moved" : "deleted");
++	      /* File was moved out, remove the watch.  Watches are
++		 automatically removed when the file is deleted.  */
++	      if (moved)
++		{
++		  ret = inotify_rm_watch (inotify_fd, inev->i.wd);
++		  if (ret < 0)
++		    dbg_log (_("failed to remove file watch `%s`: %s"),
++			     finfo->fname, strerror (errno));
++		}
++	      finfo->inotify_descr[TRACED_FILE] = -1;
++	      to_clear[dbcnt] = true;
++	      if (finfo->call_res_init)
++	        res_init ();
++	      return;
++	    }
++	  /* The configuration file was open for writing and has just closed.
++	     We reset the cache and reinitialize.  */
++	  if (finfo->inotify_descr[TRACED_FILE] == inev->i.wd
++	      && inev->i.mask & IN_CLOSE_WRITE)
++	    {
++	      /* Mark cache as needing to be cleared and reinitialize.  */
++	      dbg_log (_("monitored file `%s` was written to"), finfo->fname);
++	      to_clear[dbcnt] = true;
++	      if (finfo->call_res_init)
++	        res_init ();
++	      return;
++	    }
++	  /* The parent directory was moved or deleted.  We trigger one last
++	     invalidation.  At the next pruning or invalidation we may add
++	     this watch back if the file is present again.  */
++	  if (finfo->inotify_descr[TRACED_DIR] == inev->i.wd
++	      && ((inev->i.mask & IN_DELETE_SELF)
++		  || (inev->i.mask & IN_MOVE_SELF)
++		  || (inev->i.mask & IN_IGNORED)))
++	    {
++	      bool moved = (inev->i.mask & IN_MOVE_SELF) != 0;
++	      /* The directory watch may have already been removed
++		 but we don't know so we just remove it again and
++		 ignore the error.  Then we remove the file watch.
++		 Note: watches are automatically removed for deleted
++		 files.  */
++	      if (moved)
++		inotify_rm_watch (inotify_fd, inev->i.wd);
++	      if (finfo->inotify_descr[TRACED_FILE] != -1)
++		{
++		  dbg_log (_("monitored parent directory `%s` was %s, removing watch on `%s`"),
++			   finfo->dname, moved ? "moved" : "deleted", finfo->fname);
++		  if (inotify_rm_watch (inotify_fd, finfo->inotify_descr[TRACED_FILE]) < 0)
++		    dbg_log (_("failed to remove file watch `%s`: %s"),
++			     finfo->dname, strerror (errno));
++		}
++	      finfo->inotify_descr[TRACED_FILE] = -1;
++	      finfo->inotify_descr[TRACED_DIR] = -1;
++	      to_clear[dbcnt] = true;
++	      if (finfo->call_res_init)
++	        res_init ();
++	      /* Continue to the next entry since this might be the
++		 parent directory for multiple registered files and
++		 we want to remove watches for all registered files.  */
++	      continue;
++	    }
++	  /* The parent directory had a create or moved to event.  */
++	  if (finfo->inotify_descr[TRACED_DIR] == inev->i.wd
++	      && ((inev->i.mask & IN_MOVED_TO)
++		  || (inev->i.mask & IN_CREATE))
++	      && strcmp (inev->i.name, finfo->sfname) == 0)
++	    {
++	      /* We detected a directory change.  We look for the creation
++		 of the file we are tracking or the move of the same file
++		 into the directory.  */
++	      int ret;
++	      dbg_log (_("monitored file `%s` was %s, adding watch"),
++		       finfo->fname,
++		       inev->i.mask & IN_CREATE ? "created" : "moved into place");
++	      /* File was moved in or created.  Regenerate the watch.  */
++	      if (finfo->inotify_descr[TRACED_FILE] != -1)
++		inotify_rm_watch (inotify_fd,
++				  finfo->inotify_descr[TRACED_FILE]);
++
++	      ret = inotify_add_watch (inotify_fd,
++				       finfo->fname,
++				       TRACED_FILE_MASK);
++	      if (ret < 0)
++		dbg_log (_("failed to add file watch `%s`: %s"),
++			 finfo->fname, strerror (errno));
++
++	      finfo->inotify_descr[TRACED_FILE] = ret;
++
++	      /* The file is new or moved so mark cache as needing to
++		 be cleared and reinitialize.  */
++	      to_clear[dbcnt] = true;
++	      if (finfo->call_res_init)
++		res_init ();
++
++	      /* Done re-adding the watch.  Don't return, we may still
++		 have other files in this same directory, same watch
++		 descriptor, and need to process them.  */
++	    }
++	  /* Other events are ignored, and we move on to the next file.  */
++	  finfo = finfo->next;
++        }
++    }
++}
++
++/* If an entry in the array of booleans TO_CLEAR is TRUE then clear the cache
++   for the associated database, otherwise do nothing. The TO_CLEAR array must
++   have LASTDB entries.  */
++static inline void
++clear_db_cache (bool *to_clear)
++{
++  for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
++    if (to_clear[dbcnt])
++      {
++	pthread_mutex_lock (&dbs[dbcnt].prune_lock);
++	dbs[dbcnt].clear_cache = 1;
++	pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
++	pthread_cond_signal (&dbs[dbcnt].prune_cond);
++      }
++}
++
++int
++handle_inotify_events (void)
++{
++  bool to_clear[lastdb] = { false, };
++  union __inev inev;
++
++  /* Read all inotify events for files registered via
++     register_traced_file().  */
++  while (1)
++    {
++      /* Potentially read multiple events into buf.  */
++      ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd,
++					     &inev.buf,
++					     sizeof (inev)));
++      if (nb < (ssize_t) sizeof (struct inotify_event))
++	{
++	  /* Not even 1 event.  */
++	  if (__glibc_unlikely (nb == -1 && errno != EAGAIN))
++	    return -1;
++	  /* Done reading events that are ready.  */
++	  break;
++	}
++      /* Process all events.  The normal inotify interface delivers
++	 complete events on a read and never a partial event.  */
++      char *eptr = &inev.buf[0];
++      ssize_t count;
++      while (1)
++	{
++	  /* Check which of the files changed.  */
++	  inotify_check_files (to_clear, &inev);
++	  count = sizeof (struct inotify_event) + inev.i.len;
++	  eptr += count;
++	  nb -= count;
++	  if (nb >= (ssize_t) sizeof (struct inotify_event))
++	    memcpy (&inev, eptr, nb);
++	  else
++	    break;
++	}
++      continue;
++    }
++  /* Actually perform the cache clearing.  */
++  clear_db_cache (to_clear);
++  return 0;
++}
++
++#endif
++
+ static void
+ __attribute__ ((__noreturn__))
+ main_loop_poll (void)
+@@ -1975,72 +2242,21 @@
+ 	    {
+ 	      if (conns[1].revents != 0)
+ 		{
+-		  bool to_clear[lastdb] = { false, };
+-		  union
+-		  {
+-# ifndef PATH_MAX
+-#  define PATH_MAX 1024
+-# endif
+-		    struct inotify_event i;
+-		    char buf[sizeof (struct inotify_event) + PATH_MAX];
+-		  } inev;
+-
+-		  while (1)
+-		    {
+-		      ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev,
+-							     sizeof (inev)));
+-		      if (nb < (ssize_t) sizeof (struct inotify_event))
+-			{
+-			  if (__builtin_expect (nb == -1 && errno != EAGAIN,
+-						0))
+-			    {
+-			      /* Something went wrong when reading the inotify
+-				 data.  Better disable inotify.  */
+-			      dbg_log (_("\
+-disabled inotify after read error %d"),
+-				       errno);
+-			      conns[1].fd = -1;
+-			      firstfree = 1;
+-			      if (nused == 2)
+-				nused = 1;
+-			      close (inotify_fd);
+-			      inotify_fd = -1;
+-			    }
+-			  break;
+-			}
+-
+-		      /* Check which of the files changed.  */
+-		      for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
+-			{
+-			  struct traced_file *finfo = dbs[dbcnt].traced_files;
+-
+-			  while (finfo != NULL)
+-			    {
+-			      if (finfo->inotify_descr == inev.i.wd)
+-				{
+-				  to_clear[dbcnt] = true;
+-				  if (finfo->call_res_init)
+-				    res_init ();
+-				  goto next;
+-				}
+-
+-			      finfo = finfo->next;
+-			    }
+-			}
+-		    next:;
+-		    }
+-
+-		  /* Actually perform the cache clearing.  */
+-		  for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
+-		    if (to_clear[dbcnt])
+-		      {
+-			pthread_mutex_lock (&dbs[dbcnt].prune_lock);
+-			dbs[dbcnt].clear_cache = 1;
+-			pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
+-			pthread_cond_signal (&dbs[dbcnt].prune_cond);
+-		      }
+-
+-		  --n;
++                  int ret;
++                  ret = handle_inotify_events ();
++                  if (ret == -1)
++                    {
++                      /* Something went wrong when reading the inotify
++                         data.  Better disable inotify.  */
++                      dbg_log (_("disabled inotify-based monitoring after read error %d"), errno);
++                      conns[1].fd = -1;
++                      firstfree = 1;
++                      if (nused == 2)
++                        nused = 1;
++                      close (inotify_fd);
++                      inotify_fd = -1;
++                    }
++                  --n;
+ 		}
+ 
+ 	      first = 2;
+@@ -2207,64 +2423,18 @@
+ # ifdef HAVE_INOTIFY
+ 	else if (revs[cnt].data.fd == inotify_fd)
+ 	  {
+-	    bool to_clear[lastdb] = { false, };
+-	    union
+-	    {
+-	      struct inotify_event i;
+-	      char buf[sizeof (struct inotify_event) + PATH_MAX];
+-	    } inev;
+-
+-	    while (1)
++	    int ret;
++	    ret = handle_inotify_events ();
++	    if (ret == -1)
+ 	      {
+-		ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev,
+-						 sizeof (inev)));
+-		if (nb < (ssize_t) sizeof (struct inotify_event))
+-		  {
+-		    if (__builtin_expect (nb == -1 && errno != EAGAIN, 0))
+-		      {
+-			/* Something went wrong when reading the inotify
+-			   data.  Better disable inotify.  */
+-			dbg_log (_("disabled inotify after read error %d"),
+-				 errno);
+-			(void) epoll_ctl (efd, EPOLL_CTL_DEL, inotify_fd,
+-					  NULL);
+-			close (inotify_fd);
+-			inotify_fd = -1;
+-		      }
+-		    break;
+-		  }
+-
+-		/* Check which of the files changed.  */
+-		for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
+-		  {
+-		    struct traced_file *finfo = dbs[dbcnt].traced_files;
+-
+-		    while (finfo != NULL)
+-		      {
+-			if (finfo->inotify_descr == inev.i.wd)
+-			  {
+-			    to_clear[dbcnt] = true;
+-			    if (finfo->call_res_init)
+-			      res_init ();
+-			    goto next;
+-			  }
+-
+-			finfo = finfo->next;
+-		      }
+-		  }
+-	      next:;
+-	      }
+-
+-	    /* Actually perform the cache clearing.  */
+-	    for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt)
+-	      if (to_clear[dbcnt])
+-		{
+-		  pthread_mutex_lock (&dbs[dbcnt].prune_lock);
+-		  dbs[dbcnt].clear_cache = 1;
+-		  pthread_mutex_unlock (&dbs[dbcnt].prune_lock);
+-		  pthread_cond_signal (&dbs[dbcnt].prune_cond);
+-		}
+-	  }
++		/* Something went wrong when reading the inotify
++		   data.  Better disable inotify.  */
++		dbg_log (_("disabled inotify-based monitoring after read error %d"), errno);
++                close (inotify_fd);
++                inotify_fd = -1;
++                break;
++              }
++          }
+ # endif
+ # ifdef HAVE_NETLINK
+ 	else if (revs[cnt].data.fd == nl_status_fd)
+@@ -2300,7 +2470,9 @@
+ 	  no reply in too long of a time.  */
+       time_t laststart = now - ACCEPT_TIMEOUT;
+       assert (starttime[sock] == 0);
++# ifdef HAVE_INOTIFY
+       assert (inotify_fd == -1 || starttime[inotify_fd] == 0);
++# endif
+       assert (nl_status_fd == -1 || starttime[nl_status_fd] == 0);
+       for (int cnt = highest; cnt > STDERR_FILENO; --cnt)
+ 	if (starttime[cnt] != 0 && starttime[cnt] < laststart)
+--- glibc-2.17-c758a686/nscd/nscd.h	2015-05-12 15:03:02.870274443 -0400
++++ glibc-2.17-c758a686/nscd/nscd.h	2015-05-13 13:45:57.259958374 -0400
+@@ -61,17 +61,67 @@
+    80% of the thread stack size.  */
+ #define MAX_STACK_USE ((8 * NSCD_THREAD_STACKSIZE) / 10)
+ 
+-
+-/* Registered filename used to fill database.  */
++/* Records the file registered per database that when changed
++   or modified requires invalidating the database.  */
+ struct traced_file
+ {
++  /* Tracks the last modified time of the traced file.  */
+   time_t mtime;
++  /* Support multiple registered files per database.  */
+   struct traced_file *next;
+   int call_res_init;
+-  int inotify_descr;
++  /* Requires Inotify support to do anything useful.  */
++#define TRACED_FILE	0
++#define TRACED_DIR	1
++  int inotify_descr[2];
++# ifndef PATH_MAX
++#  define PATH_MAX 1024
++# endif
++  /* The parent directory is used to scan for creation/deletion.  */
++  char dname[PATH_MAX];
++  /* Just the name of the file with no directory component.  */
++  char *sfname;
++  /* The full-path name of the registered file.  */
+   char fname[];
+ };
+ 
++/* Initialize a `struct traced_file`.  As input we need the name
++   of the file, and if invalidation requires calling res_init.
++   If CRINIT is 1 then res_init will be called after invalidation
++   or if the traced file is changed in any way, otherwise it will
++   not.  */
++static inline void
++init_traced_file(struct traced_file *file, const char *fname, int crinit)
++{
++   char *dname;
++   file->mtime = 0;
++   file->inotify_descr[TRACED_FILE] = -1;
++   file->inotify_descr[TRACED_DIR] = -1;
++   strcpy (file->fname, fname);
++   /* Compute the parent directory name and store a copy.  The copy makes
++      it much faster to add/remove watches while nscd is running instead
++      of computing this over and over again in a temp buffer.  */
++   file->dname[0] = '\0';
++   dname = strrchr (fname, '/');
++   if (dname != NULL)
++     {
++       size_t len = (size_t)(dname - fname);
++       if (len > sizeof (file->dname))
++	 abort ();
++       strncpy (file->dname, file->fname, len);
++       file->dname[len] = '\0';
++     }
++   /* The basename is the name just after the last forward slash.  */
++   file->sfname = &dname[1];
++   file->call_res_init = crinit;
++}
++
++#define define_traced_file(id, filename) 			\
++static union							\
++{								\
++  struct traced_file file;					\
++  char buf[sizeof (struct traced_file) + sizeof (filename)];	\
++} id##_traced_file;
+ 
+ /* Structure describing dynamic part of one database.  */
+ struct database_dyn
+@@ -90,7 +140,6 @@
+   int propagate;
+   struct traced_file *traced_files;
+   const char *db_filename;
+-  time_t file_mtime;
+   size_t suggested_module;
+   size_t max_db_size;
+ 
+@@ -216,6 +265,9 @@
+ /* connections.c */
+ extern void nscd_init (void);
+ extern void register_traced_file (size_t dbidx, struct traced_file *finfo);
++#ifdef HAVE_INOTIFY
++extern void install_watches (struct traced_file *finfo);
++#endif
+ extern void close_sockets (void);
+ extern void start_threads (void) __attribute__ ((__noreturn__));
+ 
+--- glibc-2.17-c758a686/nss/nss_db/db-init.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nss/nss_db/db-init.c	2015-05-13 13:45:57.269958504 -0400
+@@ -22,35 +22,25 @@
+ #include <nscd/nscd.h>
+ #include <string.h>
+ 
+-static union
+-{
+-  struct traced_file file;
+-  char buf[sizeof (struct traced_file) + sizeof (_PATH_VARDB "passwd.db")];
+-} pwd_traced_file;
+-
+-static union
+-{
+-  struct traced_file file;
+-  char buf[sizeof (struct traced_file) + sizeof (_PATH_VARDB "group.db")];
+-} grp_traced_file;
++#define PWD_FILENAME (_PATH_VARDB "passwd.db")
++define_traced_file (pwd, PWD_FILENAME);
+ 
+-static union
+-{
+-  struct traced_file file;
+-  char buf[sizeof (struct traced_file) + sizeof (_PATH_VARDB "services.db")];
+-} serv_traced_file;
++#define GRP_FILENAME (_PATH_VARDB "group.db")
++define_traced_file (grp, GRP_FILENAME);
+ 
++#define SERV_FILENAME (_PATH_VARDB "services.db")
++define_traced_file (serv, SERV_FILENAME);
+ 
+ void
+ _nss_db_init (void (*cb) (size_t, struct traced_file *))
+ {
+-  strcpy (pwd_traced_file.file.fname,_PATH_VARDB  "passwd.db");
++  init_traced_file (&pwd_traced_file.file, PWD_FILENAME, 0);
+   cb (pwddb, &pwd_traced_file.file);
+ 
+-  strcpy (grp_traced_file.file.fname, _PATH_VARDB "group.db");
++  init_traced_file (&grp_traced_file.file, GRP_FILENAME, 0);
+   cb (grpdb, &grp_traced_file.file);
+ 
+-  strcpy (serv_traced_file.file.fname, _PATH_VARDB "services.db");
++  init_traced_file (&serv_traced_file.file, SERV_FILENAME, 0);
+   cb (servdb, &serv_traced_file.file);
+ }
+ 
+--- glibc-2.17-c758a686/nss/nss_files/files-init.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nss/nss_files/files-init.c	2015-05-13 13:45:57.269958504 -0400
+@@ -18,43 +18,46 @@
+ 
+ #ifdef USE_NSCD
+ 
++#include <string.h>
+ #include <nscd/nscd.h>
+ 
++#define PWD_FILENAME "/etc/passwd"
++define_traced_file (pwd, PWD_FILENAME);
+ 
+-#define TF(id, filename, ...)					\
+-static union							\
+-{								\
+-  struct traced_file file;					\
+-  char buf[sizeof (struct traced_file) + sizeof (filename)];	\
+-} id##_traced_file =						\
+-  {								\
+-    .file =							\
+-    {								\
+-      .fname = filename, ## __VA_ARGS__				\
+-    }								\
+-  }
+-
+-TF (pwd, "/etc/passwd");
+-TF (grp, "/etc/group");
+-TF (hst, "/etc/hosts");
+-TF (resolv, "/etc/resolv.conf", .call_res_init = 1);
+-TF (serv, "/etc/services");
+-TF (netgr, "/etc/netgroup");
+-
+-
++#define GRP_FILENAME "/etc/group"
++define_traced_file (grp, GRP_FILENAME);
++ 
++#define HST_FILENAME "/etc/hosts"
++define_traced_file (hst, HST_FILENAME);
++
++#define RESOLV_FILENAME "/etc/resolv.conf"
++define_traced_file (resolv, RESOLV_FILENAME);
++
++#define SERV_FILENAME "/etc/services"
++define_traced_file (serv, SERV_FILENAME);
++
++#define NETGR_FILENAME "/etc/netgroup"
++define_traced_file (netgr, NETGR_FILENAME);
++ 
+ void
+ _nss_files_init (void (*cb) (size_t, struct traced_file *))
+ {
++  init_traced_file (&pwd_traced_file.file, PWD_FILENAME, 0);
+   cb (pwddb, &pwd_traced_file.file);
+ 
++  init_traced_file (&grp_traced_file.file, GRP_FILENAME, 0);
+   cb (grpdb, &grp_traced_file.file);
+ 
++  init_traced_file (&hst_traced_file.file, HST_FILENAME, 0);
+   cb (hstdb, &hst_traced_file.file);
+ 
++  init_traced_file (&resolv_traced_file.file, RESOLV_FILENAME, 1);
+   cb (hstdb, &resolv_traced_file.file);
+ 
++  init_traced_file (&serv_traced_file.file, SERV_FILENAME, 0);
+   cb (servdb, &serv_traced_file.file);
+-
++ 
++  init_traced_file (&netgr_traced_file.file, NETGR_FILENAME, 0);
+   cb (netgrdb, &netgr_traced_file.file);
+ }
+ 
diff --git a/SOURCES/glibc-rh1194143.patch b/SOURCES/glibc-rh1194143.patch
new file mode 100644
index 0000000..a5f2e1d
--- /dev/null
+++ b/SOURCES/glibc-rh1194143.patch
@@ -0,0 +1,18 @@
+commit f9d2d03254a58d92635a311a42253eeed5a40a47
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Mon May 26 18:01:31 2014 +0200
+
+    Fix invalid file descriptor reuse while sending DNS query (BZ #15946)
+
+diff --git glibc-2.17-c758a686/resolv/res_send.c glibc-2.17-c758a686/resolv/res_send.c
+index 3273d55..af42b8a 100644
+--- glibc-2.17-c758a686/resolv/res_send.c
++++ glibc-2.17-c758a686/resolv/res_send.c
+@@ -1410,6 +1410,7 @@ send_dg(res_state statp,
+ 					retval = reopen (statp, terrno, ns);
+ 					if (retval <= 0)
+ 						return retval;
++					pfd[0].fd = EXT(statp).nssocks[ns];
+ 				}
+ 			}
+ 			goto wait;
diff --git a/SOURCES/glibc-rh1195762.patch b/SOURCES/glibc-rh1195762.patch
new file mode 100644
index 0000000..be26b8a
--- /dev/null
+++ b/SOURCES/glibc-rh1195762.patch
@@ -0,0 +1,33 @@
+commit bdf1ff052a8e23d637f2c838fa5642d78fcedc33
+Author: Paul Pluzhnikov <ppluzhnikov@google.com>
+Date:   Sun Feb 22 12:01:47 2015 -0800
+
+    Fix BZ #17269 -- _IO_wstr_overflow integer overflow
+
+diff --git a/libio/wstrops.c b/libio/wstrops.c
+index 43d847d..3993579 100644
+--- a/libio/wstrops.c
++++ b/libio/wstrops.c
+@@ -95,8 +95,11 @@ _IO_wstr_overflow (fp, c)
+ 	  wchar_t *old_buf = fp->_wide_data->_IO_buf_base;
+ 	  size_t old_wblen = _IO_wblen (fp);
+ 	  _IO_size_t new_size = 2 * old_wblen + 100;
+-	  if (new_size < old_wblen)
++
++	  if (__glibc_unlikely (new_size < old_wblen)
++	      || __glibc_unlikely (new_size > SIZE_MAX / sizeof (wchar_t)))
+ 	    return EOF;
++
+ 	  new_buf
+ 	    = (wchar_t *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (new_size
+ 									* sizeof (wchar_t));
+@@ -186,6 +189,9 @@ enlarge_userbuf (_IO_FILE *fp, _IO_off64_t offset, int reading)
+     return 1;
+ 
+   _IO_size_t newsize = offset + 100;
++  if (__glibc_unlikely (newsize > SIZE_MAX / sizeof (wchar_t)))
++    return 1;
++
+   wchar_t *oldbuf = wd->_IO_buf_base;
+   wchar_t *newbuf
+     = (wchar_t *) (*((_IO_strfile *) fp)->_s._allocate_buffer) (newsize
diff --git a/SOURCES/glibc-rh1197730-1.patch b/SOURCES/glibc-rh1197730-1.patch
new file mode 100644
index 0000000..1f4997d
--- /dev/null
+++ b/SOURCES/glibc-rh1197730-1.patch
@@ -0,0 +1,104 @@
+commit b3a9f56ba59c3d8eadd3135a1c25c37a63151450
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Wed Jun 18 11:58:45 2014 +0200
+
+    Don't read past end of pattern in fnmatch (BZ #17062)
+
+diff --git glibc-2.17-c758a686/posix/fnmatch_loop.c glibc-2.17-c758a686/posix/fnmatch_loop.c
+index f79d051..544769b 100644
+--- glibc-2.17-c758a686/posix/fnmatch_loop.c
++++ glibc-2.17-c758a686/posix/fnmatch_loop.c
+@@ -899,11 +899,8 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 
+ 	  matched:
+ 	    /* Skip the rest of the [...] that already matched.  */
+-	    do
++	    while ((c = *p++) != L (']'))
+ 	      {
+-	      ignore_next:
+-		c = *p++;
+-
+ 		if (c == L('\0'))
+ 		  /* [... (unterminated) loses.  */
+ 		  return FNM_NOMATCH;
+@@ -931,12 +928,11 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 
+ 			if (c < L('a') || c >= L('z'))
+ 			  {
+-			    p = startp;
+-			    goto ignore_next;
++			    p = startp - 2;
++			    break;
+ 			  }
+ 		      }
+ 		    p += 2;
+-		    c = *p++;
+ 		  }
+ 		else if (c == L('[') && *p == L('='))
+ 		  {
+@@ -947,7 +943,6 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 		    if (c != L('=') || p[1] != L(']'))
+ 		      return FNM_NOMATCH;
+ 		    p += 2;
+-		    c = *p++;
+ 		  }
+ 		else if (c == L('[') && *p == L('.'))
+ 		  {
+@@ -962,10 +957,8 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 			  break;
+ 		      }
+ 		    p += 2;
+-		    c = *p++;
+ 		  }
+ 	      }
+-	    while (c != L(']'));
+ 	    if (not)
+ 	      return FNM_NOMATCH;
+ 	  }
+diff --git glibc-2.17-c758a686/posix/tst-fnmatch3.c glibc-2.17-c758a686/posix/tst-fnmatch3.c
+new file mode 100644
+index 0000000..2a83c1b
+--- /dev/null
++++ glibc-2.17-c758a686/posix/tst-fnmatch3.c
+@@ -0,0 +1,30 @@
++/* Test for fnmatch not reading past the end of the pattern.
++   Copyright (C) 2014 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 <fnmatch.h>
++
++int
++do_test (void)
++{
++  const char *pattern = "[[:alpha:]'[:alpha:]\0]";
++
++  return fnmatch (pattern, "a", 0) != FNM_NOMATCH;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+--- glibc-2.17-c758a686/posix/Makefile	2015-05-15 16:00:01.000000000 -0400
++++ glibc-2.17-c758a686/posix/Makefile	2015-05-29 18:34:07.507240952 -0400
+@@ -87,7 +87,7 @@
+ 		   tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset \
+ 		   bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \
+ 		   bug-getopt5 tst-getopt_long1 bug-regex34 \
+-		   tst-pathconf
++		   tst-pathconf tst-fnmatch3
+ xtests		:= bug-ga2
+ ifeq (yes,$(build-shared))
+ test-srcs	:= globtest
diff --git a/SOURCES/glibc-rh1197730-2.patch b/SOURCES/glibc-rh1197730-2.patch
new file mode 100644
index 0000000..88af8cd
--- /dev/null
+++ b/SOURCES/glibc-rh1197730-2.patch
@@ -0,0 +1,46 @@
+commit 4a28f4d55a6cc33474c0792fe93b5942d81bf185
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Thu Feb 26 14:55:24 2015 +0100
+
+    Fix read past end of pattern in fnmatch (bug 18032)
+
+diff --git glibc-2.17-c758a686/posix/fnmatch_loop.c glibc-2.17-c758a686/posix/fnmatch_loop.c
+index c0cb2fc..72c5d8f 100644
+--- glibc-2.17-c758a686/posix/fnmatch_loop.c
++++ glibc-2.17-c758a686/posix/fnmatch_loop.c
+@@ -945,14 +945,13 @@ FCT (pattern, string, string_end, no_leading_period, flags, ends, alloca_used)
+ 		  }
+ 		else if (c == L('[') && *p == L('.'))
+ 		  {
+-		    ++p;
+ 		    while (1)
+ 		      {
+ 			c = *++p;
+-			if (c == '\0')
++			if (c == L('\0'))
+ 			  return FNM_NOMATCH;
+ 
+-			if (*p == L('.') && p[1] == L(']'))
++			if (c == L('.') && p[1] == L(']'))
+ 			  break;
+ 		      }
+ 		    p += 2;
+diff --git glibc-2.17-c758a686/posix/tst-fnmatch3.c glibc-2.17-c758a686/posix/tst-fnmatch3.c
+index d27a557..75bc00a 100644
+--- glibc-2.17-c758a686/posix/tst-fnmatch3.c
++++ glibc-2.17-c758a686/posix/tst-fnmatch3.c
+@@ -21,9 +21,11 @@
+ int
+ do_test (void)
+ {
+-  const char *pattern = "[[:alpha:]'[:alpha:]\0]";
+-
+-  return fnmatch (pattern, "a", 0) != FNM_NOMATCH;
++  if (fnmatch ("[[:alpha:]'[:alpha:]\0]", "a", 0) != FNM_NOMATCH)
++    return 1;
++  if (fnmatch ("[a[.\0.]]", "a", 0) != FNM_NOMATCH)
++    return 1;
++  return 0;
+ }
+ 
+ #define TEST_FUNCTION do_test ()
diff --git a/SOURCES/glibc-rh1197730-3.patch b/SOURCES/glibc-rh1197730-3.patch
new file mode 100644
index 0000000..c92d299
--- /dev/null
+++ b/SOURCES/glibc-rh1197730-3.patch
@@ -0,0 +1,62 @@
+commit c2c6d39fab901c97c18fa3a3a3658d9dc3f7df61
+Author: Paul Pluzhnikov <ppluzhnikov@google.com>
+Date:   Mon Mar 2 13:34:22 2015 -0800
+
+    Fix BZ 18036 buffer overflow (read past end of buffer) in internal_fnmatch
+
+--- glibc-2.17-c758a686/posix/fnmatch_loop.c
++++ glibc-2.17-c758a686/posix/fnmatch_loop.c
+@@ -1036,7 +1036,12 @@ END (const CHAR *pattern)
+       }
+     else if ((*p == L('?') || *p == L('*') || *p == L('+') || *p == L('@')
+ 	      || *p == L('!')) && p[1] == L('('))
+-      p = END (p + 1);
++      {
++	p = END (p + 1);
++	if (*p == L('\0'))
++	  /* This is an invalid pattern.  */
++	  return pattern;
++      }
+     else if (*p == L(')'))
+       break;
+ 
+diff --git glibc-2.17-c758a686/posix/tst-fnmatch3.c glibc-2.17-c758a686/posix/tst-fnmatch3.c
+index 75bc00a..fdf9934 100644
+--- glibc-2.17-c758a686/posix/tst-fnmatch3.c
++++ glibc-2.17-c758a686/posix/tst-fnmatch3.c
+@@ -17,6 +17,26 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <fnmatch.h>
++#include <sys/mman.h>
++#include <string.h>
++#include <unistd.h>
++
++int
++do_bz18036 (void)
++{
++  const char p[] = "**(!()";
++  const int pagesize = getpagesize ();
++
++  char *pattern = mmap (0, 2 * pagesize, PROT_READ|PROT_WRITE,
++                        MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
++  if (pattern == MAP_FAILED) return 1;
++
++  mprotect (pattern + pagesize, pagesize, PROT_NONE);
++  memset (pattern, ' ', pagesize);
++  strcpy (pattern, p);
++
++  return fnmatch (pattern, p, FNM_EXTMATCH);
++}
+ 
+ int
+ do_test (void)
+@@ -25,7 +45,7 @@ do_test (void)
+     return 1;
+   if (fnmatch ("[a[.\0.]]", "a", 0) != FNM_NOMATCH)
+     return 1;
+-  return 0;
++  return do_bz18036 ();
+ }
+ 
+ #define TEST_FUNCTION do_test ()
diff --git a/SOURCES/glibc-rh1199525.patch b/SOURCES/glibc-rh1199525.patch
new file mode 100644
index 0000000..8af91ca
--- /dev/null
+++ b/SOURCES/glibc-rh1199525.patch
@@ -0,0 +1,20 @@
+commit 2959eda9272a033863c271aff62095abd01bd4e3
+Author: Arjun Shankar <arjun.is@lostca.se>
+Date:   Tue Apr 21 14:06:31 2015 +0200
+
+    CVE-2015-1781: resolv/nss_dns/dns-host.c buffer overflow [BZ#18287]
+
+diff --git glibc-2.17-c758a686/resolv/nss_dns/dns-host.c glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
+index b16b0dd..d8c5579 100644
+--- glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
++++ glibc-2.17-c758a686/resolv/nss_dns/dns-host.c
+@@ -613,7 +613,8 @@
+   int have_to_map = 0;
+   uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct host_data);
+   buffer += pad;
+-  if (__builtin_expect (buflen < sizeof (struct host_data) + pad, 0))
++  buflen = buflen > pad ? buflen - pad : 0;
++  if (__builtin_expect (buflen < sizeof (struct host_data), 0))
+     {
+       /* The buffer is too small.  */
+     too_small:
diff --git a/SOURCES/glibc-rh1202952.patch b/SOURCES/glibc-rh1202952.patch
new file mode 100644
index 0000000..fc41f3b
--- /dev/null
+++ b/SOURCES/glibc-rh1202952.patch
@@ -0,0 +1,636 @@
+# 
+# commit f8aeae347377f3dfa8cbadde057adf1827fb1d44
+# Author: Alexandre Oliva <aoliva@redhat.com>
+# Date:   Tue Mar 17 01:14:11 2015 -0300
+# 
+#     Fix DTV race, assert, DTV_SURPLUS Static TLS limit, and nptl_db garbage
+#     
+#     for  ChangeLog
+#     
+#         [BZ #17090]
+#         [BZ #17620]
+#         [BZ #17621]
+#         [BZ #17628]
+#         * NEWS: Update.
+#         * elf/dl-tls.c (_dl_update_slotinfo): Clean up outdated DTV
+#         entries with Static TLS too.  Skip entries past the end of the
+#         allocated DTV, from Alan Modra.
+#         (tls_get_addr_tail): Update to glibc_likely/unlikely.  Move
+#         Static TLS DTV entry set up from...
+#          (_dl_allocate_tls_init): ... here (fix modid assertion), ...
+#         * elf/dl-reloc.c (_dl_nothread_init_static_tls): ... here...
+#         * nptl/allocatestack.c (init_one_static_tls): ... and here...
+#         * elf/dlopen.c (dl_open_worker): Drop l_tls_modid upper bound
+#         for Static TLS.
+#         * elf/tlsdeschtab.h (map_generation): Return size_t.  Check
+#         that the slot we find is associated with the given map before
+#         using its generation count.
+#         * nptl_db/db_info.c: Include ldsodefs.h.
+#         (rtld_global, dtv_slotinfo_list, dtv_slotinfo): New typedefs.
+#         * nptl_db/structs.def (DB_RTLD_VARIABLE): New macro.
+#         (DB_MAIN_VARIABLE, DB_RTLD_GLOBAL_FIELD): Likewise.
+#         (link_map::l_tls_offset): New struct field.
+#         (dtv_t::counter): Likewise.
+#         (rtld_global): New struct.
+#         (_rtld_global): New rtld variable.
+#         (dl_tls_dtv_slotinfo_list): New rtld global field.
+#         (dtv_slotinfo_list): New struct.
+#         (dtv_slotinfo): Likewise.
+#         * nptl_db/td_symbol_list.c: Drop gnu/lib-names.h include.
+#         (td_lookup): Rename to...
+#         (td_mod_lookup): ... this.  Use new mod parameter instead of
+#         LIBPTHREAD_SO.
+#         * nptl_db/td_thr_tlsbase.c: Include link.h.
+#         (dtv_slotinfo_list, dtv_slotinfo): New functions.
+#         (td_thr_tlsbase): Check DTV generation.  Compute Static TLS
+#         addresses even if the DTV is out of date or missing them.
+#         * nptl_db/fetch-value.c (_td_locate_field): Do not refuse to
+#         index zero-length arrays.
+#         * nptl_db/thread_dbP.h: Include gnu/lib-names.h.
+#         (td_lookup): Make it a macro implemented in terms of...
+#         (td_mod_lookup): ... this declaration.
+#         * nptl_db/db-symbols.awk (DB_RTLD_VARIABLE): Override.
+#         (DB_MAIN_VARIABLE): Likewise.
+# 
+diff -urN glibc-2.17-c758a686/elf/dl-open.c glibc-2.17-c758a686/elf/dl-open.c
+--- glibc-2.17-c758a686/elf/dl-open.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/elf/dl-open.c	2015-03-17 14:39:47.746505786 -0400
+@@ -535,17 +535,7 @@
+ 	  && imap->l_tls_blocksize > 0)
+ 	{
+ 	  /* For static TLS we have to allocate the memory here and
+-	     now.  This includes allocating memory in the DTV.  But we
+-	     cannot change any DTV other than our own.  So, if we
+-	     cannot guarantee that there is room in the DTV we don't
+-	     even try it and fail the load.
+-
+-	     XXX We could track the minimum DTV slots allocated in
+-	     all threads.  */
+-	  if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS)
+-	    _dl_signal_error (0, "dlopen", NULL, N_("\
+-cannot load any more object with static TLS"));
+-
++	     now, but we can delay updating the DTV.  */
+ 	  imap->l_need_tls_init = 0;
+ #ifdef SHARED
+ 	  /* Update the slot information data for at least the
+diff -urN glibc-2.17-c758a686/elf/dl-reloc.c glibc-2.17-c758a686/elf/dl-reloc.c
+--- glibc-2.17-c758a686/elf/dl-reloc.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/elf/dl-reloc.c	2015-03-17 14:39:47.747505754 -0400
+@@ -136,12 +136,6 @@
+ # error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+ #endif
+ 
+-  /* Fill in the DTV slot so that a later LD/GD access will find it.  */
+-  dtv_t *dtv = THREAD_DTV ();
+-  assert (map->l_tls_modid <= dtv[-1].counter);
+-  dtv[map->l_tls_modid].pointer.val = dest;
+-  dtv[map->l_tls_modid].pointer.is_static = true;
+-
+   /* Initialize the memory.  */
+   memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
+ 	  '\0', map->l_tls_blocksize - map->l_tls_initimage_size);
+diff -urN glibc-2.17-c758a686/elf/dl-tls.c glibc-2.17-c758a686/elf/dl-tls.c
+--- glibc-2.17-c758a686/elf/dl-tls.c	2015-03-17 14:39:31.335019227 -0400
++++ glibc-2.17-c758a686/elf/dl-tls.c	2015-03-17 14:42:48.443852579 -0400
+@@ -432,17 +432,14 @@
+ 	  assert (listp->slotinfo[cnt].gen <= GL(dl_tls_generation));
+ 	  maxgen = MAX (maxgen, listp->slotinfo[cnt].gen);
+ 
++	  dtv[map->l_tls_modid].pointer.val = TLS_DTV_UNALLOCATED;
++	  dtv[map->l_tls_modid].pointer.is_static = false;
++
+ 	  if (map->l_tls_offset == NO_TLS_OFFSET
+ 	      || map->l_tls_offset == FORCED_DYNAMIC_TLS_OFFSET)
+-	    {
+-	      /* For dynamically loaded modules we simply store
+-		 the value indicating deferred allocation.  */
+-	      dtv[map->l_tls_modid].pointer.val = TLS_DTV_UNALLOCATED;
+-	      dtv[map->l_tls_modid].pointer.is_static = false;
+-	      continue;
+-	    }
++	    continue;
+ 
+-	  assert (map->l_tls_modid == cnt);
++	  assert (map->l_tls_modid == total + cnt);
+ 	  assert (map->l_tls_blocksize >= map->l_tls_initimage_size);
+ #if TLS_TCB_AT_TP
+ 	  assert ((size_t) map->l_tls_offset >= map->l_tls_blocksize);
+@@ -454,8 +451,6 @@
+ #endif
+ 
+ 	  /* Copy the initialization image and clear the BSS part.  */
+-	  dtv[map->l_tls_modid].pointer.val = dest;
+-	  dtv[map->l_tls_modid].pointer.is_static = true;
+ 	  memset (__mempcpy (dest, map->l_tls_initimage,
+ 			     map->l_tls_initimage_size), '\0',
+ 		  map->l_tls_blocksize - map->l_tls_initimage_size);
+@@ -623,13 +618,16 @@
+ 	      struct link_map *map = listp->slotinfo[cnt].map;
+ 	      if (map == NULL)
+ 		{
+-		  /* If this modid was used at some point the memory
+-		     might still be allocated.  */
+-		  if (! dtv[total + cnt].pointer.is_static
+-		      && dtv[total + cnt].pointer.val != TLS_DTV_UNALLOCATED)
++		  if (dtv[-1].counter >= total + cnt)
+ 		    {
+-		      free (dtv[total + cnt].pointer.val);
++		      /* If this modid was used at some point the memory
++			 might still be allocated.  */
++		      if (! dtv[total + cnt].pointer.is_static
++			  && (dtv[total + cnt].pointer.val
++			      != TLS_DTV_UNALLOCATED))
++			free (dtv[total + cnt].pointer.val);
+ 		      dtv[total + cnt].pointer.val = TLS_DTV_UNALLOCATED;
++		      dtv[total + cnt].pointer.is_static = false;
+ 		    }
+ 
+ 		  continue;
+@@ -693,10 +691,8 @@
+ 		   memalign and not malloc.  */
+ 		free (dtv[modid].pointer.val);
+ 
+-	      /* This module is loaded dynamically- We defer memory
+-		 allocation.  */
+-	      dtv[modid].pointer.is_static = false;
+ 	      dtv[modid].pointer.val = TLS_DTV_UNALLOCATED;
++	      dtv[modid].pointer.is_static = false;
+ 
+ 	      if (modid == req_modid)
+ 		the_map = map;
+@@ -734,13 +730,12 @@
+       the_map = listp->slotinfo[idx].map;
+     }
+ 
+- again:
+   /* Make sure that, if a dlopen running in parallel forces the
+      variable into static storage, we'll wait until the address in the
+      static TLS block is set up, and use that.  If we're undecided
+      yet, make sure we make the decision holding the lock as well.  */
+-  if (__builtin_expect (the_map->l_tls_offset
+-			!= FORCED_DYNAMIC_TLS_OFFSET, 0))
++  if (__glibc_unlikely (the_map->l_tls_offset
++			!= FORCED_DYNAMIC_TLS_OFFSET))
+     {
+       __rtld_lock_lock_recursive (GL(dl_load_lock));
+       if (__builtin_expect (the_map->l_tls_offset == NO_TLS_OFFSET, 1))
+@@ -748,22 +743,28 @@
+ 	  the_map->l_tls_offset = FORCED_DYNAMIC_TLS_OFFSET;
+ 	  __rtld_lock_unlock_recursive (GL(dl_load_lock));
+ 	}
+-      else
++      else if (__glibc_likely (the_map->l_tls_offset
++			       != FORCED_DYNAMIC_TLS_OFFSET))
+ 	{
++#if TLS_TCB_AT_TP
++	  void *p = (char *) THREAD_SELF - the_map->l_tls_offset;
++#elif TLS_DTV_AT_TP
++	  void *p = (char *) THREAD_SELF + the_map->l_tls_offset + TLS_PRE_TCB_SIZE;
++#else
++# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
++#endif
+ 	  __rtld_lock_unlock_recursive (GL(dl_load_lock));
+-	  if (__builtin_expect (the_map->l_tls_offset
+-				!= FORCED_DYNAMIC_TLS_OFFSET, 1))
+-	    {
+-	      void *p = dtv[GET_ADDR_MODULE].pointer.val;
+-	      if (__builtin_expect (p == TLS_DTV_UNALLOCATED, 0))
+-		goto again;
++	  dtv[GET_ADDR_MODULE].pointer.is_static = true;
++	  dtv[GET_ADDR_MODULE].pointer.val = p;
+ 
+-	      return (char *) p + GET_ADDR_OFFSET;
+-	    }
++	  return (char *) p + GET_ADDR_OFFSET;
+ 	}
++      else
++	__rtld_lock_unlock_recursive (GL(dl_load_lock));
++
+     }
+   void *p = dtv[GET_ADDR_MODULE].pointer.val = allocate_and_init (the_map);
+-  dtv[GET_ADDR_MODULE].pointer.is_static = false;
++  assert (!dtv[GET_ADDR_MODULE].pointer.is_static);
+ 
+   return (char *) p + GET_ADDR_OFFSET;
+ }
+diff -urN glibc-2.17-c758a686/elf/tlsdeschtab.h glibc-2.17-c758a686/elf/tlsdeschtab.h
+--- glibc-2.17-c758a686/elf/tlsdeschtab.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/elf/tlsdeschtab.h	2015-03-17 14:39:47.747505754 -0400
+@@ -42,7 +42,7 @@
+   return tdp->tlsinfo.ti_offset == tdq->tlsinfo.ti_offset;
+ }
+ 
+-inline static int
++inline static size_t
+ map_generation (struct link_map *map)
+ {
+   size_t idx = map->l_tls_modid;
+@@ -58,7 +58,7 @@
+ 	     we can assume that, if the generation count is zero, we
+ 	     still haven't determined the generation count for this
+ 	     module.  */
+-	  if (listp->slotinfo[idx].gen)
++	  if (listp->slotinfo[idx].map == map && listp->slotinfo[idx].gen)
+ 	    return listp->slotinfo[idx].gen;
+ 	  else
+ 	    break;
+diff -urN glibc-2.17-c758a686/nptl/allocatestack.c glibc-2.17-c758a686/nptl/allocatestack.c
+--- glibc-2.17-c758a686/nptl/allocatestack.c	2015-03-17 14:39:31.342019008 -0400
++++ glibc-2.17-c758a686/nptl/allocatestack.c	2015-03-17 14:39:47.747505754 -0400
+@@ -1157,7 +1157,6 @@
+ static inline void __attribute__((always_inline))
+ init_one_static_tls (struct pthread *curp, struct link_map *map)
+ {
+-  dtv_t *dtv = GET_DTV (TLS_TPADJ (curp));
+ # if TLS_TCB_AT_TP
+   void *dest = (char *) curp - map->l_tls_offset;
+ # elif TLS_DTV_AT_TP
+@@ -1166,11 +1165,9 @@
+ #  error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
+ # endif
+ 
+-  /* Fill in the DTV slot so that a later LD/GD access will find it.  */
+-  dtv[map->l_tls_modid].pointer.val = dest;
+-  dtv[map->l_tls_modid].pointer.is_static = true;
+-
+-  /* Initialize the memory.  */
++  /* We cannot delay the initialization of the Static TLS area, since
++     it can be accessed with LE or IE, but since the DTV is only used
++     by GD and LD, we can delay its update to avoid a race.  */
+   memset (__mempcpy (dest, map->l_tls_initimage, map->l_tls_initimage_size),
+ 	  '\0', map->l_tls_blocksize - map->l_tls_initimage_size);
+ }
+diff -urN glibc-2.17-c758a686/nptl_db/db_info.c glibc-2.17-c758a686/nptl_db/db_info.c
+--- glibc-2.17-c758a686/nptl_db/db_info.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/db_info.c	2015-03-17 14:39:47.747505754 -0400
+@@ -20,6 +20,7 @@
+ 
+ #include "thread_dbP.h"
+ #include <tls.h>
++#include <ldsodefs.h>
+ 
+ typedef struct pthread pthread;
+ typedef struct pthread_key_struct pthread_key_struct;
+@@ -36,6 +37,9 @@
+ } dtv;
+ 
+ typedef struct link_map link_map;
++typedef struct rtld_global rtld_global;
++typedef struct dtv_slotinfo_list dtv_slotinfo_list;
++typedef struct dtv_slotinfo dtv_slotinfo;
+ 
+ /* Actually static in nptl/init.c, but we only need it for typeof.  */
+ extern bool __nptl_initial_report_events;
+diff -urN glibc-2.17-c758a686/nptl_db/db-symbols.awk glibc-2.17-c758a686/nptl_db/db-symbols.awk
+--- glibc-2.17-c758a686/nptl_db/db-symbols.awk	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/db-symbols.awk	2015-03-17 14:39:47.747505754 -0400
+@@ -2,6 +2,8 @@
+ # we've just built.  It checks for all the symbols used in td_symbol_list.
+ 
+ BEGIN {
++%define DB_RTLD_VARIABLE(name) /* Nothing. */
++%define DB_MAIN_VARIABLE(name) /* Nothing. */
+ %define DB_LOOKUP_NAME(idx, name)		required[STRINGIFY (name)] = 1;
+ %define DB_LOOKUP_NAME_TH_UNIQUE(idx, name)	th_unique[STRINGIFY (name)] = 1;
+ %include "db-symbols.h"
+diff -urN glibc-2.17-c758a686/nptl_db/fetch-value.c glibc-2.17-c758a686/nptl_db/fetch-value.c
+--- glibc-2.17-c758a686/nptl_db/fetch-value.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/fetch-value.c	2015-03-17 14:39:47.747505754 -0400
+@@ -68,7 +68,8 @@
+ 	}
+     }
+ 
+-  if (idx != 0 && idx - (psaddr_t) 0 > DB_DESC_NELEM (desc))
++  if (idx != 0 && DB_DESC_NELEM (desc) != 0
++      && idx - (psaddr_t) 0 > DB_DESC_NELEM (desc))
+     /* This is an internal indicator to callers with nonzero IDX
+        that the IDX value is too big.  */
+     return TD_NOAPLIC;
+diff -urN glibc-2.17-c758a686/nptl_db/structs.def glibc-2.17-c758a686/nptl_db/structs.def
+--- glibc-2.17-c758a686/nptl_db/structs.def	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/structs.def	2015-03-17 14:44:29.779682236 -0400
+@@ -22,6 +22,28 @@
+ # define STRUCTS_DEF_DEFAULTS 1
+ #endif
+ 
++#ifndef DB_RTLD_VARIABLE
++# define DB_RTLD_VARIABLE(name) DB_VARIABLE (name)
++#endif
++
++#ifndef DB_MAIN_VARIABLE
++# define DB_MAIN_VARIABLE(name) DB_VARIABLE (name)
++#endif
++
++#ifndef DB_RTLD_GLOBAL_FIELD
++# if !defined IS_IN_libpthread
++#  define DB_RTLD_GLOBAL_FIELD(field)		\
++  DB_STRUCT_FIELD (rtld_global, _##field)	\
++  DB_MAIN_VARIABLE (_##field)
++# elif defined SHARED
++#  define DB_RTLD_GLOBAL_FIELD(field)		\
++  DB_STRUCT_FIELD (rtld_global, _##field)
++# else
++#  define DB_RTLD_GLOBAL_FIELD(field)		\
++  DB_MAIN_VARIABLE (_##field)
++# endif
++#endif /* DB_RTLD_GLOBAL_FIELD */
++
+ DB_STRUCT (pthread)
+ DB_STRUCT_FIELD (pthread, list)
+ DB_STRUCT_FIELD (pthread, report_events)
+@@ -70,14 +92,31 @@
+ DB_STRUCT_ARRAY_FIELD (pthread_key_data_level2, data)
+ 
+ DB_STRUCT_FIELD (link_map, l_tls_modid)
++DB_STRUCT_FIELD (link_map, l_tls_offset)
+ 
+ DB_STRUCT_ARRAY_FIELD (dtv, dtv)
+ #define pointer_val pointer.val /* Field of anonymous struct in dtv_t.  */
+ DB_STRUCT_FIELD (dtv_t, pointer_val)
++DB_STRUCT_FIELD (dtv_t, counter)
+ #if !defined IS_IN_libpthread || TLS_TCB_AT_TP
+ DB_STRUCT_FIELD (pthread, dtvp)
+ #endif
+ 
++#if !(defined IS_IN_libpthread && !defined SHARED)
++DB_STRUCT (rtld_global)
++DB_RTLD_VARIABLE (_rtld_global)
++#endif
++DB_RTLD_GLOBAL_FIELD (dl_tls_dtv_slotinfo_list)
++
++DB_STRUCT (dtv_slotinfo_list)
++DB_STRUCT_FIELD (dtv_slotinfo_list, len)
++DB_STRUCT_FIELD (dtv_slotinfo_list, next)
++DB_STRUCT_ARRAY_FIELD (dtv_slotinfo_list, slotinfo)
++
++DB_STRUCT (dtv_slotinfo)
++DB_STRUCT_FIELD (dtv_slotinfo, gen)
++DB_STRUCT_FIELD (dtv_slotinfo, map)
++
+ #ifdef STRUCTS_DEF_DEFAULTS
+ # undef DB_STRUCT_ARRAY_FIELD
+ # undef DB_ARRAY_VARIABLE
+diff -urN glibc-2.17-c758a686/nptl_db/td_symbol_list.c glibc-2.17-c758a686/nptl_db/td_symbol_list.c
+--- glibc-2.17-c758a686/nptl_db/td_symbol_list.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/td_symbol_list.c	2015-03-17 14:39:47.747505754 -0400
+@@ -18,7 +18,6 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include <assert.h>
+-#include <gnu/lib-names.h>
+ #include "thread_dbP.h"
+ 
+ static const char *symbol_list_arr[] =
+@@ -41,12 +40,12 @@
+ 
+ 
+ ps_err_e
+-td_lookup (struct ps_prochandle *ps, int idx, psaddr_t *sym_addr)
++td_mod_lookup (struct ps_prochandle *ps, const char *mod,
++	       int idx, psaddr_t *sym_addr)
+ {
+   ps_err_e result;
+   assert (idx >= 0 && idx < SYM_NUM_MESSAGES);
+-  result = ps_pglobal_lookup (ps, LIBPTHREAD_SO, symbol_list_arr[idx],
+-			      sym_addr);
++  result = ps_pglobal_lookup (ps, mod, symbol_list_arr[idx], sym_addr);
+ 
+ #ifdef HAVE_ASM_GLOBAL_DOT_NAME
+   /* For PowerPC, 64-bit uses dot symbols but 32-bit does not.
+diff -urN glibc-2.17-c758a686/nptl_db/td_thr_tlsbase.c glibc-2.17-c758a686/nptl_db/td_thr_tlsbase.c
+--- glibc-2.17-c758a686/nptl_db/td_thr_tlsbase.c	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/td_thr_tlsbase.c	2015-03-17 14:39:47.748505723 -0400
+@@ -17,14 +17,118 @@
+    <http://www.gnu.org/licenses/>.  */
+ 
+ #include "thread_dbP.h"
++#include <link.h>
+ 
++/* Get the DTV slotinfo list head entry from the dynamic loader state
++   into *LISTHEAD.  */
++static td_err_e
++dtv_slotinfo_list (td_thragent_t *ta,
++		   psaddr_t *listhead)
++{
++  td_err_e err;
++  psaddr_t head;
++
++  if (ta->ta_addr__rtld_global == 0
++      && td_mod_lookup (ta->ph, LD_SO, SYM__rtld_global,
++			&ta->ta_addr__rtld_global) != PS_OK)
++    ta->ta_addr__rtld_global = (void*)-1;
++
++  if (ta->ta_addr__rtld_global != (void*)-1)
++    {
++      err = DB_GET_FIELD (head, ta, ta->ta_addr__rtld_global,
++			  rtld_global, _dl_tls_dtv_slotinfo_list, 0);
++      if (err != TD_OK)
++	return err;
++    }
++  else
++    {
++      if (ta->ta_addr__dl_tls_dtv_slotinfo_list == 0
++	  && td_mod_lookup (ta->ph, NULL, SYM__dl_tls_dtv_slotinfo_list,
++			    &ta->ta_addr__dl_tls_dtv_slotinfo_list) != PS_OK)
++	return TD_ERR;
++
++      err = _td_fetch_value (ta, ta->ta_var__dl_tls_dtv_slotinfo_list,
++			     SYM_DESC__dl_tls_dtv_slotinfo_list,
++			     0, ta->ta_addr__dl_tls_dtv_slotinfo_list, &head);
++      if (err != TD_OK)
++	return err;
++    }
++
++  *listhead = head;
++  return TD_OK;
++}
++
++/* Get the address of the DTV slotinfo entry for MODID into
++   *DTVSLOTINFO.  */
++static td_err_e
++dtv_slotinfo (td_thragent_t *ta,
++	      unsigned long int modid,
++	      psaddr_t *dtvslotinfo)
++{
++  td_err_e err;
++  psaddr_t slot, temp;
++  size_t slbase = 0;
++
++  err = dtv_slotinfo_list (ta, &slot);
++  if (err != TD_OK)
++    return err;
++
++  while (slot)
++    {
++      /* Get the number of entries in this list entry's array.  */
++      err = DB_GET_FIELD (temp, ta, slot, dtv_slotinfo_list, len, 0);
++      if (err != TD_OK)
++	return err;
++      size_t len = (uintptr_t)temp;
++
++      /* Did we find the list entry for modid?  */
++      if (modid < slbase + len)
++	break;
++
++      /* We didn't, so get the next list entry.  */
++      slbase += len;
++      err = DB_GET_FIELD (temp, ta, slot, dtv_slotinfo_list,
++			  next, 0);
++      if (err != TD_OK)
++	return err;
++      slot = temp;
++    }
++
++  /* We reached the end of the list and found nothing.  */
++  if (!slot)
++    return TD_ERR;
++
++  /* Take the slotinfo for modid from the list entry.  */
++  err = DB_GET_FIELD_ADDRESS (temp, ta, slot, dtv_slotinfo_list,
++			      slotinfo, modid - slbase);
++  if (err != TD_OK)
++    return err;
++  slot = temp;
++
++  *dtvslotinfo = slot;
++  return TD_OK;
++}
++
++/* Return in *BASE the base address of the TLS block for MODID within
++   TH.
++
++   It should return success and yield the correct pointer in any
++   circumstance where the TLS block for the module and thread
++   requested has already been initialized.
++
++   It should fail with TD_TLSDEFER only when the thread could not
++   possibly have observed any values in that TLS block.  That way, the
++   debugger can fall back to showing initial values from the PT_TLS
++   segment (and refusing attempts to mutate) for the TD_TLSDEFER case,
++   and never fail to make the values the program will actually see
++   available to the user of the debugger.  */
+ td_err_e
+ td_thr_tlsbase (const td_thrhandle_t *th,
+ 		unsigned long int modid,
+ 		psaddr_t *base)
+ {
+   td_err_e err;
+-  psaddr_t dtv, dtvslot, dtvptr;
++  psaddr_t dtv, dtvslot, dtvptr, temp;
+ 
+   if (modid < 1)
+     return TD_NOTLS;
+@@ -50,11 +154,75 @@
+ 	return TD_TLSDEFER;
+     }
+ 
++  err = dtv_slotinfo (th->th_ta_p, modid, &temp);
++  if (err != TD_OK)
++    return err;
++
++  psaddr_t slot;
++  err = DB_GET_STRUCT (slot, th->th_ta_p, temp, dtv_slotinfo);
++  if (err != TD_OK)
++    return err;
++
++  /* Take the link_map from the slotinfo.  */
++  psaddr_t map;
++  err = DB_GET_FIELD_LOCAL (map, th->th_ta_p, slot, dtv_slotinfo, map, 0);
++  if (err != TD_OK)
++    return err;
++  if (!map)
++    return TD_ERR;
++
++  /* Ok, the modid is good, now find out what DTV generation it
++     requires.  */
++  err = DB_GET_FIELD_LOCAL (temp, th->th_ta_p, slot, dtv_slotinfo, gen, 0);
++  if (err != TD_OK)
++    return err;
++  size_t modgen = (uintptr_t)temp;
++
+   /* Get the DTV pointer from the thread descriptor.  */
+   err = DB_GET_FIELD (dtv, th->th_ta_p, pd, pthread, dtvp, 0);
+   if (err != TD_OK)
+     return err;
+ 
++  psaddr_t dtvgenloc;
++  /* Get the DTV generation count at dtv[0].counter.  */
++  err = DB_GET_FIELD_ADDRESS (dtvgenloc, th->th_ta_p, dtv, dtv, dtv, 0);
++  if (err != TD_OK)
++    return err;
++  err = DB_GET_FIELD (temp, th->th_ta_p, dtvgenloc, dtv_t, counter, 0);
++  if (err != TD_OK)
++    return err;
++  size_t dtvgen = (uintptr_t)temp;
++
++  /* Is the DTV current enough?  */
++  if (dtvgen < modgen)
++    {
++    try_static_tls:
++      /* If the module uses Static TLS, we're still good.  */
++      err = DB_GET_FIELD (temp, th->th_ta_p, map, link_map, l_tls_offset, 0);
++      if (err != TD_OK)
++	return err;
++      ptrdiff_t tlsoff = (uintptr_t)temp;
++
++      if (tlsoff != FORCED_DYNAMIC_TLS_OFFSET
++	  && tlsoff != NO_TLS_OFFSET)
++	{
++	  psaddr_t tp = pd;
++
++#if TLS_TCB_AT_TP
++	  dtvptr = tp - tlsoff;
++#elif TLS_DTV_AT_TP
++	  dtvptr = tp + tlsoff + TLS_PRE_TCB_SIZE;
++#else
++# error "Either TLS_TCB_AT_TP or TLS_DTV_AT_TP must be defined"
++#endif
++
++	  *base = dtvptr;
++	  return TD_OK;
++	}
++
++      return TD_TLSDEFER;
++    }
++
+   /* Find the corresponding entry in the DTV.  */
+   err = DB_GET_FIELD_ADDRESS (dtvslot, th->th_ta_p, dtv, dtv, dtv, modid);
+   if (err != TD_OK)
+@@ -68,7 +236,7 @@
+   /* It could be that the memory for this module is not allocated for
+      the given thread.  */
+   if ((uintptr_t) dtvptr & 1)
+-    return TD_TLSDEFER;
++    goto try_static_tls;
+ 
+   *base = dtvptr;
+   return TD_OK;
+diff -urN glibc-2.17-c758a686/nptl_db/thread_dbP.h glibc-2.17-c758a686/nptl_db/thread_dbP.h
+--- glibc-2.17-c758a686/nptl_db/thread_dbP.h	2012-12-24 22:02:13.000000000 -0500
++++ glibc-2.17-c758a686/nptl_db/thread_dbP.h	2015-03-17 14:39:47.748505723 -0400
+@@ -29,6 +29,7 @@
+ #include "thread_db.h"
+ #include "../nptl/pthreadP.h"  	/* This is for *_BITMASK only.  */
+ #include <list.h>
++#include <gnu/lib-names.h>
+ 
+ /* Indeces for the symbol names.  */
+ enum
+@@ -139,11 +140,11 @@
+ }
+ 
+ 
+-/* Internal wrapper around ps_pglobal_lookup.  */
+-extern ps_err_e td_lookup (struct ps_prochandle *ps,
+-			   int idx, psaddr_t *sym_addr) attribute_hidden;
+-
+-
++/* Internal wrappers around ps_pglobal_lookup.  */
++extern ps_err_e td_mod_lookup (struct ps_prochandle *ps, const char *modname,
++			       int idx, psaddr_t *sym_addr) attribute_hidden;
++#define td_lookup(ps, idx, sym_addr) \
++  td_mod_lookup ((ps), LIBPTHREAD_SO, (idx), (sym_addr))
+ 
+ 
+ /* Store in psaddr_t VAR the address of inferior's symbol NAME.  */
diff --git a/SOURCES/glibc-rh1207032.patch b/SOURCES/glibc-rh1207032.patch
new file mode 100644
index 0000000..7ddfb41
--- /dev/null
+++ b/SOURCES/glibc-rh1207032.patch
@@ -0,0 +1,649 @@
+commit fff94fa2245612191123a8015eac94eb04f001e2
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue May 19 06:40:37 2015 +0530
+
+    Avoid deadlock in malloc on backtrace (BZ #16159)
+    
+    When the malloc subsystem detects some kind of memory corruption,
+    depending on the configuration it prints the error, a backtrace, a
+    memory map and then aborts the process.  In this process, the
+    backtrace() call may result in a call to malloc, resulting in
+    various kinds of problematic behavior.
+    
+    In one case, the malloc it calls may detect a corruption and call
+    backtrace again, and a stack overflow may result due to the infinite
+    recursion.  In another case, the malloc it calls may deadlock on an
+    arena lock with the malloc (or free, realloc, etc.) that detected the
+    corruption.  In yet another case, if the program is linked with
+    pthreads, backtrace may do a pthread_once initialization, which
+    deadlocks on itself.
+    
+    In all these cases, the program exit is not as intended.  This is
+    avoidable by marking the arena that malloc detected a corruption on,
+    as unusable.  The following patch does that.  Features of this patch
+    are as follows:
+    
+    - A flag is added to the mstate struct of the arena to indicate if the
+      arena is corrupt.
+    
+    - The flag is checked whenever malloc functions try to get a lock on
+      an arena.  If the arena is unusable, a NULL is returned, causing the
+      malloc to use mmap or try the next arena.
+    
+    - malloc_printerr sets the corrupt flag on the arena when it detects a
+      corruption
+    
+    - free does not concern itself with the flag at all.  It is not
+      important since the backtrace workflow does not need free.  A free
+      in a parallel thread may cause another corruption, but that's not
+      new
+    
+    - The flag check and set are not atomic and may race.  This is fine
+      since we don't care about contention during the flag check.  We want
+      to make sure that the malloc call in the backtrace does not trip on
+      itself and all that action happens in the same thread and not across
+      threads.
+    
+    I verified that the test case does not show any regressions due to
+    this patch.  I also ran the malloc benchmarks and found an
+    insignificant difference in timings (< 2%).
+
+
+The follow-on test-suite fix has been folded into the patch below, but
+to keep it minimal, ignore_stderr is put directly into
+tst-malloc-backtrace.c.
+
+commit 02242448bf431a69fd0b8c929ca4408a05479baa
+Author: Tulio Magno Quites Machado Filho <tuliom@linux.vnet.ibm.com>
+Date:   Tue Jun 2 10:32:25 2015 -0300
+
+    Avoid outputting to TTY after an expected memory corruption in testcase
+
+    Protect TTY against an expected memory corruption from testcase
+    tst-malloc-backtrace, which is expected to SIGABRT after a forced memory
+    corruption.
+
+
+Index: b/malloc/arena.c
+===================================================================
+--- a/malloc/arena.c
++++ b/malloc/arena.c
+@@ -119,7 +119,7 @@ int __malloc_initialized = -1;
+ 
+ #ifdef PER_THREAD
+ # define arena_lock(ptr, size) do { \
+-  if(ptr) \
++  if(ptr && !arena_is_corrupt (ptr)) \
+     (void)mutex_lock(&ptr->mutex); \
+   else \
+     ptr = arena_get2(ptr, (size), NULL); \
+@@ -808,7 +808,7 @@ reused_arena (mstate avoid_arena)
+   result = next_to_use;
+   do
+     {
+-      if (!mutex_trylock(&result->mutex))
++      if (!arena_is_corrupt (result) && !mutex_trylock(&result->mutex))
+ 	goto out;
+ 
+       result = result->next;
+@@ -820,7 +820,21 @@ reused_arena (mstate avoid_arena)
+   if (result == avoid_arena)
+     result = result->next;
+ 
+-  /* No arena available.  Wait for the next in line.  */
++  /* Make sure that the arena we get is not corrupted.  */
++  mstate begin = result;
++  while (arena_is_corrupt (result) || result == avoid_arena)
++    {
++      result = result->next;
++      if (result == begin)
++	break;
++    }
++
++  /* We could not find any arena that was either not corrupted or not the one
++     we wanted to avoid.  */
++  if (result == begin || result == avoid_arena)
++    return NULL;
++
++  /* No arena available without contention.  Wait for the next in line.  */
+   LIBC_PROBE (memory_arena_reuse_wait, 3, &result->mutex, result, avoid_arena);
+   (void)mutex_lock(&result->mutex);
+ 
+Index: b/malloc/hooks.c
+===================================================================
+--- a/malloc/hooks.c
++++ b/malloc/hooks.c
+@@ -109,7 +109,8 @@ malloc_check_get_size(mchunkptr p)
+        size -= c) {
+     if(c<=0 || size<(c+2*SIZE_SZ)) {
+       malloc_printerr(check_action, "malloc_check_get_size: memory corruption",
+-		      chunk2mem(p));
++		      chunk2mem(p),
++		      chunk_is_mmapped (p) ? NULL : arena_for_chunk (p));
+       return 0;
+     }
+   }
+@@ -221,7 +222,8 @@ top_check(void)
+     return 0;
+ 
+   mutex_unlock(&main_arena);
+-  malloc_printerr (check_action, "malloc: top chunk is corrupt", t);
++  malloc_printerr (check_action, "malloc: top chunk is corrupt", t,
++		   &main_arena);
+   mutex_lock(&main_arena);
+ 
+   /* Try to set up a new top chunk. */
+@@ -276,7 +278,8 @@ free_check(void* mem, const void *caller
+   if(!p) {
+     (void)mutex_unlock(&main_arena.mutex);
+ 
+-    malloc_printerr(check_action, "free(): invalid pointer", mem);
++    malloc_printerr(check_action, "free(): invalid pointer", mem,
++		    &main_arena);
+     return;
+   }
+   if (chunk_is_mmapped(p)) {
+@@ -308,7 +311,8 @@ realloc_check(void* oldmem, size_t bytes
+   const mchunkptr oldp = mem2chunk_check(oldmem, &magic_p);
+   (void)mutex_unlock(&main_arena.mutex);
+   if(!oldp) {
+-    malloc_printerr(check_action, "realloc(): invalid pointer", oldmem);
++    malloc_printerr(check_action, "realloc(): invalid pointer", oldmem,
++		    &main_arena);
+     return malloc_check(bytes, NULL);
+   }
+   const INTERNAL_SIZE_T oldsize = chunksize(oldp);
+Index: b/malloc/Makefile
+===================================================================
+--- a/malloc/Makefile
++++ b/malloc/Makefile
+@@ -25,7 +25,8 @@ all:
+ dist-headers := malloc.h
+ headers := $(dist-headers) obstack.h mcheck.h
+ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
+-	 tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 tst-malloc-usable
++	 tst-mallocstate tst-mcheck tst-mallocfork tst-trim1 \
++	 tst-malloc-usable tst-malloc-backtrace
+ test-srcs = tst-mtrace
+ 
+ routines = malloc morecore mcheck mtrace obstack
+@@ -40,6 +41,9 @@ extra-libs-others = $(extra-libs)
+ libmemusage-routines = memusage
+ libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes))
+ 
++$(objpfx)tst-malloc-backtrace: $(common-objpfx)nptl/libpthread.so \
++			       $(common-objpfx)nptl/libpthread_nonshared.a
++
+ # These should be removed by `make clean'.
+ extra-objs = mcheck-init.o libmcheck.a
+ 
+Index: b/malloc/malloc.c
+===================================================================
+--- a/malloc/malloc.c
++++ b/malloc/malloc.c
+@@ -1060,7 +1060,7 @@ static void*  _int_realloc(mstate, mchun
+ static void*  _int_memalign(mstate, size_t, size_t);
+ static void*  _int_valloc(mstate, size_t);
+ static void*  _int_pvalloc(mstate, size_t);
+-static void malloc_printerr(int action, const char *str, void *ptr);
++static void malloc_printerr(int action, const char *str, void *ptr, mstate av);
+ 
+ static void* internal_function mem2mem_check(void *p, size_t sz);
+ static int internal_function top_check(void);
+@@ -1430,7 +1430,8 @@ typedef struct malloc_chunk* mbinptr;
+   BK = P->bk;                                                          \
+   if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) {	       \
+     mutex_unlock(&(AV)->mutex);					       \
+-    malloc_printerr (check_action, "corrupted double-linked list", P); \
++    malloc_printerr (check_action, "corrupted double-linked list", P,  \
++		     AV);					       \
+     mutex_lock(&(AV)->mutex);					       \
+   } else {							       \
+     FD->bk = BK;                                                       \
+@@ -1670,6 +1671,15 @@ typedef struct malloc_chunk* mfastbinptr
+ #define set_noncontiguous(M)   ((M)->flags |=  NONCONTIGUOUS_BIT)
+ #define set_contiguous(M)      ((M)->flags &= ~NONCONTIGUOUS_BIT)
+ 
++/* ARENA_CORRUPTION_BIT is set if a memory corruption was detected on the
++   arena.  Such an arena is no longer used to allocate chunks.  Chunks
++   allocated in that arena before detecting corruption are not freed.  */
++
++#define ARENA_CORRUPTION_BIT (4U)
++
++#define arena_is_corrupt(A)    (((A)->flags & ARENA_CORRUPTION_BIT))
++#define set_arena_corrupt(A)   ((A)->flags |= ARENA_CORRUPTION_BIT)
++
+ /*
+    Set value of max_fast.
+    Use impossibly small value if 0.
+@@ -2281,8 +2291,9 @@ static void* sysmalloc(INTERNAL_SIZE_T n
+     rather than expanding top.
+   */
+ 
+-  if ((unsigned long)(nb) >= (unsigned long)(mp_.mmap_threshold) &&
+-      (mp_.n_mmaps < mp_.n_mmaps_max)) {
++  if (av == NULL
++      || ((unsigned long) (nb) >= (unsigned long) (mp_.mmap_threshold)
++	  && (mp_.n_mmaps < mp_.n_mmaps_max))) {
+ 
+     char* mm;             /* return value from mmap call*/
+ 
+@@ -2354,6 +2365,10 @@ static void* sysmalloc(INTERNAL_SIZE_T n
+     }
+   }
+ 
++  /* There are no usable arenas and mmap also failed.  */
++  if (av == NULL)
++    return 0;
++
+   /* Record incoming configuration of top */
+ 
+   old_top  = av->top;
+@@ -2519,7 +2534,7 @@ static void* sysmalloc(INTERNAL_SIZE_T n
+     else if (contiguous(av) && old_size && brk < old_end) {
+       /* Oops!  Someone else killed our space..  Can't touch anything.  */
+       mutex_unlock(&av->mutex);
+-      malloc_printerr (3, "break adjusted to free malloc space", brk);
++      malloc_printerr (3, "break adjusted to free malloc space", brk, av);
+       mutex_lock(&av->mutex);
+     }
+ 
+@@ -2793,7 +2808,7 @@ munmap_chunk(mchunkptr p)
+   if (__builtin_expect (((block | total_size) & (GLRO(dl_pagesize) - 1)) != 0, 0))
+     {
+       malloc_printerr (check_action, "munmap_chunk(): invalid pointer",
+-		       chunk2mem (p));
++		       chunk2mem (p), NULL);
+       return;
+     }
+ 
+@@ -2861,21 +2876,20 @@ __libc_malloc(size_t bytes)
+   if (__builtin_expect (hook != NULL, 0))
+     return (*hook)(bytes, RETURN_ADDRESS (0));
+ 
+-  arena_lookup(ar_ptr);
++  arena_get(ar_ptr, bytes);
+ 
+-  arena_lock(ar_ptr, bytes);
+-  if(!ar_ptr)
+-    return 0;
+   victim = _int_malloc(ar_ptr, bytes);
+-  if(!victim) {
++  /* Retry with another arena only if we were able to find a usable arena
++     before.  */
++  if (!victim && ar_ptr != NULL) {
+     LIBC_PROBE (memory_malloc_retry, 1, bytes);
+     ar_ptr = arena_get_retry(ar_ptr, bytes);
+-    if (__builtin_expect(ar_ptr != NULL, 1)) {
+-      victim = _int_malloc(ar_ptr, bytes);
+-      (void)mutex_unlock(&ar_ptr->mutex);
+-    }
+-  } else
++    victim = _int_malloc (ar_ptr, bytes);
++  }
++
++  if (ar_ptr != NULL)
+     (void)mutex_unlock(&ar_ptr->mutex);
++
+   assert(!victim || chunk_is_mmapped(mem2chunk(victim)) ||
+ 	 ar_ptr == arena_for_chunk(mem2chunk(victim)));
+   return victim;
+@@ -2946,6 +2960,11 @@ __libc_realloc(void* oldmem, size_t byte
+   /* its size */
+   const INTERNAL_SIZE_T oldsize = chunksize(oldp);
+ 
++  if (chunk_is_mmapped (oldp))
++    ar_ptr = NULL;
++  else
++    ar_ptr = arena_for_chunk (oldp);
++
+   /* Little security check which won't hurt performance: the
+      allocator never wrapps around at the end of the address space.
+      Therefore we can exclude some size values which might appear
+@@ -2953,7 +2972,8 @@ __libc_realloc(void* oldmem, size_t byte
+   if (__builtin_expect ((uintptr_t) oldp > (uintptr_t) -oldsize, 0)
+       || __builtin_expect (misaligned_chunk (oldp), 0))
+     {
+-      malloc_printerr (check_action, "realloc(): invalid pointer", oldmem);
++      malloc_printerr (check_action, "realloc(): invalid pointer", oldmem,
++		       ar_ptr);
+       return NULL;
+     }
+ 
+@@ -2977,7 +2997,6 @@ __libc_realloc(void* oldmem, size_t byte
+     return newmem;
+   }
+ 
+-  ar_ptr = arena_for_chunk(oldp);
+ #if THREAD_STATS
+   if(!mutex_trylock(&ar_ptr->mutex))
+     ++(ar_ptr->stat_lock_direct);
+@@ -3043,18 +3062,17 @@ __libc_memalign(size_t alignment, size_t
+     }
+ 
+   arena_get(ar_ptr, bytes + alignment + MINSIZE);
+-  if(!ar_ptr)
+-    return 0;
++
+   p = _int_memalign(ar_ptr, alignment, bytes);
+-  if(!p) {
++  if(!p && ar_ptr != NULL) {
+     LIBC_PROBE (memory_memalign_retry, 2, bytes, alignment);
+     ar_ptr = arena_get_retry (ar_ptr, bytes);
+-    if (__builtin_expect(ar_ptr != NULL, 1)) {
+-      p = _int_memalign(ar_ptr, alignment, bytes);
+-      (void)mutex_unlock(&ar_ptr->mutex);
+-    }
+-  } else
++    p = _int_memalign (ar_ptr, alignment, bytes);
++  }
++
++  if (ar_ptr != NULL)
+     (void)mutex_unlock(&ar_ptr->mutex);
++
+   assert(!p || chunk_is_mmapped(mem2chunk(p)) ||
+ 	 ar_ptr == arena_for_chunk(mem2chunk(p)));
+   return p;
+@@ -3088,18 +3106,16 @@ __libc_valloc(size_t bytes)
+     return (*hook)(pagesz, bytes, RETURN_ADDRESS (0));
+ 
+   arena_get(ar_ptr, bytes + pagesz + MINSIZE);
+-  if(!ar_ptr)
+-    return 0;
+   p = _int_valloc(ar_ptr, bytes);
+-  if(!p) {
++  if(!p && ar_ptr != NULL) {
+     LIBC_PROBE (memory_valloc_retry, 1, bytes);
+     ar_ptr = arena_get_retry (ar_ptr, bytes);
+-    if (__builtin_expect(ar_ptr != NULL, 1)) {
+-      p = _int_memalign(ar_ptr, pagesz, bytes);
+-      (void)mutex_unlock(&ar_ptr->mutex);
+-    }
+-  } else
++    p = _int_memalign(ar_ptr, pagesz, bytes);
++  }
++
++  if (ar_ptr != NULL)
+     (void)mutex_unlock (&ar_ptr->mutex);
++
+   assert(!p || chunk_is_mmapped(mem2chunk(p)) ||
+ 	 ar_ptr == arena_for_chunk(mem2chunk(p)));
+ 
+@@ -3134,15 +3150,15 @@ __libc_pvalloc(size_t bytes)
+ 
+   arena_get(ar_ptr, bytes + 2*pagesz + MINSIZE);
+   p = _int_pvalloc(ar_ptr, bytes);
+-  if(!p) {
++  if(!p && ar_ptr != NULL) {
+     LIBC_PROBE (memory_pvalloc_retry, 1, bytes);
+     ar_ptr = arena_get_retry (ar_ptr, bytes + 2*pagesz + MINSIZE);
+-    if (__builtin_expect(ar_ptr != NULL, 1)) {
+-      p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
+-      (void)mutex_unlock(&ar_ptr->mutex);
+-    }
+-  } else
++    p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
++  }
++
++  if (ar_ptr != NULL)
+     (void)mutex_unlock(&ar_ptr->mutex);
++
+   assert(!p || chunk_is_mmapped(mem2chunk(p)) ||
+ 	 ar_ptr == arena_for_chunk(mem2chunk(p)));
+ 
+@@ -3184,43 +3200,54 @@ __libc_calloc(size_t n, size_t elem_size
+   sz = bytes;
+ 
+   arena_get(av, sz);
+-  if(!av)
+-    return 0;
++  if(av)
++    {
+ 
+-  /* Check if we hand out the top chunk, in which case there may be no
+-     need to clear. */
++      /* Check if we hand out the top chunk, in which case there may be no
++	 need to clear. */
+ #if MORECORE_CLEARS
+-  oldtop = top(av);
+-  oldtopsize = chunksize(top(av));
+-#if MORECORE_CLEARS < 2
+-  /* Only newly allocated memory is guaranteed to be cleared.  */
+-  if (av == &main_arena &&
+-      oldtopsize < mp_.sbrk_base + av->max_system_mem - (char *)oldtop)
+-    oldtopsize = (mp_.sbrk_base + av->max_system_mem - (char *)oldtop);
++      oldtop = top(av);
++      oldtopsize = chunksize(top(av));
++# if MORECORE_CLEARS < 2
++      /* Only newly allocated memory is guaranteed to be cleared.  */
++      if (av == &main_arena &&
++	  oldtopsize < mp_.sbrk_base + av->max_system_mem - (char *)oldtop)
++	oldtopsize = (mp_.sbrk_base + av->max_system_mem - (char *)oldtop);
++# endif
++      if (av != &main_arena)
++	{
++	  heap_info *heap = heap_for_ptr (oldtop);
++	  if (oldtopsize < ((char *) heap + heap->mprotect_size -
++			    (char *) oldtop))
++	    oldtopsize = (char *) heap + heap->mprotect_size - (char *) oldtop;
++	}
+ #endif
+-  if (av != &main_arena)
+-    {
+-      heap_info *heap = heap_for_ptr (oldtop);
+-      if (oldtopsize < (char *) heap + heap->mprotect_size - (char *) oldtop)
+-	oldtopsize = (char *) heap + heap->mprotect_size - (char *) oldtop;
+     }
+-#endif
++  else
++    {
++      /* No usable arenas.  */
++      oldtop = 0;
++      oldtopsize = 0;
++    }
+   mem = _int_malloc(av, sz);
+ 
+ 
+   assert(!mem || chunk_is_mmapped(mem2chunk(mem)) ||
+ 	 av == arena_for_chunk(mem2chunk(mem)));
+ 
+-  if (mem == 0) {
++  if (mem == 0 && av != NULL) {
+     LIBC_PROBE (memory_calloc_retry, 1, sz);
+     av = arena_get_retry (av, sz);
+-    if (__builtin_expect(av != NULL, 1)) {
+-      mem = _int_malloc(av, sz);
+-      (void)mutex_unlock(&av->mutex);
+-    }
+-    if (mem == 0) return 0;
+-  } else
++    mem = _int_malloc(av, sz);
++  }
++
++  if (av != NULL)
+     (void)mutex_unlock(&av->mutex);
++
++  /* Allocation failed even after a retry.  */
++  if (mem == 0)
++    return 0;
++
+   p = mem2chunk(mem);
+ 
+   /* Two optional cases in which clearing not necessary */
+@@ -3310,6 +3337,16 @@ _int_malloc(mstate av, size_t bytes)
+ 
+   checked_request2size(bytes, nb);
+ 
++  /* There are no usable arenas.  Fall back to sysmalloc to get a chunk from
++     mmap.  */
++  if (__glibc_unlikely (av == NULL))
++    {
++      void *p = sysmalloc (nb, av);
++      if (p != NULL)
++       alloc_perturb (p, bytes);
++      return p;
++    }
++
+   /*
+     If the size qualifies as a fastbin, first check corresponding bin.
+     This code is safe to execute even if av is not yet initialized, so we
+@@ -3334,7 +3371,7 @@ _int_malloc(mstate av, size_t bytes)
+ 	  errstr = "malloc(): memory corruption (fast)";
+ 	errout:
+ 	  mutex_unlock(&av->mutex);
+-	  malloc_printerr (check_action, errstr, chunk2mem (victim));
++	  malloc_printerr (check_action, errstr, chunk2mem (victim), av);
+ 	  mutex_lock(&av->mutex);
+ 	  return NULL;
+ 	}
+@@ -3421,9 +3458,9 @@ _int_malloc(mstate av, size_t bytes)
+       if (__builtin_expect (victim->size <= 2 * SIZE_SZ, 0)
+ 	  || __builtin_expect (victim->size > av->system_mem, 0))
+ 	{
+-	  void *p = chunk2mem(victim);
+ 	  mutex_unlock(&av->mutex);
+-	  malloc_printerr (check_action, "malloc(): memory corruption", p);
++	  malloc_printerr (check_action, "malloc(): memory corruption",
++			   chunk2mem (victim), av);
+ 	  mutex_lock(&av->mutex);
+ 	}
+       size = chunksize(victim);
+@@ -3801,7 +3838,7 @@ _int_free(mstate av, mchunkptr p, int ha
+     errout:
+       if (have_lock || locked)
+ 	(void)mutex_unlock(&av->mutex);
+-      malloc_printerr (check_action, errstr, chunk2mem(p));
++      malloc_printerr (check_action, errstr, chunk2mem(p), av);
+       if (have_lock)
+ 	mutex_lock(&av->mutex);
+       return;
+@@ -4196,7 +4233,7 @@ _int_realloc(mstate av, mchunkptr oldp,
+       errstr = "realloc(): invalid old size";
+     errout:
+       mutex_unlock(&av->mutex);
+-      malloc_printerr (check_action, errstr, chunk2mem(oldp));
++      malloc_printerr (check_action, errstr, chunk2mem(oldp), av);
+       mutex_lock(&av->mutex);
+       return NULL;
+     }
+@@ -4436,7 +4473,7 @@ static void*
+ _int_valloc(mstate av, size_t bytes)
+ {
+   /* Ensure initialization/consolidation */
+-  if (have_fastchunks(av)) malloc_consolidate(av);
++  if (av && have_fastchunks(av)) malloc_consolidate(av);
+   return _int_memalign(av, GLRO(dl_pagesize), bytes);
+ }
+ 
+@@ -4451,7 +4488,7 @@ _int_pvalloc(mstate av, size_t bytes)
+   size_t pagesz;
+ 
+   /* Ensure initialization/consolidation */
+-  if (have_fastchunks(av)) malloc_consolidate(av);
++  if (av && have_fastchunks(av)) malloc_consolidate(av);
+   pagesz = GLRO(dl_pagesize);
+   return _int_memalign(av, pagesz, (bytes + pagesz - 1) & ~(pagesz - 1));
+ }
+@@ -4463,6 +4500,10 @@ _int_pvalloc(mstate av, size_t bytes)
+ 
+ static int mtrim(mstate av, size_t pad)
+ {
++  /* Don't touch corrupt arenas.  */
++  if (arena_is_corrupt (av))
++    return 0;
++
+   /* Ensure initialization/consolidation */
+   malloc_consolidate (av);
+ 
+@@ -4956,8 +4997,14 @@ libc_hidden_def (__libc_mallopt)
+ extern char **__libc_argv attribute_hidden;
+ 
+ static void
+-malloc_printerr(int action, const char *str, void *ptr)
++malloc_printerr(int action, const char *str, void *ptr, mstate ar_ptr)
+ {
++  /* Avoid using this arena in future.  We do not attempt to synchronize this
++     with anything else because we minimally want to ensure that __libc_message
++     gets its resources safely without stumbling on the current corruption.  */
++  if (ar_ptr)
++    set_arena_corrupt (ar_ptr);
++
+   if ((action & 5) == 5)
+     __libc_message (action & 2, "%s\n", str);
+   else if (action & 1)
+Index: b/malloc/tst-malloc-backtrace.c
+===================================================================
+--- /dev/null
++++ b/malloc/tst-malloc-backtrace.c
+@@ -0,0 +1,71 @@
++/* Verify that backtrace does not deadlock on itself on memory corruption.
++   Copyright (C) 2015 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 <fcntl.h>
++#include <paths.h>
++#include <stdlib.h>
++#include <unistd.h>
++
++#define SIZE 4096
++
++/* Avoid all the buffer overflow messages on stderr.  */
++static void
++ignore_stderr (void)
++{
++  int fd = open (_PATH_DEVNULL, O_WRONLY);
++  if (fd == -1)
++    close (STDERR_FILENO);
++  else
++    {
++      dup2 (fd, STDERR_FILENO);
++      close (fd);
++    }
++  setenv ("LIBC_FATAL_STDERR_", "1", 1);
++}
++
++/* Wrap free with a function to prevent gcc from optimizing it out.  */
++static void
++__attribute__((noinline))
++call_free (void *ptr)
++{
++  free (ptr);
++  *(size_t *)(ptr - sizeof (size_t)) = 1;
++}
++
++int
++do_test (void)
++{
++  void *ptr1 = malloc (SIZE);
++  void *ptr2 = malloc (SIZE);
++
++  /* Avoid unwanted output to TTY after an expected memory corruption.  */
++  ignore_stderr ();
++
++  call_free ((void *) ptr1);
++  ptr1 = malloc (SIZE);
++
++  /* Not reached.  The return statement is to put ptr2 into use so that gcc
++     doesn't optimize out that malloc call.  */
++  return (ptr1 == ptr2);
++}
++
++#define TEST_FUNCTION do_test ()
++#define EXPECTED_SIGNAL SIGABRT
++
++#include "../test-skeleton.c"
diff --git a/SOURCES/glibc-rh1211100.patch b/SOURCES/glibc-rh1211100.patch
new file mode 100644
index 0000000..63bb49d
--- /dev/null
+++ b/SOURCES/glibc-rh1211100.patch
@@ -0,0 +1,522 @@
+commit a1b85ae88b1a664e93ca0182c82f7763dd5a1754
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Mon Nov 9 16:52:31 2015 +0100
+
+    ld.so: Add original DSO name if overridden by audit module [BZ #18251]
+
+Index: b/elf/Makefile
+===================================================================
+--- a/elf/Makefile
++++ b/elf/Makefile
+@@ -119,7 +119,8 @@ $(inst_auditdir)/sotruss-lib.so: $(objpf
+ endif
+ 
+ tests = tst-tls1 tst-tls2 tst-tls9 tst-leaks1 \
+-	tst-array1 tst-array2 tst-array3 tst-array4 tst-array5
++	tst-array1 tst-array2 tst-array3 tst-array4 tst-array5 \
++	tst-audit11 tst-audit12
+ tests-static = tst-tls1-static tst-tls2-static tst-stackguard1-static \
+ 	       tst-leaks1-static tst-array1-static tst-array5-static \
+ 	       tst-ptrguard1-static
+@@ -216,7 +217,9 @@ modules-names = testobj1 testobj2 testob
+ 		tst-initorder2a tst-initorder2b tst-initorder2c \
+ 		tst-initorder2d \
+ 		tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \
+-		tst-array5dep
++		tst-array5dep \
++		tst-audit11mod1 tst-audit11mod2 tst-auditmod11 \
++		tst-audit12mod1 tst-audit12mod2 tst-audit12mod3 tst-auditmod12
+ ifeq (yesyes,$(have-fpie)$(build-shared))
+ modules-names += tst-piemod1
+ tests += tst-pie1
+@@ -1210,3 +1213,15 @@ $(objpfx)tst-unused-dep.out: $(objpfx)te
+ 	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+ 	  $< > $@
+ 	cmp $@ /dev/null > /dev/null
++
++$(objpfx)tst-audit11.out: $(objpfx)tst-auditmod11.so $(objpfx)tst-audit11mod1.so
++$(objpfx)tst-audit11: $(libdl)
++tst-audit11-ENV = LD_AUDIT=$(objpfx)tst-auditmod11.so
++$(objpfx)tst-audit11mod1.so: $(objpfx)tst-audit11mod2.so
++LDFLAGS-tst-audit11mod2.so = -Wl,--version-script=tst-audit11mod2.map,-soname,tst-audit11mod2.so
++
++$(objpfx)tst-audit12.out: $(objpfx)tst-auditmod12.so $(objpfx)tst-audit12mod1.so $(objpfx)tst-audit12mod3.so
++$(objpfx)tst-audit12: $(libdl)
++tst-audit12-ENV = LD_AUDIT=$(objpfx)tst-auditmod12.so
++$(objpfx)tst-audit12mod1.so: $(objpfx)tst-audit12mod2.so
++LDFLAGS-tst-audit12mod2.so = -Wl,--version-script=tst-audit12mod2.map
+Index: b/elf/dl-load.c
+===================================================================
+--- a/elf/dl-load.c
++++ b/elf/dl-load.c
+@@ -909,9 +909,10 @@ lose (int code, int fd, const char *name
+ static
+ #endif
+ struct link_map *
+-_dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
+-			char *realname, struct link_map *loader, int l_type,
+-			int mode, void **stack_endp, Lmid_t nsid)
++_dl_map_object_from_fd (const char *name, const char *origname, int fd,
++			struct filebuf *fbp, char *realname,
++			struct link_map *loader, int l_type, int mode,
++			void **stack_endp, Lmid_t nsid)
+ {
+   struct link_map *l = NULL;
+   const ElfW(Ehdr) *header;
+@@ -1582,6 +1583,17 @@ cannot enable executable stack as shared
+   l->l_dev = st.st_dev;
+   l->l_ino = st.st_ino;
+ 
++#ifdef SHARED
++  /* When auditing is used the recorded names might not include the
++     name by which the DSO is actually known.  Add that as well.  */
++  if (__glibc_unlikely (origname != NULL))
++    add_name_to_object (l, origname);
++#else
++  /* Audit modules only exist when linking is dynamic so ORIGNAME
++     cannot be non-NULL.  */
++  assert (origname == NULL);
++#endif
++
+   /* When we profile the SONAME might be needed for something else but
+      loading.  Add it right away.  */
+   if (__builtin_expect (GLRO(dl_profile) != NULL, 0)
+@@ -2081,6 +2093,7 @@ _dl_map_object (struct link_map *loader,
+ 		int type, int trace_mode, int mode, Lmid_t nsid)
+ {
+   int fd;
++  const char *origname = NULL;
+   char *realname;
+   char *name_copy;
+   struct link_map *l;
+@@ -2144,6 +2157,7 @@ _dl_map_object (struct link_map *loader,
+ 	{
+ 	  if (afct->objsearch != NULL)
+ 	    {
++	      const char *before = name;
+ 	      name = afct->objsearch (name, &loader->l_audit[cnt].cookie,
+ 				      LA_SER_ORIG);
+ 	      if (name == NULL)
+@@ -2152,6 +2166,15 @@ _dl_map_object (struct link_map *loader,
+ 		  fd = -1;
+ 		  goto no_file;
+ 		}
++	      if (before != name && strcmp (before, name) != 0)
++		{
++		  if (__glibc_unlikely (GLRO(dl_debug_mask) & DL_DEBUG_FILES))
++		    _dl_debug_printf ("audit changed filename %s -> %s\n",
++				      before, name);
++
++		  if (origname == NULL)
++		    origname = before;
++		}
+ 	    }
+ 
+ 	  afct = afct->next;
+@@ -2371,8 +2394,8 @@ _dl_map_object (struct link_map *loader,
+     }
+ 
+   void *stack_end = __libc_stack_end;
+-  return _dl_map_object_from_fd (name, fd, &fb, realname, loader, type, mode,
+-				 &stack_end, nsid);
++  return _dl_map_object_from_fd (name, origname, fd, &fb, realname, loader,
++				 type, mode, &stack_end, nsid);
+ }
+ 
+ 
+Index: b/elf/tst-audit11.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit11.c
+@@ -0,0 +1,36 @@
++/* Test version symbol binding can find a DSO replaced by la_objsearch.
++   Copyright (C) 2015 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 <dlfcn.h>
++#include <stdio.h>
++
++int
++do_test (void)
++{
++  puts ("Start");
++  if (dlopen ("$ORIGIN/tst-audit11mod1.so", RTLD_LAZY) == NULL)
++    {
++      printf ("module not loaded: %s\n", dlerror ());
++      return 1;
++    }
++  puts ("OK");
++  return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+Index: b/elf/tst-audit11mod1.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit11mod1.c
+@@ -0,0 +1,24 @@
++/* DSO directly opened by tst-audit11.
++   Copyright (C) 2015 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/>.  */
++
++extern int f2 (void);
++int
++f1 (void)
++{
++  return f2 ();
++}
+Index: b/elf/tst-audit11mod2.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit11mod2.c
+@@ -0,0 +1,23 @@
++/* DSO indirectly opened by tst-audit11, with symbol versioning.
++   Copyright (C) 2015 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/>.  */
++
++int
++f2 (void)
++{
++  return 42;
++}
+Index: b/elf/tst-audit11mod2.map
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit11mod2.map
+@@ -0,0 +1,22 @@
++/* Symbol versioning for the DSO indirectly opened by tst-audit11.
++   Copyright (C) 2015 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/>.  */
++
++V1 {
++  global: f2;
++  local: *;
++};
+Index: b/elf/tst-audit12.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit12.c
+@@ -0,0 +1,49 @@
++/* Test that symbol is bound to a DSO replaced by la_objsearch.
++   Copyright (C) 2015 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 <dlfcn.h>
++#include <stdio.h>
++
++int
++do_test (void)
++{
++  puts ("Start");
++  void *h = dlopen ("$ORIGIN/tst-audit12mod1.so", RTLD_LAZY);
++  if (h == NULL)
++    {
++      printf ("module not loaded: %s\n", dlerror ());
++      return 1;
++    }
++  int (*fp) (void) = (int (*) (void)) dlsym (h, "f1");
++  if (fp == NULL)
++    {
++      printf ("function f1 not found: %s\n", dlerror ());
++      return 1;
++    }
++  int res = fp ();
++  if (res != 43)
++    {
++      puts ("incorrect function f2 called");
++      return 1;
++    }
++  printf ("%d is OK\n", res);
++  return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+Index: b/elf/tst-audit12mod1.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit12mod1.c
+@@ -0,0 +1,24 @@
++/* DSO directly opened by tst-audit12.
++   Copyright (C) 2015 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/>.  */
++
++extern int f2 (void);
++int
++f1 (void)
++{
++  return f2 ();
++}
+Index: b/elf/tst-audit12mod2.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit12mod2.c
+@@ -0,0 +1,23 @@
++/* Replaced DSO referenced by tst-audit12mod1.so, for tst-audit12.
++   Copyright (C) 2015 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/>.  */
++
++int
++f2 (void)
++{
++  return 42;
++}
+Index: b/elf/tst-audit12mod2.map
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit12mod2.map
+@@ -0,0 +1,22 @@
++/* Symbol versioning for tst-audit12mod2.so used by tst-audit12.
++   Copyright (C) 2015 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/>.  */
++
++V1 {
++  global: f2;
++  local: *;
++};
+Index: b/elf/tst-audit12mod3.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-audit12mod3.c
+@@ -0,0 +1,23 @@
++/* Replacement DSO loaded by the audit module, for tst-audit12.
++   Copyright (C) 2015 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/>.  */
++
++int
++f2 (void)
++{
++  return 43;
++}
+Index: b/elf/tst-auditmod11.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-auditmod11.c
+@@ -0,0 +1,39 @@
++/* Audit module for tst-audit11.
++   Copyright (C) 2015 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 <link.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++unsigned int
++la_version (unsigned int version)
++{
++  return version;
++}
++
++char *
++la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag)
++{
++  if (strcmp (name, "tst-audit11mod2.so") == 0)
++    {
++      return (char *) "$ORIGIN/tst-audit11mod2.so";
++    }
++  return (char *) name;
++}
+Index: b/elf/tst-auditmod12.c
+===================================================================
+--- /dev/null
++++ b/elf/tst-auditmod12.c
+@@ -0,0 +1,43 @@
++/* Audit module for tst-audit12.
++   Copyright (C) 2015 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 <link.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++unsigned int
++la_version (unsigned int version)
++{
++  return version;
++}
++
++char *
++la_objsearch (const char *name, uintptr_t *cookie, unsigned int flag)
++{
++  const char target[] = "tst-audit12mod2.so";
++
++  size_t namelen = strlen (name);
++  if (namelen >= sizeof (target) - 1
++      && strcmp (name + namelen - (sizeof (target) - 1), target) == 0)
++    {
++      return (char *) "$ORIGIN/tst-audit12mod3.so";
++    }
++  return (char *) name;
++}
+Index: b/sysdeps/mach/hurd/dl-sysdep.c
+===================================================================
+--- a/sysdeps/mach/hurd/dl-sysdep.c
++++ b/sysdeps/mach/hurd/dl-sysdep.c
+@@ -187,7 +187,7 @@ unfmh();			/* XXX */
+ 	    assert_perror (err);
+ 
+ 	    lastslash = strrchr (p, '/');
+-	    l = _dl_map_object_from_fd (lastslash ? lastslash + 1 : p,
++	    l = _dl_map_object_from_fd (lastslash ? lastslash + 1 : p, NULL,
+ 					memobj, strdup (p), 0);
+ 
+ 	    /* Squirrel away the memory object port where it
diff --git a/SOURCES/glibc-rh1211823.patch b/SOURCES/glibc-rh1211823.patch
new file mode 100644
index 0000000..007b7d7
--- /dev/null
+++ b/SOURCES/glibc-rh1211823.patch
@@ -0,0 +1,29005 @@
+commit f22bc486c1ce5e92380a0d06b98fbba639d170e4
+Author: Andreas Schwab <schwab@suse.de>
+Date:   Thu Jan 10 17:46:49 2013 +0100
+
+    Update BIG5-HKSCS charmap to HKSCS-2008
+
+diff --git a/iconvdata/BIG5HKSCS.irreversible b/iconvdata/BIG5HKSCS.irreversible
+index d873dfa..34a261e 100644
+--- a/iconvdata/BIG5HKSCS.irreversible
++++ b/iconvdata/BIG5HKSCS.irreversible
+@@ -1,5 +1,3 @@
+-0x8BF8	0x9F9C
+-0x957A	0x8728
+ 0xA27E	0x256D
+ 0xA2A1	0x256E
+ 0xA2A2	0x2570
+diff --git a/iconvdata/BIG5HKSCS.precomposed b/iconvdata/BIG5HKSCS.precomposed
+new file mode 100644
+index 0000000..3ebb1f5
+--- /dev/null
++++ b/iconvdata/BIG5HKSCS.precomposed
+@@ -0,0 +1,4 @@
++0x88A3	0x00EA 0x0304
++0x88A5	0x00EA 0x030C
++0x8862	0x00CA 0x0304
++0x8864	0x00CA 0x030C
+diff --git a/iconvdata/big5hkscs.c b/iconvdata/big5hkscs.c
+index 18e413d..5487323 100644
+--- a/iconvdata/big5hkscs.c
++++ b/iconvdata/big5hkscs.c
+@@ -29,8 +29,7 @@
+ /* Table for Big5 to UCS conversion.
+ 
+    With HKSCS mappings 0x8140-0xA0FE and 0xFA40-0xFEFE added; more info:
+-   http://www.digital21.gov.hk/eng/hkscs/index.html
+-     - spacehunt 07/01/2000
++   http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/hkscs/
+ 
+    Using the charmap:
+ 
+@@ -43,7 +42,7 @@
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+    while (<>) {
+      local($big5, $ucs) = split;
+-     $big5 = hex($big5) - 0x8840;
++     $big5 = hex($big5) - 0x8740;
+      local($ridx) = int($big5 / 256) * 195 + $big5 % 256;
+      printf "\n " if (($n % 4) == 0);
+      ++$n;
+@@ -54,4545 +53,4621 @@
+ */
+ static const uint32_t big5hkscs_to_ucs[] =
+ {
+-  [    0] = 0xF303, [    1] = 0xF304, [    2] = 0xF305, [    3] = 0xF306,
+-  [    4] = 0xF307, [    5] = 0xF308, [    6] = 0xF309, [    7] = 0xF30A,
+-  [    8] = 0xF30B, [    9] = 0xF30C, [   10] = 0xF30D, [   11] = 0xF30E,
+-  [   12] = 0xF30F, [   13] = 0xF310, [   14] = 0xF311, [   15] = 0xF312,
+-  [   16] = 0xF313, [   17] = 0xF314, [   18] = 0xF315, [   19] = 0xF316,
+-  [   20] = 0xF317, [   21] = 0xF318, [   22] = 0x0100, [   23] = 0x00C1,
+-  [   24] = 0x01CD, [   25] = 0x00C0, [   26] = 0x0112, [   27] = 0x00C9,
+-  [   28] = 0x011A, [   29] = 0x00C8, [   30] = 0x014C, [   31] = 0x00D3,
+-  [   32] = 0x01D1, [   33] = 0x00D2, [   34] = 0xF325, [   35] = 0x1EBE,
+-  [   36] = 0xF327, [   37] = 0x1EC0, [   38] = 0x00CA, [   39] = 0x0101,
+-  [   40] = 0x00E1, [   41] = 0x01CE, [   42] = 0x00E0, [   43] = 0x0251,
+-  [   44] = 0x0113, [   45] = 0x00E9, [   46] = 0x011B, [   47] = 0x00E8,
+-  [   48] = 0x012B, [   49] = 0x00ED, [   50] = 0x01D0, [   51] = 0x00EC,
+-  [   52] = 0x014D, [   53] = 0x00F3, [   54] = 0x01D2, [   55] = 0x00F2,
+-  [   56] = 0x016B, [   57] = 0x00FA, [   58] = 0x01D4, [   59] = 0x00F9,
+-  [   60] = 0x01D6, [   61] = 0x01D8, [   62] = 0x01DA, [   97] = 0x01DC,
+-  [   98] = 0x00FC, [   99] = 0xF344, [  100] = 0x1EBF, [  101] = 0xF346,
+-  [  102] = 0x1EC1, [  103] = 0x00EA, [  104] = 0x0261, [  105] = 0xF34A,
+-  [  106] = 0xF34B, [  195] = 0x2A3A9, [  196] = 0xF3A1, [  198] = 0x650A,
+-  [  201] = 0x4E3D, [  202] = 0x6EDD, [  203] = 0x9D4E, [  204] = 0x91DF,
+-  [  207] = 0x27735, [  208] = 0x6491, [  209] = 0x4F1A, [  210] = 0x4F28,
+-  [  211] = 0x4FA8, [  212] = 0x5156, [  213] = 0x5174, [  214] = 0x519C,
+-  [  215] = 0x51E4, [  216] = 0x52A1, [  217] = 0x52A8, [  218] = 0x533B,
+-  [  219] = 0x534E, [  220] = 0x53D1, [  221] = 0x53D8, [  222] = 0x56E2,
+-  [  223] = 0x58F0, [  224] = 0x5904, [  225] = 0x5907, [  226] = 0x5932,
+-  [  227] = 0x5934, [  228] = 0x5B66, [  229] = 0x5B9E, [  230] = 0x5B9F,
+-  [  231] = 0x5C9A, [  232] = 0x5E86, [  233] = 0x603B, [  234] = 0x6589,
+-  [  235] = 0x67FE, [  236] = 0x6804, [  237] = 0x6865, [  238] = 0x6D4E,
+-  [  239] = 0x70BC, [  240] = 0x7535, [  241] = 0x7EA4, [  242] = 0x7EAC,
+-  [  243] = 0x7EBA, [  244] = 0x7EC7, [  245] = 0x7ECF, [  246] = 0x7EDF,
+-  [  247] = 0x7F06, [  248] = 0x7F37, [  249] = 0x827A, [  250] = 0x82CF,
+-  [  251] = 0x836F, [  252] = 0x89C6, [  253] = 0x8BBE, [  254] = 0x8BE2,
+-  [  255] = 0x8F66, [  256] = 0x8F67, [  257] = 0x8F6E, [  292] = 0x7411,
+-  [  293] = 0x7CFC, [  294] = 0x7DCD, [  295] = 0x6946, [  296] = 0x7AC9,
+-  [  297] = 0x5227, [  302] = 0x918C, [  303] = 0x78B8, [  304] = 0x915E,
+-  [  305] = 0x80BC, [  307] = 0x8D0B, [  308] = 0x80F6, [  309] = 0xF3F0,
+-  [  312] = 0x809F, [  313] = 0x9EC7, [  314] = 0x4CCD, [  315] = 0x9DC9,
+-  [  316] = 0x9E0C, [  317] = 0x4C3E, [  318] = 0xF3F9, [  319] = 0x2700E,
+-  [  320] = 0x9E0A, [  321] = 0xF3FC, [  322] = 0x35C1, [  324] = 0x6E9A,
+-  [  325] = 0x823E, [  326] = 0x7519, [  328] = 0x4911, [  329] = 0x9A6C,
+-  [  330] = 0x9A8F, [  331] = 0x9F99, [  332] = 0x7987, [  333] = 0xF408,
+-  [  334] = 0x21DCA, [  335] = 0x205D0, [  336] = 0xF40B, [  337] = 0x4E24,
+-  [  338] = 0x4E81, [  339] = 0x4E80, [  340] = 0x4E87, [  341] = 0x4EBF,
+-  [  342] = 0x4EEB, [  343] = 0x4F37, [  344] = 0x344C, [  345] = 0x4FBD,
+-  [  346] = 0x3E48, [  347] = 0x5003, [  348] = 0x5088, [  349] = 0x347D,
+-  [  350] = 0x3493, [  351] = 0x34A5, [  352] = 0x5186, [  353] = 0x5905,
+-  [  354] = 0x51DB, [  355] = 0x51FC, [  356] = 0x5205, [  357] = 0x4E89,
+-  [  358] = 0x5279, [  359] = 0x5290, [  360] = 0x5327, [  361] = 0x35C7,
+-  [  362] = 0x53A9, [  363] = 0x3551, [  364] = 0x53B0, [  365] = 0x3553,
+-  [  366] = 0x53C2, [  367] = 0x5423, [  368] = 0x356D, [  369] = 0x3572,
+-  [  370] = 0x3681, [  371] = 0x5493, [  372] = 0x54A3, [  373] = 0x54B4,
+-  [  374] = 0x54B9, [  375] = 0x54D0, [  376] = 0x54EF, [  377] = 0x5518,
+-  [  378] = 0x5523, [  379] = 0x5528, [  380] = 0x3598, [  381] = 0x553F,
+-  [  382] = 0x35A5, [  383] = 0x35BF, [  384] = 0x55D7, [  385] = 0x35C5,
+-  [  390] = 0xF43D, [  391] = 0x5525, [  393] = 0x20C42, [  394] = 0xF441,
+-  [  395] = 0xF442, [  396] = 0x5590, [  397] = 0x22CC6, [  398] = 0x39EC,
+-  [  399] = 0x20341, [  400] = 0x8E46, [  401] = 0x24DB8, [  402] = 0xF449,
+-  [  403] = 0x4053, [  404] = 0x280BE, [  405] = 0x777A, [  406] = 0xF44D,
+-  [  407] = 0x3A34, [  408] = 0x47D5, [  409] = 0xF450, [  410] = 0x269F2,
+-  [  411] = 0x24DEA, [  412] = 0x64DD, [  413] = 0xF454, [  414] = 0x20FB4,
+-  [  415] = 0x20CD5, [  416] = 0x210F4, [  417] = 0x648D, [  418] = 0x8E7E,
+-  [  419] = 0xF45A, [  420] = 0xF45B, [  421] = 0xF45C, [  422] = 0xF45D,
+-  [  423] = 0x28256, [  424] = 0x244D3, [  426] = 0x20D46, [  427] = 0xF462,
+-  [  428] = 0x280E9, [  429] = 0x47F4, [  430] = 0xF465, [  431] = 0xF466,
+-  [  432] = 0x9AB2, [  433] = 0x3A67, [  434] = 0xF469, [  435] = 0x3FED,
+-  [  436] = 0x3506, [  437] = 0x252C7, [  438] = 0xF46D, [  439] = 0xF46E,
+-  [  440] = 0xF46F, [  441] = 0x9D6E, [  442] = 0x9815, [  444] = 0x43D9,
+-  [  445] = 0x260A5, [  446] = 0x64B4, [  447] = 0x54E3, [  448] = 0xF477,
+-  [  449] = 0xF478, [  450] = 0x21077, [  451] = 0x39FB, [  452] = 0x2106F,
+-  [  487] = 0xF47C, [  488] = 0xF47D, [  489] = 0xF47E, [  490] = 0x64EA,
+-  [  491] = 0xF480, [  492] = 0x20C43, [  493] = 0x8E68, [  494] = 0x221A1,
+-  [  495] = 0x28B4C, [  496] = 0xF485, [  498] = 0x480B, [  499] = 0xF488,
+-  [  500] = 0x3FFA, [  501] = 0x5873, [  502] = 0xF48B, [  504] = 0xF48D,
+-  [  505] = 0x204FC, [  506] = 0xF48F, [  507] = 0xF490, [  508] = 0xF491,
+-  [  509] = 0x5579, [  510] = 0x40BB, [  511] = 0x43BA, [  513] = 0x4AB4,
+-  [  514] = 0xF497, [  515] = 0xF498, [  516] = 0x81AA, [  517] = 0x98F5,
+-  [  518] = 0xF49B, [  519] = 0x6379, [  520] = 0x39FE, [  521] = 0x22775,
+-  [  522] = 0x8DC0, [  523] = 0x56A1, [  524] = 0x647C, [  525] = 0x3E43,
+-  [  527] = 0xF4A4, [  528] = 0x20E09, [  529] = 0x22ACF, [  530] = 0xF4A7,
+-  [  532] = 0x210C8, [  533] = 0xF4AA, [  534] = 0x3992, [  535] = 0x3A06,
+-  [  536] = 0xF4AD, [  537] = 0x3578, [  538] = 0xF4AF, [  539] = 0x220C7,
+-  [  540] = 0x5652, [  541] = 0x20F31, [  542] = 0xF4B3, [  543] = 0xF4B4,
+-  [  544] = 0x34BC, [  545] = 0x6C3D, [  546] = 0xF4B7, [  549] = 0xF4BA,
+-  [  550] = 0xF4BB, [  551] = 0xF4BC, [  552] = 0xF4BD, [  553] = 0x28CCD,
+-  [  554] = 0x20E7A, [  555] = 0xF4C0, [  556] = 0xF4C1, [  557] = 0x7F93,
+-  [  558] = 0xF4C3, [  559] = 0x22803, [  560] = 0x22939, [  561] = 0x35FB,
+-  [  562] = 0x251E3, [  563] = 0xF4C8, [  564] = 0x20F8D, [  565] = 0x20EAA,
+-  [  566] = 0x3F93, [  567] = 0x20F30, [  568] = 0x20D47, [  569] = 0xF4CE,
+-  [  570] = 0xF4CF, [  572] = 0x20EAB, [  573] = 0xF4D2, [  574] = 0x20D48,
+-  [  575] = 0x210C0, [  576] = 0x2113D, [  577] = 0x3FF9, [  578] = 0x22696,
+-  [  579] = 0x6432, [  580] = 0x20FAD, [  585] = 0x233F4, [  586] = 0x27639,
+-  [  587] = 0x22BCE, [  588] = 0x20D7E, [  589] = 0x20D7F, [  590] = 0x22C51,
+-  [  591] = 0x22C55, [  592] = 0x3A18, [  593] = 0xF4E2, [  594] = 0x210C7,
+-  [  595] = 0x20F2E, [  596] = 0xF4E5, [  597] = 0x26B50, [  598] = 0xF4E7,
+-  [  599] = 0xF4E8, [  600] = 0xF4E9, [  601] = 0x95AA, [  602] = 0x54CC,
+-  [  603] = 0x82C4, [  604] = 0x55B9, [  606] = 0x29EC3, [  607] = 0x9C26,
+-  [  608] = 0x9AB6, [  609] = 0x2775E, [  610] = 0xF4F3, [  611] = 0x7140,
+-  [  612] = 0x816D, [  613] = 0x80EC, [  614] = 0x5C1C, [  615] = 0x26572,
+-  [  616] = 0x8134, [  617] = 0x3797, [  618] = 0x535F, [  619] = 0x280BD,
+-  [  620] = 0x91B6, [  621] = 0x20EFA, [  622] = 0x20E0F, [  623] = 0x20E77,
+-  [  624] = 0x20EFB, [  625] = 0x35DD, [  626] = 0x24DEB, [  627] = 0x3609,
+-  [  628] = 0x20CD6, [  629] = 0x56AF, [  630] = 0x227B5, [  631] = 0x210C9,
+-  [  632] = 0x20E10, [  633] = 0x20E78, [  634] = 0x21078, [  635] = 0x21148,
+-  [  636] = 0x28207, [  637] = 0x21455, [  638] = 0x20E79, [  639] = 0x24E50,
+-  [  640] = 0x22DA4, [  641] = 0x5A54, [  642] = 0x2101D, [  643] = 0x2101E,
+-  [  644] = 0x210F5, [  645] = 0x210F6, [  646] = 0x579C, [  647] = 0x20E11,
+-  [  682] = 0x27694, [  683] = 0x282CD, [  684] = 0x20FB5, [  685] = 0x20E7B,
+-  [  686] = 0x2517E, [  687] = 0x3703, [  688] = 0x20FB6, [  689] = 0x21180,
+-  [  690] = 0x252D8, [  691] = 0xF522, [  692] = 0xF523, [  693] = 0x2183A,
+-  [  694] = 0xF525, [  695] = 0xF526, [  696] = 0x5899, [  697] = 0x5268,
+-  [  698] = 0x361A, [  699] = 0xF52A, [  700] = 0x7BB2, [  701] = 0x5B68,
+-  [  702] = 0x4800, [  703] = 0x4B2C, [  704] = 0x9F27, [  705] = 0x49E7,
+-  [  706] = 0x9C1F, [  707] = 0x9B8D, [  708] = 0x25B74, [  709] = 0x2313D,
+-  [  710] = 0x55FB, [  711] = 0x35F2, [  712] = 0x5689, [  713] = 0x4E28,
+-  [  714] = 0x5902, [  715] = 0xF53A, [  716] = 0xF53B, [  717] = 0x9751,
+-  [  718] = 0xF53D, [  719] = 0x4E5B, [  720] = 0x4EBB, [  721] = 0x353E,
+-  [  722] = 0x5C23, [  723] = 0x5F51, [  724] = 0x5FC4, [  725] = 0x38FA,
+-  [  726] = 0x624C, [  727] = 0x6535, [  728] = 0x6B7A, [  729] = 0x6C35,
+-  [  730] = 0x6C3A, [  731] = 0x706C, [  732] = 0x722B, [  733] = 0x4E2C,
+-  [  734] = 0x72AD, [  735] = 0xF54E, [  736] = 0x7F52, [  737] = 0x793B,
+-  [  738] = 0x7CF9, [  739] = 0x7F53, [  740] = 0xF553, [  741] = 0x34C1,
+-  [  743] = 0xF556, [  744] = 0x8002, [  745] = 0x8080, [  746] = 0xF559,
+-  [  747] = 0xF55A, [  748] = 0x535D, [  749] = 0x8864, [  750] = 0x89C1,
+-  [  751] = 0xF55E, [  752] = 0x8BA0, [  753] = 0x8D1D, [  754] = 0x9485,
+-  [  755] = 0x9578, [  756] = 0x957F, [  757] = 0x95E8, [  758] = 0xF565,
+-  [  759] = 0x97E6, [  760] = 0x9875, [  761] = 0x98CE, [  762] = 0x98DE,
+-  [  763] = 0x9963, [  764] = 0xF56B, [  765] = 0x9C7C, [  766] = 0x9E1F,
+-  [  767] = 0x9EC4, [  768] = 0x6B6F, [  769] = 0x9F9C, [  770] = 0x4E37,
+-  [  771] = 0xF572, [  772] = 0x961D, [  773] = 0x6237, [  774] = 0x94A2,
+-  [ 1007] = 0x5D3E, [ 1008] = 0x5D48, [ 1009] = 0x5D56, [ 1010] = 0x3DFC,
+-  [ 1011] = 0x380F, [ 1012] = 0x5DA4, [ 1013] = 0x5DB9, [ 1014] = 0x3820,
+-  [ 1015] = 0x3838, [ 1016] = 0x5E42, [ 1017] = 0x5EBD, [ 1018] = 0x5F25,
+-  [ 1019] = 0x5F83, [ 1020] = 0x3908, [ 1021] = 0x3914, [ 1022] = 0x393F,
+-  [ 1023] = 0x394D, [ 1024] = 0x60D7, [ 1025] = 0x613D, [ 1026] = 0x5CE5,
+-  [ 1027] = 0x3989, [ 1028] = 0x61B7, [ 1029] = 0x61B9, [ 1030] = 0x61CF,
+-  [ 1031] = 0x39B8, [ 1032] = 0x622C, [ 1033] = 0x6290, [ 1034] = 0x62E5,
+-  [ 1035] = 0x6318, [ 1036] = 0x39F8, [ 1037] = 0x56B1, [ 1072] = 0x3A03,
+-  [ 1073] = 0x63E2, [ 1074] = 0x63FB, [ 1075] = 0x6407, [ 1076] = 0x645A,
+-  [ 1077] = 0x3A4B, [ 1078] = 0x64C0, [ 1079] = 0x5D15, [ 1080] = 0x5621,
+-  [ 1081] = 0x9F9F, [ 1082] = 0x3A97, [ 1083] = 0x6586, [ 1084] = 0x3ABD,
+-  [ 1085] = 0x65FF, [ 1086] = 0x6653, [ 1087] = 0x3AF2, [ 1088] = 0x6692,
+-  [ 1089] = 0x3B22, [ 1090] = 0x6716, [ 1091] = 0x3B42, [ 1092] = 0x67A4,
+-  [ 1093] = 0x6800, [ 1094] = 0x3B58, [ 1095] = 0x684A, [ 1096] = 0x6884,
+-  [ 1097] = 0x3B72, [ 1098] = 0x3B71, [ 1099] = 0x3B7B, [ 1100] = 0x6909,
+-  [ 1101] = 0x6943, [ 1102] = 0x725C, [ 1103] = 0x6964, [ 1104] = 0x699F,
+-  [ 1105] = 0x6985, [ 1106] = 0x3BBC, [ 1107] = 0x69D6, [ 1108] = 0x3BDD,
+-  [ 1109] = 0x6A65, [ 1110] = 0x6A74, [ 1111] = 0x6A71, [ 1112] = 0x6A82,
+-  [ 1113] = 0x3BEC, [ 1114] = 0x6A99, [ 1115] = 0x3BF2, [ 1116] = 0x6AAB,
+-  [ 1117] = 0x6AB5, [ 1118] = 0x6AD4, [ 1119] = 0x6AF6, [ 1120] = 0x6B81,
+-  [ 1121] = 0x6BC1, [ 1122] = 0x6BEA, [ 1123] = 0x6C75, [ 1124] = 0x6CAA,
+-  [ 1125] = 0x3CCB, [ 1126] = 0x6D02, [ 1127] = 0x6D06, [ 1128] = 0x6D26,
+-  [ 1129] = 0x6D81, [ 1130] = 0x3CEF, [ 1131] = 0x6DA4, [ 1132] = 0x6DB1,
+-  [ 1133] = 0x6E15, [ 1134] = 0x6E18, [ 1135] = 0x6E29, [ 1136] = 0x6E86,
+-  [ 1137] = 0x289C0, [ 1138] = 0x6EBB, [ 1139] = 0x6EE2, [ 1140] = 0x6EDA,
+-  [ 1141] = 0x9F7F, [ 1142] = 0x6EE8, [ 1143] = 0x6EE9, [ 1144] = 0x6F24,
+-  [ 1145] = 0x6F34, [ 1146] = 0x3D46, [ 1147] = 0x23F41, [ 1148] = 0x6F81,
+-  [ 1149] = 0x6FBE, [ 1150] = 0x3D6A, [ 1151] = 0x3D75, [ 1152] = 0x71B7,
+-  [ 1153] = 0x5C99, [ 1154] = 0x3D8A, [ 1155] = 0x702C, [ 1156] = 0x3D91,
+-  [ 1157] = 0x7050, [ 1158] = 0x7054, [ 1159] = 0x706F, [ 1160] = 0x707F,
+-  [ 1161] = 0x7089, [ 1162] = 0x20325, [ 1163] = 0x43C1, [ 1164] = 0x35F1,
+-  [ 1165] = 0xF6B0, [ 1170] = 0xE311, [ 1171] = 0x57BE, [ 1172] = 0x26ED3,
+-  [ 1173] = 0x713E, [ 1174] = 0x257E0, [ 1175] = 0x364E, [ 1176] = 0x69A2,
+-  [ 1177] = 0x28BE9, [ 1178] = 0x5B74, [ 1179] = 0x7A49, [ 1180] = 0x258E1,
+-  [ 1181] = 0x294D9, [ 1182] = 0x7A65, [ 1183] = 0x7A7D, [ 1184] = 0x259AC,
+-  [ 1185] = 0x7ABB, [ 1186] = 0x7AB0, [ 1187] = 0x7AC2, [ 1188] = 0x7AC3,
+-  [ 1189] = 0x71D1, [ 1190] = 0xE325, [ 1191] = 0x41CA, [ 1192] = 0x7ADA,
+-  [ 1193] = 0x7ADD, [ 1194] = 0x7AEA, [ 1195] = 0x41EF, [ 1196] = 0x54B2,
+-  [ 1197] = 0x25C01, [ 1198] = 0x7B0B, [ 1199] = 0x7B55, [ 1200] = 0x7B29,
+-  [ 1201] = 0xE330, [ 1202] = 0x25CFE, [ 1203] = 0x7BA2, [ 1204] = 0x7B6F,
+-  [ 1205] = 0x839C, [ 1206] = 0x25BB4, [ 1207] = 0x26C7F, [ 1208] = 0x7BD0,
+-  [ 1209] = 0x8421, [ 1210] = 0x7B92, [ 1212] = 0x23FF0, [ 1213] = 0x3DAD,
+-  [ 1214] = 0x25C65, [ 1215] = 0x8492, [ 1216] = 0x7BFA, [ 1218] = 0x7C35,
+-  [ 1219] = 0x25CC1, [ 1220] = 0x7C44, [ 1221] = 0x7C83, [ 1222] = 0xE345,
+-  [ 1223] = 0x7CA6, [ 1224] = 0x667D, [ 1225] = 0x24578, [ 1226] = 0x7CC9,
+-  [ 1227] = 0x7CC7, [ 1228] = 0x7CE6, [ 1229] = 0x7C74, [ 1230] = 0x7CF3,
+-  [ 1231] = 0x7CF5, [ 1267] = 0x7E67, [ 1268] = 0x451D, [ 1269] = 0x26E44,
+-  [ 1270] = 0x7D5D, [ 1271] = 0x26ED6, [ 1272] = 0x748D, [ 1273] = 0x7D89,
+-  [ 1274] = 0x7DAB, [ 1275] = 0x7135, [ 1276] = 0x7DB3, [ 1278] = 0x24057,
+-  [ 1279] = 0x26029, [ 1280] = 0x7DE4, [ 1281] = 0x3D13, [ 1282] = 0x7DF5,
+-  [ 1283] = 0x217F9, [ 1284] = 0x7DE5, [ 1285] = 0xE362, [ 1287] = 0x26121,
+-  [ 1288] = 0x2615A, [ 1289] = 0x7E6E, [ 1290] = 0x7E92, [ 1291] = 0x432B,
+-  [ 1292] = 0x946C, [ 1293] = 0x7E27, [ 1294] = 0x7F40, [ 1295] = 0x7F41,
+-  [ 1296] = 0x7F47, [ 1297] = 0x7936, [ 1298] = 0x262D0, [ 1299] = 0x99E1,
+-  [ 1300] = 0x7F97, [ 1301] = 0x26351, [ 1302] = 0x7FA3, [ 1303] = 0x21661,
+-  [ 1304] = 0x20068, [ 1305] = 0x455C, [ 1306] = 0x23766, [ 1307] = 0x4503,
+-  [ 1308] = 0x2833A, [ 1309] = 0x7FFA, [ 1310] = 0x26489, [ 1312] = 0x8008,
+-  [ 1313] = 0x801D, [ 1315] = 0x802F, [ 1316] = 0xE381, [ 1317] = 0xE382,
+-  [ 1318] = 0x803B, [ 1319] = 0x803C, [ 1320] = 0x8061, [ 1321] = 0xE386,
+-  [ 1322] = 0x4989, [ 1323] = 0x26626, [ 1324] = 0xE389, [ 1325] = 0x266E8,
+-  [ 1326] = 0x6725, [ 1327] = 0x80A7, [ 1328] = 0x28A48, [ 1329] = 0x8107,
+-  [ 1330] = 0x811A, [ 1331] = 0x58B0, [ 1332] = 0x226F6, [ 1333] = 0x6C7F,
+-  [ 1334] = 0x26498, [ 1335] = 0xE394, [ 1336] = 0x64E7, [ 1337] = 0xE396,
+-  [ 1338] = 0x8218, [ 1339] = 0x2185E, [ 1340] = 0x6A53, [ 1341] = 0x24A65,
+-  [ 1342] = 0x24A95, [ 1343] = 0x447A, [ 1344] = 0x8229, [ 1345] = 0xE39E,
+-  [ 1346] = 0x26A52, [ 1347] = 0xE3A0, [ 1348] = 0x4FF9, [ 1349] = 0x214FD,
+-  [ 1350] = 0x84E2, [ 1351] = 0x8362, [ 1352] = 0x26B0A, [ 1353] = 0x249A7,
+-  [ 1354] = 0x23530, [ 1355] = 0x21773, [ 1356] = 0x23DF8, [ 1357] = 0x82AA,
+-  [ 1358] = 0x691B, [ 1359] = 0x2F994, [ 1360] = 0x41DB, [ 1365] = 0x854B,
+-  [ 1366] = 0x82D0, [ 1367] = 0x831A, [ 1368] = 0x20E16, [ 1369] = 0x217B4,
+-  [ 1370] = 0x36C1, [ 1371] = 0xE3B4, [ 1372] = 0x2355A, [ 1373] = 0x827B,
+-  [ 1374] = 0x82E2, [ 1375] = 0x8318, [ 1376] = 0x23E8B, [ 1377] = 0x26DA3,
+-  [ 1378] = 0xE3BB, [ 1379] = 0x26B97, [ 1380] = 0x235CE, [ 1381] = 0x3DBF,
+-  [ 1382] = 0x831D, [ 1383] = 0x55EC, [ 1384] = 0x8385, [ 1385] = 0x450B,
+-  [ 1386] = 0x26DA5, [ 1387] = 0x83AC, [ 1389] = 0x83D3, [ 1390] = 0x347E,
+-  [ 1391] = 0x26ED4, [ 1392] = 0x6A57, [ 1393] = 0x855A, [ 1394] = 0x3496,
+-  [ 1395] = 0x26E42, [ 1396] = 0xE3CD, [ 1397] = 0x8458, [ 1398] = 0xE3CF,
+-  [ 1399] = 0x8471, [ 1400] = 0x3DD3, [ 1401] = 0x44E4, [ 1402] = 0x6AA7,
+-  [ 1403] = 0x844A, [ 1404] = 0xE3D5, [ 1405] = 0x7958, [ 1407] = 0x26B96,
+-  [ 1408] = 0x26E77, [ 1409] = 0x26E43, [ 1410] = 0x84DE, [ 1412] = 0x8391,
+-  [ 1413] = 0x44A0, [ 1414] = 0x8493, [ 1415] = 0x84E4, [ 1416] = 0xE3E1,
+-  [ 1417] = 0x4240, [ 1418] = 0x25CC0, [ 1419] = 0x4543, [ 1420] = 0x8534,
+-  [ 1421] = 0x5AF2, [ 1422] = 0xE3E7, [ 1423] = 0x4527, [ 1424] = 0x8573,
+-  [ 1425] = 0x4516, [ 1426] = 0x67BF, [ 1427] = 0x8616, [ 1462] = 0x28625,
+-  [ 1463] = 0x2863B, [ 1464] = 0x85C1, [ 1465] = 0xE3F0, [ 1466] = 0x8602,
+-  [ 1467] = 0xE3F2, [ 1468] = 0x270CD, [ 1469] = 0xE3F4, [ 1470] = 0x456A,
+-  [ 1471] = 0x8628, [ 1472] = 0x3648, [ 1473] = 0x218A2, [ 1474] = 0x53F7,
+-  [ 1475] = 0x2739A, [ 1476] = 0x867E, [ 1477] = 0x8771, [ 1478] = 0x2A0F8,
+-  [ 1479] = 0x87EE, [ 1480] = 0x22C27, [ 1481] = 0x87B1, [ 1482] = 0x87DA,
+-  [ 1483] = 0x880F, [ 1484] = 0x5661, [ 1485] = 0x866C, [ 1486] = 0x6856,
+-  [ 1487] = 0x460F, [ 1488] = 0x8845, [ 1489] = 0x8846, [ 1490] = 0x275E0,
+-  [ 1491] = 0x23DB9, [ 1492] = 0x275E4, [ 1493] = 0x885E, [ 1494] = 0x889C,
+-  [ 1495] = 0x465B, [ 1496] = 0x88B4, [ 1497] = 0x88B5, [ 1498] = 0x63C1,
+-  [ 1499] = 0x88C5, [ 1500] = 0x7777, [ 1501] = 0x2770F, [ 1502] = 0x8987,
+-  [ 1503] = 0x898A, [ 1506] = 0x89A7, [ 1507] = 0x89BC, [ 1508] = 0x28A25,
+-  [ 1509] = 0x89E7, [ 1510] = 0x27924, [ 1511] = 0x27ABD, [ 1512] = 0x8A9C,
+-  [ 1513] = 0x7793, [ 1514] = 0x91FE, [ 1515] = 0x8A90, [ 1516] = 0x27A59,
+-  [ 1517] = 0x7AE9, [ 1518] = 0x27B3A, [ 1519] = 0xE426, [ 1520] = 0x4713,
+-  [ 1521] = 0x27B38, [ 1522] = 0x717C, [ 1523] = 0x8B0C, [ 1524] = 0x8B1F,
+-  [ 1525] = 0x25430, [ 1526] = 0x25565, [ 1527] = 0x8B3F, [ 1528] = 0x8B4C,
+-  [ 1529] = 0x8B4D, [ 1530] = 0x8AA9, [ 1531] = 0x24A7A, [ 1532] = 0x8B90,
+-  [ 1533] = 0x8B9B, [ 1534] = 0x8AAF, [ 1535] = 0xE436, [ 1536] = 0x4615,
+-  [ 1537] = 0x884F, [ 1538] = 0x8C9B, [ 1539] = 0x27D54, [ 1540] = 0x27D8F,
+-  [ 1541] = 0x2F9D4, [ 1542] = 0x3725, [ 1543] = 0x27D53, [ 1544] = 0x8CD6,
+-  [ 1545] = 0x27D98, [ 1546] = 0x27DBD, [ 1547] = 0x8D12, [ 1548] = 0x8D03,
+-  [ 1549] = 0x21910, [ 1550] = 0x8CDB, [ 1551] = 0x705C, [ 1552] = 0x8D11,
+-  [ 1553] = 0xE448, [ 1554] = 0x3ED0, [ 1560] = 0x8DA9, [ 1561] = 0x28002,
+-  [ 1562] = 0xE44D, [ 1563] = 0x2498A, [ 1564] = 0x3B7C, [ 1565] = 0xE450,
+-  [ 1566] = 0x2710C, [ 1567] = 0x7AE7, [ 1568] = 0x8EAD, [ 1569] = 0x8EB6,
+-  [ 1570] = 0x8EC3, [ 1571] = 0x92D4, [ 1572] = 0x8F19, [ 1573] = 0x8F2D,
+-  [ 1574] = 0x28365, [ 1575] = 0x28412, [ 1576] = 0x8FA5, [ 1577] = 0x9303,
+-  [ 1578] = 0x2A29F, [ 1579] = 0x20A50, [ 1580] = 0x8FB3, [ 1581] = 0x492A,
+-  [ 1582] = 0x289DE, [ 1583] = 0x2853D, [ 1584] = 0x23DBB, [ 1585] = 0x5EF8,
+-  [ 1586] = 0x23262, [ 1587] = 0x8FF9, [ 1588] = 0xE467, [ 1589] = 0xE468,
+-  [ 1590] = 0xE469, [ 1591] = 0x22325, [ 1592] = 0x3980, [ 1593] = 0x26ED7,
+-  [ 1594] = 0x9037, [ 1595] = 0x2853C, [ 1596] = 0x27ABE, [ 1597] = 0x9061,
+-  [ 1598] = 0x2856C, [ 1599] = 0x2860B, [ 1600] = 0x90A8, [ 1601] = 0xE474,
+-  [ 1602] = 0x90C4, [ 1603] = 0x286E6, [ 1604] = 0x90AE, [ 1606] = 0x9167,
+-  [ 1607] = 0x3AF0, [ 1608] = 0x91A9, [ 1609] = 0x91C4, [ 1610] = 0x7CAC,
+-  [ 1611] = 0x28933, [ 1612] = 0x21E89, [ 1613] = 0x920E, [ 1614] = 0x6C9F,
+-  [ 1615] = 0x9241, [ 1616] = 0x9262, [ 1617] = 0x255B9, [ 1619] = 0x28AC6,
+-  [ 1620] = 0x23C9B, [ 1621] = 0x28B0C, [ 1622] = 0x255DB, [ 1657] = 0xE48A,
+-  [ 1658] = 0x932C, [ 1659] = 0x936B, [ 1660] = 0x28AE1, [ 1661] = 0x28BEB,
+-  [ 1662] = 0x708F, [ 1663] = 0x5AC3, [ 1664] = 0x28AE2, [ 1665] = 0x28AE5,
+-  [ 1666] = 0x4965, [ 1667] = 0x9244, [ 1668] = 0x28BEC, [ 1669] = 0x28C39,
+-  [ 1670] = 0x28BFF, [ 1671] = 0x9373, [ 1672] = 0x945B, [ 1673] = 0x8EBC,
+-  [ 1674] = 0x9585, [ 1675] = 0x95A6, [ 1676] = 0x9426, [ 1677] = 0x95A0,
+-  [ 1678] = 0x6FF6, [ 1679] = 0x42B9, [ 1680] = 0xE4A1, [ 1681] = 0x286D8,
+-  [ 1682] = 0x2127C, [ 1683] = 0x23E2E, [ 1684] = 0x49DF, [ 1685] = 0x6C1C,
+-  [ 1686] = 0x967B, [ 1687] = 0x9696, [ 1688] = 0x416C, [ 1689] = 0x96A3,
+-  [ 1690] = 0x26ED5, [ 1691] = 0x61DA, [ 1692] = 0x96B6, [ 1693] = 0x78F5,
+-  [ 1694] = 0x28AE0, [ 1695] = 0x96BD, [ 1696] = 0x53CC, [ 1697] = 0x49A1,
+-  [ 1698] = 0x26CB8, [ 1699] = 0x20274, [ 1700] = 0x26410, [ 1701] = 0x290AF,
+-  [ 1702] = 0x290E5, [ 1703] = 0x24AD1, [ 1704] = 0x21915, [ 1705] = 0x2330A,
+-  [ 1706] = 0x9731, [ 1707] = 0x8642, [ 1708] = 0x9736, [ 1709] = 0x4A0F,
+-  [ 1710] = 0x453D, [ 1711] = 0x4585, [ 1712] = 0xE4C1, [ 1713] = 0x7075,
+-  [ 1714] = 0x5B41, [ 1715] = 0x971B, [ 1717] = 0xE4C6, [ 1718] = 0x9757,
+-  [ 1719] = 0x5B4A, [ 1720] = 0x291EB, [ 1721] = 0x975F, [ 1722] = 0x9425,
+-  [ 1723] = 0x50D0, [ 1724] = 0x230B7, [ 1725] = 0x230BC, [ 1726] = 0x9789,
+-  [ 1727] = 0x979F, [ 1728] = 0x97B1, [ 1729] = 0x97BE, [ 1730] = 0x97C0,
+-  [ 1731] = 0x97D2, [ 1732] = 0x97E0, [ 1733] = 0x2546C, [ 1734] = 0x97EE,
+-  [ 1735] = 0x741C, [ 1736] = 0x29433, [ 1738] = 0x97F5, [ 1739] = 0x2941D,
+-  [ 1740] = 0xE4DD, [ 1741] = 0x4AD1, [ 1742] = 0x9834, [ 1743] = 0x9833,
+-  [ 1744] = 0x984B, [ 1745] = 0x9866, [ 1746] = 0x3B0E, [ 1747] = 0x27175,
+-  [ 1748] = 0x3D51, [ 1749] = 0x20630, [ 1750] = 0x2415C, [ 1755] = 0x25706,
+-  [ 1756] = 0x98CA, [ 1757] = 0x98B7, [ 1758] = 0x98C8, [ 1759] = 0x98C7,
+-  [ 1760] = 0x4AFF, [ 1761] = 0x26D27, [ 1762] = 0x216D3, [ 1763] = 0x55B0,
+-  [ 1764] = 0x98E1, [ 1765] = 0x98E6, [ 1766] = 0x98EC, [ 1767] = 0x9378,
+-  [ 1768] = 0x9939, [ 1769] = 0x24A29, [ 1770] = 0x4B72, [ 1771] = 0x29857,
+-  [ 1772] = 0x29905, [ 1773] = 0x99F5, [ 1774] = 0x9A0C, [ 1775] = 0x9A3B,
+-  [ 1776] = 0x9A10, [ 1777] = 0x9A58, [ 1778] = 0x25725, [ 1779] = 0x36C4,
+-  [ 1780] = 0x290B1, [ 1781] = 0x29BD5, [ 1782] = 0x9AE0, [ 1783] = 0x9AE2,
+-  [ 1784] = 0x29B05, [ 1785] = 0x9AF4, [ 1786] = 0x4C0E, [ 1787] = 0x9B14,
+-  [ 1788] = 0x9B2D, [ 1789] = 0x28600, [ 1790] = 0x5034, [ 1791] = 0x9B34,
+-  [ 1792] = 0x269A8, [ 1793] = 0x38C3, [ 1794] = 0x2307D, [ 1795] = 0x9B50,
+-  [ 1796] = 0x9B40, [ 1797] = 0x29D3E, [ 1798] = 0x5A45, [ 1799] = 0x21863,
+-  [ 1800] = 0x9B8E, [ 1801] = 0x2424B, [ 1802] = 0x9C02, [ 1803] = 0x9BFF,
+-  [ 1804] = 0x9C0C, [ 1805] = 0x29E68, [ 1806] = 0x9DD4, [ 1807] = 0x29FB7,
+-  [ 1808] = 0x2A192, [ 1809] = 0xE51E, [ 1810] = 0x2A0E1, [ 1811] = 0x2A123,
+-  [ 1812] = 0x2A1DF, [ 1813] = 0x9D7E, [ 1814] = 0x9D83, [ 1815] = 0xE524,
+-  [ 1816] = 0x9E0E, [ 1817] = 0x6888, [ 1852] = 0x9DC4, [ 1853] = 0xE528,
+-  [ 1854] = 0x2A193, [ 1855] = 0x2A220, [ 1856] = 0x2193B, [ 1857] = 0x2A233,
+-  [ 1858] = 0x9D39, [ 1859] = 0xE52E, [ 1860] = 0xE52F, [ 1861] = 0x9E90,
+-  [ 1862] = 0x9E95, [ 1863] = 0x9E9E, [ 1864] = 0x9EA2, [ 1865] = 0x4D34,
+-  [ 1866] = 0x9EAA, [ 1867] = 0x9EAF, [ 1868] = 0x24364, [ 1869] = 0x9EC1,
+-  [ 1870] = 0x3B60, [ 1871] = 0x39E5, [ 1872] = 0x3D1D, [ 1873] = 0x4F32,
+-  [ 1874] = 0x37BE, [ 1875] = 0x28C2B, [ 1876] = 0x9F02, [ 1877] = 0x9F08,
+-  [ 1878] = 0x4B96, [ 1879] = 0x9424, [ 1880] = 0x26DA2, [ 1881] = 0x9F17,
+-  [ 1883] = 0x9F39, [ 1884] = 0x569F, [ 1885] = 0x568A, [ 1886] = 0x9F45,
+-  [ 1887] = 0x99B8, [ 1888] = 0x2908B, [ 1889] = 0x97F2, [ 1890] = 0x847F,
+-  [ 1891] = 0x9F62, [ 1892] = 0x9F69, [ 1893] = 0x7ADC, [ 1894] = 0x9F8E,
+-  [ 1895] = 0x7216, [ 1896] = 0x4BBE, [ 1897] = 0x24975, [ 1898] = 0x249BB,
+-  [ 1899] = 0x7177, [ 1900] = 0x249F8, [ 1901] = 0x24348, [ 1902] = 0x24A51,
+-  [ 1903] = 0x739E, [ 1904] = 0x28BDA, [ 1905] = 0x218FA, [ 1906] = 0x799F,
+-  [ 1907] = 0x2897E, [ 1908] = 0x28E36, [ 1909] = 0x9369, [ 1910] = 0x93F3,
+-  [ 1911] = 0x28A44, [ 1912] = 0x92EC, [ 1913] = 0x9381, [ 1914] = 0x93CB,
+-  [ 1915] = 0x2896C, [ 1916] = 0x244B9, [ 1917] = 0x7217, [ 1918] = 0x3EEB,
+-  [ 1919] = 0x7772, [ 1920] = 0x7A43, [ 1921] = 0x70D0, [ 1922] = 0xE56D,
+-  [ 1923] = 0x243F8, [ 1924] = 0x717E, [ 1925] = 0xE570, [ 1926] = 0x70A3,
+-  [ 1927] = 0x218BE, [ 1928] = 0x23599, [ 1929] = 0x3EC7, [ 1930] = 0x21885,
+-  [ 1931] = 0x2542F, [ 1932] = 0x217F8, [ 1933] = 0x3722, [ 1934] = 0x216FB,
+-  [ 1935] = 0xE57A, [ 1936] = 0x36E1, [ 1937] = 0x21774, [ 1938] = 0xE57D,
+-  [ 1939] = 0x25F4B, [ 1940] = 0x3723, [ 1941] = 0x216C0, [ 1942] = 0x575B,
+-  [ 1943] = 0x24A25, [ 1944] = 0x213FE, [ 1945] = 0xE584, [ 1950] = 0x213C6,
+-  [ 1951] = 0x214B6, [ 1952] = 0x8503, [ 1953] = 0x236A6, [ 1955] = 0x8455,
+-  [ 1956] = 0xE58B, [ 1957] = 0x27165, [ 1958] = 0x23E31, [ 1959] = 0x2555C,
+-  [ 1960] = 0x23EFB, [ 1961] = 0x27052, [ 1962] = 0x44F4, [ 1963] = 0x236EE,
+-  [ 1964] = 0x2999D, [ 1965] = 0x26F26, [ 1966] = 0x67F9, [ 1967] = 0x3733,
+-  [ 1968] = 0x3C15, [ 1969] = 0x3DE7, [ 1970] = 0x586C, [ 1971] = 0xE59A,
+-  [ 1972] = 0x6810, [ 1973] = 0x4057, [ 1974] = 0x2373F, [ 1975] = 0xE59E,
+-  [ 1976] = 0x2408B, [ 1977] = 0xE5A0, [ 1978] = 0x26C21, [ 1979] = 0x54CB,
+-  [ 1980] = 0x569E, [ 1981] = 0x266B1, [ 1982] = 0x5692, [ 1983] = 0xE5A6,
+-  [ 1984] = 0x20BA8, [ 1985] = 0x20E0D, [ 1986] = 0x93C6, [ 1987] = 0xE5AA,
+-  [ 1988] = 0x939C, [ 1989] = 0x4EF8, [ 1990] = 0x512B, [ 1991] = 0x3819,
+-  [ 1992] = 0x24436, [ 1993] = 0x4EBC, [ 1994] = 0x20465, [ 1995] = 0x2037F,
+-  [ 1996] = 0x4F4B, [ 1997] = 0x4F8A, [ 1998] = 0x25651, [ 1999] = 0x5A68,
+-  [ 2000] = 0x201AB, [ 2001] = 0x203CB, [ 2002] = 0x3999, [ 2003] = 0x2030A,
+-  [ 2004] = 0x20414, [ 2005] = 0x3435, [ 2006] = 0x4F29, [ 2007] = 0x202C0,
+-  [ 2008] = 0x28EB3, [ 2009] = 0x20275, [ 2010] = 0x8ADA, [ 2011] = 0xE5C2,
+-  [ 2012] = 0x4E98, [ 2047] = 0x50CD, [ 2048] = 0x510D, [ 2049] = 0x4FA2,
+-  [ 2050] = 0x4F03, [ 2051] = 0xE5C8, [ 2052] = 0x23E8A, [ 2053] = 0x4F42,
+-  [ 2054] = 0x502E, [ 2055] = 0x506C, [ 2056] = 0x5081, [ 2057] = 0x4FCC,
+-  [ 2058] = 0x4FE5, [ 2059] = 0x5058, [ 2060] = 0x50FC, [ 2065] = 0x6E76,
+-  [ 2066] = 0x23595, [ 2067] = 0xE5D8, [ 2068] = 0x23EBF, [ 2069] = 0x6D72,
+-  [ 2070] = 0x21884, [ 2071] = 0x23E89, [ 2072] = 0x51A8, [ 2073] = 0x51C3,
+-  [ 2074] = 0x205E0, [ 2075] = 0x44DD, [ 2076] = 0x204A3, [ 2077] = 0x20492,
+-  [ 2078] = 0x20491, [ 2079] = 0x8D7A, [ 2080] = 0x28A9C, [ 2081] = 0x2070E,
+-  [ 2082] = 0x5259, [ 2083] = 0x52A4, [ 2084] = 0x20873, [ 2085] = 0x52E1,
+-  [ 2087] = 0x467A, [ 2088] = 0x718C, [ 2089] = 0x2438C, [ 2090] = 0x20C20,
+-  [ 2091] = 0x249AC, [ 2092] = 0xE5F1, [ 2093] = 0x69D1, [ 2094] = 0x20E1D,
+-  [ 2096] = 0x3EDE, [ 2097] = 0x7499, [ 2098] = 0x7414, [ 2099] = 0x7456,
+-  [ 2100] = 0x7398, [ 2101] = 0x4B8E, [ 2102] = 0x24ABC, [ 2103] = 0x2408D,
+-  [ 2104] = 0x53D0, [ 2105] = 0x3584, [ 2106] = 0x720F, [ 2107] = 0x240C9,
+-  [ 2108] = 0x55B4, [ 2109] = 0x20345, [ 2110] = 0x54CD, [ 2111] = 0x20BC6,
+-  [ 2112] = 0x571D, [ 2113] = 0x925D, [ 2114] = 0x96F4, [ 2115] = 0x9366,
+-  [ 2116] = 0x57DD, [ 2117] = 0x578D, [ 2118] = 0x577F, [ 2119] = 0x363E,
+-  [ 2120] = 0x58CB, [ 2121] = 0x5A99, [ 2122] = 0x28A46, [ 2123] = 0x216FA,
+-  [ 2124] = 0x2176F, [ 2125] = 0x21710, [ 2126] = 0x5A2C, [ 2127] = 0x59B8,
+-  [ 2128] = 0x928F, [ 2129] = 0x5A7E, [ 2130] = 0x5ACF, [ 2131] = 0x5A12,
+-  [ 2132] = 0xE619, [ 2133] = 0x219F3, [ 2134] = 0x21861, [ 2135] = 0xE61C,
+-  [ 2136] = 0x36F5, [ 2137] = 0x6D05, [ 2138] = 0x7443, [ 2139] = 0x5A21,
+-  [ 2140] = 0x25E83, [ 2145] = 0x5A81, [ 2146] = 0x28BD7, [ 2147] = 0x20413,
+-  [ 2148] = 0x93E0, [ 2149] = 0x748C, [ 2150] = 0x21303, [ 2151] = 0x7105,
+-  [ 2152] = 0x4972, [ 2153] = 0x9408, [ 2154] = 0x289FB, [ 2155] = 0x93BD,
+-  [ 2156] = 0x37A0, [ 2157] = 0x5C1E, [ 2158] = 0x5C9E, [ 2159] = 0x5E5E,
+-  [ 2160] = 0x5E48, [ 2161] = 0x21996, [ 2162] = 0x2197C, [ 2163] = 0x23AEE,
+-  [ 2164] = 0x5ECD, [ 2165] = 0x5B4F, [ 2166] = 0x21903, [ 2167] = 0x21904,
+-  [ 2168] = 0x3701, [ 2169] = 0x218A0, [ 2170] = 0x36DD, [ 2171] = 0x216FE,
+-  [ 2172] = 0x36D3, [ 2173] = 0x812A, [ 2174] = 0x28A47, [ 2175] = 0x21DBA,
+-  [ 2176] = 0x23472, [ 2177] = 0x289A8, [ 2178] = 0x5F0C, [ 2179] = 0x5F0E,
+-  [ 2180] = 0x21927, [ 2181] = 0xE646, [ 2182] = 0x5A6B, [ 2183] = 0x2173B,
+-  [ 2184] = 0x5B44, [ 2185] = 0x8614, [ 2186] = 0x275FD, [ 2187] = 0x8860,
+-  [ 2188] = 0x607E, [ 2189] = 0x22860, [ 2190] = 0x2262B, [ 2191] = 0x5FDB,
+-  [ 2192] = 0x3EB8, [ 2193] = 0x225AF, [ 2194] = 0x225BE, [ 2195] = 0xE654,
+-  [ 2196] = 0x26F73, [ 2197] = 0x61C0, [ 2198] = 0x2003E, [ 2199] = 0x20046,
+-  [ 2200] = 0x2261B, [ 2201] = 0x6199, [ 2202] = 0x6198, [ 2203] = 0x6075,
+-  [ 2204] = 0x22C9B, [ 2205] = 0x22D07, [ 2206] = 0x246D4, [ 2207] = 0xE660,
+-  [ 2242] = 0x6471, [ 2243] = 0x24665, [ 2244] = 0x22B6A, [ 2245] = 0x3A29,
+-  [ 2246] = 0x22B22, [ 2247] = 0x23450, [ 2248] = 0x298EA, [ 2249] = 0x22E78,
+-  [ 2250] = 0x6337, [ 2251] = 0xE66A, [ 2252] = 0x64B6, [ 2253] = 0x6331,
+-  [ 2254] = 0x63D1, [ 2255] = 0x249E3, [ 2256] = 0x22D67, [ 2257] = 0x62A4,
+-  [ 2258] = 0x22CA1, [ 2259] = 0x643B, [ 2260] = 0x656B, [ 2261] = 0x6972,
+-  [ 2262] = 0x3BF4, [ 2263] = 0x2308E, [ 2264] = 0x232AD, [ 2265] = 0x24989,
+-  [ 2266] = 0x232AB, [ 2267] = 0x550D, [ 2268] = 0x232E0, [ 2269] = 0x218D9,
+-  [ 2270] = 0xE67D, [ 2271] = 0x66CE, [ 2272] = 0x23289, [ 2273] = 0xE680,
+-  [ 2274] = 0x3AE0, [ 2275] = 0x4190, [ 2276] = 0x25584, [ 2277] = 0x28B22,
+-  [ 2278] = 0x2558F, [ 2279] = 0x216FC, [ 2280] = 0x2555B, [ 2281] = 0x25425,
+-  [ 2282] = 0x78EE, [ 2283] = 0x23103, [ 2284] = 0x2182A, [ 2285] = 0x23234,
+-  [ 2286] = 0x3464, [ 2287] = 0xE68E, [ 2288] = 0x23182, [ 2289] = 0x242C9,
+-  [ 2290] = 0x668E, [ 2291] = 0x26D24, [ 2292] = 0x666B, [ 2293] = 0x4B93,
+-  [ 2294] = 0x6630, [ 2295] = 0x27870, [ 2296] = 0xE697, [ 2297] = 0x6663,
+-  [ 2298] = 0x232D2, [ 2299] = 0x232E1, [ 2300] = 0x661E, [ 2301] = 0x25872,
+-  [ 2302] = 0x38D1, [ 2303] = 0xE69E, [ 2304] = 0x237BC, [ 2305] = 0x3B99,
+-  [ 2306] = 0x237A2, [ 2307] = 0x233FE, [ 2308] = 0x74D0, [ 2309] = 0x3B96,
+-  [ 2310] = 0x678F, [ 2311] = 0x2462A, [ 2312] = 0x68B6, [ 2313] = 0x681E,
+-  [ 2314] = 0x3BC4, [ 2315] = 0x6ABE, [ 2316] = 0x3863, [ 2317] = 0x237D5,
+-  [ 2318] = 0x24487, [ 2319] = 0x6A33, [ 2320] = 0x6A52, [ 2321] = 0x6AC9,
+-  [ 2322] = 0x6B05, [ 2323] = 0x21912, [ 2324] = 0x6511, [ 2325] = 0x6898,
+-  [ 2326] = 0x6A4C, [ 2327] = 0x3BD7, [ 2328] = 0x6A7A, [ 2329] = 0x6B57,
+-  [ 2330] = 0x23FC0, [ 2331] = 0x23C9A, [ 2332] = 0x93A0, [ 2333] = 0x92F2,
+-  [ 2334] = 0x28BEA, [ 2335] = 0x28ACB, [ 2340] = 0x9289, [ 2341] = 0xE6C0,
+-  [ 2342] = 0x289DC, [ 2343] = 0x9467, [ 2344] = 0x6DA5, [ 2345] = 0x6F0B,
+-  [ 2346] = 0xE6C5, [ 2348] = 0x23F7F, [ 2349] = 0x3D8F, [ 2350] = 0x6E04,
+-  [ 2351] = 0x2403C, [ 2352] = 0x5A3D, [ 2353] = 0x6E0A, [ 2354] = 0x5847,
+-  [ 2355] = 0x6D24, [ 2356] = 0x7842, [ 2357] = 0x713B, [ 2358] = 0x2431A,
+-  [ 2359] = 0x24276, [ 2360] = 0x70F1, [ 2361] = 0x7250, [ 2362] = 0x7287,
+-  [ 2363] = 0x7294, [ 2364] = 0x2478F, [ 2365] = 0x24725, [ 2366] = 0x5179,
+-  [ 2367] = 0x24AA4, [ 2368] = 0x205EB, [ 2369] = 0x747A, [ 2370] = 0x23EF8,
+-  [ 2371] = 0xE6DE, [ 2372] = 0xE6DF, [ 2373] = 0x24917, [ 2374] = 0x25FE1,
+-  [ 2375] = 0x3F06, [ 2376] = 0x3EB1, [ 2377] = 0x24ADF, [ 2378] = 0x28C23,
+-  [ 2379] = 0x23F35, [ 2380] = 0x60A7, [ 2381] = 0x3EF3, [ 2382] = 0x74CC,
+-  [ 2383] = 0x743C, [ 2384] = 0x9387, [ 2385] = 0x7437, [ 2386] = 0x449F,
+-  [ 2387] = 0x26DEA, [ 2388] = 0x4551, [ 2389] = 0x7583, [ 2390] = 0x3F63,
+-  [ 2391] = 0x24CD9, [ 2392] = 0x24D06, [ 2393] = 0x3F58, [ 2394] = 0x7555,
+-  [ 2395] = 0x7673, [ 2396] = 0x2A5C6, [ 2397] = 0x3B19, [ 2398] = 0x7468,
+-  [ 2399] = 0x28ACC, [ 2400] = 0x249AB, [ 2401] = 0x2498E, [ 2402] = 0x3AFB,
+-  [ 2437] = 0x3DCD, [ 2438] = 0x24A4E, [ 2439] = 0x3EFF, [ 2440] = 0xE701,
+-  [ 2441] = 0x248F3, [ 2442] = 0x91FA, [ 2443] = 0x5732, [ 2444] = 0x9342,
+-  [ 2445] = 0x28AE3, [ 2446] = 0x21864, [ 2447] = 0x50DF, [ 2448] = 0x25221,
+-  [ 2449] = 0x251E7, [ 2450] = 0x7778, [ 2451] = 0x23232, [ 2452] = 0x770E,
+-  [ 2453] = 0x770F, [ 2454] = 0x777B, [ 2455] = 0x24697, [ 2456] = 0x23781,
+-  [ 2457] = 0x3A5E, [ 2458] = 0xE713, [ 2459] = 0x7438, [ 2460] = 0x749B,
+-  [ 2461] = 0x3EBF, [ 2462] = 0x24ABA, [ 2463] = 0x24AC7, [ 2464] = 0x40C8,
+-  [ 2465] = 0x24A96, [ 2466] = 0x261AE, [ 2467] = 0x9307, [ 2468] = 0x25581,
+-  [ 2469] = 0x781E, [ 2470] = 0x788D, [ 2471] = 0x7888, [ 2472] = 0x78D2,
+-  [ 2473] = 0x73D0, [ 2474] = 0x7959, [ 2475] = 0x27741, [ 2476] = 0xE725,
+-  [ 2477] = 0x410E, [ 2479] = 0x8496, [ 2480] = 0x79A5, [ 2481] = 0x6A2D,
+-  [ 2482] = 0x23EFA, [ 2483] = 0x7A3A, [ 2484] = 0x79F4, [ 2485] = 0x416E,
+-  [ 2486] = 0x216E6, [ 2487] = 0x4132, [ 2488] = 0x9235, [ 2489] = 0x79F1,
+-  [ 2490] = 0x20D4C, [ 2491] = 0x2498C, [ 2492] = 0x20299, [ 2493] = 0x23DBA,
+-  [ 2494] = 0x2176E, [ 2495] = 0x3597, [ 2496] = 0x556B, [ 2497] = 0x3570,
+-  [ 2498] = 0x36AA, [ 2499] = 0x201D4, [ 2500] = 0xE73D, [ 2501] = 0x7AE2,
+-  [ 2502] = 0x5A59, [ 2503] = 0x226F5, [ 2504] = 0xE741, [ 2505] = 0x25A9C,
+-  [ 2506] = 0x5A0D, [ 2507] = 0x2025B, [ 2508] = 0x78F0, [ 2509] = 0x5A2A,
+-  [ 2510] = 0x25BC6, [ 2511] = 0x7AFE, [ 2512] = 0x41F9, [ 2513] = 0x7C5D,
+-  [ 2514] = 0x7C6D, [ 2515] = 0x4211, [ 2516] = 0x25BB3, [ 2517] = 0x25EBC,
+-  [ 2518] = 0x25EA6, [ 2519] = 0x7CCD, [ 2520] = 0x249F9, [ 2521] = 0xE752,
+-  [ 2522] = 0x7C8E, [ 2523] = 0x7C7C, [ 2524] = 0x7CAE, [ 2525] = 0x6AB2,
+-  [ 2526] = 0x7DDC, [ 2527] = 0x7E07, [ 2528] = 0x7DD3, [ 2529] = 0x7F4E,
+-  [ 2530] = 0x26261, [ 2535] = 0x2615C, [ 2536] = 0xE75D, [ 2537] = 0x7D97,
+-  [ 2538] = 0x25E82, [ 2539] = 0x426A, [ 2540] = 0xE761, [ 2541] = 0x20916,
+-  [ 2542] = 0x67D6, [ 2543] = 0x2004E, [ 2544] = 0x235CF, [ 2545] = 0x57C4,
+-  [ 2546] = 0x26412, [ 2547] = 0xE768, [ 2548] = 0x24962, [ 2549] = 0x7FDD,
+-  [ 2550] = 0x7B27, [ 2551] = 0x2082C, [ 2552] = 0x25AE9, [ 2553] = 0x25D43,
+-  [ 2554] = 0x7B0C, [ 2555] = 0x25E0E, [ 2556] = 0x99E6, [ 2557] = 0x8645,
+-  [ 2558] = 0x9A63, [ 2559] = 0x6A1C, [ 2560] = 0xE775, [ 2561] = 0x39E2,
+-  [ 2562] = 0x249F7, [ 2563] = 0x265AD, [ 2564] = 0x9A1F, [ 2565] = 0xE77A,
+-  [ 2566] = 0x8480, [ 2567] = 0x27127, [ 2568] = 0xE77D, [ 2569] = 0x44EA,
+-  [ 2570] = 0x8137, [ 2571] = 0x4402, [ 2572] = 0x80C6, [ 2573] = 0x8109,
+-  [ 2574] = 0x8142, [ 2575] = 0x267B4, [ 2576] = 0x98C3, [ 2577] = 0x26A42,
+-  [ 2578] = 0x8262, [ 2579] = 0x8265, [ 2580] = 0x26A51, [ 2581] = 0x8453,
+-  [ 2582] = 0x26DA7, [ 2583] = 0x8610, [ 2584] = 0x2721B, [ 2585] = 0x5A86,
+-  [ 2586] = 0x417F, [ 2587] = 0xE790, [ 2588] = 0x5B2B, [ 2589] = 0x218A1,
+-  [ 2590] = 0x5AE4, [ 2591] = 0x218D8, [ 2592] = 0x86A0, [ 2593] = 0x8728,
+-  [ 2594] = 0xE797, [ 2595] = 0x882D, [ 2596] = 0x27422, [ 2597] = 0x5A02,
+-  [ 2632] = 0x886E, [ 2633] = 0x4F45, [ 2634] = 0x8887, [ 2635] = 0x88BF,
+-  [ 2636] = 0x88E6, [ 2637] = 0x8965, [ 2638] = 0x894D, [ 2639] = 0x25683,
+-  [ 2640] = 0x8954, [ 2641] = 0x27785, [ 2642] = 0x27784, [ 2643] = 0xE7A6,
+-  [ 2644] = 0x28BD9, [ 2645] = 0x28B9C, [ 2646] = 0x289F9, [ 2647] = 0x3EAD,
+-  [ 2648] = 0x84A3, [ 2649] = 0x46F5, [ 2650] = 0x46CF, [ 2651] = 0x37F2,
+-  [ 2652] = 0x8A3D, [ 2653] = 0x8A1C, [ 2654] = 0x29448, [ 2655] = 0x5F4D,
+-  [ 2656] = 0x922B, [ 2657] = 0xE7B4, [ 2658] = 0x65D4, [ 2659] = 0x7129,
+-  [ 2660] = 0x70C4, [ 2661] = 0x21845, [ 2662] = 0x9D6D, [ 2663] = 0x8C9F,
+-  [ 2664] = 0x8CE9, [ 2665] = 0x27DDC, [ 2666] = 0x599A, [ 2667] = 0x77C3,
+-  [ 2668] = 0x59F0, [ 2669] = 0x436E, [ 2670] = 0x36D4, [ 2671] = 0x8E2A,
+-  [ 2672] = 0x8EA7, [ 2673] = 0x24C09, [ 2674] = 0x8F30, [ 2675] = 0x8F4A,
+-  [ 2676] = 0x42F4, [ 2677] = 0x6C58, [ 2678] = 0x6FBB, [ 2679] = 0x22321,
+-  [ 2680] = 0x489B, [ 2681] = 0x6F79, [ 2682] = 0x6E8B, [ 2683] = 0x217DA,
+-  [ 2684] = 0x9BE9, [ 2685] = 0x36B5, [ 2686] = 0x2492F, [ 2687] = 0x90BB,
+-  [ 2689] = 0x5571, [ 2690] = 0x4906, [ 2691] = 0x91BB, [ 2692] = 0x9404,
+-  [ 2693] = 0x28A4B, [ 2694] = 0x4062, [ 2695] = 0xE7DA, [ 2696] = 0x9427,
+-  [ 2697] = 0x28C1D, [ 2698] = 0xE7DD, [ 2699] = 0x84E5, [ 2700] = 0x8A2B,
+-  [ 2701] = 0x9599, [ 2702] = 0x95A7, [ 2703] = 0x9597, [ 2704] = 0x9596,
+-  [ 2705] = 0x28D34, [ 2706] = 0x7445, [ 2707] = 0x3EC2, [ 2708] = 0x248FF,
+-  [ 2709] = 0xE7E8, [ 2710] = 0xE7E9, [ 2711] = 0x3EE7, [ 2712] = 0x23225,
+-  [ 2713] = 0x968F, [ 2714] = 0xE7ED, [ 2715] = 0x28E66, [ 2716] = 0x28E65,
+-  [ 2717] = 0x3ECC, [ 2718] = 0xE7F1, [ 2719] = 0x24A78, [ 2720] = 0x23FEE,
+-  [ 2721] = 0x7412, [ 2722] = 0x746B, [ 2723] = 0x3EFC, [ 2724] = 0x9741,
+-  [ 2725] = 0x290B0, [ 2730] = 0x6847, [ 2731] = 0x4A1D, [ 2732] = 0xE7FB,
+-  [ 2733] = 0xE7FC, [ 2735] = 0x9368, [ 2736] = 0x28989, [ 2737] = 0xE800,
+-  [ 2738] = 0x28B2F, [ 2739] = 0x263BE, [ 2740] = 0x92BA, [ 2741] = 0x5B11,
+-  [ 2742] = 0x8B69, [ 2743] = 0x493C, [ 2744] = 0x73F9, [ 2745] = 0x2421B,
+-  [ 2746] = 0x979B, [ 2747] = 0x9771, [ 2748] = 0x9938, [ 2749] = 0xE80C,
+-  [ 2750] = 0x5DC1, [ 2751] = 0x28BC5, [ 2752] = 0x24AB2, [ 2753] = 0x981F,
+-  [ 2754] = 0x294DA, [ 2755] = 0x92F6, [ 2756] = 0xE813, [ 2757] = 0x91E5,
+-  [ 2758] = 0x44C0, [ 2759] = 0x28B50, [ 2760] = 0x24A67, [ 2761] = 0x28B64,
+-  [ 2762] = 0x98DC, [ 2763] = 0x28A45, [ 2764] = 0x3F00, [ 2765] = 0x922A,
+-  [ 2766] = 0x4925, [ 2767] = 0x8414, [ 2768] = 0x993B, [ 2769] = 0x994D,
+-  [ 2770] = 0xE821, [ 2771] = 0x3DFD, [ 2772] = 0x999B, [ 2773] = 0x4B6F,
+-  [ 2774] = 0x99AA, [ 2775] = 0x9A5C, [ 2776] = 0x28B65, [ 2777] = 0xE828,
+-  [ 2778] = 0x6A8F, [ 2779] = 0x9A21, [ 2780] = 0x5AFE, [ 2781] = 0x9A2F,
+-  [ 2782] = 0xE82D, [ 2783] = 0x4B90, [ 2784] = 0xE82F, [ 2785] = 0x99BC,
+-  [ 2786] = 0x4BBD, [ 2787] = 0x4B97, [ 2788] = 0x937D, [ 2789] = 0x5872,
+-  [ 2790] = 0x21302, [ 2791] = 0x5822, [ 2792] = 0x249B8, [ 2827] = 0x214E8,
+-  [ 2828] = 0x7844, [ 2829] = 0x2271F, [ 2830] = 0x23DB8, [ 2831] = 0x68C5,
+-  [ 2832] = 0x3D7D, [ 2833] = 0x9458, [ 2834] = 0x3927, [ 2835] = 0x6150,
+-  [ 2836] = 0x22781, [ 2837] = 0x2296B, [ 2838] = 0x6107, [ 2839] = 0x9C4F,
+-  [ 2840] = 0x9C53, [ 2841] = 0x9C7B, [ 2842] = 0x9C35, [ 2843] = 0x9C10,
+-  [ 2844] = 0x9B7F, [ 2845] = 0x9BCF, [ 2846] = 0x29E2D, [ 2847] = 0x9B9F,
+-  [ 2848] = 0xE84D, [ 2849] = 0x2A0FE, [ 2850] = 0x9D21, [ 2851] = 0x4CAE,
+-  [ 2852] = 0x24104, [ 2853] = 0x9E18, [ 2854] = 0x4CB0, [ 2855] = 0x9D0C,
+-  [ 2856] = 0xE855, [ 2857] = 0xE856, [ 2858] = 0x2A0F3, [ 2859] = 0x2992F,
+-  [ 2860] = 0x9DA5, [ 2861] = 0x84BD, [ 2862] = 0xE85B, [ 2863] = 0x26FDF,
+-  [ 2864] = 0xE85D, [ 2865] = 0x85FC, [ 2866] = 0x4533, [ 2867] = 0x26DA4,
+-  [ 2868] = 0x26E84, [ 2869] = 0x26DF0, [ 2870] = 0x8420, [ 2871] = 0x85EE,
+-  [ 2872] = 0xE865, [ 2873] = 0x237D7, [ 2874] = 0x26064, [ 2875] = 0x79E2,
+-  [ 2876] = 0x2359C, [ 2877] = 0x23640, [ 2878] = 0x492D, [ 2879] = 0x249DE,
+-  [ 2880] = 0x3D62, [ 2881] = 0x93DB, [ 2882] = 0x92BE, [ 2883] = 0x9348,
+-  [ 2884] = 0x202BF, [ 2885] = 0x78B9, [ 2886] = 0x9277, [ 2887] = 0x944D,
+-  [ 2888] = 0x4FE4, [ 2889] = 0x3440, [ 2890] = 0x9064, [ 2891] = 0x2555D,
+-  [ 2892] = 0x783D, [ 2893] = 0x7854, [ 2894] = 0x78B6, [ 2895] = 0x784B,
+-  [ 2896] = 0x21757, [ 2897] = 0x231C9, [ 2898] = 0x24941, [ 2899] = 0x369A,
+-  [ 2900] = 0x4F72, [ 2901] = 0x6FDA, [ 2902] = 0x6FD9, [ 2904] = 0x701E,
+-  [ 2905] = 0x5414, [ 2906] = 0xE887, [ 2907] = 0x57BB, [ 2908] = 0x58F3,
+-  [ 2909] = 0x578A, [ 2910] = 0x9D16, [ 2911] = 0x57D7, [ 2912] = 0x7134,
+-  [ 2913] = 0x34AF, [ 2914] = 0xE88F, [ 2915] = 0x71EB, [ 2916] = 0xE891,
+-  [ 2917] = 0x24F97, [ 2919] = 0x217B5, [ 2920] = 0x28A49, [ 2925] = 0x610C,
+-  [ 2926] = 0x5ACE, [ 2927] = 0x5A0B, [ 2928] = 0x42BC, [ 2929] = 0x24488,
+-  [ 2930] = 0x372C, [ 2931] = 0x4B7B, [ 2932] = 0x289FC, [ 2933] = 0x93BB,
+-  [ 2934] = 0x93B8, [ 2935] = 0x218D6, [ 2936] = 0xE8A1, [ 2937] = 0x8472,
+-  [ 2938] = 0x26CC0, [ 2939] = 0xE8A4, [ 2940] = 0x242FA, [ 2941] = 0x22C26,
+-  [ 2942] = 0x243C1, [ 2943] = 0x5994, [ 2944] = 0x23DB7, [ 2945] = 0x26741,
+-  [ 2946] = 0x7DA8, [ 2947] = 0x2615B, [ 2948] = 0x260A4, [ 2949] = 0x249B9,
+-  [ 2950] = 0x2498B, [ 2951] = 0x289FA, [ 2952] = 0x92E5, [ 2953] = 0x73E2,
+-  [ 2954] = 0x3EE9, [ 2955] = 0x74B4, [ 2956] = 0x28B63, [ 2957] = 0x2189F,
+-  [ 2958] = 0x3EE1, [ 2959] = 0x24AB3, [ 2960] = 0x6AD8, [ 2961] = 0x73F3,
+-  [ 2962] = 0x73FB, [ 2963] = 0x3ED6, [ 2964] = 0x24A3E, [ 2965] = 0x24A94,
+-  [ 2966] = 0x217D9, [ 2967] = 0x24A66, [ 2968] = 0x203A7, [ 2969] = 0xE8C2,
+-  [ 2970] = 0xE8C3, [ 2971] = 0x7448, [ 2972] = 0x24916, [ 2973] = 0x70A5,
+-  [ 2974] = 0x24976, [ 2975] = 0x9284, [ 2976] = 0x73E6, [ 2977] = 0x935F,
+-  [ 2978] = 0x204FE, [ 2979] = 0x9331, [ 2980] = 0xE8CD, [ 2981] = 0x28A16,
+-  [ 2982] = 0x9386, [ 2983] = 0x28BE7, [ 2984] = 0x255D5, [ 2985] = 0x4935,
+-  [ 2986] = 0x28A82, [ 2987] = 0x716B, [ 3022] = 0xE8D5, [ 3023] = 0xE8D6,
+-  [ 3024] = 0x56A4, [ 3025] = 0x2061A, [ 3026] = 0xE8D9, [ 3027] = 0xE8DA,
+-  [ 3028] = 0x5502, [ 3029] = 0x79C4, [ 3030] = 0x217FA, [ 3031] = 0x7DFE,
+-  [ 3032] = 0x216C2, [ 3033] = 0x24A50, [ 3034] = 0xE8E1, [ 3035] = 0x452E,
+-  [ 3036] = 0x9401, [ 3037] = 0x370A, [ 3038] = 0xE8E5, [ 3039] = 0x249AD,
+-  [ 3040] = 0x59B0, [ 3041] = 0x218BF, [ 3042] = 0x21883, [ 3043] = 0x27484,
+-  [ 3044] = 0x5AA1, [ 3045] = 0x36E2, [ 3046] = 0x23D5B, [ 3047] = 0x36B0,
+-  [ 3048] = 0x925F, [ 3049] = 0x5A79, [ 3050] = 0x28A81, [ 3051] = 0x21862,
+-  [ 3052] = 0x9374, [ 3053] = 0x3CCD, [ 3054] = 0x20AB4, [ 3055] = 0x4A96,
+-  [ 3056] = 0x398A, [ 3057] = 0x50F4, [ 3058] = 0x3D69, [ 3059] = 0x3D4C,
+-  [ 3060] = 0x2139C, [ 3061] = 0x7175, [ 3062] = 0x42FB, [ 3063] = 0xE8FE,
+-  [ 3064] = 0x6E0F, [ 3065] = 0x290E4, [ 3066] = 0x44EB, [ 3067] = 0x6D57,
+-  [ 3068] = 0x27E4F, [ 3069] = 0x7067, [ 3070] = 0x6CAF, [ 3071] = 0x3CD6,
+-  [ 3072] = 0x23FED, [ 3073] = 0x23E2D, [ 3074] = 0x6E02, [ 3075] = 0x6F0C,
+-  [ 3076] = 0x3D6F, [ 3077] = 0x203F5, [ 3078] = 0x7551, [ 3079] = 0x36BC,
+-  [ 3080] = 0x34C8, [ 3081] = 0x4680, [ 3082] = 0x3EDA, [ 3083] = 0x4871,
+-  [ 3084] = 0x59C4, [ 3085] = 0x926E, [ 3086] = 0x493E, [ 3087] = 0x8F41,
+-  [ 3088] = 0xE917, [ 3089] = 0xE918, [ 3090] = 0x5812, [ 3091] = 0x57C8,
+-  [ 3092] = 0x36D6, [ 3093] = 0x21452, [ 3094] = 0x70FE, [ 3095] = 0x24362,
+-  [ 3096] = 0xE91F, [ 3097] = 0x22FE3, [ 3098] = 0x212B0, [ 3099] = 0x223BD,
+-  [ 3100] = 0x68B9, [ 3101] = 0x6967, [ 3102] = 0xE925, [ 3103] = 0x234E5,
+-  [ 3104] = 0x27BF4, [ 3105] = 0x236DF, [ 3106] = 0x28A83, [ 3107] = 0x237D6,
+-  [ 3108] = 0xE92B, [ 3109] = 0x24C9F, [ 3110] = 0x6A1A, [ 3111] = 0x236AD,
+-  [ 3112] = 0x26CB7, [ 3113] = 0x843E, [ 3114] = 0x44DF, [ 3115] = 0x44CE,
+-  [ 3120] = 0x26D26, [ 3121] = 0xE934, [ 3122] = 0x26C82, [ 3123] = 0x26FDE,
+-  [ 3124] = 0x6F17, [ 3125] = 0x27109, [ 3126] = 0x833D, [ 3127] = 0x2173A,
+-  [ 3128] = 0x83ED, [ 3129] = 0x26C80, [ 3130] = 0x27053, [ 3131] = 0x217DB,
+-  [ 3132] = 0x5989, [ 3133] = 0x5A82, [ 3134] = 0x217B3, [ 3135] = 0x5A61,
+-  [ 3136] = 0x5A71, [ 3137] = 0x21905, [ 3138] = 0x241FC, [ 3139] = 0x372D,
+-  [ 3140] = 0x59EF, [ 3141] = 0x2173C, [ 3142] = 0x36C7, [ 3143] = 0x718E,
+-  [ 3144] = 0x9390, [ 3145] = 0x669A, [ 3146] = 0x242A5, [ 3147] = 0x5A6E,
+-  [ 3148] = 0x5A2B, [ 3149] = 0xE950, [ 3150] = 0x6A2B, [ 3151] = 0x23EF9,
+-  [ 3152] = 0x27736, [ 3153] = 0x2445B, [ 3154] = 0x242CA, [ 3155] = 0x711D,
+-  [ 3156] = 0x24259, [ 3157] = 0x289E1, [ 3158] = 0x4FB0, [ 3159] = 0x26D28,
+-  [ 3160] = 0x5CC2, [ 3161] = 0x244CE, [ 3162] = 0x27E4D, [ 3163] = 0x243BD,
+-  [ 3164] = 0x6A0C, [ 3165] = 0x24256, [ 3166] = 0x21304, [ 3167] = 0x70A6,
+-  [ 3168] = 0x7133, [ 3169] = 0x243E9, [ 3170] = 0x3DA5, [ 3171] = 0x6CDF,
+-  [ 3172] = 0xE967, [ 3173] = 0x24A4F, [ 3174] = 0x7E65, [ 3175] = 0x59EB,
+-  [ 3176] = 0x5D2F, [ 3177] = 0x3DF3, [ 3178] = 0x5F5C, [ 3179] = 0xE96E,
+-  [ 3180] = 0xE96F, [ 3181] = 0x7DA4, [ 3182] = 0x8426, [ 3217] = 0x5485,
+-  [ 3218] = 0xE973, [ 3219] = 0x23300, [ 3220] = 0x20214, [ 3221] = 0x577E,
+-  [ 3222] = 0xE977, [ 3223] = 0x20619, [ 3224] = 0x3FE5, [ 3225] = 0xE97A,
+-  [ 3226] = 0xE97B, [ 3227] = 0x7003, [ 3228] = 0xE97D, [ 3229] = 0x5D70,
+-  [ 3230] = 0x738F, [ 3231] = 0x7CD3, [ 3232] = 0x28A59, [ 3233] = 0xE982,
+-  [ 3234] = 0x4FC8, [ 3235] = 0x7FE7, [ 3236] = 0x72CD, [ 3237] = 0x7310,
+-  [ 3238] = 0x27AF4, [ 3239] = 0x7338, [ 3240] = 0x7339, [ 3241] = 0x256F6,
+-  [ 3242] = 0x7341, [ 3243] = 0x7348, [ 3244] = 0x3EA9, [ 3245] = 0x27B18,
+-  [ 3246] = 0x906C, [ 3247] = 0x71F5, [ 3248] = 0xE991, [ 3249] = 0x73E1,
+-  [ 3250] = 0x81F6, [ 3251] = 0x3ECA, [ 3252] = 0x770C, [ 3253] = 0x3ED1,
+-  [ 3254] = 0x6CA2, [ 3255] = 0x56FD, [ 3256] = 0x7419, [ 3257] = 0x741E,
+-  [ 3258] = 0x741F, [ 3259] = 0x3EE2, [ 3260] = 0x3EF0, [ 3261] = 0x3EF4,
+-  [ 3262] = 0x3EFA, [ 3263] = 0x74D3, [ 3264] = 0x3F0E, [ 3265] = 0x3F53,
+-  [ 3266] = 0x7542, [ 3267] = 0x756D, [ 3268] = 0x7572, [ 3269] = 0x758D,
+-  [ 3270] = 0x3F7C, [ 3271] = 0x75C8, [ 3272] = 0x75DC, [ 3273] = 0x3FC0,
+-  [ 3274] = 0x764D, [ 3275] = 0x3FD7, [ 3276] = 0x7674, [ 3277] = 0x3FDC,
+-  [ 3278] = 0x767A, [ 3279] = 0x24F5C, [ 3280] = 0x7188, [ 3281] = 0x5623,
+-  [ 3282] = 0x8980, [ 3283] = 0x5869, [ 3284] = 0x401D, [ 3285] = 0x7743,
+-  [ 3286] = 0x4039, [ 3287] = 0x6761, [ 3288] = 0x4045, [ 3289] = 0x35DB,
+-  [ 3290] = 0x7798, [ 3291] = 0x406A, [ 3292] = 0x406F, [ 3293] = 0x5C5E,
+-  [ 3294] = 0x77BE, [ 3295] = 0x77CB, [ 3296] = 0x58F2, [ 3297] = 0x7818,
+-  [ 3298] = 0x70B9, [ 3299] = 0x781C, [ 3300] = 0x40A8, [ 3301] = 0x7839,
+-  [ 3302] = 0x7847, [ 3303] = 0x7851, [ 3304] = 0x7866, [ 3305] = 0x8448,
+-  [ 3306] = 0xE9CB, [ 3307] = 0x7933, [ 3308] = 0x6803, [ 3309] = 0x7932,
+-  [ 3310] = 0x4103, [ 3315] = 0x4109, [ 3316] = 0x7991, [ 3317] = 0x7999,
+-  [ 3318] = 0x8FBB, [ 3319] = 0x7A06, [ 3320] = 0x8FBC, [ 3321] = 0x4167,
+-  [ 3322] = 0x7A91, [ 3323] = 0x41B2, [ 3324] = 0x7ABC, [ 3325] = 0x8279,
+-  [ 3326] = 0x41C4, [ 3327] = 0x7ACF, [ 3328] = 0x7ADB, [ 3329] = 0x41CF,
+-  [ 3330] = 0x4E21, [ 3331] = 0x7B62, [ 3332] = 0x7B6C, [ 3333] = 0x7B7B,
+-  [ 3334] = 0x7C12, [ 3335] = 0x7C1B, [ 3336] = 0x4260, [ 3337] = 0x427A,
+-  [ 3338] = 0x7C7B, [ 3339] = 0x7C9C, [ 3340] = 0x428C, [ 3341] = 0x7CB8,
+-  [ 3342] = 0x4294, [ 3343] = 0x7CED, [ 3344] = 0x8F93, [ 3345] = 0x70C0,
+-  [ 3346] = 0x20CCF, [ 3347] = 0x7DCF, [ 3348] = 0x7DD4, [ 3349] = 0x7DD0,
+-  [ 3350] = 0x7DFD, [ 3351] = 0x7FAE, [ 3352] = 0x7FB4, [ 3353] = 0x729F,
+-  [ 3354] = 0x4397, [ 3355] = 0x8020, [ 3356] = 0x8025, [ 3357] = 0x7B39,
+-  [ 3358] = 0x802E, [ 3359] = 0x8031, [ 3360] = 0x8054, [ 3361] = 0x3DCC,
+-  [ 3362] = 0x57B4, [ 3363] = 0x70A0, [ 3364] = 0x80B7, [ 3365] = 0x80E9,
+-  [ 3366] = 0x43ED, [ 3367] = 0x810C, [ 3368] = 0x732A, [ 3369] = 0x810E,
+-  [ 3370] = 0x8112, [ 3371] = 0x7560, [ 3372] = 0x8114, [ 3373] = 0x4401,
+-  [ 3374] = 0x3B39, [ 3375] = 0x8156, [ 3376] = 0x8159, [ 3377] = 0x815A,
+-  [ 3412] = 0x4413, [ 3413] = 0x583A, [ 3414] = 0x817C, [ 3415] = 0x8184,
+-  [ 3416] = 0x4425, [ 3417] = 0x8193, [ 3418] = 0x442D, [ 3419] = 0x81A5,
+-  [ 3420] = 0x57EF, [ 3421] = 0x81C1, [ 3422] = 0x81E4, [ 3423] = 0x8254,
+-  [ 3424] = 0x448F, [ 3425] = 0x82A6, [ 3426] = 0x8276, [ 3427] = 0x82CA,
+-  [ 3428] = 0x82D8, [ 3429] = 0x82FF, [ 3430] = 0x44B0, [ 3431] = 0x8357,
+-  [ 3432] = 0x9669, [ 3433] = 0x698A, [ 3434] = 0x8405, [ 3435] = 0x70F5,
+-  [ 3436] = 0x8464, [ 3437] = 0x60E3, [ 3438] = 0x8488, [ 3439] = 0x4504,
+-  [ 3440] = 0x84BE, [ 3441] = 0x84E1, [ 3442] = 0x84F8, [ 3443] = 0x8510,
+-  [ 3444] = 0x8538, [ 3445] = 0x8552, [ 3446] = 0x453B, [ 3447] = 0x856F,
+-  [ 3448] = 0x8570, [ 3449] = 0x85E0, [ 3450] = 0x4577, [ 3451] = 0x8672,
+-  [ 3452] = 0x8692, [ 3453] = 0x86B2, [ 3454] = 0x86EF, [ 3455] = 0x9645,
+-  [ 3456] = 0x878B, [ 3457] = 0x4606, [ 3458] = 0x4617, [ 3459] = 0x88AE,
+-  [ 3460] = 0x88FF, [ 3461] = 0x8924, [ 3462] = 0x8947, [ 3463] = 0x8991,
+-  [ 3464] = 0x27967, [ 3465] = 0x8A29, [ 3466] = 0x8A38, [ 3467] = 0x8A94,
+-  [ 3468] = 0x8AB4, [ 3469] = 0x8C51, [ 3470] = 0x8CD4, [ 3471] = 0x8CF2,
+-  [ 3472] = 0x8D1C, [ 3473] = 0x4798, [ 3474] = 0x585F, [ 3475] = 0x8DC3,
+-  [ 3476] = 0x47ED, [ 3477] = 0x4EEE, [ 3478] = 0x8E3A, [ 3479] = 0x55D8,
+-  [ 3480] = 0x5754, [ 3481] = 0x8E71, [ 3482] = 0x55F5, [ 3483] = 0x8EB0,
+-  [ 3484] = 0x4837, [ 3485] = 0x8ECE, [ 3486] = 0x8EE2, [ 3487] = 0x8EE4,
+-  [ 3488] = 0x8EED, [ 3489] = 0x8EF2, [ 3490] = 0x8FB7, [ 3491] = 0x8FC1,
+-  [ 3492] = 0x8FCA, [ 3493] = 0x8FCC, [ 3494] = 0x9033, [ 3495] = 0x99C4,
+-  [ 3496] = 0x48AD, [ 3497] = 0x98E0, [ 3498] = 0x9213, [ 3499] = 0x491E,
+-  [ 3500] = 0x9228, [ 3501] = 0x9258, [ 3502] = 0x926B, [ 3503] = 0x92B1,
+-  [ 3504] = 0x92AE, [ 3505] = 0x92BF, [ 3510] = 0x92E3, [ 3511] = 0x92EB,
+-  [ 3512] = 0x92F3, [ 3513] = 0x92F4, [ 3514] = 0x92FD, [ 3515] = 0x9343,
+-  [ 3516] = 0x9384, [ 3517] = 0x93AD, [ 3518] = 0x4945, [ 3519] = 0x4951,
+-  [ 3520] = 0x9EBF, [ 3521] = 0x9417, [ 3522] = 0x5301, [ 3523] = 0x941D,
+-  [ 3524] = 0x942D, [ 3525] = 0x943E, [ 3526] = 0x496A, [ 3527] = 0x9454,
+-  [ 3528] = 0x9479, [ 3529] = 0x952D, [ 3530] = 0x95A2, [ 3531] = 0x49A7,
+-  [ 3532] = 0x95F4, [ 3533] = 0x9633, [ 3534] = 0x49E5, [ 3535] = 0x67A0,
+-  [ 3536] = 0x4A24, [ 3537] = 0x9740, [ 3538] = 0x4A35, [ 3539] = 0x97B2,
+-  [ 3540] = 0x97C2, [ 3541] = 0x5654, [ 3542] = 0x4AE4, [ 3543] = 0x60E8,
+-  [ 3544] = 0x98B9, [ 3545] = 0x4B19, [ 3546] = 0x98F1, [ 3547] = 0x5844,
+-  [ 3548] = 0x990E, [ 3549] = 0x9919, [ 3550] = 0x51B4, [ 3551] = 0x991C,
+-  [ 3552] = 0x9937, [ 3553] = 0x9942, [ 3554] = 0x995D, [ 3555] = 0x9962,
+-  [ 3556] = 0x4B70, [ 3557] = 0x99C5, [ 3558] = 0x4B9D, [ 3559] = 0x9A3C,
+-  [ 3560] = 0x9B0F, [ 3561] = 0x7A83, [ 3562] = 0x9B69, [ 3563] = 0x9B81,
+-  [ 3564] = 0x9BDD, [ 3565] = 0x9BF1, [ 3566] = 0x9BF4, [ 3567] = 0x4C6D,
+-  [ 3568] = 0x9C20, [ 3569] = 0x376F, [ 3570] = 0xEAA9, [ 3571] = 0x9D49,
+-  [ 3572] = 0x9C3A, [ 3607] = 0x9EFE, [ 3608] = 0x5650, [ 3609] = 0x9D93,
+-  [ 3610] = 0x9DBD, [ 3611] = 0x9DC0, [ 3612] = 0x9DFC, [ 3613] = 0x94F6,
+-  [ 3614] = 0x8FB6, [ 3615] = 0x9E7B, [ 3616] = 0x9EAC, [ 3617] = 0x9EB1,
+-  [ 3618] = 0x9EBD, [ 3619] = 0x9EC6, [ 3620] = 0x94DC, [ 3621] = 0x9EE2,
+-  [ 3622] = 0x9EF1, [ 3623] = 0x9EF8, [ 3624] = 0x7AC8, [ 3625] = 0x9F44,
+-  [ 3626] = 0xEABF, [ 3627] = 0xEAC0, [ 3628] = 0xEAC1, [ 3629] = 0x691A,
+-  [ 3630] = 0x94C3, [ 3631] = 0x59AC, [ 3632] = 0xEAC5, [ 3633] = 0x5840,
+-  [ 3634] = 0x94C1, [ 3635] = 0x37B9, [ 3636] = 0xEAC9, [ 3637] = 0xEACA,
+-  [ 3638] = 0xEACB, [ 3639] = 0xEACC, [ 3640] = 0x5757, [ 3641] = 0x7173,
+-  [ 3642] = 0xEACF, [ 3643] = 0xEAD0, [ 3644] = 0xEAD1, [ 3645] = 0x546A,
+-  [ 3646] = 0xEAD3, [ 3647] = 0xEAD4, [ 3648] = 0x549E, [ 3649] = 0xEAD6,
+-  [ 3650] = 0xEAD7, [ 3651] = 0x20C53, [ 3652] = 0xEAD9, [ 3653] = 0xEADA,
+-  [ 3654] = 0x60E7, [ 3655] = 0xEADC, [ 3656] = 0x567A, [ 3657] = 0xEADE,
+-  [ 3658] = 0xEADF, [ 3659] = 0xEAE0, [ 3660] = 0xEAE1, [ 3661] = 0xEAE2,
+-  [ 3662] = 0xEAE3, [ 3663] = 0x6955, [ 3664] = 0x9C2F, [ 3665] = 0x87A5,
+-  [ 3666] = 0xEAE7, [ 3667] = 0x20E0E, [ 3668] = 0xEAE9, [ 3669] = 0xEAEA,
+-  [ 3670] = 0x20F2D, [ 3671] = 0xEAEC, [ 3672] = 0x5C20, [ 3673] = 0xEAEE,
+-  [ 3674] = 0x5E0B, [ 3675] = 0xEAF0, [ 3676] = 0xEAF1, [ 3677] = 0x21076,
+-  [ 3678] = 0x671E, [ 3679] = 0x2107B, [ 3680] = 0xEAF5, [ 3681] = 0xEAF6,
+-  [ 3682] = 0x3647, [ 3683] = 0xEAF8, [ 3684] = 0xEAF9, [ 3685] = 0xEAFA,
+-  [ 3686] = 0xEAFB, [ 3687] = 0x5364, [ 3688] = 0x84AD, [ 3689] = 0x212E3,
+-  [ 3690] = 0xEAFF, [ 3691] = 0xEB00, [ 3692] = 0x8B81, [ 3693] = 0xEB02,
+-  [ 3694] = 0xEB03, [ 3695] = 0xEB04, [ 3696] = 0xEB05, [ 3697] = 0x4E78,
+-  [ 3698] = 0x70BB, [ 3699] = 0xEB08, [ 3700] = 0xEB09, [ 3705] = 0xEB0A,
+-  [ 3706] = 0xEB0B, [ 3707] = 0xEB0C, [ 3708] = 0xEB0D, [ 3709] = 0xEB0E,
+-  [ 3710] = 0xEB0F, [ 3711] = 0x62C3, [ 3712] = 0x21ED5, [ 3713] = 0xEB12,
+-  [ 3714] = 0x7198, [ 3715] = 0x6855, [ 3716] = 0xEB15, [ 3717] = 0x69E9,
+-  [ 3718] = 0x36C8, [ 3719] = 0x2227C, [ 3720] = 0xEB19, [ 3721] = 0xEB1A,
+-  [ 3722] = 0xEB1B, [ 3723] = 0xEB1C, [ 3724] = 0xEB1D, [ 3725] = 0x82FD,
+-  [ 3726] = 0xEB1F, [ 3727] = 0xEB20, [ 3728] = 0x22AD5, [ 3729] = 0x89A5,
+-  [ 3730] = 0xEB23, [ 3731] = 0x8FA0, [ 3732] = 0xEB25, [ 3733] = 0x97B8,
+-  [ 3734] = 0xEB27, [ 3735] = 0x9847, [ 3736] = 0x9ABD, [ 3737] = 0xEB2A,
+-  [ 3739] = 0xEB2C, [ 3740] = 0xEB2D, [ 3741] = 0xEB2E, [ 3742] = 0x22D08,
+-  [ 3743] = 0xEB30, [ 3744] = 0xEB31, [ 3745] = 0xEB32, [ 3746] = 0xEB33,
+-  [ 3747] = 0xEB34, [ 3748] = 0xEB35, [ 3749] = 0xEB36, [ 3750] = 0xEB37,
+-  [ 3751] = 0xEB38, [ 3752] = 0xEB39, [ 3753] = 0x5FB1, [ 3754] = 0x6648,
+-  [ 3755] = 0x66BF, [ 3756] = 0xEB3D, [ 3757] = 0xEB3E, [ 3758] = 0xEB3F,
+-  [ 3760] = 0x249BA, [ 3762] = 0xEB43, [ 3763] = 0xEB44, [ 3765] = 0x20346,
+-  [ 3766] = 0x58B5, [ 3767] = 0x670E, [ 3802] = 0x6918, [ 3803] = 0xEB4A,
+-  [ 3804] = 0x27657, [ 3805] = 0x25FE2, [ 3806] = 0xEB4D, [ 3807] = 0xEB4E,
+-  [ 3808] = 0x275FE, [ 3809] = 0x2209A, [ 3810] = 0x48D0, [ 3811] = 0x4AB8,
+-  [ 3812] = 0xEB53, [ 3813] = 0x28A9A, [ 3814] = 0xEB55, [ 3815] = 0xEB56,
+-  [ 3816] = 0x2403B, [ 3817] = 0xEB58, [ 3818] = 0x24396, [ 3819] = 0xEB5A,
+-  [ 3820] = 0xEB5B, [ 3821] = 0x51D2, [ 3822] = 0x20611, [ 3823] = 0x599F,
+-  [ 3824] = 0x21EA8, [ 3825] = 0x3BBE, [ 3826] = 0x23CFF, [ 3827] = 0xEB62,
+-  [ 3828] = 0xEB63, [ 3829] = 0x5788, [ 3830] = 0xEB65, [ 3831] = 0x399B,
+-  [ 3832] = 0xEB67, [ 3833] = 0xEB68, [ 3834] = 0xEB69, [ 3835] = 0x3762,
+-  [ 3836] = 0x221C3, [ 3837] = 0x8B5E, [ 3838] = 0x28B4E, [ 3840] = 0xEB6F,
+-  [ 3841] = 0xEB70, [ 3842] = 0xEB71, [ 3843] = 0x7209, [ 3844] = 0xEB73,
+-  [ 3845] = 0x20C78, [ 3846] = 0x5965, [ 3847] = 0xEB76, [ 3848] = 0xEB77,
+-  [ 3849] = 0x20779, [ 3850] = 0x8EDA, [ 3851] = 0xEB7A, [ 3852] = 0x528F,
+-  [ 3853] = 0x573F, [ 3854] = 0x7171, [ 3855] = 0xEB7E, [ 3856] = 0xEB7F,
+-  [ 3857] = 0xEB80, [ 3858] = 0x24AA7, [ 3859] = 0x55BC, [ 3860] = 0xEB83,
+-  [ 3861] = 0x2546E, [ 3862] = 0x26B52, [ 3864] = 0x3473, [ 3865] = 0xEB88,
+-  [ 3866] = 0x27632, [ 3867] = 0xEB8A, [ 3868] = 0x4718, [ 3869] = 0xEB8C,
+-  [ 3870] = 0x25566, [ 3871] = 0x257C7, [ 3872] = 0x2493F, [ 3873] = 0xEB90,
+-  [ 3874] = 0x5066, [ 3875] = 0x34FB, [ 3876] = 0xEB93, [ 3878] = 0xEB95,
+-  [ 3879] = 0x477C, [ 3880] = 0x28948, [ 3881] = 0x25AAE, [ 3882] = 0xEB99,
+-  [ 3883] = 0x25C06, [ 3884] = 0xEB9B, [ 3885] = 0x57A1, [ 3886] = 0x7151,
+-  [ 3888] = 0xEB9F, [ 3889] = 0x27C12, [ 3890] = 0x9056, [ 3891] = 0xEBA2,
+-  [ 3892] = 0x24F9A, [ 3893] = 0x8B62, [ 3894] = 0xEBA5, [ 3895] = 0xEBA6,
+-  [ 3900] = 0x5D5B, [ 3901] = 0x26BF7, [ 3903] = 0xEBAA, [ 3904] = 0xEBAB,
+-  [ 3905] = 0x8AEA, [ 3906] = 0x249F6, [ 3907] = 0xEBAE, [ 3908] = 0x23FEF,
+-  [ 3909] = 0x26512, [ 3910] = 0x4BC0, [ 3911] = 0xEBB2, [ 3912] = 0xEBB3,
+-  [ 3913] = 0x2271B, [ 3914] = 0x9465, [ 3915] = 0x257E1, [ 3916] = 0x6195,
+-  [ 3917] = 0x5A27, [ 3918] = 0x2F8CD, [ 3920] = 0x56B9, [ 3921] = 0x24521,
+-  [ 3922] = 0xEBBD, [ 3923] = 0x4E6A, [ 3924] = 0xEBBF, [ 3925] = 0x9656,
+-  [ 3926] = 0x6D8F, [ 3927] = 0x26CBD, [ 3928] = 0x3618, [ 3929] = 0x8977,
+-  [ 3930] = 0xEBC5, [ 3931] = 0x2686E, [ 3932] = 0x26411, [ 3933] = 0x2685E,
+-  [ 3935] = 0xEBCA, [ 3936] = 0x7B42, [ 3937] = 0xEBCC, [ 3938] = 0x20A11,
+-  [ 3939] = 0xEBCE, [ 3941] = 0xEBD0, [ 3942] = 0x7A45, [ 3944] = 0x269FA,
+-  [ 3945] = 0x9A26, [ 3946] = 0xEBD5, [ 3947] = 0x365F, [ 3948] = 0xEBD7,
+-  [ 3949] = 0xEBD8, [ 3950] = 0x7983, [ 3951] = 0xEBDA, [ 3952] = 0xEBDB,
+-  [ 3953] = 0x5D2C, [ 3954] = 0xEBDD, [ 3956] = 0xEBDF, [ 3957] = 0x46D0,
+-  [ 3958] = 0xEBE1, [ 3959] = 0x753B, [ 3960] = 0x8865, [ 3961] = 0xEBE4,
+-  [ 3962] = 0x58B6, [ 3997] = 0x371C, [ 3998] = 0x2258D, [ 3999] = 0xEBE8,
+-  [ 4000] = 0xEBE9, [ 4001] = 0x3C54, [ 4002] = 0xEBEB, [ 4003] = 0xEBEC,
+-  [ 4004] = 0x9281, [ 4005] = 0x2217A, [ 4006] = 0xEBEF, [ 4007] = 0x9330,
+-  [ 4008] = 0x272E6, [ 4009] = 0xEBF2, [ 4010] = 0x6C39, [ 4011] = 0x949F,
+-  [ 4012] = 0xEBF5, [ 4013] = 0x20EF8, [ 4014] = 0x8827, [ 4015] = 0x88F5,
+-  [ 4016] = 0xEBF9, [ 4017] = 0xEBFA, [ 4018] = 0x217B1, [ 4019] = 0x6EB8,
+-  [ 4020] = 0x24A2A, [ 4021] = 0xEBFE, [ 4022] = 0x39A4, [ 4023] = 0x36B9,
+-  [ 4026] = 0x453F, [ 4027] = 0x66B6, [ 4028] = 0x29CAD, [ 4029] = 0x298A4,
+-  [ 4030] = 0x8943, [ 4031] = 0xEC08, [ 4032] = 0xEC09, [ 4033] = 0x56D6,
+-  [ 4034] = 0x40DF, [ 4035] = 0x2160A, [ 4036] = 0x39A1, [ 4037] = 0x2372F,
+-  [ 4038] = 0xEC0F, [ 4039] = 0x213C5, [ 4040] = 0x71AD, [ 4041] = 0x8366,
+-  [ 4042] = 0xEC13, [ 4043] = 0x291A8, [ 4045] = 0x4CB7, [ 4046] = 0x270AF,
+-  [ 4047] = 0x289AB, [ 4048] = 0xEC19, [ 4049] = 0xEC1A, [ 4050] = 0xEC1B,
+-  [ 4051] = 0xEC1C, [ 4052] = 0x2417A, [ 4053] = 0x7B43, [ 4054] = 0x797E,
+-  [ 4055] = 0x28009, [ 4056] = 0x6FB5, [ 4057] = 0x2A2DF, [ 4058] = 0x6A03,
+-  [ 4059] = 0xEC24, [ 4060] = 0x53A2, [ 4061] = 0xEC26, [ 4062] = 0x93BF,
+-  [ 4063] = 0x6836, [ 4064] = 0x975D, [ 4065] = 0x2816F, [ 4066] = 0xEC2B,
+-  [ 4067] = 0x269B5, [ 4068] = 0x213ED, [ 4069] = 0x2322F, [ 4070] = 0xEC2F,
+-  [ 4071] = 0x5D85, [ 4072] = 0x28C30, [ 4073] = 0xEC32, [ 4074] = 0x5715,
+-  [ 4075] = 0x9823, [ 4076] = 0x28949, [ 4077] = 0x5DAB, [ 4078] = 0x24988,
+-  [ 4079] = 0x65BE, [ 4080] = 0x69D5, [ 4081] = 0x53D2, [ 4082] = 0x24AA5,
+-  [ 4083] = 0x23F81, [ 4084] = 0x3C11, [ 4085] = 0x6736, [ 4086] = 0xEC3F,
+-  [ 4087] = 0x280F4, [ 4088] = 0x2812E, [ 4089] = 0x21FA1, [ 4090] = 0xEC43,
+-  [ 4095] = 0xEC44, [ 4096] = 0xEC45, [ 4097] = 0xEC46, [ 4098] = 0xEC47,
+-  [ 4099] = 0xEC48, [ 4100] = 0xEC49, [ 4101] = 0x35CA, [ 4102] = 0xEC4B,
+-  [ 4103] = 0x286AA, [ 4104] = 0x48FA, [ 4105] = 0x63E6, [ 4106] = 0xEC4F,
+-  [ 4107] = 0x7808, [ 4108] = 0x9255, [ 4109] = 0xEC52, [ 4110] = 0x43F2,
+-  [ 4111] = 0xEC54, [ 4112] = 0x43DF, [ 4113] = 0xEC56, [ 4114] = 0xEC57,
+-  [ 4115] = 0xEC58, [ 4116] = 0x59F8, [ 4117] = 0xEC5A, [ 4119] = 0xEC5C,
+-  [ 4120] = 0xEC5D, [ 4122] = 0x29110, [ 4123] = 0xEC60, [ 4124] = 0x3DF7,
+-  [ 4125] = 0xEC62, [ 4126] = 0xEC63, [ 4127] = 0x8FD0, [ 4128] = 0x728F,
+-  [ 4129] = 0x568B, [ 4130] = 0xEC67, [ 4131] = 0x295E9, [ 4132] = 0xEC69,
+-  [ 4133] = 0xEC6A, [ 4134] = 0xEC6B, [ 4135] = 0xEC6C, [ 4136] = 0xEC6D,
+-  [ 4137] = 0x2996A, [ 4138] = 0xEC6F, [ 4139] = 0xEC70, [ 4140] = 0x29B0E,
+-  [ 4141] = 0xEC72, [ 4142] = 0xEC73, [ 4143] = 0x7E9F, [ 4144] = 0xEC75,
+-  [ 4145] = 0x29F23, [ 4146] = 0x4CA4, [ 4147] = 0x9547, [ 4148] = 0xEC79,
+-  [ 4149] = 0x71A2, [ 4150] = 0xEC7B, [ 4151] = 0x4D91, [ 4152] = 0x9012,
+-  [ 4153] = 0xEC7E, [ 4154] = 0x4D9C, [ 4155] = 0x20C9C, [ 4156] = 0x8FBE,
+-  [ 4157] = 0x55C1, [ 4192] = 0x8FBA, [ 4193] = 0xEC84, [ 4194] = 0x8FB9,
+-  [ 4195] = 0x24A93, [ 4196] = 0x4509, [ 4197] = 0x7E7F, [ 4198] = 0x6F56,
+-  [ 4199] = 0x6AB1, [ 4200] = 0x4EEA, [ 4201] = 0x34E4, [ 4202] = 0x28B2C,
+-  [ 4203] = 0xEC8E, [ 4204] = 0x373A, [ 4205] = 0x8E80, [ 4206] = 0x217F5,
+-  [ 4207] = 0xEC92, [ 4208] = 0x28B6C, [ 4209] = 0x28B99, [ 4210] = 0xEC95,
+-  [ 4211] = 0x266AF, [ 4212] = 0x3DEB, [ 4213] = 0x27655, [ 4214] = 0x23CB7,
+-  [ 4215] = 0x25635, [ 4216] = 0x25956, [ 4217] = 0x4E9A, [ 4218] = 0x25E81,
+-  [ 4219] = 0x26258, [ 4220] = 0x56BF, [ 4221] = 0x20E6D, [ 4222] = 0x8E0E,
+-  [ 4223] = 0x5B6D, [ 4224] = 0x23E88, [ 4225] = 0x24C9E, [ 4226] = 0x63DE,
+-  [ 4228] = 0x217F6, [ 4229] = 0x2187B, [ 4230] = 0x6530, [ 4231] = 0x562D,
+-  [ 4232] = 0x25C4A, [ 4233] = 0x541A, [ 4234] = 0x25311, [ 4235] = 0x3DC6,
+-  [ 4236] = 0xECAF, [ 4237] = 0x4C7D, [ 4238] = 0x5622, [ 4239] = 0x561E,
+-  [ 4240] = 0x7F49, [ 4241] = 0x25ED8, [ 4242] = 0x5975, [ 4243] = 0xECB6,
+-  [ 4244] = 0x8770, [ 4245] = 0x4E1C, [ 4246] = 0x20FEA, [ 4247] = 0x20D49,
+-  [ 4248] = 0x236BA, [ 4249] = 0x8117, [ 4250] = 0x9D5E, [ 4251] = 0x8D18,
+-  [ 4252] = 0x763B, [ 4253] = 0x9C45, [ 4254] = 0x764E, [ 4255] = 0x77B9,
+-  [ 4256] = 0x9345, [ 4257] = 0x5432, [ 4258] = 0x8148, [ 4259] = 0x82F7,
+-  [ 4260] = 0x5625, [ 4261] = 0x8132, [ 4262] = 0x8418, [ 4263] = 0x80BD,
+-  [ 4264] = 0x55EA, [ 4265] = 0x7962, [ 4266] = 0x5643, [ 4267] = 0x5416,
+-  [ 4268] = 0xECCF, [ 4269] = 0x35CE, [ 4270] = 0x5605, [ 4271] = 0x55F1,
+-  [ 4272] = 0x66F1, [ 4273] = 0x282E2, [ 4274] = 0x362D, [ 4275] = 0x7534,
+-  [ 4276] = 0x55F0, [ 4277] = 0x55BA, [ 4278] = 0x5497, [ 4279] = 0x5572,
+-  [ 4280] = 0x20C41, [ 4281] = 0xECDC, [ 4282] = 0x5ED0, [ 4283] = 0x25148,
+-  [ 4284] = 0x20E76, [ 4285] = 0xECE0, [ 4290] = 0xECE1, [ 4291] = 0x9EAB,
+-  [ 4292] = 0x7D5A, [ 4293] = 0x55DE, [ 4294] = 0x21075, [ 4295] = 0x629D,
+-  [ 4296] = 0x976D, [ 4297] = 0x5494, [ 4298] = 0x8CCD, [ 4299] = 0x71F6,
+-  [ 4300] = 0x9176, [ 4301] = 0x63FC, [ 4302] = 0x63B9, [ 4303] = 0x63FE,
+-  [ 4304] = 0x5569, [ 4305] = 0xECF0, [ 4306] = 0x9C72, [ 4307] = 0xECF2,
+-  [ 4308] = 0x519A, [ 4309] = 0x34DF, [ 4310] = 0x20DA7, [ 4311] = 0x51A7,
+-  [ 4312] = 0x544D, [ 4313] = 0x551E, [ 4314] = 0x5513, [ 4315] = 0x7666,
+-  [ 4316] = 0x8E2D, [ 4317] = 0xECFC, [ 4318] = 0x75B1, [ 4319] = 0x80B6,
+-  [ 4320] = 0x8804, [ 4321] = 0x8786, [ 4322] = 0x88C7, [ 4323] = 0x81B6,
+-  [ 4324] = 0x841C, [ 4325] = 0x210C1, [ 4326] = 0x44EC, [ 4327] = 0x7304,
+-  [ 4328] = 0x24706, [ 4329] = 0x5B90, [ 4330] = 0x830B, [ 4331] = 0x26893,
+-  [ 4332] = 0x567B, [ 4333] = 0x226F4, [ 4334] = 0x27D2F, [ 4335] = 0x241A3,
+-  [ 4336] = 0x27D73, [ 4337] = 0x26ED0, [ 4338] = 0xED11, [ 4339] = 0x9170,
+-  [ 4340] = 0x211D9, [ 4341] = 0x9208, [ 4342] = 0x23CFC, [ 4343] = 0x2A6A9,
+-  [ 4344] = 0x20EAC, [ 4345] = 0x20EF9, [ 4346] = 0x7266, [ 4347] = 0x21CA2,
+-  [ 4348] = 0x474E, [ 4349] = 0x24FC2, [ 4350] = 0xED1D, [ 4351] = 0x20FEB,
+-  [ 4352] = 0x40FA, [ 4387] = 0x9C5D, [ 4388] = 0x651F, [ 4389] = 0x22DA0,
+-  [ 4390] = 0x48F3, [ 4391] = 0xED24, [ 4392] = 0x29D7C, [ 4393] = 0x20FEC,
+-  [ 4394] = 0x20E0A, [ 4396] = 0xED29, [ 4397] = 0x20FED, [ 4399] = 0xED2C,
+-  [ 4400] = 0x21187, [ 4401] = 0x71A3, [ 4402] = 0x7E8E, [ 4403] = 0x9D50,
+-  [ 4404] = 0x4E1A, [ 4405] = 0x4E04, [ 4406] = 0x3577, [ 4407] = 0x5B0D,
+-  [ 4408] = 0x6CB2, [ 4409] = 0x5367, [ 4410] = 0x36AC, [ 4411] = 0x39DC,
+-  [ 4412] = 0x537D, [ 4413] = 0x36A5, [ 4414] = 0xED3B, [ 4415] = 0x589A,
+-  [ 4416] = 0x24B6E, [ 4417] = 0x822D, [ 4418] = 0x544B, [ 4419] = 0x57AA,
+-  [ 4420] = 0xED41, [ 4421] = 0x20979, [ 4423] = 0x3A52, [ 4424] = 0x22465,
+-  [ 4425] = 0x7374, [ 4426] = 0x29EAC, [ 4427] = 0x4D09, [ 4428] = 0x9BED,
+-  [ 4429] = 0x23CFE, [ 4430] = 0x29F30, [ 4431] = 0x4C5B, [ 4432] = 0x24FA9,
+-  [ 4433] = 0x2959E, [ 4434] = 0xED4F, [ 4435] = 0x845C, [ 4436] = 0x23DB6,
+-  [ 4437] = 0xED52, [ 4438] = 0x267B3, [ 4439] = 0x23720, [ 4440] = 0x632E,
+-  [ 4441] = 0x7D25, [ 4442] = 0x23EF7, [ 4443] = 0x23E2C, [ 4444] = 0x3A2A,
+-  [ 4445] = 0x9008, [ 4446] = 0x52CC, [ 4447] = 0x3E74, [ 4448] = 0x367A,
+-  [ 4449] = 0x45E9, [ 4450] = 0xED5F, [ 4451] = 0x7640, [ 4452] = 0x5AF0,
+-  [ 4453] = 0x20EB6, [ 4454] = 0x787A, [ 4455] = 0x47B6, [ 4456] = 0x58A7,
+-  [ 4457] = 0x40BF, [ 4458] = 0x567C, [ 4459] = 0x9B8B, [ 4460] = 0x5D74,
+-  [ 4461] = 0x7654, [ 4462] = 0xED6B, [ 4463] = 0x9E85, [ 4464] = 0x4CE1,
+-  [ 4466] = 0x37FB, [ 4467] = 0x6119, [ 4468] = 0x230DA, [ 4469] = 0x243F2,
+-  [ 4471] = 0x565D, [ 4472] = 0x212A9, [ 4473] = 0x57A7, [ 4474] = 0x24963,
+-  [ 4475] = 0xED78, [ 4476] = 0x5234, [ 4477] = 0x270AE, [ 4478] = 0x35AD,
+-  [ 4480] = 0x9D7C, [ 4485] = 0x7C56, [ 4486] = 0x9B39, [ 4487] = 0x57DE,
+-  [ 4488] = 0x2176C, [ 4489] = 0x5C53, [ 4490] = 0x64D3, [ 4491] = 0xED84,
+-  [ 4492] = 0xED85, [ 4493] = 0x27164, [ 4494] = 0x86AD, [ 4495] = 0xED88,
+-  [ 4496] = 0x26D22, [ 4497] = 0x24AE2, [ 4498] = 0xED8B, [ 4500] = 0x51FE,
+-  [ 4501] = 0xED8E, [ 4502] = 0x5D8E, [ 4503] = 0x9703, [ 4504] = 0x21DD1,
+-  [ 4505] = 0x9E81, [ 4506] = 0x904C, [ 4507] = 0x7B1F, [ 4508] = 0x9B02,
+-  [ 4509] = 0x5CD1, [ 4510] = 0x7BA3, [ 4511] = 0x6268, [ 4512] = 0x6335,
+-  [ 4513] = 0x9AFF, [ 4514] = 0x7BCF, [ 4515] = 0x9B2A, [ 4516] = 0x7C7E,
+-  [ 4518] = 0x7C42, [ 4519] = 0x7C86, [ 4520] = 0x9C15, [ 4521] = 0x7BFC,
+-  [ 4522] = 0x9B09, [ 4524] = 0x9C1B, [ 4525] = 0x2493E, [ 4526] = 0x9F5A,
+-  [ 4527] = 0x5573, [ 4528] = 0x5BC3, [ 4529] = 0x4FFD, [ 4530] = 0x9E98,
+-  [ 4531] = 0x4FF2, [ 4532] = 0x5260, [ 4533] = 0x3E06, [ 4534] = 0x52D1,
+-  [ 4535] = 0x5767, [ 4536] = 0x5056, [ 4537] = 0x59B7, [ 4538] = 0x5E12,
+-  [ 4539] = 0x97C8, [ 4540] = 0x9DAB, [ 4541] = 0x8F5C, [ 4542] = 0x5469,
+-  [ 4543] = 0x97B4, [ 4544] = 0x9940, [ 4545] = 0x97BA, [ 4546] = 0x532C,
+-  [ 4547] = 0x6130, [ 4582] = 0x692C, [ 4583] = 0x53DA, [ 4584] = 0x9C0A,
+-  [ 4585] = 0x9D02, [ 4586] = 0x4C3B, [ 4587] = 0x9641, [ 4588] = 0x6980,
+-  [ 4589] = 0x50A6, [ 4590] = 0x7546, [ 4591] = 0x2176D, [ 4592] = 0x99DA,
+-  [ 4593] = 0x5273, [ 4595] = 0x9159, [ 4596] = 0x9681, [ 4597] = 0x915C,
+-  [ 4599] = 0x9151, [ 4600] = 0xEDCF, [ 4601] = 0x637F, [ 4602] = 0x26D23,
+-  [ 4603] = 0x6ACA, [ 4604] = 0x5611, [ 4605] = 0x918E, [ 4606] = 0x757A,
+-  [ 4607] = 0x6285, [ 4608] = 0x203FC, [ 4609] = 0x734F, [ 4610] = 0x7C70,
+-  [ 4611] = 0xEDDA, [ 4612] = 0x23CFD, [ 4614] = 0x24919, [ 4615] = 0x76D6,
+-  [ 4616] = 0x9B9D, [ 4617] = 0x4E2A, [ 4618] = 0x20CD4, [ 4619] = 0x83BE,
+-  [ 4620] = 0x8842, [ 4622] = 0x5C4A, [ 4623] = 0x69C0, [ 4625] = 0x577A,
+-  [ 4626] = 0x521F, [ 4627] = 0x5DF5, [ 4628] = 0x4ECE, [ 4629] = 0x6C31,
+-  [ 4630] = 0xEDED, [ 4631] = 0x4F39, [ 4632] = 0x549C, [ 4633] = 0x54DA,
+-  [ 4634] = 0x529A, [ 4635] = 0x8D82, [ 4636] = 0x35FE, [ 4638] = 0x35F3,
+-  [ 4640] = 0x6B52, [ 4641] = 0x917C, [ 4642] = 0x9FA5, [ 4643] = 0x9B97,
+-  [ 4644] = 0x982E, [ 4645] = 0x98B4, [ 4646] = 0x9ABA, [ 4647] = 0x9EA8,
+-  [ 4648] = 0x9E84, [ 4649] = 0x717A, [ 4650] = 0x7B14, [ 4652] = 0x6BFA,
+-  [ 4653] = 0x8818, [ 4654] = 0x7F78, [ 4656] = 0x5620, [ 4657] = 0xEE08,
+-  [ 4658] = 0x8E77, [ 4659] = 0x9F53, [ 4661] = 0x8DD4, [ 4662] = 0x8E4F,
+-  [ 4663] = 0x9E1C, [ 4664] = 0x8E01, [ 4665] = 0x6282, [ 4666] = 0x2837D,
+-  [ 4667] = 0x8E28, [ 4668] = 0x8E75, [ 4669] = 0x7AD3, [ 4670] = 0x24A77,
+-  [ 4671] = 0x7A3E, [ 4672] = 0x78D8, [ 4673] = 0x6CEA, [ 4674] = 0x8A67,
+-  [ 4675] = 0x7607, [ 4680] = 0x28A5A, [ 4681] = 0x9F26, [ 4682] = 0x6CCE,
+-  [ 4683] = 0x87D6, [ 4684] = 0x75C3, [ 4685] = 0x2A2B2, [ 4686] = 0x7853,
+-  [ 4687] = 0x2F840, [ 4688] = 0x8D0C, [ 4689] = 0x72E2, [ 4690] = 0x7371,
+-  [ 4691] = 0x8B2D, [ 4692] = 0x7302, [ 4693] = 0x74F1, [ 4694] = 0x8CEB,
+-  [ 4695] = 0x24ABB, [ 4696] = 0x862F, [ 4697] = 0x5FBA, [ 4698] = 0x88A0,
+-  [ 4699] = 0x44B7, [ 4701] = 0x2183B, [ 4702] = 0x26E05, [ 4704] = 0x8A7E,
+-  [ 4705] = 0x2251B, [ 4707] = 0x60FD, [ 4708] = 0x7667, [ 4709] = 0x9AD7,
+-  [ 4710] = 0x9D44, [ 4711] = 0x936E, [ 4712] = 0x9B8F, [ 4713] = 0x87F5,
+-  [ 4716] = 0x8CF7, [ 4717] = 0x732C, [ 4718] = 0x9721, [ 4719] = 0x9BB0,
+-  [ 4720] = 0x35D6, [ 4721] = 0x72B2, [ 4722] = 0x4C07, [ 4723] = 0x7C51,
+-  [ 4724] = 0x994A, [ 4725] = 0x26159, [ 4726] = 0x6159, [ 4727] = 0x4C04,
+-  [ 4728] = 0x9E96, [ 4729] = 0x617D, [ 4731] = 0x575F, [ 4732] = 0x616F,
+-  [ 4733] = 0x62A6, [ 4734] = 0x6239, [ 4736] = 0x3A5C, [ 4737] = 0x61E2,
+-  [ 4738] = 0x53AA, [ 4739] = 0x233F5, [ 4740] = 0x6364, [ 4741] = 0x6802,
+-  [ 4742] = 0x35D2, [ 4777] = 0x5D57, [ 4778] = 0x28BC2, [ 4779] = 0x8FDA,
+-  [ 4780] = 0xEE5D, [ 4782] = 0x50D9, [ 4783] = 0x21D46, [ 4784] = 0x7906,
+-  [ 4785] = 0x5332, [ 4786] = 0x9638, [ 4787] = 0x20F3B, [ 4788] = 0x4065,
+-  [ 4790] = 0x77FE, [ 4792] = 0x7CC2, [ 4793] = 0xEE6A, [ 4794] = 0x7CDA,
+-  [ 4795] = 0x7A2D, [ 4796] = 0x8066, [ 4797] = 0x8063, [ 4798] = 0x7D4D,
+-  [ 4799] = 0x7505, [ 4800] = 0x74F2, [ 4801] = 0x8994, [ 4802] = 0x821A,
+-  [ 4803] = 0x670C, [ 4804] = 0x8062, [ 4805] = 0x27486, [ 4806] = 0x805B,
+-  [ 4807] = 0x74F0, [ 4808] = 0x8103, [ 4809] = 0x7724, [ 4810] = 0x8989,
+-  [ 4811] = 0x267CC, [ 4812] = 0x7553, [ 4813] = 0x26ED1, [ 4814] = 0x87A9,
+-  [ 4815] = 0x87CE, [ 4816] = 0x81C8, [ 4817] = 0x878C, [ 4818] = 0x8A49,
+-  [ 4819] = 0x8CAD, [ 4820] = 0x8B43, [ 4821] = 0x772B, [ 4822] = 0x74F8,
+-  [ 4823] = 0x84DA, [ 4824] = 0x3635, [ 4825] = 0x69B2, [ 4826] = 0x8DA6,
+-  [ 4828] = 0x89A9, [ 4830] = 0x6DB9, [ 4831] = 0x87C1, [ 4832] = 0x24011,
+-  [ 4833] = 0x74E7, [ 4834] = 0x3DDB, [ 4835] = 0x7176, [ 4836] = 0x60A4,
+-  [ 4837] = 0x619C, [ 4838] = 0x3CD1, [ 4840] = 0x6077, [ 4842] = 0x7F71,
+-  [ 4843] = 0x28B2D, [ 4845] = 0x60E9, [ 4846] = 0x4B7E, [ 4847] = 0x5220,
+-  [ 4848] = 0x3C18, [ 4849] = 0x23CC7, [ 4850] = 0x25ED7, [ 4851] = 0x27656,
+-  [ 4852] = 0xEEA5, [ 4853] = 0x21944, [ 4854] = 0x212FE, [ 4855] = 0x29903,
+-  [ 4856] = 0x26DDC, [ 4857] = 0x270AD, [ 4858] = 0x5CC1, [ 4859] = 0x261AD,
+-  [ 4860] = 0x28A0F, [ 4861] = 0x23677, [ 4862] = 0x200EE, [ 4863] = 0xEEB0,
+-  [ 4864] = 0x24F0E, [ 4865] = 0x4562, [ 4866] = 0x5B1F, [ 4867] = 0xEEB4,
+-  [ 4868] = 0x9F50, [ 4869] = 0x9EA6, [ 4870] = 0xEEB7, [ 4875] = 0x3000,
+-  [ 4876] = 0xFF0C, [ 4877] = 0x3001, [ 4878] = 0x3002, [ 4879] = 0xFF0E,
+-  [ 4880] = 0x2022, [ 4881] = 0xFF1B, [ 4882] = 0xFF1A, [ 4883] = 0xFF1F,
+-  [ 4884] = 0xFF01, [ 4885] = 0xFE30, [ 4886] = 0x2026, [ 4887] = 0x2025,
+-  [ 4888] = 0xFE50, [ 4889] = 0xFF64, [ 4890] = 0xFE52, [ 4891] = 0x00B7,
+-  [ 4892] = 0xFE54, [ 4893] = 0xFE55, [ 4894] = 0xFE56, [ 4895] = 0xFE57,
+-  [ 4896] = 0xFF5C, [ 4897] = 0x2013, [ 4898] = 0xFE31, [ 4899] = 0x2014,
+-  [ 4900] = 0xFE33, [ 4902] = 0xFE34, [ 4903] = 0xFE4F, [ 4904] = 0xFF08,
+-  [ 4905] = 0xFF09, [ 4906] = 0xFE35, [ 4907] = 0xFE36, [ 4908] = 0xFF5B,
+-  [ 4909] = 0xFF5D, [ 4910] = 0xFE37, [ 4911] = 0xFE38, [ 4912] = 0x3014,
+-  [ 4913] = 0x3015, [ 4914] = 0xFE39, [ 4915] = 0xFE3A, [ 4916] = 0x3010,
+-  [ 4917] = 0x3011, [ 4918] = 0xFE3B, [ 4919] = 0xFE3C, [ 4920] = 0x300A,
+-  [ 4921] = 0x300B, [ 4922] = 0xFE3D, [ 4923] = 0xFE3E, [ 4924] = 0x3008,
+-  [ 4925] = 0x3009, [ 4926] = 0xFE3F, [ 4927] = 0xFE40, [ 4928] = 0x300C,
+-  [ 4929] = 0x300D, [ 4930] = 0xFE41, [ 4931] = 0xFE42, [ 4932] = 0x300E,
+-  [ 4933] = 0x300F, [ 4934] = 0xFE43, [ 4935] = 0xFE44, [ 4936] = 0xFE59,
+-  [ 4937] = 0xFE5A, [ 4972] = 0xFE5B, [ 4973] = 0xFE5C, [ 4974] = 0xFE5D,
+-  [ 4975] = 0xFE5E, [ 4976] = 0x2018, [ 4977] = 0x2019, [ 4978] = 0x201C,
+-  [ 4979] = 0x201D, [ 4980] = 0x301D, [ 4981] = 0x301E, [ 4982] = 0x2035,
+-  [ 4983] = 0x2032, [ 4984] = 0xFF03, [ 4985] = 0xFF06, [ 4986] = 0xFF0A,
+-  [ 4987] = 0x203B, [ 4988] = 0x00A7, [ 4989] = 0x3003, [ 4990] = 0x25CB,
+-  [ 4991] = 0x25CF, [ 4992] = 0x25B3, [ 4993] = 0x25B2, [ 4994] = 0x25CE,
+-  [ 4995] = 0x2606, [ 4996] = 0x2605, [ 4997] = 0x25C7, [ 4998] = 0x25C6,
+-  [ 4999] = 0x25A1, [ 5000] = 0x25A0, [ 5001] = 0x25BD, [ 5002] = 0x25BC,
+-  [ 5003] = 0x32A3, [ 5004] = 0x2105, [ 5005] = 0x203E, [ 5007] = 0xFF3F,
+-  [ 5009] = 0xFE49, [ 5010] = 0xFE4A, [ 5011] = 0xFE4D, [ 5012] = 0xFE4E,
+-  [ 5013] = 0xFE4B, [ 5014] = 0xFE4C, [ 5015] = 0xFE5F, [ 5016] = 0xFE60,
+-  [ 5017] = 0xFE61, [ 5018] = 0xFF0B, [ 5019] = 0xFF0D, [ 5020] = 0x00D7,
+-  [ 5021] = 0x00F7, [ 5022] = 0x00B1, [ 5023] = 0x221A, [ 5024] = 0xFF1C,
+-  [ 5025] = 0xFF1E, [ 5026] = 0xFF1D, [ 5027] = 0x2266, [ 5028] = 0x2267,
+-  [ 5029] = 0x2260, [ 5030] = 0x221E, [ 5031] = 0x2252, [ 5032] = 0x2261,
+-  [ 5033] = 0xFE62, [ 5034] = 0xFE63, [ 5035] = 0xFE64, [ 5036] = 0xFE65,
+-  [ 5037] = 0xFE66, [ 5038] = 0x223C, [ 5039] = 0x2229, [ 5040] = 0x222A,
+-  [ 5041] = 0x22A5, [ 5042] = 0x2220, [ 5043] = 0x221F, [ 5044] = 0x22BF,
+-  [ 5045] = 0x33D2, [ 5046] = 0x33D1, [ 5047] = 0x222B, [ 5048] = 0x222E,
+-  [ 5049] = 0x2235, [ 5050] = 0x2234, [ 5051] = 0x2640, [ 5052] = 0x2642,
+-  [ 5053] = 0x2641, [ 5054] = 0x2609, [ 5055] = 0x2191, [ 5056] = 0x2193,
+-  [ 5057] = 0x2190, [ 5058] = 0x2192, [ 5059] = 0x2196, [ 5060] = 0x2197,
+-  [ 5061] = 0x2199, [ 5062] = 0x2198, [ 5063] = 0x2225, [ 5064] = 0x2223,
+-  [ 5071] = 0xFF0F, [ 5072] = 0xFF3C, [ 5073] = 0xFF04, [ 5074] = 0x00A5,
+-  [ 5075] = 0x3012, [ 5076] = 0x00A2, [ 5077] = 0x00A3, [ 5078] = 0xFF05,
+-  [ 5079] = 0xFF20, [ 5080] = 0x2103, [ 5081] = 0x2109, [ 5082] = 0xFE69,
+-  [ 5083] = 0xFE6A, [ 5084] = 0xFE6B, [ 5085] = 0x33D5, [ 5086] = 0x339C,
+-  [ 5087] = 0x339D, [ 5088] = 0x339E, [ 5089] = 0x33CE, [ 5090] = 0x33A1,
+-  [ 5091] = 0x338E, [ 5092] = 0x338F, [ 5093] = 0x33C4, [ 5094] = 0x00B0,
+-  [ 5095] = 0x5159, [ 5096] = 0x515B, [ 5097] = 0x515E, [ 5098] = 0x515D,
+-  [ 5099] = 0x5161, [ 5100] = 0x5163, [ 5101] = 0x55E7, [ 5102] = 0x74E9,
+-  [ 5103] = 0x7CCE, [ 5104] = 0x2581, [ 5105] = 0x2582, [ 5106] = 0x2583,
+-  [ 5107] = 0x2584, [ 5108] = 0x2585, [ 5109] = 0x2586, [ 5110] = 0x2587,
+-  [ 5111] = 0x2588, [ 5112] = 0x258F, [ 5113] = 0x258E, [ 5114] = 0x258D,
+-  [ 5115] = 0x258C, [ 5116] = 0x258B, [ 5117] = 0x258A, [ 5118] = 0x2589,
+-  [ 5119] = 0x253C, [ 5120] = 0x2534, [ 5121] = 0x252C, [ 5122] = 0x2524,
+-  [ 5123] = 0x251C, [ 5124] = 0x2594, [ 5125] = 0x2500, [ 5126] = 0x2502,
+-  [ 5127] = 0x2595, [ 5128] = 0x250C, [ 5129] = 0x2510, [ 5130] = 0x2514,
+-  [ 5131] = 0x2518, [ 5132] = 0x256D, [ 5167] = 0x256E, [ 5168] = 0x2570,
+-  [ 5169] = 0x256F, [ 5170] = 0x2550, [ 5171] = 0x255E, [ 5172] = 0x256A,
+-  [ 5173] = 0x2561, [ 5174] = 0x25E2, [ 5175] = 0x25E3, [ 5176] = 0x25E5,
+-  [ 5177] = 0x25E4, [ 5178] = 0x2571, [ 5179] = 0x2572, [ 5180] = 0x2573,
+-  [ 5181] = 0xFF10, [ 5182] = 0xFF11, [ 5183] = 0xFF12, [ 5184] = 0xFF13,
+-  [ 5185] = 0xFF14, [ 5186] = 0xFF15, [ 5187] = 0xFF16, [ 5188] = 0xFF17,
+-  [ 5189] = 0xFF18, [ 5190] = 0xFF19, [ 5191] = 0x2160, [ 5192] = 0x2161,
+-  [ 5193] = 0x2162, [ 5194] = 0x2163, [ 5195] = 0x2164, [ 5196] = 0x2165,
+-  [ 5197] = 0x2166, [ 5198] = 0x2167, [ 5199] = 0x2168, [ 5200] = 0x2169,
+-  [ 5201] = 0x3021, [ 5202] = 0x3022, [ 5203] = 0x3023, [ 5204] = 0x3024,
+-  [ 5205] = 0x3025, [ 5206] = 0x3026, [ 5207] = 0x3027, [ 5208] = 0x3028,
+-  [ 5209] = 0x3029, [ 5211] = 0x5344, [ 5213] = 0xFF21, [ 5214] = 0xFF22,
+-  [ 5215] = 0xFF23, [ 5216] = 0xFF24, [ 5217] = 0xFF25, [ 5218] = 0xFF26,
+-  [ 5219] = 0xFF27, [ 5220] = 0xFF28, [ 5221] = 0xFF29, [ 5222] = 0xFF2A,
+-  [ 5223] = 0xFF2B, [ 5224] = 0xFF2C, [ 5225] = 0xFF2D, [ 5226] = 0xFF2E,
+-  [ 5227] = 0xFF2F, [ 5228] = 0xFF30, [ 5229] = 0xFF31, [ 5230] = 0xFF32,
+-  [ 5231] = 0xFF33, [ 5232] = 0xFF34, [ 5233] = 0xFF35, [ 5234] = 0xFF36,
+-  [ 5235] = 0xFF37, [ 5236] = 0xFF38, [ 5237] = 0xFF39, [ 5238] = 0xFF3A,
+-  [ 5239] = 0xFF41, [ 5240] = 0xFF42, [ 5241] = 0xFF43, [ 5242] = 0xFF44,
+-  [ 5243] = 0xFF45, [ 5244] = 0xFF46, [ 5245] = 0xFF47, [ 5246] = 0xFF48,
+-  [ 5247] = 0xFF49, [ 5248] = 0xFF4A, [ 5249] = 0xFF4B, [ 5250] = 0xFF4C,
+-  [ 5251] = 0xFF4D, [ 5252] = 0xFF4E, [ 5253] = 0xFF4F, [ 5254] = 0xFF50,
+-  [ 5255] = 0xFF51, [ 5256] = 0xFF52, [ 5257] = 0xFF53, [ 5258] = 0xFF54,
+-  [ 5259] = 0xFF55, [ 5260] = 0xFF56, [ 5265] = 0xFF57, [ 5266] = 0xFF58,
+-  [ 5267] = 0xFF59, [ 5268] = 0xFF5A, [ 5269] = 0x0391, [ 5270] = 0x0392,
+-  [ 5271] = 0x0393, [ 5272] = 0x0394, [ 5273] = 0x0395, [ 5274] = 0x0396,
+-  [ 5275] = 0x0397, [ 5276] = 0x0398, [ 5277] = 0x0399, [ 5278] = 0x039A,
+-  [ 5279] = 0x039B, [ 5280] = 0x039C, [ 5281] = 0x039D, [ 5282] = 0x039E,
+-  [ 5283] = 0x039F, [ 5284] = 0x03A0, [ 5285] = 0x03A1, [ 5286] = 0x03A3,
+-  [ 5287] = 0x03A4, [ 5288] = 0x03A5, [ 5289] = 0x03A6, [ 5290] = 0x03A7,
+-  [ 5291] = 0x03A8, [ 5292] = 0x03A9, [ 5293] = 0x03B1, [ 5294] = 0x03B2,
+-  [ 5295] = 0x03B3, [ 5296] = 0x03B4, [ 5297] = 0x03B5, [ 5298] = 0x03B6,
+-  [ 5299] = 0x03B7, [ 5300] = 0x03B8, [ 5301] = 0x03B9, [ 5302] = 0x03BA,
+-  [ 5303] = 0x03BB, [ 5304] = 0x03BC, [ 5305] = 0x03BD, [ 5306] = 0x03BE,
+-  [ 5307] = 0x03BF, [ 5308] = 0x03C0, [ 5309] = 0x03C1, [ 5310] = 0x03C3,
+-  [ 5311] = 0x03C4, [ 5312] = 0x03C5, [ 5313] = 0x03C6, [ 5314] = 0x03C7,
+-  [ 5315] = 0x03C8, [ 5316] = 0x03C9, [ 5317] = 0x3105, [ 5318] = 0x3106,
+-  [ 5319] = 0x3107, [ 5320] = 0x3108, [ 5321] = 0x3109, [ 5322] = 0x310A,
+-  [ 5323] = 0x310B, [ 5324] = 0x310C, [ 5325] = 0x310D, [ 5326] = 0x310E,
+-  [ 5327] = 0x310F, [ 5362] = 0x3110, [ 5363] = 0x3111, [ 5364] = 0x3112,
+-  [ 5365] = 0x3113, [ 5366] = 0x3114, [ 5367] = 0x3115, [ 5368] = 0x3116,
+-  [ 5369] = 0x3117, [ 5370] = 0x3118, [ 5371] = 0x3119, [ 5372] = 0x311A,
+-  [ 5373] = 0x311B, [ 5374] = 0x311C, [ 5375] = 0x311D, [ 5376] = 0x311E,
+-  [ 5377] = 0x311F, [ 5378] = 0x3120, [ 5379] = 0x3121, [ 5380] = 0x3122,
+-  [ 5381] = 0x3123, [ 5382] = 0x3124, [ 5383] = 0x3125, [ 5384] = 0x3126,
+-  [ 5385] = 0x3127, [ 5386] = 0x3128, [ 5387] = 0x3129, [ 5388] = 0x02D9,
+-  [ 5389] = 0x02C9, [ 5390] = 0x02CA, [ 5391] = 0x02C7, [ 5392] = 0x02CB,
+-  [ 5460] = 0x4E00, [ 5461] = 0x4E59, [ 5462] = 0x4E01, [ 5463] = 0x4E03,
+-  [ 5464] = 0x4E43, [ 5465] = 0x4E5D, [ 5466] = 0x4E86, [ 5467] = 0x4E8C,
+-  [ 5468] = 0x4EBA, [ 5469] = 0x513F, [ 5470] = 0x5165, [ 5471] = 0x516B,
+-  [ 5472] = 0x51E0, [ 5473] = 0x5200, [ 5474] = 0x5201, [ 5475] = 0x529B,
+-  [ 5476] = 0x5315, [ 5477] = 0x5341, [ 5478] = 0x535C, [ 5479] = 0x53C8,
+-  [ 5480] = 0x4E09, [ 5481] = 0x4E0B, [ 5482] = 0x4E08, [ 5483] = 0x4E0A,
+-  [ 5484] = 0x4E2B, [ 5485] = 0x4E38, [ 5486] = 0x51E1, [ 5487] = 0x4E45,
+-  [ 5488] = 0x4E48, [ 5489] = 0x4E5F, [ 5490] = 0x4E5E, [ 5491] = 0x4E8E,
+-  [ 5492] = 0x4EA1, [ 5493] = 0x5140, [ 5494] = 0x5203, [ 5495] = 0x52FA,
+-  [ 5496] = 0x5343, [ 5497] = 0x53C9, [ 5498] = 0x53E3, [ 5499] = 0x571F,
+-  [ 5500] = 0x58EB, [ 5501] = 0x5915, [ 5502] = 0x5927, [ 5503] = 0x5973,
+-  [ 5504] = 0x5B50, [ 5505] = 0x5B51, [ 5506] = 0x5B53, [ 5507] = 0x5BF8,
+-  [ 5508] = 0x5C0F, [ 5509] = 0x5C22, [ 5510] = 0x5C38, [ 5511] = 0x5C71,
+-  [ 5512] = 0x5DDD, [ 5513] = 0x5DE5, [ 5514] = 0x5DF1, [ 5515] = 0x5DF2,
+-  [ 5516] = 0x5DF3, [ 5517] = 0x5DFE, [ 5518] = 0x5E72, [ 5519] = 0x5EFE,
+-  [ 5520] = 0x5F0B, [ 5521] = 0x5F13, [ 5522] = 0x624D, [ 5557] = 0x4E11,
+-  [ 5558] = 0x4E10, [ 5559] = 0x4E0D, [ 5560] = 0x4E2D, [ 5561] = 0x4E30,
+-  [ 5562] = 0x4E39, [ 5563] = 0x4E4B, [ 5564] = 0x5C39, [ 5565] = 0x4E88,
+-  [ 5566] = 0x4E91, [ 5567] = 0x4E95, [ 5568] = 0x4E92, [ 5569] = 0x4E94,
+-  [ 5570] = 0x4EA2, [ 5571] = 0x4EC1, [ 5572] = 0x4EC0, [ 5573] = 0x4EC3,
+-  [ 5574] = 0x4EC6, [ 5575] = 0x4EC7, [ 5576] = 0x4ECD, [ 5577] = 0x4ECA,
+-  [ 5578] = 0x4ECB, [ 5579] = 0x4EC4, [ 5580] = 0x5143, [ 5581] = 0x5141,
+-  [ 5582] = 0x5167, [ 5583] = 0x516D, [ 5584] = 0x516E, [ 5585] = 0x516C,
+-  [ 5586] = 0x5197, [ 5587] = 0x51F6, [ 5588] = 0x5206, [ 5589] = 0x5207,
+-  [ 5590] = 0x5208, [ 5591] = 0x52FB, [ 5592] = 0x52FE, [ 5593] = 0x52FF,
+-  [ 5594] = 0x5316, [ 5595] = 0x5339, [ 5596] = 0x5348, [ 5597] = 0x5347,
+-  [ 5598] = 0x5345, [ 5599] = 0x535E, [ 5600] = 0x5384, [ 5601] = 0x53CB,
+-  [ 5602] = 0x53CA, [ 5603] = 0x53CD, [ 5604] = 0x58EC, [ 5605] = 0x5929,
+-  [ 5606] = 0x592B, [ 5607] = 0x592A, [ 5608] = 0x592D, [ 5609] = 0x5B54,
+-  [ 5610] = 0x5C11, [ 5611] = 0x5C24, [ 5612] = 0x5C3A, [ 5613] = 0x5C6F,
+-  [ 5614] = 0x5DF4, [ 5615] = 0x5E7B, [ 5616] = 0x5EFF, [ 5617] = 0x5F14,
+-  [ 5618] = 0x5F15, [ 5619] = 0x5FC3, [ 5620] = 0x6208, [ 5621] = 0x6236,
+-  [ 5622] = 0x624B, [ 5623] = 0x624E, [ 5624] = 0x652F, [ 5625] = 0x6587,
+-  [ 5626] = 0x6597, [ 5627] = 0x65A4, [ 5628] = 0x65B9, [ 5629] = 0x65E5,
+-  [ 5630] = 0x66F0, [ 5631] = 0x6708, [ 5632] = 0x6728, [ 5633] = 0x6B20,
+-  [ 5634] = 0x6B62, [ 5635] = 0x6B79, [ 5636] = 0x6BCB, [ 5637] = 0x6BD4,
+-  [ 5638] = 0x6BDB, [ 5639] = 0x6C0F, [ 5640] = 0x6C34, [ 5641] = 0x706B,
+-  [ 5642] = 0x722A, [ 5643] = 0x7236, [ 5644] = 0x723B, [ 5645] = 0x7247,
+-  [ 5646] = 0x7259, [ 5647] = 0x725B, [ 5648] = 0x72AC, [ 5649] = 0x738B,
+-  [ 5650] = 0x4E19, [ 5655] = 0x4E16, [ 5656] = 0x4E15, [ 5657] = 0x4E14,
+-  [ 5658] = 0x4E18, [ 5659] = 0x4E3B, [ 5660] = 0x4E4D, [ 5661] = 0x4E4F,
+-  [ 5662] = 0x4E4E, [ 5663] = 0x4EE5, [ 5664] = 0x4ED8, [ 5665] = 0x4ED4,
+-  [ 5666] = 0x4ED5, [ 5667] = 0x4ED6, [ 5668] = 0x4ED7, [ 5669] = 0x4EE3,
+-  [ 5670] = 0x4EE4, [ 5671] = 0x4ED9, [ 5672] = 0x4EDE, [ 5673] = 0x5145,
+-  [ 5674] = 0x5144, [ 5675] = 0x5189, [ 5676] = 0x518A, [ 5677] = 0x51AC,
+-  [ 5678] = 0x51F9, [ 5679] = 0x51FA, [ 5680] = 0x51F8, [ 5681] = 0x520A,
+-  [ 5682] = 0x52A0, [ 5683] = 0x529F, [ 5684] = 0x5305, [ 5685] = 0x5306,
+-  [ 5686] = 0x5317, [ 5687] = 0x531D, [ 5688] = 0x4EDF, [ 5689] = 0x534A,
+-  [ 5690] = 0x5349, [ 5691] = 0x5361, [ 5692] = 0x5360, [ 5693] = 0x536F,
+-  [ 5694] = 0x536E, [ 5695] = 0x53BB, [ 5696] = 0x53EF, [ 5697] = 0x53E4,
+-  [ 5698] = 0x53F3, [ 5699] = 0x53EC, [ 5700] = 0x53EE, [ 5701] = 0x53E9,
+-  [ 5702] = 0x53E8, [ 5703] = 0x53FC, [ 5704] = 0x53F8, [ 5705] = 0x53F5,
+-  [ 5706] = 0x53EB, [ 5707] = 0x53E6, [ 5708] = 0x53EA, [ 5709] = 0x53F2,
+-  [ 5710] = 0x53F1, [ 5711] = 0x53F0, [ 5712] = 0x53E5, [ 5713] = 0x53ED,
+-  [ 5714] = 0x53FB, [ 5715] = 0x56DB, [ 5716] = 0x56DA, [ 5717] = 0x5916,
+-  [ 5752] = 0x592E, [ 5753] = 0x5931, [ 5754] = 0x5974, [ 5755] = 0x5976,
+-  [ 5756] = 0x5B55, [ 5757] = 0x5B83, [ 5758] = 0x5C3C, [ 5759] = 0x5DE8,
+-  [ 5760] = 0x5DE7, [ 5761] = 0x5DE6, [ 5762] = 0x5E02, [ 5763] = 0x5E03,
+-  [ 5764] = 0x5E73, [ 5765] = 0x5E7C, [ 5766] = 0x5F01, [ 5767] = 0x5F18,
+-  [ 5768] = 0x5F17, [ 5769] = 0x5FC5, [ 5770] = 0x620A, [ 5771] = 0x6253,
+-  [ 5772] = 0x6254, [ 5773] = 0x6252, [ 5774] = 0x6251, [ 5775] = 0x65A5,
+-  [ 5776] = 0x65E6, [ 5777] = 0x672E, [ 5778] = 0x672C, [ 5779] = 0x672A,
+-  [ 5780] = 0x672B, [ 5781] = 0x672D, [ 5782] = 0x6B63, [ 5783] = 0x6BCD,
+-  [ 5784] = 0x6C11, [ 5785] = 0x6C10, [ 5786] = 0x6C38, [ 5787] = 0x6C41,
+-  [ 5788] = 0x6C40, [ 5789] = 0x6C3E, [ 5790] = 0x72AF, [ 5791] = 0x7384,
+-  [ 5792] = 0x7389, [ 5793] = 0x74DC, [ 5794] = 0x74E6, [ 5795] = 0x7518,
+-  [ 5796] = 0x751F, [ 5797] = 0x7528, [ 5798] = 0x7529, [ 5799] = 0x7530,
+-  [ 5800] = 0x7531, [ 5801] = 0x7532, [ 5802] = 0x7533, [ 5803] = 0x758B,
+-  [ 5804] = 0x767D, [ 5805] = 0x76AE, [ 5806] = 0x76BF, [ 5807] = 0x76EE,
+-  [ 5808] = 0x77DB, [ 5809] = 0x77E2, [ 5810] = 0x77F3, [ 5811] = 0x793A,
+-  [ 5812] = 0x79BE, [ 5813] = 0x7A74, [ 5814] = 0x7ACB, [ 5815] = 0x4E1E,
+-  [ 5816] = 0x4E1F, [ 5817] = 0x4E52, [ 5818] = 0x4E53, [ 5819] = 0x4E69,
+-  [ 5820] = 0x4E99, [ 5821] = 0x4EA4, [ 5822] = 0x4EA6, [ 5823] = 0x4EA5,
+-  [ 5824] = 0x4EFF, [ 5825] = 0x4F09, [ 5826] = 0x4F19, [ 5827] = 0x4F0A,
+-  [ 5828] = 0x4F15, [ 5829] = 0x4F0D, [ 5830] = 0x4F10, [ 5831] = 0x4F11,
+-  [ 5832] = 0x4F0F, [ 5833] = 0x4EF2, [ 5834] = 0x4EF6, [ 5835] = 0x4EFB,
+-  [ 5836] = 0x4EF0, [ 5837] = 0x4EF3, [ 5838] = 0x4EFD, [ 5839] = 0x4F01,
+-  [ 5840] = 0x4F0B, [ 5841] = 0x5149, [ 5842] = 0x5147, [ 5843] = 0x5146,
+-  [ 5844] = 0x5148, [ 5845] = 0x5168, [ 5850] = 0x5171, [ 5851] = 0x518D,
+-  [ 5852] = 0x51B0, [ 5853] = 0x5217, [ 5854] = 0x5211, [ 5855] = 0x5212,
+-  [ 5856] = 0x520E, [ 5857] = 0x5216, [ 5858] = 0x52A3, [ 5859] = 0x5308,
+-  [ 5860] = 0x5321, [ 5861] = 0x5320, [ 5862] = 0x5370, [ 5863] = 0x5371,
+-  [ 5864] = 0x5409, [ 5865] = 0x540F, [ 5866] = 0x540C, [ 5867] = 0x540A,
+-  [ 5868] = 0x5410, [ 5869] = 0x5401, [ 5870] = 0x540B, [ 5871] = 0x5404,
+-  [ 5872] = 0x5411, [ 5873] = 0x540D, [ 5874] = 0x5408, [ 5875] = 0x5403,
+-  [ 5876] = 0x540E, [ 5877] = 0x5406, [ 5878] = 0x5412, [ 5879] = 0x56E0,
+-  [ 5880] = 0x56DE, [ 5881] = 0x56DD, [ 5882] = 0x5733, [ 5883] = 0x5730,
+-  [ 5884] = 0x5728, [ 5885] = 0x572D, [ 5886] = 0x572C, [ 5887] = 0x572F,
+-  [ 5888] = 0x5729, [ 5889] = 0x5919, [ 5890] = 0x591A, [ 5891] = 0x5937,
+-  [ 5892] = 0x5938, [ 5893] = 0x5984, [ 5894] = 0x5978, [ 5895] = 0x5983,
+-  [ 5896] = 0x597D, [ 5897] = 0x5979, [ 5898] = 0x5982, [ 5899] = 0x5981,
+-  [ 5900] = 0x5B57, [ 5901] = 0x5B58, [ 5902] = 0x5B87, [ 5903] = 0x5B88,
+-  [ 5904] = 0x5B85, [ 5905] = 0x5B89, [ 5906] = 0x5BFA, [ 5907] = 0x5C16,
+-  [ 5908] = 0x5C79, [ 5909] = 0x5DDE, [ 5910] = 0x5E06, [ 5911] = 0x5E76,
+-  [ 5912] = 0x5E74, [ 5947] = 0x5F0F, [ 5948] = 0x5F1B, [ 5949] = 0x5FD9,
+-  [ 5950] = 0x5FD6, [ 5951] = 0x620E, [ 5952] = 0x620C, [ 5953] = 0x620D,
+-  [ 5954] = 0x6210, [ 5955] = 0x6263, [ 5956] = 0x625B, [ 5957] = 0x6258,
+-  [ 5958] = 0x6536, [ 5959] = 0x65E9, [ 5960] = 0x65E8, [ 5961] = 0x65EC,
+-  [ 5962] = 0x65ED, [ 5963] = 0x66F2, [ 5964] = 0x66F3, [ 5965] = 0x6709,
+-  [ 5966] = 0x673D, [ 5967] = 0x6734, [ 5968] = 0x6731, [ 5969] = 0x6735,
+-  [ 5970] = 0x6B21, [ 5971] = 0x6B64, [ 5972] = 0x6B7B, [ 5973] = 0x6C16,
+-  [ 5974] = 0x6C5D, [ 5975] = 0x6C57, [ 5976] = 0x6C59, [ 5977] = 0x6C5F,
+-  [ 5978] = 0x6C60, [ 5979] = 0x6C50, [ 5980] = 0x6C55, [ 5981] = 0x6C61,
+-  [ 5982] = 0x6C5B, [ 5983] = 0x6C4D, [ 5984] = 0x6C4E, [ 5985] = 0x7070,
+-  [ 5986] = 0x725F, [ 5987] = 0x725D, [ 5988] = 0x767E, [ 5989] = 0x7AF9,
+-  [ 5990] = 0x7C73, [ 5991] = 0x7CF8, [ 5992] = 0x7F36, [ 5993] = 0x7F8A,
+-  [ 5994] = 0x7FBD, [ 5995] = 0x8001, [ 5996] = 0x8003, [ 5997] = 0x800C,
+-  [ 5998] = 0x8012, [ 5999] = 0x8033, [ 6000] = 0x807F, [ 6001] = 0x8089,
+-  [ 6002] = 0x808B, [ 6003] = 0x808C, [ 6004] = 0x81E3, [ 6005] = 0x81EA,
+-  [ 6006] = 0x81F3, [ 6007] = 0x81FC, [ 6008] = 0x820C, [ 6009] = 0x821B,
+-  [ 6010] = 0x821F, [ 6011] = 0x826E, [ 6012] = 0x8272, [ 6013] = 0x827E,
+-  [ 6014] = 0x866B, [ 6015] = 0x8840, [ 6016] = 0x884C, [ 6017] = 0x8863,
+-  [ 6018] = 0x897F, [ 6019] = 0x9621, [ 6020] = 0x4E32, [ 6021] = 0x4EA8,
+-  [ 6022] = 0x4F4D, [ 6023] = 0x4F4F, [ 6024] = 0x4F47, [ 6025] = 0x4F57,
+-  [ 6026] = 0x4F5E, [ 6027] = 0x4F34, [ 6028] = 0x4F5B, [ 6029] = 0x4F55,
+-  [ 6030] = 0x4F30, [ 6031] = 0x4F50, [ 6032] = 0x4F51, [ 6033] = 0x4F3D,
+-  [ 6034] = 0x4F3A, [ 6035] = 0x4F38, [ 6036] = 0x4F43, [ 6037] = 0x4F54,
+-  [ 6038] = 0x4F3C, [ 6039] = 0x4F46, [ 6040] = 0x4F63, [ 6045] = 0x4F5C,
+-  [ 6046] = 0x4F60, [ 6047] = 0x4F2F, [ 6048] = 0x4F4E, [ 6049] = 0x4F36,
+-  [ 6050] = 0x4F59, [ 6051] = 0x4F5D, [ 6052] = 0x4F48, [ 6053] = 0x4F5A,
+-  [ 6054] = 0x514C, [ 6055] = 0x514B, [ 6056] = 0x514D, [ 6057] = 0x5175,
+-  [ 6058] = 0x51B6, [ 6059] = 0x51B7, [ 6060] = 0x5225, [ 6061] = 0x5224,
+-  [ 6062] = 0x5229, [ 6063] = 0x522A, [ 6064] = 0x5228, [ 6065] = 0x52AB,
+-  [ 6066] = 0x52A9, [ 6067] = 0x52AA, [ 6068] = 0x52AC, [ 6069] = 0x5323,
+-  [ 6070] = 0x5373, [ 6071] = 0x5375, [ 6072] = 0x541D, [ 6073] = 0x542D,
+-  [ 6074] = 0x541E, [ 6075] = 0x543E, [ 6076] = 0x5426, [ 6077] = 0x544E,
+-  [ 6078] = 0x5427, [ 6079] = 0x5446, [ 6080] = 0x5443, [ 6081] = 0x5433,
+-  [ 6082] = 0x5448, [ 6083] = 0x5442, [ 6084] = 0x541B, [ 6085] = 0x5429,
+-  [ 6086] = 0x544A, [ 6087] = 0x5439, [ 6088] = 0x543B, [ 6089] = 0x5438,
+-  [ 6090] = 0x542E, [ 6091] = 0x5435, [ 6092] = 0x5436, [ 6093] = 0x5420,
+-  [ 6094] = 0x543C, [ 6095] = 0x5440, [ 6096] = 0x5431, [ 6097] = 0x542B,
+-  [ 6098] = 0x541F, [ 6099] = 0x542C, [ 6100] = 0x56EA, [ 6101] = 0x56F0,
+-  [ 6102] = 0x56E4, [ 6103] = 0x56EB, [ 6104] = 0x574A, [ 6105] = 0x5751,
+-  [ 6106] = 0x5740, [ 6107] = 0x574D, [ 6142] = 0x5747, [ 6143] = 0x574E,
+-  [ 6144] = 0x573E, [ 6145] = 0x5750, [ 6146] = 0x574F, [ 6147] = 0x573B,
+-  [ 6148] = 0x58EF, [ 6149] = 0x593E, [ 6150] = 0x599D, [ 6151] = 0x5992,
+-  [ 6152] = 0x59A8, [ 6153] = 0x599E, [ 6154] = 0x59A3, [ 6155] = 0x5999,
+-  [ 6156] = 0x5996, [ 6157] = 0x598D, [ 6158] = 0x59A4, [ 6159] = 0x5993,
+-  [ 6160] = 0x598A, [ 6161] = 0x59A5, [ 6162] = 0x5B5D, [ 6163] = 0x5B5C,
+-  [ 6164] = 0x5B5A, [ 6165] = 0x5B5B, [ 6166] = 0x5B8C, [ 6167] = 0x5B8B,
+-  [ 6168] = 0x5B8F, [ 6169] = 0x5C2C, [ 6170] = 0x5C40, [ 6171] = 0x5C41,
+-  [ 6172] = 0x5C3F, [ 6173] = 0x5C3E, [ 6174] = 0x5C90, [ 6175] = 0x5C91,
+-  [ 6176] = 0x5C94, [ 6177] = 0x5C8C, [ 6178] = 0x5DEB, [ 6179] = 0x5E0C,
+-  [ 6180] = 0x5E8F, [ 6181] = 0x5E87, [ 6182] = 0x5E8A, [ 6183] = 0x5EF7,
+-  [ 6184] = 0x5F04, [ 6185] = 0x5F1F, [ 6186] = 0x5F64, [ 6187] = 0x5F62,
+-  [ 6188] = 0x5F77, [ 6189] = 0x5F79, [ 6190] = 0x5FD8, [ 6191] = 0x5FCC,
+-  [ 6192] = 0x5FD7, [ 6193] = 0x5FCD, [ 6194] = 0x5FF1, [ 6195] = 0x5FEB,
+-  [ 6196] = 0x5FF8, [ 6197] = 0x5FEA, [ 6198] = 0x6212, [ 6199] = 0x6211,
+-  [ 6200] = 0x6284, [ 6201] = 0x6297, [ 6202] = 0x6296, [ 6203] = 0x6280,
+-  [ 6204] = 0x6276, [ 6205] = 0x6289, [ 6206] = 0x626D, [ 6207] = 0x628A,
+-  [ 6208] = 0x627C, [ 6209] = 0x627E, [ 6210] = 0x6279, [ 6211] = 0x6273,
+-  [ 6212] = 0x6292, [ 6213] = 0x626F, [ 6214] = 0x6298, [ 6215] = 0x626E,
+-  [ 6216] = 0x6295, [ 6217] = 0x6293, [ 6218] = 0x6291, [ 6219] = 0x6286,
+-  [ 6220] = 0x6539, [ 6221] = 0x653B, [ 6222] = 0x6538, [ 6223] = 0x65F1,
+-  [ 6224] = 0x66F4, [ 6225] = 0x675F, [ 6226] = 0x674E, [ 6227] = 0x674F,
+-  [ 6228] = 0x6750, [ 6229] = 0x6751, [ 6230] = 0x675C, [ 6231] = 0x6756,
+-  [ 6232] = 0x675E, [ 6233] = 0x6749, [ 6234] = 0x6746, [ 6235] = 0x6760,
+-  [ 6240] = 0x6753, [ 6241] = 0x6757, [ 6242] = 0x6B65, [ 6243] = 0x6BCF,
+-  [ 6244] = 0x6C42, [ 6245] = 0x6C5E, [ 6246] = 0x6C99, [ 6247] = 0x6C81,
+-  [ 6248] = 0x6C88, [ 6249] = 0x6C89, [ 6250] = 0x6C85, [ 6251] = 0x6C9B,
+-  [ 6252] = 0x6C6A, [ 6253] = 0x6C7A, [ 6254] = 0x6C90, [ 6255] = 0x6C70,
+-  [ 6256] = 0x6C8C, [ 6257] = 0x6C68, [ 6258] = 0x6C96, [ 6259] = 0x6C92,
+-  [ 6260] = 0x6C7D, [ 6261] = 0x6C83, [ 6262] = 0x6C72, [ 6263] = 0x6C7E,
+-  [ 6264] = 0x6C74, [ 6265] = 0x6C86, [ 6266] = 0x6C76, [ 6267] = 0x6C8D,
+-  [ 6268] = 0x6C94, [ 6269] = 0x6C98, [ 6270] = 0x6C82, [ 6271] = 0x7076,
+-  [ 6272] = 0x707C, [ 6273] = 0x707D, [ 6274] = 0x7078, [ 6275] = 0x7262,
+-  [ 6276] = 0x7261, [ 6277] = 0x7260, [ 6278] = 0x72C4, [ 6279] = 0x72C2,
+-  [ 6280] = 0x7396, [ 6281] = 0x752C, [ 6282] = 0x752B, [ 6283] = 0x7537,
+-  [ 6284] = 0x7538, [ 6285] = 0x7682, [ 6286] = 0x76EF, [ 6287] = 0x77E3,
+-  [ 6288] = 0x79C1, [ 6289] = 0x79C0, [ 6290] = 0x79BF, [ 6291] = 0x7A76,
+-  [ 6292] = 0x7CFB, [ 6293] = 0x7F55, [ 6294] = 0x8096, [ 6295] = 0x8093,
+-  [ 6296] = 0x809D, [ 6297] = 0x8098, [ 6298] = 0x809B, [ 6299] = 0x809A,
+-  [ 6300] = 0x80B2, [ 6301] = 0x826F, [ 6302] = 0x8292, [ 6337] = 0x828B,
+-  [ 6338] = 0x828D, [ 6339] = 0x898B, [ 6340] = 0x89D2, [ 6341] = 0x8A00,
+-  [ 6342] = 0x8C37, [ 6343] = 0x8C46, [ 6344] = 0x8C55, [ 6345] = 0x8C9D,
+-  [ 6346] = 0x8D64, [ 6347] = 0x8D70, [ 6348] = 0x8DB3, [ 6349] = 0x8EAB,
+-  [ 6350] = 0x8ECA, [ 6351] = 0x8F9B, [ 6352] = 0x8FB0, [ 6353] = 0x8FC2,
+-  [ 6354] = 0x8FC6, [ 6355] = 0x8FC5, [ 6356] = 0x8FC4, [ 6357] = 0x5DE1,
+-  [ 6358] = 0x9091, [ 6359] = 0x90A2, [ 6360] = 0x90AA, [ 6361] = 0x90A6,
+-  [ 6362] = 0x90A3, [ 6363] = 0x9149, [ 6364] = 0x91C6, [ 6365] = 0x91CC,
+-  [ 6366] = 0x9632, [ 6367] = 0x962E, [ 6368] = 0x9631, [ 6369] = 0x962A,
+-  [ 6370] = 0x962C, [ 6371] = 0x4E26, [ 6372] = 0x4E56, [ 6373] = 0x4E73,
+-  [ 6374] = 0x4E8B, [ 6375] = 0x4E9B, [ 6376] = 0x4E9E, [ 6377] = 0x4EAB,
+-  [ 6378] = 0x4EAC, [ 6379] = 0x4F6F, [ 6380] = 0x4F9D, [ 6381] = 0x4F8D,
+-  [ 6382] = 0x4F73, [ 6383] = 0x4F7F, [ 6384] = 0x4F6C, [ 6385] = 0x4F9B,
+-  [ 6386] = 0x4F8B, [ 6387] = 0x4F86, [ 6388] = 0x4F83, [ 6389] = 0x4F70,
+-  [ 6390] = 0x4F75, [ 6391] = 0x4F88, [ 6392] = 0x4F69, [ 6393] = 0x4F7B,
+-  [ 6394] = 0x4F96, [ 6395] = 0x4F7E, [ 6396] = 0x4F8F, [ 6397] = 0x4F91,
+-  [ 6398] = 0x4F7A, [ 6399] = 0x5154, [ 6400] = 0x5152, [ 6401] = 0x5155,
+-  [ 6402] = 0x5169, [ 6403] = 0x5177, [ 6404] = 0x5176, [ 6405] = 0x5178,
+-  [ 6406] = 0x51BD, [ 6407] = 0x51FD, [ 6408] = 0x523B, [ 6409] = 0x5238,
+-  [ 6410] = 0x5237, [ 6411] = 0x523A, [ 6412] = 0x5230, [ 6413] = 0x522E,
+-  [ 6414] = 0x5236, [ 6415] = 0x5241, [ 6416] = 0x52BE, [ 6417] = 0x52BB,
+-  [ 6418] = 0x5352, [ 6419] = 0x5354, [ 6420] = 0x5353, [ 6421] = 0x5351,
+-  [ 6422] = 0x5366, [ 6423] = 0x5377, [ 6424] = 0x5378, [ 6425] = 0x5379,
+-  [ 6426] = 0x53D6, [ 6427] = 0x53D4, [ 6428] = 0x53D7, [ 6429] = 0x5473,
+-  [ 6430] = 0x5475, [ 6435] = 0x5496, [ 6436] = 0x5478, [ 6437] = 0x5495,
+-  [ 6438] = 0x5480, [ 6439] = 0x547B, [ 6440] = 0x5477, [ 6441] = 0x5484,
+-  [ 6442] = 0x5492, [ 6443] = 0x5486, [ 6444] = 0x547C, [ 6445] = 0x5490,
+-  [ 6446] = 0x5471, [ 6447] = 0x5476, [ 6448] = 0x548C, [ 6449] = 0x549A,
+-  [ 6450] = 0x5462, [ 6451] = 0x5468, [ 6452] = 0x548B, [ 6453] = 0x547D,
+-  [ 6454] = 0x548E, [ 6455] = 0x56FA, [ 6456] = 0x5783, [ 6457] = 0x5777,
+-  [ 6458] = 0x576A, [ 6459] = 0x5769, [ 6460] = 0x5761, [ 6461] = 0x5766,
+-  [ 6462] = 0x5764, [ 6463] = 0x577C, [ 6464] = 0x591C, [ 6465] = 0x5949,
+-  [ 6466] = 0x5947, [ 6467] = 0x5948, [ 6468] = 0x5944, [ 6469] = 0x5954,
+-  [ 6470] = 0x59BE, [ 6471] = 0x59BB, [ 6472] = 0x59D4, [ 6473] = 0x59B9,
+-  [ 6474] = 0x59AE, [ 6475] = 0x59D1, [ 6476] = 0x59C6, [ 6477] = 0x59D0,
+-  [ 6478] = 0x59CD, [ 6479] = 0x59CB, [ 6480] = 0x59D3, [ 6481] = 0x59CA,
+-  [ 6482] = 0x59AF, [ 6483] = 0x59B3, [ 6484] = 0x59D2, [ 6485] = 0x59C5,
+-  [ 6486] = 0x5B5F, [ 6487] = 0x5B64, [ 6488] = 0x5B63, [ 6489] = 0x5B97,
+-  [ 6490] = 0x5B9A, [ 6491] = 0x5B98, [ 6492] = 0x5B9C, [ 6493] = 0x5B99,
+-  [ 6494] = 0x5B9B, [ 6495] = 0x5C1A, [ 6496] = 0x5C48, [ 6497] = 0x5C45,
+-  [ 6532] = 0x5C46, [ 6533] = 0x5CB7, [ 6534] = 0x5CA1, [ 6535] = 0x5CB8,
+-  [ 6536] = 0x5CA9, [ 6537] = 0x5CAB, [ 6538] = 0x5CB1, [ 6539] = 0x5CB3,
+-  [ 6540] = 0x5E18, [ 6541] = 0x5E1A, [ 6542] = 0x5E16, [ 6543] = 0x5E15,
+-  [ 6544] = 0x5E1B, [ 6545] = 0x5E11, [ 6546] = 0x5E78, [ 6547] = 0x5E9A,
+-  [ 6548] = 0x5E97, [ 6549] = 0x5E9C, [ 6550] = 0x5E95, [ 6551] = 0x5E96,
+-  [ 6552] = 0x5EF6, [ 6553] = 0x5F26, [ 6554] = 0x5F27, [ 6555] = 0x5F29,
+-  [ 6556] = 0x5F80, [ 6557] = 0x5F81, [ 6558] = 0x5F7F, [ 6559] = 0x5F7C,
+-  [ 6560] = 0x5FDD, [ 6561] = 0x5FE0, [ 6562] = 0x5FFD, [ 6563] = 0x5FF5,
+-  [ 6564] = 0x5FFF, [ 6565] = 0x600F, [ 6566] = 0x6014, [ 6567] = 0x602F,
+-  [ 6568] = 0x6035, [ 6569] = 0x6016, [ 6570] = 0x602A, [ 6571] = 0x6015,
+-  [ 6572] = 0x6021, [ 6573] = 0x6027, [ 6574] = 0x6029, [ 6575] = 0x602B,
+-  [ 6576] = 0x601B, [ 6577] = 0x6216, [ 6578] = 0x6215, [ 6579] = 0x623F,
+-  [ 6580] = 0x623E, [ 6581] = 0x6240, [ 6582] = 0x627F, [ 6583] = 0x62C9,
+-  [ 6584] = 0x62CC, [ 6585] = 0x62C4, [ 6586] = 0x62BF, [ 6587] = 0x62C2,
+-  [ 6588] = 0x62B9, [ 6589] = 0x62D2, [ 6590] = 0x62DB, [ 6591] = 0x62AB,
+-  [ 6592] = 0x62D3, [ 6593] = 0x62D4, [ 6594] = 0x62CB, [ 6595] = 0x62C8,
+-  [ 6596] = 0x62A8, [ 6597] = 0x62BD, [ 6598] = 0x62BC, [ 6599] = 0x62D0,
+-  [ 6600] = 0x62D9, [ 6601] = 0x62C7, [ 6602] = 0x62CD, [ 6603] = 0x62B5,
+-  [ 6604] = 0x62DA, [ 6605] = 0x62B1, [ 6606] = 0x62D8, [ 6607] = 0x62D6,
+-  [ 6608] = 0x62D7, [ 6609] = 0x62C6, [ 6610] = 0x62AC, [ 6611] = 0x62CE,
+-  [ 6612] = 0x653E, [ 6613] = 0x65A7, [ 6614] = 0x65BC, [ 6615] = 0x65FA,
+-  [ 6616] = 0x6614, [ 6617] = 0x6613, [ 6618] = 0x660C, [ 6619] = 0x6606,
+-  [ 6620] = 0x6602, [ 6621] = 0x660E, [ 6622] = 0x6600, [ 6623] = 0x660F,
+-  [ 6624] = 0x6615, [ 6625] = 0x660A, [ 6630] = 0x6607, [ 6631] = 0x670D,
+-  [ 6632] = 0x670B, [ 6633] = 0x676D, [ 6634] = 0x678B, [ 6635] = 0x6795,
+-  [ 6636] = 0x6771, [ 6637] = 0x679C, [ 6638] = 0x6773, [ 6639] = 0x6777,
+-  [ 6640] = 0x6787, [ 6641] = 0x679D, [ 6642] = 0x6797, [ 6643] = 0x676F,
+-  [ 6644] = 0x6770, [ 6645] = 0x677F, [ 6646] = 0x6789, [ 6647] = 0x677E,
+-  [ 6648] = 0x6790, [ 6649] = 0x6775, [ 6650] = 0x679A, [ 6651] = 0x6793,
+-  [ 6652] = 0x677C, [ 6653] = 0x676A, [ 6654] = 0x6772, [ 6655] = 0x6B23,
+-  [ 6656] = 0x6B66, [ 6657] = 0x6B67, [ 6658] = 0x6B7F, [ 6659] = 0x6C13,
+-  [ 6660] = 0x6C1B, [ 6661] = 0x6CE3, [ 6662] = 0x6CE8, [ 6663] = 0x6CF3,
+-  [ 6664] = 0x6CB1, [ 6665] = 0x6CCC, [ 6666] = 0x6CE5, [ 6667] = 0x6CB3,
+-  [ 6668] = 0x6CBD, [ 6669] = 0x6CBE, [ 6670] = 0x6CBC, [ 6671] = 0x6CE2,
+-  [ 6672] = 0x6CAB, [ 6673] = 0x6CD5, [ 6674] = 0x6CD3, [ 6675] = 0x6CB8,
+-  [ 6676] = 0x6CC4, [ 6677] = 0x6CB9, [ 6678] = 0x6CC1, [ 6679] = 0x6CAE,
+-  [ 6680] = 0x6CD7, [ 6681] = 0x6CC5, [ 6682] = 0x6CF1, [ 6683] = 0x6CBF,
+-  [ 6684] = 0x6CBB, [ 6685] = 0x6CE1, [ 6686] = 0x6CDB, [ 6687] = 0x6CCA,
+-  [ 6688] = 0x6CAC, [ 6689] = 0x6CEF, [ 6690] = 0x6CDC, [ 6691] = 0x6CD6,
+-  [ 6692] = 0x6CE0, [ 6727] = 0x7095, [ 6728] = 0x708E, [ 6729] = 0x7092,
+-  [ 6730] = 0x708A, [ 6731] = 0x7099, [ 6732] = 0x722C, [ 6733] = 0x722D,
+-  [ 6734] = 0x7238, [ 6735] = 0x7248, [ 6736] = 0x7267, [ 6737] = 0x7269,
+-  [ 6738] = 0x72C0, [ 6739] = 0x72CE, [ 6740] = 0x72D9, [ 6741] = 0x72D7,
+-  [ 6742] = 0x72D0, [ 6743] = 0x73A9, [ 6744] = 0x73A8, [ 6745] = 0x739F,
+-  [ 6746] = 0x73AB, [ 6747] = 0x73A5, [ 6748] = 0x753D, [ 6749] = 0x759D,
+-  [ 6750] = 0x7599, [ 6751] = 0x759A, [ 6752] = 0x7684, [ 6753] = 0x76C2,
+-  [ 6754] = 0x76F2, [ 6755] = 0x76F4, [ 6756] = 0x77E5, [ 6757] = 0x77FD,
+-  [ 6758] = 0x793E, [ 6759] = 0x7940, [ 6760] = 0x7941, [ 6761] = 0x79C9,
+-  [ 6762] = 0x79C8, [ 6763] = 0x7A7A, [ 6764] = 0x7A79, [ 6765] = 0x7AFA,
+-  [ 6766] = 0x7CFE, [ 6767] = 0x7F54, [ 6768] = 0x7F8C, [ 6769] = 0x7F8B,
+-  [ 6770] = 0x8005, [ 6771] = 0x80BA, [ 6772] = 0x80A5, [ 6773] = 0x80A2,
+-  [ 6774] = 0x80B1, [ 6775] = 0x80A1, [ 6776] = 0x80AB, [ 6777] = 0x80A9,
+-  [ 6778] = 0x80B4, [ 6779] = 0x80AA, [ 6780] = 0x80AF, [ 6781] = 0x81E5,
+-  [ 6782] = 0x81FE, [ 6783] = 0x820D, [ 6784] = 0x82B3, [ 6785] = 0x829D,
+-  [ 6786] = 0x8299, [ 6787] = 0x82AD, [ 6788] = 0x82BD, [ 6789] = 0x829F,
+-  [ 6790] = 0x82B9, [ 6791] = 0x82B1, [ 6792] = 0x82AC, [ 6793] = 0x82A5,
+-  [ 6794] = 0x82AF, [ 6795] = 0x82B8, [ 6796] = 0x82A3, [ 6797] = 0x82B0,
+-  [ 6798] = 0x82BE, [ 6799] = 0x82B7, [ 6800] = 0x864E, [ 6801] = 0x8671,
+-  [ 6802] = 0x521D, [ 6803] = 0x8868, [ 6804] = 0x8ECB, [ 6805] = 0x8FCE,
+-  [ 6806] = 0x8FD4, [ 6807] = 0x8FD1, [ 6808] = 0x90B5, [ 6809] = 0x90B8,
+-  [ 6810] = 0x90B1, [ 6811] = 0x90B6, [ 6812] = 0x91C7, [ 6813] = 0x91D1,
+-  [ 6814] = 0x9577, [ 6815] = 0x9580, [ 6816] = 0x961C, [ 6817] = 0x9640,
+-  [ 6818] = 0x963F, [ 6819] = 0x963B, [ 6820] = 0x9644, [ 6825] = 0x9642,
+-  [ 6826] = 0x96B9, [ 6827] = 0x96E8, [ 6828] = 0x9752, [ 6829] = 0x975E,
+-  [ 6830] = 0x4E9F, [ 6831] = 0x4EAD, [ 6832] = 0x4EAE, [ 6833] = 0x4FE1,
+-  [ 6834] = 0x4FB5, [ 6835] = 0x4FAF, [ 6836] = 0x4FBF, [ 6837] = 0x4FE0,
+-  [ 6838] = 0x4FD1, [ 6839] = 0x4FCF, [ 6840] = 0x4FDD, [ 6841] = 0x4FC3,
+-  [ 6842] = 0x4FB6, [ 6843] = 0x4FD8, [ 6844] = 0x4FDF, [ 6845] = 0x4FCA,
+-  [ 6846] = 0x4FD7, [ 6847] = 0x4FAE, [ 6848] = 0x4FD0, [ 6849] = 0x4FC4,
+-  [ 6850] = 0x4FC2, [ 6851] = 0x4FDA, [ 6852] = 0x4FCE, [ 6853] = 0x4FDE,
+-  [ 6854] = 0x4FB7, [ 6855] = 0x5157, [ 6856] = 0x5192, [ 6857] = 0x5191,
+-  [ 6858] = 0x51A0, [ 6859] = 0x524E, [ 6860] = 0x5243, [ 6861] = 0x524A,
+-  [ 6862] = 0x524D, [ 6863] = 0x524C, [ 6864] = 0x524B, [ 6865] = 0x5247,
+-  [ 6866] = 0x52C7, [ 6867] = 0x52C9, [ 6868] = 0x52C3, [ 6869] = 0x52C1,
+-  [ 6870] = 0x530D, [ 6871] = 0x5357, [ 6872] = 0x537B, [ 6873] = 0x539A,
+-  [ 6874] = 0x53DB, [ 6875] = 0x54AC, [ 6876] = 0x54C0, [ 6877] = 0x54A8,
+-  [ 6878] = 0x54CE, [ 6879] = 0x54C9, [ 6880] = 0x54B8, [ 6881] = 0x54A6,
+-  [ 6882] = 0x54B3, [ 6883] = 0x54C7, [ 6884] = 0x54C2, [ 6885] = 0x54BD,
+-  [ 6886] = 0x54AA, [ 6887] = 0x54C1, [ 6922] = 0x54C4, [ 6923] = 0x54C8,
+-  [ 6924] = 0x54AF, [ 6925] = 0x54AB, [ 6926] = 0x54B1, [ 6927] = 0x54BB,
+-  [ 6928] = 0x54A9, [ 6929] = 0x54A7, [ 6930] = 0x54BF, [ 6931] = 0x56FF,
+-  [ 6932] = 0x5782, [ 6933] = 0x578B, [ 6934] = 0x57A0, [ 6935] = 0x57A3,
+-  [ 6936] = 0x57A2, [ 6937] = 0x57CE, [ 6938] = 0x57AE, [ 6939] = 0x5793,
+-  [ 6940] = 0x5955, [ 6941] = 0x5951, [ 6942] = 0x594F, [ 6943] = 0x594E,
+-  [ 6944] = 0x5950, [ 6945] = 0x59DC, [ 6946] = 0x59D8, [ 6947] = 0x59FF,
+-  [ 6948] = 0x59E3, [ 6949] = 0x59E8, [ 6950] = 0x5A03, [ 6951] = 0x59E5,
+-  [ 6952] = 0x59EA, [ 6953] = 0x59DA, [ 6954] = 0x59E6, [ 6955] = 0x5A01,
+-  [ 6956] = 0x59FB, [ 6957] = 0x5B69, [ 6958] = 0x5BA3, [ 6959] = 0x5BA6,
+-  [ 6960] = 0x5BA4, [ 6961] = 0x5BA2, [ 6962] = 0x5BA5, [ 6963] = 0x5C01,
+-  [ 6964] = 0x5C4E, [ 6965] = 0x5C4F, [ 6966] = 0x5C4D, [ 6967] = 0x5C4B,
+-  [ 6968] = 0x5CD9, [ 6969] = 0x5CD2, [ 6970] = 0x5DF7, [ 6971] = 0x5E1D,
+-  [ 6972] = 0x5E25, [ 6973] = 0x5E1F, [ 6974] = 0x5E7D, [ 6975] = 0x5EA0,
+-  [ 6976] = 0x5EA6, [ 6977] = 0x5EFA, [ 6978] = 0x5F08, [ 6979] = 0x5F2D,
+-  [ 6980] = 0x5F65, [ 6981] = 0x5F88, [ 6982] = 0x5F85, [ 6983] = 0x5F8A,
+-  [ 6984] = 0x5F8B, [ 6985] = 0x5F87, [ 6986] = 0x5F8C, [ 6987] = 0x5F89,
+-  [ 6988] = 0x6012, [ 6989] = 0x601D, [ 6990] = 0x6020, [ 6991] = 0x6025,
+-  [ 6992] = 0x600E, [ 6993] = 0x6028, [ 6994] = 0x604D, [ 6995] = 0x6070,
+-  [ 6996] = 0x6068, [ 6997] = 0x6062, [ 6998] = 0x6046, [ 6999] = 0x6043,
+-  [ 7000] = 0x606C, [ 7001] = 0x606B, [ 7002] = 0x606A, [ 7003] = 0x6064,
+-  [ 7004] = 0x6241, [ 7005] = 0x62DC, [ 7006] = 0x6316, [ 7007] = 0x6309,
+-  [ 7008] = 0x62FC, [ 7009] = 0x62ED, [ 7010] = 0x6301, [ 7011] = 0x62EE,
+-  [ 7012] = 0x62FD, [ 7013] = 0x6307, [ 7014] = 0x62F1, [ 7015] = 0x62F7,
+-  [ 7020] = 0x62EF, [ 7021] = 0x62EC, [ 7022] = 0x62FE, [ 7023] = 0x62F4,
+-  [ 7024] = 0x6311, [ 7025] = 0x6302, [ 7026] = 0x653F, [ 7027] = 0x6545,
+-  [ 7028] = 0x65AB, [ 7029] = 0x65BD, [ 7030] = 0x65E2, [ 7031] = 0x6625,
+-  [ 7032] = 0x662D, [ 7033] = 0x6620, [ 7034] = 0x6627, [ 7035] = 0x662F,
+-  [ 7036] = 0x661F, [ 7037] = 0x6628, [ 7038] = 0x6631, [ 7039] = 0x6624,
+-  [ 7040] = 0x66F7, [ 7041] = 0x67FF, [ 7042] = 0x67D3, [ 7043] = 0x67F1,
+-  [ 7044] = 0x67D4, [ 7045] = 0x67D0, [ 7046] = 0x67EC, [ 7047] = 0x67B6,
+-  [ 7048] = 0x67AF, [ 7049] = 0x67F5, [ 7050] = 0x67E9, [ 7051] = 0x67EF,
+-  [ 7052] = 0x67C4, [ 7053] = 0x67D1, [ 7054] = 0x67B4, [ 7055] = 0x67DA,
+-  [ 7056] = 0x67E5, [ 7057] = 0x67B8, [ 7058] = 0x67CF, [ 7059] = 0x67DE,
+-  [ 7060] = 0x67F3, [ 7061] = 0x67B0, [ 7062] = 0x67D9, [ 7063] = 0x67E2,
+-  [ 7064] = 0x67DD, [ 7065] = 0x67D2, [ 7066] = 0x6B6A, [ 7067] = 0x6B83,
+-  [ 7068] = 0x6B86, [ 7069] = 0x6BB5, [ 7070] = 0x6BD2, [ 7071] = 0x6BD7,
+-  [ 7072] = 0x6C1F, [ 7073] = 0x6CC9, [ 7074] = 0x6D0B, [ 7075] = 0x6D32,
+-  [ 7076] = 0x6D2A, [ 7077] = 0x6D41, [ 7078] = 0x6D25, [ 7079] = 0x6D0C,
+-  [ 7080] = 0x6D31, [ 7081] = 0x6D1E, [ 7082] = 0x6D17, [ 7117] = 0x6D3B,
+-  [ 7118] = 0x6D3D, [ 7119] = 0x6D3E, [ 7120] = 0x6D36, [ 7121] = 0x6D1B,
+-  [ 7122] = 0x6CF5, [ 7123] = 0x6D39, [ 7124] = 0x6D27, [ 7125] = 0x6D38,
+-  [ 7126] = 0x6D29, [ 7127] = 0x6D2E, [ 7128] = 0x6D35, [ 7129] = 0x6D0E,
+-  [ 7130] = 0x6D2B, [ 7131] = 0x70AB, [ 7132] = 0x70BA, [ 7133] = 0x70B3,
+-  [ 7134] = 0x70AC, [ 7135] = 0x70AF, [ 7136] = 0x70AD, [ 7137] = 0x70B8,
+-  [ 7138] = 0x70AE, [ 7139] = 0x70A4, [ 7140] = 0x7230, [ 7141] = 0x7272,
+-  [ 7142] = 0x726F, [ 7143] = 0x7274, [ 7144] = 0x72E9, [ 7145] = 0x72E0,
+-  [ 7146] = 0x72E1, [ 7147] = 0x73B7, [ 7148] = 0x73CA, [ 7149] = 0x73BB,
+-  [ 7150] = 0x73B2, [ 7151] = 0x73CD, [ 7152] = 0x73C0, [ 7153] = 0x73B3,
+-  [ 7154] = 0x751A, [ 7155] = 0x752D, [ 7156] = 0x754F, [ 7157] = 0x754C,
+-  [ 7158] = 0x754E, [ 7159] = 0x754B, [ 7160] = 0x75AB, [ 7161] = 0x75A4,
+-  [ 7162] = 0x75A5, [ 7163] = 0x75A2, [ 7164] = 0x75A3, [ 7165] = 0x7678,
+-  [ 7166] = 0x7686, [ 7167] = 0x7687, [ 7168] = 0x7688, [ 7169] = 0x76C8,
+-  [ 7170] = 0x76C6, [ 7171] = 0x76C3, [ 7172] = 0x76C5, [ 7173] = 0x7701,
+-  [ 7174] = 0x76F9, [ 7175] = 0x76F8, [ 7176] = 0x7709, [ 7177] = 0x770B,
+-  [ 7178] = 0x76FE, [ 7179] = 0x76FC, [ 7180] = 0x7707, [ 7181] = 0x77DC,
+-  [ 7182] = 0x7802, [ 7183] = 0x7814, [ 7184] = 0x780C, [ 7185] = 0x780D,
+-  [ 7186] = 0x7946, [ 7187] = 0x7949, [ 7188] = 0x7948, [ 7189] = 0x7947,
+-  [ 7190] = 0x79B9, [ 7191] = 0x79BA, [ 7192] = 0x79D1, [ 7193] = 0x79D2,
+-  [ 7194] = 0x79CB, [ 7195] = 0x7A7F, [ 7196] = 0x7A81, [ 7197] = 0x7AFF,
+-  [ 7198] = 0x7AFD, [ 7199] = 0x7C7D, [ 7200] = 0x7D02, [ 7201] = 0x7D05,
+-  [ 7202] = 0x7D00, [ 7203] = 0x7D09, [ 7204] = 0x7D07, [ 7205] = 0x7D04,
+-  [ 7206] = 0x7D06, [ 7207] = 0x7F38, [ 7208] = 0x7F8E, [ 7209] = 0x7FBF,
+-  [ 7210] = 0x8004, [ 7215] = 0x8010, [ 7216] = 0x800D, [ 7217] = 0x8011,
+-  [ 7218] = 0x8036, [ 7219] = 0x80D6, [ 7220] = 0x80E5, [ 7221] = 0x80DA,
+-  [ 7222] = 0x80C3, [ 7223] = 0x80C4, [ 7224] = 0x80CC, [ 7225] = 0x80E1,
+-  [ 7226] = 0x80DB, [ 7227] = 0x80CE, [ 7228] = 0x80DE, [ 7229] = 0x80E4,
+-  [ 7230] = 0x80DD, [ 7231] = 0x81F4, [ 7232] = 0x8222, [ 7233] = 0x82E7,
+-  [ 7234] = 0x8303, [ 7235] = 0x8305, [ 7236] = 0x82E3, [ 7237] = 0x82DB,
+-  [ 7238] = 0x82E6, [ 7239] = 0x8304, [ 7240] = 0x82E5, [ 7241] = 0x8302,
+-  [ 7242] = 0x8309, [ 7243] = 0x82D2, [ 7244] = 0x82D7, [ 7245] = 0x82F1,
+-  [ 7246] = 0x8301, [ 7247] = 0x82DC, [ 7248] = 0x82D4, [ 7249] = 0x82D1,
+-  [ 7250] = 0x82DE, [ 7251] = 0x82D3, [ 7252] = 0x82DF, [ 7253] = 0x82EF,
+-  [ 7254] = 0x8306, [ 7255] = 0x8650, [ 7256] = 0x8679, [ 7257] = 0x867B,
+-  [ 7258] = 0x867A, [ 7259] = 0x884D, [ 7260] = 0x886B, [ 7261] = 0x8981,
+-  [ 7262] = 0x89D4, [ 7263] = 0x8A08, [ 7264] = 0x8A02, [ 7265] = 0x8A03,
+-  [ 7266] = 0x8C9E, [ 7267] = 0x8CA0, [ 7268] = 0x8D74, [ 7269] = 0x8D73,
+-  [ 7270] = 0x8DB4, [ 7271] = 0x8ECD, [ 7272] = 0x8ECC, [ 7273] = 0x8FF0,
+-  [ 7274] = 0x8FE6, [ 7275] = 0x8FE2, [ 7276] = 0x8FEA, [ 7277] = 0x8FE5,
+-  [ 7312] = 0x8FED, [ 7313] = 0x8FEB, [ 7314] = 0x8FE4, [ 7315] = 0x8FE8,
+-  [ 7316] = 0x90CA, [ 7317] = 0x90CE, [ 7318] = 0x90C1, [ 7319] = 0x90C3,
+-  [ 7320] = 0x914B, [ 7321] = 0x914A, [ 7322] = 0x91CD, [ 7323] = 0x9582,
+-  [ 7324] = 0x9650, [ 7325] = 0x964B, [ 7326] = 0x964C, [ 7327] = 0x964D,
+-  [ 7328] = 0x9762, [ 7329] = 0x9769, [ 7330] = 0x97CB, [ 7331] = 0x97ED,
+-  [ 7332] = 0x97F3, [ 7333] = 0x9801, [ 7334] = 0x98A8, [ 7335] = 0x98DB,
+-  [ 7336] = 0x98DF, [ 7337] = 0x9996, [ 7338] = 0x9999, [ 7339] = 0x4E58,
+-  [ 7340] = 0x4EB3, [ 7341] = 0x500C, [ 7342] = 0x500D, [ 7343] = 0x5023,
+-  [ 7344] = 0x4FEF, [ 7345] = 0x5026, [ 7346] = 0x5025, [ 7347] = 0x4FF8,
+-  [ 7348] = 0x5029, [ 7349] = 0x5016, [ 7350] = 0x5006, [ 7351] = 0x503C,
+-  [ 7352] = 0x501F, [ 7353] = 0x501A, [ 7354] = 0x5012, [ 7355] = 0x5011,
+-  [ 7356] = 0x4FFA, [ 7357] = 0x5000, [ 7358] = 0x5014, [ 7359] = 0x5028,
+-  [ 7360] = 0x4FF1, [ 7361] = 0x5021, [ 7362] = 0x500B, [ 7363] = 0x5019,
+-  [ 7364] = 0x5018, [ 7365] = 0x4FF3, [ 7366] = 0x4FEE, [ 7367] = 0x502D,
+-  [ 7368] = 0x502A, [ 7369] = 0x4FFE, [ 7370] = 0x502B, [ 7371] = 0x5009,
+-  [ 7372] = 0x517C, [ 7373] = 0x51A4, [ 7374] = 0x51A5, [ 7375] = 0x51A2,
+-  [ 7376] = 0x51CD, [ 7377] = 0x51CC, [ 7378] = 0x51C6, [ 7379] = 0x51CB,
+-  [ 7380] = 0x5256, [ 7381] = 0x525C, [ 7382] = 0x5254, [ 7383] = 0x525B,
+-  [ 7384] = 0x525D, [ 7385] = 0x532A, [ 7386] = 0x537F, [ 7387] = 0x539F,
+-  [ 7388] = 0x539D, [ 7389] = 0x53DF, [ 7390] = 0x54E8, [ 7391] = 0x5510,
+-  [ 7392] = 0x5501, [ 7393] = 0x5537, [ 7394] = 0x54FC, [ 7395] = 0x54E5,
+-  [ 7396] = 0x54F2, [ 7397] = 0x5506, [ 7398] = 0x54FA, [ 7399] = 0x5514,
+-  [ 7400] = 0x54E9, [ 7401] = 0x54ED, [ 7402] = 0x54E1, [ 7403] = 0x5509,
+-  [ 7404] = 0x54EE, [ 7405] = 0x54EA, [ 7410] = 0x54E6, [ 7411] = 0x5527,
+-  [ 7412] = 0x5507, [ 7413] = 0x54FD, [ 7414] = 0x550F, [ 7415] = 0x5703,
+-  [ 7416] = 0x5704, [ 7417] = 0x57C2, [ 7418] = 0x57D4, [ 7419] = 0x57CB,
+-  [ 7420] = 0x57C3, [ 7421] = 0x5809, [ 7422] = 0x590F, [ 7423] = 0x5957,
+-  [ 7424] = 0x5958, [ 7425] = 0x595A, [ 7426] = 0x5A11, [ 7427] = 0x5A18,
+-  [ 7428] = 0x5A1C, [ 7429] = 0x5A1F, [ 7430] = 0x5A1B, [ 7431] = 0x5A13,
+-  [ 7432] = 0x59EC, [ 7433] = 0x5A20, [ 7434] = 0x5A23, [ 7435] = 0x5A29,
+-  [ 7436] = 0x5A25, [ 7437] = 0x5A0C, [ 7438] = 0x5A09, [ 7439] = 0x5B6B,
+-  [ 7440] = 0x5C58, [ 7441] = 0x5BB0, [ 7442] = 0x5BB3, [ 7443] = 0x5BB6,
+-  [ 7444] = 0x5BB4, [ 7445] = 0x5BAE, [ 7446] = 0x5BB5, [ 7447] = 0x5BB9,
+-  [ 7448] = 0x5BB8, [ 7449] = 0x5C04, [ 7450] = 0x5C51, [ 7451] = 0x5C55,
+-  [ 7452] = 0x5C50, [ 7453] = 0x5CED, [ 7454] = 0x5CFD, [ 7455] = 0x5CFB,
+-  [ 7456] = 0x5CEA, [ 7457] = 0x5CE8, [ 7458] = 0x5CF0, [ 7459] = 0x5CF6,
+-  [ 7460] = 0x5D01, [ 7461] = 0x5CF4, [ 7462] = 0x5DEE, [ 7463] = 0x5E2D,
+-  [ 7464] = 0x5E2B, [ 7465] = 0x5EAB, [ 7466] = 0x5EAD, [ 7467] = 0x5EA7,
+-  [ 7468] = 0x5F31, [ 7469] = 0x5F92, [ 7470] = 0x5F91, [ 7471] = 0x5F90,
+-  [ 7472] = 0x6059, [ 7507] = 0x6063, [ 7508] = 0x6065, [ 7509] = 0x6050,
+-  [ 7510] = 0x6055, [ 7511] = 0x606D, [ 7512] = 0x6069, [ 7513] = 0x606F,
+-  [ 7514] = 0x6084, [ 7515] = 0x609F, [ 7516] = 0x609A, [ 7517] = 0x608D,
+-  [ 7518] = 0x6094, [ 7519] = 0x608C, [ 7520] = 0x6085, [ 7521] = 0x6096,
+-  [ 7522] = 0x6247, [ 7523] = 0x62F3, [ 7524] = 0x6308, [ 7525] = 0x62FF,
+-  [ 7526] = 0x634E, [ 7527] = 0x633E, [ 7528] = 0x632F, [ 7529] = 0x6355,
+-  [ 7530] = 0x6342, [ 7531] = 0x6346, [ 7532] = 0x634F, [ 7533] = 0x6349,
+-  [ 7534] = 0x633A, [ 7535] = 0x6350, [ 7536] = 0x633D, [ 7537] = 0x632A,
+-  [ 7538] = 0x632B, [ 7539] = 0x6328, [ 7540] = 0x634D, [ 7541] = 0x634C,
+-  [ 7542] = 0x6548, [ 7543] = 0x6549, [ 7544] = 0x6599, [ 7545] = 0x65C1,
+-  [ 7546] = 0x65C5, [ 7547] = 0x6642, [ 7548] = 0x6649, [ 7549] = 0x664F,
+-  [ 7550] = 0x6643, [ 7551] = 0x6652, [ 7552] = 0x664C, [ 7553] = 0x6645,
+-  [ 7554] = 0x6641, [ 7555] = 0x66F8, [ 7556] = 0x6714, [ 7557] = 0x6715,
+-  [ 7558] = 0x6717, [ 7559] = 0x6821, [ 7560] = 0x6838, [ 7561] = 0x6848,
+-  [ 7562] = 0x6846, [ 7563] = 0x6853, [ 7564] = 0x6839, [ 7565] = 0x6842,
+-  [ 7566] = 0x6854, [ 7567] = 0x6829, [ 7568] = 0x68B3, [ 7569] = 0x6817,
+-  [ 7570] = 0x684C, [ 7571] = 0x6851, [ 7572] = 0x683D, [ 7573] = 0x67F4,
+-  [ 7574] = 0x6850, [ 7575] = 0x6840, [ 7576] = 0x683C, [ 7577] = 0x6843,
+-  [ 7578] = 0x682A, [ 7579] = 0x6845, [ 7580] = 0x6813, [ 7581] = 0x6818,
+-  [ 7582] = 0x6841, [ 7583] = 0x6B8A, [ 7584] = 0x6B89, [ 7585] = 0x6BB7,
+-  [ 7586] = 0x6C23, [ 7587] = 0x6C27, [ 7588] = 0x6C28, [ 7589] = 0x6C26,
+-  [ 7590] = 0x6C24, [ 7591] = 0x6CF0, [ 7592] = 0x6D6A, [ 7593] = 0x6D95,
+-  [ 7594] = 0x6D88, [ 7595] = 0x6D87, [ 7596] = 0x6D66, [ 7597] = 0x6D78,
+-  [ 7598] = 0x6D77, [ 7599] = 0x6D59, [ 7600] = 0x6D93, [ 7605] = 0x6D6C,
+-  [ 7606] = 0x6D89, [ 7607] = 0x6D6E, [ 7608] = 0x6D5A, [ 7609] = 0x6D74,
+-  [ 7610] = 0x6D69, [ 7611] = 0x6D8C, [ 7612] = 0x6D8A, [ 7613] = 0x6D79,
+-  [ 7614] = 0x6D85, [ 7615] = 0x6D65, [ 7616] = 0x6D94, [ 7617] = 0x70CA,
+-  [ 7618] = 0x70D8, [ 7619] = 0x70E4, [ 7620] = 0x70D9, [ 7621] = 0x70C8,
+-  [ 7622] = 0x70CF, [ 7623] = 0x7239, [ 7624] = 0x7279, [ 7625] = 0x72FC,
+-  [ 7626] = 0x72F9, [ 7627] = 0x72FD, [ 7628] = 0x72F8, [ 7629] = 0x72F7,
+-  [ 7630] = 0x7386, [ 7631] = 0x73ED, [ 7632] = 0x7409, [ 7633] = 0x73EE,
+-  [ 7634] = 0x73E0, [ 7635] = 0x73EA, [ 7636] = 0x73DE, [ 7637] = 0x7554,
+-  [ 7638] = 0x755D, [ 7639] = 0x755C, [ 7640] = 0x755A, [ 7641] = 0x7559,
+-  [ 7642] = 0x75BE, [ 7643] = 0x75C5, [ 7644] = 0x75C7, [ 7645] = 0x75B2,
+-  [ 7646] = 0x75B3, [ 7647] = 0x75BD, [ 7648] = 0x75BC, [ 7649] = 0x75B9,
+-  [ 7650] = 0x75C2, [ 7651] = 0x75B8, [ 7652] = 0x768B, [ 7653] = 0x76B0,
+-  [ 7654] = 0x76CA, [ 7655] = 0x76CD, [ 7656] = 0x76CE, [ 7657] = 0x7729,
+-  [ 7658] = 0x771F, [ 7659] = 0x7720, [ 7660] = 0x7728, [ 7661] = 0x77E9,
+-  [ 7662] = 0x7830, [ 7663] = 0x7827, [ 7664] = 0x7838, [ 7665] = 0x781D,
+-  [ 7666] = 0x7834, [ 7667] = 0x7837, [ 7702] = 0x7825, [ 7703] = 0x782D,
+-  [ 7704] = 0x7820, [ 7705] = 0x781F, [ 7706] = 0x7832, [ 7707] = 0x7955,
+-  [ 7708] = 0x7950, [ 7709] = 0x7960, [ 7710] = 0x795F, [ 7711] = 0x7956,
+-  [ 7712] = 0x795E, [ 7713] = 0x795D, [ 7714] = 0x7957, [ 7715] = 0x795A,
+-  [ 7716] = 0x79E4, [ 7717] = 0x79E3, [ 7718] = 0x79E7, [ 7719] = 0x79DF,
+-  [ 7720] = 0x79E6, [ 7721] = 0x79E9, [ 7722] = 0x79D8, [ 7723] = 0x7A84,
+-  [ 7724] = 0x7A88, [ 7725] = 0x7AD9, [ 7726] = 0x7B06, [ 7727] = 0x7B11,
+-  [ 7728] = 0x7C89, [ 7729] = 0x7D21, [ 7730] = 0x7D17, [ 7731] = 0x7D0B,
+-  [ 7732] = 0x7D0A, [ 7733] = 0x7D20, [ 7734] = 0x7D22, [ 7735] = 0x7D14,
+-  [ 7736] = 0x7D10, [ 7737] = 0x7D15, [ 7738] = 0x7D1A, [ 7739] = 0x7D1C,
+-  [ 7740] = 0x7D0D, [ 7741] = 0x7D19, [ 7742] = 0x7D1B, [ 7743] = 0x7F3A,
+-  [ 7744] = 0x7F5F, [ 7745] = 0x7F94, [ 7746] = 0x7FC5, [ 7747] = 0x7FC1,
+-  [ 7748] = 0x8006, [ 7749] = 0x8018, [ 7750] = 0x8015, [ 7751] = 0x8019,
+-  [ 7752] = 0x8017, [ 7753] = 0x803D, [ 7754] = 0x803F, [ 7755] = 0x80F1,
+-  [ 7756] = 0x8102, [ 7757] = 0x80F0, [ 7758] = 0x8105, [ 7759] = 0x80ED,
+-  [ 7760] = 0x80F4, [ 7761] = 0x8106, [ 7762] = 0x80F8, [ 7763] = 0x80F3,
+-  [ 7764] = 0x8108, [ 7765] = 0x80FD, [ 7766] = 0x810A, [ 7767] = 0x80FC,
+-  [ 7768] = 0x80EF, [ 7769] = 0x81ED, [ 7770] = 0x81EC, [ 7771] = 0x8200,
+-  [ 7772] = 0x8210, [ 7773] = 0x822A, [ 7774] = 0x822B, [ 7775] = 0x8228,
+-  [ 7776] = 0x822C, [ 7777] = 0x82BB, [ 7778] = 0x832B, [ 7779] = 0x8352,
+-  [ 7780] = 0x8354, [ 7781] = 0x834A, [ 7782] = 0x8338, [ 7783] = 0x8350,
+-  [ 7784] = 0x8349, [ 7785] = 0x8335, [ 7786] = 0x8334, [ 7787] = 0x834F,
+-  [ 7788] = 0x8332, [ 7789] = 0x8339, [ 7790] = 0x8336, [ 7791] = 0x8317,
+-  [ 7792] = 0x8340, [ 7793] = 0x8331, [ 7794] = 0x8328, [ 7795] = 0x8343,
+-  [ 7800] = 0x8654, [ 7801] = 0x868A, [ 7802] = 0x86AA, [ 7803] = 0x8693,
+-  [ 7804] = 0x86A4, [ 7805] = 0x86A9, [ 7806] = 0x868C, [ 7807] = 0x86A3,
+-  [ 7808] = 0x869C, [ 7809] = 0x8870, [ 7810] = 0x8877, [ 7811] = 0x8881,
+-  [ 7812] = 0x8882, [ 7813] = 0x887D, [ 7814] = 0x8879, [ 7815] = 0x8A18,
+-  [ 7816] = 0x8A10, [ 7817] = 0x8A0E, [ 7818] = 0x8A0C, [ 7819] = 0x8A15,
+-  [ 7820] = 0x8A0A, [ 7821] = 0x8A17, [ 7822] = 0x8A13, [ 7823] = 0x8A16,
+-  [ 7824] = 0x8A0F, [ 7825] = 0x8A11, [ 7826] = 0x8C48, [ 7827] = 0x8C7A,
+-  [ 7828] = 0x8C79, [ 7829] = 0x8CA1, [ 7830] = 0x8CA2, [ 7831] = 0x8D77,
+-  [ 7832] = 0x8EAC, [ 7833] = 0x8ED2, [ 7834] = 0x8ED4, [ 7835] = 0x8ECF,
+-  [ 7836] = 0x8FB1, [ 7837] = 0x9001, [ 7838] = 0x9006, [ 7839] = 0x8FF7,
+-  [ 7840] = 0x9000, [ 7841] = 0x8FFA, [ 7842] = 0x8FF4, [ 7843] = 0x9003,
+-  [ 7844] = 0x8FFD, [ 7845] = 0x9005, [ 7846] = 0x8FF8, [ 7847] = 0x9095,
+-  [ 7848] = 0x90E1, [ 7849] = 0x90DD, [ 7850] = 0x90E2, [ 7851] = 0x9152,
+-  [ 7852] = 0x914D, [ 7853] = 0x914C, [ 7854] = 0x91D8, [ 7855] = 0x91DD,
+-  [ 7856] = 0x91D7, [ 7857] = 0x91DC, [ 7858] = 0x91D9, [ 7859] = 0x9583,
+-  [ 7860] = 0x9662, [ 7861] = 0x9663, [ 7862] = 0x9661, [ 7897] = 0x965B,
+-  [ 7898] = 0x965D, [ 7899] = 0x9664, [ 7900] = 0x9658, [ 7901] = 0x965E,
+-  [ 7902] = 0x96BB, [ 7903] = 0x98E2, [ 7904] = 0x99AC, [ 7905] = 0x9AA8,
+-  [ 7906] = 0x9AD8, [ 7907] = 0x9B25, [ 7908] = 0x9B32, [ 7909] = 0x9B3C,
+-  [ 7910] = 0x4E7E, [ 7911] = 0x507A, [ 7912] = 0x507D, [ 7913] = 0x505C,
+-  [ 7914] = 0x5047, [ 7915] = 0x5043, [ 7916] = 0x504C, [ 7917] = 0x505A,
+-  [ 7918] = 0x5049, [ 7919] = 0x5065, [ 7920] = 0x5076, [ 7921] = 0x504E,
+-  [ 7922] = 0x5055, [ 7923] = 0x5075, [ 7924] = 0x5074, [ 7925] = 0x5077,
+-  [ 7926] = 0x504F, [ 7927] = 0x500F, [ 7928] = 0x506F, [ 7929] = 0x506D,
+-  [ 7930] = 0x515C, [ 7931] = 0x5195, [ 7932] = 0x51F0, [ 7933] = 0x526A,
+-  [ 7934] = 0x526F, [ 7935] = 0x52D2, [ 7936] = 0x52D9, [ 7937] = 0x52D8,
+-  [ 7938] = 0x52D5, [ 7939] = 0x5310, [ 7940] = 0x530F, [ 7941] = 0x5319,
+-  [ 7942] = 0x533F, [ 7943] = 0x5340, [ 7944] = 0x533E, [ 7945] = 0x53C3,
+-  [ 7946] = 0x66FC, [ 7947] = 0x5546, [ 7948] = 0x556A, [ 7949] = 0x5566,
+-  [ 7950] = 0x5544, [ 7951] = 0x555E, [ 7952] = 0x5561, [ 7953] = 0x5543,
+-  [ 7954] = 0x554A, [ 7955] = 0x5531, [ 7956] = 0x5556, [ 7957] = 0x554F,
+-  [ 7958] = 0x5555, [ 7959] = 0x552F, [ 7960] = 0x5564, [ 7961] = 0x5538,
+-  [ 7962] = 0x552E, [ 7963] = 0x555C, [ 7964] = 0x552C, [ 7965] = 0x5563,
+-  [ 7966] = 0x5533, [ 7967] = 0x5541, [ 7968] = 0x5557, [ 7969] = 0x5708,
+-  [ 7970] = 0x570B, [ 7971] = 0x5709, [ 7972] = 0x57DF, [ 7973] = 0x5805,
+-  [ 7974] = 0x580A, [ 7975] = 0x5806, [ 7976] = 0x57E0, [ 7977] = 0x57E4,
+-  [ 7978] = 0x57FA, [ 7979] = 0x5802, [ 7980] = 0x5835, [ 7981] = 0x57F7,
+-  [ 7982] = 0x57F9, [ 7983] = 0x5920, [ 7984] = 0x5962, [ 7985] = 0x5A36,
+-  [ 7986] = 0x5A41, [ 7987] = 0x5A49, [ 7988] = 0x5A66, [ 7989] = 0x5A6A,
+-  [ 7990] = 0x5A40, [ 7995] = 0x5A3C, [ 7996] = 0x5A62, [ 7997] = 0x5A5A,
+-  [ 7998] = 0x5A46, [ 7999] = 0x5A4A, [ 8000] = 0x5B70, [ 8001] = 0x5BC7,
+-  [ 8002] = 0x5BC5, [ 8003] = 0x5BC4, [ 8004] = 0x5BC2, [ 8005] = 0x5BBF,
+-  [ 8006] = 0x5BC6, [ 8007] = 0x5C09, [ 8008] = 0x5C08, [ 8009] = 0x5C07,
+-  [ 8010] = 0x5C60, [ 8011] = 0x5C5C, [ 8012] = 0x5C5D, [ 8013] = 0x5D07,
+-  [ 8014] = 0x5D06, [ 8015] = 0x5D0E, [ 8016] = 0x5D1B, [ 8017] = 0x5D16,
+-  [ 8018] = 0x5D22, [ 8019] = 0x5D11, [ 8020] = 0x5D29, [ 8021] = 0x5D14,
+-  [ 8022] = 0x5D19, [ 8023] = 0x5D24, [ 8024] = 0x5D27, [ 8025] = 0x5D17,
+-  [ 8026] = 0x5DE2, [ 8027] = 0x5E38, [ 8028] = 0x5E36, [ 8029] = 0x5E33,
+-  [ 8030] = 0x5E37, [ 8031] = 0x5EB7, [ 8032] = 0x5EB8, [ 8033] = 0x5EB6,
+-  [ 8034] = 0x5EB5, [ 8035] = 0x5EBE, [ 8036] = 0x5F35, [ 8037] = 0x5F37,
+-  [ 8038] = 0x5F57, [ 8039] = 0x5F6C, [ 8040] = 0x5F69, [ 8041] = 0x5F6B,
+-  [ 8042] = 0x5F97, [ 8043] = 0x5F99, [ 8044] = 0x5F9E, [ 8045] = 0x5F98,
+-  [ 8046] = 0x5FA1, [ 8047] = 0x5FA0, [ 8048] = 0x5F9C, [ 8049] = 0x607F,
+-  [ 8050] = 0x60A3, [ 8051] = 0x6089, [ 8052] = 0x60A0, [ 8053] = 0x60A8,
+-  [ 8054] = 0x60CB, [ 8055] = 0x60B4, [ 8056] = 0x60E6, [ 8057] = 0x60BD,
+-  [ 8092] = 0x60C5, [ 8093] = 0x60BB, [ 8094] = 0x60B5, [ 8095] = 0x60DC,
+-  [ 8096] = 0x60BC, [ 8097] = 0x60D8, [ 8098] = 0x60D5, [ 8099] = 0x60C6,
+-  [ 8100] = 0x60DF, [ 8101] = 0x60B8, [ 8102] = 0x60DA, [ 8103] = 0x60C7,
+-  [ 8104] = 0x621A, [ 8105] = 0x621B, [ 8106] = 0x6248, [ 8107] = 0x63A0,
+-  [ 8108] = 0x63A7, [ 8109] = 0x6372, [ 8110] = 0x6396, [ 8111] = 0x63A2,
+-  [ 8112] = 0x63A5, [ 8113] = 0x6377, [ 8114] = 0x6367, [ 8115] = 0x6398,
+-  [ 8116] = 0x63AA, [ 8117] = 0x6371, [ 8118] = 0x63A9, [ 8119] = 0x6389,
+-  [ 8120] = 0x6383, [ 8121] = 0x639B, [ 8122] = 0x636B, [ 8123] = 0x63A8,
+-  [ 8124] = 0x6384, [ 8125] = 0x6388, [ 8126] = 0x6399, [ 8127] = 0x63A1,
+-  [ 8128] = 0x63AC, [ 8129] = 0x6392, [ 8130] = 0x638F, [ 8131] = 0x6380,
+-  [ 8132] = 0x637B, [ 8133] = 0x6369, [ 8134] = 0x6368, [ 8135] = 0x637A,
+-  [ 8136] = 0x655D, [ 8137] = 0x6556, [ 8138] = 0x6551, [ 8139] = 0x6559,
+-  [ 8140] = 0x6557, [ 8141] = 0x555F, [ 8142] = 0x654F, [ 8143] = 0x6558,
+-  [ 8144] = 0x6555, [ 8145] = 0x6554, [ 8146] = 0x659C, [ 8147] = 0x659B,
+-  [ 8148] = 0x65AC, [ 8149] = 0x65CF, [ 8150] = 0x65CB, [ 8151] = 0x65CC,
+-  [ 8152] = 0x65CE, [ 8153] = 0x665D, [ 8154] = 0x665A, [ 8155] = 0x6664,
+-  [ 8156] = 0x6668, [ 8157] = 0x6666, [ 8158] = 0x665E, [ 8159] = 0x66F9,
+-  [ 8160] = 0x52D7, [ 8161] = 0x671B, [ 8162] = 0x6881, [ 8163] = 0x68AF,
+-  [ 8164] = 0x68A2, [ 8165] = 0x6893, [ 8166] = 0x68B5, [ 8167] = 0x687F,
+-  [ 8168] = 0x6876, [ 8169] = 0x68B1, [ 8170] = 0x68A7, [ 8171] = 0x6897,
+-  [ 8172] = 0x68B0, [ 8173] = 0x6883, [ 8174] = 0x68C4, [ 8175] = 0x68AD,
+-  [ 8176] = 0x6886, [ 8177] = 0x6885, [ 8178] = 0x6894, [ 8179] = 0x689D,
+-  [ 8180] = 0x68A8, [ 8181] = 0x689F, [ 8182] = 0x68A1, [ 8183] = 0x6882,
+-  [ 8184] = 0x6B32, [ 8185] = 0x6BBA, [ 8190] = 0x6BEB, [ 8191] = 0x6BEC,
+-  [ 8192] = 0x6C2B, [ 8193] = 0x6D8E, [ 8194] = 0x6DBC, [ 8195] = 0x6DF3,
+-  [ 8196] = 0x6DD9, [ 8197] = 0x6DB2, [ 8198] = 0x6DE1, [ 8199] = 0x6DCC,
+-  [ 8200] = 0x6DE4, [ 8201] = 0x6DFB, [ 8202] = 0x6DFA, [ 8203] = 0x6E05,
+-  [ 8204] = 0x6DC7, [ 8205] = 0x6DCB, [ 8206] = 0x6DAF, [ 8207] = 0x6DD1,
+-  [ 8208] = 0x6DAE, [ 8209] = 0x6DDE, [ 8210] = 0x6DF9, [ 8211] = 0x6DB8,
+-  [ 8212] = 0x6DF7, [ 8213] = 0x6DF5, [ 8214] = 0x6DC5, [ 8215] = 0x6DD2,
+-  [ 8216] = 0x6E1A, [ 8217] = 0x6DB5, [ 8218] = 0x6DDA, [ 8219] = 0x6DEB,
+-  [ 8220] = 0x6DD8, [ 8221] = 0x6DEA, [ 8222] = 0x6DF1, [ 8223] = 0x6DEE,
+-  [ 8224] = 0x6DE8, [ 8225] = 0x6DC6, [ 8226] = 0x6DC4, [ 8227] = 0x6DAA,
+-  [ 8228] = 0x6DEC, [ 8229] = 0x6DBF, [ 8230] = 0x6DE6, [ 8231] = 0x70F9,
+-  [ 8232] = 0x7109, [ 8233] = 0x710A, [ 8234] = 0x70FD, [ 8235] = 0x70EF,
+-  [ 8236] = 0x723D, [ 8237] = 0x727D, [ 8238] = 0x7281, [ 8239] = 0x731C,
+-  [ 8240] = 0x731B, [ 8241] = 0x7316, [ 8242] = 0x7313, [ 8243] = 0x7319,
+-  [ 8244] = 0x7387, [ 8245] = 0x7405, [ 8246] = 0x740A, [ 8247] = 0x7403,
+-  [ 8248] = 0x7406, [ 8249] = 0x73FE, [ 8250] = 0x740D, [ 8251] = 0x74E0,
+-  [ 8252] = 0x74F6, [ 8287] = 0x74F7, [ 8288] = 0x751C, [ 8289] = 0x7522,
+-  [ 8290] = 0x7565, [ 8291] = 0x7566, [ 8292] = 0x7562, [ 8293] = 0x7570,
+-  [ 8294] = 0x758F, [ 8295] = 0x75D4, [ 8296] = 0x75D5, [ 8297] = 0x75B5,
+-  [ 8298] = 0x75CA, [ 8299] = 0x75CD, [ 8300] = 0x768E, [ 8301] = 0x76D4,
+-  [ 8302] = 0x76D2, [ 8303] = 0x76DB, [ 8304] = 0x7737, [ 8305] = 0x773E,
+-  [ 8306] = 0x773C, [ 8307] = 0x7736, [ 8308] = 0x7738, [ 8309] = 0x773A,
+-  [ 8310] = 0x786B, [ 8311] = 0x7843, [ 8312] = 0x784E, [ 8313] = 0x7965,
+-  [ 8314] = 0x7968, [ 8315] = 0x796D, [ 8316] = 0x79FB, [ 8317] = 0x7A92,
+-  [ 8318] = 0x7A95, [ 8319] = 0x7B20, [ 8320] = 0x7B28, [ 8321] = 0x7B1B,
+-  [ 8322] = 0x7B2C, [ 8323] = 0x7B26, [ 8324] = 0x7B19, [ 8325] = 0x7B1E,
+-  [ 8326] = 0x7B2E, [ 8327] = 0x7C92, [ 8328] = 0x7C97, [ 8329] = 0x7C95,
+-  [ 8330] = 0x7D46, [ 8331] = 0x7D43, [ 8332] = 0x7D71, [ 8333] = 0x7D2E,
+-  [ 8334] = 0x7D39, [ 8335] = 0x7D3C, [ 8336] = 0x7D40, [ 8337] = 0x7D30,
+-  [ 8338] = 0x7D33, [ 8339] = 0x7D44, [ 8340] = 0x7D2F, [ 8341] = 0x7D42,
+-  [ 8342] = 0x7D32, [ 8343] = 0x7D31, [ 8344] = 0x7F3D, [ 8345] = 0x7F9E,
+-  [ 8346] = 0x7F9A, [ 8347] = 0x7FCC, [ 8348] = 0x7FCE, [ 8349] = 0x7FD2,
+-  [ 8350] = 0x801C, [ 8351] = 0x804A, [ 8352] = 0x8046, [ 8353] = 0x812F,
+-  [ 8354] = 0x8116, [ 8355] = 0x8123, [ 8356] = 0x812B, [ 8357] = 0x8129,
+-  [ 8358] = 0x8130, [ 8359] = 0x8124, [ 8360] = 0x8202, [ 8361] = 0x8235,
+-  [ 8362] = 0x8237, [ 8363] = 0x8236, [ 8364] = 0x8239, [ 8365] = 0x838E,
+-  [ 8366] = 0x839E, [ 8367] = 0x8398, [ 8368] = 0x8378, [ 8369] = 0x83A2,
+-  [ 8370] = 0x8396, [ 8371] = 0x83BD, [ 8372] = 0x83AB, [ 8373] = 0x8392,
+-  [ 8374] = 0x838A, [ 8375] = 0x8393, [ 8376] = 0x8389, [ 8377] = 0x83A0,
+-  [ 8378] = 0x8377, [ 8379] = 0x837B, [ 8380] = 0x837C, [ 8385] = 0x8386,
+-  [ 8386] = 0x83A7, [ 8387] = 0x8655, [ 8388] = 0x5F6A, [ 8389] = 0x86C7,
+-  [ 8390] = 0x86C0, [ 8391] = 0x86B6, [ 8392] = 0x86C4, [ 8393] = 0x86B5,
+-  [ 8394] = 0x86C6, [ 8395] = 0x86CB, [ 8396] = 0x86B1, [ 8397] = 0x86AF,
+-  [ 8398] = 0x86C9, [ 8399] = 0x8853, [ 8400] = 0x889E, [ 8401] = 0x8888,
+-  [ 8402] = 0x88AB, [ 8403] = 0x8892, [ 8404] = 0x8896, [ 8405] = 0x888D,
+-  [ 8406] = 0x888B, [ 8407] = 0x8993, [ 8408] = 0x898F, [ 8409] = 0x8A2A,
+-  [ 8410] = 0x8A1D, [ 8411] = 0x8A23, [ 8412] = 0x8A25, [ 8413] = 0x8A31,
+-  [ 8414] = 0x8A2D, [ 8415] = 0x8A1F, [ 8416] = 0x8A1B, [ 8417] = 0x8A22,
+-  [ 8418] = 0x8C49, [ 8419] = 0x8C5A, [ 8420] = 0x8CA9, [ 8421] = 0x8CAC,
+-  [ 8422] = 0x8CAB, [ 8423] = 0x8CA8, [ 8424] = 0x8CAA, [ 8425] = 0x8CA7,
+-  [ 8426] = 0x8D67, [ 8427] = 0x8D66, [ 8428] = 0x8DBE, [ 8429] = 0x8DBA,
+-  [ 8430] = 0x8EDB, [ 8431] = 0x8EDF, [ 8432] = 0x9019, [ 8433] = 0x900D,
+-  [ 8434] = 0x901A, [ 8435] = 0x9017, [ 8436] = 0x9023, [ 8437] = 0x901F,
+-  [ 8438] = 0x901D, [ 8439] = 0x9010, [ 8440] = 0x9015, [ 8441] = 0x901E,
+-  [ 8442] = 0x9020, [ 8443] = 0x900F, [ 8444] = 0x9022, [ 8445] = 0x9016,
+-  [ 8446] = 0x901B, [ 8447] = 0x9014, [ 8482] = 0x90E8, [ 8483] = 0x90ED,
+-  [ 8484] = 0x90FD, [ 8485] = 0x9157, [ 8486] = 0x91CE, [ 8487] = 0x91F5,
+-  [ 8488] = 0x91E6, [ 8489] = 0x91E3, [ 8490] = 0x91E7, [ 8491] = 0x91ED,
+-  [ 8492] = 0x91E9, [ 8493] = 0x9589, [ 8494] = 0x966A, [ 8495] = 0x9675,
+-  [ 8496] = 0x9673, [ 8497] = 0x9678, [ 8498] = 0x9670, [ 8499] = 0x9674,
+-  [ 8500] = 0x9676, [ 8501] = 0x9677, [ 8502] = 0x966C, [ 8503] = 0x96C0,
+-  [ 8504] = 0x96EA, [ 8505] = 0x96E9, [ 8506] = 0x7AE0, [ 8507] = 0x7ADF,
+-  [ 8508] = 0x9802, [ 8509] = 0x9803, [ 8510] = 0x9B5A, [ 8511] = 0x9CE5,
+-  [ 8512] = 0x9E75, [ 8513] = 0x9E7F, [ 8514] = 0x9EA5, [ 8515] = 0x9EBB,
+-  [ 8516] = 0x50A2, [ 8517] = 0x508D, [ 8518] = 0x5085, [ 8519] = 0x5099,
+-  [ 8520] = 0x5091, [ 8521] = 0x5080, [ 8522] = 0x5096, [ 8523] = 0x5098,
+-  [ 8524] = 0x509A, [ 8525] = 0x6700, [ 8526] = 0x51F1, [ 8527] = 0x5272,
+-  [ 8528] = 0x5274, [ 8529] = 0x5275, [ 8530] = 0x5269, [ 8531] = 0x52DE,
+-  [ 8532] = 0x52DD, [ 8533] = 0x52DB, [ 8534] = 0x535A, [ 8535] = 0x53A5,
+-  [ 8536] = 0x557B, [ 8537] = 0x5580, [ 8538] = 0x55A7, [ 8539] = 0x557C,
+-  [ 8540] = 0x558A, [ 8541] = 0x559D, [ 8542] = 0x5598, [ 8543] = 0x5582,
+-  [ 8544] = 0x559C, [ 8545] = 0x55AA, [ 8546] = 0x5594, [ 8547] = 0x5587,
+-  [ 8548] = 0x558B, [ 8549] = 0x5583, [ 8550] = 0x55B3, [ 8551] = 0x55AE,
+-  [ 8552] = 0x559F, [ 8553] = 0x553E, [ 8554] = 0x55B2, [ 8555] = 0x559A,
+-  [ 8556] = 0x55BB, [ 8557] = 0x55AC, [ 8558] = 0x55B1, [ 8559] = 0x557E,
+-  [ 8560] = 0x5589, [ 8561] = 0x55AB, [ 8562] = 0x5599, [ 8563] = 0x570D,
+-  [ 8564] = 0x582F, [ 8565] = 0x582A, [ 8566] = 0x5834, [ 8567] = 0x5824,
+-  [ 8568] = 0x5830, [ 8569] = 0x5831, [ 8570] = 0x5821, [ 8571] = 0x581D,
+-  [ 8572] = 0x5820, [ 8573] = 0x58F9, [ 8574] = 0x58FA, [ 8575] = 0x5960,
+-  [ 8580] = 0x5A77, [ 8581] = 0x5A9A, [ 8582] = 0x5A7F, [ 8583] = 0x5A92,
+-  [ 8584] = 0x5A9B, [ 8585] = 0x5AA7, [ 8586] = 0x5B73, [ 8587] = 0x5B71,
+-  [ 8588] = 0x5BD2, [ 8589] = 0x5BCC, [ 8590] = 0x5BD3, [ 8591] = 0x5BD0,
+-  [ 8592] = 0x5C0A, [ 8593] = 0x5C0B, [ 8594] = 0x5C31, [ 8595] = 0x5D4C,
+-  [ 8596] = 0x5D50, [ 8597] = 0x5D34, [ 8598] = 0x5D47, [ 8599] = 0x5DFD,
+-  [ 8600] = 0x5E45, [ 8601] = 0x5E3D, [ 8602] = 0x5E40, [ 8603] = 0x5E43,
+-  [ 8604] = 0x5E7E, [ 8605] = 0x5ECA, [ 8606] = 0x5EC1, [ 8607] = 0x5EC2,
+-  [ 8608] = 0x5EC4, [ 8609] = 0x5F3C, [ 8610] = 0x5F6D, [ 8611] = 0x5FA9,
+-  [ 8612] = 0x5FAA, [ 8613] = 0x5FA8, [ 8614] = 0x60D1, [ 8615] = 0x60E1,
+-  [ 8616] = 0x60B2, [ 8617] = 0x60B6, [ 8618] = 0x60E0, [ 8619] = 0x611C,
+-  [ 8620] = 0x6123, [ 8621] = 0x60FA, [ 8622] = 0x6115, [ 8623] = 0x60F0,
+-  [ 8624] = 0x60FB, [ 8625] = 0x60F4, [ 8626] = 0x6168, [ 8627] = 0x60F1,
+-  [ 8628] = 0x610E, [ 8629] = 0x60F6, [ 8630] = 0x6109, [ 8631] = 0x6100,
+-  [ 8632] = 0x6112, [ 8633] = 0x621F, [ 8634] = 0x6249, [ 8635] = 0x63A3,
+-  [ 8636] = 0x638C, [ 8637] = 0x63CF, [ 8638] = 0x63C0, [ 8639] = 0x63E9,
+-  [ 8640] = 0x63C9, [ 8641] = 0x63C6, [ 8642] = 0x63CD, [ 8677] = 0x63D2,
+-  [ 8678] = 0x63E3, [ 8679] = 0x63D0, [ 8680] = 0x63E1, [ 8681] = 0x63D6,
+-  [ 8682] = 0x63ED, [ 8683] = 0x63EE, [ 8684] = 0x6376, [ 8685] = 0x63F4,
+-  [ 8686] = 0x63EA, [ 8687] = 0x63DB, [ 8688] = 0x6452, [ 8689] = 0x63DA,
+-  [ 8690] = 0x63F9, [ 8691] = 0x655E, [ 8692] = 0x6566, [ 8693] = 0x6562,
+-  [ 8694] = 0x6563, [ 8695] = 0x6591, [ 8696] = 0x6590, [ 8697] = 0x65AF,
+-  [ 8698] = 0x666E, [ 8699] = 0x6670, [ 8700] = 0x6674, [ 8701] = 0x6676,
+-  [ 8702] = 0x666F, [ 8703] = 0x6691, [ 8704] = 0x667A, [ 8705] = 0x667E,
+-  [ 8706] = 0x6677, [ 8707] = 0x66FE, [ 8708] = 0x66FF, [ 8709] = 0x671F,
+-  [ 8710] = 0x671D, [ 8711] = 0x68FA, [ 8712] = 0x68D5, [ 8713] = 0x68E0,
+-  [ 8714] = 0x68D8, [ 8715] = 0x68D7, [ 8716] = 0x6905, [ 8717] = 0x68DF,
+-  [ 8718] = 0x68F5, [ 8719] = 0x68EE, [ 8720] = 0x68E7, [ 8721] = 0x68F9,
+-  [ 8722] = 0x68D2, [ 8723] = 0x68F2, [ 8724] = 0x68E3, [ 8725] = 0x68CB,
+-  [ 8726] = 0x68CD, [ 8727] = 0x690D, [ 8728] = 0x6912, [ 8729] = 0x690E,
+-  [ 8730] = 0x68C9, [ 8731] = 0x68DA, [ 8732] = 0x696E, [ 8733] = 0x68FB,
+-  [ 8734] = 0x6B3E, [ 8735] = 0x6B3A, [ 8736] = 0x6B3D, [ 8737] = 0x6B98,
+-  [ 8738] = 0x6B96, [ 8739] = 0x6BBC, [ 8740] = 0x6BEF, [ 8741] = 0x6C2E,
+-  [ 8742] = 0x6C2F, [ 8743] = 0x6C2C, [ 8744] = 0x6E2F, [ 8745] = 0x6E38,
+-  [ 8746] = 0x6E54, [ 8747] = 0x6E21, [ 8748] = 0x6E32, [ 8749] = 0x6E67,
+-  [ 8750] = 0x6E4A, [ 8751] = 0x6E20, [ 8752] = 0x6E25, [ 8753] = 0x6E23,
+-  [ 8754] = 0x6E1B, [ 8755] = 0x6E5B, [ 8756] = 0x6E58, [ 8757] = 0x6E24,
+-  [ 8758] = 0x6E56, [ 8759] = 0x6E6E, [ 8760] = 0x6E2D, [ 8761] = 0x6E26,
+-  [ 8762] = 0x6E6F, [ 8763] = 0x6E34, [ 8764] = 0x6E4D, [ 8765] = 0x6E3A,
+-  [ 8766] = 0x6E2C, [ 8767] = 0x6E43, [ 8768] = 0x6E1D, [ 8769] = 0x6E3E,
+-  [ 8770] = 0x6ECB, [ 8775] = 0x6E89, [ 8776] = 0x6E19, [ 8777] = 0x6E4E,
+-  [ 8778] = 0x6E63, [ 8779] = 0x6E44, [ 8780] = 0x6E72, [ 8781] = 0x6E69,
+-  [ 8782] = 0x6E5F, [ 8783] = 0x7119, [ 8784] = 0x711A, [ 8785] = 0x7126,
+-  [ 8786] = 0x7130, [ 8787] = 0x7121, [ 8788] = 0x7136, [ 8789] = 0x716E,
+-  [ 8790] = 0x711C, [ 8791] = 0x724C, [ 8792] = 0x7284, [ 8793] = 0x7280,
+-  [ 8794] = 0x7336, [ 8795] = 0x7325, [ 8796] = 0x7334, [ 8797] = 0x7329,
+-  [ 8798] = 0x743A, [ 8799] = 0x742A, [ 8800] = 0x7433, [ 8801] = 0x7422,
+-  [ 8802] = 0x7425, [ 8803] = 0x7435, [ 8804] = 0x7436, [ 8805] = 0x7434,
+-  [ 8806] = 0x742F, [ 8807] = 0x741B, [ 8808] = 0x7426, [ 8809] = 0x7428,
+-  [ 8810] = 0x7525, [ 8811] = 0x7526, [ 8812] = 0x756B, [ 8813] = 0x756A,
+-  [ 8814] = 0x75E2, [ 8815] = 0x75DB, [ 8816] = 0x75E3, [ 8817] = 0x75D9,
+-  [ 8818] = 0x75D8, [ 8819] = 0x75DE, [ 8820] = 0x75E0, [ 8821] = 0x767B,
+-  [ 8822] = 0x767C, [ 8823] = 0x7696, [ 8824] = 0x7693, [ 8825] = 0x76B4,
+-  [ 8826] = 0x76DC, [ 8827] = 0x774F, [ 8828] = 0x77ED, [ 8829] = 0x785D,
+-  [ 8830] = 0x786C, [ 8831] = 0x786F, [ 8832] = 0x7A0D, [ 8833] = 0x7A08,
+-  [ 8834] = 0x7A0B, [ 8835] = 0x7A05, [ 8836] = 0x7A00, [ 8837] = 0x7A98,
+-  [ 8872] = 0x7A97, [ 8873] = 0x7A96, [ 8874] = 0x7AE5, [ 8875] = 0x7AE3,
+-  [ 8876] = 0x7B49, [ 8877] = 0x7B56, [ 8878] = 0x7B46, [ 8879] = 0x7B50,
+-  [ 8880] = 0x7B52, [ 8881] = 0x7B54, [ 8882] = 0x7B4D, [ 8883] = 0x7B4B,
+-  [ 8884] = 0x7B4F, [ 8885] = 0x7B51, [ 8886] = 0x7C9F, [ 8887] = 0x7CA5,
+-  [ 8888] = 0x7D5E, [ 8889] = 0x7D50, [ 8890] = 0x7D68, [ 8891] = 0x7D55,
+-  [ 8892] = 0x7D2B, [ 8893] = 0x7D6E, [ 8894] = 0x7D72, [ 8895] = 0x7D61,
+-  [ 8896] = 0x7D66, [ 8897] = 0x7D62, [ 8898] = 0x7D70, [ 8899] = 0x7D73,
+-  [ 8900] = 0x5584, [ 8901] = 0x7FD4, [ 8902] = 0x7FD5, [ 8903] = 0x800B,
+-  [ 8904] = 0x8052, [ 8905] = 0x8085, [ 8906] = 0x8155, [ 8907] = 0x8154,
+-  [ 8908] = 0x814B, [ 8909] = 0x8151, [ 8910] = 0x814E, [ 8911] = 0x8139,
+-  [ 8912] = 0x8146, [ 8913] = 0x813E, [ 8914] = 0x814C, [ 8915] = 0x8153,
+-  [ 8916] = 0x8174, [ 8917] = 0x8212, [ 8918] = 0x821C, [ 8919] = 0x83E9,
+-  [ 8920] = 0x8403, [ 8921] = 0x83F8, [ 8922] = 0x840D, [ 8923] = 0x83E0,
+-  [ 8924] = 0x83C5, [ 8925] = 0x840B, [ 8926] = 0x83C1, [ 8927] = 0x83EF,
+-  [ 8928] = 0x83F1, [ 8929] = 0x83F4, [ 8930] = 0x8457, [ 8931] = 0x840A,
+-  [ 8932] = 0x83F0, [ 8933] = 0x840C, [ 8934] = 0x83CC, [ 8935] = 0x83FD,
+-  [ 8936] = 0x83F2, [ 8937] = 0x83CA, [ 8938] = 0x8438, [ 8939] = 0x840E,
+-  [ 8940] = 0x8404, [ 8941] = 0x83DC, [ 8942] = 0x8407, [ 8943] = 0x83D4,
+-  [ 8944] = 0x83DF, [ 8945] = 0x865B, [ 8946] = 0x86DF, [ 8947] = 0x86D9,
+-  [ 8948] = 0x86ED, [ 8949] = 0x86D4, [ 8950] = 0x86DB, [ 8951] = 0x86E4,
+-  [ 8952] = 0x86D0, [ 8953] = 0x86DE, [ 8954] = 0x8857, [ 8955] = 0x88C1,
+-  [ 8956] = 0x88C2, [ 8957] = 0x88B1, [ 8958] = 0x8983, [ 8959] = 0x8996,
+-  [ 8960] = 0x8A3B, [ 8961] = 0x8A60, [ 8962] = 0x8A55, [ 8963] = 0x8A5E,
+-  [ 8964] = 0x8A3C, [ 8965] = 0x8A41, [ 8970] = 0x8A54, [ 8971] = 0x8A5B,
+-  [ 8972] = 0x8A50, [ 8973] = 0x8A46, [ 8974] = 0x8A34, [ 8975] = 0x8A3A,
+-  [ 8976] = 0x8A36, [ 8977] = 0x8A56, [ 8978] = 0x8C61, [ 8979] = 0x8C82,
+-  [ 8980] = 0x8CAF, [ 8981] = 0x8CBC, [ 8982] = 0x8CB3, [ 8983] = 0x8CBD,
+-  [ 8984] = 0x8CC1, [ 8985] = 0x8CBB, [ 8986] = 0x8CC0, [ 8987] = 0x8CB4,
+-  [ 8988] = 0x8CB7, [ 8989] = 0x8CB6, [ 8990] = 0x8CBF, [ 8991] = 0x8CB8,
+-  [ 8992] = 0x8D8A, [ 8993] = 0x8D85, [ 8994] = 0x8D81, [ 8995] = 0x8DCE,
+-  [ 8996] = 0x8DDD, [ 8997] = 0x8DCB, [ 8998] = 0x8DDA, [ 8999] = 0x8DD1,
+-  [ 9000] = 0x8DCC, [ 9001] = 0x8DDB, [ 9002] = 0x8DC6, [ 9003] = 0x8EFB,
+-  [ 9004] = 0x8EF8, [ 9005] = 0x8EFC, [ 9006] = 0x8F9C, [ 9007] = 0x902E,
+-  [ 9008] = 0x9035, [ 9009] = 0x9031, [ 9010] = 0x9038, [ 9011] = 0x9032,
+-  [ 9012] = 0x9036, [ 9013] = 0x9102, [ 9014] = 0x90F5, [ 9015] = 0x9109,
+-  [ 9016] = 0x90FE, [ 9017] = 0x9163, [ 9018] = 0x9165, [ 9019] = 0x91CF,
+-  [ 9020] = 0x9214, [ 9021] = 0x9215, [ 9022] = 0x9223, [ 9023] = 0x9209,
+-  [ 9024] = 0x921E, [ 9025] = 0x920D, [ 9026] = 0x9210, [ 9027] = 0x9207,
+-  [ 9028] = 0x9211, [ 9029] = 0x9594, [ 9030] = 0x958F, [ 9031] = 0x958B,
+-  [ 9032] = 0x9591, [ 9067] = 0x9593, [ 9068] = 0x9592, [ 9069] = 0x958E,
+-  [ 9070] = 0x968A, [ 9071] = 0x968E, [ 9072] = 0x968B, [ 9073] = 0x967D,
+-  [ 9074] = 0x9685, [ 9075] = 0x9686, [ 9076] = 0x968D, [ 9077] = 0x9672,
+-  [ 9078] = 0x9684, [ 9079] = 0x96C1, [ 9080] = 0x96C5, [ 9081] = 0x96C4,
+-  [ 9082] = 0x96C6, [ 9083] = 0x96C7, [ 9084] = 0x96EF, [ 9085] = 0x96F2,
+-  [ 9086] = 0x97CC, [ 9087] = 0x9805, [ 9088] = 0x9806, [ 9089] = 0x9808,
+-  [ 9090] = 0x98E7, [ 9091] = 0x98EA, [ 9092] = 0x98EF, [ 9093] = 0x98E9,
+-  [ 9094] = 0x98F2, [ 9095] = 0x98ED, [ 9096] = 0x99AE, [ 9097] = 0x99AD,
+-  [ 9098] = 0x9EC3, [ 9099] = 0x9ECD, [ 9100] = 0x9ED1, [ 9101] = 0x4E82,
+-  [ 9102] = 0x50AD, [ 9103] = 0x50B5, [ 9104] = 0x50B2, [ 9105] = 0x50B3,
+-  [ 9106] = 0x50C5, [ 9107] = 0x50BE, [ 9108] = 0x50AC, [ 9109] = 0x50B7,
+-  [ 9110] = 0x50BB, [ 9111] = 0x50AF, [ 9112] = 0x50C7, [ 9113] = 0x527F,
+-  [ 9114] = 0x5277, [ 9115] = 0x527D, [ 9116] = 0x52DF, [ 9117] = 0x52E6,
+-  [ 9118] = 0x52E4, [ 9119] = 0x52E2, [ 9120] = 0x52E3, [ 9121] = 0x532F,
+-  [ 9122] = 0x55DF, [ 9123] = 0x55E8, [ 9124] = 0x55D3, [ 9125] = 0x55E6,
+-  [ 9126] = 0x55CE, [ 9127] = 0x55DC, [ 9128] = 0x55C7, [ 9129] = 0x55D1,
+-  [ 9130] = 0x55E3, [ 9131] = 0x55E4, [ 9132] = 0x55EF, [ 9133] = 0x55DA,
+-  [ 9134] = 0x55E1, [ 9135] = 0x55C5, [ 9136] = 0x55C6, [ 9137] = 0x55E5,
+-  [ 9138] = 0x55C9, [ 9139] = 0x5712, [ 9140] = 0x5713, [ 9141] = 0x585E,
+-  [ 9142] = 0x5851, [ 9143] = 0x5858, [ 9144] = 0x5857, [ 9145] = 0x585A,
+-  [ 9146] = 0x5854, [ 9147] = 0x586B, [ 9148] = 0x584C, [ 9149] = 0x586D,
+-  [ 9150] = 0x584A, [ 9151] = 0x5862, [ 9152] = 0x5852, [ 9153] = 0x584B,
+-  [ 9154] = 0x5967, [ 9155] = 0x5AC1, [ 9156] = 0x5AC9, [ 9157] = 0x5ACC,
+-  [ 9158] = 0x5ABE, [ 9159] = 0x5ABD, [ 9160] = 0x5ABC, [ 9165] = 0x5AB3,
+-  [ 9166] = 0x5AC2, [ 9167] = 0x5AB2, [ 9168] = 0x5D69, [ 9169] = 0x5D6F,
+-  [ 9170] = 0x5E4C, [ 9171] = 0x5E79, [ 9172] = 0x5EC9, [ 9173] = 0x5EC8,
+-  [ 9174] = 0x5F12, [ 9175] = 0x5F59, [ 9176] = 0x5FAC, [ 9177] = 0x5FAE,
+-  [ 9178] = 0x611A, [ 9179] = 0x610F, [ 9180] = 0x6148, [ 9181] = 0x611F,
+-  [ 9182] = 0x60F3, [ 9183] = 0x611B, [ 9184] = 0x60F9, [ 9185] = 0x6101,
+-  [ 9186] = 0x6108, [ 9187] = 0x614E, [ 9188] = 0x614C, [ 9189] = 0x6144,
+-  [ 9190] = 0x614D, [ 9191] = 0x613E, [ 9192] = 0x6134, [ 9193] = 0x6127,
+-  [ 9194] = 0x610D, [ 9195] = 0x6106, [ 9196] = 0x6137, [ 9197] = 0x6221,
+-  [ 9198] = 0x6222, [ 9199] = 0x6413, [ 9200] = 0x643E, [ 9201] = 0x641E,
+-  [ 9202] = 0x642A, [ 9203] = 0x642D, [ 9204] = 0x643D, [ 9205] = 0x642C,
+-  [ 9206] = 0x640F, [ 9207] = 0x641C, [ 9208] = 0x6414, [ 9209] = 0x640D,
+-  [ 9210] = 0x6436, [ 9211] = 0x6416, [ 9212] = 0x6417, [ 9213] = 0x6406,
+-  [ 9214] = 0x656C, [ 9215] = 0x659F, [ 9216] = 0x65B0, [ 9217] = 0x6697,
+-  [ 9218] = 0x6689, [ 9219] = 0x6687, [ 9220] = 0x6688, [ 9221] = 0x6696,
+-  [ 9222] = 0x6684, [ 9223] = 0x6698, [ 9224] = 0x668D, [ 9225] = 0x6703,
+-  [ 9226] = 0x6994, [ 9227] = 0x696D, [ 9262] = 0x695A, [ 9263] = 0x6977,
+-  [ 9264] = 0x6960, [ 9265] = 0x6954, [ 9266] = 0x6975, [ 9267] = 0x6930,
+-  [ 9268] = 0x6982, [ 9269] = 0x694A, [ 9270] = 0x6968, [ 9271] = 0x696B,
+-  [ 9272] = 0x695E, [ 9273] = 0x6953, [ 9274] = 0x6979, [ 9275] = 0x6986,
+-  [ 9276] = 0x695D, [ 9277] = 0x6963, [ 9278] = 0x695B, [ 9279] = 0x6B47,
+-  [ 9280] = 0x6B72, [ 9281] = 0x6BC0, [ 9282] = 0x6BBF, [ 9283] = 0x6BD3,
+-  [ 9284] = 0x6BFD, [ 9285] = 0x6EA2, [ 9286] = 0x6EAF, [ 9287] = 0x6ED3,
+-  [ 9288] = 0x6EB6, [ 9289] = 0x6EC2, [ 9290] = 0x6E90, [ 9291] = 0x6E9D,
+-  [ 9292] = 0x6EC7, [ 9293] = 0x6EC5, [ 9294] = 0x6EA5, [ 9295] = 0x6E98,
+-  [ 9296] = 0x6EBC, [ 9297] = 0x6EBA, [ 9298] = 0x6EAB, [ 9299] = 0x6ED1,
+-  [ 9300] = 0x6E96, [ 9301] = 0x6E9C, [ 9302] = 0x6EC4, [ 9303] = 0x6ED4,
+-  [ 9304] = 0x6EAA, [ 9305] = 0x6EA7, [ 9306] = 0x6EB4, [ 9307] = 0x714E,
+-  [ 9308] = 0x7159, [ 9309] = 0x7169, [ 9310] = 0x7164, [ 9311] = 0x7149,
+-  [ 9312] = 0x7167, [ 9313] = 0x715C, [ 9314] = 0x716C, [ 9315] = 0x7166,
+-  [ 9316] = 0x714C, [ 9317] = 0x7165, [ 9318] = 0x715E, [ 9319] = 0x7146,
+-  [ 9320] = 0x7168, [ 9321] = 0x7156, [ 9322] = 0x723A, [ 9323] = 0x7252,
+-  [ 9324] = 0x7337, [ 9325] = 0x7345, [ 9326] = 0x733F, [ 9327] = 0x733E,
+-  [ 9328] = 0x746F, [ 9329] = 0x745A, [ 9330] = 0x7455, [ 9331] = 0x745F,
+-  [ 9332] = 0x745E, [ 9333] = 0x7441, [ 9334] = 0x743F, [ 9335] = 0x7459,
+-  [ 9336] = 0x745B, [ 9337] = 0x745C, [ 9338] = 0x7576, [ 9339] = 0x7578,
+-  [ 9340] = 0x7600, [ 9341] = 0x75F0, [ 9342] = 0x7601, [ 9343] = 0x75F2,
+-  [ 9344] = 0x75F1, [ 9345] = 0x75FA, [ 9346] = 0x75FF, [ 9347] = 0x75F4,
+-  [ 9348] = 0x75F3, [ 9349] = 0x76DE, [ 9350] = 0x76DF, [ 9351] = 0x775B,
+-  [ 9352] = 0x776B, [ 9353] = 0x7766, [ 9354] = 0x775E, [ 9355] = 0x7763,
+-  [ 9360] = 0x7779, [ 9361] = 0x776A, [ 9362] = 0x776C, [ 9363] = 0x775C,
+-  [ 9364] = 0x7765, [ 9365] = 0x7768, [ 9366] = 0x7762, [ 9367] = 0x77EE,
+-  [ 9368] = 0x788E, [ 9369] = 0x78B0, [ 9370] = 0x7897, [ 9371] = 0x7898,
+-  [ 9372] = 0x788C, [ 9373] = 0x7889, [ 9374] = 0x787C, [ 9375] = 0x7891,
+-  [ 9376] = 0x7893, [ 9377] = 0x787F, [ 9378] = 0x797A, [ 9379] = 0x797F,
+-  [ 9380] = 0x7981, [ 9381] = 0x842C, [ 9382] = 0x79BD, [ 9383] = 0x7A1C,
+-  [ 9384] = 0x7A1A, [ 9385] = 0x7A20, [ 9386] = 0x7A14, [ 9387] = 0x7A1F,
+-  [ 9388] = 0x7A1E, [ 9389] = 0x7A9F, [ 9390] = 0x7AA0, [ 9391] = 0x7B77,
+-  [ 9392] = 0x7BC0, [ 9393] = 0x7B60, [ 9394] = 0x7B6E, [ 9395] = 0x7B67,
+-  [ 9396] = 0x7CB1, [ 9397] = 0x7CB3, [ 9398] = 0x7CB5, [ 9399] = 0x7D93,
+-  [ 9400] = 0x7D79, [ 9401] = 0x7D91, [ 9402] = 0x7D81, [ 9403] = 0x7D8F,
+-  [ 9404] = 0x7D5B, [ 9405] = 0x7F6E, [ 9406] = 0x7F69, [ 9407] = 0x7F6A,
+-  [ 9408] = 0x7F72, [ 9409] = 0x7FA9, [ 9410] = 0x7FA8, [ 9411] = 0x7FA4,
+-  [ 9412] = 0x8056, [ 9413] = 0x8058, [ 9414] = 0x8086, [ 9415] = 0x8084,
+-  [ 9416] = 0x8171, [ 9417] = 0x8170, [ 9418] = 0x8178, [ 9419] = 0x8165,
+-  [ 9420] = 0x816E, [ 9421] = 0x8173, [ 9422] = 0x816B, [ 9457] = 0x8179,
+-  [ 9458] = 0x817A, [ 9459] = 0x8166, [ 9460] = 0x8205, [ 9461] = 0x8247,
+-  [ 9462] = 0x8482, [ 9463] = 0x8477, [ 9464] = 0x843D, [ 9465] = 0x8431,
+-  [ 9466] = 0x8475, [ 9467] = 0x8466, [ 9468] = 0x846B, [ 9469] = 0x8449,
+-  [ 9470] = 0x846C, [ 9471] = 0x845B, [ 9472] = 0x843C, [ 9473] = 0x8435,
+-  [ 9474] = 0x8461, [ 9475] = 0x8463, [ 9476] = 0x8469, [ 9477] = 0x846D,
+-  [ 9478] = 0x8446, [ 9479] = 0x865E, [ 9480] = 0x865C, [ 9481] = 0x865F,
+-  [ 9482] = 0x86F9, [ 9483] = 0x8713, [ 9484] = 0x8708, [ 9485] = 0x8707,
+-  [ 9486] = 0x8700, [ 9487] = 0x86FE, [ 9488] = 0x86FB, [ 9489] = 0x8702,
+-  [ 9490] = 0x8703, [ 9491] = 0x8706, [ 9492] = 0x870A, [ 9493] = 0x8859,
+-  [ 9494] = 0x88DF, [ 9495] = 0x88D4, [ 9496] = 0x88D9, [ 9497] = 0x88DC,
+-  [ 9498] = 0x88D8, [ 9499] = 0x88DD, [ 9500] = 0x88E1, [ 9501] = 0x88CA,
+-  [ 9502] = 0x88D5, [ 9503] = 0x88D2, [ 9504] = 0x899C, [ 9505] = 0x89E3,
+-  [ 9506] = 0x8A6B, [ 9507] = 0x8A72, [ 9508] = 0x8A73, [ 9509] = 0x8A66,
+-  [ 9510] = 0x8A69, [ 9511] = 0x8A70, [ 9512] = 0x8A87, [ 9513] = 0x8A7C,
+-  [ 9514] = 0x8A63, [ 9515] = 0x8AA0, [ 9516] = 0x8A71, [ 9517] = 0x8A85,
+-  [ 9518] = 0x8A6D, [ 9519] = 0x8A62, [ 9520] = 0x8A6E, [ 9521] = 0x8A6C,
+-  [ 9522] = 0x8A79, [ 9523] = 0x8A7B, [ 9524] = 0x8A3E, [ 9525] = 0x8A68,
+-  [ 9526] = 0x8C62, [ 9527] = 0x8C8A, [ 9528] = 0x8C89, [ 9529] = 0x8CCA,
+-  [ 9530] = 0x8CC7, [ 9531] = 0x8CC8, [ 9532] = 0x8CC4, [ 9533] = 0x8CB2,
+-  [ 9534] = 0x8CC3, [ 9535] = 0x8CC2, [ 9536] = 0x8CC5, [ 9537] = 0x8DE1,
+-  [ 9538] = 0x8DDF, [ 9539] = 0x8DE8, [ 9540] = 0x8DEF, [ 9541] = 0x8DF3,
+-  [ 9542] = 0x8DFA, [ 9543] = 0x8DEA, [ 9544] = 0x8DE4, [ 9545] = 0x8DE6,
+-  [ 9546] = 0x8EB2, [ 9547] = 0x8F03, [ 9548] = 0x8F09, [ 9549] = 0x8EFE,
+-  [ 9550] = 0x8F0A, [ 9555] = 0x8F9F, [ 9556] = 0x8FB2, [ 9557] = 0x904B,
+-  [ 9558] = 0x904A, [ 9559] = 0x9053, [ 9560] = 0x9042, [ 9561] = 0x9054,
+-  [ 9562] = 0x903C, [ 9563] = 0x9055, [ 9564] = 0x9050, [ 9565] = 0x9047,
+-  [ 9566] = 0x904F, [ 9567] = 0x904E, [ 9568] = 0x904D, [ 9569] = 0x9051,
+-  [ 9570] = 0x903E, [ 9571] = 0x9041, [ 9572] = 0x9112, [ 9573] = 0x9117,
+-  [ 9574] = 0x916C, [ 9575] = 0x916A, [ 9576] = 0x9169, [ 9577] = 0x91C9,
+-  [ 9578] = 0x9237, [ 9579] = 0x9257, [ 9580] = 0x9238, [ 9581] = 0x923D,
+-  [ 9582] = 0x9240, [ 9583] = 0x923E, [ 9584] = 0x925B, [ 9585] = 0x924B,
+-  [ 9586] = 0x9264, [ 9587] = 0x9251, [ 9588] = 0x9234, [ 9589] = 0x9249,
+-  [ 9590] = 0x924D, [ 9591] = 0x9245, [ 9592] = 0x9239, [ 9593] = 0x923F,
+-  [ 9594] = 0x925A, [ 9595] = 0x9598, [ 9596] = 0x9698, [ 9597] = 0x9694,
+-  [ 9598] = 0x9695, [ 9599] = 0x96CD, [ 9600] = 0x96CB, [ 9601] = 0x96C9,
+-  [ 9602] = 0x96CA, [ 9603] = 0x96F7, [ 9604] = 0x96FB, [ 9605] = 0x96F9,
+-  [ 9606] = 0x96F6, [ 9607] = 0x9756, [ 9608] = 0x9774, [ 9609] = 0x9776,
+-  [ 9610] = 0x9810, [ 9611] = 0x9811, [ 9612] = 0x9813, [ 9613] = 0x980A,
+-  [ 9614] = 0x9812, [ 9615] = 0x980C, [ 9616] = 0x98FC, [ 9617] = 0x98F4,
+-  [ 9652] = 0x98FD, [ 9653] = 0x98FE, [ 9654] = 0x99B3, [ 9655] = 0x99B1,
+-  [ 9656] = 0x99B4, [ 9657] = 0x9AE1, [ 9658] = 0x9CE9, [ 9659] = 0x9E82,
+-  [ 9660] = 0x9F0E, [ 9661] = 0x9F13, [ 9662] = 0x9F20, [ 9663] = 0x50E7,
+-  [ 9664] = 0x50EE, [ 9665] = 0x50E5, [ 9666] = 0x50D6, [ 9667] = 0x50ED,
+-  [ 9668] = 0x50DA, [ 9669] = 0x50D5, [ 9670] = 0x50CF, [ 9671] = 0x50D1,
+-  [ 9672] = 0x50F1, [ 9673] = 0x50CE, [ 9674] = 0x50E9, [ 9675] = 0x5162,
+-  [ 9676] = 0x51F3, [ 9677] = 0x5283, [ 9678] = 0x5282, [ 9679] = 0x5331,
+-  [ 9680] = 0x53AD, [ 9681] = 0x55FE, [ 9682] = 0x5600, [ 9683] = 0x561B,
+-  [ 9684] = 0x5617, [ 9685] = 0x55FD, [ 9686] = 0x5614, [ 9687] = 0x5606,
+-  [ 9688] = 0x5609, [ 9689] = 0x560D, [ 9690] = 0x560E, [ 9691] = 0x55F7,
+-  [ 9692] = 0x5616, [ 9693] = 0x561F, [ 9694] = 0x5608, [ 9695] = 0x5610,
+-  [ 9696] = 0x55F6, [ 9697] = 0x5718, [ 9698] = 0x5716, [ 9699] = 0x5875,
+-  [ 9700] = 0x587E, [ 9701] = 0x5883, [ 9702] = 0x5893, [ 9703] = 0x588A,
+-  [ 9704] = 0x5879, [ 9705] = 0x5885, [ 9706] = 0x587D, [ 9707] = 0x58FD,
+-  [ 9708] = 0x5925, [ 9709] = 0x5922, [ 9710] = 0x5924, [ 9711] = 0x596A,
+-  [ 9712] = 0x5969, [ 9713] = 0x5AE1, [ 9714] = 0x5AE6, [ 9715] = 0x5AE9,
+-  [ 9716] = 0x5AD7, [ 9717] = 0x5AD6, [ 9718] = 0x5AD8, [ 9719] = 0x5AE3,
+-  [ 9720] = 0x5B75, [ 9721] = 0x5BDE, [ 9722] = 0x5BE7, [ 9723] = 0x5BE1,
+-  [ 9724] = 0x5BE5, [ 9725] = 0x5BE6, [ 9726] = 0x5BE8, [ 9727] = 0x5BE2,
+-  [ 9728] = 0x5BE4, [ 9729] = 0x5BDF, [ 9730] = 0x5C0D, [ 9731] = 0x5C62,
+-  [ 9732] = 0x5D84, [ 9733] = 0x5D87, [ 9734] = 0x5E5B, [ 9735] = 0x5E63,
+-  [ 9736] = 0x5E55, [ 9737] = 0x5E57, [ 9738] = 0x5E54, [ 9739] = 0x5ED3,
+-  [ 9740] = 0x5ED6, [ 9741] = 0x5F0A, [ 9742] = 0x5F46, [ 9743] = 0x5F70,
+-  [ 9744] = 0x5FB9, [ 9745] = 0x6147, [ 9750] = 0x613F, [ 9751] = 0x614B,
+-  [ 9752] = 0x6177, [ 9753] = 0x6162, [ 9754] = 0x6163, [ 9755] = 0x615F,
+-  [ 9756] = 0x615A, [ 9757] = 0x6158, [ 9758] = 0x6175, [ 9759] = 0x622A,
+-  [ 9760] = 0x6487, [ 9761] = 0x6458, [ 9762] = 0x6454, [ 9763] = 0x64A4,
+-  [ 9764] = 0x6478, [ 9765] = 0x645F, [ 9766] = 0x647A, [ 9767] = 0x6451,
+-  [ 9768] = 0x6467, [ 9769] = 0x6434, [ 9770] = 0x646D, [ 9771] = 0x647B,
+-  [ 9772] = 0x6572, [ 9773] = 0x65A1, [ 9774] = 0x65D7, [ 9775] = 0x65D6,
+-  [ 9776] = 0x66A2, [ 9777] = 0x66A8, [ 9778] = 0x669D, [ 9779] = 0x699C,
+-  [ 9780] = 0x69A8, [ 9781] = 0x6995, [ 9782] = 0x69C1, [ 9783] = 0x69AE,
+-  [ 9784] = 0x69D3, [ 9785] = 0x69CB, [ 9786] = 0x699B, [ 9787] = 0x69B7,
+-  [ 9788] = 0x69BB, [ 9789] = 0x69AB, [ 9790] = 0x69B4, [ 9791] = 0x69D0,
+-  [ 9792] = 0x69CD, [ 9793] = 0x69AD, [ 9794] = 0x69CC, [ 9795] = 0x69A6,
+-  [ 9796] = 0x69C3, [ 9797] = 0x69A3, [ 9798] = 0x6B49, [ 9799] = 0x6B4C,
+-  [ 9800] = 0x6C33, [ 9801] = 0x6F33, [ 9802] = 0x6F14, [ 9803] = 0x6EFE,
+-  [ 9804] = 0x6F13, [ 9805] = 0x6EF4, [ 9806] = 0x6F29, [ 9807] = 0x6F3E,
+-  [ 9808] = 0x6F20, [ 9809] = 0x6F2C, [ 9810] = 0x6F0F, [ 9811] = 0x6F02,
+-  [ 9812] = 0x6F22, [ 9847] = 0x6EFF, [ 9848] = 0x6EEF, [ 9849] = 0x6F06,
+-  [ 9850] = 0x6F31, [ 9851] = 0x6F38, [ 9852] = 0x6F32, [ 9853] = 0x6F23,
+-  [ 9854] = 0x6F15, [ 9855] = 0x6F2B, [ 9856] = 0x6F2F, [ 9857] = 0x6F88,
+-  [ 9858] = 0x6F2A, [ 9859] = 0x6EEC, [ 9860] = 0x6F01, [ 9861] = 0x6EF2,
+-  [ 9862] = 0x6ECC, [ 9863] = 0x6EF7, [ 9864] = 0x7194, [ 9865] = 0x7199,
+-  [ 9866] = 0x717D, [ 9867] = 0x718A, [ 9868] = 0x7184, [ 9869] = 0x7192,
+-  [ 9870] = 0x723E, [ 9871] = 0x7292, [ 9872] = 0x7296, [ 9873] = 0x7344,
+-  [ 9874] = 0x7350, [ 9875] = 0x7464, [ 9876] = 0x7463, [ 9877] = 0x746A,
+-  [ 9878] = 0x7470, [ 9879] = 0x746D, [ 9880] = 0x7504, [ 9881] = 0x7591,
+-  [ 9882] = 0x7627, [ 9883] = 0x760D, [ 9884] = 0x760B, [ 9885] = 0x7609,
+-  [ 9886] = 0x7613, [ 9887] = 0x76E1, [ 9888] = 0x76E3, [ 9889] = 0x7784,
+-  [ 9890] = 0x777D, [ 9891] = 0x777F, [ 9892] = 0x7761, [ 9893] = 0x78C1,
+-  [ 9894] = 0x789F, [ 9895] = 0x78A7, [ 9896] = 0x78B3, [ 9897] = 0x78A9,
+-  [ 9898] = 0x78A3, [ 9899] = 0x798E, [ 9900] = 0x798F, [ 9901] = 0x798D,
+-  [ 9902] = 0x7A2E, [ 9903] = 0x7A31, [ 9904] = 0x7AAA, [ 9905] = 0x7AA9,
+-  [ 9906] = 0x7AED, [ 9907] = 0x7AEF, [ 9908] = 0x7BA1, [ 9909] = 0x7B95,
+-  [ 9910] = 0x7B8B, [ 9911] = 0x7B75, [ 9912] = 0x7B97, [ 9913] = 0x7B9D,
+-  [ 9914] = 0x7B94, [ 9915] = 0x7B8F, [ 9916] = 0x7BB8, [ 9917] = 0x7B87,
+-  [ 9918] = 0x7B84, [ 9919] = 0x7CB9, [ 9920] = 0x7CBD, [ 9921] = 0x7CBE,
+-  [ 9922] = 0x7DBB, [ 9923] = 0x7DB0, [ 9924] = 0x7D9C, [ 9925] = 0x7DBD,
+-  [ 9926] = 0x7DBE, [ 9927] = 0x7DA0, [ 9928] = 0x7DCA, [ 9929] = 0x7DB4,
+-  [ 9930] = 0x7DB2, [ 9931] = 0x7DB1, [ 9932] = 0x7DBA, [ 9933] = 0x7DA2,
+-  [ 9934] = 0x7DBF, [ 9935] = 0x7DB5, [ 9936] = 0x7DB8, [ 9937] = 0x7DAD,
+-  [ 9938] = 0x7DD2, [ 9939] = 0x7DC7, [ 9940] = 0x7DAC, [ 9945] = 0x7F70,
+-  [ 9946] = 0x7FE0, [ 9947] = 0x7FE1, [ 9948] = 0x7FDF, [ 9949] = 0x805E,
+-  [ 9950] = 0x805A, [ 9951] = 0x8087, [ 9952] = 0x8150, [ 9953] = 0x8180,
+-  [ 9954] = 0x818F, [ 9955] = 0x8188, [ 9956] = 0x818A, [ 9957] = 0x817F,
+-  [ 9958] = 0x8182, [ 9959] = 0x81E7, [ 9960] = 0x81FA, [ 9961] = 0x8207,
+-  [ 9962] = 0x8214, [ 9963] = 0x821E, [ 9964] = 0x824B, [ 9965] = 0x84C9,
+-  [ 9966] = 0x84BF, [ 9967] = 0x84C6, [ 9968] = 0x84C4, [ 9969] = 0x8499,
+-  [ 9970] = 0x849E, [ 9971] = 0x84B2, [ 9972] = 0x849C, [ 9973] = 0x84CB,
+-  [ 9974] = 0x84B8, [ 9975] = 0x84C0, [ 9976] = 0x84D3, [ 9977] = 0x8490,
+-  [ 9978] = 0x84BC, [ 9979] = 0x84D1, [ 9980] = 0x84CA, [ 9981] = 0x873F,
+-  [ 9982] = 0x871C, [ 9983] = 0x873B, [ 9984] = 0x8722, [ 9985] = 0x8725,
+-  [ 9986] = 0x8734, [ 9987] = 0x8718, [ 9988] = 0x8755, [ 9989] = 0x8737,
+-  [ 9990] = 0x8729, [ 9991] = 0x88F3, [ 9992] = 0x8902, [ 9993] = 0x88F4,
+-  [ 9994] = 0x88F9, [ 9995] = 0x88F8, [ 9996] = 0x88FD, [ 9997] = 0x88E8,
+-  [ 9998] = 0x891A, [ 9999] = 0x88EF, [10000] = 0x8AA6, [10001] = 0x8A8C,
+-  [10002] = 0x8A9E, [10003] = 0x8AA3, [10004] = 0x8A8D, [10005] = 0x8AA1,
+-  [10006] = 0x8A93, [10007] = 0x8AA4, [10042] = 0x8AAA, [10043] = 0x8AA5,
+-  [10044] = 0x8AA8, [10045] = 0x8A98, [10046] = 0x8A91, [10047] = 0x8A9A,
+-  [10048] = 0x8AA7, [10049] = 0x8C6A, [10050] = 0x8C8D, [10051] = 0x8C8C,
+-  [10052] = 0x8CD3, [10053] = 0x8CD1, [10054] = 0x8CD2, [10055] = 0x8D6B,
+-  [10056] = 0x8D99, [10057] = 0x8D95, [10058] = 0x8DFC, [10059] = 0x8F14,
+-  [10060] = 0x8F12, [10061] = 0x8F15, [10062] = 0x8F13, [10063] = 0x8FA3,
+-  [10064] = 0x9060, [10065] = 0x9058, [10066] = 0x905C, [10067] = 0x9063,
+-  [10068] = 0x9059, [10069] = 0x905E, [10070] = 0x9062, [10071] = 0x905D,
+-  [10072] = 0x905B, [10073] = 0x9119, [10074] = 0x9118, [10075] = 0x911E,
+-  [10076] = 0x9175, [10077] = 0x9178, [10078] = 0x9177, [10079] = 0x9174,
+-  [10080] = 0x9278, [10081] = 0x9280, [10082] = 0x9285, [10083] = 0x9298,
+-  [10084] = 0x9296, [10085] = 0x927B, [10086] = 0x9293, [10087] = 0x929C,
+-  [10088] = 0x92A8, [10089] = 0x927C, [10090] = 0x9291, [10091] = 0x95A1,
+-  [10092] = 0x95A8, [10093] = 0x95A9, [10094] = 0x95A3, [10095] = 0x95A5,
+-  [10096] = 0x95A4, [10097] = 0x9699, [10098] = 0x969C, [10099] = 0x969B,
+-  [10100] = 0x96CC, [10101] = 0x96D2, [10102] = 0x9700, [10103] = 0x977C,
+-  [10104] = 0x9785, [10105] = 0x97F6, [10106] = 0x9817, [10107] = 0x9818,
+-  [10108] = 0x98AF, [10109] = 0x98B1, [10110] = 0x9903, [10111] = 0x9905,
+-  [10112] = 0x990C, [10113] = 0x9909, [10114] = 0x99C1, [10115] = 0x9AAF,
+-  [10116] = 0x9AB0, [10117] = 0x9AE6, [10118] = 0x9B41, [10119] = 0x9B42,
+-  [10120] = 0x9CF4, [10121] = 0x9CF6, [10122] = 0x9CF3, [10123] = 0x9EBC,
+-  [10124] = 0x9F3B, [10125] = 0x9F4A, [10126] = 0x5104, [10127] = 0x5100,
+-  [10128] = 0x50FB, [10129] = 0x50F5, [10130] = 0x50F9, [10131] = 0x5102,
+-  [10132] = 0x5108, [10133] = 0x5109, [10134] = 0x5105, [10135] = 0x51DC,
+-  [10140] = 0x5287, [10141] = 0x5288, [10142] = 0x5289, [10143] = 0x528D,
+-  [10144] = 0x528A, [10145] = 0x52F0, [10146] = 0x53B2, [10147] = 0x562E,
+-  [10148] = 0x563B, [10149] = 0x5639, [10150] = 0x5632, [10151] = 0x563F,
+-  [10152] = 0x5634, [10153] = 0x5629, [10154] = 0x5653, [10155] = 0x564E,
+-  [10156] = 0x5657, [10157] = 0x5674, [10158] = 0x5636, [10159] = 0x562F,
+-  [10160] = 0x5630, [10161] = 0x5880, [10162] = 0x589F, [10163] = 0x589E,
+-  [10164] = 0x58B3, [10165] = 0x589C, [10166] = 0x58AE, [10167] = 0x58A9,
+-  [10168] = 0x58A6, [10169] = 0x596D, [10170] = 0x5B09, [10171] = 0x5AFB,
+-  [10172] = 0x5B0B, [10173] = 0x5AF5, [10174] = 0x5B0C, [10175] = 0x5B08,
+-  [10176] = 0x5BEE, [10177] = 0x5BEC, [10178] = 0x5BE9, [10179] = 0x5BEB,
+-  [10180] = 0x5C64, [10181] = 0x5C65, [10182] = 0x5D9D, [10183] = 0x5D94,
+-  [10184] = 0x5E62, [10185] = 0x5E5F, [10186] = 0x5E61, [10187] = 0x5EE2,
+-  [10188] = 0x5EDA, [10189] = 0x5EDF, [10190] = 0x5EDD, [10191] = 0x5EE3,
+-  [10192] = 0x5EE0, [10193] = 0x5F48, [10194] = 0x5F71, [10195] = 0x5FB7,
+-  [10196] = 0x5FB5, [10197] = 0x6176, [10198] = 0x6167, [10199] = 0x616E,
+-  [10200] = 0x615D, [10201] = 0x6155, [10202] = 0x6182, [10237] = 0x617C,
+-  [10238] = 0x6170, [10239] = 0x616B, [10240] = 0x617E, [10241] = 0x61A7,
+-  [10242] = 0x6190, [10243] = 0x61AB, [10244] = 0x618E, [10245] = 0x61AC,
+-  [10246] = 0x619A, [10247] = 0x61A4, [10248] = 0x6194, [10249] = 0x61AE,
+-  [10250] = 0x622E, [10251] = 0x6469, [10252] = 0x646F, [10253] = 0x6479,
+-  [10254] = 0x649E, [10255] = 0x64B2, [10256] = 0x6488, [10257] = 0x6490,
+-  [10258] = 0x64B0, [10259] = 0x64A5, [10260] = 0x6493, [10261] = 0x6495,
+-  [10262] = 0x64A9, [10263] = 0x6492, [10264] = 0x64AE, [10265] = 0x64AD,
+-  [10266] = 0x64AB, [10267] = 0x649A, [10268] = 0x64AC, [10269] = 0x6499,
+-  [10270] = 0x64A2, [10271] = 0x64B3, [10272] = 0x6575, [10273] = 0x6577,
+-  [10274] = 0x6578, [10275] = 0x66AE, [10276] = 0x66AB, [10277] = 0x66B4,
+-  [10278] = 0x66B1, [10279] = 0x6A23, [10280] = 0x6A1F, [10281] = 0x69E8,
+-  [10282] = 0x6A01, [10283] = 0x6A1E, [10284] = 0x6A19, [10285] = 0x69FD,
+-  [10286] = 0x6A21, [10287] = 0x6A13, [10288] = 0x6A0A, [10289] = 0x69F3,
+-  [10290] = 0x6A02, [10291] = 0x6A05, [10292] = 0x69ED, [10293] = 0x6A11,
+-  [10294] = 0x6B50, [10295] = 0x6B4E, [10296] = 0x6BA4, [10297] = 0x6BC5,
+-  [10298] = 0x6BC6, [10299] = 0x6F3F, [10300] = 0x6F7C, [10301] = 0x6F84,
+-  [10302] = 0x6F51, [10303] = 0x6F66, [10304] = 0x6F54, [10305] = 0x6F86,
+-  [10306] = 0x6F6D, [10307] = 0x6F5B, [10308] = 0x6F78, [10309] = 0x6F6E,
+-  [10310] = 0x6F8E, [10311] = 0x6F7A, [10312] = 0x6F70, [10313] = 0x6F64,
+-  [10314] = 0x6F97, [10315] = 0x6F58, [10316] = 0x6ED5, [10317] = 0x6F6F,
+-  [10318] = 0x6F60, [10319] = 0x6F5F, [10320] = 0x719F, [10321] = 0x71AC,
+-  [10322] = 0x71B1, [10323] = 0x71A8, [10324] = 0x7256, [10325] = 0x729B,
+-  [10326] = 0x734E, [10327] = 0x7357, [10328] = 0x7469, [10329] = 0x748B,
+-  [10330] = 0x7483, [10335] = 0x747E, [10336] = 0x7480, [10337] = 0x757F,
+-  [10338] = 0x7620, [10339] = 0x7629, [10340] = 0x761F, [10341] = 0x7624,
+-  [10342] = 0x7626, [10343] = 0x7621, [10344] = 0x7622, [10345] = 0x769A,
+-  [10346] = 0x76BA, [10347] = 0x76E4, [10348] = 0x778E, [10349] = 0x7787,
+-  [10350] = 0x778C, [10351] = 0x7791, [10352] = 0x778B, [10353] = 0x78CB,
+-  [10354] = 0x78C5, [10355] = 0x78BA, [10356] = 0x78CA, [10357] = 0x78BE,
+-  [10358] = 0x78D5, [10359] = 0x78BC, [10360] = 0x78D0, [10361] = 0x7A3F,
+-  [10362] = 0x7A3C, [10363] = 0x7A40, [10364] = 0x7A3D, [10365] = 0x7A37,
+-  [10366] = 0x7A3B, [10367] = 0x7AAF, [10368] = 0x7AAE, [10369] = 0x7BAD,
+-  [10370] = 0x7BB1, [10371] = 0x7BC4, [10372] = 0x7BB4, [10373] = 0x7BC6,
+-  [10374] = 0x7BC7, [10375] = 0x7BC1, [10376] = 0x7BA0, [10377] = 0x7BCC,
+-  [10378] = 0x7CCA, [10379] = 0x7DE0, [10380] = 0x7DF4, [10381] = 0x7DEF,
+-  [10382] = 0x7DFB, [10383] = 0x7DD8, [10384] = 0x7DEC, [10385] = 0x7DDD,
+-  [10386] = 0x7DE8, [10387] = 0x7DE3, [10388] = 0x7DDA, [10389] = 0x7DDE,
+-  [10390] = 0x7DE9, [10391] = 0x7D9E, [10392] = 0x7DD9, [10393] = 0x7DF2,
+-  [10394] = 0x7DF9, [10395] = 0x7F75, [10396] = 0x7F77, [10397] = 0x7FAF,
+-  [10432] = 0x7FE9, [10433] = 0x8026, [10434] = 0x819B, [10435] = 0x819C,
+-  [10436] = 0x819D, [10437] = 0x81A0, [10438] = 0x819A, [10439] = 0x8198,
+-  [10440] = 0x8517, [10441] = 0x853D, [10442] = 0x851A, [10443] = 0x84EE,
+-  [10444] = 0x852C, [10445] = 0x852D, [10446] = 0x8513, [10447] = 0x8511,
+-  [10448] = 0x8523, [10449] = 0x8521, [10450] = 0x8514, [10451] = 0x84EC,
+-  [10452] = 0x8525, [10453] = 0x84FF, [10454] = 0x8506, [10455] = 0x8782,
+-  [10456] = 0x8774, [10457] = 0x8776, [10458] = 0x8760, [10459] = 0x8766,
+-  [10460] = 0x8778, [10461] = 0x8768, [10462] = 0x8759, [10463] = 0x8757,
+-  [10464] = 0x874C, [10465] = 0x8753, [10466] = 0x885B, [10467] = 0x885D,
+-  [10468] = 0x8910, [10469] = 0x8907, [10470] = 0x8912, [10471] = 0x8913,
+-  [10472] = 0x8915, [10473] = 0x890A, [10474] = 0x8ABC, [10475] = 0x8AD2,
+-  [10476] = 0x8AC7, [10477] = 0x8AC4, [10478] = 0x8A95, [10479] = 0x8ACB,
+-  [10480] = 0x8AF8, [10481] = 0x8AB2, [10482] = 0x8AC9, [10483] = 0x8AC2,
+-  [10484] = 0x8ABF, [10485] = 0x8AB0, [10486] = 0x8AD6, [10487] = 0x8ACD,
+-  [10488] = 0x8AB6, [10489] = 0x8AB9, [10490] = 0x8ADB, [10491] = 0x8C4C,
+-  [10492] = 0x8C4E, [10493] = 0x8C6C, [10494] = 0x8CE0, [10495] = 0x8CDE,
+-  [10496] = 0x8CE6, [10497] = 0x8CE4, [10498] = 0x8CEC, [10499] = 0x8CED,
+-  [10500] = 0x8CE2, [10501] = 0x8CE3, [10502] = 0x8CDC, [10503] = 0x8CEA,
+-  [10504] = 0x8CE1, [10505] = 0x8D6D, [10506] = 0x8D9F, [10507] = 0x8DA3,
+-  [10508] = 0x8E2B, [10509] = 0x8E10, [10510] = 0x8E1D, [10511] = 0x8E22,
+-  [10512] = 0x8E0F, [10513] = 0x8E29, [10514] = 0x8E1F, [10515] = 0x8E21,
+-  [10516] = 0x8E1E, [10517] = 0x8EBA, [10518] = 0x8F1D, [10519] = 0x8F1B,
+-  [10520] = 0x8F1F, [10521] = 0x8F29, [10522] = 0x8F26, [10523] = 0x8F2A,
+-  [10524] = 0x8F1C, [10525] = 0x8F1E, [10530] = 0x8F25, [10531] = 0x9069,
+-  [10532] = 0x906E, [10533] = 0x9068, [10534] = 0x906D, [10535] = 0x9077,
+-  [10536] = 0x9130, [10537] = 0x912D, [10538] = 0x9127, [10539] = 0x9131,
+-  [10540] = 0x9187, [10541] = 0x9189, [10542] = 0x918B, [10543] = 0x9183,
+-  [10544] = 0x92C5, [10545] = 0x92BB, [10546] = 0x92B7, [10547] = 0x92EA,
+-  [10548] = 0x92AC, [10549] = 0x92E4, [10550] = 0x92C1, [10551] = 0x92B3,
+-  [10552] = 0x92BC, [10553] = 0x92D2, [10554] = 0x92C7, [10555] = 0x92F0,
+-  [10556] = 0x92B2, [10557] = 0x95AD, [10558] = 0x95B1, [10559] = 0x9704,
+-  [10560] = 0x9706, [10561] = 0x9707, [10562] = 0x9709, [10563] = 0x9760,
+-  [10564] = 0x978D, [10565] = 0x978B, [10566] = 0x978F, [10567] = 0x9821,
+-  [10568] = 0x982B, [10569] = 0x981C, [10570] = 0x98B3, [10571] = 0x990A,
+-  [10572] = 0x9913, [10573] = 0x9912, [10574] = 0x9918, [10575] = 0x99DD,
+-  [10576] = 0x99D0, [10577] = 0x99DF, [10578] = 0x99DB, [10579] = 0x99D1,
+-  [10580] = 0x99D5, [10581] = 0x99D2, [10582] = 0x99D9, [10583] = 0x9AB7,
+-  [10584] = 0x9AEE, [10585] = 0x9AEF, [10586] = 0x9B27, [10587] = 0x9B45,
+-  [10588] = 0x9B44, [10589] = 0x9B77, [10590] = 0x9B6F, [10591] = 0x9D06,
+-  [10592] = 0x9D09, [10627] = 0x9D03, [10628] = 0x9EA9, [10629] = 0x9EBE,
+-  [10630] = 0x9ECE, [10631] = 0x58A8, [10632] = 0x9F52, [10633] = 0x5112,
+-  [10634] = 0x5118, [10635] = 0x5114, [10636] = 0x5110, [10637] = 0x5115,
+-  [10638] = 0x5180, [10639] = 0x51AA, [10640] = 0x51DD, [10641] = 0x5291,
+-  [10642] = 0x5293, [10643] = 0x52F3, [10644] = 0x5659, [10645] = 0x566B,
+-  [10646] = 0x5679, [10647] = 0x5669, [10648] = 0x5664, [10649] = 0x5678,
+-  [10650] = 0x566A, [10651] = 0x5668, [10652] = 0x5665, [10653] = 0x5671,
+-  [10654] = 0x566F, [10655] = 0x566C, [10656] = 0x5662, [10657] = 0x5676,
+-  [10658] = 0x58C1, [10659] = 0x58BE, [10660] = 0x58C7, [10661] = 0x58C5,
+-  [10662] = 0x596E, [10663] = 0x5B1D, [10664] = 0x5B34, [10665] = 0x5B78,
+-  [10666] = 0x5BF0, [10667] = 0x5C0E, [10668] = 0x5F4A, [10669] = 0x61B2,
+-  [10670] = 0x6191, [10671] = 0x61A9, [10672] = 0x618A, [10673] = 0x61CD,
+-  [10674] = 0x61B6, [10675] = 0x61BE, [10676] = 0x61CA, [10677] = 0x61C8,
+-  [10678] = 0x6230, [10679] = 0x64C5, [10680] = 0x64C1, [10681] = 0x64CB,
+-  [10682] = 0x64BB, [10683] = 0x64BC, [10684] = 0x64DA, [10685] = 0x64C4,
+-  [10686] = 0x64C7, [10687] = 0x64C2, [10688] = 0x64CD, [10689] = 0x64BF,
+-  [10690] = 0x64D2, [10691] = 0x64D4, [10692] = 0x64BE, [10693] = 0x6574,
+-  [10694] = 0x66C6, [10695] = 0x66C9, [10696] = 0x66B9, [10697] = 0x66C4,
+-  [10698] = 0x66C7, [10699] = 0x66B8, [10700] = 0x6A3D, [10701] = 0x6A38,
+-  [10702] = 0x6A3A, [10703] = 0x6A59, [10704] = 0x6A6B, [10705] = 0x6A58,
+-  [10706] = 0x6A39, [10707] = 0x6A44, [10708] = 0x6A62, [10709] = 0x6A61,
+-  [10710] = 0x6A4B, [10711] = 0x6A47, [10712] = 0x6A35, [10713] = 0x6A5F,
+-  [10714] = 0x6A48, [10715] = 0x6B59, [10716] = 0x6B77, [10717] = 0x6C05,
+-  [10718] = 0x6FC2, [10719] = 0x6FB1, [10720] = 0x6FA1, [10725] = 0x6FC3,
+-  [10726] = 0x6FA4, [10727] = 0x6FC1, [10728] = 0x6FA7, [10729] = 0x6FB3,
+-  [10730] = 0x6FC0, [10731] = 0x6FB9, [10732] = 0x6FB6, [10733] = 0x6FA6,
+-  [10734] = 0x6FA0, [10735] = 0x6FB4, [10736] = 0x71BE, [10737] = 0x71C9,
+-  [10738] = 0x71D0, [10739] = 0x71D2, [10740] = 0x71C8, [10741] = 0x71D5,
+-  [10742] = 0x71B9, [10743] = 0x71CE, [10744] = 0x71D9, [10745] = 0x71DC,
+-  [10746] = 0x71C3, [10747] = 0x71C4, [10748] = 0x7368, [10749] = 0x749C,
+-  [10750] = 0x74A3, [10751] = 0x7498, [10752] = 0x749F, [10753] = 0x749E,
+-  [10754] = 0x74E2, [10755] = 0x750C, [10756] = 0x750D, [10757] = 0x7634,
+-  [10758] = 0x7638, [10759] = 0x763A, [10760] = 0x76E7, [10761] = 0x76E5,
+-  [10762] = 0x77A0, [10763] = 0x779E, [10764] = 0x779F, [10765] = 0x77A5,
+-  [10766] = 0x78E8, [10767] = 0x78DA, [10768] = 0x78EC, [10769] = 0x78E7,
+-  [10770] = 0x79A6, [10771] = 0x7A4D, [10772] = 0x7A4E, [10773] = 0x7A46,
+-  [10774] = 0x7A4C, [10775] = 0x7A4B, [10776] = 0x7ABA, [10777] = 0x7BD9,
+-  [10778] = 0x7C11, [10779] = 0x7BC9, [10780] = 0x7BE4, [10781] = 0x7BDB,
+-  [10782] = 0x7BE1, [10783] = 0x7BE9, [10784] = 0x7BE6, [10785] = 0x7CD5,
+-  [10786] = 0x7CD6, [10787] = 0x7E0A, [10822] = 0x7E11, [10823] = 0x7E08,
+-  [10824] = 0x7E1B, [10825] = 0x7E23, [10826] = 0x7E1E, [10827] = 0x7E1D,
+-  [10828] = 0x7E09, [10829] = 0x7E10, [10830] = 0x7F79, [10831] = 0x7FB2,
+-  [10832] = 0x7FF0, [10833] = 0x7FF1, [10834] = 0x7FEE, [10835] = 0x8028,
+-  [10836] = 0x81B3, [10837] = 0x81A9, [10838] = 0x81A8, [10839] = 0x81FB,
+-  [10840] = 0x8208, [10841] = 0x8258, [10842] = 0x8259, [10843] = 0x854A,
+-  [10844] = 0x8559, [10845] = 0x8548, [10846] = 0x8568, [10847] = 0x8569,
+-  [10848] = 0x8543, [10849] = 0x8549, [10850] = 0x856D, [10851] = 0x856A,
+-  [10852] = 0x855E, [10853] = 0x8783, [10854] = 0x879F, [10855] = 0x879E,
+-  [10856] = 0x87A2, [10857] = 0x878D, [10858] = 0x8861, [10859] = 0x892A,
+-  [10860] = 0x8932, [10861] = 0x8925, [10862] = 0x892B, [10863] = 0x8921,
+-  [10864] = 0x89AA, [10865] = 0x89A6, [10866] = 0x8AE6, [10867] = 0x8AFA,
+-  [10868] = 0x8AEB, [10869] = 0x8AF1, [10870] = 0x8B00, [10871] = 0x8ADC,
+-  [10872] = 0x8AE7, [10873] = 0x8AEE, [10874] = 0x8AFE, [10875] = 0x8B01,
+-  [10876] = 0x8B02, [10877] = 0x8AF7, [10878] = 0x8AED, [10879] = 0x8AF3,
+-  [10880] = 0x8AF6, [10881] = 0x8AFC, [10882] = 0x8C6B, [10883] = 0x8C6D,
+-  [10884] = 0x8C93, [10885] = 0x8CF4, [10886] = 0x8E44, [10887] = 0x8E31,
+-  [10888] = 0x8E34, [10889] = 0x8E42, [10890] = 0x8E39, [10891] = 0x8E35,
+-  [10892] = 0x8F3B, [10893] = 0x8F2F, [10894] = 0x8F38, [10895] = 0x8F33,
+-  [10896] = 0x8FA8, [10897] = 0x8FA6, [10898] = 0x9075, [10899] = 0x9074,
+-  [10900] = 0x9078, [10901] = 0x9072, [10902] = 0x907C, [10903] = 0x907A,
+-  [10904] = 0x9134, [10905] = 0x9192, [10906] = 0x9320, [10907] = 0x9336,
+-  [10908] = 0x92F8, [10909] = 0x9333, [10910] = 0x932F, [10911] = 0x9322,
+-  [10912] = 0x92FC, [10913] = 0x932B, [10914] = 0x9304, [10915] = 0x931A,
+-  [10920] = 0x9310, [10921] = 0x9326, [10922] = 0x9321, [10923] = 0x9315,
+-  [10924] = 0x932E, [10925] = 0x9319, [10926] = 0x95BB, [10927] = 0x96A7,
+-  [10928] = 0x96A8, [10929] = 0x96AA, [10930] = 0x96D5, [10931] = 0x970E,
+-  [10932] = 0x9711, [10933] = 0x9716, [10934] = 0x970D, [10935] = 0x9713,
+-  [10936] = 0x970F, [10937] = 0x975B, [10938] = 0x975C, [10939] = 0x9766,
+-  [10940] = 0x9798, [10941] = 0x9830, [10942] = 0x9838, [10943] = 0x983B,
+-  [10944] = 0x9837, [10945] = 0x982D, [10946] = 0x9839, [10947] = 0x9824,
+-  [10948] = 0x9910, [10949] = 0x9928, [10950] = 0x991E, [10951] = 0x991B,
+-  [10952] = 0x9921, [10953] = 0x991A, [10954] = 0x99ED, [10955] = 0x99E2,
+-  [10956] = 0x99F1, [10957] = 0x9AB8, [10958] = 0x9ABC, [10959] = 0x9AFB,
+-  [10960] = 0x9AED, [10961] = 0x9B28, [10962] = 0x9B91, [10963] = 0x9D15,
+-  [10964] = 0x9D23, [10965] = 0x9D26, [10966] = 0x9D28, [10967] = 0x9D12,
+-  [10968] = 0x9D1B, [10969] = 0x9ED8, [10970] = 0x9ED4, [10971] = 0x9F8D,
+-  [10972] = 0x9F9C, [10973] = 0x512A, [10974] = 0x511F, [10975] = 0x5121,
+-  [10976] = 0x5132, [10977] = 0x52F5, [10978] = 0x568E, [10979] = 0x5680,
+-  [10980] = 0x5690, [10981] = 0x5685, [10982] = 0x5687, [11017] = 0x568F,
+-  [11018] = 0x58D5, [11019] = 0x58D3, [11020] = 0x58D1, [11021] = 0x58CE,
+-  [11022] = 0x5B30, [11023] = 0x5B2A, [11024] = 0x5B24, [11025] = 0x5B7A,
+-  [11026] = 0x5C37, [11027] = 0x5C68, [11028] = 0x5DBC, [11029] = 0x5DBA,
+-  [11030] = 0x5DBD, [11031] = 0x5DB8, [11032] = 0x5E6B, [11033] = 0x5F4C,
+-  [11034] = 0x5FBD, [11035] = 0x61C9, [11036] = 0x61C2, [11037] = 0x61C7,
+-  [11038] = 0x61E6, [11039] = 0x61CB, [11040] = 0x6232, [11041] = 0x6234,
+-  [11042] = 0x64CE, [11043] = 0x64CA, [11044] = 0x64D8, [11045] = 0x64E0,
+-  [11046] = 0x64F0, [11047] = 0x64E6, [11048] = 0x64EC, [11049] = 0x64F1,
+-  [11050] = 0x64E2, [11051] = 0x64ED, [11052] = 0x6582, [11053] = 0x6583,
+-  [11054] = 0x66D9, [11055] = 0x66D6, [11056] = 0x6A80, [11057] = 0x6A94,
+-  [11058] = 0x6A84, [11059] = 0x6AA2, [11060] = 0x6A9C, [11061] = 0x6ADB,
+-  [11062] = 0x6AA3, [11063] = 0x6A7E, [11064] = 0x6A97, [11065] = 0x6A90,
+-  [11066] = 0x6AA0, [11067] = 0x6B5C, [11068] = 0x6BAE, [11069] = 0x6BDA,
+-  [11070] = 0x6C08, [11071] = 0x6FD8, [11072] = 0x6FF1, [11073] = 0x6FDF,
+-  [11074] = 0x6FE0, [11075] = 0x6FDB, [11076] = 0x6FE4, [11077] = 0x6FEB,
+-  [11078] = 0x6FEF, [11079] = 0x6F80, [11080] = 0x6FEC, [11081] = 0x6FE1,
+-  [11082] = 0x6FE9, [11083] = 0x6FD5, [11084] = 0x6FEE, [11085] = 0x6FF0,
+-  [11086] = 0x71E7, [11087] = 0x71DF, [11088] = 0x71EE, [11089] = 0x71E6,
+-  [11090] = 0x71E5, [11091] = 0x71ED, [11092] = 0x71EC, [11093] = 0x71F4,
+-  [11094] = 0x71E0, [11095] = 0x7235, [11096] = 0x7246, [11097] = 0x7370,
+-  [11098] = 0x7372, [11099] = 0x74A9, [11100] = 0x74B0, [11101] = 0x74A6,
+-  [11102] = 0x74A8, [11103] = 0x7646, [11104] = 0x7642, [11105] = 0x764C,
+-  [11106] = 0x76EA, [11107] = 0x77B3, [11108] = 0x77AA, [11109] = 0x77B0,
+-  [11110] = 0x77AC, [11115] = 0x77A7, [11116] = 0x77AD, [11117] = 0x77EF,
+-  [11118] = 0x78F7, [11119] = 0x78FA, [11120] = 0x78F4, [11121] = 0x78EF,
+-  [11122] = 0x7901, [11123] = 0x79A7, [11124] = 0x79AA, [11125] = 0x7A57,
+-  [11126] = 0x7ABF, [11127] = 0x7C07, [11128] = 0x7C0D, [11129] = 0x7BFE,
+-  [11130] = 0x7BF7, [11131] = 0x7C0C, [11132] = 0x7BE0, [11133] = 0x7CE0,
+-  [11134] = 0x7CDC, [11135] = 0x7CDE, [11136] = 0x7CE2, [11137] = 0x7CDF,
+-  [11138] = 0x7CD9, [11139] = 0x7CDD, [11140] = 0x7E2E, [11141] = 0x7E3E,
+-  [11142] = 0x7E46, [11143] = 0x7E37, [11144] = 0x7E32, [11145] = 0x7E43,
+-  [11146] = 0x7E2B, [11147] = 0x7E3D, [11148] = 0x7E31, [11149] = 0x7E45,
+-  [11150] = 0x7E41, [11151] = 0x7E34, [11152] = 0x7E39, [11153] = 0x7E48,
+-  [11154] = 0x7E35, [11155] = 0x7E3F, [11156] = 0x7E2F, [11157] = 0x7F44,
+-  [11158] = 0x7FF3, [11159] = 0x7FFC, [11160] = 0x8071, [11161] = 0x8072,
+-  [11162] = 0x8070, [11163] = 0x806F, [11164] = 0x8073, [11165] = 0x81C6,
+-  [11166] = 0x81C3, [11167] = 0x81BA, [11168] = 0x81C2, [11169] = 0x81C0,
+-  [11170] = 0x81BF, [11171] = 0x81BD, [11172] = 0x81C9, [11173] = 0x81BE,
+-  [11174] = 0x81E8, [11175] = 0x8209, [11176] = 0x8271, [11177] = 0x85AA,
+-  [11212] = 0x8584, [11213] = 0x857E, [11214] = 0x859C, [11215] = 0x8591,
+-  [11216] = 0x8594, [11217] = 0x85AF, [11218] = 0x859B, [11219] = 0x8587,
+-  [11220] = 0x85A8, [11221] = 0x858A, [11222] = 0x8667, [11223] = 0x87C0,
+-  [11224] = 0x87D1, [11225] = 0x87B3, [11226] = 0x87D2, [11227] = 0x87C6,
+-  [11228] = 0x87AB, [11229] = 0x87BB, [11230] = 0x87BA, [11231] = 0x87C8,
+-  [11232] = 0x87CB, [11233] = 0x893B, [11234] = 0x8936, [11235] = 0x8944,
+-  [11236] = 0x8938, [11237] = 0x893D, [11238] = 0x89AC, [11239] = 0x8B0E,
+-  [11240] = 0x8B17, [11241] = 0x8B19, [11242] = 0x8B1B, [11243] = 0x8B0A,
+-  [11244] = 0x8B20, [11245] = 0x8B1D, [11246] = 0x8B04, [11247] = 0x8B10,
+-  [11248] = 0x8C41, [11249] = 0x8C3F, [11250] = 0x8C73, [11251] = 0x8CFA,
+-  [11252] = 0x8CFD, [11253] = 0x8CFC, [11254] = 0x8CF8, [11255] = 0x8CFB,
+-  [11256] = 0x8DA8, [11257] = 0x8E49, [11258] = 0x8E4B, [11259] = 0x8E48,
+-  [11260] = 0x8E4A, [11261] = 0x8F44, [11262] = 0x8F3E, [11263] = 0x8F42,
+-  [11264] = 0x8F45, [11265] = 0x8F3F, [11266] = 0x907F, [11267] = 0x907D,
+-  [11268] = 0x9084, [11269] = 0x9081, [11270] = 0x9082, [11271] = 0x9080,
+-  [11272] = 0x9139, [11273] = 0x91A3, [11274] = 0x919E, [11275] = 0x919C,
+-  [11276] = 0x934D, [11277] = 0x9382, [11278] = 0x9328, [11279] = 0x9375,
+-  [11280] = 0x934A, [11281] = 0x9365, [11282] = 0x934B, [11283] = 0x9318,
+-  [11284] = 0x937E, [11285] = 0x936C, [11286] = 0x935B, [11287] = 0x9370,
+-  [11288] = 0x935A, [11289] = 0x9354, [11290] = 0x95CA, [11291] = 0x95CB,
+-  [11292] = 0x95CC, [11293] = 0x95C8, [11294] = 0x95C6, [11295] = 0x96B1,
+-  [11296] = 0x96B8, [11297] = 0x96D6, [11298] = 0x971C, [11299] = 0x971E,
+-  [11300] = 0x97A0, [11301] = 0x97D3, [11302] = 0x9846, [11303] = 0x98B6,
+-  [11304] = 0x9935, [11305] = 0x9A01, [11310] = 0x99FF, [11311] = 0x9BAE,
+-  [11312] = 0x9BAB, [11313] = 0x9BAA, [11314] = 0x9BAD, [11315] = 0x9D3B,
+-  [11316] = 0x9D3F, [11317] = 0x9E8B, [11318] = 0x9ECF, [11319] = 0x9EDE,
+-  [11320] = 0x9EDC, [11321] = 0x9EDD, [11322] = 0x9EDB, [11323] = 0x9F3E,
+-  [11324] = 0x9F4B, [11325] = 0x53E2, [11326] = 0x5695, [11327] = 0x56AE,
+-  [11328] = 0x58D9, [11329] = 0x58D8, [11330] = 0x5B38, [11331] = 0x5F5D,
+-  [11332] = 0x61E3, [11333] = 0x6233, [11334] = 0x64F4, [11335] = 0x64F2,
+-  [11336] = 0x64FE, [11337] = 0x6506, [11338] = 0x64FA, [11339] = 0x64FB,
+-  [11340] = 0x64F7, [11341] = 0x65B7, [11342] = 0x66DC, [11343] = 0x6726,
+-  [11344] = 0x6AB3, [11345] = 0x6AAC, [11346] = 0x6AC3, [11347] = 0x6ABB,
+-  [11348] = 0x6AB8, [11349] = 0x6AC2, [11350] = 0x6AAE, [11351] = 0x6AAF,
+-  [11352] = 0x6B5F, [11353] = 0x6B78, [11354] = 0x6BAF, [11355] = 0x7009,
+-  [11356] = 0x700B, [11357] = 0x6FFE, [11358] = 0x7006, [11359] = 0x6FFA,
+-  [11360] = 0x7011, [11361] = 0x700F, [11362] = 0x71FB, [11363] = 0x71FC,
+-  [11364] = 0x71FE, [11365] = 0x71F8, [11366] = 0x7377, [11367] = 0x7375,
+-  [11368] = 0x74A7, [11369] = 0x74BF, [11370] = 0x7515, [11371] = 0x7656,
+-  [11372] = 0x7658, [11407] = 0x7652, [11408] = 0x77BD, [11409] = 0x77BF,
+-  [11410] = 0x77BB, [11411] = 0x77BC, [11412] = 0x790E, [11413] = 0x79AE,
+-  [11414] = 0x7A61, [11415] = 0x7A62, [11416] = 0x7A60, [11417] = 0x7AC4,
+-  [11418] = 0x7AC5, [11419] = 0x7C2B, [11420] = 0x7C27, [11421] = 0x7C2A,
+-  [11422] = 0x7C1E, [11423] = 0x7C23, [11424] = 0x7C21, [11425] = 0x7CE7,
+-  [11426] = 0x7E54, [11427] = 0x7E55, [11428] = 0x7E5E, [11429] = 0x7E5A,
+-  [11430] = 0x7E61, [11431] = 0x7E52, [11432] = 0x7E59, [11433] = 0x7F48,
+-  [11434] = 0x7FF9, [11435] = 0x7FFB, [11436] = 0x8077, [11437] = 0x8076,
+-  [11438] = 0x81CD, [11439] = 0x81CF, [11440] = 0x820A, [11441] = 0x85CF,
+-  [11442] = 0x85A9, [11443] = 0x85CD, [11444] = 0x85D0, [11445] = 0x85C9,
+-  [11446] = 0x85B0, [11447] = 0x85BA, [11448] = 0x85B9, [11449] = 0x85A6,
+-  [11450] = 0x87EF, [11451] = 0x87EC, [11452] = 0x87F2, [11453] = 0x87E0,
+-  [11454] = 0x8986, [11455] = 0x89B2, [11456] = 0x89F4, [11457] = 0x8B28,
+-  [11458] = 0x8B39, [11459] = 0x8B2C, [11460] = 0x8B2B, [11461] = 0x8C50,
+-  [11462] = 0x8D05, [11463] = 0x8E59, [11464] = 0x8E63, [11465] = 0x8E66,
+-  [11466] = 0x8E64, [11467] = 0x8E5F, [11468] = 0x8E55, [11469] = 0x8EC0,
+-  [11470] = 0x8F49, [11471] = 0x8F4D, [11472] = 0x9087, [11473] = 0x9083,
+-  [11474] = 0x9088, [11475] = 0x91AB, [11476] = 0x91AC, [11477] = 0x91D0,
+-  [11478] = 0x9394, [11479] = 0x938A, [11480] = 0x9396, [11481] = 0x93A2,
+-  [11482] = 0x93B3, [11483] = 0x93AE, [11484] = 0x93AC, [11485] = 0x93B0,
+-  [11486] = 0x9398, [11487] = 0x939A, [11488] = 0x9397, [11489] = 0x95D4,
+-  [11490] = 0x95D6, [11491] = 0x95D0, [11492] = 0x95D5, [11493] = 0x96E2,
+-  [11494] = 0x96DC, [11495] = 0x96D9, [11496] = 0x96DB, [11497] = 0x96DE,
+-  [11498] = 0x9724, [11499] = 0x97A3, [11500] = 0x97A6, [11505] = 0x97AD,
+-  [11506] = 0x97F9, [11507] = 0x984D, [11508] = 0x984F, [11509] = 0x984C,
+-  [11510] = 0x984E, [11511] = 0x9853, [11512] = 0x98BA, [11513] = 0x993E,
+-  [11514] = 0x993F, [11515] = 0x993D, [11516] = 0x992E, [11517] = 0x99A5,
+-  [11518] = 0x9A0E, [11519] = 0x9AC1, [11520] = 0x9B03, [11521] = 0x9B06,
+-  [11522] = 0x9B4F, [11523] = 0x9B4E, [11524] = 0x9B4D, [11525] = 0x9BCA,
+-  [11526] = 0x9BC9, [11527] = 0x9BFD, [11528] = 0x9BC8, [11529] = 0x9BC0,
+-  [11530] = 0x9D51, [11531] = 0x9D5D, [11532] = 0x9D60, [11533] = 0x9EE0,
+-  [11534] = 0x9F15, [11535] = 0x9F2C, [11536] = 0x5133, [11537] = 0x56A5,
+-  [11538] = 0x58DE, [11539] = 0x58DF, [11540] = 0x58E2, [11541] = 0x5BF5,
+-  [11542] = 0x9F90, [11543] = 0x5EEC, [11544] = 0x61F2, [11545] = 0x61F7,
+-  [11546] = 0x61F6, [11547] = 0x61F5, [11548] = 0x6500, [11549] = 0x650F,
+-  [11550] = 0x66E0, [11551] = 0x66DD, [11552] = 0x6AE5, [11553] = 0x6ADD,
+-  [11554] = 0x6ADA, [11555] = 0x6AD3, [11556] = 0x701B, [11557] = 0x701F,
+-  [11558] = 0x7028, [11559] = 0x701A, [11560] = 0x701D, [11561] = 0x7015,
+-  [11562] = 0x7018, [11563] = 0x7206, [11564] = 0x720D, [11565] = 0x7258,
+-  [11566] = 0x72A2, [11567] = 0x7378, [11602] = 0x737A, [11603] = 0x74BD,
+-  [11604] = 0x74CA, [11605] = 0x74E3, [11606] = 0x7587, [11607] = 0x7586,
+-  [11608] = 0x765F, [11609] = 0x7661, [11610] = 0x77C7, [11611] = 0x7919,
+-  [11612] = 0x79B1, [11613] = 0x7A6B, [11614] = 0x7A69, [11615] = 0x7C3E,
+-  [11616] = 0x7C3F, [11617] = 0x7C38, [11618] = 0x7C3D, [11619] = 0x7C37,
+-  [11620] = 0x7C40, [11621] = 0x7E6B, [11622] = 0x7E6D, [11623] = 0x7E79,
+-  [11624] = 0x7E69, [11625] = 0x7E6A, [11626] = 0x7F85, [11627] = 0x7E73,
+-  [11628] = 0x7FB6, [11629] = 0x7FB9, [11630] = 0x7FB8, [11631] = 0x81D8,
+-  [11632] = 0x85E9, [11633] = 0x85DD, [11634] = 0x85EA, [11635] = 0x85D5,
+-  [11636] = 0x85E4, [11637] = 0x85E5, [11638] = 0x85F7, [11639] = 0x87FB,
+-  [11640] = 0x8805, [11641] = 0x880D, [11642] = 0x87F9, [11643] = 0x87FE,
+-  [11644] = 0x8960, [11645] = 0x895F, [11646] = 0x8956, [11647] = 0x895E,
+-  [11648] = 0x8B41, [11649] = 0x8B5C, [11650] = 0x8B58, [11651] = 0x8B49,
+-  [11652] = 0x8B5A, [11653] = 0x8B4E, [11654] = 0x8B4F, [11655] = 0x8B46,
+-  [11656] = 0x8B59, [11657] = 0x8D08, [11658] = 0x8D0A, [11659] = 0x8E7C,
+-  [11660] = 0x8E72, [11661] = 0x8E87, [11662] = 0x8E76, [11663] = 0x8E6C,
+-  [11664] = 0x8E7A, [11665] = 0x8E74, [11666] = 0x8F54, [11667] = 0x8F4E,
+-  [11668] = 0x8FAD, [11669] = 0x908A, [11670] = 0x908B, [11671] = 0x91B1,
+-  [11672] = 0x91AE, [11673] = 0x93E1, [11674] = 0x93D1, [11675] = 0x93DF,
+-  [11676] = 0x93C3, [11677] = 0x93C8, [11678] = 0x93DC, [11679] = 0x93DD,
+-  [11680] = 0x93D6, [11681] = 0x93E2, [11682] = 0x93CD, [11683] = 0x93D8,
+-  [11684] = 0x93E4, [11685] = 0x93D7, [11686] = 0x93E8, [11687] = 0x95DC,
+-  [11688] = 0x96B4, [11689] = 0x96E3, [11690] = 0x972A, [11691] = 0x9727,
+-  [11692] = 0x9761, [11693] = 0x97DC, [11694] = 0x97FB, [11695] = 0x985E,
+-  [11700] = 0x9858, [11701] = 0x985B, [11702] = 0x98BC, [11703] = 0x9945,
+-  [11704] = 0x9949, [11705] = 0x9A16, [11706] = 0x9A19, [11707] = 0x9B0D,
+-  [11708] = 0x9BE8, [11709] = 0x9BE7, [11710] = 0x9BD6, [11711] = 0x9BDB,
+-  [11712] = 0x9D89, [11713] = 0x9D61, [11714] = 0x9D72, [11715] = 0x9D6A,
+-  [11716] = 0x9D6C, [11717] = 0x9E92, [11718] = 0x9E97, [11719] = 0x9E93,
+-  [11720] = 0x9EB4, [11721] = 0x52F8, [11722] = 0x56A8, [11723] = 0x56B7,
+-  [11724] = 0x56B6, [11725] = 0x56B4, [11726] = 0x56BC, [11727] = 0x58E4,
+-  [11728] = 0x5B40, [11729] = 0x5B43, [11730] = 0x5B7D, [11731] = 0x5BF6,
+-  [11732] = 0x5DC9, [11733] = 0x61F8, [11734] = 0x61FA, [11735] = 0x6518,
+-  [11736] = 0x6514, [11737] = 0x6519, [11738] = 0x66E6, [11739] = 0x6727,
+-  [11740] = 0x6AEC, [11741] = 0x703E, [11742] = 0x7030, [11743] = 0x7032,
+-  [11744] = 0x7210, [11745] = 0x737B, [11746] = 0x74CF, [11747] = 0x7662,
+-  [11748] = 0x7665, [11749] = 0x7926, [11750] = 0x792A, [11751] = 0x792C,
+-  [11752] = 0x792B, [11753] = 0x7AC7, [11754] = 0x7AF6, [11755] = 0x7C4C,
+-  [11756] = 0x7C43, [11757] = 0x7C4D, [11758] = 0x7CEF, [11759] = 0x7CF0,
+-  [11760] = 0x8FAE, [11761] = 0x7E7D, [11762] = 0x7E7C, [11797] = 0x7E82,
+-  [11798] = 0x7F4C, [11799] = 0x8000, [11800] = 0x81DA, [11801] = 0x8266,
+-  [11802] = 0x85FB, [11803] = 0x85F9, [11804] = 0x8611, [11805] = 0x85FA,
+-  [11806] = 0x8606, [11807] = 0x860B, [11808] = 0x8607, [11809] = 0x860A,
+-  [11810] = 0x8814, [11811] = 0x8815, [11812] = 0x8964, [11813] = 0x89BA,
+-  [11814] = 0x89F8, [11815] = 0x8B70, [11816] = 0x8B6C, [11817] = 0x8B66,
+-  [11818] = 0x8B6F, [11819] = 0x8B5F, [11820] = 0x8B6B, [11821] = 0x8D0F,
+-  [11822] = 0x8D0D, [11823] = 0x8E89, [11824] = 0x8E81, [11825] = 0x8E85,
+-  [11826] = 0x8E82, [11827] = 0x91B4, [11828] = 0x91CB, [11829] = 0x9418,
+-  [11830] = 0x9403, [11831] = 0x93FD, [11832] = 0x95E1, [11833] = 0x9730,
+-  [11834] = 0x98C4, [11835] = 0x9952, [11836] = 0x9951, [11837] = 0x99A8,
+-  [11838] = 0x9A2B, [11839] = 0x9A30, [11840] = 0x9A37, [11841] = 0x9A35,
+-  [11842] = 0x9C13, [11843] = 0x9C0D, [11844] = 0x9E79, [11845] = 0x9EB5,
+-  [11846] = 0x9EE8, [11847] = 0x9F2F, [11848] = 0x9F5F, [11849] = 0x9F63,
+-  [11850] = 0x9F61, [11851] = 0x5137, [11852] = 0x5138, [11853] = 0x56C1,
+-  [11854] = 0x56C0, [11855] = 0x56C2, [11856] = 0x5914, [11857] = 0x5C6C,
+-  [11858] = 0x5DCD, [11859] = 0x61FC, [11860] = 0x61FE, [11861] = 0x651D,
+-  [11862] = 0x651C, [11863] = 0x6595, [11864] = 0x66E9, [11865] = 0x6AFB,
+-  [11866] = 0x6B04, [11867] = 0x6AFA, [11868] = 0x6BB2, [11869] = 0x704C,
+-  [11870] = 0x721B, [11871] = 0x72A7, [11872] = 0x74D6, [11873] = 0x74D4,
+-  [11874] = 0x7669, [11875] = 0x77D3, [11876] = 0x7C50, [11877] = 0x7E8F,
+-  [11878] = 0x7E8C, [11879] = 0x7FBC, [11880] = 0x8617, [11881] = 0x862D,
+-  [11882] = 0x861A, [11883] = 0x8823, [11884] = 0x8822, [11885] = 0x8821,
+-  [11886] = 0x881F, [11887] = 0x896A, [11888] = 0x896C, [11889] = 0x89BD,
+-  [11890] = 0x8B74, [11895] = 0x8B77, [11896] = 0x8B7D, [11897] = 0x8D13,
+-  [11898] = 0x8E8A, [11899] = 0x8E8D, [11900] = 0x8E8B, [11901] = 0x8F5F,
+-  [11902] = 0x8FAF, [11903] = 0x91BA, [11904] = 0x942E, [11905] = 0x9433,
+-  [11906] = 0x9435, [11907] = 0x943A, [11908] = 0x9438, [11909] = 0x9432,
+-  [11910] = 0x942B, [11911] = 0x95E2, [11912] = 0x9738, [11913] = 0x9739,
+-  [11914] = 0x9732, [11915] = 0x97FF, [11916] = 0x9867, [11917] = 0x9865,
+-  [11918] = 0x9957, [11919] = 0x9A45, [11920] = 0x9A43, [11921] = 0x9A40,
+-  [11922] = 0x9A3E, [11923] = 0x9ACF, [11924] = 0x9B54, [11925] = 0x9B51,
+-  [11926] = 0x9C2D, [11927] = 0x9C25, [11928] = 0x9DAF, [11929] = 0x9DB4,
+-  [11930] = 0x9DC2, [11931] = 0x9DB8, [11932] = 0x9E9D, [11933] = 0x9EEF,
+-  [11934] = 0x9F19, [11935] = 0x9F5C, [11936] = 0x9F66, [11937] = 0x9F67,
+-  [11938] = 0x513C, [11939] = 0x513B, [11940] = 0x56C8, [11941] = 0x56CA,
+-  [11942] = 0x56C9, [11943] = 0x5B7F, [11944] = 0x5DD4, [11945] = 0x5DD2,
+-  [11946] = 0x5F4E, [11947] = 0x61FF, [11948] = 0x6524, [11949] = 0x6B0A,
+-  [11950] = 0x6B61, [11951] = 0x7051, [11952] = 0x7058, [11953] = 0x7380,
+-  [11954] = 0x74E4, [11955] = 0x758A, [11956] = 0x766E, [11957] = 0x766C,
+-  [11992] = 0x79B3, [11993] = 0x7C60, [11994] = 0x7C5F, [11995] = 0x807E,
+-  [11996] = 0x807D, [11997] = 0x81DF, [11998] = 0x8972, [11999] = 0x896F,
+-  [12000] = 0x89FC, [12001] = 0x8B80, [12002] = 0x8D16, [12003] = 0x8D17,
+-  [12004] = 0x8E91, [12005] = 0x8E93, [12006] = 0x8F61, [12007] = 0x9148,
+-  [12008] = 0x9444, [12009] = 0x9451, [12010] = 0x9452, [12011] = 0x973D,
+-  [12012] = 0x973E, [12013] = 0x97C3, [12014] = 0x97C1, [12015] = 0x986B,
+-  [12016] = 0x9955, [12017] = 0x9A55, [12018] = 0x9A4D, [12019] = 0x9AD2,
+-  [12020] = 0x9B1A, [12021] = 0x9C49, [12022] = 0x9C31, [12023] = 0x9C3E,
+-  [12024] = 0x9C3B, [12025] = 0x9DD3, [12026] = 0x9DD7, [12027] = 0x9F34,
+-  [12028] = 0x9F6C, [12029] = 0x9F6A, [12030] = 0x9F94, [12031] = 0x56CC,
+-  [12032] = 0x5DD6, [12033] = 0x6200, [12034] = 0x6523, [12035] = 0x652B,
+-  [12036] = 0x652A, [12037] = 0x66EC, [12038] = 0x6B10, [12039] = 0x74DA,
+-  [12040] = 0x7ACA, [12041] = 0x7C64, [12042] = 0x7C63, [12043] = 0x7C65,
+-  [12044] = 0x7E93, [12045] = 0x7E96, [12046] = 0x7E94, [12047] = 0x81E2,
+-  [12048] = 0x8638, [12049] = 0x863F, [12050] = 0x8831, [12051] = 0x8B8A,
+-  [12052] = 0x9090, [12053] = 0x908F, [12054] = 0x9463, [12055] = 0x9460,
+-  [12056] = 0x9464, [12057] = 0x9768, [12058] = 0x986F, [12059] = 0x995C,
+-  [12060] = 0x9A5A, [12061] = 0x9A5B, [12062] = 0x9A57, [12063] = 0x9AD3,
+-  [12064] = 0x9AD4, [12065] = 0x9AD1, [12066] = 0x9C54, [12067] = 0x9C57,
+-  [12068] = 0x9C56, [12069] = 0x9DE5, [12070] = 0x9E9F, [12071] = 0x9EF4,
+-  [12072] = 0x56D1, [12073] = 0x58E9, [12074] = 0x652C, [12075] = 0x705E,
+-  [12076] = 0x7671, [12077] = 0x7672, [12078] = 0x77D7, [12079] = 0x7F50,
+-  [12080] = 0x7F88, [12081] = 0x8836, [12082] = 0x8839, [12083] = 0x8862,
+-  [12084] = 0x8B93, [12085] = 0x8B92, [12090] = 0x8B96, [12091] = 0x8277,
+-  [12092] = 0x8D1B, [12093] = 0x91C0, [12094] = 0x946A, [12095] = 0x9742,
+-  [12096] = 0x9748, [12097] = 0x9744, [12098] = 0x97C6, [12099] = 0x9870,
+-  [12100] = 0x9A5F, [12101] = 0x9B22, [12102] = 0x9B58, [12103] = 0x9C5F,
+-  [12104] = 0x9DF9, [12105] = 0x9DFA, [12106] = 0x9E7C, [12107] = 0x9E7D,
+-  [12108] = 0x9F07, [12109] = 0x9F77, [12110] = 0x9F72, [12111] = 0x5EF3,
+-  [12112] = 0x6B16, [12113] = 0x7063, [12114] = 0x7C6C, [12115] = 0x7C6E,
+-  [12116] = 0x883B, [12117] = 0x89C0, [12118] = 0x8EA1, [12119] = 0x91C1,
+-  [12120] = 0x9472, [12121] = 0x9470, [12122] = 0x9871, [12123] = 0x995E,
+-  [12124] = 0x9AD6, [12125] = 0x9B23, [12126] = 0x9ECC, [12127] = 0x7064,
+-  [12128] = 0x77DA, [12129] = 0x8B9A, [12130] = 0x9477, [12131] = 0x97C9,
+-  [12132] = 0x9A62, [12133] = 0x9A65, [12134] = 0x7E9C, [12135] = 0x8B9C,
+-  [12136] = 0x8EAA, [12137] = 0x91C5, [12138] = 0x947D, [12139] = 0x947E,
+-  [12140] = 0x947C, [12141] = 0x9C77, [12142] = 0x9C78, [12143] = 0x9EF7,
+-  [12144] = 0x8C54, [12145] = 0x947F, [12146] = 0x9E1A, [12147] = 0x7228,
+-  [12148] = 0x9A6A, [12149] = 0x9B31, [12150] = 0x9E1B, [12151] = 0x9E1E,
+-  [12152] = 0x7C72, [12187] = 0x2460, [12188] = 0x2461, [12189] = 0x2462,
+-  [12190] = 0x2463, [12191] = 0x2464, [12192] = 0x2465, [12193] = 0x2466,
+-  [12194] = 0x2467, [12195] = 0x2468, [12196] = 0x2469, [12197] = 0x2474,
+-  [12198] = 0x2475, [12199] = 0x2476, [12200] = 0x2477, [12201] = 0x2478,
+-  [12202] = 0x2479, [12203] = 0x247A, [12204] = 0x247B, [12205] = 0x247C,
+-  [12206] = 0x247D, [12207] = 0x2170, [12208] = 0x2171, [12209] = 0x2172,
+-  [12210] = 0x2173, [12211] = 0x2174, [12212] = 0x2175, [12213] = 0x2176,
+-  [12214] = 0x2177, [12215] = 0x2178, [12216] = 0x2179, [12217] = 0x4E36,
+-  [12218] = 0x4E3F, [12219] = 0x4E85, [12220] = 0x4EA0, [12221] = 0x5182,
+-  [12222] = 0x5196, [12223] = 0x51AB, [12224] = 0x52F9, [12225] = 0x5338,
+-  [12226] = 0x5369, [12227] = 0x53B6, [12228] = 0x590A, [12229] = 0x5B80,
+-  [12230] = 0x5DDB, [12231] = 0x2F33, [12232] = 0x5E7F, [12234] = 0x5F50,
+-  [12235] = 0x5F61, [12236] = 0x6534, [12238] = 0x7592, [12240] = 0x8FB5,
+-  [12242] = 0x00A8, [12243] = 0x02C6, [12244] = 0x30FD, [12245] = 0x30FE,
+-  [12246] = 0x309D, [12247] = 0x309E, [12250] = 0x3005, [12251] = 0x3006,
+-  [12252] = 0x3007, [12253] = 0x30FC, [12254] = 0xFF3B, [12255] = 0xFF3D,
+-  [12256] = 0x273D, [12257] = 0x3041, [12258] = 0x3042, [12259] = 0x3043,
+-  [12260] = 0x3044, [12261] = 0x3045, [12262] = 0x3046, [12263] = 0x3047,
+-  [12264] = 0x3048, [12265] = 0x3049, [12266] = 0x304A, [12267] = 0x304B,
+-  [12268] = 0x304C, [12269] = 0x304D, [12270] = 0x304E, [12271] = 0x304F,
+-  [12272] = 0x3050, [12273] = 0x3051, [12274] = 0x3052, [12275] = 0x3053,
+-  [12276] = 0x3054, [12277] = 0x3055, [12278] = 0x3056, [12279] = 0x3057,
+-  [12280] = 0x3058, [12285] = 0x3059, [12286] = 0x305A, [12287] = 0x305B,
+-  [12288] = 0x305C, [12289] = 0x305D, [12290] = 0x305E, [12291] = 0x305F,
+-  [12292] = 0x3060, [12293] = 0x3061, [12294] = 0x3062, [12295] = 0x3063,
+-  [12296] = 0x3064, [12297] = 0x3065, [12298] = 0x3066, [12299] = 0x3067,
+-  [12300] = 0x3068, [12301] = 0x3069, [12302] = 0x306A, [12303] = 0x306B,
+-  [12304] = 0x306C, [12305] = 0x306D, [12306] = 0x306E, [12307] = 0x306F,
+-  [12308] = 0x3070, [12309] = 0x3071, [12310] = 0x3072, [12311] = 0x3073,
+-  [12312] = 0x3074, [12313] = 0x3075, [12314] = 0x3076, [12315] = 0x3077,
+-  [12316] = 0x3078, [12317] = 0x3079, [12318] = 0x307A, [12319] = 0x307B,
+-  [12320] = 0x307C, [12321] = 0x307D, [12322] = 0x307E, [12323] = 0x307F,
+-  [12324] = 0x3080, [12325] = 0x3081, [12326] = 0x3082, [12327] = 0x3083,
+-  [12328] = 0x3084, [12329] = 0x3085, [12330] = 0x3086, [12331] = 0x3087,
+-  [12332] = 0x3088, [12333] = 0x3089, [12334] = 0x308A, [12335] = 0x308B,
+-  [12336] = 0x308C, [12337] = 0x308D, [12338] = 0x308E, [12339] = 0x308F,
+-  [12340] = 0x3090, [12341] = 0x3091, [12342] = 0x3092, [12343] = 0x3093,
+-  [12344] = 0x30A1, [12345] = 0x30A2, [12346] = 0x30A3, [12347] = 0x30A4,
+-  [12382] = 0x30A5, [12383] = 0x30A6, [12384] = 0x30A7, [12385] = 0x30A8,
+-  [12386] = 0x30A9, [12387] = 0x30AA, [12388] = 0x30AB, [12389] = 0x30AC,
+-  [12390] = 0x30AD, [12391] = 0x30AE, [12392] = 0x30AF, [12393] = 0x30B0,
+-  [12394] = 0x30B1, [12395] = 0x30B2, [12396] = 0x30B3, [12397] = 0x30B4,
+-  [12398] = 0x30B5, [12399] = 0x30B6, [12400] = 0x30B7, [12401] = 0x30B8,
+-  [12402] = 0x30B9, [12403] = 0x30BA, [12404] = 0x30BB, [12405] = 0x30BC,
+-  [12406] = 0x30BD, [12407] = 0x30BE, [12408] = 0x30BF, [12409] = 0x30C0,
+-  [12410] = 0x30C1, [12411] = 0x30C2, [12412] = 0x30C3, [12413] = 0x30C4,
+-  [12414] = 0x30C5, [12415] = 0x30C6, [12416] = 0x30C7, [12417] = 0x30C8,
+-  [12418] = 0x30C9, [12419] = 0x30CA, [12420] = 0x30CB, [12421] = 0x30CC,
+-  [12422] = 0x30CD, [12423] = 0x30CE, [12424] = 0x30CF, [12425] = 0x30D0,
+-  [12426] = 0x30D1, [12427] = 0x30D2, [12428] = 0x30D3, [12429] = 0x30D4,
+-  [12430] = 0x30D5, [12431] = 0x30D6, [12432] = 0x30D7, [12433] = 0x30D8,
+-  [12434] = 0x30D9, [12435] = 0x30DA, [12436] = 0x30DB, [12437] = 0x30DC,
+-  [12438] = 0x30DD, [12439] = 0x30DE, [12440] = 0x30DF, [12441] = 0x30E0,
+-  [12442] = 0x30E1, [12443] = 0x30E2, [12444] = 0x30E3, [12445] = 0x30E4,
+-  [12446] = 0x30E5, [12447] = 0x30E6, [12448] = 0x30E7, [12449] = 0x30E8,
+-  [12450] = 0x30E9, [12451] = 0x30EA, [12452] = 0x30EB, [12453] = 0x30EC,
+-  [12454] = 0x30ED, [12455] = 0x30EE, [12456] = 0x30EF, [12457] = 0x30F0,
+-  [12458] = 0x30F1, [12459] = 0x30F2, [12460] = 0x30F3, [12461] = 0x30F4,
+-  [12462] = 0x30F5, [12463] = 0x30F6, [12464] = 0x0410, [12465] = 0x0411,
+-  [12466] = 0x0412, [12467] = 0x0413, [12468] = 0x0414, [12469] = 0x0415,
+-  [12470] = 0x0401, [12471] = 0x0416, [12472] = 0x0417, [12473] = 0x0418,
+-  [12474] = 0x0419, [12475] = 0x041A, [12480] = 0x041B, [12481] = 0x041C,
+-  [12482] = 0x041D, [12483] = 0x041E, [12484] = 0x041F, [12485] = 0x0420,
+-  [12486] = 0x0421, [12487] = 0x0422, [12488] = 0x0423, [12489] = 0x0424,
+-  [12490] = 0x0425, [12491] = 0x0426, [12492] = 0x0427, [12493] = 0x0428,
+-  [12494] = 0x0429, [12495] = 0x042A, [12496] = 0x042B, [12497] = 0x042C,
+-  [12498] = 0x042D, [12499] = 0x042E, [12500] = 0x042F, [12501] = 0x0430,
+-  [12502] = 0x0431, [12503] = 0x0432, [12504] = 0x0433, [12505] = 0x0434,
+-  [12506] = 0x0435, [12507] = 0x0451, [12508] = 0x0436, [12509] = 0x0437,
+-  [12510] = 0x0438, [12511] = 0x0439, [12512] = 0x043A, [12513] = 0x043B,
+-  [12514] = 0x043C, [12515] = 0x043D, [12516] = 0x043E, [12517] = 0x043F,
+-  [12518] = 0x0440, [12519] = 0x0441, [12520] = 0x0442, [12521] = 0x0443,
+-  [12522] = 0x0444, [12523] = 0x0445, [12524] = 0x0446, [12525] = 0x0447,
+-  [12526] = 0x0448, [12527] = 0x0449, [12528] = 0x044A, [12529] = 0x044B,
+-  [12530] = 0x044C, [12531] = 0x044D, [12532] = 0x044E, [12533] = 0x044F,
+-  [12534] = 0x21E7, [12535] = 0x21B8, [12536] = 0x21B9, [12537] = 0xF7E5,
+-  [12538] = 0xF7E6, [12539] = 0x4E5A, [12540] = 0xF7E8, [12541] = 0x5202,
+-  [12542] = 0xF7EA, [12577] = 0xF7EB, [12578] = 0x5188, [12579] = 0xF7ED,
+-  [12580] = 0xF7EE, [12621] = 0xFFE2, [12622] = 0xFFE4, [12623] = 0xFF07,
+-  [12624] = 0xFF02, [12625] = 0x3231, [12626] = 0x2116, [12627] = 0x2121,
+-  [12628] = 0x309B, [12629] = 0x309C, [12630] = 0x2E80, [12631] = 0x2E84,
+-  [12632] = 0x2E86, [12633] = 0x2E87, [12634] = 0x2E88, [12635] = 0x2E8A,
+-  [12636] = 0x2E8C, [12637] = 0x2E8D, [12638] = 0x2E95, [12639] = 0x2E9C,
+-  [12640] = 0x2E9D, [12641] = 0x2EA5, [12642] = 0x2EA7, [12643] = 0x2EAA,
+-  [12644] = 0x2EAC, [12645] = 0x2EAE, [12646] = 0x2EB6, [12647] = 0x2EBC,
+-  [12648] = 0x2EBE, [12649] = 0x2EC6, [12650] = 0x2ECA, [12651] = 0x2ECC,
+-  [12652] = 0x2ECD, [12653] = 0x2ECF, [12654] = 0x2ED6, [12655] = 0x2ED7,
+-  [12656] = 0x2EDE, [12657] = 0x2EE3, [12661] = 0x0283, [12662] = 0x0250,
+-  [12663] = 0x025B, [12664] = 0x0254, [12665] = 0x0275, [12666] = 0x0153,
+-  [12667] = 0x00F8, [12668] = 0x014B, [12669] = 0x028A, [12670] = 0x026A,
+-  [12675] = 0x4E42, [12676] = 0x4E5C, [12677] = 0x51F5, [12678] = 0x531A,
+-  [12679] = 0x5382, [12680] = 0x4E07, [12681] = 0x4E0C, [12682] = 0x4E47,
+-  [12683] = 0x4E8D, [12684] = 0x56D7, [12685] = 0xFA0C, [12686] = 0x5C6E,
+-  [12687] = 0x5F73, [12688] = 0x4E0F, [12689] = 0x5187, [12690] = 0x4E0E,
+-  [12691] = 0x4E2E, [12692] = 0x4E93, [12693] = 0x4EC2, [12694] = 0x4EC9,
+-  [12695] = 0x4EC8, [12696] = 0x5198, [12697] = 0x52FC, [12698] = 0x536C,
+-  [12699] = 0x53B9, [12700] = 0x5720, [12701] = 0x5903, [12702] = 0x592C,
+-  [12703] = 0x5C10, [12704] = 0x5DFF, [12705] = 0x65E1, [12706] = 0x6BB3,
+-  [12707] = 0x6BCC, [12708] = 0x6C14, [12709] = 0x723F, [12710] = 0x4E31,
+-  [12711] = 0x4E3C, [12712] = 0x4EE8, [12713] = 0x4EDC, [12714] = 0x4EE9,
+-  [12715] = 0x4EE1, [12716] = 0x4EDD, [12717] = 0x4EDA, [12718] = 0x520C,
+-  [12719] = 0x531C, [12720] = 0x534C, [12721] = 0x5722, [12722] = 0x5723,
+-  [12723] = 0x5917, [12724] = 0x592F, [12725] = 0x5B81, [12726] = 0x5B84,
+-  [12727] = 0x5C12, [12728] = 0x5C3B, [12729] = 0x5C74, [12730] = 0x5C73,
+-  [12731] = 0x5E04, [12732] = 0x5E80, [12733] = 0x5E82, [12734] = 0x5FC9,
+-  [12735] = 0x6209, [12736] = 0x6250, [12737] = 0x6C15, [12772] = 0x6C36,
+-  [12773] = 0x6C43, [12774] = 0x6C3F, [12775] = 0x6C3B, [12776] = 0x72AE,
+-  [12777] = 0x72B0, [12778] = 0x738A, [12779] = 0x79B8, [12780] = 0x808A,
+-  [12781] = 0x961E, [12782] = 0x4F0E, [12783] = 0x4F18, [12784] = 0x4F2C,
+-  [12785] = 0x4EF5, [12786] = 0x4F14, [12787] = 0x4EF1, [12788] = 0x4F00,
+-  [12789] = 0x4EF7, [12790] = 0x4F08, [12791] = 0x4F1D, [12792] = 0x4F02,
+-  [12793] = 0x4F05, [12794] = 0x4F22, [12795] = 0x4F13, [12796] = 0x4F04,
+-  [12797] = 0x4EF4, [12798] = 0x4F12, [12799] = 0x51B1, [12800] = 0x5213,
+-  [12801] = 0x5209, [12802] = 0x5210, [12803] = 0x52A6, [12804] = 0x5322,
+-  [12805] = 0x531F, [12806] = 0x534D, [12807] = 0x538A, [12808] = 0x5407,
+-  [12809] = 0x56E1, [12810] = 0x56DF, [12811] = 0x572E, [12812] = 0x572A,
+-  [12813] = 0x5734, [12814] = 0x593C, [12815] = 0x5980, [12816] = 0x597C,
+-  [12817] = 0x5985, [12818] = 0x597B, [12819] = 0x597E, [12820] = 0x5977,
+-  [12821] = 0x597F, [12822] = 0x5B56, [12823] = 0x5C15, [12824] = 0x5C25,
+-  [12825] = 0x5C7C, [12826] = 0x5C7A, [12827] = 0x5C7B, [12828] = 0x5C7E,
+-  [12829] = 0x5DDF, [12830] = 0x5E75, [12831] = 0x5E84, [12832] = 0x5F02,
+-  [12833] = 0x5F1A, [12834] = 0x5F74, [12835] = 0x5FD5, [12836] = 0x5FD4,
+-  [12837] = 0x5FCF, [12838] = 0x625C, [12839] = 0x625E, [12840] = 0x6264,
+-  [12841] = 0x6261, [12842] = 0x6266, [12843] = 0x6262, [12844] = 0x6259,
+-  [12845] = 0x6260, [12846] = 0x625A, [12847] = 0x6265, [12848] = 0x65EF,
+-  [12849] = 0x65EE, [12850] = 0x673E, [12851] = 0x6739, [12852] = 0x6738,
+-  [12853] = 0x673B, [12854] = 0x673A, [12855] = 0x673F, [12856] = 0x673C,
+-  [12857] = 0x6733, [12858] = 0x6C18, [12859] = 0x6C46, [12860] = 0x6C52,
+-  [12861] = 0x6C5C, [12862] = 0x6C4F, [12863] = 0x6C4A, [12864] = 0x6C54,
+-  [12865] = 0x6C4B, [12870] = 0x6C4C, [12871] = 0x7071, [12872] = 0x725E,
+-  [12873] = 0x72B4, [12874] = 0x72B5, [12875] = 0x738E, [12876] = 0x752A,
+-  [12877] = 0x767F, [12878] = 0x7A75, [12879] = 0x7F51, [12880] = 0x8278,
+-  [12881] = 0x827C, [12882] = 0x8280, [12883] = 0x827D, [12884] = 0x827F,
+-  [12885] = 0x864D, [12886] = 0x897E, [12887] = 0x9099, [12888] = 0x9097,
+-  [12889] = 0x9098, [12890] = 0x909B, [12891] = 0x9094, [12892] = 0x9622,
+-  [12893] = 0x9624, [12894] = 0x9620, [12895] = 0x9623, [12896] = 0x4F56,
+-  [12897] = 0x4F3B, [12898] = 0x4F62, [12899] = 0x4F49, [12900] = 0x4F53,
+-  [12901] = 0x4F64, [12902] = 0x4F3E, [12903] = 0x4F67, [12904] = 0x4F52,
+-  [12905] = 0x4F5F, [12906] = 0x4F41, [12907] = 0x4F58, [12908] = 0x4F2D,
+-  [12909] = 0x4F33, [12910] = 0x4F3F, [12911] = 0x4F61, [12912] = 0x518F,
+-  [12913] = 0x51B9, [12914] = 0x521C, [12915] = 0x521E, [12916] = 0x5221,
+-  [12917] = 0x52AD, [12918] = 0x52AE, [12919] = 0x5309, [12920] = 0x5363,
+-  [12921] = 0x5372, [12922] = 0x538E, [12923] = 0x538F, [12924] = 0x5430,
+-  [12925] = 0x5437, [12926] = 0x542A, [12927] = 0x5454, [12928] = 0x5445,
+-  [12929] = 0x5419, [12930] = 0x541C, [12931] = 0x5425, [12932] = 0x5418,
+-  [12967] = 0x543D, [12968] = 0x544F, [12969] = 0x5441, [12970] = 0x5428,
+-  [12971] = 0x5424, [12972] = 0x5447, [12973] = 0x56EE, [12974] = 0x56E7,
+-  [12975] = 0x56E5, [12976] = 0x5741, [12977] = 0x5745, [12978] = 0x574C,
+-  [12979] = 0x5749, [12980] = 0x574B, [12981] = 0x5752, [12982] = 0x5906,
+-  [12983] = 0x5940, [12984] = 0x59A6, [12985] = 0x5998, [12986] = 0x59A0,
+-  [12987] = 0x5997, [12988] = 0x598E, [12989] = 0x59A2, [12990] = 0x5990,
+-  [12991] = 0x598F, [12992] = 0x59A7, [12993] = 0x59A1, [12994] = 0x5B8E,
+-  [12995] = 0x5B92, [12996] = 0x5C28, [12997] = 0x5C2A, [12998] = 0x5C8D,
+-  [12999] = 0x5C8F, [13000] = 0x5C88, [13001] = 0x5C8B, [13002] = 0x5C89,
+-  [13003] = 0x5C92, [13004] = 0x5C8A, [13005] = 0x5C86, [13006] = 0x5C93,
+-  [13007] = 0x5C95, [13008] = 0x5DE0, [13009] = 0x5E0A, [13010] = 0x5E0E,
+-  [13011] = 0x5E8B, [13012] = 0x5E89, [13013] = 0x5E8C, [13014] = 0x5E88,
+-  [13015] = 0x5E8D, [13016] = 0x5F05, [13017] = 0x5F1D, [13018] = 0x5F78,
+-  [13019] = 0x5F76, [13020] = 0x5FD2, [13021] = 0x5FD1, [13022] = 0x5FD0,
+-  [13023] = 0x5FED, [13024] = 0x5FE8, [13025] = 0x5FEE, [13026] = 0x5FF3,
+-  [13027] = 0x5FE1, [13028] = 0x5FE4, [13029] = 0x5FE3, [13030] = 0x5FFA,
+-  [13031] = 0x5FEF, [13032] = 0x5FF7, [13033] = 0x5FFB, [13034] = 0x6000,
+-  [13035] = 0x5FF4, [13036] = 0x623A, [13037] = 0x6283, [13038] = 0x628C,
+-  [13039] = 0x628E, [13040] = 0x628F, [13041] = 0x6294, [13042] = 0x6287,
+-  [13043] = 0x6271, [13044] = 0x627B, [13045] = 0x627A, [13046] = 0x6270,
+-  [13047] = 0x6281, [13048] = 0x6288, [13049] = 0x6277, [13050] = 0x627D,
+-  [13051] = 0x6272, [13052] = 0x6274, [13053] = 0x6537, [13054] = 0x65F0,
+-  [13055] = 0x65F4, [13056] = 0x65F3, [13057] = 0x65F2, [13058] = 0x65F5,
+-  [13059] = 0x6745, [13060] = 0x6747, [13065] = 0x6759, [13066] = 0x6755,
+-  [13067] = 0x674C, [13068] = 0x6748, [13069] = 0x675D, [13070] = 0x674D,
+-  [13071] = 0x675A, [13072] = 0x674B, [13073] = 0x6BD0, [13074] = 0x6C19,
+-  [13075] = 0x6C1A, [13076] = 0x6C78, [13077] = 0x6C67, [13078] = 0x6C6B,
+-  [13079] = 0x6C84, [13080] = 0x6C8B, [13081] = 0x6C8F, [13082] = 0x6C71,
+-  [13083] = 0x6C6F, [13084] = 0x6C69, [13085] = 0x6C9A, [13086] = 0x6C6D,
+-  [13087] = 0x6C87, [13088] = 0x6C95, [13089] = 0x6C9C, [13090] = 0x6C66,
+-  [13091] = 0x6C73, [13092] = 0x6C65, [13093] = 0x6C7B, [13094] = 0x6C8E,
+-  [13095] = 0x7074, [13096] = 0x707A, [13097] = 0x7263, [13098] = 0x72BF,
+-  [13099] = 0x72BD, [13100] = 0x72C3, [13101] = 0x72C6, [13102] = 0x72C1,
+-  [13103] = 0x72BA, [13104] = 0x72C5, [13105] = 0x7395, [13106] = 0x7397,
+-  [13107] = 0x7393, [13108] = 0x7394, [13109] = 0x7392, [13110] = 0x753A,
+-  [13111] = 0x7539, [13112] = 0x7594, [13113] = 0x7595, [13114] = 0x7681,
+-  [13115] = 0x793D, [13116] = 0x8034, [13117] = 0x8095, [13118] = 0x8099,
+-  [13119] = 0x8090, [13120] = 0x8092, [13121] = 0x809C, [13122] = 0x8290,
+-  [13123] = 0x828F, [13124] = 0x8285, [13125] = 0x828E, [13126] = 0x8291,
+-  [13127] = 0x8293, [13162] = 0x828A, [13163] = 0x8283, [13164] = 0x8284,
+-  [13165] = 0x8C78, [13166] = 0x8FC9, [13167] = 0x8FBF, [13168] = 0x909F,
+-  [13169] = 0x90A1, [13170] = 0x90A5, [13171] = 0x909E, [13172] = 0x90A7,
+-  [13173] = 0x90A0, [13174] = 0x9630, [13175] = 0x9628, [13176] = 0x962F,
+-  [13177] = 0x962D, [13178] = 0x4E33, [13179] = 0x4F98, [13180] = 0x4F7C,
+-  [13181] = 0x4F85, [13182] = 0x4F7D, [13183] = 0x4F80, [13184] = 0x4F87,
+-  [13185] = 0x4F76, [13186] = 0x4F74, [13187] = 0x4F89, [13188] = 0x4F84,
+-  [13189] = 0x4F77, [13190] = 0x4F4C, [13191] = 0x4F97, [13192] = 0x4F6A,
+-  [13193] = 0x4F9A, [13194] = 0x4F79, [13195] = 0x4F81, [13196] = 0x4F78,
+-  [13197] = 0x4F90, [13198] = 0x4F9C, [13199] = 0x4F94, [13200] = 0x4F9E,
+-  [13201] = 0x4F92, [13202] = 0x4F82, [13203] = 0x4F95, [13204] = 0x4F6B,
+-  [13205] = 0x4F6E, [13206] = 0x519E, [13207] = 0x51BC, [13208] = 0x51BE,
+-  [13209] = 0x5235, [13210] = 0x5232, [13211] = 0x5233, [13212] = 0x5246,
+-  [13213] = 0x5231, [13214] = 0x52BC, [13215] = 0x530A, [13216] = 0x530B,
+-  [13217] = 0x533C, [13218] = 0x5392, [13219] = 0x5394, [13220] = 0x5487,
+-  [13221] = 0x547F, [13222] = 0x5481, [13223] = 0x5491, [13224] = 0x5482,
+-  [13225] = 0x5488, [13226] = 0x546B, [13227] = 0x547A, [13228] = 0x547E,
+-  [13229] = 0x5465, [13230] = 0x546C, [13231] = 0x5474, [13232] = 0x5466,
+-  [13233] = 0x548D, [13234] = 0x546F, [13235] = 0x5461, [13236] = 0x5460,
+-  [13237] = 0x5498, [13238] = 0x5463, [13239] = 0x5467, [13240] = 0x5464,
+-  [13241] = 0x56F7, [13242] = 0x56F9, [13243] = 0x576F, [13244] = 0x5772,
+-  [13245] = 0x576D, [13246] = 0x576B, [13247] = 0x5771, [13248] = 0x5770,
+-  [13249] = 0x5776, [13250] = 0x5780, [13251] = 0x5775, [13252] = 0x577B,
+-  [13253] = 0x5773, [13254] = 0x5774, [13255] = 0x5762, [13260] = 0x5768,
+-  [13261] = 0x577D, [13262] = 0x590C, [13263] = 0x5945, [13264] = 0x59B5,
+-  [13265] = 0x59BA, [13266] = 0x59CF, [13267] = 0x59CE, [13268] = 0x59B2,
+-  [13269] = 0x59CC, [13270] = 0x59C1, [13271] = 0x59B6, [13272] = 0x59BC,
+-  [13273] = 0x59C3, [13274] = 0x59D6, [13275] = 0x59B1, [13276] = 0x59BD,
+-  [13277] = 0x59C0, [13278] = 0x59C8, [13279] = 0x59B4, [13280] = 0x59C7,
+-  [13281] = 0x5B62, [13282] = 0x5B65, [13283] = 0x5B93, [13284] = 0x5B95,
+-  [13285] = 0x5C44, [13286] = 0x5C47, [13287] = 0x5CAE, [13288] = 0x5CA4,
+-  [13289] = 0x5CA0, [13290] = 0x5CB5, [13291] = 0x5CAF, [13292] = 0x5CA8,
+-  [13293] = 0x5CAC, [13294] = 0x5C9F, [13295] = 0x5CA3, [13296] = 0x5CAD,
+-  [13297] = 0x5CA2, [13298] = 0x5CAA, [13299] = 0x5CA7, [13300] = 0x5C9D,
+-  [13301] = 0x5CA5, [13302] = 0x5CB6, [13303] = 0x5CB0, [13304] = 0x5CA6,
+-  [13305] = 0x5E17, [13306] = 0x5E14, [13307] = 0x5E19, [13308] = 0x5F28,
+-  [13309] = 0x5F22, [13310] = 0x5F23, [13311] = 0x5F24, [13312] = 0x5F54,
+-  [13313] = 0x5F82, [13314] = 0x5F7E, [13315] = 0x5F7D, [13316] = 0x5FDE,
+-  [13317] = 0x5FE5, [13318] = 0x602D, [13319] = 0x6026, [13320] = 0x6019,
+-  [13321] = 0x6032, [13322] = 0x600B, [13357] = 0x6034, [13358] = 0x600A,
+-  [13359] = 0x6017, [13360] = 0x6033, [13361] = 0x601A, [13362] = 0x601E,
+-  [13363] = 0x602C, [13364] = 0x6022, [13365] = 0x600D, [13366] = 0x6010,
+-  [13367] = 0x602E, [13368] = 0x6013, [13369] = 0x6011, [13370] = 0x600C,
+-  [13371] = 0x6009, [13372] = 0x601C, [13373] = 0x6214, [13374] = 0x623D,
+-  [13375] = 0x62AD, [13376] = 0x62B4, [13377] = 0x62D1, [13378] = 0x62BE,
+-  [13379] = 0x62AA, [13380] = 0x62B6, [13381] = 0x62CA, [13382] = 0x62AE,
+-  [13383] = 0x62B3, [13384] = 0x62AF, [13385] = 0x62BB, [13386] = 0x62A9,
+-  [13387] = 0x62B0, [13388] = 0x62B8, [13389] = 0x653D, [13390] = 0x65A8,
+-  [13391] = 0x65BB, [13392] = 0x6609, [13393] = 0x65FC, [13394] = 0x6604,
+-  [13395] = 0x6612, [13396] = 0x6608, [13397] = 0x65FB, [13398] = 0x6603,
+-  [13399] = 0x660B, [13400] = 0x660D, [13401] = 0x6605, [13402] = 0x65FD,
+-  [13403] = 0x6611, [13404] = 0x6610, [13405] = 0x66F6, [13406] = 0x670A,
+-  [13407] = 0x6785, [13408] = 0x676C, [13409] = 0x678E, [13410] = 0x6792,
+-  [13411] = 0x6776, [13412] = 0x677B, [13413] = 0x6798, [13414] = 0x6786,
+-  [13415] = 0x6784, [13416] = 0x6774, [13417] = 0x678D, [13418] = 0x678C,
+-  [13419] = 0x677A, [13420] = 0x679F, [13421] = 0x6791, [13422] = 0x6799,
+-  [13423] = 0x6783, [13424] = 0x677D, [13425] = 0x6781, [13426] = 0x6778,
+-  [13427] = 0x6779, [13428] = 0x6794, [13429] = 0x6B25, [13430] = 0x6B80,
+-  [13431] = 0x6B7E, [13432] = 0x6BDE, [13433] = 0x6C1D, [13434] = 0x6C93,
+-  [13435] = 0x6CEC, [13436] = 0x6CEB, [13437] = 0x6CEE, [13438] = 0x6CD9,
+-  [13439] = 0x6CB6, [13440] = 0x6CD4, [13441] = 0x6CAD, [13442] = 0x6CE7,
+-  [13443] = 0x6CB7, [13444] = 0x6CD0, [13445] = 0x6CC2, [13446] = 0x6CBA,
+-  [13447] = 0x6CC3, [13448] = 0x6CC6, [13449] = 0x6CED, [13450] = 0x6CF2,
+-  [13455] = 0x6CD2, [13456] = 0x6CDD, [13457] = 0x6CB4, [13458] = 0x6C8A,
+-  [13459] = 0x6C9D, [13460] = 0x6C80, [13461] = 0x6CDE, [13462] = 0x6CC0,
+-  [13463] = 0x6D30, [13464] = 0x6CCD, [13465] = 0x6CC7, [13466] = 0x6CB0,
+-  [13467] = 0x6CF9, [13468] = 0x6CCF, [13469] = 0x6CE9, [13470] = 0x6CD1,
+-  [13471] = 0x7094, [13472] = 0x7098, [13473] = 0x7085, [13474] = 0x7093,
+-  [13475] = 0x7086, [13476] = 0x7084, [13477] = 0x7091, [13478] = 0x7096,
+-  [13479] = 0x7082, [13480] = 0x709A, [13481] = 0x7083, [13482] = 0x726A,
+-  [13483] = 0x72D6, [13484] = 0x72CB, [13485] = 0x72D8, [13486] = 0x72C9,
+-  [13487] = 0x72DC, [13488] = 0x72D2, [13489] = 0x72D4, [13490] = 0x72DA,
+-  [13491] = 0x72CC, [13492] = 0x72D1, [13493] = 0x73A4, [13494] = 0x73A1,
+-  [13495] = 0x73AD, [13496] = 0x73A6, [13497] = 0x73A2, [13498] = 0x73A0,
+-  [13499] = 0x73AC, [13500] = 0x739D, [13501] = 0x74DD, [13502] = 0x74E8,
+-  [13503] = 0x753F, [13504] = 0x7540, [13505] = 0x753E, [13506] = 0x758C,
+-  [13507] = 0x7598, [13508] = 0x76AF, [13509] = 0x76F3, [13510] = 0x76F1,
+-  [13511] = 0x76F0, [13512] = 0x76F5, [13513] = 0x77F8, [13514] = 0x77FC,
+-  [13515] = 0x77F9, [13516] = 0x77FB, [13517] = 0x77FA, [13552] = 0x77F7,
+-  [13553] = 0x7942, [13554] = 0x793F, [13555] = 0x79C5, [13556] = 0x7A78,
+-  [13557] = 0x7A7B, [13558] = 0x7AFB, [13559] = 0x7C75, [13560] = 0x7CFD,
+-  [13561] = 0x8035, [13562] = 0x808F, [13563] = 0x80AE, [13564] = 0x80A3,
+-  [13565] = 0x80B8, [13566] = 0x80B5, [13567] = 0x80AD, [13568] = 0x8220,
+-  [13569] = 0x82A0, [13570] = 0x82C0, [13571] = 0x82AB, [13572] = 0x829A,
+-  [13573] = 0x8298, [13574] = 0x829B, [13575] = 0x82B5, [13576] = 0x82A7,
+-  [13577] = 0x82AE, [13578] = 0x82BC, [13579] = 0x829E, [13580] = 0x82BA,
+-  [13581] = 0x82B4, [13582] = 0x82A8, [13583] = 0x82A1, [13584] = 0x82A9,
+-  [13585] = 0x82C2, [13586] = 0x82A4, [13587] = 0x82C3, [13588] = 0x82B6,
+-  [13589] = 0x82A2, [13590] = 0x8670, [13591] = 0x866F, [13592] = 0x866D,
+-  [13593] = 0x866E, [13594] = 0x8C56, [13595] = 0x8FD2, [13596] = 0x8FCB,
+-  [13597] = 0x8FD3, [13598] = 0x8FCD, [13599] = 0x8FD6, [13600] = 0x8FD5,
+-  [13601] = 0x8FD7, [13602] = 0x90B2, [13603] = 0x90B4, [13604] = 0x90AF,
+-  [13605] = 0x90B3, [13606] = 0x90B0, [13607] = 0x9639, [13608] = 0x963D,
+-  [13609] = 0x963C, [13610] = 0x963A, [13611] = 0x9643, [13612] = 0x4FCD,
+-  [13613] = 0x4FC5, [13614] = 0x4FD3, [13615] = 0x4FB2, [13616] = 0x4FC9,
+-  [13617] = 0x4FCB, [13618] = 0x4FC1, [13619] = 0x4FD4, [13620] = 0x4FDC,
+-  [13621] = 0x4FD9, [13622] = 0x4FBB, [13623] = 0x4FB3, [13624] = 0x4FDB,
+-  [13625] = 0x4FC7, [13626] = 0x4FD6, [13627] = 0x4FBA, [13628] = 0x4FC0,
+-  [13629] = 0x4FB9, [13630] = 0x4FEC, [13631] = 0x5244, [13632] = 0x5249,
+-  [13633] = 0x52C0, [13634] = 0x52C2, [13635] = 0x533D, [13636] = 0x537C,
+-  [13637] = 0x5397, [13638] = 0x5396, [13639] = 0x5399, [13640] = 0x5398,
+-  [13641] = 0x54BA, [13642] = 0x54A1, [13643] = 0x54AD, [13644] = 0x54A5,
+-  [13645] = 0x54CF, [13650] = 0x54C3, [13651] = 0x830D, [13652] = 0x54B7,
+-  [13653] = 0x54AE, [13654] = 0x54D6, [13655] = 0x54B6, [13656] = 0x54C5,
+-  [13657] = 0x54C6, [13658] = 0x54A0, [13659] = 0x5470, [13660] = 0x54BC,
+-  [13661] = 0x54A2, [13662] = 0x54BE, [13663] = 0x5472, [13664] = 0x54DE,
+-  [13665] = 0x54B0, [13666] = 0x57B5, [13667] = 0x579E, [13668] = 0x579F,
+-  [13669] = 0x57A4, [13670] = 0x578C, [13671] = 0x5797, [13672] = 0x579D,
+-  [13673] = 0x579B, [13674] = 0x5794, [13675] = 0x5798, [13676] = 0x578F,
+-  [13677] = 0x5799, [13678] = 0x57A5, [13679] = 0x579A, [13680] = 0x5795,
+-  [13681] = 0x58F4, [13682] = 0x590D, [13683] = 0x5953, [13684] = 0x59E1,
+-  [13685] = 0x59DE, [13686] = 0x59EE, [13687] = 0x5A00, [13688] = 0x59F1,
+-  [13689] = 0x59DD, [13690] = 0x59FA, [13691] = 0x59FD, [13692] = 0x59FC,
+-  [13693] = 0x59F6, [13694] = 0x59E4, [13695] = 0x59F2, [13696] = 0x59F7,
+-  [13697] = 0x59DB, [13698] = 0x59E9, [13699] = 0x59F3, [13700] = 0x59F5,
+-  [13701] = 0x59E0, [13702] = 0x59FE, [13703] = 0x59F4, [13704] = 0x59ED,
+-  [13705] = 0x5BA8, [13706] = 0x5C4C, [13707] = 0x5CD0, [13708] = 0x5CD8,
+-  [13709] = 0x5CCC, [13710] = 0x5CD7, [13711] = 0x5CCB, [13712] = 0x5CDB,
+-  [13747] = 0x5CDE, [13748] = 0x5CDA, [13749] = 0x5CC9, [13750] = 0x5CC7,
+-  [13751] = 0x5CCA, [13752] = 0x5CD6, [13753] = 0x5CD3, [13754] = 0x5CD4,
+-  [13755] = 0x5CCF, [13756] = 0x5CC8, [13757] = 0x5CC6, [13758] = 0x5CCE,
+-  [13759] = 0x5CDF, [13760] = 0x5CF8, [13761] = 0x5DF9, [13762] = 0x5E21,
+-  [13763] = 0x5E22, [13764] = 0x5E23, [13765] = 0x5E20, [13766] = 0x5E24,
+-  [13767] = 0x5EB0, [13768] = 0x5EA4, [13769] = 0x5EA2, [13770] = 0x5E9B,
+-  [13771] = 0x5EA3, [13772] = 0x5EA5, [13773] = 0x5F07, [13774] = 0x5F2E,
+-  [13775] = 0x5F56, [13776] = 0x5F86, [13777] = 0x6037, [13778] = 0x6039,
+-  [13779] = 0x6054, [13780] = 0x6072, [13781] = 0x605E, [13782] = 0x6045,
+-  [13783] = 0x6053, [13784] = 0x6047, [13785] = 0x6049, [13786] = 0x605B,
+-  [13787] = 0x604C, [13788] = 0x6040, [13789] = 0x6042, [13790] = 0x605F,
+-  [13791] = 0x6024, [13792] = 0x6044, [13793] = 0x6058, [13794] = 0x6066,
+-  [13795] = 0x606E, [13796] = 0x6242, [13797] = 0x6243, [13798] = 0x62CF,
+-  [13799] = 0x630D, [13800] = 0x630B, [13801] = 0x62F5, [13802] = 0x630E,
+-  [13803] = 0x6303, [13804] = 0x62EB, [13805] = 0x62F9, [13806] = 0x630F,
+-  [13807] = 0x630C, [13808] = 0x62F8, [13809] = 0x62F6, [13810] = 0x6300,
+-  [13811] = 0x6313, [13812] = 0x6314, [13813] = 0x62FA, [13814] = 0x6315,
+-  [13815] = 0x62FB, [13816] = 0x62F0, [13817] = 0x6541, [13818] = 0x6543,
+-  [13819] = 0x65AA, [13820] = 0x65BF, [13821] = 0x6636, [13822] = 0x6621,
+-  [13823] = 0x6632, [13824] = 0x6635, [13825] = 0x661C, [13826] = 0x6626,
+-  [13827] = 0x6622, [13828] = 0x6633, [13829] = 0x662B, [13830] = 0x663A,
+-  [13831] = 0x661D, [13832] = 0x6634, [13833] = 0x6639, [13834] = 0x662E,
+-  [13835] = 0x670F, [13836] = 0x6710, [13837] = 0x67C1, [13838] = 0x67F2,
+-  [13839] = 0x67C8, [13840] = 0x67BA, [13845] = 0x67DC, [13846] = 0x67BB,
+-  [13847] = 0x67F8, [13848] = 0x67D8, [13849] = 0x67C0, [13850] = 0x67B7,
+-  [13851] = 0x67C5, [13852] = 0x67EB, [13853] = 0x67E4, [13854] = 0x67DF,
+-  [13855] = 0x67B5, [13856] = 0x67CD, [13857] = 0x67B3, [13858] = 0x67F7,
+-  [13859] = 0x67F6, [13860] = 0x67EE, [13861] = 0x67E3, [13862] = 0x67C2,
+-  [13863] = 0x67B9, [13864] = 0x67CE, [13865] = 0x67E7, [13866] = 0x67F0,
+-  [13867] = 0x67B2, [13868] = 0x67FC, [13869] = 0x67C6, [13870] = 0x67ED,
+-  [13871] = 0x67CC, [13872] = 0x67AE, [13873] = 0x67E6, [13874] = 0x67DB,
+-  [13875] = 0x67FA, [13876] = 0x67C9, [13877] = 0x67CA, [13878] = 0x67C3,
+-  [13879] = 0x67EA, [13880] = 0x67CB, [13881] = 0x6B28, [13882] = 0x6B82,
+-  [13883] = 0x6B84, [13884] = 0x6BB6, [13885] = 0x6BD6, [13886] = 0x6BD8,
+-  [13887] = 0x6BE0, [13888] = 0x6C20, [13889] = 0x6C21, [13890] = 0x6D28,
+-  [13891] = 0x6D34, [13892] = 0x6D2D, [13893] = 0x6D1F, [13894] = 0x6D3C,
+-  [13895] = 0x6D3F, [13896] = 0x6D12, [13897] = 0x6D0A, [13898] = 0x6CDA,
+-  [13899] = 0x6D33, [13900] = 0x6D04, [13901] = 0x6D19, [13902] = 0x6D3A,
+-  [13903] = 0x6D1A, [13904] = 0x6D11, [13905] = 0x6D00, [13906] = 0x6D1D,
+-  [13907] = 0x6D42, [13942] = 0x6D01, [13943] = 0x6D18, [13944] = 0x6D37,
+-  [13945] = 0x6D03, [13946] = 0x6D0F, [13947] = 0x6D40, [13948] = 0x6D07,
+-  [13949] = 0x6D20, [13950] = 0x6D2C, [13951] = 0x6D08, [13952] = 0x6D22,
+-  [13953] = 0x6D09, [13954] = 0x6D10, [13955] = 0x70B7, [13956] = 0x709F,
+-  [13957] = 0x70BE, [13958] = 0x70B1, [13959] = 0x70B0, [13960] = 0x70A1,
+-  [13961] = 0x70B4, [13962] = 0x70B5, [13963] = 0x70A9, [13964] = 0x7241,
+-  [13965] = 0x7249, [13966] = 0x724A, [13967] = 0x726C, [13968] = 0x7270,
+-  [13969] = 0x7273, [13970] = 0x726E, [13971] = 0x72CA, [13972] = 0x72E4,
+-  [13973] = 0x72E8, [13974] = 0x72EB, [13975] = 0x72DF, [13976] = 0x72EA,
+-  [13977] = 0x72E6, [13978] = 0x72E3, [13979] = 0x7385, [13980] = 0x73CC,
+-  [13981] = 0x73C2, [13982] = 0x73C8, [13983] = 0x73C5, [13984] = 0x73B9,
+-  [13985] = 0x73B6, [13986] = 0x73B5, [13987] = 0x73B4, [13988] = 0x73EB,
+-  [13989] = 0x73BF, [13990] = 0x73C7, [13991] = 0x73BE, [13992] = 0x73C3,
+-  [13993] = 0x73C6, [13994] = 0x73B8, [13995] = 0x73CB, [13996] = 0x74EC,
+-  [13997] = 0x74EE, [13998] = 0x752E, [13999] = 0x7547, [14000] = 0x7548,
+-  [14001] = 0x75A7, [14002] = 0x75AA, [14003] = 0x7679, [14004] = 0x76C4,
+-  [14005] = 0x7708, [14006] = 0x7703, [14007] = 0x7704, [14008] = 0x7705,
+-  [14009] = 0x770A, [14010] = 0x76F7, [14011] = 0x76FB, [14012] = 0x76FA,
+-  [14013] = 0x77E7, [14014] = 0x77E8, [14015] = 0x7806, [14016] = 0x7811,
+-  [14017] = 0x7812, [14018] = 0x7805, [14019] = 0x7810, [14020] = 0x780F,
+-  [14021] = 0x780E, [14022] = 0x7809, [14023] = 0x7803, [14024] = 0x7813,
+-  [14025] = 0x794A, [14026] = 0x794C, [14027] = 0x794B, [14028] = 0x7945,
+-  [14029] = 0x7944, [14030] = 0x79D5, [14031] = 0x79CD, [14032] = 0x79CF,
+-  [14033] = 0x79D6, [14034] = 0x79CE, [14035] = 0x7A80, [14040] = 0x7A7E,
+-  [14041] = 0x7AD1, [14042] = 0x7B00, [14043] = 0x7B01, [14044] = 0x7C7A,
+-  [14045] = 0x7C78, [14046] = 0x7C79, [14047] = 0x7C7F, [14048] = 0x7C80,
+-  [14049] = 0x7C81, [14050] = 0x7D03, [14051] = 0x7D08, [14052] = 0x7D01,
+-  [14053] = 0x7F58, [14054] = 0x7F91, [14055] = 0x7F8D, [14056] = 0x7FBE,
+-  [14057] = 0x8007, [14058] = 0x800E, [14059] = 0x800F, [14060] = 0x8014,
+-  [14061] = 0x8037, [14062] = 0x80D8, [14063] = 0x80C7, [14064] = 0x80E0,
+-  [14065] = 0x80D1, [14066] = 0x80C8, [14067] = 0x80C2, [14068] = 0x80D0,
+-  [14069] = 0x80C5, [14070] = 0x80E3, [14071] = 0x80D9, [14072] = 0x80DC,
+-  [14073] = 0x80CA, [14074] = 0x80D5, [14075] = 0x80C9, [14076] = 0x80CF,
+-  [14077] = 0x80D7, [14078] = 0x80E6, [14079] = 0x80CD, [14080] = 0x81FF,
+-  [14081] = 0x8221, [14082] = 0x8294, [14083] = 0x82D9, [14084] = 0x82FE,
+-  [14085] = 0x82F9, [14086] = 0x8307, [14087] = 0x82E8, [14088] = 0x8300,
+-  [14089] = 0x82D5, [14090] = 0x833A, [14091] = 0x82EB, [14092] = 0x82D6,
+-  [14093] = 0x82F4, [14094] = 0x82EC, [14095] = 0x82E1, [14096] = 0x82F2,
+-  [14097] = 0x82F5, [14098] = 0x830C, [14099] = 0x82FB, [14100] = 0x82F6,
+-  [14101] = 0x82F0, [14102] = 0x82EA, [14137] = 0x82E4, [14138] = 0x82E0,
+-  [14139] = 0x82FA, [14140] = 0x82F3, [14141] = 0x82ED, [14142] = 0x8677,
+-  [14143] = 0x8674, [14144] = 0x867C, [14145] = 0x8673, [14146] = 0x8841,
+-  [14147] = 0x884E, [14148] = 0x8867, [14149] = 0x886A, [14150] = 0x8869,
+-  [14151] = 0x89D3, [14152] = 0x8A04, [14153] = 0x8A07, [14154] = 0x8D72,
+-  [14155] = 0x8FE3, [14156] = 0x8FE1, [14157] = 0x8FEE, [14158] = 0x8FE0,
+-  [14159] = 0x90F1, [14160] = 0x90BD, [14161] = 0x90BF, [14162] = 0x90D5,
+-  [14163] = 0x90C5, [14164] = 0x90BE, [14165] = 0x90C7, [14166] = 0x90CB,
+-  [14167] = 0x90C8, [14168] = 0x91D4, [14169] = 0x91D3, [14170] = 0x9654,
+-  [14171] = 0x964F, [14172] = 0x9651, [14173] = 0x9653, [14174] = 0x964A,
+-  [14175] = 0x964E, [14176] = 0x501E, [14177] = 0x5005, [14178] = 0x5007,
+-  [14179] = 0x5013, [14180] = 0x5022, [14181] = 0x5030, [14182] = 0x501B,
+-  [14183] = 0x4FF5, [14184] = 0x4FF4, [14185] = 0x5033, [14186] = 0x5037,
+-  [14187] = 0x502C, [14188] = 0x4FF6, [14189] = 0x4FF7, [14190] = 0x5017,
+-  [14191] = 0x501C, [14192] = 0x5020, [14193] = 0x5027, [14194] = 0x5035,
+-  [14195] = 0x502F, [14196] = 0x5031, [14197] = 0x500E, [14198] = 0x515A,
+-  [14199] = 0x5194, [14200] = 0x5193, [14201] = 0x51CA, [14202] = 0x51C4,
+-  [14203] = 0x51C5, [14204] = 0x51C8, [14205] = 0x51CE, [14206] = 0x5261,
+-  [14207] = 0x525A, [14208] = 0x5252, [14209] = 0x525E, [14210] = 0x525F,
+-  [14211] = 0x5255, [14212] = 0x5262, [14213] = 0x52CD, [14214] = 0x530E,
+-  [14215] = 0x539E, [14216] = 0x5526, [14217] = 0x54E2, [14218] = 0x5517,
+-  [14219] = 0x5512, [14220] = 0x54E7, [14221] = 0x54F3, [14222] = 0x54E4,
+-  [14223] = 0x551A, [14224] = 0x54FF, [14225] = 0x5504, [14226] = 0x5508,
+-  [14227] = 0x54EB, [14228] = 0x5511, [14229] = 0x5505, [14230] = 0x54F1,
+-  [14235] = 0x550A, [14236] = 0x54FB, [14237] = 0x54F7, [14238] = 0x54F8,
+-  [14239] = 0x54E0, [14240] = 0x550E, [14241] = 0x5503, [14242] = 0x550B,
+-  [14243] = 0x5701, [14244] = 0x5702, [14245] = 0x57CC, [14246] = 0x5832,
+-  [14247] = 0x57D5, [14248] = 0x57D2, [14249] = 0x57BA, [14250] = 0x57C6,
+-  [14251] = 0x57BD, [14252] = 0x57BC, [14253] = 0x57B8, [14254] = 0x57B6,
+-  [14255] = 0x57BF, [14256] = 0x57C7, [14257] = 0x57D0, [14258] = 0x57B9,
+-  [14259] = 0x57C1, [14260] = 0x590E, [14261] = 0x594A, [14262] = 0x5A19,
+-  [14263] = 0x5A16, [14264] = 0x5A2D, [14265] = 0x5A2E, [14266] = 0x5A15,
+-  [14267] = 0x5A0F, [14268] = 0x5A17, [14269] = 0x5A0A, [14270] = 0x5A1E,
+-  [14271] = 0x5A33, [14272] = 0x5B6C, [14273] = 0x5BA7, [14274] = 0x5BAD,
+-  [14275] = 0x5BAC, [14276] = 0x5C03, [14277] = 0x5C56, [14278] = 0x5C54,
+-  [14279] = 0x5CEC, [14280] = 0x5CFF, [14281] = 0x5CEE, [14282] = 0x5CF1,
+-  [14283] = 0x5CF7, [14284] = 0x5D00, [14285] = 0x5CF9, [14286] = 0x5E29,
+-  [14287] = 0x5E28, [14288] = 0x5EA8, [14289] = 0x5EAE, [14290] = 0x5EAA,
+-  [14291] = 0x5EAC, [14292] = 0x5F33, [14293] = 0x5F30, [14294] = 0x5F67,
+-  [14295] = 0x605D, [14296] = 0x605A, [14297] = 0x6067, [14332] = 0x6041,
+-  [14333] = 0x60A2, [14334] = 0x6088, [14335] = 0x6080, [14336] = 0x6092,
+-  [14337] = 0x6081, [14338] = 0x609D, [14339] = 0x6083, [14340] = 0x6095,
+-  [14341] = 0x609B, [14342] = 0x6097, [14343] = 0x6087, [14344] = 0x609C,
+-  [14345] = 0x608E, [14346] = 0x6219, [14347] = 0x6246, [14348] = 0x62F2,
+-  [14349] = 0x6310, [14350] = 0x6356, [14351] = 0x632C, [14352] = 0x6344,
+-  [14353] = 0x6345, [14354] = 0x6336, [14355] = 0x6343, [14356] = 0x63E4,
+-  [14357] = 0x6339, [14358] = 0x634B, [14359] = 0x634A, [14360] = 0x633C,
+-  [14361] = 0x6329, [14362] = 0x6341, [14363] = 0x6334, [14364] = 0x6358,
+-  [14365] = 0x6354, [14366] = 0x6359, [14367] = 0x632D, [14368] = 0x6347,
+-  [14369] = 0x6333, [14370] = 0x635A, [14371] = 0x6351, [14372] = 0x6338,
+-  [14373] = 0x6357, [14374] = 0x6340, [14375] = 0x6348, [14376] = 0x654A,
+-  [14377] = 0x6546, [14378] = 0x65C6, [14379] = 0x65C3, [14380] = 0x65C4,
+-  [14381] = 0x65C2, [14382] = 0x664A, [14383] = 0x665F, [14384] = 0x6647,
+-  [14385] = 0x6651, [14386] = 0x6712, [14387] = 0x6713, [14388] = 0x681F,
+-  [14389] = 0x681A, [14390] = 0x6849, [14391] = 0x6832, [14392] = 0x6833,
+-  [14393] = 0x683B, [14394] = 0x684B, [14395] = 0x684F, [14396] = 0x6816,
+-  [14397] = 0x6831, [14398] = 0x681C, [14399] = 0x6835, [14400] = 0x682B,
+-  [14401] = 0x682D, [14402] = 0x682F, [14403] = 0x684E, [14404] = 0x6844,
+-  [14405] = 0x6834, [14406] = 0x681D, [14407] = 0x6812, [14408] = 0x6814,
+-  [14409] = 0x6826, [14410] = 0x6828, [14411] = 0x682E, [14412] = 0x684D,
+-  [14413] = 0x683A, [14414] = 0x6825, [14415] = 0x6820, [14416] = 0x6B2C,
+-  [14417] = 0x6B2F, [14418] = 0x6B2D, [14419] = 0x6B31, [14420] = 0x6B34,
+-  [14421] = 0x6B6D, [14422] = 0x8082, [14423] = 0x6B88, [14424] = 0x6BE6,
+-  [14425] = 0x6BE4, [14430] = 0x6BE8, [14431] = 0x6BE3, [14432] = 0x6BE2,
+-  [14433] = 0x6BE7, [14434] = 0x6C25, [14435] = 0x6D7A, [14436] = 0x6D63,
+-  [14437] = 0x6D64, [14438] = 0x6D76, [14439] = 0x6D0D, [14440] = 0x6D61,
+-  [14441] = 0x6D92, [14442] = 0x6D58, [14443] = 0x6D62, [14444] = 0x6D6D,
+-  [14445] = 0x6D6F, [14446] = 0x6D91, [14447] = 0x6D8D, [14448] = 0x6DEF,
+-  [14449] = 0x6D7F, [14450] = 0x6D86, [14451] = 0x6D5E, [14452] = 0x6D67,
+-  [14453] = 0x6D60, [14454] = 0x6D97, [14455] = 0x6D70, [14456] = 0x6D7C,
+-  [14457] = 0x6D5F, [14458] = 0x6D82, [14459] = 0x6D98, [14460] = 0x6D2F,
+-  [14461] = 0x6D68, [14462] = 0x6D8B, [14463] = 0x6D7E, [14464] = 0x6D80,
+-  [14465] = 0x6D84, [14466] = 0x6D16, [14467] = 0x6D83, [14468] = 0x6D7B,
+-  [14469] = 0x6D7D, [14470] = 0x6D75, [14471] = 0x6D90, [14472] = 0x70DC,
+-  [14473] = 0x70D3, [14474] = 0x70D1, [14475] = 0x70DD, [14476] = 0x70CB,
+-  [14477] = 0x7F39, [14478] = 0x70E2, [14479] = 0x70D7, [14480] = 0x70D2,
+-  [14481] = 0x70DE, [14482] = 0x70E0, [14483] = 0x70D4, [14484] = 0x70CD,
+-  [14485] = 0x70C5, [14486] = 0x70C6, [14487] = 0x70C7, [14488] = 0x70DA,
+-  [14489] = 0x70CE, [14490] = 0x70E1, [14491] = 0x7242, [14492] = 0x7278,
+-  [14527] = 0x7277, [14528] = 0x7276, [14529] = 0x7300, [14530] = 0x72FA,
+-  [14531] = 0x72F4, [14532] = 0x72FE, [14533] = 0x72F6, [14534] = 0x72F3,
+-  [14535] = 0x72FB, [14536] = 0x7301, [14537] = 0x73D3, [14538] = 0x73D9,
+-  [14539] = 0x73E5, [14540] = 0x73D6, [14541] = 0x73BC, [14542] = 0x73E7,
+-  [14543] = 0x73E3, [14544] = 0x73E9, [14545] = 0x73DC, [14546] = 0x73D2,
+-  [14547] = 0x73DB, [14548] = 0x73D4, [14549] = 0x73DD, [14550] = 0x73DA,
+-  [14551] = 0x73D7, [14552] = 0x73D8, [14553] = 0x73E8, [14554] = 0x74DE,
+-  [14555] = 0x74DF, [14556] = 0x74F4, [14557] = 0x74F5, [14558] = 0x7521,
+-  [14559] = 0x755B, [14560] = 0x755F, [14561] = 0x75B0, [14562] = 0x75C1,
+-  [14563] = 0x75BB, [14564] = 0x75C4, [14565] = 0x75C0, [14566] = 0x75BF,
+-  [14567] = 0x75B6, [14568] = 0x75BA, [14569] = 0x768A, [14570] = 0x76C9,
+-  [14571] = 0x771D, [14572] = 0x771B, [14573] = 0x7710, [14574] = 0x7713,
+-  [14575] = 0x7712, [14576] = 0x7723, [14577] = 0x7711, [14578] = 0x7715,
+-  [14579] = 0x7719, [14580] = 0x771A, [14581] = 0x7722, [14582] = 0x7727,
+-  [14583] = 0x7823, [14584] = 0x782C, [14585] = 0x7822, [14586] = 0x7835,
+-  [14587] = 0x782F, [14588] = 0x7828, [14589] = 0x782E, [14590] = 0x782B,
+-  [14591] = 0x7821, [14592] = 0x7829, [14593] = 0x7833, [14594] = 0x782A,
+-  [14595] = 0x7831, [14596] = 0x7954, [14597] = 0x795B, [14598] = 0x794F,
+-  [14599] = 0x795C, [14600] = 0x7953, [14601] = 0x7952, [14602] = 0x7951,
+-  [14603] = 0x79EB, [14604] = 0x79EC, [14605] = 0x79E0, [14606] = 0x79EE,
+-  [14607] = 0x79ED, [14608] = 0x79EA, [14609] = 0x79DC, [14610] = 0x79DE,
+-  [14611] = 0x79DD, [14612] = 0x7A86, [14613] = 0x7A89, [14614] = 0x7A85,
+-  [14615] = 0x7A8B, [14616] = 0x7A8C, [14617] = 0x7A8A, [14618] = 0x7A87,
+-  [14619] = 0x7AD8, [14620] = 0x7B10, [14625] = 0x7B04, [14626] = 0x7B13,
+-  [14627] = 0x7B05, [14628] = 0x7B0F, [14629] = 0x7B08, [14630] = 0x7B0A,
+-  [14631] = 0x7B0E, [14632] = 0x7B09, [14633] = 0x7B12, [14634] = 0x7C84,
+-  [14635] = 0x7C91, [14636] = 0x7C8A, [14637] = 0x7C8C, [14638] = 0x7C88,
+-  [14639] = 0x7C8D, [14640] = 0x7C85, [14641] = 0x7D1E, [14642] = 0x7D1D,
+-  [14643] = 0x7D11, [14644] = 0x7D0E, [14645] = 0x7D18, [14646] = 0x7D16,
+-  [14647] = 0x7D13, [14648] = 0x7D1F, [14649] = 0x7D12, [14650] = 0x7D0F,
+-  [14651] = 0x7D0C, [14652] = 0x7F5C, [14653] = 0x7F61, [14654] = 0x7F5E,
+-  [14655] = 0x7F60, [14656] = 0x7F5D, [14657] = 0x7F5B, [14658] = 0x7F96,
+-  [14659] = 0x7F92, [14660] = 0x7FC3, [14661] = 0x7FC2, [14662] = 0x7FC0,
+-  [14663] = 0x8016, [14664] = 0x803E, [14665] = 0x8039, [14666] = 0x80FA,
+-  [14667] = 0x80F2, [14668] = 0x80F9, [14669] = 0x80F5, [14670] = 0x8101,
+-  [14671] = 0x80FB, [14672] = 0x8100, [14673] = 0x8201, [14674] = 0x822F,
+-  [14675] = 0x8225, [14676] = 0x8333, [14677] = 0x832D, [14678] = 0x8344,
+-  [14679] = 0x8319, [14680] = 0x8351, [14681] = 0x8325, [14682] = 0x8356,
+-  [14683] = 0x833F, [14684] = 0x8341, [14685] = 0x8326, [14686] = 0x831C,
+-  [14687] = 0x8322, [14722] = 0x8342, [14723] = 0x834E, [14724] = 0x831B,
+-  [14725] = 0x832A, [14726] = 0x8308, [14727] = 0x833C, [14728] = 0x834D,
+-  [14729] = 0x8316, [14730] = 0x8324, [14731] = 0x8320, [14732] = 0x8337,
+-  [14733] = 0x832F, [14734] = 0x8329, [14735] = 0x8347, [14736] = 0x8345,
+-  [14737] = 0x834C, [14738] = 0x8353, [14739] = 0x831E, [14740] = 0x832C,
+-  [14741] = 0x834B, [14742] = 0x8327, [14743] = 0x8348, [14744] = 0x8653,
+-  [14745] = 0x8652, [14746] = 0x86A2, [14747] = 0x86A8, [14748] = 0x8696,
+-  [14749] = 0x868D, [14750] = 0x8691, [14751] = 0x869E, [14752] = 0x8687,
+-  [14753] = 0x8697, [14754] = 0x8686, [14755] = 0x868B, [14756] = 0x869A,
+-  [14757] = 0x8685, [14758] = 0x86A5, [14759] = 0x8699, [14760] = 0x86A1,
+-  [14761] = 0x86A7, [14762] = 0x8695, [14763] = 0x8698, [14764] = 0x868E,
+-  [14765] = 0x869D, [14766] = 0x8690, [14767] = 0x8694, [14768] = 0x8843,
+-  [14769] = 0x8844, [14770] = 0x886D, [14771] = 0x8875, [14772] = 0x8876,
+-  [14773] = 0x8872, [14774] = 0x8880, [14775] = 0x8871, [14776] = 0x887F,
+-  [14777] = 0x886F, [14778] = 0x8883, [14779] = 0x887E, [14780] = 0x8874,
+-  [14781] = 0x887C, [14782] = 0x8A12, [14783] = 0x8C47, [14784] = 0x8C57,
+-  [14785] = 0x8C7B, [14786] = 0x8CA4, [14787] = 0x8CA3, [14788] = 0x8D76,
+-  [14789] = 0x8D78, [14790] = 0x8DB5, [14791] = 0x8DB7, [14792] = 0x8DB6,
+-  [14793] = 0x8ED1, [14794] = 0x8ED3, [14795] = 0x8FFE, [14796] = 0x8FF5,
+-  [14797] = 0x9002, [14798] = 0x8FFF, [14799] = 0x8FFB, [14800] = 0x9004,
+-  [14801] = 0x8FFC, [14802] = 0x8FF6, [14803] = 0x90D6, [14804] = 0x90E0,
+-  [14805] = 0x90D9, [14806] = 0x90DA, [14807] = 0x90E3, [14808] = 0x90DF,
+-  [14809] = 0x90E5, [14810] = 0x90D8, [14811] = 0x90DB, [14812] = 0x90D7,
+-  [14813] = 0x90DC, [14814] = 0x90E4, [14815] = 0x9150, [14820] = 0x914E,
+-  [14821] = 0x914F, [14822] = 0x91D5, [14823] = 0x91E2, [14824] = 0x91DA,
+-  [14825] = 0x965C, [14826] = 0x965F, [14827] = 0x96BC, [14828] = 0x98E3,
+-  [14829] = 0x9ADF, [14830] = 0x9B2F, [14831] = 0x4E7F, [14832] = 0x5070,
+-  [14833] = 0x506A, [14834] = 0x5061, [14835] = 0x505E, [14836] = 0x5060,
+-  [14837] = 0x5053, [14838] = 0x504B, [14839] = 0x505D, [14840] = 0x5072,
+-  [14841] = 0x5048, [14842] = 0x504D, [14843] = 0x5041, [14844] = 0x505B,
+-  [14845] = 0x504A, [14846] = 0x5062, [14847] = 0x5015, [14848] = 0x5045,
+-  [14849] = 0x505F, [14850] = 0x5069, [14851] = 0x506B, [14852] = 0x5063,
+-  [14853] = 0x5064, [14854] = 0x5046, [14855] = 0x5040, [14856] = 0x506E,
+-  [14857] = 0x5073, [14858] = 0x5057, [14859] = 0x5051, [14860] = 0x51D0,
+-  [14861] = 0x526B, [14862] = 0x526D, [14863] = 0x526C, [14864] = 0x526E,
+-  [14865] = 0x52D6, [14866] = 0x52D3, [14867] = 0x532D, [14868] = 0x539C,
+-  [14869] = 0x5575, [14870] = 0x5576, [14871] = 0x553C, [14872] = 0x554D,
+-  [14873] = 0x5550, [14874] = 0x5534, [14875] = 0x552A, [14876] = 0x5551,
+-  [14877] = 0x5562, [14878] = 0x5536, [14879] = 0x5535, [14880] = 0x5530,
+-  [14881] = 0x5552, [14882] = 0x5545, [14917] = 0x550C, [14918] = 0x5532,
+-  [14919] = 0x5565, [14920] = 0x554E, [14921] = 0x5539, [14922] = 0x5548,
+-  [14923] = 0x552D, [14924] = 0x553B, [14925] = 0x5540, [14926] = 0x554B,
+-  [14927] = 0x570A, [14928] = 0x5707, [14929] = 0x57FB, [14930] = 0x5814,
+-  [14931] = 0x57E2, [14932] = 0x57F6, [14933] = 0x57DC, [14934] = 0x57F4,
+-  [14935] = 0x5800, [14936] = 0x57ED, [14937] = 0x57FD, [14938] = 0x5808,
+-  [14939] = 0x57F8, [14940] = 0x580B, [14941] = 0x57F3, [14942] = 0x57CF,
+-  [14943] = 0x5807, [14944] = 0x57EE, [14945] = 0x57E3, [14946] = 0x57F2,
+-  [14947] = 0x57E5, [14948] = 0x57EC, [14949] = 0x57E1, [14950] = 0x580E,
+-  [14951] = 0x57FC, [14952] = 0x5810, [14953] = 0x57E7, [14954] = 0x5801,
+-  [14955] = 0x580C, [14956] = 0x57F1, [14957] = 0x57E9, [14958] = 0x57F0,
+-  [14959] = 0x580D, [14960] = 0x5804, [14961] = 0x595C, [14962] = 0x5A60,
+-  [14963] = 0x5A58, [14964] = 0x5A55, [14965] = 0x5A67, [14966] = 0x5A5E,
+-  [14967] = 0x5A38, [14968] = 0x5A35, [14969] = 0x5A6D, [14970] = 0x5A50,
+-  [14971] = 0x5A5F, [14972] = 0x5A65, [14973] = 0x5A6C, [14974] = 0x5A53,
+-  [14975] = 0x5A64, [14976] = 0x5A57, [14977] = 0x5A43, [14978] = 0x5A5D,
+-  [14979] = 0x5A52, [14980] = 0x5A44, [14981] = 0x5A5B, [14982] = 0x5A48,
+-  [14983] = 0x5A8E, [14984] = 0x5A3E, [14985] = 0x5A4D, [14986] = 0x5A39,
+-  [14987] = 0x5A4C, [14988] = 0x5A70, [14989] = 0x5A69, [14990] = 0x5A47,
+-  [14991] = 0x5A51, [14992] = 0x5A56, [14993] = 0x5A42, [14994] = 0x5A5C,
+-  [14995] = 0x5B72, [14996] = 0x5B6E, [14997] = 0x5BC1, [14998] = 0x5BC0,
+-  [14999] = 0x5C59, [15000] = 0x5D1E, [15001] = 0x5D0B, [15002] = 0x5D1D,
+-  [15003] = 0x5D1A, [15004] = 0x5D20, [15005] = 0x5D0C, [15006] = 0x5D28,
+-  [15007] = 0x5D0D, [15008] = 0x5D26, [15009] = 0x5D25, [15010] = 0x5D0F,
+-  [15015] = 0x5D30, [15016] = 0x5D12, [15017] = 0x5D23, [15018] = 0x5D1F,
+-  [15019] = 0x5D2E, [15020] = 0x5E3E, [15021] = 0x5E34, [15022] = 0x5EB1,
+-  [15023] = 0x5EB4, [15024] = 0x5EB9, [15025] = 0x5EB2, [15026] = 0x5EB3,
+-  [15027] = 0x5F36, [15028] = 0x5F38, [15029] = 0x5F9B, [15030] = 0x5F96,
+-  [15031] = 0x5F9F, [15032] = 0x608A, [15033] = 0x6090, [15034] = 0x6086,
+-  [15035] = 0x60BE, [15036] = 0x60B0, [15037] = 0x60BA, [15038] = 0x60D3,
+-  [15039] = 0x60D4, [15040] = 0x60CF, [15041] = 0x60E4, [15042] = 0x60D9,
+-  [15043] = 0x60DD, [15044] = 0x60C8, [15045] = 0x60B1, [15046] = 0x60DB,
+-  [15047] = 0x60B7, [15048] = 0x60CA, [15049] = 0x60BF, [15050] = 0x60C3,
+-  [15051] = 0x60CD, [15052] = 0x60C0, [15053] = 0x6332, [15054] = 0x6365,
+-  [15055] = 0x638A, [15056] = 0x6382, [15057] = 0x637D, [15058] = 0x63BD,
+-  [15059] = 0x639E, [15060] = 0x63AD, [15061] = 0x639D, [15062] = 0x6397,
+-  [15063] = 0x63AB, [15064] = 0x638E, [15065] = 0x636F, [15066] = 0x6387,
+-  [15067] = 0x6390, [15068] = 0x636E, [15069] = 0x63AF, [15070] = 0x6375,
+-  [15071] = 0x639C, [15072] = 0x636D, [15073] = 0x63AE, [15074] = 0x637C,
+-  [15075] = 0x63A4, [15076] = 0x633B, [15077] = 0x639F, [15112] = 0x6378,
+-  [15113] = 0x6385, [15114] = 0x6381, [15115] = 0x6391, [15116] = 0x638D,
+-  [15117] = 0x6370, [15118] = 0x6553, [15119] = 0x65CD, [15120] = 0x6665,
+-  [15121] = 0x6661, [15122] = 0x665B, [15123] = 0x6659, [15124] = 0x665C,
+-  [15125] = 0x6662, [15126] = 0x6718, [15127] = 0x6879, [15128] = 0x6887,
+-  [15129] = 0x6890, [15130] = 0x689C, [15131] = 0x686D, [15132] = 0x686E,
+-  [15133] = 0x68AE, [15134] = 0x68AB, [15135] = 0x6956, [15136] = 0x686F,
+-  [15137] = 0x68A3, [15138] = 0x68AC, [15139] = 0x68A9, [15140] = 0x6875,
+-  [15141] = 0x6874, [15142] = 0x68B2, [15143] = 0x688F, [15144] = 0x6877,
+-  [15145] = 0x6892, [15146] = 0x687C, [15147] = 0x686B, [15148] = 0x6872,
+-  [15149] = 0x68AA, [15150] = 0x6880, [15151] = 0x6871, [15152] = 0x687E,
+-  [15153] = 0x689B, [15154] = 0x6896, [15155] = 0x688B, [15156] = 0x68A0,
+-  [15157] = 0x6889, [15158] = 0x68A4, [15159] = 0x6878, [15160] = 0x687B,
+-  [15161] = 0x6891, [15162] = 0x688C, [15163] = 0x688A, [15164] = 0x687D,
+-  [15165] = 0x6B36, [15166] = 0x6B33, [15167] = 0x6B37, [15168] = 0x6B38,
+-  [15169] = 0x6B91, [15170] = 0x6B8F, [15171] = 0x6B8D, [15172] = 0x6B8E,
+-  [15173] = 0x6B8C, [15174] = 0x6C2A, [15175] = 0x6DC0, [15176] = 0x6DAB,
+-  [15177] = 0x6DB4, [15178] = 0x6DB3, [15179] = 0x6E74, [15180] = 0x6DAC,
+-  [15181] = 0x6DE9, [15182] = 0x6DE2, [15183] = 0x6DB7, [15184] = 0x6DF6,
+-  [15185] = 0x6DD4, [15186] = 0x6E00, [15187] = 0x6DC8, [15188] = 0x6DE0,
+-  [15189] = 0x6DDF, [15190] = 0x6DD6, [15191] = 0x6DBE, [15192] = 0x6DE5,
+-  [15193] = 0x6DDC, [15194] = 0x6DDD, [15195] = 0x6DDB, [15196] = 0x6DF4,
+-  [15197] = 0x6DCA, [15198] = 0x6DBD, [15199] = 0x6DED, [15200] = 0x6DF0,
+-  [15201] = 0x6DBA, [15202] = 0x6DD5, [15203] = 0x6DC2, [15204] = 0x6DCF,
+-  [15205] = 0x6DC9, [15210] = 0x6DD0, [15211] = 0x6DF2, [15212] = 0x6DD3,
+-  [15213] = 0x6DFD, [15214] = 0x6DD7, [15215] = 0x6DCD, [15216] = 0x6DE3,
+-  [15217] = 0x6DBB, [15218] = 0x70FA, [15219] = 0x710D, [15220] = 0x70F7,
+-  [15221] = 0x7117, [15222] = 0x70F4, [15223] = 0x710C, [15224] = 0x70F0,
+-  [15225] = 0x7104, [15226] = 0x70F3, [15227] = 0x7110, [15228] = 0x70FC,
+-  [15229] = 0x70FF, [15230] = 0x7106, [15231] = 0x7113, [15232] = 0x7100,
+-  [15233] = 0x70F8, [15234] = 0x70F6, [15235] = 0x710B, [15236] = 0x7102,
+-  [15237] = 0x710E, [15238] = 0x727E, [15239] = 0x727B, [15240] = 0x727C,
+-  [15241] = 0x727F, [15242] = 0x731D, [15243] = 0x7317, [15244] = 0x7307,
+-  [15245] = 0x7311, [15246] = 0x7318, [15247] = 0x730A, [15248] = 0x7308,
+-  [15249] = 0x72FF, [15250] = 0x730F, [15251] = 0x731E, [15252] = 0x7388,
+-  [15253] = 0x73F6, [15254] = 0x73F8, [15255] = 0x73F5, [15256] = 0x7404,
+-  [15257] = 0x7401, [15258] = 0x73FD, [15259] = 0x7407, [15260] = 0x7400,
+-  [15261] = 0x73FA, [15262] = 0x73FC, [15263] = 0x73FF, [15264] = 0x740C,
+-  [15265] = 0x740B, [15266] = 0x73F4, [15267] = 0x7408, [15268] = 0x7564,
+-  [15269] = 0x7563, [15270] = 0x75CE, [15271] = 0x75D2, [15272] = 0x75CF,
+-  [15307] = 0x75CB, [15308] = 0x75CC, [15309] = 0x75D1, [15310] = 0x75D0,
+-  [15311] = 0x768F, [15312] = 0x7689, [15313] = 0x76D3, [15314] = 0x7739,
+-  [15315] = 0x772F, [15316] = 0x772D, [15317] = 0x7731, [15318] = 0x7732,
+-  [15319] = 0x7734, [15320] = 0x7733, [15321] = 0x773D, [15322] = 0x7725,
+-  [15323] = 0x773B, [15324] = 0x7735, [15325] = 0x7848, [15326] = 0x7852,
+-  [15327] = 0x7849, [15328] = 0x784D, [15329] = 0x784A, [15330] = 0x784C,
+-  [15331] = 0x7826, [15332] = 0x7845, [15333] = 0x7850, [15334] = 0x7964,
+-  [15335] = 0x7967, [15336] = 0x7969, [15337] = 0x796A, [15338] = 0x7963,
+-  [15339] = 0x796B, [15340] = 0x7961, [15341] = 0x79BB, [15342] = 0x79FA,
+-  [15343] = 0x79F8, [15344] = 0x79F6, [15345] = 0x79F7, [15346] = 0x7A8F,
+-  [15347] = 0x7A94, [15348] = 0x7A90, [15349] = 0x7B35, [15350] = 0x7B47,
+-  [15351] = 0x7B34, [15352] = 0x7B25, [15353] = 0x7B30, [15354] = 0x7B22,
+-  [15355] = 0x7B24, [15356] = 0x7B33, [15357] = 0x7B18, [15358] = 0x7B2A,
+-  [15359] = 0x7B1D, [15360] = 0x7B31, [15361] = 0x7B2B, [15362] = 0x7B2D,
+-  [15363] = 0x7B2F, [15364] = 0x7B32, [15365] = 0x7B38, [15366] = 0x7B1A,
+-  [15367] = 0x7B23, [15368] = 0x7C94, [15369] = 0x7C98, [15370] = 0x7C96,
+-  [15371] = 0x7CA3, [15372] = 0x7D35, [15373] = 0x7D3D, [15374] = 0x7D38,
+-  [15375] = 0x7D36, [15376] = 0x7D3A, [15377] = 0x7D45, [15378] = 0x7D2C,
+-  [15379] = 0x7D29, [15380] = 0x7D41, [15381] = 0x7D47, [15382] = 0x7D3E,
+-  [15383] = 0x7D3F, [15384] = 0x7D4A, [15385] = 0x7D3B, [15386] = 0x7D28,
+-  [15387] = 0x7F63, [15388] = 0x7F95, [15389] = 0x7F9C, [15390] = 0x7F9D,
+-  [15391] = 0x7F9B, [15392] = 0x7FCA, [15393] = 0x7FCB, [15394] = 0x7FCD,
+-  [15395] = 0x7FD0, [15396] = 0x7FD1, [15397] = 0x7FC7, [15398] = 0x7FCF,
+-  [15399] = 0x7FC9, [15400] = 0x801F, [15405] = 0x801E, [15406] = 0x801B,
+-  [15407] = 0x8047, [15408] = 0x8043, [15409] = 0x8048, [15410] = 0x8118,
+-  [15411] = 0x8125, [15412] = 0x8119, [15413] = 0x811B, [15414] = 0x812D,
+-  [15415] = 0x811F, [15416] = 0x812C, [15417] = 0x811E, [15418] = 0x8121,
+-  [15419] = 0x8115, [15420] = 0x8127, [15421] = 0x811D, [15422] = 0x8122,
+-  [15423] = 0x8211, [15424] = 0x8238, [15425] = 0x8233, [15426] = 0x823A,
+-  [15427] = 0x8234, [15428] = 0x8232, [15429] = 0x8274, [15430] = 0x8390,
+-  [15431] = 0x83A3, [15432] = 0x83A8, [15433] = 0x838D, [15434] = 0x837A,
+-  [15435] = 0x8373, [15436] = 0x83A4, [15437] = 0x8374, [15438] = 0x838F,
+-  [15439] = 0x8381, [15440] = 0x8395, [15441] = 0x8399, [15442] = 0x8375,
+-  [15443] = 0x8394, [15444] = 0x83A9, [15445] = 0x837D, [15446] = 0x8383,
+-  [15447] = 0x838C, [15448] = 0x839D, [15449] = 0x839B, [15450] = 0x83AA,
+-  [15451] = 0x838B, [15452] = 0x837E, [15453] = 0x83A5, [15454] = 0x83AF,
+-  [15455] = 0x8388, [15456] = 0x8397, [15457] = 0x83B0, [15458] = 0x837F,
+-  [15459] = 0x83A6, [15460] = 0x8387, [15461] = 0x83AE, [15462] = 0x8376,
+-  [15463] = 0x839A, [15464] = 0x8659, [15465] = 0x8656, [15466] = 0x86BF,
+-  [15467] = 0x86B7, [15502] = 0x86C2, [15503] = 0x86C1, [15504] = 0x86C5,
+-  [15505] = 0x86BA, [15506] = 0x86B0, [15507] = 0x86C8, [15508] = 0x86B9,
+-  [15509] = 0x86B3, [15510] = 0x86B8, [15511] = 0x86CC, [15512] = 0x86B4,
+-  [15513] = 0x86BB, [15514] = 0x86BC, [15515] = 0x86C3, [15516] = 0x86BD,
+-  [15517] = 0x86BE, [15518] = 0x8852, [15519] = 0x8889, [15520] = 0x8895,
+-  [15521] = 0x88A8, [15522] = 0x88A2, [15523] = 0x88AA, [15524] = 0x889A,
+-  [15525] = 0x8891, [15526] = 0x88A1, [15527] = 0x889F, [15528] = 0x8898,
+-  [15529] = 0x88A7, [15530] = 0x8899, [15531] = 0x889B, [15532] = 0x8897,
+-  [15533] = 0x88A4, [15534] = 0x88AC, [15535] = 0x888C, [15536] = 0x8893,
+-  [15537] = 0x888E, [15538] = 0x8982, [15539] = 0x89D6, [15540] = 0x89D9,
+-  [15541] = 0x89D5, [15542] = 0x8A30, [15543] = 0x8A27, [15544] = 0x8A2C,
+-  [15545] = 0x8A1E, [15546] = 0x8C39, [15547] = 0x8C3B, [15548] = 0x8C5C,
+-  [15549] = 0x8C5D, [15550] = 0x8C7D, [15551] = 0x8CA5, [15552] = 0x8D7D,
+-  [15553] = 0x8D7B, [15554] = 0x8D79, [15555] = 0x8DBC, [15556] = 0x8DC2,
+-  [15557] = 0x8DB9, [15558] = 0x8DBF, [15559] = 0x8DC1, [15560] = 0x8ED8,
+-  [15561] = 0x8EDE, [15562] = 0x8EDD, [15563] = 0x8EDC, [15564] = 0x8ED7,
+-  [15565] = 0x8EE0, [15566] = 0x8EE1, [15567] = 0x9024, [15568] = 0x900B,
+-  [15569] = 0x9011, [15570] = 0x901C, [15571] = 0x900C, [15572] = 0x9021,
+-  [15573] = 0x90EF, [15574] = 0x90EA, [15575] = 0x90F0, [15576] = 0x90F4,
+-  [15577] = 0x90F2, [15578] = 0x90F3, [15579] = 0x90D4, [15580] = 0x90EB,
+-  [15581] = 0x90EC, [15582] = 0x90E9, [15583] = 0x9156, [15584] = 0x9158,
+-  [15585] = 0x915A, [15586] = 0x9153, [15587] = 0x9155, [15588] = 0x91EC,
+-  [15589] = 0x91F4, [15590] = 0x91F1, [15591] = 0x91F3, [15592] = 0x91F8,
+-  [15593] = 0x91E4, [15594] = 0x91F9, [15595] = 0x91EA, [15600] = 0x91EB,
+-  [15601] = 0x91F7, [15602] = 0x91E8, [15603] = 0x91EE, [15604] = 0x957A,
+-  [15605] = 0x9586, [15606] = 0x9588, [15607] = 0x967C, [15608] = 0x966D,
+-  [15609] = 0x966B, [15610] = 0x9671, [15611] = 0x966F, [15612] = 0x96BF,
+-  [15613] = 0x976A, [15614] = 0x9804, [15615] = 0x98E5, [15616] = 0x9997,
+-  [15617] = 0x509B, [15618] = 0x5095, [15619] = 0x5094, [15620] = 0x509E,
+-  [15621] = 0x508B, [15622] = 0x50A3, [15623] = 0x5083, [15624] = 0x508C,
+-  [15625] = 0x508E, [15626] = 0x509D, [15627] = 0x5068, [15628] = 0x509C,
+-  [15629] = 0x5092, [15630] = 0x5082, [15631] = 0x5087, [15632] = 0x515F,
+-  [15633] = 0x51D4, [15634] = 0x5312, [15635] = 0x5311, [15636] = 0x53A4,
+-  [15637] = 0x53A7, [15638] = 0x5591, [15639] = 0x55A8, [15640] = 0x55A5,
+-  [15641] = 0x55AD, [15642] = 0x5577, [15643] = 0x5645, [15644] = 0x55A2,
+-  [15645] = 0x5593, [15646] = 0x5588, [15647] = 0x558F, [15648] = 0x55B5,
+-  [15649] = 0x5581, [15650] = 0x55A3, [15651] = 0x5592, [15652] = 0x55A4,
+-  [15653] = 0x557D, [15654] = 0x558C, [15655] = 0x55A6, [15656] = 0x557F,
+-  [15657] = 0x5595, [15658] = 0x55A1, [15659] = 0x558E, [15660] = 0x570C,
+-  [15661] = 0x5829, [15662] = 0x5837, [15697] = 0x5819, [15698] = 0x581E,
+-  [15699] = 0x5827, [15700] = 0x5823, [15701] = 0x5828, [15702] = 0x57F5,
+-  [15703] = 0x5848, [15704] = 0x5825, [15705] = 0x581C, [15706] = 0x581B,
+-  [15707] = 0x5833, [15708] = 0x583F, [15709] = 0x5836, [15710] = 0x582E,
+-  [15711] = 0x5839, [15712] = 0x5838, [15713] = 0x582D, [15714] = 0x582C,
+-  [15715] = 0x583B, [15716] = 0x5961, [15717] = 0x5AAF, [15718] = 0x5A94,
+-  [15719] = 0x5A9F, [15720] = 0x5A7A, [15721] = 0x5AA2, [15722] = 0x5A9E,
+-  [15723] = 0x5A78, [15724] = 0x5AA6, [15725] = 0x5A7C, [15726] = 0x5AA5,
+-  [15727] = 0x5AAC, [15728] = 0x5A95, [15729] = 0x5AAE, [15730] = 0x5A37,
+-  [15731] = 0x5A84, [15732] = 0x5A8A, [15733] = 0x5A97, [15734] = 0x5A83,
+-  [15735] = 0x5A8B, [15736] = 0x5AA9, [15737] = 0x5A7B, [15738] = 0x5A7D,
+-  [15739] = 0x5A8C, [15740] = 0x5A9C, [15741] = 0x5A8F, [15742] = 0x5A93,
+-  [15743] = 0x5A9D, [15744] = 0x5BEA, [15745] = 0x5BCD, [15746] = 0x5BCB,
+-  [15747] = 0x5BD4, [15748] = 0x5BD1, [15749] = 0x5BCA, [15750] = 0x5BCE,
+-  [15751] = 0x5C0C, [15752] = 0x5C30, [15753] = 0x5D37, [15754] = 0x5D43,
+-  [15755] = 0x5D6B, [15756] = 0x5D41, [15757] = 0x5D4B, [15758] = 0x5D3F,
+-  [15759] = 0x5D35, [15760] = 0x5D51, [15761] = 0x5D4E, [15762] = 0x5D55,
+-  [15763] = 0x5D33, [15764] = 0x5D3A, [15765] = 0x5D52, [15766] = 0x5D3D,
+-  [15767] = 0x5D31, [15768] = 0x5D59, [15769] = 0x5D42, [15770] = 0x5D39,
+-  [15771] = 0x5D49, [15772] = 0x5D38, [15773] = 0x5D3C, [15774] = 0x5D32,
+-  [15775] = 0x5D36, [15776] = 0x5D40, [15777] = 0x5D45, [15778] = 0x5E44,
+-  [15779] = 0x5E41, [15780] = 0x5F58, [15781] = 0x5FA6, [15782] = 0x5FA5,
+-  [15783] = 0x5FAB, [15784] = 0x60C9, [15785] = 0x60B9, [15786] = 0x60CC,
+-  [15787] = 0x60E2, [15788] = 0x60CE, [15789] = 0x60C4, [15790] = 0x6114,
+-  [15795] = 0x60F2, [15796] = 0x610A, [15797] = 0x6116, [15798] = 0x6105,
+-  [15799] = 0x60F5, [15800] = 0x6113, [15801] = 0x60F8, [15802] = 0x60FC,
+-  [15803] = 0x60FE, [15804] = 0x60C1, [15805] = 0x6103, [15806] = 0x6118,
+-  [15807] = 0x611D, [15808] = 0x6110, [15809] = 0x60FF, [15810] = 0x6104,
+-  [15811] = 0x610B, [15812] = 0x624A, [15813] = 0x6394, [15814] = 0x63B1,
+-  [15815] = 0x63B0, [15816] = 0x63CE, [15817] = 0x63E5, [15818] = 0x63E8,
+-  [15819] = 0x63EF, [15820] = 0x63C3, [15821] = 0x649D, [15822] = 0x63F3,
+-  [15823] = 0x63CA, [15824] = 0x63E0, [15825] = 0x63F6, [15826] = 0x63D5,
+-  [15827] = 0x63F2, [15828] = 0x63F5, [15829] = 0x6461, [15830] = 0x63DF,
+-  [15831] = 0x63BE, [15832] = 0x63DD, [15833] = 0x63DC, [15834] = 0x63C4,
+-  [15835] = 0x63D8, [15836] = 0x63D3, [15837] = 0x63C2, [15838] = 0x63C7,
+-  [15839] = 0x63CC, [15840] = 0x63CB, [15841] = 0x63C8, [15842] = 0x63F0,
+-  [15843] = 0x63D7, [15844] = 0x63D9, [15845] = 0x6532, [15846] = 0x6567,
+-  [15847] = 0x656A, [15848] = 0x6564, [15849] = 0x655C, [15850] = 0x6568,
+-  [15851] = 0x6565, [15852] = 0x658C, [15853] = 0x659D, [15854] = 0x659E,
+-  [15855] = 0x65AE, [15856] = 0x65D0, [15857] = 0x65D2, [15892] = 0x667C,
+-  [15893] = 0x666C, [15894] = 0x667B, [15895] = 0x6680, [15896] = 0x6671,
+-  [15897] = 0x6679, [15898] = 0x666A, [15899] = 0x6672, [15900] = 0x6701,
+-  [15901] = 0x690C, [15902] = 0x68D3, [15903] = 0x6904, [15904] = 0x68DC,
+-  [15905] = 0x692A, [15906] = 0x68EC, [15907] = 0x68EA, [15908] = 0x68F1,
+-  [15909] = 0x690F, [15910] = 0x68D6, [15911] = 0x68F7, [15912] = 0x68EB,
+-  [15913] = 0x68E4, [15914] = 0x68F6, [15915] = 0x6913, [15916] = 0x6910,
+-  [15917] = 0x68F3, [15918] = 0x68E1, [15919] = 0x6907, [15920] = 0x68CC,
+-  [15921] = 0x6908, [15922] = 0x6970, [15923] = 0x68B4, [15924] = 0x6911,
+-  [15925] = 0x68EF, [15926] = 0x68C6, [15927] = 0x6914, [15928] = 0x68F8,
+-  [15929] = 0x68D0, [15930] = 0x68FD, [15931] = 0x68FC, [15932] = 0x68E8,
+-  [15933] = 0x690B, [15934] = 0x690A, [15935] = 0x6917, [15936] = 0x68CE,
+-  [15937] = 0x68C8, [15938] = 0x68DD, [15939] = 0x68DE, [15940] = 0x68E6,
+-  [15941] = 0x68F4, [15942] = 0x68D1, [15943] = 0x6906, [15944] = 0x68D4,
+-  [15945] = 0x68E9, [15946] = 0x6915, [15947] = 0x6925, [15948] = 0x68C7,
+-  [15949] = 0x6B39, [15950] = 0x6B3B, [15951] = 0x6B3F, [15952] = 0x6B3C,
+-  [15953] = 0x6B94, [15954] = 0x6B97, [15955] = 0x6B99, [15956] = 0x6B95,
+-  [15957] = 0x6BBD, [15958] = 0x6BF0, [15959] = 0x6BF2, [15960] = 0x6BF3,
+-  [15961] = 0x6C30, [15962] = 0x6DFC, [15963] = 0x6E46, [15964] = 0x6E47,
+-  [15965] = 0x6E1F, [15966] = 0x6E49, [15967] = 0x6E88, [15968] = 0x6E3C,
+-  [15969] = 0x6E3D, [15970] = 0x6E45, [15971] = 0x6E62, [15972] = 0x6E2B,
+-  [15973] = 0x6E3F, [15974] = 0x6E41, [15975] = 0x6E5D, [15976] = 0x6E73,
+-  [15977] = 0x6E1C, [15978] = 0x6E33, [15979] = 0x6E4B, [15980] = 0x6E40,
+-  [15981] = 0x6E51, [15982] = 0x6E3B, [15983] = 0x6E03, [15984] = 0x6E2E,
+-  [15985] = 0x6E5E, [15990] = 0x6E68, [15991] = 0x6E5C, [15992] = 0x6E61,
+-  [15993] = 0x6E31, [15994] = 0x6E28, [15995] = 0x6E60, [15996] = 0x6E71,
+-  [15997] = 0x6E6B, [15998] = 0x6E39, [15999] = 0x6E22, [16000] = 0x6E30,
+-  [16001] = 0x6E53, [16002] = 0x6E65, [16003] = 0x6E27, [16004] = 0x6E78,
+-  [16005] = 0x6E64, [16006] = 0x6E77, [16007] = 0x6E55, [16008] = 0x6E79,
+-  [16009] = 0x6E52, [16010] = 0x6E66, [16011] = 0x6E35, [16012] = 0x6E36,
+-  [16013] = 0x6E5A, [16014] = 0x7120, [16015] = 0x711E, [16016] = 0x712F,
+-  [16017] = 0x70FB, [16018] = 0x712E, [16019] = 0x7131, [16020] = 0x7123,
+-  [16021] = 0x7125, [16022] = 0x7122, [16023] = 0x7132, [16024] = 0x711F,
+-  [16025] = 0x7128, [16026] = 0x713A, [16027] = 0x711B, [16028] = 0x724B,
+-  [16029] = 0x725A, [16030] = 0x7288, [16031] = 0x7289, [16032] = 0x7286,
+-  [16033] = 0x7285, [16034] = 0x728B, [16035] = 0x7312, [16036] = 0x730B,
+-  [16037] = 0x7330, [16038] = 0x7322, [16039] = 0x7331, [16040] = 0x7333,
+-  [16041] = 0x7327, [16042] = 0x7332, [16043] = 0x732D, [16044] = 0x7326,
+-  [16045] = 0x7323, [16046] = 0x7335, [16047] = 0x730C, [16048] = 0x742E,
+-  [16049] = 0x742C, [16050] = 0x7430, [16051] = 0x742B, [16052] = 0x7416,
+-  [16087] = 0x741A, [16088] = 0x7421, [16089] = 0x742D, [16090] = 0x7431,
+-  [16091] = 0x7424, [16092] = 0x7423, [16093] = 0x741D, [16094] = 0x7429,
+-  [16095] = 0x7420, [16096] = 0x7432, [16097] = 0x74FB, [16098] = 0x752F,
+-  [16099] = 0x756F, [16100] = 0x756C, [16101] = 0x75E7, [16102] = 0x75DA,
+-  [16103] = 0x75E1, [16104] = 0x75E6, [16105] = 0x75DD, [16106] = 0x75DF,
+-  [16107] = 0x75E4, [16108] = 0x75D7, [16109] = 0x7695, [16110] = 0x7692,
+-  [16111] = 0x76DA, [16112] = 0x7746, [16113] = 0x7747, [16114] = 0x7744,
+-  [16115] = 0x774D, [16116] = 0x7745, [16117] = 0x774A, [16118] = 0x774E,
+-  [16119] = 0x774B, [16120] = 0x774C, [16121] = 0x77DE, [16122] = 0x77EC,
+-  [16123] = 0x7860, [16124] = 0x7864, [16125] = 0x7865, [16126] = 0x785C,
+-  [16127] = 0x786D, [16128] = 0x7871, [16129] = 0x786A, [16130] = 0x786E,
+-  [16131] = 0x7870, [16132] = 0x7869, [16133] = 0x7868, [16134] = 0x785E,
+-  [16135] = 0x7862, [16136] = 0x7974, [16137] = 0x7973, [16138] = 0x7972,
+-  [16139] = 0x7970, [16140] = 0x7A02, [16141] = 0x7A0A, [16142] = 0x7A03,
+-  [16143] = 0x7A0C, [16144] = 0x7A04, [16145] = 0x7A99, [16146] = 0x7AE6,
+-  [16147] = 0x7AE4, [16148] = 0x7B4A, [16149] = 0x7B3B, [16150] = 0x7B44,
+-  [16151] = 0x7B48, [16152] = 0x7B4C, [16153] = 0x7B4E, [16154] = 0x7B40,
+-  [16155] = 0x7B58, [16156] = 0x7B45, [16157] = 0x7CA2, [16158] = 0x7C9E,
+-  [16159] = 0x7CA8, [16160] = 0x7CA1, [16161] = 0x7D58, [16162] = 0x7D6F,
+-  [16163] = 0x7D63, [16164] = 0x7D53, [16165] = 0x7D56, [16166] = 0x7D67,
+-  [16167] = 0x7D6A, [16168] = 0x7D4F, [16169] = 0x7D6D, [16170] = 0x7D5C,
+-  [16171] = 0x7D6B, [16172] = 0x7D52, [16173] = 0x7D54, [16174] = 0x7D69,
+-  [16175] = 0x7D51, [16176] = 0x7D5F, [16177] = 0x7D4E, [16178] = 0x7F3E,
+-  [16179] = 0x7F3F, [16180] = 0x7F65, [16185] = 0x7F66, [16186] = 0x7FA2,
+-  [16187] = 0x7FA0, [16188] = 0x7FA1, [16189] = 0x7FD7, [16190] = 0x8051,
+-  [16191] = 0x804F, [16192] = 0x8050, [16193] = 0x80FE, [16194] = 0x80D4,
+-  [16195] = 0x8143, [16196] = 0x814A, [16197] = 0x8152, [16198] = 0x814F,
+-  [16199] = 0x8147, [16200] = 0x813D, [16201] = 0x814D, [16202] = 0x813A,
+-  [16203] = 0x81E6, [16204] = 0x81EE, [16205] = 0x81F7, [16206] = 0x81F8,
+-  [16207] = 0x81F9, [16208] = 0x8204, [16209] = 0x823C, [16210] = 0x823D,
+-  [16211] = 0x823F, [16212] = 0x8275, [16213] = 0x833B, [16214] = 0x83CF,
+-  [16215] = 0x83F9, [16216] = 0x8423, [16217] = 0x83C0, [16218] = 0x83E8,
+-  [16219] = 0x8412, [16220] = 0x83E7, [16221] = 0x83E4, [16222] = 0x83FC,
+-  [16223] = 0x83F6, [16224] = 0x8410, [16225] = 0x83C6, [16226] = 0x83C8,
+-  [16227] = 0x83EB, [16228] = 0x83E3, [16229] = 0x83BF, [16230] = 0x8401,
+-  [16231] = 0x83DD, [16232] = 0x83E5, [16233] = 0x83D8, [16234] = 0x83FF,
+-  [16235] = 0x83E1, [16236] = 0x83CB, [16237] = 0x83CE, [16238] = 0x83D6,
+-  [16239] = 0x83F5, [16240] = 0x83C9, [16241] = 0x8409, [16242] = 0x840F,
+-  [16243] = 0x83DE, [16244] = 0x8411, [16245] = 0x8406, [16246] = 0x83C2,
+-  [16247] = 0x83F3, [16282] = 0x83D5, [16283] = 0x83FA, [16284] = 0x83C7,
+-  [16285] = 0x83D1, [16286] = 0x83EA, [16287] = 0x8413, [16288] = 0x83C3,
+-  [16289] = 0x83EC, [16290] = 0x83EE, [16291] = 0x83C4, [16292] = 0x83FB,
+-  [16293] = 0x83D7, [16294] = 0x83E2, [16295] = 0x841B, [16296] = 0x83DB,
+-  [16297] = 0x83FE, [16298] = 0x86D8, [16299] = 0x86E2, [16300] = 0x86E6,
+-  [16301] = 0x86D3, [16302] = 0x86E3, [16303] = 0x86DA, [16304] = 0x86EA,
+-  [16305] = 0x86DD, [16306] = 0x86EB, [16307] = 0x86DC, [16308] = 0x86EC,
+-  [16309] = 0x86E9, [16310] = 0x86D7, [16311] = 0x86E8, [16312] = 0x86D1,
+-  [16313] = 0x8848, [16314] = 0x8856, [16315] = 0x8855, [16316] = 0x88BA,
+-  [16317] = 0x88D7, [16318] = 0x88B9, [16319] = 0x88B8, [16320] = 0x88C0,
+-  [16321] = 0x88BE, [16322] = 0x88B6, [16323] = 0x88BC, [16324] = 0x88B7,
+-  [16325] = 0x88BD, [16326] = 0x88B2, [16327] = 0x8901, [16328] = 0x88C9,
+-  [16329] = 0x8995, [16330] = 0x8998, [16331] = 0x8997, [16332] = 0x89DD,
+-  [16333] = 0x89DA, [16334] = 0x89DB, [16335] = 0x8A4E, [16336] = 0x8A4D,
+-  [16337] = 0x8A39, [16338] = 0x8A59, [16339] = 0x8A40, [16340] = 0x8A57,
+-  [16341] = 0x8A58, [16342] = 0x8A44, [16343] = 0x8A45, [16344] = 0x8A52,
+-  [16345] = 0x8A48, [16346] = 0x8A51, [16347] = 0x8A4A, [16348] = 0x8A4C,
+-  [16349] = 0x8A4F, [16350] = 0x8C5F, [16351] = 0x8C81, [16352] = 0x8C80,
+-  [16353] = 0x8CBA, [16354] = 0x8CBE, [16355] = 0x8CB0, [16356] = 0x8CB9,
+-  [16357] = 0x8CB5, [16358] = 0x8D84, [16359] = 0x8D80, [16360] = 0x8D89,
+-  [16361] = 0x8DD8, [16362] = 0x8DD3, [16363] = 0x8DCD, [16364] = 0x8DC7,
+-  [16365] = 0x8DD6, [16366] = 0x8DDC, [16367] = 0x8DCF, [16368] = 0x8DD5,
+-  [16369] = 0x8DD9, [16370] = 0x8DC8, [16371] = 0x8DD7, [16372] = 0x8DC5,
+-  [16373] = 0x8EEF, [16374] = 0x8EF7, [16375] = 0x8EFA, [16380] = 0x8EF9,
+-  [16381] = 0x8EE6, [16382] = 0x8EEE, [16383] = 0x8EE5, [16384] = 0x8EF5,
+-  [16385] = 0x8EE7, [16386] = 0x8EE8, [16387] = 0x8EF6, [16388] = 0x8EEB,
+-  [16389] = 0x8EF1, [16390] = 0x8EEC, [16391] = 0x8EF4, [16392] = 0x8EE9,
+-  [16393] = 0x902D, [16394] = 0x9034, [16395] = 0x902F, [16396] = 0x9106,
+-  [16397] = 0x912C, [16398] = 0x9104, [16399] = 0x90FF, [16400] = 0x90FC,
+-  [16401] = 0x9108, [16402] = 0x90F9, [16403] = 0x90FB, [16404] = 0x9101,
+-  [16405] = 0x9100, [16406] = 0x9107, [16407] = 0x9105, [16408] = 0x9103,
+-  [16409] = 0x9161, [16410] = 0x9164, [16411] = 0x915F, [16412] = 0x9162,
+-  [16413] = 0x9160, [16414] = 0x9201, [16415] = 0x920A, [16416] = 0x9225,
+-  [16417] = 0x9203, [16418] = 0x921A, [16419] = 0x9226, [16420] = 0x920F,
+-  [16421] = 0x920C, [16422] = 0x9200, [16423] = 0x9212, [16424] = 0x91FF,
+-  [16425] = 0x91FD, [16426] = 0x9206, [16427] = 0x9204, [16428] = 0x9227,
+-  [16429] = 0x9202, [16430] = 0x921C, [16431] = 0x9224, [16432] = 0x9219,
+-  [16433] = 0x9217, [16434] = 0x9205, [16435] = 0x9216, [16436] = 0x957B,
+-  [16437] = 0x958D, [16438] = 0x958C, [16439] = 0x9590, [16440] = 0x9687,
+-  [16441] = 0x967E, [16442] = 0x9688, [16477] = 0x9689, [16478] = 0x9683,
+-  [16479] = 0x9680, [16480] = 0x96C2, [16481] = 0x96C8, [16482] = 0x96C3,
+-  [16483] = 0x96F1, [16484] = 0x96F0, [16485] = 0x976C, [16486] = 0x9770,
+-  [16487] = 0x976E, [16488] = 0x9807, [16489] = 0x98A9, [16490] = 0x98EB,
+-  [16491] = 0x9CE6, [16492] = 0x9EF9, [16493] = 0x4E83, [16494] = 0x4E84,
+-  [16495] = 0x4EB6, [16496] = 0x50BD, [16497] = 0x50BF, [16498] = 0x50C6,
+-  [16499] = 0x50AE, [16500] = 0x50C4, [16501] = 0x50CA, [16502] = 0x50B4,
+-  [16503] = 0x50C8, [16504] = 0x50C2, [16505] = 0x50B0, [16506] = 0x50C1,
+-  [16507] = 0x50BA, [16508] = 0x50B1, [16509] = 0x50CB, [16510] = 0x50C9,
+-  [16511] = 0x50B6, [16512] = 0x50B8, [16513] = 0x51D7, [16514] = 0x527A,
+-  [16515] = 0x5278, [16516] = 0x527B, [16517] = 0x527C, [16518] = 0x55C3,
+-  [16519] = 0x55DB, [16520] = 0x55CC, [16521] = 0x55D0, [16522] = 0x55CB,
+-  [16523] = 0x55CA, [16524] = 0x55DD, [16525] = 0x55C0, [16526] = 0x55D4,
+-  [16527] = 0x55C4, [16528] = 0x55E9, [16529] = 0x55BF, [16530] = 0x55D2,
+-  [16531] = 0x558D, [16532] = 0x55CF, [16533] = 0x55D5, [16534] = 0x55E2,
+-  [16535] = 0x55D6, [16536] = 0x55C8, [16537] = 0x55F2, [16538] = 0x55CD,
+-  [16539] = 0x55D9, [16540] = 0x55C2, [16541] = 0x5714, [16542] = 0x5853,
+-  [16543] = 0x5868, [16544] = 0x5864, [16545] = 0x584F, [16546] = 0x584D,
+-  [16547] = 0x5849, [16548] = 0x586F, [16549] = 0x5855, [16550] = 0x584E,
+-  [16551] = 0x585D, [16552] = 0x5859, [16553] = 0x5865, [16554] = 0x585B,
+-  [16555] = 0x583D, [16556] = 0x5863, [16557] = 0x5871, [16558] = 0x58FC,
+-  [16559] = 0x5AC7, [16560] = 0x5AC4, [16561] = 0x5ACB, [16562] = 0x5ABA,
+-  [16563] = 0x5AB8, [16564] = 0x5AB1, [16565] = 0x5AB5, [16566] = 0x5AB0,
+-  [16567] = 0x5ABF, [16568] = 0x5AC8, [16569] = 0x5ABB, [16570] = 0x5AC6,
+-  [16575] = 0x5AB7, [16576] = 0x5AC0, [16577] = 0x5ACA, [16578] = 0x5AB4,
+-  [16579] = 0x5AB6, [16580] = 0x5ACD, [16581] = 0x5AB9, [16582] = 0x5A90,
+-  [16583] = 0x5BD6, [16584] = 0x5BD8, [16585] = 0x5BD9, [16586] = 0x5C1F,
+-  [16587] = 0x5C33, [16588] = 0x5D71, [16589] = 0x5D63, [16590] = 0x5D4A,
+-  [16591] = 0x5D65, [16592] = 0x5D72, [16593] = 0x5D6C, [16594] = 0x5D5E,
+-  [16595] = 0x5D68, [16596] = 0x5D67, [16597] = 0x5D62, [16598] = 0x5DF0,
+-  [16599] = 0x5E4F, [16600] = 0x5E4E, [16601] = 0x5E4A, [16602] = 0x5E4D,
+-  [16603] = 0x5E4B, [16604] = 0x5EC5, [16605] = 0x5ECC, [16606] = 0x5EC6,
+-  [16607] = 0x5ECB, [16608] = 0x5EC7, [16609] = 0x5F40, [16610] = 0x5FAF,
+-  [16611] = 0x5FAD, [16612] = 0x60F7, [16613] = 0x6149, [16614] = 0x614A,
+-  [16615] = 0x612B, [16616] = 0x6145, [16617] = 0x6136, [16618] = 0x6132,
+-  [16619] = 0x612E, [16620] = 0x6146, [16621] = 0x612F, [16622] = 0x614F,
+-  [16623] = 0x6129, [16624] = 0x6140, [16625] = 0x6220, [16626] = 0x9168,
+-  [16627] = 0x6223, [16628] = 0x6225, [16629] = 0x6224, [16630] = 0x63C5,
+-  [16631] = 0x63F1, [16632] = 0x63EB, [16633] = 0x6410, [16634] = 0x6412,
+-  [16635] = 0x6409, [16636] = 0x6420, [16637] = 0x6424, [16672] = 0x6433,
+-  [16673] = 0x6443, [16674] = 0x641F, [16675] = 0x6415, [16676] = 0x6418,
+-  [16677] = 0x6439, [16678] = 0x6437, [16679] = 0x6422, [16680] = 0x6423,
+-  [16681] = 0x640C, [16682] = 0x6426, [16683] = 0x6430, [16684] = 0x6428,
+-  [16685] = 0x6441, [16686] = 0x6435, [16687] = 0x642F, [16688] = 0x640A,
+-  [16689] = 0x641A, [16690] = 0x6440, [16691] = 0x6425, [16692] = 0x6427,
+-  [16693] = 0x640B, [16694] = 0x63E7, [16695] = 0x641B, [16696] = 0x642E,
+-  [16697] = 0x6421, [16698] = 0x640E, [16699] = 0x656F, [16700] = 0x6592,
+-  [16701] = 0x65D3, [16702] = 0x6686, [16703] = 0x668C, [16704] = 0x6695,
+-  [16705] = 0x6690, [16706] = 0x668B, [16707] = 0x668A, [16708] = 0x6699,
+-  [16709] = 0x6694, [16710] = 0x6678, [16711] = 0x6720, [16712] = 0x6966,
+-  [16713] = 0x695F, [16714] = 0x6938, [16715] = 0x694E, [16716] = 0x6962,
+-  [16717] = 0x6971, [16718] = 0x693F, [16719] = 0x6945, [16720] = 0x696A,
+-  [16721] = 0x6939, [16722] = 0x6942, [16723] = 0x6957, [16724] = 0x6959,
+-  [16725] = 0x697A, [16726] = 0x6948, [16727] = 0x6949, [16728] = 0x6935,
+-  [16729] = 0x696C, [16730] = 0x6933, [16731] = 0x693D, [16732] = 0x6965,
+-  [16733] = 0x68F0, [16734] = 0x6978, [16735] = 0x6934, [16736] = 0x6969,
+-  [16737] = 0x6940, [16738] = 0x696F, [16739] = 0x6944, [16740] = 0x6976,
+-  [16741] = 0x6958, [16742] = 0x6941, [16743] = 0x6974, [16744] = 0x694C,
+-  [16745] = 0x693B, [16746] = 0x694B, [16747] = 0x6937, [16748] = 0x695C,
+-  [16749] = 0x694F, [16750] = 0x6951, [16751] = 0x6932, [16752] = 0x6952,
+-  [16753] = 0x692F, [16754] = 0x697B, [16755] = 0x693C, [16756] = 0x6B46,
+-  [16757] = 0x6B45, [16758] = 0x6B43, [16759] = 0x6B42, [16760] = 0x6B48,
+-  [16761] = 0x6B41, [16762] = 0x6B9B, [16763] = 0xFA0D, [16764] = 0x6BFB,
+-  [16765] = 0x6BFC, [16770] = 0x6BF9, [16771] = 0x6BF7, [16772] = 0x6BF8,
+-  [16773] = 0x6E9B, [16774] = 0x6ED6, [16775] = 0x6EC8, [16776] = 0x6E8F,
+-  [16777] = 0x6EC0, [16778] = 0x6E9F, [16779] = 0x6E93, [16780] = 0x6E94,
+-  [16781] = 0x6EA0, [16782] = 0x6EB1, [16783] = 0x6EB9, [16784] = 0x6EC6,
+-  [16785] = 0x6ED2, [16786] = 0x6EBD, [16787] = 0x6EC1, [16788] = 0x6E9E,
+-  [16789] = 0x6EC9, [16790] = 0x6EB7, [16791] = 0x6EB0, [16792] = 0x6ECD,
+-  [16793] = 0x6EA6, [16794] = 0x6ECF, [16795] = 0x6EB2, [16796] = 0x6EBE,
+-  [16797] = 0x6EC3, [16798] = 0x6EDC, [16799] = 0x6ED8, [16800] = 0x6E99,
+-  [16801] = 0x6E92, [16802] = 0x6E8E, [16803] = 0x6E8D, [16804] = 0x6EA4,
+-  [16805] = 0x6EA1, [16806] = 0x6EBF, [16807] = 0x6EB3, [16808] = 0x6ED0,
+-  [16809] = 0x6ECA, [16810] = 0x6E97, [16811] = 0x6EAE, [16812] = 0x6EA3,
+-  [16813] = 0x7147, [16814] = 0x7154, [16815] = 0x7152, [16816] = 0x7163,
+-  [16817] = 0x7160, [16818] = 0x7141, [16819] = 0x715D, [16820] = 0x7162,
+-  [16821] = 0x7172, [16822] = 0x7178, [16823] = 0x716A, [16824] = 0x7161,
+-  [16825] = 0x7142, [16826] = 0x7158, [16827] = 0x7143, [16828] = 0x714B,
+-  [16829] = 0x7170, [16830] = 0x715F, [16831] = 0x7150, [16832] = 0x7153,
+-  [16867] = 0x7144, [16868] = 0x714D, [16869] = 0x715A, [16870] = 0x724F,
+-  [16871] = 0x728D, [16872] = 0x728C, [16873] = 0x7291, [16874] = 0x7290,
+-  [16875] = 0x728E, [16876] = 0x733C, [16877] = 0x7342, [16878] = 0x733B,
+-  [16879] = 0x733A, [16880] = 0x7340, [16881] = 0x734A, [16882] = 0x7349,
+-  [16883] = 0x7444, [16884] = 0x744A, [16885] = 0x744B, [16886] = 0x7452,
+-  [16887] = 0x7451, [16888] = 0x7457, [16889] = 0x7440, [16890] = 0x744F,
+-  [16891] = 0x7450, [16892] = 0x744E, [16893] = 0x7442, [16894] = 0x7446,
+-  [16895] = 0x744D, [16896] = 0x7454, [16897] = 0x74E1, [16898] = 0x74FF,
+-  [16899] = 0x74FE, [16900] = 0x74FD, [16901] = 0x751D, [16902] = 0x7579,
+-  [16903] = 0x7577, [16904] = 0x6983, [16905] = 0x75EF, [16906] = 0x760F,
+-  [16907] = 0x7603, [16908] = 0x75F7, [16909] = 0x75FE, [16910] = 0x75FC,
+-  [16911] = 0x75F9, [16912] = 0x75F8, [16913] = 0x7610, [16914] = 0x75FB,
+-  [16915] = 0x75F6, [16916] = 0x75ED, [16917] = 0x75F5, [16918] = 0x75FD,
+-  [16919] = 0x7699, [16920] = 0x76B5, [16921] = 0x76DD, [16922] = 0x7755,
+-  [16923] = 0x775F, [16924] = 0x7760, [16925] = 0x7752, [16926] = 0x7756,
+-  [16927] = 0x775A, [16928] = 0x7769, [16929] = 0x7767, [16930] = 0x7754,
+-  [16931] = 0x7759, [16932] = 0x776D, [16933] = 0x77E0, [16934] = 0x7887,
+-  [16935] = 0x789A, [16936] = 0x7894, [16937] = 0x788F, [16938] = 0x7884,
+-  [16939] = 0x7895, [16940] = 0x7885, [16941] = 0x7886, [16942] = 0x78A1,
+-  [16943] = 0x7883, [16944] = 0x7879, [16945] = 0x7899, [16946] = 0x7880,
+-  [16947] = 0x7896, [16948] = 0x787B, [16949] = 0x797C, [16950] = 0x7982,
+-  [16951] = 0x797D, [16952] = 0x7979, [16953] = 0x7A11, [16954] = 0x7A18,
+-  [16955] = 0x7A19, [16956] = 0x7A12, [16957] = 0x7A17, [16958] = 0x7A15,
+-  [16959] = 0x7A22, [16960] = 0x7A13, [16965] = 0x7A1B, [16966] = 0x7A10,
+-  [16967] = 0x7AA3, [16968] = 0x7AA2, [16969] = 0x7A9E, [16970] = 0x7AEB,
+-  [16971] = 0x7B66, [16972] = 0x7B64, [16973] = 0x7B6D, [16974] = 0x7B74,
+-  [16975] = 0x7B69, [16976] = 0x7B72, [16977] = 0x7B65, [16978] = 0x7B73,
+-  [16979] = 0x7B71, [16980] = 0x7B70, [16981] = 0x7B61, [16982] = 0x7B78,
+-  [16983] = 0x7B76, [16984] = 0x7B63, [16985] = 0x7CB2, [16986] = 0x7CB4,
+-  [16987] = 0x7CAF, [16988] = 0x7D88, [16989] = 0x7D86, [16990] = 0x7D80,
+-  [16991] = 0x7D8D, [16992] = 0x7D7F, [16993] = 0x7D85, [16994] = 0x7D7A,
+-  [16995] = 0x7D8E, [16996] = 0x7D7B, [16997] = 0x7D83, [16998] = 0x7D7C,
+-  [16999] = 0x7D8C, [17000] = 0x7D94, [17001] = 0x7D84, [17002] = 0x7D7D,
+-  [17003] = 0x7D92, [17004] = 0x7F6D, [17005] = 0x7F6B, [17006] = 0x7F67,
+-  [17007] = 0x7F68, [17008] = 0x7F6C, [17009] = 0x7FA6, [17010] = 0x7FA5,
+-  [17011] = 0x7FA7, [17012] = 0x7FDB, [17013] = 0x7FDC, [17014] = 0x8021,
+-  [17015] = 0x8164, [17016] = 0x8160, [17017] = 0x8177, [17018] = 0x815C,
+-  [17019] = 0x8169, [17020] = 0x815B, [17021] = 0x8162, [17022] = 0x8172,
+-  [17023] = 0x6721, [17024] = 0x815E, [17025] = 0x8176, [17026] = 0x8167,
+-  [17027] = 0x816F, [17062] = 0x8144, [17063] = 0x8161, [17064] = 0x821D,
+-  [17065] = 0x8249, [17066] = 0x8244, [17067] = 0x8240, [17068] = 0x8242,
+-  [17069] = 0x8245, [17070] = 0x84F1, [17071] = 0x843F, [17072] = 0x8456,
+-  [17073] = 0x8476, [17074] = 0x8479, [17075] = 0x848F, [17076] = 0x848D,
+-  [17077] = 0x8465, [17078] = 0x8451, [17079] = 0x8440, [17080] = 0x8486,
+-  [17081] = 0x8467, [17082] = 0x8430, [17083] = 0x844D, [17084] = 0x847D,
+-  [17085] = 0x845A, [17086] = 0x8459, [17087] = 0x8474, [17088] = 0x8473,
+-  [17089] = 0x845D, [17090] = 0x8507, [17091] = 0x845E, [17092] = 0x8437,
+-  [17093] = 0x843A, [17094] = 0x8434, [17095] = 0x847A, [17096] = 0x8443,
+-  [17097] = 0x8478, [17098] = 0x8432, [17099] = 0x8445, [17100] = 0x8429,
+-  [17101] = 0x83D9, [17102] = 0x844B, [17103] = 0x842F, [17104] = 0x8442,
+-  [17105] = 0x842D, [17106] = 0x845F, [17107] = 0x8470, [17108] = 0x8439,
+-  [17109] = 0x844E, [17110] = 0x844C, [17111] = 0x8452, [17112] = 0x846F,
+-  [17113] = 0x84C5, [17114] = 0x848E, [17115] = 0x843B, [17116] = 0x8447,
+-  [17117] = 0x8436, [17118] = 0x8433, [17119] = 0x8468, [17120] = 0x847E,
+-  [17121] = 0x8444, [17122] = 0x842B, [17123] = 0x8460, [17124] = 0x8454,
+-  [17125] = 0x846E, [17126] = 0x8450, [17127] = 0x870B, [17128] = 0x8704,
+-  [17129] = 0x86F7, [17130] = 0x870C, [17131] = 0x86FA, [17132] = 0x86D6,
+-  [17133] = 0x86F5, [17134] = 0x874D, [17135] = 0x86F8, [17136] = 0x870E,
+-  [17137] = 0x8709, [17138] = 0x8701, [17139] = 0x86F6, [17140] = 0x870D,
+-  [17141] = 0x8705, [17142] = 0x88D6, [17143] = 0x88CB, [17144] = 0x88CD,
+-  [17145] = 0x88CE, [17146] = 0x88DE, [17147] = 0x88DB, [17148] = 0x88DA,
+-  [17149] = 0x88CC, [17150] = 0x88D0, [17151] = 0x8985, [17152] = 0x899B,
+-  [17153] = 0x89DF, [17154] = 0x89E5, [17155] = 0x89E4, [17160] = 0x89E1,
+-  [17161] = 0x89E0, [17162] = 0x89E2, [17163] = 0x89DC, [17164] = 0x89E6,
+-  [17165] = 0x8A76, [17166] = 0x8A86, [17167] = 0x8A7F, [17168] = 0x8A61,
+-  [17169] = 0x8A3F, [17170] = 0x8A77, [17171] = 0x8A82, [17172] = 0x8A84,
+-  [17173] = 0x8A75, [17174] = 0x8A83, [17175] = 0x8A81, [17176] = 0x8A74,
+-  [17177] = 0x8A7A, [17178] = 0x8C3C, [17179] = 0x8C4B, [17180] = 0x8C4A,
+-  [17181] = 0x8C65, [17182] = 0x8C64, [17183] = 0x8C66, [17184] = 0x8C86,
+-  [17185] = 0x8C84, [17186] = 0x8C85, [17187] = 0x8CCC, [17188] = 0x8D68,
+-  [17189] = 0x8D69, [17190] = 0x8D91, [17191] = 0x8D8C, [17192] = 0x8D8E,
+-  [17193] = 0x8D8F, [17194] = 0x8D8D, [17195] = 0x8D93, [17196] = 0x8D94,
+-  [17197] = 0x8D90, [17198] = 0x8D92, [17199] = 0x8DF0, [17200] = 0x8DE0,
+-  [17201] = 0x8DEC, [17202] = 0x8DF1, [17203] = 0x8DEE, [17204] = 0x8DD0,
+-  [17205] = 0x8DE9, [17206] = 0x8DE3, [17207] = 0x8DE2, [17208] = 0x8DE7,
+-  [17209] = 0x8DF2, [17210] = 0x8DEB, [17211] = 0x8DF4, [17212] = 0x8F06,
+-  [17213] = 0x8EFF, [17214] = 0x8F01, [17215] = 0x8F00, [17216] = 0x8F05,
+-  [17217] = 0x8F07, [17218] = 0x8F08, [17219] = 0x8F02, [17220] = 0x8F0B,
+-  [17221] = 0x9052, [17222] = 0x903F, [17257] = 0x9044, [17258] = 0x9049,
+-  [17259] = 0x903D, [17260] = 0x9110, [17261] = 0x910D, [17262] = 0x910F,
+-  [17263] = 0x9111, [17264] = 0x9116, [17265] = 0x9114, [17266] = 0x910B,
+-  [17267] = 0x910E, [17268] = 0x916E, [17269] = 0x916F, [17270] = 0x9248,
+-  [17271] = 0x9252, [17272] = 0x9230, [17273] = 0x923A, [17274] = 0x9266,
+-  [17275] = 0x9233, [17276] = 0x9265, [17277] = 0x925E, [17278] = 0x9283,
+-  [17279] = 0x922E, [17280] = 0x924A, [17281] = 0x9246, [17282] = 0x926D,
+-  [17283] = 0x926C, [17284] = 0x924F, [17285] = 0x9260, [17286] = 0x9267,
+-  [17287] = 0x926F, [17288] = 0x9236, [17289] = 0x9261, [17290] = 0x9270,
+-  [17291] = 0x9231, [17292] = 0x9254, [17293] = 0x9263, [17294] = 0x9250,
+-  [17295] = 0x9272, [17296] = 0x924E, [17297] = 0x9253, [17298] = 0x924C,
+-  [17299] = 0x9256, [17300] = 0x9232, [17301] = 0x959F, [17302] = 0x959C,
+-  [17303] = 0x959E, [17304] = 0x959B, [17305] = 0x9692, [17306] = 0x9693,
+-  [17307] = 0x9691, [17308] = 0x9697, [17309] = 0x96CE, [17310] = 0x96FA,
+-  [17311] = 0x96FD, [17312] = 0x96F8, [17313] = 0x96F5, [17314] = 0x9773,
+-  [17315] = 0x9777, [17316] = 0x9778, [17317] = 0x9772, [17318] = 0x980F,
+-  [17319] = 0x980D, [17320] = 0x980E, [17321] = 0x98AC, [17322] = 0x98F6,
+-  [17323] = 0x98F9, [17324] = 0x99AF, [17325] = 0x99B2, [17326] = 0x99B0,
+-  [17327] = 0x99B5, [17328] = 0x9AAD, [17329] = 0x9AAB, [17330] = 0x9B5B,
+-  [17331] = 0x9CEA, [17332] = 0x9CED, [17333] = 0x9CE7, [17334] = 0x9E80,
+-  [17335] = 0x9EFD, [17336] = 0x50E6, [17337] = 0x50D4, [17338] = 0x50D7,
+-  [17339] = 0x50E8, [17340] = 0x50F3, [17341] = 0x50DB, [17342] = 0x50EA,
+-  [17343] = 0x50DD, [17344] = 0x50E4, [17345] = 0x50D3, [17346] = 0x50EC,
+-  [17347] = 0x50F0, [17348] = 0x50EF, [17349] = 0x50E3, [17350] = 0x50E0,
+-  [17355] = 0x51D8, [17356] = 0x5280, [17357] = 0x5281, [17358] = 0x52E9,
+-  [17359] = 0x52EB, [17360] = 0x5330, [17361] = 0x53AC, [17362] = 0x5627,
+-  [17363] = 0x5615, [17364] = 0x560C, [17365] = 0x5612, [17366] = 0x55FC,
+-  [17367] = 0x560F, [17368] = 0x561C, [17369] = 0x5601, [17370] = 0x5613,
+-  [17371] = 0x5602, [17372] = 0x55FA, [17373] = 0x561D, [17374] = 0x5604,
+-  [17375] = 0x55FF, [17376] = 0x55F9, [17377] = 0x5889, [17378] = 0x587C,
+-  [17379] = 0x5890, [17380] = 0x5898, [17381] = 0x5886, [17382] = 0x5881,
+-  [17383] = 0x587F, [17384] = 0x5874, [17385] = 0x588B, [17386] = 0x587A,
+-  [17387] = 0x5887, [17388] = 0x5891, [17389] = 0x588E, [17390] = 0x5876,
+-  [17391] = 0x5882, [17392] = 0x5888, [17393] = 0x587B, [17394] = 0x5894,
+-  [17395] = 0x588F, [17396] = 0x58FE, [17397] = 0x596B, [17398] = 0x5ADC,
+-  [17399] = 0x5AEE, [17400] = 0x5AE5, [17401] = 0x5AD5, [17402] = 0x5AEA,
+-  [17403] = 0x5ADA, [17404] = 0x5AED, [17405] = 0x5AEB, [17406] = 0x5AF3,
+-  [17407] = 0x5AE2, [17408] = 0x5AE0, [17409] = 0x5ADB, [17410] = 0x5AEC,
+-  [17411] = 0x5ADE, [17412] = 0x5ADD, [17413] = 0x5AD9, [17414] = 0x5AE8,
+-  [17415] = 0x5ADF, [17416] = 0x5B77, [17417] = 0x5BE0, [17452] = 0x5BE3,
+-  [17453] = 0x5C63, [17454] = 0x5D82, [17455] = 0x5D80, [17456] = 0x5D7D,
+-  [17457] = 0x5D86, [17458] = 0x5D7A, [17459] = 0x5D81, [17460] = 0x5D77,
+-  [17461] = 0x5D8A, [17462] = 0x5D89, [17463] = 0x5D88, [17464] = 0x5D7E,
+-  [17465] = 0x5D7C, [17466] = 0x5D8D, [17467] = 0x5D79, [17468] = 0x5D7F,
+-  [17469] = 0x5E58, [17470] = 0x5E59, [17471] = 0x5E53, [17472] = 0x5ED8,
+-  [17473] = 0x5ED1, [17474] = 0x5ED7, [17475] = 0x5ECE, [17476] = 0x5EDC,
+-  [17477] = 0x5ED5, [17478] = 0x5ED9, [17479] = 0x5ED2, [17480] = 0x5ED4,
+-  [17481] = 0x5F44, [17482] = 0x5F43, [17483] = 0x5F6F, [17484] = 0x5FB6,
+-  [17485] = 0x612C, [17486] = 0x6128, [17487] = 0x6141, [17488] = 0x615E,
+-  [17489] = 0x6171, [17490] = 0x6173, [17491] = 0x6152, [17492] = 0x6153,
+-  [17493] = 0x6172, [17494] = 0x616C, [17495] = 0x6180, [17496] = 0x6174,
+-  [17497] = 0x6154, [17498] = 0x617A, [17499] = 0x615B, [17500] = 0x6165,
+-  [17501] = 0x613B, [17502] = 0x616A, [17503] = 0x6161, [17504] = 0x6156,
+-  [17505] = 0x6229, [17506] = 0x6227, [17507] = 0x622B, [17508] = 0x642B,
+-  [17509] = 0x644D, [17510] = 0x645B, [17511] = 0x645D, [17512] = 0x6474,
+-  [17513] = 0x6476, [17514] = 0x6472, [17515] = 0x6473, [17516] = 0x647D,
+-  [17517] = 0x6475, [17518] = 0x6466, [17519] = 0x64A6, [17520] = 0x644E,
+-  [17521] = 0x6482, [17522] = 0x645E, [17523] = 0x645C, [17524] = 0x644B,
+-  [17525] = 0x6453, [17526] = 0x6460, [17527] = 0x6450, [17528] = 0x647F,
+-  [17529] = 0x643F, [17530] = 0x646C, [17531] = 0x646B, [17532] = 0x6459,
+-  [17533] = 0x6465, [17534] = 0x6477, [17535] = 0x6573, [17536] = 0x65A0,
+-  [17537] = 0x66A1, [17538] = 0x66A0, [17539] = 0x669F, [17540] = 0x6705,
+-  [17541] = 0x6704, [17542] = 0x6722, [17543] = 0x69B1, [17544] = 0x69B6,
+-  [17545] = 0x69C9, [17550] = 0x69A0, [17551] = 0x69CE, [17552] = 0x6996,
+-  [17553] = 0x69B0, [17554] = 0x69AC, [17555] = 0x69BC, [17556] = 0x6991,
+-  [17557] = 0x6999, [17558] = 0x698E, [17559] = 0x69A7, [17560] = 0x698D,
+-  [17561] = 0x69A9, [17562] = 0x69BE, [17563] = 0x69AF, [17564] = 0x69BF,
+-  [17565] = 0x69C4, [17566] = 0x69BD, [17567] = 0x69A4, [17568] = 0x69D4,
+-  [17569] = 0x69B9, [17570] = 0x69CA, [17571] = 0x699A, [17572] = 0x69CF,
+-  [17573] = 0x69B3, [17574] = 0x6993, [17575] = 0x69AA, [17576] = 0x69A1,
+-  [17577] = 0x699E, [17578] = 0x69D9, [17579] = 0x6997, [17580] = 0x6990,
+-  [17581] = 0x69C2, [17582] = 0x69B5, [17583] = 0x69A5, [17584] = 0x69C6,
+-  [17585] = 0x6B4A, [17586] = 0x6B4D, [17587] = 0x6B4B, [17588] = 0x6B9E,
+-  [17589] = 0x6B9F, [17590] = 0x6BA0, [17591] = 0x6BC3, [17592] = 0x6BC4,
+-  [17593] = 0x6BFE, [17594] = 0x6ECE, [17595] = 0x6EF5, [17596] = 0x6EF1,
+-  [17597] = 0x6F03, [17598] = 0x6F25, [17599] = 0x6EF8, [17600] = 0x6F37,
+-  [17601] = 0x6EFB, [17602] = 0x6F2E, [17603] = 0x6F09, [17604] = 0x6F4E,
+-  [17605] = 0x6F19, [17606] = 0x6F1A, [17607] = 0x6F27, [17608] = 0x6F18,
+-  [17609] = 0x6F3B, [17610] = 0x6F12, [17611] = 0x6EED, [17612] = 0x6F0A,
+-  [17647] = 0x6F36, [17648] = 0x6F73, [17649] = 0x6EF9, [17650] = 0x6EEE,
+-  [17651] = 0x6F2D, [17652] = 0x6F40, [17653] = 0x6F30, [17654] = 0x6F3C,
+-  [17655] = 0x6F35, [17656] = 0x6EEB, [17657] = 0x6F07, [17658] = 0x6F0E,
+-  [17659] = 0x6F43, [17660] = 0x6F05, [17661] = 0x6EFD, [17662] = 0x6EF6,
+-  [17663] = 0x6F39, [17664] = 0x6F1C, [17665] = 0x6EFC, [17666] = 0x6F3A,
+-  [17667] = 0x6F1F, [17668] = 0x6F0D, [17669] = 0x6F1E, [17670] = 0x6F08,
+-  [17671] = 0x6F21, [17672] = 0x7187, [17673] = 0x7190, [17674] = 0x7189,
+-  [17675] = 0x7180, [17676] = 0x7185, [17677] = 0x7182, [17678] = 0x718F,
+-  [17679] = 0x717B, [17680] = 0x7186, [17681] = 0x7181, [17682] = 0x7197,
+-  [17683] = 0x7244, [17684] = 0x7253, [17685] = 0x7297, [17686] = 0x7295,
+-  [17687] = 0x7293, [17688] = 0x7343, [17689] = 0x734D, [17690] = 0x7351,
+-  [17691] = 0x734C, [17692] = 0x7462, [17693] = 0x7473, [17694] = 0x7471,
+-  [17695] = 0x7475, [17696] = 0x7472, [17697] = 0x7467, [17698] = 0x746E,
+-  [17699] = 0x7500, [17700] = 0x7502, [17701] = 0x7503, [17702] = 0x757D,
+-  [17703] = 0x7590, [17704] = 0x7616, [17705] = 0x7608, [17706] = 0x760C,
+-  [17707] = 0x7615, [17708] = 0x7611, [17709] = 0x760A, [17710] = 0x7614,
+-  [17711] = 0x76B8, [17712] = 0x7781, [17713] = 0x777C, [17714] = 0x7785,
+-  [17715] = 0x7782, [17716] = 0x776E, [17717] = 0x7780, [17718] = 0x776F,
+-  [17719] = 0x777E, [17720] = 0x7783, [17721] = 0x78B2, [17722] = 0x78AA,
+-  [17723] = 0x78B4, [17724] = 0x78AD, [17725] = 0x78A8, [17726] = 0x787E,
+-  [17727] = 0x78AB, [17728] = 0x789E, [17729] = 0x78A5, [17730] = 0x78A0,
+-  [17731] = 0x78AC, [17732] = 0x78A2, [17733] = 0x78A4, [17734] = 0x7998,
+-  [17735] = 0x798A, [17736] = 0x798B, [17737] = 0x7996, [17738] = 0x7995,
+-  [17739] = 0x7994, [17740] = 0x7993, [17745] = 0x7997, [17746] = 0x7988,
+-  [17747] = 0x7992, [17748] = 0x7990, [17749] = 0x7A2B, [17750] = 0x7A4A,
+-  [17751] = 0x7A30, [17752] = 0x7A2F, [17753] = 0x7A28, [17754] = 0x7A26,
+-  [17755] = 0x7AA8, [17756] = 0x7AAB, [17757] = 0x7AAC, [17758] = 0x7AEE,
+-  [17759] = 0x7B88, [17760] = 0x7B9C, [17761] = 0x7B8A, [17762] = 0x7B91,
+-  [17763] = 0x7B90, [17764] = 0x7B96, [17765] = 0x7B8D, [17766] = 0x7B8C,
+-  [17767] = 0x7B9B, [17768] = 0x7B8E, [17769] = 0x7B85, [17770] = 0x7B98,
+-  [17771] = 0x5284, [17772] = 0x7B99, [17773] = 0x7BA4, [17774] = 0x7B82,
+-  [17775] = 0x7CBB, [17776] = 0x7CBF, [17777] = 0x7CBC, [17778] = 0x7CBA,
+-  [17779] = 0x7DA7, [17780] = 0x7DB7, [17781] = 0x7DC2, [17782] = 0x7DA3,
+-  [17783] = 0x7DAA, [17784] = 0x7DC1, [17785] = 0x7DC0, [17786] = 0x7DC5,
+-  [17787] = 0x7D9D, [17788] = 0x7DCE, [17789] = 0x7DC4, [17790] = 0x7DC6,
+-  [17791] = 0x7DCB, [17792] = 0x7DCC, [17793] = 0x7DAF, [17794] = 0x7DB9,
+-  [17795] = 0x7D96, [17796] = 0x7DBC, [17797] = 0x7D9F, [17798] = 0x7DA6,
+-  [17799] = 0x7DAE, [17800] = 0x7DA9, [17801] = 0x7DA1, [17802] = 0x7DC9,
+-  [17803] = 0x7F73, [17804] = 0x7FE2, [17805] = 0x7FE3, [17806] = 0x7FE5,
+-  [17807] = 0x7FDE, [17842] = 0x8024, [17843] = 0x805D, [17844] = 0x805C,
+-  [17845] = 0x8189, [17846] = 0x8186, [17847] = 0x8183, [17848] = 0x8187,
+-  [17849] = 0x818D, [17850] = 0x818C, [17851] = 0x818B, [17852] = 0x8215,
+-  [17853] = 0x8497, [17854] = 0x84A4, [17855] = 0x84A1, [17856] = 0x849F,
+-  [17857] = 0x84BA, [17858] = 0x84CE, [17859] = 0x84C2, [17860] = 0x84AC,
+-  [17861] = 0x84AE, [17862] = 0x84AB, [17863] = 0x84B9, [17864] = 0x84B4,
+-  [17865] = 0x84C1, [17866] = 0x84CD, [17867] = 0x84AA, [17868] = 0x849A,
+-  [17869] = 0x84B1, [17870] = 0x84D0, [17871] = 0x849D, [17872] = 0x84A7,
+-  [17873] = 0x84BB, [17874] = 0x84A2, [17875] = 0x8494, [17876] = 0x84C7,
+-  [17877] = 0x84CC, [17878] = 0x849B, [17879] = 0x84A9, [17880] = 0x84AF,
+-  [17881] = 0x84A8, [17882] = 0x84D6, [17883] = 0x8498, [17884] = 0x84B6,
+-  [17885] = 0x84CF, [17886] = 0x84A0, [17887] = 0x84D7, [17888] = 0x84D4,
+-  [17889] = 0x84D2, [17890] = 0x84DB, [17891] = 0x84B0, [17892] = 0x8491,
+-  [17893] = 0x8661, [17894] = 0x8733, [17895] = 0x8723, [17896] = 0x8728,
+-  [17897] = 0x876B, [17898] = 0x8740, [17899] = 0x872E, [17900] = 0x871E,
+-  [17901] = 0x8721, [17902] = 0x8719, [17903] = 0x871B, [17904] = 0x8743,
+-  [17905] = 0x872C, [17906] = 0x8741, [17907] = 0x873E, [17908] = 0x8746,
+-  [17909] = 0x8720, [17910] = 0x8732, [17911] = 0x872A, [17912] = 0x872D,
+-  [17913] = 0x873C, [17914] = 0x8712, [17915] = 0x873A, [17916] = 0x8731,
+-  [17917] = 0x8735, [17918] = 0x8742, [17919] = 0x8726, [17920] = 0x8727,
+-  [17921] = 0x8738, [17922] = 0x8724, [17923] = 0x871A, [17924] = 0x8730,
+-  [17925] = 0x8711, [17926] = 0x88F7, [17927] = 0x88E7, [17928] = 0x88F1,
+-  [17929] = 0x88F2, [17930] = 0x88FA, [17931] = 0x88FE, [17932] = 0x88EE,
+-  [17933] = 0x88FC, [17934] = 0x88F6, [17935] = 0x88FB, [17940] = 0x88F0,
+-  [17941] = 0x88EC, [17942] = 0x88EB, [17943] = 0x899D, [17944] = 0x89A1,
+-  [17945] = 0x899F, [17946] = 0x899E, [17947] = 0x89E9, [17948] = 0x89EB,
+-  [17949] = 0x89E8, [17950] = 0x8AAB, [17951] = 0x8A99, [17952] = 0x8A8B,
+-  [17953] = 0x8A92, [17954] = 0x8A8F, [17955] = 0x8A96, [17956] = 0x8C3D,
+-  [17957] = 0x8C68, [17958] = 0x8C69, [17959] = 0x8CD5, [17960] = 0x8CCF,
+-  [17961] = 0x8CD7, [17962] = 0x8D96, [17963] = 0x8E09, [17964] = 0x8E02,
+-  [17965] = 0x8DFF, [17966] = 0x8E0D, [17967] = 0x8DFD, [17968] = 0x8E0A,
+-  [17969] = 0x8E03, [17970] = 0x8E07, [17971] = 0x8E06, [17972] = 0x8E05,
+-  [17973] = 0x8DFE, [17974] = 0x8E00, [17975] = 0x8E04, [17976] = 0x8F10,
+-  [17977] = 0x8F11, [17978] = 0x8F0E, [17979] = 0x8F0D, [17980] = 0x9123,
+-  [17981] = 0x911C, [17982] = 0x9120, [17983] = 0x9122, [17984] = 0x911F,
+-  [17985] = 0x911D, [17986] = 0x911A, [17987] = 0x9124, [17988] = 0x9121,
+-  [17989] = 0x911B, [17990] = 0x917A, [17991] = 0x9172, [17992] = 0x9179,
+-  [17993] = 0x9173, [17994] = 0x92A5, [17995] = 0x92A4, [17996] = 0x9276,
+-  [17997] = 0x929B, [17998] = 0x927A, [17999] = 0x92A0, [18000] = 0x9294,
+-  [18001] = 0x92AA, [18002] = 0x928D, [18037] = 0x92A6, [18038] = 0x929A,
+-  [18039] = 0x92AB, [18040] = 0x9279, [18041] = 0x9297, [18042] = 0x927F,
+-  [18043] = 0x92A3, [18044] = 0x92EE, [18045] = 0x928E, [18046] = 0x9282,
+-  [18047] = 0x9295, [18048] = 0x92A2, [18049] = 0x927D, [18050] = 0x9288,
+-  [18051] = 0x92A1, [18052] = 0x928A, [18053] = 0x9286, [18054] = 0x928C,
+-  [18055] = 0x9299, [18056] = 0x92A7, [18057] = 0x927E, [18058] = 0x9287,
+-  [18059] = 0x92A9, [18060] = 0x929D, [18061] = 0x928B, [18062] = 0x922D,
+-  [18063] = 0x969E, [18064] = 0x96A1, [18065] = 0x96FF, [18066] = 0x9758,
+-  [18067] = 0x977D, [18068] = 0x977A, [18069] = 0x977E, [18070] = 0x9783,
+-  [18071] = 0x9780, [18072] = 0x9782, [18073] = 0x977B, [18074] = 0x9784,
+-  [18075] = 0x9781, [18076] = 0x977F, [18077] = 0x97CE, [18078] = 0x97CD,
+-  [18079] = 0x9816, [18080] = 0x98AD, [18081] = 0x98AE, [18082] = 0x9902,
+-  [18083] = 0x9900, [18084] = 0x9907, [18085] = 0x999D, [18086] = 0x999C,
+-  [18087] = 0x99C3, [18088] = 0x99B9, [18089] = 0x99BB, [18090] = 0x99BA,
+-  [18091] = 0x99C2, [18092] = 0x99BD, [18093] = 0x99C7, [18094] = 0x9AB1,
+-  [18095] = 0x9AE3, [18096] = 0x9AE7, [18097] = 0x9B3E, [18098] = 0x9B3F,
+-  [18099] = 0x9B60, [18100] = 0x9B61, [18101] = 0x9B5F, [18102] = 0x9CF1,
+-  [18103] = 0x9CF2, [18104] = 0x9CF5, [18105] = 0x9EA7, [18106] = 0x50FF,
+-  [18107] = 0x5103, [18108] = 0x5130, [18109] = 0x50F8, [18110] = 0x5106,
+-  [18111] = 0x5107, [18112] = 0x50F6, [18113] = 0x50FE, [18114] = 0x510B,
+-  [18115] = 0x510C, [18116] = 0x50FD, [18117] = 0x510A, [18118] = 0x528B,
+-  [18119] = 0x528C, [18120] = 0x52F1, [18121] = 0x52EF, [18122] = 0x5648,
+-  [18123] = 0x5642, [18124] = 0x564C, [18125] = 0x5635, [18126] = 0x5641,
+-  [18127] = 0x564A, [18128] = 0x5649, [18129] = 0x5646, [18130] = 0x5658,
+-  [18135] = 0x565A, [18136] = 0x5640, [18137] = 0x5633, [18138] = 0x563D,
+-  [18139] = 0x562C, [18140] = 0x563E, [18141] = 0x5638, [18142] = 0x562A,
+-  [18143] = 0x563A, [18144] = 0x571A, [18145] = 0x58AB, [18146] = 0x589D,
+-  [18147] = 0x58B1, [18148] = 0x58A0, [18149] = 0x58A3, [18150] = 0x58AF,
+-  [18151] = 0x58AC, [18152] = 0x58A5, [18153] = 0x58A1, [18154] = 0x58FF,
+-  [18155] = 0x5AFF, [18156] = 0x5AF4, [18157] = 0x5AFD, [18158] = 0x5AF7,
+-  [18159] = 0x5AF6, [18160] = 0x5B03, [18161] = 0x5AF8, [18162] = 0x5B02,
+-  [18163] = 0x5AF9, [18164] = 0x5B01, [18165] = 0x5B07, [18166] = 0x5B05,
+-  [18167] = 0x5B0F, [18168] = 0x5C67, [18169] = 0x5D99, [18170] = 0x5D97,
+-  [18171] = 0x5D9F, [18172] = 0x5D92, [18173] = 0x5DA2, [18174] = 0x5D93,
+-  [18175] = 0x5D95, [18176] = 0x5DA0, [18177] = 0x5D9C, [18178] = 0x5DA1,
+-  [18179] = 0x5D9A, [18180] = 0x5D9E, [18181] = 0x5E69, [18182] = 0x5E5D,
+-  [18183] = 0x5E60, [18184] = 0x5E5C, [18185] = 0x7DF3, [18186] = 0x5EDB,
+-  [18187] = 0x5EDE, [18188] = 0x5EE1, [18189] = 0x5F49, [18190] = 0x5FB2,
+-  [18191] = 0x618B, [18192] = 0x6183, [18193] = 0x6179, [18194] = 0x61B1,
+-  [18195] = 0x61B0, [18196] = 0x61A2, [18197] = 0x6189, [18232] = 0x619B,
+-  [18233] = 0x6193, [18234] = 0x61AF, [18235] = 0x61AD, [18236] = 0x619F,
+-  [18237] = 0x6192, [18238] = 0x61AA, [18239] = 0x61A1, [18240] = 0x618D,
+-  [18241] = 0x6166, [18242] = 0x61B3, [18243] = 0x622D, [18244] = 0x646E,
+-  [18245] = 0x6470, [18246] = 0x6496, [18247] = 0x64A0, [18248] = 0x6485,
+-  [18249] = 0x6497, [18250] = 0x649C, [18251] = 0x648F, [18252] = 0x648B,
+-  [18253] = 0x648A, [18254] = 0x648C, [18255] = 0x64A3, [18256] = 0x649F,
+-  [18257] = 0x6468, [18258] = 0x64B1, [18259] = 0x6498, [18260] = 0x6576,
+-  [18261] = 0x657A, [18262] = 0x6579, [18263] = 0x657B, [18264] = 0x65B2,
+-  [18265] = 0x65B3, [18266] = 0x66B5, [18267] = 0x66B0, [18268] = 0x66A9,
+-  [18269] = 0x66B2, [18270] = 0x66B7, [18271] = 0x66AA, [18272] = 0x66AF,
+-  [18273] = 0x6A00, [18274] = 0x6A06, [18275] = 0x6A17, [18276] = 0x69E5,
+-  [18277] = 0x69F8, [18278] = 0x6A15, [18279] = 0x69F1, [18280] = 0x69E4,
+-  [18281] = 0x6A20, [18282] = 0x69FF, [18283] = 0x69EC, [18284] = 0x69E2,
+-  [18285] = 0x6A1B, [18286] = 0x6A1D, [18287] = 0x69FE, [18288] = 0x6A27,
+-  [18289] = 0x69F2, [18290] = 0x69EE, [18291] = 0x6A14, [18292] = 0x69F7,
+-  [18293] = 0x69E7, [18294] = 0x6A40, [18295] = 0x6A08, [18296] = 0x69E6,
+-  [18297] = 0x69FB, [18298] = 0x6A0D, [18299] = 0x69FC, [18300] = 0x69EB,
+-  [18301] = 0x6A09, [18302] = 0x6A04, [18303] = 0x6A18, [18304] = 0x6A25,
+-  [18305] = 0x6A0F, [18306] = 0x69F6, [18307] = 0x6A26, [18308] = 0x6A07,
+-  [18309] = 0x69F4, [18310] = 0x6A16, [18311] = 0x6B51, [18312] = 0x6BA5,
+-  [18313] = 0x6BA3, [18314] = 0x6BA2, [18315] = 0x6BA6, [18316] = 0x6C01,
+-  [18317] = 0x6C00, [18318] = 0x6BFF, [18319] = 0x6C02, [18320] = 0x6F41,
+-  [18321] = 0x6F26, [18322] = 0x6F7E, [18323] = 0x6F87, [18324] = 0x6FC6,
+-  [18325] = 0x6F92, [18330] = 0x6F8D, [18331] = 0x6F89, [18332] = 0x6F8C,
+-  [18333] = 0x6F62, [18334] = 0x6F4F, [18335] = 0x6F85, [18336] = 0x6F5A,
+-  [18337] = 0x6F96, [18338] = 0x6F76, [18339] = 0x6F6C, [18340] = 0x6F82,
+-  [18341] = 0x6F55, [18342] = 0x6F72, [18343] = 0x6F52, [18344] = 0x6F50,
+-  [18345] = 0x6F57, [18346] = 0x6F94, [18347] = 0x6F93, [18348] = 0x6F5D,
+-  [18349] = 0x6F00, [18350] = 0x6F61, [18351] = 0x6F6B, [18352] = 0x6F7D,
+-  [18353] = 0x6F67, [18354] = 0x6F90, [18355] = 0x6F53, [18356] = 0x6F8B,
+-  [18357] = 0x6F69, [18358] = 0x6F7F, [18359] = 0x6F95, [18360] = 0x6F63,
+-  [18361] = 0x6F77, [18362] = 0x6F6A, [18363] = 0x6F7B, [18364] = 0x71B2,
+-  [18365] = 0x71AF, [18366] = 0x719B, [18367] = 0x71B0, [18368] = 0x71A0,
+-  [18369] = 0x719A, [18370] = 0x71A9, [18371] = 0x71B5, [18372] = 0x719D,
+-  [18373] = 0x71A5, [18374] = 0x719E, [18375] = 0x71A4, [18376] = 0x71A1,
+-  [18377] = 0x71AA, [18378] = 0x719C, [18379] = 0x71A7, [18380] = 0x71B3,
+-  [18381] = 0x7298, [18382] = 0x729A, [18383] = 0x7358, [18384] = 0x7352,
+-  [18385] = 0x735E, [18386] = 0x735F, [18387] = 0x7360, [18388] = 0x735D,
+-  [18389] = 0x735B, [18390] = 0x7361, [18391] = 0x735A, [18392] = 0x7359,
+-  [18427] = 0x7362, [18428] = 0x7487, [18429] = 0x7489, [18430] = 0x748A,
+-  [18431] = 0x7486, [18432] = 0x7481, [18433] = 0x747D, [18434] = 0x7485,
+-  [18435] = 0x7488, [18436] = 0x747C, [18437] = 0x7479, [18438] = 0x7508,
+-  [18439] = 0x7507, [18440] = 0x757E, [18441] = 0x7625, [18442] = 0x761E,
+-  [18443] = 0x7619, [18444] = 0x761D, [18445] = 0x761C, [18446] = 0x7623,
+-  [18447] = 0x761A, [18448] = 0x7628, [18449] = 0x761B, [18450] = 0x769C,
+-  [18451] = 0x769D, [18452] = 0x769E, [18453] = 0x769B, [18454] = 0x778D,
+-  [18455] = 0x778F, [18456] = 0x7789, [18457] = 0x7788, [18458] = 0x78CD,
+-  [18459] = 0x78BB, [18460] = 0x78CF, [18461] = 0x78CC, [18462] = 0x78D1,
+-  [18463] = 0x78CE, [18464] = 0x78D4, [18465] = 0x78C8, [18466] = 0x78C3,
+-  [18467] = 0x78C4, [18468] = 0x78C9, [18469] = 0x799A, [18470] = 0x79A1,
+-  [18471] = 0x79A0, [18472] = 0x799C, [18473] = 0x79A2, [18474] = 0x799B,
+-  [18475] = 0x6B76, [18476] = 0x7A39, [18477] = 0x7AB2, [18478] = 0x7AB4,
+-  [18479] = 0x7AB3, [18480] = 0x7BB7, [18481] = 0x7BCB, [18482] = 0x7BBE,
+-  [18483] = 0x7BAC, [18484] = 0x7BCE, [18485] = 0x7BAF, [18486] = 0x7BB9,
+-  [18487] = 0x7BCA, [18488] = 0x7BB5, [18489] = 0x7CC5, [18490] = 0x7CC8,
+-  [18491] = 0x7CCC, [18492] = 0x7CCB, [18493] = 0x7DF7, [18494] = 0x7DDB,
+-  [18495] = 0x7DEA, [18496] = 0x7DE7, [18497] = 0x7DD7, [18498] = 0x7DE1,
+-  [18499] = 0x7E03, [18500] = 0x7DFA, [18501] = 0x7DE6, [18502] = 0x7DF6,
+-  [18503] = 0x7DF1, [18504] = 0x7DF0, [18505] = 0x7DEE, [18506] = 0x7DDF,
+-  [18507] = 0x7F76, [18508] = 0x7FAC, [18509] = 0x7FB0, [18510] = 0x7FAD,
+-  [18511] = 0x7FED, [18512] = 0x7FEB, [18513] = 0x7FEA, [18514] = 0x7FEC,
+-  [18515] = 0x7FE6, [18516] = 0x7FE8, [18517] = 0x8064, [18518] = 0x8067,
+-  [18519] = 0x81A3, [18520] = 0x819F, [18525] = 0x819E, [18526] = 0x8195,
+-  [18527] = 0x81A2, [18528] = 0x8199, [18529] = 0x8197, [18530] = 0x8216,
+-  [18531] = 0x824F, [18532] = 0x8253, [18533] = 0x8252, [18534] = 0x8250,
+-  [18535] = 0x824E, [18536] = 0x8251, [18537] = 0x8524, [18538] = 0x853B,
+-  [18539] = 0x850F, [18540] = 0x8500, [18541] = 0x8529, [18542] = 0x850E,
+-  [18543] = 0x8509, [18544] = 0x850D, [18545] = 0x851F, [18546] = 0x850A,
+-  [18547] = 0x8527, [18548] = 0x851C, [18549] = 0x84FB, [18550] = 0x852B,
+-  [18551] = 0x84FA, [18552] = 0x8508, [18553] = 0x850C, [18554] = 0x84F4,
+-  [18555] = 0x852A, [18556] = 0x84F2, [18557] = 0x8515, [18558] = 0x84F7,
+-  [18559] = 0x84EB, [18560] = 0x84F3, [18561] = 0x84FC, [18562] = 0x8512,
+-  [18563] = 0x84EA, [18564] = 0x84E9, [18565] = 0x8516, [18566] = 0x84FE,
+-  [18567] = 0x8528, [18568] = 0x851D, [18569] = 0x852E, [18570] = 0x8502,
+-  [18571] = 0x84FD, [18572] = 0x851E, [18573] = 0x84F6, [18574] = 0x8531,
+-  [18575] = 0x8526, [18576] = 0x84E7, [18577] = 0x84E8, [18578] = 0x84F0,
+-  [18579] = 0x84EF, [18580] = 0x84F9, [18581] = 0x8518, [18582] = 0x8520,
+-  [18583] = 0x8530, [18584] = 0x850B, [18585] = 0x8519, [18586] = 0x852F,
+-  [18587] = 0x8662, [18622] = 0x8756, [18623] = 0x8763, [18624] = 0x8764,
+-  [18625] = 0x8777, [18626] = 0x87E1, [18627] = 0x8773, [18628] = 0x8758,
+-  [18629] = 0x8754, [18630] = 0x875B, [18631] = 0x8752, [18632] = 0x8761,
+-  [18633] = 0x875A, [18634] = 0x8751, [18635] = 0x875E, [18636] = 0x876D,
+-  [18637] = 0x876A, [18638] = 0x8750, [18639] = 0x874E, [18640] = 0x875F,
+-  [18641] = 0x875D, [18642] = 0x876F, [18643] = 0x876C, [18644] = 0x877A,
+-  [18645] = 0x876E, [18646] = 0x875C, [18647] = 0x8765, [18648] = 0x874F,
+-  [18649] = 0x877B, [18650] = 0x8775, [18651] = 0x8762, [18652] = 0x8767,
+-  [18653] = 0x8769, [18654] = 0x885A, [18655] = 0x8905, [18656] = 0x890C,
+-  [18657] = 0x8914, [18658] = 0x890B, [18659] = 0x8917, [18660] = 0x8918,
+-  [18661] = 0x8919, [18662] = 0x8906, [18663] = 0x8916, [18664] = 0x8911,
+-  [18665] = 0x890E, [18666] = 0x8909, [18667] = 0x89A2, [18668] = 0x89A4,
+-  [18669] = 0x89A3, [18670] = 0x89ED, [18671] = 0x89F0, [18672] = 0x89EC,
+-  [18673] = 0x8ACF, [18674] = 0x8AC6, [18675] = 0x8AB8, [18676] = 0x8AD3,
+-  [18677] = 0x8AD1, [18678] = 0x8AD4, [18679] = 0x8AD5, [18680] = 0x8ABB,
+-  [18681] = 0x8AD7, [18682] = 0x8ABE, [18683] = 0x8AC0, [18684] = 0x8AC5,
+-  [18685] = 0x8AD8, [18686] = 0x8AC3, [18687] = 0x8ABA, [18688] = 0x8ABD,
+-  [18689] = 0x8AD9, [18690] = 0x8C3E, [18691] = 0x8C4D, [18692] = 0x8C8F,
+-  [18693] = 0x8CE5, [18694] = 0x8CDF, [18695] = 0x8CD9, [18696] = 0x8CE8,
+-  [18697] = 0x8CDA, [18698] = 0x8CDD, [18699] = 0x8CE7, [18700] = 0x8DA0,
+-  [18701] = 0x8D9C, [18702] = 0x8DA1, [18703] = 0x8D9B, [18704] = 0x8E20,
+-  [18705] = 0x8E23, [18706] = 0x8E25, [18707] = 0x8E24, [18708] = 0x8E2E,
+-  [18709] = 0x8E15, [18710] = 0x8E1B, [18711] = 0x8E16, [18712] = 0x8E11,
+-  [18713] = 0x8E19, [18714] = 0x8E26, [18715] = 0x8E27, [18720] = 0x8E14,
+-  [18721] = 0x8E12, [18722] = 0x8E18, [18723] = 0x8E13, [18724] = 0x8E1C,
+-  [18725] = 0x8E17, [18726] = 0x8E1A, [18727] = 0x8F2C, [18728] = 0x8F24,
+-  [18729] = 0x8F18, [18730] = 0x8F1A, [18731] = 0x8F20, [18732] = 0x8F23,
+-  [18733] = 0x8F16, [18734] = 0x8F17, [18735] = 0x9073, [18736] = 0x9070,
+-  [18737] = 0x906F, [18738] = 0x9067, [18739] = 0x906B, [18740] = 0x912F,
+-  [18741] = 0x912B, [18742] = 0x9129, [18743] = 0x912A, [18744] = 0x9132,
+-  [18745] = 0x9126, [18746] = 0x912E, [18747] = 0x9185, [18748] = 0x9186,
+-  [18749] = 0x918A, [18750] = 0x9181, [18751] = 0x9182, [18752] = 0x9184,
+-  [18753] = 0x9180, [18754] = 0x92D0, [18755] = 0x92C3, [18756] = 0x92C4,
+-  [18757] = 0x92C0, [18758] = 0x92D9, [18759] = 0x92B6, [18760] = 0x92CF,
+-  [18761] = 0x92F1, [18762] = 0x92DF, [18763] = 0x92D8, [18764] = 0x92E9,
+-  [18765] = 0x92D7, [18766] = 0x92DD, [18767] = 0x92CC, [18768] = 0x92EF,
+-  [18769] = 0x92C2, [18770] = 0x92E8, [18771] = 0x92CA, [18772] = 0x92C8,
+-  [18773] = 0x92CE, [18774] = 0x92E6, [18775] = 0x92CD, [18776] = 0x92D5,
+-  [18777] = 0x92C9, [18778] = 0x92E0, [18779] = 0x92DE, [18780] = 0x92E7,
+-  [18781] = 0x92D1, [18782] = 0x92D3, [18817] = 0x92B5, [18818] = 0x92E1,
+-  [18819] = 0x92C6, [18820] = 0x92B4, [18821] = 0x957C, [18822] = 0x95AC,
+-  [18823] = 0x95AB, [18824] = 0x95AE, [18825] = 0x95B0, [18826] = 0x96A4,
+-  [18827] = 0x96A2, [18828] = 0x96D3, [18829] = 0x9705, [18830] = 0x9708,
+-  [18831] = 0x9702, [18832] = 0x975A, [18833] = 0x978A, [18834] = 0x978E,
+-  [18835] = 0x9788, [18836] = 0x97D0, [18837] = 0x97CF, [18838] = 0x981E,
+-  [18839] = 0x981D, [18840] = 0x9826, [18841] = 0x9829, [18842] = 0x9828,
+-  [18843] = 0x9820, [18844] = 0x981B, [18845] = 0x9827, [18846] = 0x98B2,
+-  [18847] = 0x9908, [18848] = 0x98FA, [18849] = 0x9911, [18850] = 0x9914,
+-  [18851] = 0x9916, [18852] = 0x9917, [18853] = 0x9915, [18854] = 0x99DC,
+-  [18855] = 0x99CD, [18856] = 0x99CF, [18857] = 0x99D3, [18858] = 0x99D4,
+-  [18859] = 0x99CE, [18860] = 0x99C9, [18861] = 0x99D6, [18862] = 0x99D8,
+-  [18863] = 0x99CB, [18864] = 0x99D7, [18865] = 0x99CC, [18866] = 0x9AB3,
+-  [18867] = 0x9AEC, [18868] = 0x9AEB, [18869] = 0x9AF3, [18870] = 0x9AF2,
+-  [18871] = 0x9AF1, [18872] = 0x9B46, [18873] = 0x9B43, [18874] = 0x9B67,
+-  [18875] = 0x9B74, [18876] = 0x9B71, [18877] = 0x9B66, [18878] = 0x9B76,
+-  [18879] = 0x9B75, [18880] = 0x9B70, [18881] = 0x9B68, [18882] = 0x9B64,
+-  [18883] = 0x9B6C, [18884] = 0x9CFC, [18885] = 0x9CFA, [18886] = 0x9CFD,
+-  [18887] = 0x9CFF, [18888] = 0x9CF7, [18889] = 0x9D07, [18890] = 0x9D00,
+-  [18891] = 0x9CF9, [18892] = 0x9CFB, [18893] = 0x9D08, [18894] = 0x9D05,
+-  [18895] = 0x9D04, [18896] = 0x9E83, [18897] = 0x9ED3, [18898] = 0x9F0F,
+-  [18899] = 0x9F10, [18900] = 0x511C, [18901] = 0x5113, [18902] = 0x5117,
+-  [18903] = 0x511A, [18904] = 0x5111, [18905] = 0x51DE, [18906] = 0x5334,
+-  [18907] = 0x53E1, [18908] = 0x5670, [18909] = 0x5660, [18910] = 0x566E,
+-  [18915] = 0x5673, [18916] = 0x5666, [18917] = 0x5663, [18918] = 0x566D,
+-  [18919] = 0x5672, [18920] = 0x565E, [18921] = 0x5677, [18922] = 0x571C,
+-  [18923] = 0x571B, [18924] = 0x58C8, [18925] = 0x58BD, [18926] = 0x58C9,
+-  [18927] = 0x58BF, [18928] = 0x58BA, [18929] = 0x58C2, [18930] = 0x58BC,
+-  [18931] = 0x58C6, [18932] = 0x5B17, [18933] = 0x5B19, [18934] = 0x5B1B,
+-  [18935] = 0x5B21, [18936] = 0x5B14, [18937] = 0x5B13, [18938] = 0x5B10,
+-  [18939] = 0x5B16, [18940] = 0x5B28, [18941] = 0x5B1A, [18942] = 0x5B20,
+-  [18943] = 0x5B1E, [18944] = 0x5BEF, [18945] = 0x5DAC, [18946] = 0x5DB1,
+-  [18947] = 0x5DA9, [18948] = 0x5DA7, [18949] = 0x5DB5, [18950] = 0x5DB0,
+-  [18951] = 0x5DAE, [18952] = 0x5DAA, [18953] = 0x5DA8, [18954] = 0x5DB2,
+-  [18955] = 0x5DAD, [18956] = 0x5DAF, [18957] = 0x5DB4, [18958] = 0x5E67,
+-  [18959] = 0x5E68, [18960] = 0x5E66, [18961] = 0x5E6F, [18962] = 0x5EE9,
+-  [18963] = 0x5EE7, [18964] = 0x5EE6, [18965] = 0x5EE8, [18966] = 0x5EE5,
+-  [18967] = 0x5F4B, [18968] = 0x5FBC, [18969] = 0x619D, [18970] = 0x61A8,
+-  [18971] = 0x6196, [18972] = 0x61C5, [18973] = 0x61B4, [18974] = 0x61C6,
+-  [18975] = 0x61C1, [18976] = 0x61CC, [18977] = 0x61BA, [19012] = 0x61BF,
+-  [19013] = 0x61B8, [19014] = 0x618C, [19015] = 0x64D7, [19016] = 0x64D6,
+-  [19017] = 0x64D0, [19018] = 0x64CF, [19019] = 0x64C9, [19020] = 0x64BD,
+-  [19021] = 0x6489, [19022] = 0x64C3, [19023] = 0x64DB, [19024] = 0x64F3,
+-  [19025] = 0x64D9, [19026] = 0x6533, [19027] = 0x657F, [19028] = 0x657C,
+-  [19029] = 0x65A2, [19030] = 0x66C8, [19031] = 0x66BE, [19032] = 0x66C0,
+-  [19033] = 0x66CA, [19034] = 0x66CB, [19035] = 0x66CF, [19036] = 0x66BD,
+-  [19037] = 0x66BB, [19038] = 0x66BA, [19039] = 0x66CC, [19040] = 0x6723,
+-  [19041] = 0x6A34, [19042] = 0x6A66, [19043] = 0x6A49, [19044] = 0x6A67,
+-  [19045] = 0x6A32, [19046] = 0x6A68, [19047] = 0x6A3E, [19048] = 0x6A5D,
+-  [19049] = 0x6A6D, [19050] = 0x6A76, [19051] = 0x6A5B, [19052] = 0x6A51,
+-  [19053] = 0x6A28, [19054] = 0x6A5A, [19055] = 0x6A3B, [19056] = 0x6A3F,
+-  [19057] = 0x6A41, [19058] = 0x6A6A, [19059] = 0x6A64, [19060] = 0x6A50,
+-  [19061] = 0x6A4F, [19062] = 0x6A54, [19063] = 0x6A6F, [19064] = 0x6A69,
+-  [19065] = 0x6A60, [19066] = 0x6A3C, [19067] = 0x6A5E, [19068] = 0x6A56,
+-  [19069] = 0x6A55, [19070] = 0x6A4D, [19071] = 0x6A4E, [19072] = 0x6A46,
+-  [19073] = 0x6B55, [19074] = 0x6B54, [19075] = 0x6B56, [19076] = 0x6BA7,
+-  [19077] = 0x6BAA, [19078] = 0x6BAB, [19079] = 0x6BC8, [19080] = 0x6BC7,
+-  [19081] = 0x6C04, [19082] = 0x6C03, [19083] = 0x6C06, [19084] = 0x6FAD,
+-  [19085] = 0x6FCB, [19086] = 0x6FA3, [19087] = 0x6FC7, [19088] = 0x6FBC,
+-  [19089] = 0x6FCE, [19090] = 0x6FC8, [19091] = 0x6F5E, [19092] = 0x6FC4,
+-  [19093] = 0x6FBD, [19094] = 0x6F9E, [19095] = 0x6FCA, [19096] = 0x6FA8,
+-  [19097] = 0x7004, [19098] = 0x6FA5, [19099] = 0x6FAE, [19100] = 0x6FBA,
+-  [19101] = 0x6FAC, [19102] = 0x6FAA, [19103] = 0x6FCF, [19104] = 0x6FBF,
+-  [19105] = 0x6FB8, [19110] = 0x6FA2, [19111] = 0x6FC9, [19112] = 0x6FAB,
+-  [19113] = 0x6FCD, [19114] = 0x6FAF, [19115] = 0x6FB2, [19116] = 0x6FB0,
+-  [19117] = 0x71C5, [19118] = 0x71C2, [19119] = 0x71BF, [19120] = 0x71B8,
+-  [19121] = 0x71D6, [19122] = 0x71C0, [19123] = 0x71C1, [19124] = 0x71CB,
+-  [19125] = 0x71D4, [19126] = 0x71CA, [19127] = 0x71C7, [19128] = 0x71CF,
+-  [19129] = 0x71BD, [19130] = 0x71D8, [19131] = 0x71BC, [19132] = 0x71C6,
+-  [19133] = 0x71DA, [19134] = 0x71DB, [19135] = 0x729D, [19136] = 0x729E,
+-  [19137] = 0x7369, [19138] = 0x7366, [19139] = 0x7367, [19140] = 0x736C,
+-  [19141] = 0x7365, [19142] = 0x736B, [19143] = 0x736A, [19144] = 0x747F,
+-  [19145] = 0x749A, [19146] = 0x74A0, [19147] = 0x7494, [19148] = 0x7492,
+-  [19149] = 0x7495, [19150] = 0x74A1, [19151] = 0x750B, [19152] = 0x7580,
+-  [19153] = 0x762F, [19154] = 0x762D, [19155] = 0x7631, [19156] = 0x763D,
+-  [19157] = 0x7633, [19158] = 0x763C, [19159] = 0x7635, [19160] = 0x7632,
+-  [19161] = 0x7630, [19162] = 0x76BB, [19163] = 0x76E6, [19164] = 0x779A,
+-  [19165] = 0x779D, [19166] = 0x77A1, [19167] = 0x779C, [19168] = 0x779B,
+-  [19169] = 0x77A2, [19170] = 0x77A3, [19171] = 0x7795, [19172] = 0x7799,
+-  [19207] = 0x7797, [19208] = 0x78DD, [19209] = 0x78E9, [19210] = 0x78E5,
+-  [19211] = 0x78EA, [19212] = 0x78DE, [19213] = 0x78E3, [19214] = 0x78DB,
+-  [19215] = 0x78E1, [19216] = 0x78E2, [19217] = 0x78ED, [19218] = 0x78DF,
+-  [19219] = 0x78E0, [19220] = 0x79A4, [19221] = 0x7A44, [19222] = 0x7A48,
+-  [19223] = 0x7A47, [19224] = 0x7AB6, [19225] = 0x7AB8, [19226] = 0x7AB5,
+-  [19227] = 0x7AB1, [19228] = 0x7AB7, [19229] = 0x7BDE, [19230] = 0x7BE3,
+-  [19231] = 0x7BE7, [19232] = 0x7BDD, [19233] = 0x7BD5, [19234] = 0x7BE5,
+-  [19235] = 0x7BDA, [19236] = 0x7BE8, [19237] = 0x7BF9, [19238] = 0x7BD4,
+-  [19239] = 0x7BEA, [19240] = 0x7BE2, [19241] = 0x7BDC, [19242] = 0x7BEB,
+-  [19243] = 0x7BD8, [19244] = 0x7BDF, [19245] = 0x7CD2, [19246] = 0x7CD4,
+-  [19247] = 0x7CD7, [19248] = 0x7CD0, [19249] = 0x7CD1, [19250] = 0x7E12,
+-  [19251] = 0x7E21, [19252] = 0x7E17, [19253] = 0x7E0C, [19254] = 0x7E1F,
+-  [19255] = 0x7E20, [19256] = 0x7E13, [19257] = 0x7E0E, [19258] = 0x7E1C,
+-  [19259] = 0x7E15, [19260] = 0x7E1A, [19261] = 0x7E22, [19262] = 0x7E0B,
+-  [19263] = 0x7E0F, [19264] = 0x7E16, [19265] = 0x7E0D, [19266] = 0x7E14,
+-  [19267] = 0x7E25, [19268] = 0x7E24, [19269] = 0x7F43, [19270] = 0x7F7B,
+-  [19271] = 0x7F7C, [19272] = 0x7F7A, [19273] = 0x7FB1, [19274] = 0x7FEF,
+-  [19275] = 0x802A, [19276] = 0x8029, [19277] = 0x806C, [19278] = 0x81B1,
+-  [19279] = 0x81A6, [19280] = 0x81AE, [19281] = 0x81B9, [19282] = 0x81B5,
+-  [19283] = 0x81AB, [19284] = 0x81B0, [19285] = 0x81AC, [19286] = 0x81B4,
+-  [19287] = 0x81B2, [19288] = 0x81B7, [19289] = 0x81A7, [19290] = 0x81F2,
+-  [19291] = 0x8255, [19292] = 0x8256, [19293] = 0x8257, [19294] = 0x8556,
+-  [19295] = 0x8545, [19296] = 0x856B, [19297] = 0x854D, [19298] = 0x8553,
+-  [19299] = 0x8561, [19300] = 0x8558, [19305] = 0x8540, [19306] = 0x8546,
+-  [19307] = 0x8564, [19308] = 0x8541, [19309] = 0x8562, [19310] = 0x8544,
+-  [19311] = 0x8551, [19312] = 0x8547, [19313] = 0x8563, [19314] = 0x853E,
+-  [19315] = 0x855B, [19316] = 0x8571, [19317] = 0x854E, [19318] = 0x856E,
+-  [19319] = 0x8575, [19320] = 0x8555, [19321] = 0x8567, [19322] = 0x8560,
+-  [19323] = 0x858C, [19324] = 0x8566, [19325] = 0x855D, [19326] = 0x8554,
+-  [19327] = 0x8565, [19328] = 0x856C, [19329] = 0x8663, [19330] = 0x8665,
+-  [19331] = 0x8664, [19332] = 0x879B, [19333] = 0x878F, [19334] = 0x8797,
+-  [19335] = 0x8793, [19336] = 0x8792, [19337] = 0x8788, [19338] = 0x8781,
+-  [19339] = 0x8796, [19340] = 0x8798, [19341] = 0x8779, [19342] = 0x8787,
+-  [19343] = 0x87A3, [19344] = 0x8785, [19345] = 0x8790, [19346] = 0x8791,
+-  [19347] = 0x879D, [19348] = 0x8784, [19349] = 0x8794, [19350] = 0x879C,
+-  [19351] = 0x879A, [19352] = 0x8789, [19353] = 0x891E, [19354] = 0x8926,
+-  [19355] = 0x8930, [19356] = 0x892D, [19357] = 0x892E, [19358] = 0x8927,
+-  [19359] = 0x8931, [19360] = 0x8922, [19361] = 0x8929, [19362] = 0x8923,
+-  [19363] = 0x892F, [19364] = 0x892C, [19365] = 0x891F, [19366] = 0x89F1,
+-  [19367] = 0x8AE0, [19402] = 0x8AE2, [19403] = 0x8AF2, [19404] = 0x8AF4,
+-  [19405] = 0x8AF5, [19406] = 0x8ADD, [19407] = 0x8B14, [19408] = 0x8AE4,
+-  [19409] = 0x8ADF, [19410] = 0x8AF0, [19411] = 0x8AC8, [19412] = 0x8ADE,
+-  [19413] = 0x8AE1, [19414] = 0x8AE8, [19415] = 0x8AFF, [19416] = 0x8AEF,
+-  [19417] = 0x8AFB, [19418] = 0x8C91, [19419] = 0x8C92, [19420] = 0x8C90,
+-  [19421] = 0x8CF5, [19422] = 0x8CEE, [19423] = 0x8CF1, [19424] = 0x8CF0,
+-  [19425] = 0x8CF3, [19426] = 0x8D6C, [19427] = 0x8D6E, [19428] = 0x8DA5,
+-  [19429] = 0x8DA7, [19430] = 0x8E33, [19431] = 0x8E3E, [19432] = 0x8E38,
+-  [19433] = 0x8E40, [19434] = 0x8E45, [19435] = 0x8E36, [19436] = 0x8E3C,
+-  [19437] = 0x8E3D, [19438] = 0x8E41, [19439] = 0x8E30, [19440] = 0x8E3F,
+-  [19441] = 0x8EBD, [19442] = 0x8F36, [19443] = 0x8F2E, [19444] = 0x8F35,
+-  [19445] = 0x8F32, [19446] = 0x8F39, [19447] = 0x8F37, [19448] = 0x8F34,
+-  [19449] = 0x9076, [19450] = 0x9079, [19451] = 0x907B, [19452] = 0x9086,
+-  [19453] = 0x90FA, [19454] = 0x9133, [19455] = 0x9135, [19456] = 0x9136,
+-  [19457] = 0x9193, [19458] = 0x9190, [19459] = 0x9191, [19460] = 0x918D,
+-  [19461] = 0x918F, [19462] = 0x9327, [19463] = 0x931E, [19464] = 0x9308,
+-  [19465] = 0x931F, [19466] = 0x9306, [19467] = 0x930F, [19468] = 0x937A,
+-  [19469] = 0x9338, [19470] = 0x933C, [19471] = 0x931B, [19472] = 0x9323,
+-  [19473] = 0x9312, [19474] = 0x9301, [19475] = 0x9346, [19476] = 0x932D,
+-  [19477] = 0x930E, [19478] = 0x930D, [19479] = 0x92CB, [19480] = 0x931D,
+-  [19481] = 0x92FA, [19482] = 0x9325, [19483] = 0x9313, [19484] = 0x92F9,
+-  [19485] = 0x92F7, [19486] = 0x9334, [19487] = 0x9302, [19488] = 0x9324,
+-  [19489] = 0x92FF, [19490] = 0x9329, [19491] = 0x9339, [19492] = 0x9335,
+-  [19493] = 0x932A, [19494] = 0x9314, [19495] = 0x930C, [19500] = 0x930B,
+-  [19501] = 0x92FE, [19502] = 0x9309, [19503] = 0x9300, [19504] = 0x92FB,
+-  [19505] = 0x9316, [19506] = 0x95BC, [19507] = 0x95CD, [19508] = 0x95BE,
+-  [19509] = 0x95B9, [19510] = 0x95BA, [19511] = 0x95B6, [19512] = 0x95BF,
+-  [19513] = 0x95B5, [19514] = 0x95BD, [19515] = 0x96A9, [19516] = 0x96D4,
+-  [19517] = 0x970B, [19518] = 0x9712, [19519] = 0x9710, [19520] = 0x9799,
+-  [19521] = 0x9797, [19522] = 0x9794, [19523] = 0x97F0, [19524] = 0x97F8,
+-  [19525] = 0x9835, [19526] = 0x982F, [19527] = 0x9832, [19528] = 0x9924,
+-  [19529] = 0x991F, [19530] = 0x9927, [19531] = 0x9929, [19532] = 0x999E,
+-  [19533] = 0x99EE, [19534] = 0x99EC, [19535] = 0x99E5, [19536] = 0x99E4,
+-  [19537] = 0x99F0, [19538] = 0x99E3, [19539] = 0x99EA, [19540] = 0x99E9,
+-  [19541] = 0x99E7, [19542] = 0x9AB9, [19543] = 0x9ABF, [19544] = 0x9AB4,
+-  [19545] = 0x9ABB, [19546] = 0x9AF6, [19547] = 0x9AFA, [19548] = 0x9AF9,
+-  [19549] = 0x9AF7, [19550] = 0x9B33, [19551] = 0x9B80, [19552] = 0x9B85,
+-  [19553] = 0x9B87, [19554] = 0x9B7C, [19555] = 0x9B7E, [19556] = 0x9B7B,
+-  [19557] = 0x9B82, [19558] = 0x9B93, [19559] = 0x9B92, [19560] = 0x9B90,
+-  [19561] = 0x9B7A, [19562] = 0x9B95, [19597] = 0x9B7D, [19598] = 0x9B88,
+-  [19599] = 0x9D25, [19600] = 0x9D17, [19601] = 0x9D20, [19602] = 0x9D1E,
+-  [19603] = 0x9D14, [19604] = 0x9D29, [19605] = 0x9D1D, [19606] = 0x9D18,
+-  [19607] = 0x9D22, [19608] = 0x9D10, [19609] = 0x9D19, [19610] = 0x9D1F,
+-  [19611] = 0x9E88, [19612] = 0x9E86, [19613] = 0x9E87, [19614] = 0x9EAE,
+-  [19615] = 0x9EAD, [19616] = 0x9ED5, [19617] = 0x9ED6, [19618] = 0x9EFA,
+-  [19619] = 0x9F12, [19620] = 0x9F3D, [19621] = 0x5126, [19622] = 0x5125,
+-  [19623] = 0x5122, [19624] = 0x5124, [19625] = 0x5120, [19626] = 0x5129,
+-  [19627] = 0x52F4, [19628] = 0x5693, [19629] = 0x568C, [19630] = 0x568D,
+-  [19631] = 0x5686, [19632] = 0x5684, [19633] = 0x5683, [19634] = 0x567E,
+-  [19635] = 0x5682, [19636] = 0x567F, [19637] = 0x5681, [19638] = 0x58D6,
+-  [19639] = 0x58D4, [19640] = 0x58CF, [19641] = 0x58D2, [19642] = 0x5B2D,
+-  [19643] = 0x5B25, [19644] = 0x5B32, [19645] = 0x5B23, [19646] = 0x5B2C,
+-  [19647] = 0x5B27, [19648] = 0x5B26, [19649] = 0x5B2F, [19650] = 0x5B2E,
+-  [19651] = 0x5B7B, [19652] = 0x5BF1, [19653] = 0x5BF2, [19654] = 0x5DB7,
+-  [19655] = 0x5E6C, [19656] = 0x5E6A, [19657] = 0x5FBE, [19658] = 0x5FBB,
+-  [19659] = 0x61C3, [19660] = 0x61B5, [19661] = 0x61BC, [19662] = 0x61E7,
+-  [19663] = 0x61E0, [19664] = 0x61E5, [19665] = 0x61E4, [19666] = 0x61E8,
+-  [19667] = 0x61DE, [19668] = 0x64EF, [19669] = 0x64E9, [19670] = 0x64E3,
+-  [19671] = 0x64EB, [19672] = 0x64E4, [19673] = 0x64E8, [19674] = 0x6581,
+-  [19675] = 0x6580, [19676] = 0x65B6, [19677] = 0x65DA, [19678] = 0x66D2,
+-  [19679] = 0x6A8D, [19680] = 0x6A96, [19681] = 0x6A81, [19682] = 0x6AA5,
+-  [19683] = 0x6A89, [19684] = 0x6A9F, [19685] = 0x6A9B, [19686] = 0x6AA1,
+-  [19687] = 0x6A9E, [19688] = 0x6A87, [19689] = 0x6A93, [19690] = 0x6A8E,
+-  [19695] = 0x6A95, [19696] = 0x6A83, [19697] = 0x6AA8, [19698] = 0x6AA4,
+-  [19699] = 0x6A91, [19700] = 0x6A7F, [19701] = 0x6AA6, [19702] = 0x6A9A,
+-  [19703] = 0x6A85, [19704] = 0x6A8C, [19705] = 0x6A92, [19706] = 0x6B5B,
+-  [19707] = 0x6BAD, [19708] = 0x6C09, [19709] = 0x6FCC, [19710] = 0x6FA9,
+-  [19711] = 0x6FF4, [19712] = 0x6FD4, [19713] = 0x6FE3, [19714] = 0x6FDC,
+-  [19715] = 0x6FED, [19716] = 0x6FE7, [19717] = 0x6FE6, [19718] = 0x6FDE,
+-  [19719] = 0x6FF2, [19720] = 0x6FDD, [19721] = 0x6FE2, [19722] = 0x6FE8,
+-  [19723] = 0x71E1, [19724] = 0x71F1, [19725] = 0x71E8, [19726] = 0x71F2,
+-  [19727] = 0x71E4, [19728] = 0x71F0, [19729] = 0x71E2, [19730] = 0x7373,
+-  [19731] = 0x736E, [19732] = 0x736F, [19733] = 0x7497, [19734] = 0x74B2,
+-  [19735] = 0x74AB, [19736] = 0x7490, [19737] = 0x74AA, [19738] = 0x74AD,
+-  [19739] = 0x74B1, [19740] = 0x74A5, [19741] = 0x74AF, [19742] = 0x7510,
+-  [19743] = 0x7511, [19744] = 0x7512, [19745] = 0x750F, [19746] = 0x7584,
+-  [19747] = 0x7643, [19748] = 0x7648, [19749] = 0x7649, [19750] = 0x7647,
+-  [19751] = 0x76A4, [19752] = 0x76E9, [19753] = 0x77B5, [19754] = 0x77AB,
+-  [19755] = 0x77B2, [19756] = 0x77B7, [19757] = 0x77B6, [19792] = 0x77B4,
+-  [19793] = 0x77B1, [19794] = 0x77A8, [19795] = 0x77F0, [19796] = 0x78F3,
+-  [19797] = 0x78FD, [19798] = 0x7902, [19799] = 0x78FB, [19800] = 0x78FC,
+-  [19801] = 0x78F2, [19802] = 0x7905, [19803] = 0x78F9, [19804] = 0x78FE,
+-  [19805] = 0x7904, [19806] = 0x79AB, [19807] = 0x79A8, [19808] = 0x7A5C,
+-  [19809] = 0x7A5B, [19810] = 0x7A56, [19811] = 0x7A58, [19812] = 0x7A54,
+-  [19813] = 0x7A5A, [19814] = 0x7ABE, [19815] = 0x7AC0, [19816] = 0x7AC1,
+-  [19817] = 0x7C05, [19818] = 0x7C0F, [19819] = 0x7BF2, [19820] = 0x7C00,
+-  [19821] = 0x7BFF, [19822] = 0x7BFB, [19823] = 0x7C0E, [19824] = 0x7BF4,
+-  [19825] = 0x7C0B, [19826] = 0x7BF3, [19827] = 0x7C02, [19828] = 0x7C09,
+-  [19829] = 0x7C03, [19830] = 0x7C01, [19831] = 0x7BF8, [19832] = 0x7BFD,
+-  [19833] = 0x7C06, [19834] = 0x7BF0, [19835] = 0x7BF1, [19836] = 0x7C10,
+-  [19837] = 0x7C0A, [19838] = 0x7CE8, [19839] = 0x7E2D, [19840] = 0x7E3C,
+-  [19841] = 0x7E42, [19842] = 0x7E33, [19843] = 0x9848, [19844] = 0x7E38,
+-  [19845] = 0x7E2A, [19846] = 0x7E49, [19847] = 0x7E40, [19848] = 0x7E47,
+-  [19849] = 0x7E29, [19850] = 0x7E4C, [19851] = 0x7E30, [19852] = 0x7E3B,
+-  [19853] = 0x7E36, [19854] = 0x7E44, [19855] = 0x7E3A, [19856] = 0x7F45,
+-  [19857] = 0x7F7F, [19858] = 0x7F7E, [19859] = 0x7F7D, [19860] = 0x7FF4,
+-  [19861] = 0x7FF2, [19862] = 0x802C, [19863] = 0x81BB, [19864] = 0x81C4,
+-  [19865] = 0x81CC, [19866] = 0x81CA, [19867] = 0x81C5, [19868] = 0x81C7,
+-  [19869] = 0x81BC, [19870] = 0x81E9, [19871] = 0x825B, [19872] = 0x825A,
+-  [19873] = 0x825C, [19874] = 0x8583, [19875] = 0x8580, [19876] = 0x858F,
+-  [19877] = 0x85A7, [19878] = 0x8595, [19879] = 0x85A0, [19880] = 0x858B,
+-  [19881] = 0x85A3, [19882] = 0x857B, [19883] = 0x85A4, [19884] = 0x859A,
+-  [19885] = 0x859E, [19890] = 0x8577, [19891] = 0x857C, [19892] = 0x8589,
+-  [19893] = 0x85A1, [19894] = 0x857A, [19895] = 0x8578, [19896] = 0x8557,
+-  [19897] = 0x858E, [19898] = 0x8596, [19899] = 0x8586, [19900] = 0x858D,
+-  [19901] = 0x8599, [19902] = 0x859D, [19903] = 0x8581, [19904] = 0x85A2,
+-  [19905] = 0x8582, [19906] = 0x8588, [19907] = 0x8585, [19908] = 0x8579,
+-  [19909] = 0x8576, [19910] = 0x8598, [19911] = 0x8590, [19912] = 0x859F,
+-  [19913] = 0x8668, [19914] = 0x87BE, [19915] = 0x87AA, [19916] = 0x87AD,
+-  [19917] = 0x87C5, [19918] = 0x87B0, [19919] = 0x87AC, [19920] = 0x87B9,
+-  [19921] = 0x87B5, [19922] = 0x87BC, [19923] = 0x87AE, [19924] = 0x87C9,
+-  [19925] = 0x87C3, [19926] = 0x87C2, [19927] = 0x87CC, [19928] = 0x87B7,
+-  [19929] = 0x87AF, [19930] = 0x87C4, [19931] = 0x87CA, [19932] = 0x87B4,
+-  [19933] = 0x87B6, [19934] = 0x87BF, [19935] = 0x87B8, [19936] = 0x87BD,
+-  [19937] = 0x87DE, [19938] = 0x87B2, [19939] = 0x8935, [19940] = 0x8933,
+-  [19941] = 0x893C, [19942] = 0x893E, [19943] = 0x8941, [19944] = 0x8952,
+-  [19945] = 0x8937, [19946] = 0x8942, [19947] = 0x89AD, [19948] = 0x89AF,
+-  [19949] = 0x89AE, [19950] = 0x89F2, [19951] = 0x89F3, [19952] = 0x8B1E,
+-  [19987] = 0x8B18, [19988] = 0x8B16, [19989] = 0x8B11, [19990] = 0x8B05,
+-  [19991] = 0x8B0B, [19992] = 0x8B22, [19993] = 0x8B0F, [19994] = 0x8B12,
+-  [19995] = 0x8B15, [19996] = 0x8B07, [19997] = 0x8B0D, [19998] = 0x8B08,
+-  [19999] = 0x8B06, [20000] = 0x8B1C, [20001] = 0x8B13, [20002] = 0x8B1A,
+-  [20003] = 0x8C4F, [20004] = 0x8C70, [20005] = 0x8C72, [20006] = 0x8C71,
+-  [20007] = 0x8C6F, [20008] = 0x8C95, [20009] = 0x8C94, [20010] = 0x8CF9,
+-  [20011] = 0x8D6F, [20012] = 0x8E4E, [20013] = 0x8E4D, [20014] = 0x8E53,
+-  [20015] = 0x8E50, [20016] = 0x8E4C, [20017] = 0x8E47, [20018] = 0x8F43,
+-  [20019] = 0x8F40, [20020] = 0x9085, [20021] = 0x907E, [20022] = 0x9138,
+-  [20023] = 0x919A, [20024] = 0x91A2, [20025] = 0x919B, [20026] = 0x9199,
+-  [20027] = 0x919F, [20028] = 0x91A1, [20029] = 0x919D, [20030] = 0x91A0,
+-  [20031] = 0x93A1, [20032] = 0x9383, [20033] = 0x93AF, [20034] = 0x9364,
+-  [20035] = 0x9356, [20036] = 0x9347, [20037] = 0x937C, [20038] = 0x9358,
+-  [20039] = 0x935C, [20040] = 0x9376, [20041] = 0x9349, [20042] = 0x9350,
+-  [20043] = 0x9351, [20044] = 0x9360, [20045] = 0x936D, [20046] = 0x938F,
+-  [20047] = 0x934C, [20048] = 0x936A, [20049] = 0x9379, [20050] = 0x9357,
+-  [20051] = 0x9355, [20052] = 0x9352, [20053] = 0x934F, [20054] = 0x9371,
+-  [20055] = 0x9377, [20056] = 0x937B, [20057] = 0x9361, [20058] = 0x935E,
+-  [20059] = 0x9363, [20060] = 0x9367, [20061] = 0x9380, [20062] = 0x934E,
+-  [20063] = 0x9359, [20064] = 0x95C7, [20065] = 0x95C0, [20066] = 0x95C9,
+-  [20067] = 0x95C3, [20068] = 0x95C5, [20069] = 0x95B7, [20070] = 0x96AE,
+-  [20071] = 0x96B0, [20072] = 0x96AC, [20073] = 0x9720, [20074] = 0x971F,
+-  [20075] = 0x9718, [20076] = 0x971D, [20077] = 0x9719, [20078] = 0x979A,
+-  [20079] = 0x97A1, [20080] = 0x979C, [20085] = 0x979E, [20086] = 0x979D,
+-  [20087] = 0x97D5, [20088] = 0x97D4, [20089] = 0x97F1, [20090] = 0x9841,
+-  [20091] = 0x9844, [20092] = 0x984A, [20093] = 0x9849, [20094] = 0x9845,
+-  [20095] = 0x9843, [20096] = 0x9925, [20097] = 0x992B, [20098] = 0x992C,
+-  [20099] = 0x992A, [20100] = 0x9933, [20101] = 0x9932, [20102] = 0x992F,
+-  [20103] = 0x992D, [20104] = 0x9931, [20105] = 0x9930, [20106] = 0x9998,
+-  [20107] = 0x99A3, [20108] = 0x99A1, [20109] = 0x9A02, [20110] = 0x99FA,
+-  [20111] = 0x99F4, [20112] = 0x99F7, [20113] = 0x99F9, [20114] = 0x99F8,
+-  [20115] = 0x99F6, [20116] = 0x99FB, [20117] = 0x99FD, [20118] = 0x99FE,
+-  [20119] = 0x99FC, [20120] = 0x9A03, [20121] = 0x9ABE, [20122] = 0x9AFE,
+-  [20123] = 0x9AFD, [20124] = 0x9B01, [20125] = 0x9AFC, [20126] = 0x9B48,
+-  [20127] = 0x9B9A, [20128] = 0x9BA8, [20129] = 0x9B9E, [20130] = 0x9B9B,
+-  [20131] = 0x9BA6, [20132] = 0x9BA1, [20133] = 0x9BA5, [20134] = 0x9BA4,
+-  [20135] = 0x9B86, [20136] = 0x9BA2, [20137] = 0x9BA0, [20138] = 0x9BAF,
+-  [20139] = 0x9D33, [20140] = 0x9D41, [20141] = 0x9D67, [20142] = 0x9D36,
+-  [20143] = 0x9D2E, [20144] = 0x9D2F, [20145] = 0x9D31, [20146] = 0x9D38,
+-  [20147] = 0x9D30, [20182] = 0x9D45, [20183] = 0x9D42, [20184] = 0x9D43,
+-  [20185] = 0x9D3E, [20186] = 0x9D37, [20187] = 0x9D40, [20188] = 0x9D3D,
+-  [20189] = 0x7FF5, [20190] = 0x9D2D, [20191] = 0x9E8A, [20192] = 0x9E89,
+-  [20193] = 0x9E8D, [20194] = 0x9EB0, [20195] = 0x9EC8, [20196] = 0x9EDA,
+-  [20197] = 0x9EFB, [20198] = 0x9EFF, [20199] = 0x9F24, [20200] = 0x9F23,
+-  [20201] = 0x9F22, [20202] = 0x9F54, [20203] = 0x9FA0, [20204] = 0x5131,
+-  [20205] = 0x512D, [20206] = 0x512E, [20207] = 0x5698, [20208] = 0x569C,
+-  [20209] = 0x5697, [20210] = 0x569A, [20211] = 0x569D, [20212] = 0x5699,
+-  [20213] = 0x5970, [20214] = 0x5B3C, [20215] = 0x5C69, [20216] = 0x5C6A,
+-  [20217] = 0x5DC0, [20218] = 0x5E6D, [20219] = 0x5E6E, [20220] = 0x61D8,
+-  [20221] = 0x61DF, [20222] = 0x61ED, [20223] = 0x61EE, [20224] = 0x61F1,
+-  [20225] = 0x61EA, [20226] = 0x61F0, [20227] = 0x61EB, [20228] = 0x61D6,
+-  [20229] = 0x61E9, [20230] = 0x64FF, [20231] = 0x6504, [20232] = 0x64FD,
+-  [20233] = 0x64F8, [20234] = 0x6501, [20235] = 0x6503, [20236] = 0x64FC,
+-  [20237] = 0x6594, [20238] = 0x65DB, [20239] = 0x66DA, [20240] = 0x66DB,
+-  [20241] = 0x66D8, [20242] = 0x6AC5, [20243] = 0x6AB9, [20244] = 0x6ABD,
+-  [20245] = 0x6AE1, [20246] = 0x6AC6, [20247] = 0x6ABA, [20248] = 0x6AB6,
+-  [20249] = 0x6AB7, [20250] = 0x6AC7, [20251] = 0x6AB4, [20252] = 0x6AAD,
+-  [20253] = 0x6B5E, [20254] = 0x6BC9, [20255] = 0x6C0B, [20256] = 0x7007,
+-  [20257] = 0x700C, [20258] = 0x700D, [20259] = 0x7001, [20260] = 0x7005,
+-  [20261] = 0x7014, [20262] = 0x700E, [20263] = 0x6FFF, [20264] = 0x7000,
+-  [20265] = 0x6FFB, [20266] = 0x7026, [20267] = 0x6FFC, [20268] = 0x6FF7,
+-  [20269] = 0x700A, [20270] = 0x7201, [20271] = 0x71FF, [20272] = 0x71F9,
+-  [20273] = 0x7203, [20274] = 0x71FD, [20275] = 0x7376, [20280] = 0x74B8,
+-  [20281] = 0x74C0, [20282] = 0x74B5, [20283] = 0x74C1, [20284] = 0x74BE,
+-  [20285] = 0x74B6, [20286] = 0x74BB, [20287] = 0x74C2, [20288] = 0x7514,
+-  [20289] = 0x7513, [20290] = 0x765C, [20291] = 0x7664, [20292] = 0x7659,
+-  [20293] = 0x7650, [20294] = 0x7653, [20295] = 0x7657, [20296] = 0x765A,
+-  [20297] = 0x76A6, [20298] = 0x76BD, [20299] = 0x76EC, [20300] = 0x77C2,
+-  [20301] = 0x77BA, [20302] = 0x78FF, [20303] = 0x790C, [20304] = 0x7913,
+-  [20305] = 0x7914, [20306] = 0x7909, [20307] = 0x7910, [20308] = 0x7912,
+-  [20309] = 0x7911, [20310] = 0x79AD, [20311] = 0x79AC, [20312] = 0x7A5F,
+-  [20313] = 0x7C1C, [20314] = 0x7C29, [20315] = 0x7C19, [20316] = 0x7C20,
+-  [20317] = 0x7C1F, [20318] = 0x7C2D, [20319] = 0x7C1D, [20320] = 0x7C26,
+-  [20321] = 0x7C28, [20322] = 0x7C22, [20323] = 0x7C25, [20324] = 0x7C30,
+-  [20325] = 0x7E5C, [20326] = 0x7E50, [20327] = 0x7E56, [20328] = 0x7E63,
+-  [20329] = 0x7E58, [20330] = 0x7E62, [20331] = 0x7E5F, [20332] = 0x7E51,
+-  [20333] = 0x7E60, [20334] = 0x7E57, [20335] = 0x7E53, [20336] = 0x7FB5,
+-  [20337] = 0x7FB3, [20338] = 0x7FF7, [20339] = 0x7FF8, [20340] = 0x8075,
+-  [20341] = 0x81D1, [20342] = 0x81D2, [20377] = 0x81D0, [20378] = 0x825F,
+-  [20379] = 0x825E, [20380] = 0x85B4, [20381] = 0x85C6, [20382] = 0x85C0,
+-  [20383] = 0x85C3, [20384] = 0x85C2, [20385] = 0x85B3, [20386] = 0x85B5,
+-  [20387] = 0x85BD, [20388] = 0x85C7, [20389] = 0x85C4, [20390] = 0x85BF,
+-  [20391] = 0x85CB, [20392] = 0x85CE, [20393] = 0x85C8, [20394] = 0x85C5,
+-  [20395] = 0x85B1, [20396] = 0x85B6, [20397] = 0x85D2, [20398] = 0x8624,
+-  [20399] = 0x85B8, [20400] = 0x85B7, [20401] = 0x85BE, [20402] = 0x8669,
+-  [20403] = 0x87E7, [20404] = 0x87E6, [20405] = 0x87E2, [20406] = 0x87DB,
+-  [20407] = 0x87EB, [20408] = 0x87EA, [20409] = 0x87E5, [20410] = 0x87DF,
+-  [20411] = 0x87F3, [20412] = 0x87E4, [20413] = 0x87D4, [20414] = 0x87DC,
+-  [20415] = 0x87D3, [20416] = 0x87ED, [20417] = 0x87D8, [20418] = 0x87E3,
+-  [20419] = 0x87A4, [20420] = 0x87D7, [20421] = 0x87D9, [20422] = 0x8801,
+-  [20423] = 0x87F4, [20424] = 0x87E8, [20425] = 0x87DD, [20426] = 0x8953,
+-  [20427] = 0x894B, [20428] = 0x894F, [20429] = 0x894C, [20430] = 0x8946,
+-  [20431] = 0x8950, [20432] = 0x8951, [20433] = 0x8949, [20434] = 0x8B2A,
+-  [20435] = 0x8B27, [20436] = 0x8B23, [20437] = 0x8B33, [20438] = 0x8B30,
+-  [20439] = 0x8B35, [20440] = 0x8B47, [20441] = 0x8B2F, [20442] = 0x8B3C,
+-  [20443] = 0x8B3E, [20444] = 0x8B31, [20445] = 0x8B25, [20446] = 0x8B37,
+-  [20447] = 0x8B26, [20448] = 0x8B36, [20449] = 0x8B2E, [20450] = 0x8B24,
+-  [20451] = 0x8B3B, [20452] = 0x8B3D, [20453] = 0x8B3A, [20454] = 0x8C42,
+-  [20455] = 0x8C75, [20456] = 0x8C99, [20457] = 0x8C98, [20458] = 0x8C97,
+-  [20459] = 0x8CFE, [20460] = 0x8D04, [20461] = 0x8D02, [20462] = 0x8D00,
+-  [20463] = 0x8E5C, [20464] = 0x8E62, [20465] = 0x8E60, [20466] = 0x8E57,
+-  [20467] = 0x8E56, [20468] = 0x8E5E, [20469] = 0x8E65, [20470] = 0x8E67,
+-  [20475] = 0x8E5B, [20476] = 0x8E5A, [20477] = 0x8E61, [20478] = 0x8E5D,
+-  [20479] = 0x8E69, [20480] = 0x8E54, [20481] = 0x8F46, [20482] = 0x8F47,
+-  [20483] = 0x8F48, [20484] = 0x8F4B, [20485] = 0x9128, [20486] = 0x913A,
+-  [20487] = 0x913B, [20488] = 0x913E, [20489] = 0x91A8, [20490] = 0x91A5,
+-  [20491] = 0x91A7, [20492] = 0x91AF, [20493] = 0x91AA, [20494] = 0x93B5,
+-  [20495] = 0x938C, [20496] = 0x9392, [20497] = 0x93B7, [20498] = 0x939B,
+-  [20499] = 0x939D, [20500] = 0x9389, [20501] = 0x93A7, [20502] = 0x938E,
+-  [20503] = 0x93AA, [20504] = 0x939E, [20505] = 0x93A6, [20506] = 0x9395,
+-  [20507] = 0x9388, [20508] = 0x9399, [20509] = 0x939F, [20510] = 0x938D,
+-  [20511] = 0x93B1, [20512] = 0x9391, [20513] = 0x93B2, [20514] = 0x93A4,
+-  [20515] = 0x93A8, [20516] = 0x93B4, [20517] = 0x93A3, [20518] = 0x93A5,
+-  [20519] = 0x95D2, [20520] = 0x95D3, [20521] = 0x95D1, [20522] = 0x96B3,
+-  [20523] = 0x96D7, [20524] = 0x96DA, [20525] = 0x5DC2, [20526] = 0x96DF,
+-  [20527] = 0x96D8, [20528] = 0x96DD, [20529] = 0x9723, [20530] = 0x9722,
+-  [20531] = 0x9725, [20532] = 0x97AC, [20533] = 0x97AE, [20534] = 0x97A8,
+-  [20535] = 0x97AB, [20536] = 0x97A4, [20537] = 0x97AA, [20572] = 0x97A2,
+-  [20573] = 0x97A5, [20574] = 0x97D7, [20575] = 0x97D9, [20576] = 0x97D6,
+-  [20577] = 0x97D8, [20578] = 0x97FA, [20579] = 0x9850, [20580] = 0x9851,
+-  [20581] = 0x9852, [20582] = 0x98B8, [20583] = 0x9941, [20584] = 0x993C,
+-  [20585] = 0x993A, [20586] = 0x9A0F, [20587] = 0x9A0B, [20588] = 0x9A09,
+-  [20589] = 0x9A0D, [20590] = 0x9A04, [20591] = 0x9A11, [20592] = 0x9A0A,
+-  [20593] = 0x9A05, [20594] = 0x9A07, [20595] = 0x9A06, [20596] = 0x9AC0,
+-  [20597] = 0x9ADC, [20598] = 0x9B08, [20599] = 0x9B04, [20600] = 0x9B05,
+-  [20601] = 0x9B29, [20602] = 0x9B35, [20603] = 0x9B4A, [20604] = 0x9B4C,
+-  [20605] = 0x9B4B, [20606] = 0x9BC7, [20607] = 0x9BC6, [20608] = 0x9BC3,
+-  [20609] = 0x9BBF, [20610] = 0x9BC1, [20611] = 0x9BB5, [20612] = 0x9BB8,
+-  [20613] = 0x9BD3, [20614] = 0x9BB6, [20615] = 0x9BC4, [20616] = 0x9BB9,
+-  [20617] = 0x9BBD, [20618] = 0x9D5C, [20619] = 0x9D53, [20620] = 0x9D4F,
+-  [20621] = 0x9D4A, [20622] = 0x9D5B, [20623] = 0x9D4B, [20624] = 0x9D59,
+-  [20625] = 0x9D56, [20626] = 0x9D4C, [20627] = 0x9D57, [20628] = 0x9D52,
+-  [20629] = 0x9D54, [20630] = 0x9D5F, [20631] = 0x9D58, [20632] = 0x9D5A,
+-  [20633] = 0x9E8E, [20634] = 0x9E8C, [20635] = 0x9EDF, [20636] = 0x9F01,
+-  [20637] = 0x9F00, [20638] = 0x9F16, [20639] = 0x9F25, [20640] = 0x9F2B,
+-  [20641] = 0x9F2A, [20642] = 0x9F29, [20643] = 0x9F28, [20644] = 0x9F4C,
+-  [20645] = 0x9F55, [20646] = 0x5134, [20647] = 0x5135, [20648] = 0x5296,
+-  [20649] = 0x52F7, [20650] = 0x53B4, [20651] = 0x56AB, [20652] = 0x56AD,
+-  [20653] = 0x56A6, [20654] = 0x56A7, [20655] = 0x56AA, [20656] = 0x56AC,
+-  [20657] = 0x58DA, [20658] = 0x58DD, [20659] = 0x58DB, [20660] = 0x5912,
+-  [20661] = 0x5B3D, [20662] = 0x5B3E, [20663] = 0x5B3F, [20664] = 0x5DC3,
+-  [20665] = 0x5E70, [20670] = 0x5FBF, [20671] = 0x61FB, [20672] = 0x6507,
+-  [20673] = 0x6510, [20674] = 0x650D, [20675] = 0x6509, [20676] = 0x650C,
+-  [20677] = 0x650E, [20678] = 0x6584, [20679] = 0x65DE, [20680] = 0x65DD,
+-  [20681] = 0x66DE, [20682] = 0x6AE7, [20683] = 0x6AE0, [20684] = 0x6ACC,
+-  [20685] = 0x6AD1, [20686] = 0x6AD9, [20687] = 0x6ACB, [20688] = 0x6ADF,
+-  [20689] = 0x6ADC, [20690] = 0x6AD0, [20691] = 0x6AEB, [20692] = 0x6ACF,
+-  [20693] = 0x6ACD, [20694] = 0x6ADE, [20695] = 0x6B60, [20696] = 0x6BB0,
+-  [20697] = 0x6C0C, [20698] = 0x7019, [20699] = 0x7027, [20700] = 0x7020,
+-  [20701] = 0x7016, [20702] = 0x702B, [20703] = 0x7021, [20704] = 0x7022,
+-  [20705] = 0x7023, [20706] = 0x7029, [20707] = 0x7017, [20708] = 0x7024,
+-  [20709] = 0x701C, [20710] = 0x702A, [20711] = 0x720C, [20712] = 0x720A,
+-  [20713] = 0x7207, [20714] = 0x7202, [20715] = 0x7205, [20716] = 0x72A5,
+-  [20717] = 0x72A6, [20718] = 0x72A4, [20719] = 0x72A3, [20720] = 0x72A1,
+-  [20721] = 0x74CB, [20722] = 0x74C5, [20723] = 0x74B7, [20724] = 0x74C3,
+-  [20725] = 0x7516, [20726] = 0x7660, [20727] = 0x77C9, [20728] = 0x77CA,
+-  [20729] = 0x77C4, [20730] = 0x77F1, [20731] = 0x791D, [20732] = 0x791B,
+-  [20767] = 0x7921, [20768] = 0x791C, [20769] = 0x7917, [20770] = 0x791E,
+-  [20771] = 0x79B0, [20772] = 0x7A67, [20773] = 0x7A68, [20774] = 0x7C33,
+-  [20775] = 0x7C3C, [20776] = 0x7C39, [20777] = 0x7C2C, [20778] = 0x7C3B,
+-  [20779] = 0x7CEC, [20780] = 0x7CEA, [20781] = 0x7E76, [20782] = 0x7E75,
+-  [20783] = 0x7E78, [20784] = 0x7E70, [20785] = 0x7E77, [20786] = 0x7E6F,
+-  [20787] = 0x7E7A, [20788] = 0x7E72, [20789] = 0x7E74, [20790] = 0x7E68,
+-  [20791] = 0x7F4B, [20792] = 0x7F4A, [20793] = 0x7F83, [20794] = 0x7F86,
+-  [20795] = 0x7FB7, [20796] = 0x7FFD, [20797] = 0x7FFE, [20798] = 0x8078,
+-  [20799] = 0x81D7, [20800] = 0x81D5, [20801] = 0x8264, [20802] = 0x8261,
+-  [20803] = 0x8263, [20804] = 0x85EB, [20805] = 0x85F1, [20806] = 0x85ED,
+-  [20807] = 0x85D9, [20808] = 0x85E1, [20809] = 0x85E8, [20810] = 0x85DA,
+-  [20811] = 0x85D7, [20812] = 0x85EC, [20813] = 0x85F2, [20814] = 0x85F8,
+-  [20815] = 0x85D8, [20816] = 0x85DF, [20817] = 0x85E3, [20818] = 0x85DC,
+-  [20819] = 0x85D1, [20820] = 0x85F0, [20821] = 0x85E6, [20822] = 0x85EF,
+-  [20823] = 0x85DE, [20824] = 0x85E2, [20825] = 0x8800, [20826] = 0x87FA,
+-  [20827] = 0x8803, [20828] = 0x87F6, [20829] = 0x87F7, [20830] = 0x8809,
+-  [20831] = 0x880C, [20832] = 0x880B, [20833] = 0x8806, [20834] = 0x87FC,
+-  [20835] = 0x8808, [20836] = 0x87FF, [20837] = 0x880A, [20838] = 0x8802,
+-  [20839] = 0x8962, [20840] = 0x895A, [20841] = 0x895B, [20842] = 0x8957,
+-  [20843] = 0x8961, [20844] = 0x895C, [20845] = 0x8958, [20846] = 0x895D,
+-  [20847] = 0x8959, [20848] = 0x8988, [20849] = 0x89B7, [20850] = 0x89B6,
+-  [20851] = 0x89F6, [20852] = 0x8B50, [20853] = 0x8B48, [20854] = 0x8B4A,
+-  [20855] = 0x8B40, [20856] = 0x8B53, [20857] = 0x8B56, [20858] = 0x8B54,
+-  [20859] = 0x8B4B, [20860] = 0x8B55, [20865] = 0x8B51, [20866] = 0x8B42,
+-  [20867] = 0x8B52, [20868] = 0x8B57, [20869] = 0x8C43, [20870] = 0x8C77,
+-  [20871] = 0x8C76, [20872] = 0x8C9A, [20873] = 0x8D06, [20874] = 0x8D07,
+-  [20875] = 0x8D09, [20876] = 0x8DAC, [20877] = 0x8DAA, [20878] = 0x8DAD,
+-  [20879] = 0x8DAB, [20880] = 0x8E6D, [20881] = 0x8E78, [20882] = 0x8E73,
+-  [20883] = 0x8E6A, [20884] = 0x8E6F, [20885] = 0x8E7B, [20886] = 0x8EC2,
+-  [20887] = 0x8F52, [20888] = 0x8F51, [20889] = 0x8F4F, [20890] = 0x8F50,
+-  [20891] = 0x8F53, [20892] = 0x8FB4, [20893] = 0x9140, [20894] = 0x913F,
+-  [20895] = 0x91B0, [20896] = 0x91AD, [20897] = 0x93DE, [20898] = 0x93C7,
+-  [20899] = 0x93CF, [20900] = 0x93C2, [20901] = 0x93DA, [20902] = 0x93D0,
+-  [20903] = 0x93F9, [20904] = 0x93EC, [20905] = 0x93CC, [20906] = 0x93D9,
+-  [20907] = 0x93A9, [20908] = 0x93E6, [20909] = 0x93CA, [20910] = 0x93D4,
+-  [20911] = 0x93EE, [20912] = 0x93E3, [20913] = 0x93D5, [20914] = 0x93C4,
+-  [20915] = 0x93CE, [20916] = 0x93C0, [20917] = 0x93D2, [20918] = 0x93E7,
+-  [20919] = 0x957D, [20920] = 0x95DA, [20921] = 0x95DB, [20922] = 0x96E1,
+-  [20923] = 0x9729, [20924] = 0x972B, [20925] = 0x972C, [20926] = 0x9728,
+-  [20927] = 0x9726, [20962] = 0x97B3, [20963] = 0x97B7, [20964] = 0x97B6,
+-  [20965] = 0x97DD, [20966] = 0x97DE, [20967] = 0x97DF, [20968] = 0x985C,
+-  [20969] = 0x9859, [20970] = 0x985D, [20971] = 0x9857, [20972] = 0x98BF,
+-  [20973] = 0x98BD, [20974] = 0x98BB, [20975] = 0x98BE, [20976] = 0x9948,
+-  [20977] = 0x9947, [20978] = 0x9943, [20979] = 0x99A6, [20980] = 0x99A7,
+-  [20981] = 0x9A1A, [20982] = 0x9A15, [20983] = 0x9A25, [20984] = 0x9A1D,
+-  [20985] = 0x9A24, [20986] = 0x9A1B, [20987] = 0x9A22, [20988] = 0x9A20,
+-  [20989] = 0x9A27, [20990] = 0x9A23, [20991] = 0x9A1E, [20992] = 0x9A1C,
+-  [20993] = 0x9A14, [20994] = 0x9AC2, [20995] = 0x9B0B, [20996] = 0x9B0A,
+-  [20997] = 0x9B0E, [20998] = 0x9B0C, [20999] = 0x9B37, [21000] = 0x9BEA,
+-  [21001] = 0x9BEB, [21002] = 0x9BE0, [21003] = 0x9BDE, [21004] = 0x9BE4,
+-  [21005] = 0x9BE6, [21006] = 0x9BE2, [21007] = 0x9BF0, [21008] = 0x9BD4,
+-  [21009] = 0x9BD7, [21010] = 0x9BEC, [21011] = 0x9BDC, [21012] = 0x9BD9,
+-  [21013] = 0x9BE5, [21014] = 0x9BD5, [21015] = 0x9BE1, [21016] = 0x9BDA,
+-  [21017] = 0x9D77, [21018] = 0x9D81, [21019] = 0x9D8A, [21020] = 0x9D84,
+-  [21021] = 0x9D88, [21022] = 0x9D71, [21023] = 0x9D80, [21024] = 0x9D78,
+-  [21025] = 0x9D86, [21026] = 0x9D8B, [21027] = 0x9D8C, [21028] = 0x9D7D,
+-  [21029] = 0x9D6B, [21030] = 0x9D74, [21031] = 0x9D75, [21032] = 0x9D70,
+-  [21033] = 0x9D69, [21034] = 0x9D85, [21035] = 0x9D73, [21036] = 0x9D7B,
+-  [21037] = 0x9D82, [21038] = 0x9D6F, [21039] = 0x9D79, [21040] = 0x9D7F,
+-  [21041] = 0x9D87, [21042] = 0x9D68, [21043] = 0x9E94, [21044] = 0x9E91,
+-  [21045] = 0x9EC0, [21046] = 0x9EFC, [21047] = 0x9F2D, [21048] = 0x9F40,
+-  [21049] = 0x9F41, [21050] = 0x9F4D, [21051] = 0x9F56, [21052] = 0x9F57,
+-  [21053] = 0x9F58, [21054] = 0x5337, [21055] = 0x56B2, [21060] = 0x56B5,
+-  [21061] = 0x56B3, [21062] = 0x58E3, [21063] = 0x5B45, [21064] = 0x5DC6,
+-  [21065] = 0x5DC7, [21066] = 0x5EEE, [21067] = 0x5EEF, [21068] = 0x5FC0,
+-  [21069] = 0x5FC1, [21070] = 0x61F9, [21071] = 0x6517, [21072] = 0x6516,
+-  [21073] = 0x6515, [21074] = 0x6513, [21075] = 0x65DF, [21076] = 0x66E8,
+-  [21077] = 0x66E3, [21078] = 0x66E4, [21079] = 0x6AF3, [21080] = 0x6AF0,
+-  [21081] = 0x6AEA, [21082] = 0x6AE8, [21083] = 0x6AF9, [21084] = 0x6AF1,
+-  [21085] = 0x6AEE, [21086] = 0x6AEF, [21087] = 0x703C, [21088] = 0x7035,
+-  [21089] = 0x702F, [21090] = 0x7037, [21091] = 0x7034, [21092] = 0x7031,
+-  [21093] = 0x7042, [21094] = 0x7038, [21095] = 0x703F, [21096] = 0x703A,
+-  [21097] = 0x7039, [21098] = 0x7040, [21099] = 0x703B, [21100] = 0x7033,
+-  [21101] = 0x7041, [21102] = 0x7213, [21103] = 0x7214, [21104] = 0x72A8,
+-  [21105] = 0x737D, [21106] = 0x737C, [21107] = 0x74BA, [21108] = 0x76AB,
+-  [21109] = 0x76AA, [21110] = 0x76BE, [21111] = 0x76ED, [21112] = 0x77CC,
+-  [21113] = 0x77CE, [21114] = 0x77CF, [21115] = 0x77CD, [21116] = 0x77F2,
+-  [21117] = 0x7925, [21118] = 0x7923, [21119] = 0x7927, [21120] = 0x7928,
+-  [21121] = 0x7924, [21122] = 0x7929, [21157] = 0x79B2, [21158] = 0x7A6E,
+-  [21159] = 0x7A6C, [21160] = 0x7A6D, [21161] = 0x7AF7, [21162] = 0x7C49,
+-  [21163] = 0x7C48, [21164] = 0x7C4A, [21165] = 0x7C47, [21166] = 0x7C45,
+-  [21167] = 0x7CEE, [21168] = 0x7E7B, [21169] = 0x7E7E, [21170] = 0x7E81,
+-  [21171] = 0x7E80, [21172] = 0x7FBA, [21173] = 0x7FFF, [21174] = 0x8079,
+-  [21175] = 0x81DB, [21176] = 0x81D9, [21177] = 0x820B, [21178] = 0x8268,
+-  [21179] = 0x8269, [21180] = 0x8622, [21181] = 0x85FF, [21182] = 0x8601,
+-  [21183] = 0x85FE, [21184] = 0x861B, [21185] = 0x8600, [21186] = 0x85F6,
+-  [21187] = 0x8604, [21188] = 0x8609, [21189] = 0x8605, [21190] = 0x860C,
+-  [21191] = 0x85FD, [21192] = 0x8819, [21193] = 0x8810, [21194] = 0x8811,
+-  [21195] = 0x8817, [21196] = 0x8813, [21197] = 0x8816, [21198] = 0x8963,
+-  [21199] = 0x8966, [21200] = 0x89B9, [21201] = 0x89F7, [21202] = 0x8B60,
+-  [21203] = 0x8B6A, [21204] = 0x8B5D, [21205] = 0x8B68, [21206] = 0x8B63,
+-  [21207] = 0x8B65, [21208] = 0x8B67, [21209] = 0x8B6D, [21210] = 0x8DAE,
+-  [21211] = 0x8E86, [21212] = 0x8E88, [21213] = 0x8E84, [21214] = 0x8F59,
+-  [21215] = 0x8F56, [21216] = 0x8F57, [21217] = 0x8F55, [21218] = 0x8F58,
+-  [21219] = 0x8F5A, [21220] = 0x908D, [21221] = 0x9143, [21222] = 0x9141,
+-  [21223] = 0x91B7, [21224] = 0x91B5, [21225] = 0x91B2, [21226] = 0x91B3,
+-  [21227] = 0x940B, [21228] = 0x9413, [21229] = 0x93FB, [21230] = 0x9420,
+-  [21231] = 0x940F, [21232] = 0x9414, [21233] = 0x93FE, [21234] = 0x9415,
+-  [21235] = 0x9410, [21236] = 0x9428, [21237] = 0x9419, [21238] = 0x940D,
+-  [21239] = 0x93F5, [21240] = 0x9400, [21241] = 0x93F7, [21242] = 0x9407,
+-  [21243] = 0x940E, [21244] = 0x9416, [21245] = 0x9412, [21246] = 0x93FA,
+-  [21247] = 0x9409, [21248] = 0x93F8, [21249] = 0x940A, [21250] = 0x93FF,
+-  [21255] = 0x93FC, [21256] = 0x940C, [21257] = 0x93F6, [21258] = 0x9411,
+-  [21259] = 0x9406, [21260] = 0x95DE, [21261] = 0x95E0, [21262] = 0x95DF,
+-  [21263] = 0x972E, [21264] = 0x972F, [21265] = 0x97B9, [21266] = 0x97BB,
+-  [21267] = 0x97FD, [21268] = 0x97FE, [21269] = 0x9860, [21270] = 0x9862,
+-  [21271] = 0x9863, [21272] = 0x985F, [21273] = 0x98C1, [21274] = 0x98C2,
+-  [21275] = 0x9950, [21276] = 0x994E, [21277] = 0x9959, [21278] = 0x994C,
+-  [21279] = 0x994B, [21280] = 0x9953, [21281] = 0x9A32, [21282] = 0x9A34,
+-  [21283] = 0x9A31, [21284] = 0x9A2C, [21285] = 0x9A2A, [21286] = 0x9A36,
+-  [21287] = 0x9A29, [21288] = 0x9A2E, [21289] = 0x9A38, [21290] = 0x9A2D,
+-  [21291] = 0x9AC7, [21292] = 0x9ACA, [21293] = 0x9AC6, [21294] = 0x9B10,
+-  [21295] = 0x9B12, [21296] = 0x9B11, [21297] = 0x9C0B, [21298] = 0x9C08,
+-  [21299] = 0x9BF7, [21300] = 0x9C05, [21301] = 0x9C12, [21302] = 0x9BF8,
+-  [21303] = 0x9C40, [21304] = 0x9C07, [21305] = 0x9C0E, [21306] = 0x9C06,
+-  [21307] = 0x9C17, [21308] = 0x9C14, [21309] = 0x9C09, [21310] = 0x9D9F,
+-  [21311] = 0x9D99, [21312] = 0x9DA4, [21313] = 0x9D9D, [21314] = 0x9D92,
+-  [21315] = 0x9D98, [21316] = 0x9D90, [21317] = 0x9D9B, [21352] = 0x9DA0,
+-  [21353] = 0x9D94, [21354] = 0x9D9C, [21355] = 0x9DAA, [21356] = 0x9D97,
+-  [21357] = 0x9DA1, [21358] = 0x9D9A, [21359] = 0x9DA2, [21360] = 0x9DA8,
+-  [21361] = 0x9D9E, [21362] = 0x9DA3, [21363] = 0x9DBF, [21364] = 0x9DA9,
+-  [21365] = 0x9D96, [21366] = 0x9DA6, [21367] = 0x9DA7, [21368] = 0x9E99,
+-  [21369] = 0x9E9B, [21370] = 0x9E9A, [21371] = 0x9EE5, [21372] = 0x9EE4,
+-  [21373] = 0x9EE7, [21374] = 0x9EE6, [21375] = 0x9F30, [21376] = 0x9F2E,
+-  [21377] = 0x9F5B, [21378] = 0x9F60, [21379] = 0x9F5E, [21380] = 0x9F5D,
+-  [21381] = 0x9F59, [21382] = 0x9F91, [21383] = 0x513A, [21384] = 0x5139,
+-  [21385] = 0x5298, [21386] = 0x5297, [21387] = 0x56C3, [21388] = 0x56BD,
+-  [21389] = 0x56BE, [21390] = 0x5B48, [21391] = 0x5B47, [21392] = 0x5DCB,
+-  [21393] = 0x5DCF, [21394] = 0x5EF1, [21395] = 0x61FD, [21396] = 0x651B,
+-  [21397] = 0x6B02, [21398] = 0x6AFC, [21399] = 0x6B03, [21400] = 0x6AF8,
+-  [21401] = 0x6B00, [21402] = 0x7043, [21403] = 0x7044, [21404] = 0x704A,
+-  [21405] = 0x7048, [21406] = 0x7049, [21407] = 0x7045, [21408] = 0x7046,
+-  [21409] = 0x721D, [21410] = 0x721A, [21411] = 0x7219, [21412] = 0x737E,
+-  [21413] = 0x7517, [21414] = 0x766A, [21415] = 0x77D0, [21416] = 0x792D,
+-  [21417] = 0x7931, [21418] = 0x792F, [21419] = 0x7C54, [21420] = 0x7C53,
+-  [21421] = 0x7CF2, [21422] = 0x7E8A, [21423] = 0x7E87, [21424] = 0x7E88,
+-  [21425] = 0x7E8B, [21426] = 0x7E86, [21427] = 0x7E8D, [21428] = 0x7F4D,
+-  [21429] = 0x7FBB, [21430] = 0x8030, [21431] = 0x81DD, [21432] = 0x8618,
+-  [21433] = 0x862A, [21434] = 0x8626, [21435] = 0x861F, [21436] = 0x8623,
+-  [21437] = 0x861C, [21438] = 0x8619, [21439] = 0x8627, [21440] = 0x862E,
+-  [21441] = 0x8621, [21442] = 0x8620, [21443] = 0x8629, [21444] = 0x861E,
+-  [21445] = 0x8625, [21450] = 0x8829, [21451] = 0x881D, [21452] = 0x881B,
+-  [21453] = 0x8820, [21454] = 0x8824, [21455] = 0x881C, [21456] = 0x882B,
+-  [21457] = 0x884A, [21458] = 0x896D, [21459] = 0x8969, [21460] = 0x896E,
+-  [21461] = 0x896B, [21462] = 0x89FA, [21463] = 0x8B79, [21464] = 0x8B78,
+-  [21465] = 0x8B45, [21466] = 0x8B7A, [21467] = 0x8B7B, [21468] = 0x8D10,
+-  [21469] = 0x8D14, [21470] = 0x8DAF, [21471] = 0x8E8E, [21472] = 0x8E8C,
+-  [21473] = 0x8F5E, [21474] = 0x8F5B, [21475] = 0x8F5D, [21476] = 0x9146,
+-  [21477] = 0x9144, [21478] = 0x9145, [21479] = 0x91B9, [21480] = 0x943F,
+-  [21481] = 0x943B, [21482] = 0x9436, [21483] = 0x9429, [21484] = 0x943D,
+-  [21485] = 0x943C, [21486] = 0x9430, [21487] = 0x9439, [21488] = 0x942A,
+-  [21489] = 0x9437, [21490] = 0x942C, [21491] = 0x9440, [21492] = 0x9431,
+-  [21493] = 0x95E5, [21494] = 0x95E4, [21495] = 0x95E3, [21496] = 0x9735,
+-  [21497] = 0x973A, [21498] = 0x97BF, [21499] = 0x97E1, [21500] = 0x9864,
+-  [21501] = 0x98C9, [21502] = 0x98C6, [21503] = 0x98C0, [21504] = 0x9958,
+-  [21505] = 0x9956, [21506] = 0x9A39, [21507] = 0x9A3D, [21508] = 0x9A46,
+-  [21509] = 0x9A44, [21510] = 0x9A42, [21511] = 0x9A41, [21512] = 0x9A3A,
+-  [21547] = 0x9A3F, [21548] = 0x9ACD, [21549] = 0x9B15, [21550] = 0x9B17,
+-  [21551] = 0x9B18, [21552] = 0x9B16, [21553] = 0x9B3A, [21554] = 0x9B52,
+-  [21555] = 0x9C2B, [21556] = 0x9C1D, [21557] = 0x9C1C, [21558] = 0x9C2C,
+-  [21559] = 0x9C23, [21560] = 0x9C28, [21561] = 0x9C29, [21562] = 0x9C24,
+-  [21563] = 0x9C21, [21564] = 0x9DB7, [21565] = 0x9DB6, [21566] = 0x9DBC,
+-  [21567] = 0x9DC1, [21568] = 0x9DC7, [21569] = 0x9DCA, [21570] = 0x9DCF,
+-  [21571] = 0x9DBE, [21572] = 0x9DC5, [21573] = 0x9DC3, [21574] = 0x9DBB,
+-  [21575] = 0x9DB5, [21576] = 0x9DCE, [21577] = 0x9DB9, [21578] = 0x9DBA,
+-  [21579] = 0x9DAC, [21580] = 0x9DC8, [21581] = 0x9DB1, [21582] = 0x9DAD,
+-  [21583] = 0x9DCC, [21584] = 0x9DB3, [21585] = 0x9DCD, [21586] = 0x9DB2,
+-  [21587] = 0x9E7A, [21588] = 0x9E9C, [21589] = 0x9EEB, [21590] = 0x9EEE,
+-  [21591] = 0x9EED, [21592] = 0x9F1B, [21593] = 0x9F18, [21594] = 0x9F1A,
+-  [21595] = 0x9F31, [21596] = 0x9F4E, [21597] = 0x9F65, [21598] = 0x9F64,
+-  [21599] = 0x9F92, [21600] = 0x4EB9, [21601] = 0x56C6, [21602] = 0x56C5,
+-  [21603] = 0x56CB, [21604] = 0x5971, [21605] = 0x5B4B, [21606] = 0x5B4C,
+-  [21607] = 0x5DD5, [21608] = 0x5DD1, [21609] = 0x5EF2, [21610] = 0x6521,
+-  [21611] = 0x6520, [21612] = 0x6526, [21613] = 0x6522, [21614] = 0x6B0B,
+-  [21615] = 0x6B08, [21616] = 0x6B09, [21617] = 0x6C0D, [21618] = 0x7055,
+-  [21619] = 0x7056, [21620] = 0x7057, [21621] = 0x7052, [21622] = 0x721E,
+-  [21623] = 0x721F, [21624] = 0x72A9, [21625] = 0x737F, [21626] = 0x74D8,
+-  [21627] = 0x74D5, [21628] = 0x74D9, [21629] = 0x74D7, [21630] = 0x766D,
+-  [21631] = 0x76AD, [21632] = 0x7935, [21633] = 0x79B4, [21634] = 0x7A70,
+-  [21635] = 0x7A71, [21636] = 0x7C57, [21637] = 0x7C5C, [21638] = 0x7C59,
+-  [21639] = 0x7C5B, [21640] = 0x7C5A, [21645] = 0x7CF4, [21646] = 0x7CF1,
+-  [21647] = 0x7E91, [21648] = 0x7F4F, [21649] = 0x7F87, [21650] = 0x81DE,
+-  [21651] = 0x826B, [21652] = 0x8634, [21653] = 0x8635, [21654] = 0x8633,
+-  [21655] = 0x862C, [21656] = 0x8632, [21657] = 0x8636, [21658] = 0x882C,
+-  [21659] = 0x8828, [21660] = 0x8826, [21661] = 0x882A, [21662] = 0x8825,
+-  [21663] = 0x8971, [21664] = 0x89BF, [21665] = 0x89BE, [21666] = 0x89FB,
+-  [21667] = 0x8B7E, [21668] = 0x8B84, [21669] = 0x8B82, [21670] = 0x8B86,
+-  [21671] = 0x8B85, [21672] = 0x8B7F, [21673] = 0x8D15, [21674] = 0x8E95,
+-  [21675] = 0x8E94, [21676] = 0x8E9A, [21677] = 0x8E92, [21678] = 0x8E90,
+-  [21679] = 0x8E96, [21680] = 0x8E97, [21681] = 0x8F60, [21682] = 0x8F62,
+-  [21683] = 0x9147, [21684] = 0x944C, [21685] = 0x9450, [21686] = 0x944A,
+-  [21687] = 0x944B, [21688] = 0x944F, [21689] = 0x9447, [21690] = 0x9445,
+-  [21691] = 0x9448, [21692] = 0x9449, [21693] = 0x9446, [21694] = 0x973F,
+-  [21695] = 0x97E3, [21696] = 0x986A, [21697] = 0x9869, [21698] = 0x98CB,
+-  [21699] = 0x9954, [21700] = 0x995B, [21701] = 0x9A4E, [21702] = 0x9A53,
+-  [21703] = 0x9A54, [21704] = 0x9A4C, [21705] = 0x9A4F, [21706] = 0x9A48,
+-  [21707] = 0x9A4A, [21742] = 0x9A49, [21743] = 0x9A52, [21744] = 0x9A50,
+-  [21745] = 0x9AD0, [21746] = 0x9B19, [21747] = 0x9B2B, [21748] = 0x9B3B,
+-  [21749] = 0x9B56, [21750] = 0x9B55, [21751] = 0x9C46, [21752] = 0x9C48,
+-  [21753] = 0x9C3F, [21754] = 0x9C44, [21755] = 0x9C39, [21756] = 0x9C33,
+-  [21757] = 0x9C41, [21758] = 0x9C3C, [21759] = 0x9C37, [21760] = 0x9C34,
+-  [21761] = 0x9C32, [21762] = 0x9C3D, [21763] = 0x9C36, [21764] = 0x9DDB,
+-  [21765] = 0x9DD2, [21766] = 0x9DDE, [21767] = 0x9DDA, [21768] = 0x9DCB,
+-  [21769] = 0x9DD0, [21770] = 0x9DDC, [21771] = 0x9DD1, [21772] = 0x9DDF,
+-  [21773] = 0x9DE9, [21774] = 0x9DD9, [21775] = 0x9DD8, [21776] = 0x9DD6,
+-  [21777] = 0x9DF5, [21778] = 0x9DD5, [21779] = 0x9DDD, [21780] = 0x9EB6,
+-  [21781] = 0x9EF0, [21782] = 0x9F35, [21783] = 0x9F33, [21784] = 0x9F32,
+-  [21785] = 0x9F42, [21786] = 0x9F6B, [21787] = 0x9F95, [21788] = 0x9FA2,
+-  [21789] = 0x513D, [21790] = 0x5299, [21791] = 0x58E8, [21792] = 0x58E7,
+-  [21793] = 0x5972, [21794] = 0x5B4D, [21795] = 0x5DD8, [21796] = 0x882F,
+-  [21797] = 0x5F4F, [21798] = 0x6201, [21799] = 0x6203, [21800] = 0x6204,
+-  [21801] = 0x6529, [21802] = 0x6525, [21803] = 0x6596, [21804] = 0x66EB,
+-  [21805] = 0x6B11, [21806] = 0x6B12, [21807] = 0x6B0F, [21808] = 0x6BCA,
+-  [21809] = 0x705B, [21810] = 0x705A, [21811] = 0x7222, [21812] = 0x7382,
+-  [21813] = 0x7381, [21814] = 0x7383, [21815] = 0x7670, [21816] = 0x77D4,
+-  [21817] = 0x7C67, [21818] = 0x7C66, [21819] = 0x7E95, [21820] = 0x826C,
+-  [21821] = 0x863A, [21822] = 0x8640, [21823] = 0x8639, [21824] = 0x863C,
+-  [21825] = 0x8631, [21826] = 0x863B, [21827] = 0x863E, [21828] = 0x8830,
+-  [21829] = 0x8832, [21830] = 0x882E, [21831] = 0x8833, [21832] = 0x8976,
+-  [21833] = 0x8974, [21834] = 0x8973, [21835] = 0x89FE, [21840] = 0x8B8C,
+-  [21841] = 0x8B8E, [21842] = 0x8B8B, [21843] = 0x8B88, [21844] = 0x8C45,
+-  [21845] = 0x8D19, [21846] = 0x8E98, [21847] = 0x8F64, [21848] = 0x8F63,
+-  [21849] = 0x91BC, [21850] = 0x9462, [21851] = 0x9455, [21852] = 0x945D,
+-  [21853] = 0x9457, [21854] = 0x945E, [21855] = 0x97C4, [21856] = 0x97C5,
+-  [21857] = 0x9800, [21858] = 0x9A56, [21859] = 0x9A59, [21860] = 0x9B1E,
+-  [21861] = 0x9B1F, [21862] = 0x9B20, [21863] = 0x9C52, [21864] = 0x9C58,
+-  [21865] = 0x9C50, [21866] = 0x9C4A, [21867] = 0x9C4D, [21868] = 0x9C4B,
+-  [21869] = 0x9C55, [21870] = 0x9C59, [21871] = 0x9C4C, [21872] = 0x9C4E,
+-  [21873] = 0x9DFB, [21874] = 0x9DF7, [21875] = 0x9DEF, [21876] = 0x9DE3,
+-  [21877] = 0x9DEB, [21878] = 0x9DF8, [21879] = 0x9DE4, [21880] = 0x9DF6,
+-  [21881] = 0x9DE1, [21882] = 0x9DEE, [21883] = 0x9DE6, [21884] = 0x9DF2,
+-  [21885] = 0x9DF0, [21886] = 0x9DE2, [21887] = 0x9DEC, [21888] = 0x9DF4,
+-  [21889] = 0x9DF3, [21890] = 0x9DE8, [21891] = 0x9DED, [21892] = 0x9EC2,
+-  [21893] = 0x9ED0, [21894] = 0x9EF2, [21895] = 0x9EF3, [21896] = 0x9F06,
+-  [21897] = 0x9F1C, [21898] = 0x9F38, [21899] = 0x9F37, [21900] = 0x9F36,
+-  [21901] = 0x9F43, [21902] = 0x9F4F, [21937] = 0x9F71, [21938] = 0x9F70,
+-  [21939] = 0x9F6E, [21940] = 0x9F6F, [21941] = 0x56D3, [21942] = 0x56CD,
+-  [21943] = 0x5B4E, [21944] = 0x5C6D, [21945] = 0x652D, [21946] = 0x66ED,
+-  [21947] = 0x66EE, [21948] = 0x6B13, [21949] = 0x705F, [21950] = 0x7061,
+-  [21951] = 0x705D, [21952] = 0x7060, [21953] = 0x7223, [21954] = 0x74DB,
+-  [21955] = 0x74E5, [21956] = 0x77D5, [21957] = 0x7938, [21958] = 0x79B7,
+-  [21959] = 0x79B6, [21960] = 0x7C6A, [21961] = 0x7E97, [21962] = 0x7F89,
+-  [21963] = 0x826D, [21964] = 0x8643, [21965] = 0x8838, [21966] = 0x8837,
+-  [21967] = 0x8835, [21968] = 0x884B, [21969] = 0x8B94, [21970] = 0x8B95,
+-  [21971] = 0x8E9E, [21972] = 0x8E9F, [21973] = 0x8EA0, [21974] = 0x8E9D,
+-  [21975] = 0x91BE, [21976] = 0x91BD, [21977] = 0x91C2, [21978] = 0x946B,
+-  [21979] = 0x9468, [21980] = 0x9469, [21981] = 0x96E5, [21982] = 0x9746,
+-  [21983] = 0x9743, [21984] = 0x9747, [21985] = 0x97C7, [21986] = 0x97E5,
+-  [21987] = 0x9A5E, [21988] = 0x9AD5, [21989] = 0x9B59, [21990] = 0x9C63,
+-  [21991] = 0x9C67, [21992] = 0x9C66, [21993] = 0x9C62, [21994] = 0x9C5E,
+-  [21995] = 0x9C60, [21996] = 0x9E02, [21997] = 0x9DFE, [21998] = 0x9E07,
+-  [21999] = 0x9E03, [22000] = 0x9E06, [22001] = 0x9E05, [22002] = 0x9E00,
+-  [22003] = 0x9E01, [22004] = 0x9E09, [22005] = 0x9DFF, [22006] = 0x9DFD,
+-  [22007] = 0x9E04, [22008] = 0x9EA0, [22009] = 0x9F1E, [22010] = 0x9F46,
+-  [22011] = 0x9F74, [22012] = 0x9F75, [22013] = 0x9F76, [22014] = 0x56D4,
+-  [22015] = 0x652E, [22016] = 0x65B8, [22017] = 0x6B18, [22018] = 0x6B19,
+-  [22019] = 0x6B17, [22020] = 0x6B1A, [22021] = 0x7062, [22022] = 0x7226,
+-  [22023] = 0x72AA, [22024] = 0x77D8, [22025] = 0x77D9, [22026] = 0x7939,
+-  [22027] = 0x7C69, [22028] = 0x7C6B, [22029] = 0x7CF6, [22030] = 0x7E9A,
+-  [22035] = 0x7E98, [22036] = 0x7E9B, [22037] = 0x7E99, [22038] = 0x81E0,
+-  [22039] = 0x81E1, [22040] = 0x8646, [22041] = 0x8647, [22042] = 0x8648,
+-  [22043] = 0x8979, [22044] = 0x897A, [22045] = 0x897C, [22046] = 0x897B,
+-  [22047] = 0x89FF, [22048] = 0x8B98, [22049] = 0x8B99, [22050] = 0x8EA5,
+-  [22051] = 0x8EA4, [22052] = 0x8EA3, [22053] = 0x946E, [22054] = 0x946D,
+-  [22055] = 0x946F, [22056] = 0x9471, [22057] = 0x9473, [22058] = 0x9749,
+-  [22059] = 0x9872, [22060] = 0x995F, [22061] = 0x9C68, [22062] = 0x9C6E,
+-  [22063] = 0x9C6D, [22064] = 0x9E0B, [22065] = 0x9E0D, [22066] = 0x9E10,
+-  [22067] = 0x9E0F, [22068] = 0x9E12, [22069] = 0x9E11, [22070] = 0x9EA1,
+-  [22071] = 0x9EF5, [22072] = 0x9F09, [22073] = 0x9F47, [22074] = 0x9F78,
+-  [22075] = 0x9F7B, [22076] = 0x9F7A, [22077] = 0x9F79, [22078] = 0x571E,
+-  [22079] = 0x7066, [22080] = 0x7C6F, [22081] = 0x883C, [22082] = 0x8DB2,
+-  [22083] = 0x8EA6, [22084] = 0x91C3, [22085] = 0x9474, [22086] = 0x9478,
+-  [22087] = 0x9476, [22088] = 0x9475, [22089] = 0x9A60, [22090] = 0x9C74,
+-  [22091] = 0x9C73, [22092] = 0x9C71, [22093] = 0x9C75, [22094] = 0x9E14,
+-  [22095] = 0x9E13, [22096] = 0x9EF6, [22097] = 0x9F0A, [22132] = 0x9FA4,
+-  [22133] = 0x7068, [22134] = 0x7065, [22135] = 0x7CF7, [22136] = 0x866A,
+-  [22137] = 0x883E, [22138] = 0x883D, [22139] = 0x883F, [22140] = 0x8B9E,
+-  [22141] = 0x8C9C, [22142] = 0x8EA9, [22143] = 0x8EC9, [22144] = 0x974B,
+-  [22145] = 0x9873, [22146] = 0x9874, [22147] = 0x98CC, [22148] = 0x9961,
+-  [22149] = 0x99AB, [22150] = 0x9A64, [22151] = 0x9A66, [22152] = 0x9A67,
+-  [22153] = 0x9B24, [22154] = 0x9E15, [22155] = 0x9E17, [22156] = 0x9F48,
+-  [22157] = 0x6207, [22158] = 0x6B1E, [22159] = 0x7227, [22160] = 0x864C,
+-  [22161] = 0x8EA8, [22162] = 0x9482, [22163] = 0x9480, [22164] = 0x9481,
+-  [22165] = 0x9A69, [22166] = 0x9A68, [22167] = 0x9B2E, [22168] = 0x9E19,
+-  [22169] = 0x7229, [22170] = 0x864B, [22171] = 0x8B9F, [22172] = 0x9483,
+-  [22173] = 0x9C79, [22174] = 0x9EB7, [22175] = 0x7675, [22176] = 0x9A6B,
+-  [22177] = 0x9C7A, [22178] = 0x9E1D, [22179] = 0x7069, [22180] = 0x706A,
+-  [22181] = 0x9EA4, [22182] = 0x9F7E, [22183] = 0x9F49, [22184] = 0x9F98,
+-  [22185] = 0x7881, [22186] = 0x92B9, [22187] = 0x88CF, [22188] = 0x58BB,
+-  [22189] = 0x6052, [22190] = 0x7CA7, [22191] = 0x5AFA, [22192] = 0x2554,
+-  [22193] = 0x2566, [22194] = 0x2557, [22195] = 0x2560, [22196] = 0x256C,
+-  [22197] = 0x2563, [22198] = 0x255A, [22199] = 0x2569, [22200] = 0x255D,
+-  [22201] = 0x2552, [22202] = 0x2564, [22203] = 0x2555, [22204] = 0x255E,
+-  [22205] = 0x256A, [22206] = 0x2561, [22207] = 0x2558, [22208] = 0x2567,
+-  [22209] = 0x255B, [22210] = 0x2553, [22211] = 0x2565, [22212] = 0x2556,
+-  [22213] = 0x255F, [22214] = 0x256B, [22215] = 0x2562, [22216] = 0x2559,
+-  [22217] = 0x2568, [22218] = 0x255C, [22219] = 0x2551, [22220] = 0x2550,
+-  [22221] = 0x256D, [22222] = 0x256E, [22223] = 0x2570, [22224] = 0x256F,
+-  [22225] = 0xFFED, [22230] = 0x20547, [22231] = 0x92DB, [22232] = 0x205DF,
+-  [22233] = 0xE003, [22234] = 0x854C, [22235] = 0x42B5, [22236] = 0x73EF,
+-  [22237] = 0x51B5, [22238] = 0x3649, [22239] = 0x24942, [22240] = 0x289E4,
+-  [22241] = 0x9344, [22242] = 0x219DB, [22243] = 0x82EE, [22244] = 0x23CC8,
+-  [22245] = 0x783C, [22246] = 0x6744, [22247] = 0x62DF, [22248] = 0x24933,
+-  [22249] = 0x289AA, [22250] = 0x202A0, [22251] = 0x26BB3, [22252] = 0x21305,
+-  [22253] = 0x4FAB, [22254] = 0xE018, [22255] = 0x5008, [22256] = 0x26D29,
+-  [22257] = 0xE01B, [22258] = 0x23600, [22259] = 0x24AB1, [22260] = 0x22513,
+-  [22262] = 0x2037E, [22263] = 0x5FA4, [22264] = 0x20380, [22265] = 0x20347,
+-  [22266] = 0x6EDB, [22267] = 0x2041F, [22269] = 0x5101, [22270] = 0x347A,
+-  [22271] = 0x510E, [22272] = 0x986C, [22273] = 0x3743, [22274] = 0x8416,
+-  [22275] = 0xE02D, [22276] = 0x20487, [22277] = 0x5160, [22278] = 0x233B4,
+-  [22279] = 0x516A, [22280] = 0x20BFF, [22281] = 0x220FC, [22282] = 0x202E5,
+-  [22283] = 0x22530, [22284] = 0x2058E, [22285] = 0x23233, [22286] = 0xE038,
+-  [22287] = 0x5B82, [22288] = 0x877D, [22289] = 0x205B3, [22290] = 0x23C99,
+-  [22291] = 0x51B2, [22292] = 0x51B8, [22327] = 0x9D34, [22328] = 0x51C9,
+-  [22329] = 0x51CF, [22330] = 0x51D1, [22331] = 0x3CDC, [22332] = 0x51D3,
+-  [22333] = 0x24AA6, [22334] = 0x51B3, [22335] = 0x51E2, [22336] = 0x5342,
+-  [22337] = 0x51ED, [22338] = 0x83CD, [22339] = 0x693E, [22340] = 0xE04C,
+-  [22341] = 0x5F7B, [22342] = 0x520B, [22343] = 0x5226, [22344] = 0x523C,
+-  [22345] = 0x52B5, [22346] = 0x5257, [22347] = 0x5294, [22348] = 0x52B9,
+-  [22349] = 0x52C5, [22350] = 0x7C15, [22351] = 0x8542, [22352] = 0x52E0,
+-  [22353] = 0x860D, [22354] = 0xE05A, [22356] = 0x28ADE, [22357] = 0x5549,
+-  [22358] = 0x6ED9, [22359] = 0x23F80, [22360] = 0x20954, [22361] = 0x23FEC,
+-  [22362] = 0x5333, [22364] = 0x20BE2, [22365] = 0x6CCB, [22366] = 0x21726,
+-  [22367] = 0x681B, [22368] = 0x73D5, [22369] = 0x604A, [22370] = 0x3EAA,
+-  [22371] = 0x38CC, [22372] = 0x216E8, [22373] = 0x71DD, [22374] = 0x44A2,
+-  [22375] = 0x536D, [22376] = 0x5374, [22377] = 0x286AB, [22378] = 0x537E,
+-  [22380] = 0x21596, [22381] = 0x21613, [22382] = 0x77E6, [22383] = 0x5393,
+-  [22384] = 0x28A9B, [22385] = 0x53A0, [22386] = 0x53AB, [22387] = 0x53AE,
+-  [22388] = 0x73A7, [22389] = 0x25772, [22390] = 0x3F59, [22391] = 0x739C,
+-  [22392] = 0x53C1, [22393] = 0x53C5, [22394] = 0x6C49, [22395] = 0x4E49,
+-  [22396] = 0x57FE, [22397] = 0x53D9, [22398] = 0x3AAB, [22399] = 0x20B8F,
+-  [22400] = 0x53E0, [22401] = 0x23FEB, [22402] = 0x22DA3, [22403] = 0x53F6,
+-  [22404] = 0x20C77, [22405] = 0x5413, [22406] = 0x7079, [22407] = 0x552B,
+-  [22408] = 0x6657, [22409] = 0x6D5B, [22410] = 0x546D, [22411] = 0x26B53,
+-  [22412] = 0xE094, [22413] = 0x555D, [22414] = 0x548F, [22415] = 0x54A4,
+-  [22416] = 0x47A6, [22417] = 0xE099, [22418] = 0xE09A, [22419] = 0x3DB4,
+-  [22420] = 0x20D4D, [22425] = 0x289BC, [22426] = 0x22698, [22427] = 0x5547,
+-  [22428] = 0x4CED, [22429] = 0x542F, [22430] = 0x7417, [22431] = 0x5586,
+-  [22432] = 0x55A9, [22434] = 0x218D7, [22435] = 0x2403A, [22436] = 0x4552,
+-  [22437] = 0x24435, [22438] = 0x66B3, [22439] = 0x210B4, [22440] = 0x5637,
+-  [22441] = 0x66CD, [22442] = 0x2328A, [22443] = 0x66A4, [22444] = 0x66AD,
+-  [22445] = 0x564D, [22446] = 0x564F, [22447] = 0x78F1, [22448] = 0x56F1,
+-  [22449] = 0x9787, [22450] = 0x53FE, [22451] = 0x5700, [22452] = 0x56EF,
+-  [22453] = 0x56ED, [22454] = 0x28B66, [22455] = 0x3623, [22456] = 0x2124F,
+-  [22457] = 0x5746, [22458] = 0x241A5, [22459] = 0x6C6E, [22460] = 0x708B,
+-  [22461] = 0x5742, [22462] = 0x36B1, [22463] = 0x26C7E, [22464] = 0x57E6,
+-  [22465] = 0xE0C5, [22466] = 0x5803, [22467] = 0x21454, [22468] = 0x24363,
+-  [22469] = 0x5826, [22470] = 0x24BF5, [22471] = 0x585C, [22472] = 0x58AA,
+-  [22473] = 0x3561, [22474] = 0x58E0, [22475] = 0x58DC, [22476] = 0xE0D0,
+-  [22477] = 0x58FB, [22478] = 0x5BFF, [22479] = 0x5743, [22480] = 0x2A150,
+-  [22481] = 0x24278, [22482] = 0x93D3, [22483] = 0x35A1, [22484] = 0x591F,
+-  [22485] = 0x68A6, [22486] = 0x36C3, [22487] = 0x6E59, [22522] = 0x2163E,
+-  [22523] = 0x5A24, [22524] = 0x5553, [22525] = 0x21692, [22526] = 0x8505,
+-  [22527] = 0x59C9, [22528] = 0x20D4E, [22529] = 0x26C81, [22530] = 0x26D2A,
+-  [22531] = 0x217DC, [22532] = 0x59D9, [22533] = 0x217FB, [22534] = 0x217B2,
+-  [22535] = 0x26DA6, [22536] = 0x6D71, [22537] = 0x21828, [22538] = 0x216D5,
+-  [22539] = 0x59F9, [22540] = 0x26E45, [22541] = 0x5AAB, [22542] = 0x5A63,
+-  [22543] = 0x36E6, [22544] = 0xE0F2, [22546] = 0x3708, [22547] = 0x5A96,
+-  [22548] = 0x7465, [22549] = 0x5AD3, [22550] = 0x26FA1, [22551] = 0xE0F9,
+-  [22552] = 0x3D85, [22553] = 0x21911, [22554] = 0x3732, [22555] = 0xE0FD,
+-  [22556] = 0x5E83, [22557] = 0x52D0, [22558] = 0x5B76, [22559] = 0x6588,
+-  [22560] = 0x5B7C, [22561] = 0x27A0E, [22562] = 0x4004, [22563] = 0x485D,
+-  [22564] = 0xE106, [22565] = 0x5BD5, [22566] = 0x6160, [22567] = 0xE109,
+-  [22568] = 0xE10A, [22569] = 0x205A5, [22570] = 0x5BF3, [22571] = 0x5B9D,
+-  [22572] = 0x4D10, [22573] = 0x5C05, [22574] = 0x21B44, [22575] = 0x5C13,
+-  [22576] = 0x73CE, [22577] = 0x5C14, [22578] = 0x21CA5, [22579] = 0x26B28,
+-  [22580] = 0x5C49, [22581] = 0x48DD, [22582] = 0x5C85, [22583] = 0x5CE9,
+-  [22584] = 0x5CEF, [22585] = 0x5D8B, [22586] = 0x21DF9, [22587] = 0x21E37,
+-  [22588] = 0x5D10, [22589] = 0x5D18, [22590] = 0x5D46, [22591] = 0x21EA4,
+-  [22592] = 0x5CBA, [22593] = 0x5DD7, [22594] = 0x82FC, [22595] = 0x382D,
+-  [22596] = 0x24901, [22597] = 0x22049, [22598] = 0x22173, [22599] = 0x8287,
+-  [22600] = 0x3836, [22601] = 0x3BC2, [22602] = 0x5E2E, [22603] = 0x6A8A,
+-  [22605] = 0x5E7A, [22606] = 0xE130, [22607] = 0x20CD3, [22608] = 0x53A6,
+-  [22609] = 0x4EB7, [22611] = 0x53A8, [22612] = 0x21771, [22613] = 0x5E09,
+-  [22614] = 0x5EF4, [22615] = 0x28482, [22620] = 0x5EF9, [22621] = 0x5EFB,
+-  [22622] = 0x38A0, [22623] = 0x5EFC, [22624] = 0x683E, [22625] = 0x941B,
+-  [22626] = 0x5F0D, [22627] = 0x201C1, [22628] = 0x2F894, [22629] = 0x3ADE,
+-  [22630] = 0x48AE, [22631] = 0x2133A, [22632] = 0x5F3A, [22633] = 0x26888,
+-  [22634] = 0x223D0, [22636] = 0x22471, [22637] = 0x5F63, [22638] = 0x97BD,
+-  [22639] = 0x26E6E, [22640] = 0x5F72, [22641] = 0x9340, [22642] = 0xE150,
+-  [22643] = 0x5FA7, [22644] = 0x5DB6, [22645] = 0x3D5F, [22646] = 0xE154,
+-  [22647] = 0x21F6A, [22648] = 0x270F8, [22649] = 0x22668, [22650] = 0x91D6,
+-  [22651] = 0x2029E, [22652] = 0x28A29, [22653] = 0x6031, [22654] = 0x6685,
+-  [22655] = 0xE15D, [22656] = 0x3963, [22657] = 0x3DC7, [22658] = 0x3639,
+-  [22659] = 0x5790, [22660] = 0x227B4, [22661] = 0x7971, [22662] = 0x3E40,
+-  [22663] = 0x609E, [22665] = 0x60B3, [22666] = 0xE168, [22667] = 0x2498F,
+-  [22668] = 0xE16A, [22669] = 0x74A4, [22670] = 0x50E1, [22671] = 0x5AA0,
+-  [22672] = 0x6164, [22673] = 0x8424, [22674] = 0x6142, [22675] = 0xE171,
+-  [22676] = 0x26ED2, [22677] = 0x6181, [22678] = 0x51F4, [22679] = 0xE175,
+-  [22680] = 0x6187, [22681] = 0x5BAA, [22682] = 0x23FB7, [22717] = 0x2285F,
+-  [22718] = 0x61D3, [22719] = 0x28B9D, [22720] = 0x2995D, [22721] = 0x61D0,
+-  [22722] = 0x3932, [22723] = 0x22980, [22724] = 0x228C1, [22725] = 0x6023,
+-  [22726] = 0x615C, [22727] = 0x651E, [22728] = 0x638B, [22729] = 0x20118,
+-  [22730] = 0x62C5, [22731] = 0x21770, [22732] = 0x62D5, [22733] = 0x22E0D,
+-  [22734] = 0x636C, [22735] = 0x249DF, [22736] = 0x3A17, [22737] = 0x6438,
+-  [22738] = 0x63F8, [22739] = 0xE18F, [22740] = 0x217FC, [22742] = 0x6F8A,
+-  [22743] = 0x22E36, [22744] = 0x9814, [22745] = 0x2408C, [22746] = 0x2571D,
+-  [22747] = 0x64E1, [22748] = 0x64E5, [22749] = 0x947B, [22750] = 0x3A66,
+-  [22751] = 0x643A, [22752] = 0x3A57, [22753] = 0x654D, [22754] = 0x6F16,
+-  [22755] = 0x24A28, [22756] = 0x24A23, [22757] = 0x6585, [22758] = 0x656D,
+-  [22759] = 0x655F, [22760] = 0x2307E, [22761] = 0x65B5, [22762] = 0x24940,
+-  [22763] = 0x4B37, [22764] = 0x65D1, [22765] = 0x40D8, [22766] = 0x21829,
+-  [22767] = 0x65E0, [22768] = 0x65E3, [22769] = 0x5FDF, [22770] = 0x23400,
+-  [22771] = 0x6618, [22772] = 0x231F7, [22773] = 0x231F8, [22774] = 0x6644,
+-  [22775] = 0x231A4, [22776] = 0x231A5, [22777] = 0x664B, [22778] = 0x20E75,
+-  [22779] = 0x6667, [22780] = 0x251E6, [22781] = 0x6673, [22783] = 0xE1BB,
+-  [22784] = 0x23231, [22785] = 0x285F4, [22786] = 0x231C8, [22787] = 0x25313,
+-  [22788] = 0x77C5, [22789] = 0x228F7, [22790] = 0x99A4, [22791] = 0x6702,
+-  [22792] = 0x2439C, [22793] = 0x24A21, [22794] = 0x3B2B, [22795] = 0x69FA,
+-  [22796] = 0x237C2, [22798] = 0x6767, [22799] = 0x6762, [22800] = 0xE1CC,
+-  [22801] = 0xE1CD, [22802] = 0x67D7, [22803] = 0x44E9, [22804] = 0x6822,
+-  [22805] = 0x6E50, [22806] = 0x923C, [22807] = 0x6801, [22808] = 0x233E6,
+-  [22809] = 0x26DA0, [22810] = 0x685D, [22815] = 0xE1D7, [22816] = 0x69E1,
+-  [22817] = 0x6A0B, [22818] = 0x28ADF, [22819] = 0x6973, [22820] = 0x68C3,
+-  [22821] = 0x235CD, [22822] = 0x6901, [22823] = 0x6900, [22824] = 0x3D32,
+-  [22825] = 0x3A01, [22826] = 0x2363C, [22827] = 0x3B80, [22828] = 0x67AC,
+-  [22829] = 0x6961, [22830] = 0x28A4A, [22831] = 0x42FC, [22832] = 0x6936,
+-  [22833] = 0x6998, [22834] = 0x3BA1, [22835] = 0x203C9, [22836] = 0x8363,
+-  [22837] = 0x5090, [22838] = 0x69F9, [22839] = 0xE1EF, [22840] = 0x2212A,
+-  [22841] = 0x6A45, [22842] = 0xE1F2, [22843] = 0x6A9D, [22844] = 0x3BF3,
+-  [22845] = 0x67B1, [22846] = 0x6AC8, [22847] = 0x2919C, [22848] = 0x3C0D,
+-  [22849] = 0x6B1D, [22850] = 0xE1FA, [22851] = 0x60DE, [22852] = 0x6B35,
+-  [22853] = 0x6B74, [22854] = 0xE1FE, [22855] = 0x6EB5, [22856] = 0x23ADB,
+-  [22857] = 0x203B5, [22858] = 0xE202, [22859] = 0x3740, [22860] = 0x5421,
+-  [22861] = 0x23B5A, [22862] = 0x6BE1, [22863] = 0x23EFC, [22864] = 0x6BDC,
+-  [22865] = 0x6C37, [22866] = 0x2248B, [22867] = 0xE20B, [22868] = 0x26B51,
+-  [22869] = 0x6C5A, [22870] = 0x8226, [22871] = 0x6C79, [22872] = 0x23DBC,
+-  [22873] = 0x44C5, [22874] = 0x23DBD, [22875] = 0x241A4, [22876] = 0x2490C,
+-  [22877] = 0x24900, [22912] = 0x23CC9, [22913] = 0x36E5, [22914] = 0x3CEB,
+-  [22915] = 0xE219, [22916] = 0x9B83, [22917] = 0x231F9, [22918] = 0xE21C,
+-  [22919] = 0x7F8F, [22920] = 0x6837, [22921] = 0x26D25, [22922] = 0x26DA1,
+-  [22923] = 0x26DEB, [22924] = 0x6D96, [22925] = 0x6D5C, [22926] = 0x6E7C,
+-  [22927] = 0x6F04, [22928] = 0x2497F, [22929] = 0xE227, [22930] = 0x26E72,
+-  [22931] = 0x8533, [22932] = 0x26F74, [22933] = 0x51C7, [22936] = 0x842E,
+-  [22937] = 0x28B21, [22939] = 0x23E2F, [22940] = 0x7453, [22941] = 0x23F82,
+-  [22942] = 0x79CC, [22943] = 0x6E4F, [22944] = 0x5A91, [22945] = 0x2304B,
+-  [22946] = 0x6FF8, [22947] = 0x370D, [22948] = 0x6F9D, [22949] = 0x23E30,
+-  [22950] = 0x6EFA, [22951] = 0x21497, [22952] = 0x2403D, [22953] = 0x4555,
+-  [22954] = 0x93F0, [22955] = 0x6F44, [22956] = 0x6F5C, [22957] = 0x3D4E,
+-  [22958] = 0x6F74, [22959] = 0xE245, [22960] = 0x3D3B, [22961] = 0x6F9F,
+-  [22962] = 0x24144, [22963] = 0x6FD3, [22964] = 0xE24A, [22965] = 0x24155,
+-  [22966] = 0x24039, [22967] = 0x25D20, [22968] = 0xE24E, [22969] = 0x2413F,
+-  [22970] = 0x51DF, [22971] = 0x24156, [22972] = 0x24157, [22973] = 0x24140,
+-  [22974] = 0x261DD, [22975] = 0x704B, [22976] = 0x707E, [22977] = 0x70A7,
+-  [22978] = 0x7081, [22979] = 0x70CC, [22980] = 0x70D5, [22981] = 0x70D6,
+-  [22982] = 0x70DF, [22983] = 0x4104, [22984] = 0x3DE8, [22985] = 0x71B4,
+-  [22986] = 0x7196, [22987] = 0x24277, [22988] = 0x712B, [22989] = 0x7145,
+-  [22990] = 0x5A88, [22991] = 0x714A, [22993] = 0x5C9C, [22994] = 0x24365,
+-  [22995] = 0x714F, [22996] = 0x9362, [22997] = 0xE26B, [22998] = 0x712C,
+-  [22999] = 0x2445A, [23000] = 0x24A27, [23001] = 0x24A22, [23002] = 0x71BA,
+-  [23003] = 0x28BE8, [23004] = 0x70BD, [23005] = 0x720E, [23010] = 0x9442,
+-  [23011] = 0x7215, [23012] = 0x5911, [23013] = 0x9443, [23014] = 0x7224,
+-  [23015] = 0x9341, [23016] = 0xE27A, [23017] = 0x722E, [23018] = 0x7240,
+-  [23019] = 0x24974, [23020] = 0x68BD, [23021] = 0x7255, [23022] = 0x7257,
+-  [23023] = 0x3E55, [23024] = 0xE282, [23025] = 0x680D, [23026] = 0x6F3D,
+-  [23027] = 0x7282, [23029] = 0x732B, [23030] = 0x24823, [23031] = 0x2882B,
+-  [23032] = 0x48ED, [23033] = 0x28804, [23034] = 0x7328, [23035] = 0x732E,
+-  [23036] = 0x73CF, [23037] = 0x73AA, [23038] = 0xE290, [23039] = 0x26A2E,
+-  [23040] = 0x73C9, [23041] = 0x7449, [23042] = 0x241E2, [23043] = 0x216E7,
+-  [23044] = 0x24A24, [23045] = 0x6623, [23046] = 0x36C5, [23047] = 0x249B7,
+-  [23048] = 0x2498D, [23049] = 0xE29B, [23050] = 0x73F7, [23051] = 0x7415,
+-  [23052] = 0x6903, [23053] = 0x24A26, [23054] = 0x7439, [23055] = 0xE2A1,
+-  [23056] = 0x3ED7, [23058] = 0x228AD, [23059] = 0x7460, [23060] = 0x28EB2,
+-  [23061] = 0x7447, [23062] = 0x73E4, [23063] = 0x7476, [23064] = 0x83B9,
+-  [23065] = 0x746C, [23066] = 0x3730, [23067] = 0x7474, [23068] = 0x93F1,
+-  [23069] = 0x6A2C, [23070] = 0x7482, [23071] = 0x4953, [23072] = 0xE2B2,
+-  [23107] = 0x2415F, [23108] = 0x24A79, [23109] = 0x28B8F, [23110] = 0x5B46,
+-  [23111] = 0xE2B7, [23112] = 0x2189E, [23113] = 0x74C8, [23114] = 0x21988,
+-  [23115] = 0x750E, [23117] = 0x751E, [23118] = 0x28ED9, [23119] = 0x21A4B,
+-  [23120] = 0x5BD7, [23121] = 0xE2C1, [23122] = 0x9385, [23123] = 0x754D,
+-  [23124] = 0x754A, [23125] = 0x7567, [23126] = 0x756E, [23127] = 0x24F82,
+-  [23128] = 0x3F04, [23129] = 0xE2C9, [23130] = 0x758E, [23131] = 0x745D,
+-  [23132] = 0x759E, [23133] = 0x75B4, [23134] = 0x7602, [23135] = 0x762C,
+-  [23136] = 0x7651, [23137] = 0x764F, [23138] = 0x766F, [23139] = 0x7676,
+-  [23140] = 0xE2D4, [23141] = 0x7690, [23142] = 0x81EF, [23143] = 0x37F8,
+-  [23144] = 0x26911, [23145] = 0x2690E, [23146] = 0x76A1, [23147] = 0x76A5,
+-  [23148] = 0x76B7, [23149] = 0x76CC, [23150] = 0x26F9F, [23151] = 0x8462,
+-  [23152] = 0x2509D, [23153] = 0x2517D, [23154] = 0xE2E2, [23155] = 0x771E,
+-  [23156] = 0x7726, [23157] = 0x7740, [23158] = 0x64AF, [23159] = 0x25220,
+-  [23160] = 0x7758, [23161] = 0x232AC, [23162] = 0x77AF, [23163] = 0xE2EB,
+-  [23164] = 0xE2EC, [23165] = 0x216C1, [23166] = 0x77F4, [23168] = 0xE2F0,
+-  [23169] = 0xE2F1, [23170] = 0x68CA, [23171] = 0x78AF, [23172] = 0x78C7,
+-  [23173] = 0x78D3, [23174] = 0x96A5, [23175] = 0x792E, [23176] = 0x255E0,
+-  [23177] = 0x78D7, [23178] = 0x7934, [23179] = 0x78B1, [23180] = 0x2760C,
+-  [23181] = 0x8FB8, [23182] = 0x8884, [23183] = 0x28B2B, [23184] = 0xE300,
+-  [23185] = 0x2261C, [23186] = 0x7986, [23187] = 0x8900, [23188] = 0x6902,
+-  [23189] = 0x7980, [23190] = 0x25857, [23191] = 0x799D, [23192] = 0x27B39,
+-  [23193] = 0x793C, [23194] = 0x79A9, [23195] = 0x6E2A, [23196] = 0x27126,
+-  [23197] = 0x3EA8, [23198] = 0x79C6, [23199] = 0x2910D, [23200] = 0x79D4
++  [    0] = 0x43F0, [    1] = 0x4C32, [    2] = 0x4603, [    3] = 0x45A6,
++  [    4] = 0x4578, [    5] = 0x27267, [    6] = 0x4D77, [    7] = 0x45B3,
++  [    8] = 0x27CB1, [    9] = 0x4CE2, [   10] = 0x27CC5, [   11] = 0x3B95,
++  [   12] = 0x4736, [   13] = 0x4744, [   14] = 0x4C47, [   15] = 0x4C40,
++  [   16] = 0x242BF, [   17] = 0x23617, [   18] = 0x27352, [   19] = 0x26E8B,
++  [   20] = 0x270D2, [   21] = 0x4C57, [   22] = 0x2A351, [   23] = 0x474F,
++  [   24] = 0x45DA, [   25] = 0x4C85, [   26] = 0x27C6C, [   27] = 0x4D07,
++  [   28] = 0x4AA4, [   29] = 0x46A1, [   30] = 0x26B23, [   31] = 0x7225,
++  [   32] = 0x25A54, [   33] = 0x21A63, [   34] = 0x23E06, [   35] = 0x23F61,
++  [   36] = 0x664D, [   37] = 0x56FB, [   39] = 0x7D95, [   40] = 0x591D,
++  [   41] = 0x28BB9, [   42] = 0x3DF4, [   43] = 0x9734, [   44] = 0x27BEF,
++  [   45] = 0x5BDB, [   46] = 0x21D5E, [   47] = 0x5AA4, [   48] = 0x3625,
++  [   49] = 0x29EB0, [   50] = 0x5AD1, [   51] = 0x5BB7, [   52] = 0x5CFC,
++  [   53] = 0x676E, [   54] = 0x8593, [   55] = 0x29945, [   56] = 0x7461,
++  [   57] = 0x749D, [   58] = 0x3875, [   59] = 0x21D53, [   60] = 0x2369E,
++  [   61] = 0x26021, [   62] = 0x3EEC, [   97] = 0x258DE, [   98] = 0x3AF5,
++  [   99] = 0x7AFC, [  100] = 0x9F97, [  101] = 0x24161, [  102] = 0x2890D,
++  [  103] = 0x231EA, [  104] = 0x20A8A, [  105] = 0x2325E, [  106] = 0x430A,
++  [  107] = 0x8484, [  108] = 0x9F96, [  109] = 0x942F, [  110] = 0x4930,
++  [  111] = 0x8613, [  112] = 0x5896, [  113] = 0x974A, [  114] = 0x9218,
++  [  115] = 0x79D0, [  116] = 0x7A32, [  117] = 0x6660, [  118] = 0x6A29,
++  [  119] = 0x889D, [  120] = 0x744C, [  121] = 0x7BC5, [  122] = 0x6782,
++  [  123] = 0x7A2C, [  124] = 0x524F, [  125] = 0x9046, [  126] = 0x34E6,
++  [  127] = 0x73C4, [  128] = 0x25DB9, [  129] = 0x74C6, [  130] = 0x9FC7,
++  [  131] = 0x57B3, [  132] = 0x492F, [  133] = 0x544C, [  134] = 0x4131,
++  [  135] = 0x2368E, [  136] = 0x5818, [  137] = 0x7A72, [  138] = 0x27B65,
++  [  139] = 0x8B8F, [  140] = 0x46AE, [  141] = 0x26E88, [  142] = 0x4181,
++  [  143] = 0x25D99, [  144] = 0x7BAE, [  145] = 0x224BC, [  146] = 0x9FC8,
++  [  147] = 0x224C1, [  148] = 0x224C9, [  149] = 0x224CC, [  150] = 0x9FC9,
++  [  151] = 0x8504, [  152] = 0x235BB, [  153] = 0x40B4, [  154] = 0x9FCA,
++  [  155] = 0x44E1, [  156] = 0x2ADFF, [  157] = 0x62C1, [  158] = 0x706E,
++  [  159] = 0x9FCB, [  195] = 0x31C0, [  196] = 0x31C1, [  197] = 0x31C2,
++  [  198] = 0x31C3, [  199] = 0x31C4, [  200] = 0x2010C, [  201] = 0x31C5,
++  [  202] = 0x200D1, [  203] = 0x200CD, [  204] = 0x31C6, [  205] = 0x31C7,
++  [  206] = 0x200CB, [  207] = 0x21FE8, [  208] = 0x31C8, [  209] = 0x200CA,
++  [  210] = 0x31C9, [  211] = 0x31CA, [  212] = 0x31CB, [  213] = 0x31CC,
++  [  214] = 0x2010E, [  215] = 0x31CD, [  216] = 0x31CE, [  217] = 0x0100,
++  [  218] = 0x00C1, [  219] = 0x01CD, [  220] = 0x00C0, [  221] = 0x0112,
++  [  222] = 0x00C9, [  223] = 0x011A, [  224] = 0x00C8, [  225] = 0x014C,
++  [  226] = 0x00D3, [  227] = 0x01D1, [  228] = 0x00D2, [  230] = 0x1EBE,
++  [  232] = 0x1EC0, [  233] = 0x00CA, [  234] = 0x0101, [  235] = 0x00E1,
++  [  236] = 0x01CE, [  237] = 0x00E0, [  238] = 0x0251, [  239] = 0x0113,
++  [  240] = 0x00E9, [  241] = 0x011B, [  242] = 0x00E8, [  243] = 0x012B,
++  [  244] = 0x00ED, [  245] = 0x01D0, [  246] = 0x00EC, [  247] = 0x014D,
++  [  248] = 0x00F3, [  249] = 0x01D2, [  250] = 0x00F2, [  251] = 0x016B,
++  [  252] = 0x00FA, [  253] = 0x01D4, [  254] = 0x00F9, [  255] = 0x01D6,
++  [  256] = 0x01D8, [  257] = 0x01DA, [  292] = 0x01DC, [  293] = 0x00FC,
++  [  295] = 0x1EBF, [  297] = 0x1EC1, [  298] = 0x00EA, [  299] = 0x0261,
++  [  300] = 0x23DA, [  301] = 0x23DB, [  390] = 0x2A3A9, [  391] = 0x21145,
++  [  393] = 0x650A, [  396] = 0x4E3D, [  397] = 0x6EDD, [  398] = 0x9D4E,
++  [  399] = 0x91DF, [  402] = 0x27735, [  403] = 0x6491, [  404] = 0x4F1A,
++  [  405] = 0x4F28, [  406] = 0x4FA8, [  407] = 0x5156, [  408] = 0x5174,
++  [  409] = 0x519C, [  410] = 0x51E4, [  411] = 0x52A1, [  412] = 0x52A8,
++  [  413] = 0x533B, [  414] = 0x534E, [  415] = 0x53D1, [  416] = 0x53D8,
++  [  417] = 0x56E2, [  418] = 0x58F0, [  419] = 0x5904, [  420] = 0x5907,
++  [  421] = 0x5932, [  422] = 0x5934, [  423] = 0x5B66, [  424] = 0x5B9E,
++  [  425] = 0x5B9F, [  426] = 0x5C9A, [  427] = 0x5E86, [  428] = 0x603B,
++  [  429] = 0x6589, [  430] = 0x67FE, [  431] = 0x6804, [  432] = 0x6865,
++  [  433] = 0x6D4E, [  434] = 0x70BC, [  435] = 0x7535, [  436] = 0x7EA4,
++  [  437] = 0x7EAC, [  438] = 0x7EBA, [  439] = 0x7EC7, [  440] = 0x7ECF,
++  [  441] = 0x7EDF, [  442] = 0x7F06, [  443] = 0x7F37, [  444] = 0x827A,
++  [  445] = 0x82CF, [  446] = 0x836F, [  447] = 0x89C6, [  448] = 0x8BBE,
++  [  449] = 0x8BE2, [  450] = 0x8F66, [  451] = 0x8F67, [  452] = 0x8F6E,
++  [  487] = 0x7411, [  488] = 0x7CFC, [  489] = 0x7DCD, [  490] = 0x6946,
++  [  491] = 0x7AC9, [  492] = 0x5227, [  497] = 0x918C, [  498] = 0x78B8,
++  [  499] = 0x915E, [  500] = 0x80BC, [  502] = 0x8D0B, [  503] = 0x80F6,
++  [  504] = 0x209E7, [  507] = 0x809F, [  508] = 0x9EC7, [  509] = 0x4CCD,
++  [  510] = 0x9DC9, [  511] = 0x9E0C, [  512] = 0x4C3E, [  513] = 0x29DF6,
++  [  514] = 0x2700E, [  515] = 0x9E0A, [  516] = 0x2A133, [  517] = 0x35C1,
++  [  519] = 0x6E9A, [  520] = 0x823E, [  521] = 0x7519, [  523] = 0x4911,
++  [  524] = 0x9A6C, [  525] = 0x9A8F, [  526] = 0x9F99, [  527] = 0x7987,
++  [  528] = 0x2846C, [  529] = 0x21DCA, [  530] = 0x205D0, [  531] = 0x22AE6,
++  [  532] = 0x4E24, [  533] = 0x4E81, [  534] = 0x4E80, [  535] = 0x4E87,
++  [  536] = 0x4EBF, [  537] = 0x4EEB, [  538] = 0x4F37, [  539] = 0x344C,
++  [  540] = 0x4FBD, [  541] = 0x3E48, [  542] = 0x5003, [  543] = 0x5088,
++  [  544] = 0x347D, [  545] = 0x3493, [  546] = 0x34A5, [  547] = 0x5186,
++  [  548] = 0x5905, [  549] = 0x51DB, [  550] = 0x51FC, [  551] = 0x5205,
++  [  552] = 0x4E89, [  553] = 0x5279, [  554] = 0x5290, [  555] = 0x5327,
++  [  556] = 0x35C7, [  557] = 0x53A9, [  558] = 0x3551, [  559] = 0x53B0,
++  [  560] = 0x3553, [  561] = 0x53C2, [  562] = 0x5423, [  563] = 0x356D,
++  [  564] = 0x3572, [  565] = 0x3681, [  566] = 0x5493, [  567] = 0x54A3,
++  [  568] = 0x54B4, [  569] = 0x54B9, [  570] = 0x54D0, [  571] = 0x54EF,
++  [  572] = 0x5518, [  573] = 0x5523, [  574] = 0x5528, [  575] = 0x3598,
++  [  576] = 0x553F, [  577] = 0x35A5, [  578] = 0x35BF, [  579] = 0x55D7,
++  [  580] = 0x35C5, [  585] = 0x27D84, [  586] = 0x5525, [  588] = 0x20C42,
++  [  589] = 0x20D15, [  590] = 0x2512B, [  591] = 0x5590, [  592] = 0x22CC6,
++  [  593] = 0x39EC, [  594] = 0x20341, [  595] = 0x8E46, [  596] = 0x24DB8,
++  [  597] = 0x294E5, [  598] = 0x4053, [  599] = 0x280BE, [  600] = 0x777A,
++  [  601] = 0x22C38, [  602] = 0x3A34, [  603] = 0x47D5, [  604] = 0x2815D,
++  [  605] = 0x269F2, [  606] = 0x24DEA, [  607] = 0x64DD, [  608] = 0x20D7C,
++  [  609] = 0x20FB4, [  610] = 0x20CD5, [  611] = 0x210F4, [  612] = 0x648D,
++  [  613] = 0x8E7E, [  614] = 0x20E96, [  615] = 0x20C0B, [  616] = 0x20F64,
++  [  617] = 0x22CA9, [  618] = 0x28256, [  619] = 0x244D3, [  621] = 0x20D46,
++  [  622] = 0x29A4D, [  623] = 0x280E9, [  624] = 0x47F4, [  625] = 0x24EA7,
++  [  626] = 0x22CC2, [  627] = 0x9AB2, [  628] = 0x3A67, [  629] = 0x295F4,
++  [  630] = 0x3FED, [  631] = 0x3506, [  632] = 0x252C7, [  633] = 0x297D4,
++  [  634] = 0x278C8, [  635] = 0x22D44, [  636] = 0x9D6E, [  637] = 0x9815,
++  [  639] = 0x43D9, [  640] = 0x260A5, [  641] = 0x64B4, [  642] = 0x54E3,
++  [  643] = 0x22D4C, [  644] = 0x22BCA, [  645] = 0x21077, [  646] = 0x39FB,
++  [  647] = 0x2106F, [  682] = 0x266DA, [  683] = 0x26716, [  684] = 0x279A0,
++  [  685] = 0x64EA, [  686] = 0x25052, [  687] = 0x20C43, [  688] = 0x8E68,
++  [  689] = 0x221A1, [  690] = 0x28B4C, [  691] = 0x20731, [  693] = 0x480B,
++  [  694] = 0x201A9, [  695] = 0x3FFA, [  696] = 0x5873, [  697] = 0x22D8D,
++  [  699] = 0x245C8, [  700] = 0x204FC, [  701] = 0x26097, [  702] = 0x20F4C,
++  [  703] = 0x20D96, [  704] = 0x5579, [  705] = 0x40BB, [  706] = 0x43BA,
++  [  708] = 0x4AB4, [  709] = 0x22A66, [  710] = 0x2109D, [  711] = 0x81AA,
++  [  712] = 0x98F5, [  713] = 0x20D9C, [  714] = 0x6379, [  715] = 0x39FE,
++  [  716] = 0x22775, [  717] = 0x8DC0, [  718] = 0x56A1, [  719] = 0x647C,
++  [  720] = 0x3E43, [  722] = 0x2A601, [  723] = 0x20E09, [  724] = 0x22ACF,
++  [  725] = 0x22CC9, [  727] = 0x210C8, [  728] = 0x239C2, [  729] = 0x3992,
++  [  730] = 0x3A06, [  731] = 0x2829B, [  732] = 0x3578, [  733] = 0x25E49,
++  [  734] = 0x220C7, [  735] = 0x5652, [  736] = 0x20F31, [  737] = 0x22CB2,
++  [  738] = 0x29720, [  739] = 0x34BC, [  740] = 0x6C3D, [  741] = 0x24E3B,
++  [  744] = 0x27574, [  745] = 0x22E8B, [  746] = 0x22208, [  747] = 0x2A65B,
++  [  748] = 0x28CCD, [  749] = 0x20E7A, [  750] = 0x20C34, [  751] = 0x2681C,
++  [  752] = 0x7F93, [  753] = 0x210CF, [  754] = 0x22803, [  755] = 0x22939,
++  [  756] = 0x35FB, [  757] = 0x251E3, [  758] = 0x20E8C, [  759] = 0x20F8D,
++  [  760] = 0x20EAA, [  761] = 0x3F93, [  762] = 0x20F30, [  763] = 0x20D47,
++  [  764] = 0x2114F, [  765] = 0x20E4C, [  767] = 0x20EAB, [  768] = 0x20BA9,
++  [  769] = 0x20D48, [  770] = 0x210C0, [  771] = 0x2113D, [  772] = 0x3FF9,
++  [  773] = 0x22696, [  774] = 0x6432, [  775] = 0x20FAD, [  780] = 0x233F4,
++  [  781] = 0x27639, [  782] = 0x22BCE, [  783] = 0x20D7E, [  784] = 0x20D7F,
++  [  785] = 0x22C51, [  786] = 0x22C55, [  787] = 0x3A18, [  788] = 0x20E98,
++  [  789] = 0x210C7, [  790] = 0x20F2E, [  791] = 0x2A632, [  792] = 0x26B50,
++  [  793] = 0x28CD2, [  794] = 0x28D99, [  795] = 0x28CCA, [  796] = 0x95AA,
++  [  797] = 0x54CC, [  798] = 0x82C4, [  799] = 0x55B9, [  801] = 0x29EC3,
++  [  802] = 0x9C26, [  803] = 0x9AB6, [  804] = 0x2775E, [  805] = 0x22DEE,
++  [  806] = 0x7140, [  807] = 0x816D, [  808] = 0x80EC, [  809] = 0x5C1C,
++  [  810] = 0x26572, [  811] = 0x8134, [  812] = 0x3797, [  813] = 0x535F,
++  [  814] = 0x280BD, [  815] = 0x91B6, [  816] = 0x20EFA, [  817] = 0x20E0F,
++  [  818] = 0x20E77, [  819] = 0x20EFB, [  820] = 0x35DD, [  821] = 0x24DEB,
++  [  822] = 0x3609, [  823] = 0x20CD6, [  824] = 0x56AF, [  825] = 0x227B5,
++  [  826] = 0x210C9, [  827] = 0x20E10, [  828] = 0x20E78, [  829] = 0x21078,
++  [  830] = 0x21148, [  831] = 0x28207, [  832] = 0x21455, [  833] = 0x20E79,
++  [  834] = 0x24E50, [  835] = 0x22DA4, [  836] = 0x5A54, [  837] = 0x2101D,
++  [  838] = 0x2101E, [  839] = 0x210F5, [  840] = 0x210F6, [  841] = 0x579C,
++  [  842] = 0x20E11, [  877] = 0x27694, [  878] = 0x282CD, [  879] = 0x20FB5,
++  [  880] = 0x20E7B, [  881] = 0x2517E, [  882] = 0x3703, [  883] = 0x20FB6,
++  [  884] = 0x21180, [  885] = 0x252D8, [  886] = 0x2A2BD, [  887] = 0x249DA,
++  [  888] = 0x2183A, [  889] = 0x24177, [  890] = 0x2827C, [  891] = 0x5899,
++  [  892] = 0x5268, [  893] = 0x361A, [  894] = 0x2573D, [  895] = 0x7BB2,
++  [  896] = 0x5B68, [  897] = 0x4800, [  898] = 0x4B2C, [  899] = 0x9F27,
++  [  900] = 0x49E7, [  901] = 0x9C1F, [  902] = 0x9B8D, [  903] = 0x25B74,
++  [  904] = 0x2313D, [  905] = 0x55FB, [  906] = 0x35F2, [  907] = 0x5689,
++  [  908] = 0x4E28, [  909] = 0x5902, [  910] = 0x21BC1, [  911] = 0x2F878,
++  [  912] = 0x9751, [  913] = 0x20086, [  914] = 0x4E5B, [  915] = 0x4EBB,
++  [  916] = 0x353E, [  917] = 0x5C23, [  918] = 0x5F51, [  919] = 0x5FC4,
++  [  920] = 0x38FA, [  921] = 0x624C, [  922] = 0x6535, [  923] = 0x6B7A,
++  [  924] = 0x6C35, [  925] = 0x6C3A, [  926] = 0x706C, [  927] = 0x722B,
++  [  928] = 0x4E2C, [  929] = 0x72AD, [  930] = 0x248E9, [  931] = 0x7F52,
++  [  932] = 0x793B, [  933] = 0x7CF9, [  934] = 0x7F53, [  935] = 0x2626A,
++  [  936] = 0x34C1, [  938] = 0x2634B, [  939] = 0x8002, [  940] = 0x8080,
++  [  941] = 0x26612, [  942] = 0x26951, [  943] = 0x535D, [  944] = 0x8864,
++  [  945] = 0x89C1, [  946] = 0x278B2, [  947] = 0x8BA0, [  948] = 0x8D1D,
++  [  949] = 0x9485, [  950] = 0x9578, [  951] = 0x957F, [  952] = 0x95E8,
++  [  953] = 0x28E0F, [  954] = 0x97E6, [  955] = 0x9875, [  956] = 0x98CE,
++  [  957] = 0x98DE, [  958] = 0x9963, [  959] = 0x29810, [  960] = 0x9C7C,
++  [  961] = 0x9E1F, [  962] = 0x9EC4, [  963] = 0x6B6F, [  964] = 0xF907,
++  [  965] = 0x4E37, [  966] = 0x20087, [  967] = 0x961D, [  968] = 0x6237,
++  [  969] = 0x94A2, [  975] = 0x503B, [  976] = 0x6DFE, [  977] = 0x29C73,
++  [  978] = 0x9FA6, [  979] = 0x3DC9, [  980] = 0x888F, [  981] = 0x2414E,
++  [  982] = 0x7077, [  983] = 0x5CF5, [  984] = 0x4B20, [  985] = 0x251CD,
++  [  986] = 0x3559, [  987] = 0x25D30, [  988] = 0x6122, [  989] = 0x28A32,
++  [  990] = 0x8FA7, [  991] = 0x91F6, [  992] = 0x7191, [  993] = 0x6719,
++  [  994] = 0x73BA, [  995] = 0x23281, [  996] = 0x2A107, [  997] = 0x3C8B,
++  [  998] = 0x21980, [  999] = 0x4B10, [ 1000] = 0x78E4, [ 1001] = 0x7402,
++  [ 1002] = 0x51AE, [ 1003] = 0x2870F, [ 1004] = 0x4009, [ 1005] = 0x6A63,
++  [ 1006] = 0x2A2BA, [ 1007] = 0x4223, [ 1008] = 0x860F, [ 1009] = 0x20A6F,
++  [ 1010] = 0x7A2A, [ 1011] = 0x29947, [ 1012] = 0x28AEA, [ 1013] = 0x9755,
++  [ 1014] = 0x704D, [ 1015] = 0x5324, [ 1016] = 0x2207E, [ 1017] = 0x93F4,
++  [ 1018] = 0x76D9, [ 1019] = 0x289E3, [ 1020] = 0x9FA7, [ 1021] = 0x77DD,
++  [ 1022] = 0x4EA3, [ 1023] = 0x4FF0, [ 1024] = 0x50BC, [ 1025] = 0x4E2F,
++  [ 1026] = 0x4F17, [ 1027] = 0x9FA8, [ 1028] = 0x5434, [ 1029] = 0x7D8B,
++  [ 1030] = 0x5892, [ 1031] = 0x58D0, [ 1032] = 0x21DB6, [ 1033] = 0x5E92,
++  [ 1034] = 0x5E99, [ 1035] = 0x5FC2, [ 1036] = 0x22712, [ 1037] = 0x658B,
++  [ 1072] = 0x233F9, [ 1073] = 0x6919, [ 1074] = 0x6A43, [ 1075] = 0x23C63,
++  [ 1076] = 0x6CFF, [ 1078] = 0x7200, [ 1079] = 0x24505, [ 1080] = 0x738C,
++  [ 1081] = 0x3EDB, [ 1082] = 0x24A13, [ 1083] = 0x5B15, [ 1084] = 0x74B9,
++  [ 1085] = 0x8B83, [ 1086] = 0x25CA4, [ 1087] = 0x25695, [ 1088] = 0x7A93,
++  [ 1089] = 0x7BEC, [ 1090] = 0x7CC3, [ 1091] = 0x7E6C, [ 1092] = 0x82F8,
++  [ 1093] = 0x8597, [ 1094] = 0x9FA9, [ 1095] = 0x8890, [ 1096] = 0x9FAA,
++  [ 1097] = 0x8EB9, [ 1098] = 0x9FAB, [ 1099] = 0x8FCF, [ 1100] = 0x855F,
++  [ 1101] = 0x99E0, [ 1102] = 0x9221, [ 1103] = 0x9FAC, [ 1104] = 0x28DB9,
++  [ 1105] = 0x2143F, [ 1106] = 0x4071, [ 1107] = 0x42A2, [ 1108] = 0x5A1A,
++  [ 1112] = 0x9868, [ 1113] = 0x676B, [ 1114] = 0x4276, [ 1115] = 0x573D,
++  [ 1117] = 0x85D6, [ 1118] = 0x2497B, [ 1119] = 0x82BF, [ 1120] = 0x2710D,
++  [ 1121] = 0x4C81, [ 1122] = 0x26D74, [ 1123] = 0x5D7B, [ 1124] = 0x26B15,
++  [ 1125] = 0x26FBE, [ 1126] = 0x9FAD, [ 1127] = 0x9FAE, [ 1128] = 0x5B96,
++  [ 1129] = 0x9FAF, [ 1130] = 0x66E7, [ 1131] = 0x7E5B, [ 1132] = 0x6E57,
++  [ 1133] = 0x79CA, [ 1134] = 0x3D88, [ 1135] = 0x44C3, [ 1136] = 0x23256,
++  [ 1137] = 0x22796, [ 1138] = 0x439A, [ 1139] = 0x4536, [ 1141] = 0x5CD5,
++  [ 1142] = 0x23B1A, [ 1143] = 0x8AF9, [ 1144] = 0x5C78, [ 1145] = 0x3D12,
++  [ 1146] = 0x23551, [ 1147] = 0x5D78, [ 1148] = 0x9FB2, [ 1149] = 0x7157,
++  [ 1150] = 0x4558, [ 1151] = 0x240EC, [ 1152] = 0x21E23, [ 1153] = 0x4C77,
++  [ 1154] = 0x3978, [ 1155] = 0x344A, [ 1156] = 0x201A4, [ 1157] = 0x26C41,
++  [ 1158] = 0x8ACC, [ 1159] = 0x4FB4, [ 1160] = 0x20239, [ 1161] = 0x59BF,
++  [ 1162] = 0x816C, [ 1163] = 0x9856, [ 1164] = 0x298FA, [ 1165] = 0x5F3B,
++  [ 1170] = 0x20B9F, [ 1172] = 0x221C1, [ 1173] = 0x2896D, [ 1174] = 0x4102,
++  [ 1175] = 0x46BB, [ 1176] = 0x29079, [ 1177] = 0x3F07, [ 1178] = 0x9FB3,
++  [ 1179] = 0x2A1B5, [ 1180] = 0x40F8, [ 1181] = 0x37D6, [ 1182] = 0x46F7,
++  [ 1183] = 0x26C46, [ 1184] = 0x417C, [ 1185] = 0x286B2, [ 1186] = 0x273FF,
++  [ 1187] = 0x456D, [ 1188] = 0x38D4, [ 1189] = 0x2549A, [ 1190] = 0x4561,
++  [ 1191] = 0x451B, [ 1192] = 0x4D89, [ 1193] = 0x4C7B, [ 1194] = 0x4D76,
++  [ 1195] = 0x45EA, [ 1196] = 0x3FC8, [ 1197] = 0x24B0F, [ 1198] = 0x3661,
++  [ 1199] = 0x44DE, [ 1200] = 0x44BD, [ 1201] = 0x41ED, [ 1202] = 0x5D3E,
++  [ 1203] = 0x5D48, [ 1204] = 0x5D56, [ 1205] = 0x3DFC, [ 1206] = 0x380F,
++  [ 1207] = 0x5DA4, [ 1208] = 0x5DB9, [ 1209] = 0x3820, [ 1210] = 0x3838,
++  [ 1211] = 0x5E42, [ 1212] = 0x5EBD, [ 1213] = 0x5F25, [ 1214] = 0x5F83,
++  [ 1215] = 0x3908, [ 1216] = 0x3914, [ 1217] = 0x393F, [ 1218] = 0x394D,
++  [ 1219] = 0x60D7, [ 1220] = 0x613D, [ 1221] = 0x5CE5, [ 1222] = 0x3989,
++  [ 1223] = 0x61B7, [ 1224] = 0x61B9, [ 1225] = 0x61CF, [ 1226] = 0x39B8,
++  [ 1227] = 0x622C, [ 1228] = 0x6290, [ 1229] = 0x62E5, [ 1230] = 0x6318,
++  [ 1231] = 0x39F8, [ 1232] = 0x56B1, [ 1267] = 0x3A03, [ 1268] = 0x63E2,
++  [ 1269] = 0x63FB, [ 1270] = 0x6407, [ 1271] = 0x645A, [ 1272] = 0x3A4B,
++  [ 1273] = 0x64C0, [ 1274] = 0x5D15, [ 1275] = 0x5621, [ 1276] = 0x9F9F,
++  [ 1277] = 0x3A97, [ 1278] = 0x6586, [ 1279] = 0x3ABD, [ 1280] = 0x65FF,
++  [ 1281] = 0x6653, [ 1282] = 0x3AF2, [ 1283] = 0x6692, [ 1284] = 0x3B22,
++  [ 1285] = 0x6716, [ 1286] = 0x3B42, [ 1287] = 0x67A4, [ 1288] = 0x6800,
++  [ 1289] = 0x3B58, [ 1290] = 0x684A, [ 1291] = 0x6884, [ 1292] = 0x3B72,
++  [ 1293] = 0x3B71, [ 1294] = 0x3B7B, [ 1295] = 0x6909, [ 1296] = 0x6943,
++  [ 1297] = 0x725C, [ 1298] = 0x6964, [ 1299] = 0x699F, [ 1300] = 0x6985,
++  [ 1301] = 0x3BBC, [ 1302] = 0x69D6, [ 1303] = 0x3BDD, [ 1304] = 0x6A65,
++  [ 1305] = 0x6A74, [ 1306] = 0x6A71, [ 1307] = 0x6A82, [ 1308] = 0x3BEC,
++  [ 1309] = 0x6A99, [ 1310] = 0x3BF2, [ 1311] = 0x6AAB, [ 1312] = 0x6AB5,
++  [ 1313] = 0x6AD4, [ 1314] = 0x6AF6, [ 1315] = 0x6B81, [ 1316] = 0x6BC1,
++  [ 1317] = 0x6BEA, [ 1318] = 0x6C75, [ 1319] = 0x6CAA, [ 1320] = 0x3CCB,
++  [ 1321] = 0x6D02, [ 1322] = 0x6D06, [ 1323] = 0x6D26, [ 1324] = 0x6D81,
++  [ 1325] = 0x3CEF, [ 1326] = 0x6DA4, [ 1327] = 0x6DB1, [ 1328] = 0x6E15,
++  [ 1329] = 0x6E18, [ 1330] = 0x6E29, [ 1331] = 0x6E86, [ 1332] = 0x289C0,
++  [ 1333] = 0x6EBB, [ 1334] = 0x6EE2, [ 1335] = 0x6EDA, [ 1336] = 0x9F7F,
++  [ 1337] = 0x6EE8, [ 1338] = 0x6EE9, [ 1339] = 0x6F24, [ 1340] = 0x6F34,
++  [ 1341] = 0x3D46, [ 1342] = 0x23F41, [ 1343] = 0x6F81, [ 1344] = 0x6FBE,
++  [ 1345] = 0x3D6A, [ 1346] = 0x3D75, [ 1347] = 0x71B7, [ 1348] = 0x5C99,
++  [ 1349] = 0x3D8A, [ 1350] = 0x702C, [ 1351] = 0x3D91, [ 1352] = 0x7050,
++  [ 1353] = 0x7054, [ 1354] = 0x706F, [ 1355] = 0x707F, [ 1356] = 0x7089,
++  [ 1357] = 0x20325, [ 1358] = 0x43C1, [ 1359] = 0x35F1, [ 1360] = 0x20ED8,
++  [ 1365] = 0x23ED7, [ 1366] = 0x57BE, [ 1367] = 0x26ED3, [ 1368] = 0x713E,
++  [ 1369] = 0x257E0, [ 1370] = 0x364E, [ 1371] = 0x69A2, [ 1372] = 0x28BE9,
++  [ 1373] = 0x5B74, [ 1374] = 0x7A49, [ 1375] = 0x258E1, [ 1376] = 0x294D9,
++  [ 1377] = 0x7A65, [ 1378] = 0x7A7D, [ 1379] = 0x259AC, [ 1380] = 0x7ABB,
++  [ 1381] = 0x7AB0, [ 1382] = 0x7AC2, [ 1383] = 0x7AC3, [ 1384] = 0x71D1,
++  [ 1385] = 0x2648D, [ 1386] = 0x41CA, [ 1387] = 0x7ADA, [ 1388] = 0x7ADD,
++  [ 1389] = 0x7AEA, [ 1390] = 0x41EF, [ 1391] = 0x54B2, [ 1392] = 0x25C01,
++  [ 1393] = 0x7B0B, [ 1394] = 0x7B55, [ 1395] = 0x7B29, [ 1396] = 0x2530E,
++  [ 1397] = 0x25CFE, [ 1398] = 0x7BA2, [ 1399] = 0x7B6F, [ 1400] = 0x839C,
++  [ 1401] = 0x25BB4, [ 1402] = 0x26C7F, [ 1403] = 0x7BD0, [ 1404] = 0x8421,
++  [ 1405] = 0x7B92, [ 1407] = 0x25D20, [ 1408] = 0x3DAD, [ 1409] = 0x25C65,
++  [ 1410] = 0x8492, [ 1411] = 0x7BFA, [ 1413] = 0x7C35, [ 1414] = 0x25CC1,
++  [ 1415] = 0x7C44, [ 1416] = 0x7C83, [ 1417] = 0x24882, [ 1418] = 0x7CA6,
++  [ 1419] = 0x667D, [ 1420] = 0x24578, [ 1421] = 0x7CC9, [ 1422] = 0x7CC7,
++  [ 1423] = 0x7CE6, [ 1424] = 0x7C74, [ 1425] = 0x7CF3, [ 1426] = 0x7CF5,
++  [ 1462] = 0x7E67, [ 1463] = 0x451D, [ 1464] = 0x26E44, [ 1465] = 0x7D5D,
++  [ 1466] = 0x26ED6, [ 1467] = 0x748D, [ 1468] = 0x7D89, [ 1469] = 0x7DAB,
++  [ 1470] = 0x7135, [ 1471] = 0x7DB3, [ 1473] = 0x24057, [ 1474] = 0x26029,
++  [ 1475] = 0x7DE4, [ 1476] = 0x3D13, [ 1477] = 0x7DF5, [ 1478] = 0x217F9,
++  [ 1479] = 0x7DE5, [ 1480] = 0x2836D, [ 1482] = 0x26121, [ 1483] = 0x2615A,
++  [ 1484] = 0x7E6E, [ 1485] = 0x7E92, [ 1486] = 0x432B, [ 1487] = 0x946C,
++  [ 1488] = 0x7E27, [ 1489] = 0x7F40, [ 1490] = 0x7F41, [ 1491] = 0x7F47,
++  [ 1492] = 0x7936, [ 1493] = 0x262D0, [ 1494] = 0x99E1, [ 1495] = 0x7F97,
++  [ 1496] = 0x26351, [ 1497] = 0x7FA3, [ 1498] = 0x21661, [ 1499] = 0x20068,
++  [ 1500] = 0x455C, [ 1501] = 0x23766, [ 1502] = 0x4503, [ 1503] = 0x2833A,
++  [ 1504] = 0x7FFA, [ 1505] = 0x26489, [ 1507] = 0x8008, [ 1508] = 0x801D,
++  [ 1510] = 0x802F, [ 1511] = 0x2A087, [ 1512] = 0x26CC3, [ 1513] = 0x803B,
++  [ 1514] = 0x803C, [ 1515] = 0x8061, [ 1516] = 0x22714, [ 1517] = 0x4989,
++  [ 1518] = 0x26626, [ 1519] = 0x23DE3, [ 1520] = 0x266E8, [ 1521] = 0x6725,
++  [ 1522] = 0x80A7, [ 1523] = 0x28A48, [ 1524] = 0x8107, [ 1525] = 0x811A,
++  [ 1526] = 0x58B0, [ 1527] = 0x226F6, [ 1528] = 0x6C7F, [ 1529] = 0x26498,
++  [ 1530] = 0x24FB8, [ 1531] = 0x64E7, [ 1532] = 0x2148A, [ 1533] = 0x8218,
++  [ 1534] = 0x2185E, [ 1535] = 0x6A53, [ 1536] = 0x24A65, [ 1537] = 0x24A95,
++  [ 1538] = 0x447A, [ 1539] = 0x8229, [ 1540] = 0x20B0D, [ 1541] = 0x26A52,
++  [ 1542] = 0x23D7E, [ 1543] = 0x4FF9, [ 1544] = 0x214FD, [ 1545] = 0x84E2,
++  [ 1546] = 0x8362, [ 1547] = 0x26B0A, [ 1548] = 0x249A7, [ 1549] = 0x23530,
++  [ 1550] = 0x21773, [ 1551] = 0x23DF8, [ 1552] = 0x82AA, [ 1553] = 0x691B,
++  [ 1554] = 0x2F994, [ 1555] = 0x41DB, [ 1560] = 0x854B, [ 1561] = 0x82D0,
++  [ 1562] = 0x831A, [ 1563] = 0x20E16, [ 1564] = 0x217B4, [ 1565] = 0x36C1,
++  [ 1566] = 0x2317D, [ 1567] = 0x2355A, [ 1568] = 0x827B, [ 1569] = 0x82E2,
++  [ 1570] = 0x8318, [ 1571] = 0x23E8B, [ 1572] = 0x26DA3, [ 1573] = 0x26B05,
++  [ 1574] = 0x26B97, [ 1575] = 0x235CE, [ 1576] = 0x3DBF, [ 1577] = 0x831D,
++  [ 1578] = 0x55EC, [ 1579] = 0x8385, [ 1580] = 0x450B, [ 1581] = 0x26DA5,
++  [ 1582] = 0x83AC, [ 1584] = 0x83D3, [ 1585] = 0x347E, [ 1586] = 0x26ED4,
++  [ 1587] = 0x6A57, [ 1588] = 0x855A, [ 1589] = 0x3496, [ 1590] = 0x26E42,
++  [ 1591] = 0x22EEF, [ 1592] = 0x8458, [ 1593] = 0x25BE4, [ 1594] = 0x8471,
++  [ 1595] = 0x3DD3, [ 1596] = 0x44E4, [ 1597] = 0x6AA7, [ 1598] = 0x844A,
++  [ 1599] = 0x23CB5, [ 1600] = 0x7958, [ 1602] = 0x26B96, [ 1603] = 0x26E77,
++  [ 1604] = 0x26E43, [ 1605] = 0x84DE, [ 1607] = 0x8391, [ 1608] = 0x44A0,
++  [ 1609] = 0x8493, [ 1610] = 0x84E4, [ 1611] = 0x25C91, [ 1612] = 0x4240,
++  [ 1613] = 0x25CC0, [ 1614] = 0x4543, [ 1615] = 0x8534, [ 1616] = 0x5AF2,
++  [ 1617] = 0x26E99, [ 1618] = 0x4527, [ 1619] = 0x8573, [ 1620] = 0x4516,
++  [ 1621] = 0x67BF, [ 1622] = 0x8616, [ 1657] = 0x28625, [ 1658] = 0x2863B,
++  [ 1659] = 0x85C1, [ 1660] = 0x27088, [ 1661] = 0x8602, [ 1662] = 0x21582,
++  [ 1663] = 0x270CD, [ 1664] = 0x2F9B2, [ 1665] = 0x456A, [ 1666] = 0x8628,
++  [ 1667] = 0x3648, [ 1668] = 0x218A2, [ 1669] = 0x53F7, [ 1670] = 0x2739A,
++  [ 1671] = 0x867E, [ 1672] = 0x8771, [ 1673] = 0x2A0F8, [ 1674] = 0x87EE,
++  [ 1675] = 0x22C27, [ 1676] = 0x87B1, [ 1677] = 0x87DA, [ 1678] = 0x880F,
++  [ 1679] = 0x5661, [ 1680] = 0x866C, [ 1681] = 0x6856, [ 1682] = 0x460F,
++  [ 1683] = 0x8845, [ 1684] = 0x8846, [ 1685] = 0x275E0, [ 1686] = 0x23DB9,
++  [ 1687] = 0x275E4, [ 1688] = 0x885E, [ 1689] = 0x889C, [ 1690] = 0x465B,
++  [ 1691] = 0x88B4, [ 1692] = 0x88B5, [ 1693] = 0x63C1, [ 1694] = 0x88C5,
++  [ 1695] = 0x7777, [ 1696] = 0x2770F, [ 1697] = 0x8987, [ 1698] = 0x898A,
++  [ 1701] = 0x89A7, [ 1702] = 0x89BC, [ 1703] = 0x28A25, [ 1704] = 0x89E7,
++  [ 1705] = 0x27924, [ 1706] = 0x27ABD, [ 1707] = 0x8A9C, [ 1708] = 0x7793,
++  [ 1709] = 0x91FE, [ 1710] = 0x8A90, [ 1711] = 0x27A59, [ 1712] = 0x7AE9,
++  [ 1713] = 0x27B3A, [ 1714] = 0x23F8F, [ 1715] = 0x4713, [ 1716] = 0x27B38,
++  [ 1717] = 0x717C, [ 1718] = 0x8B0C, [ 1719] = 0x8B1F, [ 1720] = 0x25430,
++  [ 1721] = 0x25565, [ 1722] = 0x8B3F, [ 1723] = 0x8B4C, [ 1724] = 0x8B4D,
++  [ 1725] = 0x8AA9, [ 1726] = 0x24A7A, [ 1727] = 0x8B90, [ 1728] = 0x8B9B,
++  [ 1729] = 0x8AAF, [ 1730] = 0x216DF, [ 1731] = 0x4615, [ 1732] = 0x884F,
++  [ 1733] = 0x8C9B, [ 1734] = 0x27D54, [ 1735] = 0x27D8F, [ 1736] = 0x2F9D4,
++  [ 1737] = 0x3725, [ 1738] = 0x27D53, [ 1739] = 0x8CD6, [ 1740] = 0x27D98,
++  [ 1741] = 0x27DBD, [ 1742] = 0x8D12, [ 1743] = 0x8D03, [ 1744] = 0x21910,
++  [ 1745] = 0x8CDB, [ 1746] = 0x705C, [ 1747] = 0x8D11, [ 1748] = 0x24CC9,
++  [ 1749] = 0x3ED0, [ 1755] = 0x8DA9, [ 1756] = 0x28002, [ 1757] = 0x21014,
++  [ 1758] = 0x2498A, [ 1759] = 0x3B7C, [ 1760] = 0x281BC, [ 1761] = 0x2710C,
++  [ 1762] = 0x7AE7, [ 1763] = 0x8EAD, [ 1764] = 0x8EB6, [ 1765] = 0x8EC3,
++  [ 1766] = 0x92D4, [ 1767] = 0x8F19, [ 1768] = 0x8F2D, [ 1769] = 0x28365,
++  [ 1770] = 0x28412, [ 1771] = 0x8FA5, [ 1772] = 0x9303, [ 1773] = 0x2A29F,
++  [ 1774] = 0x20A50, [ 1775] = 0x8FB3, [ 1776] = 0x492A, [ 1777] = 0x289DE,
++  [ 1778] = 0x2853D, [ 1779] = 0x23DBB, [ 1780] = 0x5EF8, [ 1781] = 0x23262,
++  [ 1782] = 0x8FF9, [ 1783] = 0x2A014, [ 1784] = 0x286BC, [ 1785] = 0x28501,
++  [ 1786] = 0x22325, [ 1787] = 0x3980, [ 1788] = 0x26ED7, [ 1789] = 0x9037,
++  [ 1790] = 0x2853C, [ 1791] = 0x27ABE, [ 1792] = 0x9061, [ 1793] = 0x2856C,
++  [ 1794] = 0x2860B, [ 1795] = 0x90A8, [ 1796] = 0x28713, [ 1797] = 0x90C4,
++  [ 1798] = 0x286E6, [ 1799] = 0x90AE, [ 1801] = 0x9167, [ 1802] = 0x3AF0,
++  [ 1803] = 0x91A9, [ 1804] = 0x91C4, [ 1805] = 0x7CAC, [ 1806] = 0x28933,
++  [ 1807] = 0x21E89, [ 1808] = 0x920E, [ 1809] = 0x6C9F, [ 1810] = 0x9241,
++  [ 1811] = 0x9262, [ 1812] = 0x255B9, [ 1814] = 0x28AC6, [ 1815] = 0x23C9B,
++  [ 1816] = 0x28B0C, [ 1817] = 0x255DB, [ 1852] = 0x20D31, [ 1853] = 0x932C,
++  [ 1854] = 0x936B, [ 1855] = 0x28AE1, [ 1856] = 0x28BEB, [ 1857] = 0x708F,
++  [ 1858] = 0x5AC3, [ 1859] = 0x28AE2, [ 1860] = 0x28AE5, [ 1861] = 0x4965,
++  [ 1862] = 0x9244, [ 1863] = 0x28BEC, [ 1864] = 0x28C39, [ 1865] = 0x28BFF,
++  [ 1866] = 0x9373, [ 1867] = 0x945B, [ 1868] = 0x8EBC, [ 1869] = 0x9585,
++  [ 1870] = 0x95A6, [ 1871] = 0x9426, [ 1872] = 0x95A0, [ 1873] = 0x6FF6,
++  [ 1874] = 0x42B9, [ 1875] = 0x2267A, [ 1876] = 0x286D8, [ 1877] = 0x2127C,
++  [ 1878] = 0x23E2E, [ 1879] = 0x49DF, [ 1880] = 0x6C1C, [ 1881] = 0x967B,
++  [ 1882] = 0x9696, [ 1883] = 0x416C, [ 1884] = 0x96A3, [ 1885] = 0x26ED5,
++  [ 1886] = 0x61DA, [ 1887] = 0x96B6, [ 1888] = 0x78F5, [ 1889] = 0x28AE0,
++  [ 1890] = 0x96BD, [ 1891] = 0x53CC, [ 1892] = 0x49A1, [ 1893] = 0x26CB8,
++  [ 1894] = 0x20274, [ 1895] = 0x26410, [ 1896] = 0x290AF, [ 1897] = 0x290E5,
++  [ 1898] = 0x24AD1, [ 1899] = 0x21915, [ 1900] = 0x2330A, [ 1901] = 0x9731,
++  [ 1902] = 0x8642, [ 1903] = 0x9736, [ 1904] = 0x4A0F, [ 1905] = 0x453D,
++  [ 1906] = 0x4585, [ 1907] = 0x24AE9, [ 1908] = 0x7075, [ 1909] = 0x5B41,
++  [ 1910] = 0x971B, [ 1912] = 0x291D5, [ 1913] = 0x9757, [ 1914] = 0x5B4A,
++  [ 1915] = 0x291EB, [ 1916] = 0x975F, [ 1917] = 0x9425, [ 1918] = 0x50D0,
++  [ 1919] = 0x230B7, [ 1920] = 0x230BC, [ 1921] = 0x9789, [ 1922] = 0x979F,
++  [ 1923] = 0x97B1, [ 1924] = 0x97BE, [ 1925] = 0x97C0, [ 1926] = 0x97D2,
++  [ 1927] = 0x97E0, [ 1928] = 0x2546C, [ 1929] = 0x97EE, [ 1930] = 0x741C,
++  [ 1931] = 0x29433, [ 1933] = 0x97F5, [ 1934] = 0x2941D, [ 1935] = 0x2797A,
++  [ 1936] = 0x4AD1, [ 1937] = 0x9834, [ 1938] = 0x9833, [ 1939] = 0x984B,
++  [ 1940] = 0x9866, [ 1941] = 0x3B0E, [ 1942] = 0x27175, [ 1943] = 0x3D51,
++  [ 1944] = 0x20630, [ 1945] = 0x2415C, [ 1950] = 0x25706, [ 1951] = 0x98CA,
++  [ 1952] = 0x98B7, [ 1953] = 0x98C8, [ 1954] = 0x98C7, [ 1955] = 0x4AFF,
++  [ 1956] = 0x26D27, [ 1957] = 0x216D3, [ 1958] = 0x55B0, [ 1959] = 0x98E1,
++  [ 1960] = 0x98E6, [ 1961] = 0x98EC, [ 1962] = 0x9378, [ 1963] = 0x9939,
++  [ 1964] = 0x24A29, [ 1965] = 0x4B72, [ 1966] = 0x29857, [ 1967] = 0x29905,
++  [ 1968] = 0x99F5, [ 1969] = 0x9A0C, [ 1970] = 0x9A3B, [ 1971] = 0x9A10,
++  [ 1972] = 0x9A58, [ 1973] = 0x25725, [ 1974] = 0x36C4, [ 1975] = 0x290B1,
++  [ 1976] = 0x29BD5, [ 1977] = 0x9AE0, [ 1978] = 0x9AE2, [ 1979] = 0x29B05,
++  [ 1980] = 0x9AF4, [ 1981] = 0x4C0E, [ 1982] = 0x9B14, [ 1983] = 0x9B2D,
++  [ 1984] = 0x28600, [ 1985] = 0x5034, [ 1986] = 0x9B34, [ 1987] = 0x269A8,
++  [ 1988] = 0x38C3, [ 1989] = 0x2307D, [ 1990] = 0x9B50, [ 1991] = 0x9B40,
++  [ 1992] = 0x29D3E, [ 1993] = 0x5A45, [ 1994] = 0x21863, [ 1995] = 0x9B8E,
++  [ 1996] = 0x2424B, [ 1997] = 0x9C02, [ 1998] = 0x9BFF, [ 1999] = 0x9C0C,
++  [ 2000] = 0x29E68, [ 2001] = 0x9DD4, [ 2002] = 0x29FB7, [ 2003] = 0x2A192,
++  [ 2004] = 0x2A1AB, [ 2005] = 0x2A0E1, [ 2006] = 0x2A123, [ 2007] = 0x2A1DF,
++  [ 2008] = 0x9D7E, [ 2009] = 0x9D83, [ 2010] = 0x2A134, [ 2011] = 0x9E0E,
++  [ 2012] = 0x6888, [ 2047] = 0x9DC4, [ 2048] = 0x2215B, [ 2049] = 0x2A193,
++  [ 2050] = 0x2A220, [ 2051] = 0x2193B, [ 2052] = 0x2A233, [ 2053] = 0x9D39,
++  [ 2054] = 0x2A0B9, [ 2055] = 0x2A2B4, [ 2056] = 0x9E90, [ 2057] = 0x9E95,
++  [ 2058] = 0x9E9E, [ 2059] = 0x9EA2, [ 2060] = 0x4D34, [ 2061] = 0x9EAA,
++  [ 2062] = 0x9EAF, [ 2063] = 0x24364, [ 2064] = 0x9EC1, [ 2065] = 0x3B60,
++  [ 2066] = 0x39E5, [ 2067] = 0x3D1D, [ 2068] = 0x4F32, [ 2069] = 0x37BE,
++  [ 2070] = 0x28C2B, [ 2071] = 0x9F02, [ 2072] = 0x9F08, [ 2073] = 0x4B96,
++  [ 2074] = 0x9424, [ 2075] = 0x26DA2, [ 2076] = 0x9F17, [ 2078] = 0x9F39,
++  [ 2079] = 0x569F, [ 2080] = 0x568A, [ 2081] = 0x9F45, [ 2082] = 0x99B8,
++  [ 2083] = 0x2908B, [ 2084] = 0x97F2, [ 2085] = 0x847F, [ 2086] = 0x9F62,
++  [ 2087] = 0x9F69, [ 2088] = 0x7ADC, [ 2089] = 0x9F8E, [ 2090] = 0x7216,
++  [ 2091] = 0x4BBE, [ 2092] = 0x24975, [ 2093] = 0x249BB, [ 2094] = 0x7177,
++  [ 2095] = 0x249F8, [ 2096] = 0x24348, [ 2097] = 0x24A51, [ 2098] = 0x739E,
++  [ 2099] = 0x28BDA, [ 2100] = 0x218FA, [ 2101] = 0x799F, [ 2102] = 0x2897E,
++  [ 2103] = 0x28E36, [ 2104] = 0x9369, [ 2105] = 0x93F3, [ 2106] = 0x28A44,
++  [ 2107] = 0x92EC, [ 2108] = 0x9381, [ 2109] = 0x93CB, [ 2110] = 0x2896C,
++  [ 2111] = 0x244B9, [ 2112] = 0x7217, [ 2113] = 0x3EEB, [ 2114] = 0x7772,
++  [ 2115] = 0x7A43, [ 2116] = 0x70D0, [ 2117] = 0x24473, [ 2118] = 0x243F8,
++  [ 2119] = 0x717E, [ 2120] = 0x217EF, [ 2121] = 0x70A3, [ 2122] = 0x218BE,
++  [ 2123] = 0x23599, [ 2124] = 0x3EC7, [ 2125] = 0x21885, [ 2126] = 0x2542F,
++  [ 2127] = 0x217F8, [ 2128] = 0x3722, [ 2129] = 0x216FB, [ 2130] = 0x21839,
++  [ 2131] = 0x36E1, [ 2132] = 0x21774, [ 2133] = 0x218D1, [ 2134] = 0x25F4B,
++  [ 2135] = 0x3723, [ 2136] = 0x216C0, [ 2137] = 0x575B, [ 2138] = 0x24A25,
++  [ 2139] = 0x213FE, [ 2140] = 0x212A8, [ 2145] = 0x213C6, [ 2146] = 0x214B6,
++  [ 2147] = 0x8503, [ 2148] = 0x236A6, [ 2150] = 0x8455, [ 2151] = 0x24994,
++  [ 2152] = 0x27165, [ 2153] = 0x23E31, [ 2154] = 0x2555C, [ 2155] = 0x23EFB,
++  [ 2156] = 0x27052, [ 2157] = 0x44F4, [ 2158] = 0x236EE, [ 2159] = 0x2999D,
++  [ 2160] = 0x26F26, [ 2161] = 0x67F9, [ 2162] = 0x3733, [ 2163] = 0x3C15,
++  [ 2164] = 0x3DE7, [ 2165] = 0x586C, [ 2166] = 0x21922, [ 2167] = 0x6810,
++  [ 2168] = 0x4057, [ 2169] = 0x2373F, [ 2170] = 0x240E1, [ 2171] = 0x2408B,
++  [ 2172] = 0x2410F, [ 2173] = 0x26C21, [ 2174] = 0x54CB, [ 2175] = 0x569E,
++  [ 2176] = 0x266B1, [ 2177] = 0x5692, [ 2178] = 0x20FDF, [ 2179] = 0x20BA8,
++  [ 2180] = 0x20E0D, [ 2181] = 0x93C6, [ 2182] = 0x28B13, [ 2183] = 0x939C,
++  [ 2184] = 0x4EF8, [ 2185] = 0x512B, [ 2186] = 0x3819, [ 2187] = 0x24436,
++  [ 2188] = 0x4EBC, [ 2189] = 0x20465, [ 2190] = 0x2037F, [ 2191] = 0x4F4B,
++  [ 2192] = 0x4F8A, [ 2193] = 0x25651, [ 2194] = 0x5A68, [ 2195] = 0x201AB,
++  [ 2196] = 0x203CB, [ 2197] = 0x3999, [ 2198] = 0x2030A, [ 2199] = 0x20414,
++  [ 2200] = 0x3435, [ 2201] = 0x4F29, [ 2202] = 0x202C0, [ 2203] = 0x28EB3,
++  [ 2204] = 0x20275, [ 2205] = 0x8ADA, [ 2206] = 0x2020C, [ 2207] = 0x4E98,
++  [ 2242] = 0x50CD, [ 2243] = 0x510D, [ 2244] = 0x4FA2, [ 2245] = 0x4F03,
++  [ 2246] = 0x24A0E, [ 2247] = 0x23E8A, [ 2248] = 0x4F42, [ 2249] = 0x502E,
++  [ 2250] = 0x506C, [ 2251] = 0x5081, [ 2252] = 0x4FCC, [ 2253] = 0x4FE5,
++  [ 2254] = 0x5058, [ 2255] = 0x50FC, [ 2260] = 0x6E76, [ 2261] = 0x23595,
++  [ 2262] = 0x23E39, [ 2263] = 0x23EBF, [ 2264] = 0x6D72, [ 2265] = 0x21884,
++  [ 2266] = 0x23E89, [ 2267] = 0x51A8, [ 2268] = 0x51C3, [ 2269] = 0x205E0,
++  [ 2270] = 0x44DD, [ 2271] = 0x204A3, [ 2272] = 0x20492, [ 2273] = 0x20491,
++  [ 2274] = 0x8D7A, [ 2275] = 0x28A9C, [ 2276] = 0x2070E, [ 2277] = 0x5259,
++  [ 2278] = 0x52A4, [ 2279] = 0x20873, [ 2280] = 0x52E1, [ 2282] = 0x467A,
++  [ 2283] = 0x718C, [ 2284] = 0x2438C, [ 2285] = 0x20C20, [ 2286] = 0x249AC,
++  [ 2287] = 0x210E4, [ 2288] = 0x69D1, [ 2289] = 0x20E1D, [ 2291] = 0x3EDE,
++  [ 2292] = 0x7499, [ 2293] = 0x7414, [ 2294] = 0x7456, [ 2295] = 0x7398,
++  [ 2296] = 0x4B8E, [ 2297] = 0x24ABC, [ 2298] = 0x2408D, [ 2299] = 0x53D0,
++  [ 2300] = 0x3584, [ 2301] = 0x720F, [ 2302] = 0x240C9, [ 2303] = 0x55B4,
++  [ 2304] = 0x20345, [ 2305] = 0x54CD, [ 2306] = 0x20BC6, [ 2307] = 0x571D,
++  [ 2308] = 0x925D, [ 2309] = 0x96F4, [ 2310] = 0x9366, [ 2311] = 0x57DD,
++  [ 2312] = 0x578D, [ 2313] = 0x577F, [ 2314] = 0x363E, [ 2315] = 0x58CB,
++  [ 2316] = 0x5A99, [ 2317] = 0x28A46, [ 2318] = 0x216FA, [ 2319] = 0x2176F,
++  [ 2320] = 0x21710, [ 2321] = 0x5A2C, [ 2322] = 0x59B8, [ 2323] = 0x928F,
++  [ 2324] = 0x5A7E, [ 2325] = 0x5ACF, [ 2326] = 0x5A12, [ 2327] = 0x25946,
++  [ 2328] = 0x219F3, [ 2329] = 0x21861, [ 2330] = 0x24295, [ 2331] = 0x36F5,
++  [ 2332] = 0x6D05, [ 2333] = 0x7443, [ 2334] = 0x5A21, [ 2335] = 0x25E83,
++  [ 2340] = 0x5A81, [ 2341] = 0x28BD7, [ 2342] = 0x20413, [ 2343] = 0x93E0,
++  [ 2344] = 0x748C, [ 2345] = 0x21303, [ 2346] = 0x7105, [ 2347] = 0x4972,
++  [ 2348] = 0x9408, [ 2349] = 0x289FB, [ 2350] = 0x93BD, [ 2351] = 0x37A0,
++  [ 2352] = 0x5C1E, [ 2353] = 0x5C9E, [ 2354] = 0x5E5E, [ 2355] = 0x5E48,
++  [ 2356] = 0x21996, [ 2357] = 0x2197C, [ 2358] = 0x23AEE, [ 2359] = 0x5ECD,
++  [ 2360] = 0x5B4F, [ 2361] = 0x21903, [ 2362] = 0x21904, [ 2363] = 0x3701,
++  [ 2364] = 0x218A0, [ 2365] = 0x36DD, [ 2366] = 0x216FE, [ 2367] = 0x36D3,
++  [ 2368] = 0x812A, [ 2369] = 0x28A47, [ 2370] = 0x21DBA, [ 2371] = 0x23472,
++  [ 2372] = 0x289A8, [ 2373] = 0x5F0C, [ 2374] = 0x5F0E, [ 2375] = 0x21927,
++  [ 2376] = 0x217AB, [ 2377] = 0x5A6B, [ 2378] = 0x2173B, [ 2379] = 0x5B44,
++  [ 2380] = 0x8614, [ 2381] = 0x275FD, [ 2382] = 0x8860, [ 2383] = 0x607E,
++  [ 2384] = 0x22860, [ 2385] = 0x2262B, [ 2386] = 0x5FDB, [ 2387] = 0x3EB8,
++  [ 2388] = 0x225AF, [ 2389] = 0x225BE, [ 2390] = 0x29088, [ 2391] = 0x26F73,
++  [ 2392] = 0x61C0, [ 2393] = 0x2003E, [ 2394] = 0x20046, [ 2395] = 0x2261B,
++  [ 2396] = 0x6199, [ 2397] = 0x6198, [ 2398] = 0x6075, [ 2399] = 0x22C9B,
++  [ 2400] = 0x22D07, [ 2401] = 0x246D4, [ 2402] = 0x2914D, [ 2437] = 0x6471,
++  [ 2438] = 0x24665, [ 2439] = 0x22B6A, [ 2440] = 0x3A29, [ 2441] = 0x22B22,
++  [ 2442] = 0x23450, [ 2443] = 0x298EA, [ 2444] = 0x22E78, [ 2445] = 0x6337,
++  [ 2446] = 0x2A45B, [ 2447] = 0x64B6, [ 2448] = 0x6331, [ 2449] = 0x63D1,
++  [ 2450] = 0x249E3, [ 2451] = 0x22D67, [ 2452] = 0x62A4, [ 2453] = 0x22CA1,
++  [ 2454] = 0x643B, [ 2455] = 0x656B, [ 2456] = 0x6972, [ 2457] = 0x3BF4,
++  [ 2458] = 0x2308E, [ 2459] = 0x232AD, [ 2460] = 0x24989, [ 2461] = 0x232AB,
++  [ 2462] = 0x550D, [ 2463] = 0x232E0, [ 2464] = 0x218D9, [ 2465] = 0x2943F,
++  [ 2466] = 0x66CE, [ 2467] = 0x23289, [ 2468] = 0x231B3, [ 2469] = 0x3AE0,
++  [ 2470] = 0x4190, [ 2471] = 0x25584, [ 2472] = 0x28B22, [ 2473] = 0x2558F,
++  [ 2474] = 0x216FC, [ 2475] = 0x2555B, [ 2476] = 0x25425, [ 2477] = 0x78EE,
++  [ 2478] = 0x23103, [ 2479] = 0x2182A, [ 2480] = 0x23234, [ 2481] = 0x3464,
++  [ 2482] = 0x2320F, [ 2483] = 0x23182, [ 2484] = 0x242C9, [ 2485] = 0x668E,
++  [ 2486] = 0x26D24, [ 2487] = 0x666B, [ 2488] = 0x4B93, [ 2489] = 0x6630,
++  [ 2490] = 0x27870, [ 2491] = 0x21DEB, [ 2492] = 0x6663, [ 2493] = 0x232D2,
++  [ 2494] = 0x232E1, [ 2495] = 0x661E, [ 2496] = 0x25872, [ 2497] = 0x38D1,
++  [ 2498] = 0x2383A, [ 2499] = 0x237BC, [ 2500] = 0x3B99, [ 2501] = 0x237A2,
++  [ 2502] = 0x233FE, [ 2503] = 0x74D0, [ 2504] = 0x3B96, [ 2505] = 0x678F,
++  [ 2506] = 0x2462A, [ 2507] = 0x68B6, [ 2508] = 0x681E, [ 2509] = 0x3BC4,
++  [ 2510] = 0x6ABE, [ 2511] = 0x3863, [ 2512] = 0x237D5, [ 2513] = 0x24487,
++  [ 2514] = 0x6A33, [ 2515] = 0x6A52, [ 2516] = 0x6AC9, [ 2517] = 0x6B05,
++  [ 2518] = 0x21912, [ 2519] = 0x6511, [ 2520] = 0x6898, [ 2521] = 0x6A4C,
++  [ 2522] = 0x3BD7, [ 2523] = 0x6A7A, [ 2524] = 0x6B57, [ 2525] = 0x23FC0,
++  [ 2526] = 0x23C9A, [ 2527] = 0x93A0, [ 2528] = 0x92F2, [ 2529] = 0x28BEA,
++  [ 2530] = 0x28ACB, [ 2535] = 0x9289, [ 2536] = 0x2801E, [ 2537] = 0x289DC,
++  [ 2538] = 0x9467, [ 2539] = 0x6DA5, [ 2540] = 0x6F0B, [ 2541] = 0x249EC,
++  [ 2543] = 0x23F7F, [ 2544] = 0x3D8F, [ 2545] = 0x6E04, [ 2546] = 0x2403C,
++  [ 2547] = 0x5A3D, [ 2548] = 0x6E0A, [ 2549] = 0x5847, [ 2550] = 0x6D24,
++  [ 2551] = 0x7842, [ 2552] = 0x713B, [ 2553] = 0x2431A, [ 2554] = 0x24276,
++  [ 2555] = 0x70F1, [ 2556] = 0x7250, [ 2557] = 0x7287, [ 2558] = 0x7294,
++  [ 2559] = 0x2478F, [ 2560] = 0x24725, [ 2561] = 0x5179, [ 2562] = 0x24AA4,
++  [ 2563] = 0x205EB, [ 2564] = 0x747A, [ 2565] = 0x23EF8, [ 2566] = 0x2365F,
++  [ 2567] = 0x24A4A, [ 2568] = 0x24917, [ 2569] = 0x25FE1, [ 2570] = 0x3F06,
++  [ 2571] = 0x3EB1, [ 2572] = 0x24ADF, [ 2573] = 0x28C23, [ 2574] = 0x23F35,
++  [ 2575] = 0x60A7, [ 2576] = 0x3EF3, [ 2577] = 0x74CC, [ 2578] = 0x743C,
++  [ 2579] = 0x9387, [ 2580] = 0x7437, [ 2581] = 0x449F, [ 2582] = 0x26DEA,
++  [ 2583] = 0x4551, [ 2584] = 0x7583, [ 2585] = 0x3F63, [ 2586] = 0x24CD9,
++  [ 2587] = 0x24D06, [ 2588] = 0x3F58, [ 2589] = 0x7555, [ 2590] = 0x7673,
++  [ 2591] = 0x2A5C6, [ 2592] = 0x3B19, [ 2593] = 0x7468, [ 2594] = 0x28ACC,
++  [ 2595] = 0x249AB, [ 2596] = 0x2498E, [ 2597] = 0x3AFB, [ 2632] = 0x3DCD,
++  [ 2633] = 0x24A4E, [ 2634] = 0x3EFF, [ 2635] = 0x249C5, [ 2636] = 0x248F3,
++  [ 2637] = 0x91FA, [ 2638] = 0x5732, [ 2639] = 0x9342, [ 2640] = 0x28AE3,
++  [ 2641] = 0x21864, [ 2642] = 0x50DF, [ 2643] = 0x25221, [ 2644] = 0x251E7,
++  [ 2645] = 0x7778, [ 2646] = 0x23232, [ 2647] = 0x770E, [ 2648] = 0x770F,
++  [ 2649] = 0x777B, [ 2650] = 0x24697, [ 2651] = 0x23781, [ 2652] = 0x3A5E,
++  [ 2653] = 0x248F0, [ 2654] = 0x7438, [ 2655] = 0x749B, [ 2656] = 0x3EBF,
++  [ 2657] = 0x24ABA, [ 2658] = 0x24AC7, [ 2659] = 0x40C8, [ 2660] = 0x24A96,
++  [ 2661] = 0x261AE, [ 2662] = 0x9307, [ 2663] = 0x25581, [ 2664] = 0x781E,
++  [ 2665] = 0x788D, [ 2666] = 0x7888, [ 2667] = 0x78D2, [ 2668] = 0x73D0,
++  [ 2669] = 0x7959, [ 2670] = 0x27741, [ 2671] = 0x256E3, [ 2672] = 0x410E,
++  [ 2674] = 0x8496, [ 2675] = 0x79A5, [ 2676] = 0x6A2D, [ 2677] = 0x23EFA,
++  [ 2678] = 0x7A3A, [ 2679] = 0x79F4, [ 2680] = 0x416E, [ 2681] = 0x216E6,
++  [ 2682] = 0x4132, [ 2683] = 0x9235, [ 2684] = 0x79F1, [ 2685] = 0x20D4C,
++  [ 2686] = 0x2498C, [ 2687] = 0x20299, [ 2688] = 0x23DBA, [ 2689] = 0x2176E,
++  [ 2690] = 0x3597, [ 2691] = 0x556B, [ 2692] = 0x3570, [ 2693] = 0x36AA,
++  [ 2694] = 0x201D4, [ 2695] = 0x20C0D, [ 2696] = 0x7AE2, [ 2697] = 0x5A59,
++  [ 2698] = 0x226F5, [ 2699] = 0x25AAF, [ 2700] = 0x25A9C, [ 2701] = 0x5A0D,
++  [ 2702] = 0x2025B, [ 2703] = 0x78F0, [ 2704] = 0x5A2A, [ 2705] = 0x25BC6,
++  [ 2706] = 0x7AFE, [ 2707] = 0x41F9, [ 2708] = 0x7C5D, [ 2709] = 0x7C6D,
++  [ 2710] = 0x4211, [ 2711] = 0x25BB3, [ 2712] = 0x25EBC, [ 2713] = 0x25EA6,
++  [ 2714] = 0x7CCD, [ 2715] = 0x249F9, [ 2716] = 0x217B0, [ 2717] = 0x7C8E,
++  [ 2718] = 0x7C7C, [ 2719] = 0x7CAE, [ 2720] = 0x6AB2, [ 2721] = 0x7DDC,
++  [ 2722] = 0x7E07, [ 2723] = 0x7DD3, [ 2724] = 0x7F4E, [ 2725] = 0x26261,
++  [ 2730] = 0x2615C, [ 2731] = 0x27B48, [ 2732] = 0x7D97, [ 2733] = 0x25E82,
++  [ 2734] = 0x426A, [ 2735] = 0x26B75, [ 2736] = 0x20916, [ 2737] = 0x67D6,
++  [ 2738] = 0x2004E, [ 2739] = 0x235CF, [ 2740] = 0x57C4, [ 2741] = 0x26412,
++  [ 2742] = 0x263F8, [ 2743] = 0x24962, [ 2744] = 0x7FDD, [ 2745] = 0x7B27,
++  [ 2746] = 0x2082C, [ 2747] = 0x25AE9, [ 2748] = 0x25D43, [ 2749] = 0x7B0C,
++  [ 2750] = 0x25E0E, [ 2751] = 0x99E6, [ 2752] = 0x8645, [ 2753] = 0x9A63,
++  [ 2754] = 0x6A1C, [ 2755] = 0x2343F, [ 2756] = 0x39E2, [ 2757] = 0x249F7,
++  [ 2758] = 0x265AD, [ 2759] = 0x9A1F, [ 2760] = 0x265A0, [ 2761] = 0x8480,
++  [ 2762] = 0x27127, [ 2763] = 0x26CD1, [ 2764] = 0x44EA, [ 2765] = 0x8137,
++  [ 2766] = 0x4402, [ 2767] = 0x80C6, [ 2768] = 0x8109, [ 2769] = 0x8142,
++  [ 2770] = 0x267B4, [ 2771] = 0x98C3, [ 2772] = 0x26A42, [ 2773] = 0x8262,
++  [ 2774] = 0x8265, [ 2775] = 0x26A51, [ 2776] = 0x8453, [ 2777] = 0x26DA7,
++  [ 2778] = 0x8610, [ 2779] = 0x2721B, [ 2780] = 0x5A86, [ 2781] = 0x417F,
++  [ 2782] = 0x21840, [ 2783] = 0x5B2B, [ 2784] = 0x218A1, [ 2785] = 0x5AE4,
++  [ 2786] = 0x218D8, [ 2787] = 0x86A0, [ 2788] = 0x2F9BC, [ 2789] = 0x23D8F,
++  [ 2790] = 0x882D, [ 2791] = 0x27422, [ 2792] = 0x5A02, [ 2827] = 0x886E,
++  [ 2828] = 0x4F45, [ 2829] = 0x8887, [ 2830] = 0x88BF, [ 2831] = 0x88E6,
++  [ 2832] = 0x8965, [ 2833] = 0x894D, [ 2834] = 0x25683, [ 2835] = 0x8954,
++  [ 2836] = 0x27785, [ 2837] = 0x27784, [ 2838] = 0x28BF5, [ 2839] = 0x28BD9,
++  [ 2840] = 0x28B9C, [ 2841] = 0x289F9, [ 2842] = 0x3EAD, [ 2843] = 0x84A3,
++  [ 2844] = 0x46F5, [ 2845] = 0x46CF, [ 2846] = 0x37F2, [ 2847] = 0x8A3D,
++  [ 2848] = 0x8A1C, [ 2849] = 0x29448, [ 2850] = 0x5F4D, [ 2851] = 0x922B,
++  [ 2852] = 0x24284, [ 2853] = 0x65D4, [ 2854] = 0x7129, [ 2855] = 0x70C4,
++  [ 2856] = 0x21845, [ 2857] = 0x9D6D, [ 2858] = 0x8C9F, [ 2859] = 0x8CE9,
++  [ 2860] = 0x27DDC, [ 2861] = 0x599A, [ 2862] = 0x77C3, [ 2863] = 0x59F0,
++  [ 2864] = 0x436E, [ 2865] = 0x36D4, [ 2866] = 0x8E2A, [ 2867] = 0x8EA7,
++  [ 2868] = 0x24C09, [ 2869] = 0x8F30, [ 2870] = 0x8F4A, [ 2871] = 0x42F4,
++  [ 2872] = 0x6C58, [ 2873] = 0x6FBB, [ 2874] = 0x22321, [ 2875] = 0x489B,
++  [ 2876] = 0x6F79, [ 2877] = 0x6E8B, [ 2878] = 0x217DA, [ 2879] = 0x9BE9,
++  [ 2880] = 0x36B5, [ 2881] = 0x2492F, [ 2882] = 0x90BB, [ 2884] = 0x5571,
++  [ 2885] = 0x4906, [ 2886] = 0x91BB, [ 2887] = 0x9404, [ 2888] = 0x28A4B,
++  [ 2889] = 0x4062, [ 2890] = 0x28AFC, [ 2891] = 0x9427, [ 2892] = 0x28C1D,
++  [ 2893] = 0x28C3B, [ 2894] = 0x84E5, [ 2895] = 0x8A2B, [ 2896] = 0x9599,
++  [ 2897] = 0x95A7, [ 2898] = 0x9597, [ 2899] = 0x9596, [ 2900] = 0x28D34,
++  [ 2901] = 0x7445, [ 2902] = 0x3EC2, [ 2903] = 0x248FF, [ 2904] = 0x24A42,
++  [ 2905] = 0x243EA, [ 2906] = 0x3EE7, [ 2907] = 0x23225, [ 2908] = 0x968F,
++  [ 2909] = 0x28EE7, [ 2910] = 0x28E66, [ 2911] = 0x28E65, [ 2912] = 0x3ECC,
++  [ 2913] = 0x249ED, [ 2914] = 0x24A78, [ 2915] = 0x23FEE, [ 2916] = 0x7412,
++  [ 2917] = 0x746B, [ 2918] = 0x3EFC, [ 2919] = 0x9741, [ 2920] = 0x290B0,
++  [ 2925] = 0x6847, [ 2926] = 0x4A1D, [ 2927] = 0x29093, [ 2928] = 0x257DF,
++  [ 2930] = 0x9368, [ 2931] = 0x28989, [ 2932] = 0x28C26, [ 2933] = 0x28B2F,
++  [ 2934] = 0x263BE, [ 2935] = 0x92BA, [ 2936] = 0x5B11, [ 2937] = 0x8B69,
++  [ 2938] = 0x493C, [ 2939] = 0x73F9, [ 2940] = 0x2421B, [ 2941] = 0x979B,
++  [ 2942] = 0x9771, [ 2943] = 0x9938, [ 2944] = 0x20F26, [ 2945] = 0x5DC1,
++  [ 2946] = 0x28BC5, [ 2947] = 0x24AB2, [ 2948] = 0x981F, [ 2949] = 0x294DA,
++  [ 2950] = 0x92F6, [ 2951] = 0x295D7, [ 2952] = 0x91E5, [ 2953] = 0x44C0,
++  [ 2954] = 0x28B50, [ 2955] = 0x24A67, [ 2956] = 0x28B64, [ 2957] = 0x98DC,
++  [ 2958] = 0x28A45, [ 2959] = 0x3F00, [ 2960] = 0x922A, [ 2961] = 0x4925,
++  [ 2962] = 0x8414, [ 2963] = 0x993B, [ 2964] = 0x994D, [ 2965] = 0x27B06,
++  [ 2966] = 0x3DFD, [ 2967] = 0x999B, [ 2968] = 0x4B6F, [ 2969] = 0x99AA,
++  [ 2970] = 0x9A5C, [ 2971] = 0x28B65, [ 2972] = 0x258C8, [ 2973] = 0x6A8F,
++  [ 2974] = 0x9A21, [ 2975] = 0x5AFE, [ 2976] = 0x9A2F, [ 2977] = 0x298F1,
++  [ 2978] = 0x4B90, [ 2979] = 0x29948, [ 2980] = 0x99BC, [ 2981] = 0x4BBD,
++  [ 2982] = 0x4B97, [ 2983] = 0x937D, [ 2984] = 0x5872, [ 2985] = 0x21302,
++  [ 2986] = 0x5822, [ 2987] = 0x249B8, [ 3022] = 0x214E8, [ 3023] = 0x7844,
++  [ 3024] = 0x2271F, [ 3025] = 0x23DB8, [ 3026] = 0x68C5, [ 3027] = 0x3D7D,
++  [ 3028] = 0x9458, [ 3029] = 0x3927, [ 3030] = 0x6150, [ 3031] = 0x22781,
++  [ 3032] = 0x2296B, [ 3033] = 0x6107, [ 3034] = 0x9C4F, [ 3035] = 0x9C53,
++  [ 3036] = 0x9C7B, [ 3037] = 0x9C35, [ 3038] = 0x9C10, [ 3039] = 0x9B7F,
++  [ 3040] = 0x9BCF, [ 3041] = 0x29E2D, [ 3042] = 0x9B9F, [ 3043] = 0x2A1F5,
++  [ 3044] = 0x2A0FE, [ 3045] = 0x9D21, [ 3046] = 0x4CAE, [ 3047] = 0x24104,
++  [ 3048] = 0x9E18, [ 3049] = 0x4CB0, [ 3050] = 0x9D0C, [ 3051] = 0x2A1B4,
++  [ 3052] = 0x2A0ED, [ 3053] = 0x2A0F3, [ 3054] = 0x2992F, [ 3055] = 0x9DA5,
++  [ 3056] = 0x84BD, [ 3057] = 0x26E12, [ 3058] = 0x26FDF, [ 3059] = 0x26B82,
++  [ 3060] = 0x85FC, [ 3061] = 0x4533, [ 3062] = 0x26DA4, [ 3063] = 0x26E84,
++  [ 3064] = 0x26DF0, [ 3065] = 0x8420, [ 3066] = 0x85EE, [ 3067] = 0x26E00,
++  [ 3068] = 0x237D7, [ 3069] = 0x26064, [ 3070] = 0x79E2, [ 3071] = 0x2359C,
++  [ 3072] = 0x23640, [ 3073] = 0x492D, [ 3074] = 0x249DE, [ 3075] = 0x3D62,
++  [ 3076] = 0x93DB, [ 3077] = 0x92BE, [ 3078] = 0x9348, [ 3079] = 0x202BF,
++  [ 3080] = 0x78B9, [ 3081] = 0x9277, [ 3082] = 0x944D, [ 3083] = 0x4FE4,
++  [ 3084] = 0x3440, [ 3085] = 0x9064, [ 3086] = 0x2555D, [ 3087] = 0x783D,
++  [ 3088] = 0x7854, [ 3089] = 0x78B6, [ 3090] = 0x784B, [ 3091] = 0x21757,
++  [ 3092] = 0x231C9, [ 3093] = 0x24941, [ 3094] = 0x369A, [ 3095] = 0x4F72,
++  [ 3096] = 0x6FDA, [ 3097] = 0x6FD9, [ 3099] = 0x701E, [ 3100] = 0x5414,
++  [ 3101] = 0x241B5, [ 3102] = 0x57BB, [ 3103] = 0x58F3, [ 3104] = 0x578A,
++  [ 3105] = 0x9D16, [ 3106] = 0x57D7, [ 3107] = 0x7134, [ 3108] = 0x34AF,
++  [ 3109] = 0x241AC, [ 3110] = 0x71EB, [ 3111] = 0x26C40, [ 3112] = 0x24F97,
++  [ 3114] = 0x217B5, [ 3115] = 0x28A49, [ 3120] = 0x610C, [ 3121] = 0x5ACE,
++  [ 3122] = 0x5A0B, [ 3123] = 0x42BC, [ 3124] = 0x24488, [ 3125] = 0x372C,
++  [ 3126] = 0x4B7B, [ 3127] = 0x289FC, [ 3128] = 0x93BB, [ 3129] = 0x93B8,
++  [ 3130] = 0x218D6, [ 3131] = 0x20F1D, [ 3132] = 0x8472, [ 3133] = 0x26CC0,
++  [ 3134] = 0x21413, [ 3135] = 0x242FA, [ 3136] = 0x22C26, [ 3137] = 0x243C1,
++  [ 3138] = 0x5994, [ 3139] = 0x23DB7, [ 3140] = 0x26741, [ 3141] = 0x7DA8,
++  [ 3142] = 0x2615B, [ 3143] = 0x260A4, [ 3144] = 0x249B9, [ 3145] = 0x2498B,
++  [ 3146] = 0x289FA, [ 3147] = 0x92E5, [ 3148] = 0x73E2, [ 3149] = 0x3EE9,
++  [ 3150] = 0x74B4, [ 3151] = 0x28B63, [ 3152] = 0x2189F, [ 3153] = 0x3EE1,
++  [ 3154] = 0x24AB3, [ 3155] = 0x6AD8, [ 3156] = 0x73F3, [ 3157] = 0x73FB,
++  [ 3158] = 0x3ED6, [ 3159] = 0x24A3E, [ 3160] = 0x24A94, [ 3161] = 0x217D9,
++  [ 3162] = 0x24A66, [ 3163] = 0x203A7, [ 3164] = 0x21424, [ 3165] = 0x249E5,
++  [ 3166] = 0x7448, [ 3167] = 0x24916, [ 3168] = 0x70A5, [ 3169] = 0x24976,
++  [ 3170] = 0x9284, [ 3171] = 0x73E6, [ 3172] = 0x935F, [ 3173] = 0x204FE,
++  [ 3174] = 0x9331, [ 3175] = 0x28ACE, [ 3176] = 0x28A16, [ 3177] = 0x9386,
++  [ 3178] = 0x28BE7, [ 3179] = 0x255D5, [ 3180] = 0x4935, [ 3181] = 0x28A82,
++  [ 3182] = 0x716B, [ 3217] = 0x24943, [ 3218] = 0x20CFF, [ 3219] = 0x56A4,
++  [ 3220] = 0x2061A, [ 3221] = 0x20BEB, [ 3222] = 0x20CB8, [ 3223] = 0x5502,
++  [ 3224] = 0x79C4, [ 3225] = 0x217FA, [ 3226] = 0x7DFE, [ 3227] = 0x216C2,
++  [ 3228] = 0x24A50, [ 3229] = 0x21852, [ 3230] = 0x452E, [ 3231] = 0x9401,
++  [ 3232] = 0x370A, [ 3233] = 0x28AC0, [ 3234] = 0x249AD, [ 3235] = 0x59B0,
++  [ 3236] = 0x218BF, [ 3237] = 0x21883, [ 3238] = 0x27484, [ 3239] = 0x5AA1,
++  [ 3240] = 0x36E2, [ 3241] = 0x23D5B, [ 3242] = 0x36B0, [ 3243] = 0x925F,
++  [ 3244] = 0x5A79, [ 3245] = 0x28A81, [ 3246] = 0x21862, [ 3247] = 0x9374,
++  [ 3248] = 0x3CCD, [ 3249] = 0x20AB4, [ 3250] = 0x4A96, [ 3251] = 0x398A,
++  [ 3252] = 0x50F4, [ 3253] = 0x3D69, [ 3254] = 0x3D4C, [ 3255] = 0x2139C,
++  [ 3256] = 0x7175, [ 3257] = 0x42FB, [ 3258] = 0x28218, [ 3259] = 0x6E0F,
++  [ 3260] = 0x290E4, [ 3261] = 0x44EB, [ 3262] = 0x6D57, [ 3263] = 0x27E4F,
++  [ 3264] = 0x7067, [ 3265] = 0x6CAF, [ 3266] = 0x3CD6, [ 3267] = 0x23FED,
++  [ 3268] = 0x23E2D, [ 3269] = 0x6E02, [ 3270] = 0x6F0C, [ 3271] = 0x3D6F,
++  [ 3272] = 0x203F5, [ 3273] = 0x7551, [ 3274] = 0x36BC, [ 3275] = 0x34C8,
++  [ 3276] = 0x4680, [ 3277] = 0x3EDA, [ 3278] = 0x4871, [ 3279] = 0x59C4,
++  [ 3280] = 0x926E, [ 3281] = 0x493E, [ 3282] = 0x8F41, [ 3283] = 0x28C1C,
++  [ 3284] = 0x26BC0, [ 3285] = 0x5812, [ 3286] = 0x57C8, [ 3287] = 0x36D6,
++  [ 3288] = 0x21452, [ 3289] = 0x70FE, [ 3290] = 0x24362, [ 3291] = 0x24A71,
++  [ 3292] = 0x22FE3, [ 3293] = 0x212B0, [ 3294] = 0x223BD, [ 3295] = 0x68B9,
++  [ 3296] = 0x6967, [ 3297] = 0x21398, [ 3298] = 0x234E5, [ 3299] = 0x27BF4,
++  [ 3300] = 0x236DF, [ 3301] = 0x28A83, [ 3302] = 0x237D6, [ 3303] = 0x233FA,
++  [ 3304] = 0x24C9F, [ 3305] = 0x6A1A, [ 3306] = 0x236AD, [ 3307] = 0x26CB7,
++  [ 3308] = 0x843E, [ 3309] = 0x44DF, [ 3310] = 0x44CE, [ 3315] = 0x26D26,
++  [ 3316] = 0x26D51, [ 3317] = 0x26C82, [ 3318] = 0x26FDE, [ 3319] = 0x6F17,
++  [ 3320] = 0x27109, [ 3321] = 0x833D, [ 3322] = 0x2173A, [ 3323] = 0x83ED,
++  [ 3324] = 0x26C80, [ 3325] = 0x27053, [ 3326] = 0x217DB, [ 3327] = 0x5989,
++  [ 3328] = 0x5A82, [ 3329] = 0x217B3, [ 3330] = 0x5A61, [ 3331] = 0x5A71,
++  [ 3332] = 0x21905, [ 3333] = 0x241FC, [ 3334] = 0x372D, [ 3335] = 0x59EF,
++  [ 3336] = 0x2173C, [ 3337] = 0x36C7, [ 3338] = 0x718E, [ 3339] = 0x9390,
++  [ 3340] = 0x669A, [ 3341] = 0x242A5, [ 3342] = 0x5A6E, [ 3343] = 0x5A2B,
++  [ 3344] = 0x24293, [ 3345] = 0x6A2B, [ 3346] = 0x23EF9, [ 3347] = 0x27736,
++  [ 3348] = 0x2445B, [ 3349] = 0x242CA, [ 3350] = 0x711D, [ 3351] = 0x24259,
++  [ 3352] = 0x289E1, [ 3353] = 0x4FB0, [ 3354] = 0x26D28, [ 3355] = 0x5CC2,
++  [ 3356] = 0x244CE, [ 3357] = 0x27E4D, [ 3358] = 0x243BD, [ 3359] = 0x6A0C,
++  [ 3360] = 0x24256, [ 3361] = 0x21304, [ 3362] = 0x70A6, [ 3363] = 0x7133,
++  [ 3364] = 0x243E9, [ 3365] = 0x3DA5, [ 3366] = 0x6CDF, [ 3367] = 0x2F825,
++  [ 3368] = 0x24A4F, [ 3369] = 0x7E65, [ 3370] = 0x59EB, [ 3371] = 0x5D2F,
++  [ 3372] = 0x3DF3, [ 3373] = 0x5F5C, [ 3374] = 0x24A5D, [ 3375] = 0x217DF,
++  [ 3376] = 0x7DA4, [ 3377] = 0x8426, [ 3412] = 0x5485, [ 3413] = 0x23AFA,
++  [ 3414] = 0x23300, [ 3415] = 0x20214, [ 3416] = 0x577E, [ 3417] = 0x208D5,
++  [ 3418] = 0x20619, [ 3419] = 0x3FE5, [ 3420] = 0x21F9E, [ 3421] = 0x2A2B6,
++  [ 3422] = 0x7003, [ 3423] = 0x2915B, [ 3424] = 0x5D70, [ 3425] = 0x738F,
++  [ 3426] = 0x7CD3, [ 3427] = 0x28A59, [ 3428] = 0x29420, [ 3429] = 0x4FC8,
++  [ 3430] = 0x7FE7, [ 3431] = 0x72CD, [ 3432] = 0x7310, [ 3433] = 0x27AF4,
++  [ 3434] = 0x7338, [ 3435] = 0x7339, [ 3436] = 0x256F6, [ 3437] = 0x7341,
++  [ 3438] = 0x7348, [ 3439] = 0x3EA9, [ 3440] = 0x27B18, [ 3441] = 0x906C,
++  [ 3442] = 0x71F5, [ 3443] = 0x248F2, [ 3444] = 0x73E1, [ 3445] = 0x81F6,
++  [ 3446] = 0x3ECA, [ 3447] = 0x770C, [ 3448] = 0x3ED1, [ 3449] = 0x6CA2,
++  [ 3450] = 0x56FD, [ 3451] = 0x7419, [ 3452] = 0x741E, [ 3453] = 0x741F,
++  [ 3454] = 0x3EE2, [ 3455] = 0x3EF0, [ 3456] = 0x3EF4, [ 3457] = 0x3EFA,
++  [ 3458] = 0x74D3, [ 3459] = 0x3F0E, [ 3460] = 0x3F53, [ 3461] = 0x7542,
++  [ 3462] = 0x756D, [ 3463] = 0x7572, [ 3464] = 0x758D, [ 3465] = 0x3F7C,
++  [ 3466] = 0x75C8, [ 3467] = 0x75DC, [ 3468] = 0x3FC0, [ 3469] = 0x764D,
++  [ 3470] = 0x3FD7, [ 3471] = 0x7674, [ 3472] = 0x3FDC, [ 3473] = 0x767A,
++  [ 3474] = 0x24F5C, [ 3475] = 0x7188, [ 3476] = 0x5623, [ 3477] = 0x8980,
++  [ 3478] = 0x5869, [ 3479] = 0x401D, [ 3480] = 0x7743, [ 3481] = 0x4039,
++  [ 3482] = 0x6761, [ 3483] = 0x4045, [ 3484] = 0x35DB, [ 3485] = 0x7798,
++  [ 3486] = 0x406A, [ 3487] = 0x406F, [ 3488] = 0x5C5E, [ 3489] = 0x77BE,
++  [ 3490] = 0x77CB, [ 3491] = 0x58F2, [ 3492] = 0x7818, [ 3493] = 0x70B9,
++  [ 3494] = 0x781C, [ 3495] = 0x40A8, [ 3496] = 0x7839, [ 3497] = 0x7847,
++  [ 3498] = 0x7851, [ 3499] = 0x7866, [ 3500] = 0x8448, [ 3501] = 0x25535,
++  [ 3502] = 0x7933, [ 3503] = 0x6803, [ 3504] = 0x7932, [ 3505] = 0x4103,
++  [ 3510] = 0x4109, [ 3511] = 0x7991, [ 3512] = 0x7999, [ 3513] = 0x8FBB,
++  [ 3514] = 0x7A06, [ 3515] = 0x8FBC, [ 3516] = 0x4167, [ 3517] = 0x7A91,
++  [ 3518] = 0x41B2, [ 3519] = 0x7ABC, [ 3520] = 0x8279, [ 3521] = 0x41C4,
++  [ 3522] = 0x7ACF, [ 3523] = 0x7ADB, [ 3524] = 0x41CF, [ 3525] = 0x4E21,
++  [ 3526] = 0x7B62, [ 3527] = 0x7B6C, [ 3528] = 0x7B7B, [ 3529] = 0x7C12,
++  [ 3530] = 0x7C1B, [ 3531] = 0x4260, [ 3532] = 0x427A, [ 3533] = 0x7C7B,
++  [ 3534] = 0x7C9C, [ 3535] = 0x428C, [ 3536] = 0x7CB8, [ 3537] = 0x4294,
++  [ 3538] = 0x7CED, [ 3539] = 0x8F93, [ 3540] = 0x70C0, [ 3541] = 0x20CCF,
++  [ 3542] = 0x7DCF, [ 3543] = 0x7DD4, [ 3544] = 0x7DD0, [ 3545] = 0x7DFD,
++  [ 3546] = 0x7FAE, [ 3547] = 0x7FB4, [ 3548] = 0x729F, [ 3549] = 0x4397,
++  [ 3550] = 0x8020, [ 3551] = 0x8025, [ 3552] = 0x7B39, [ 3553] = 0x802E,
++  [ 3554] = 0x8031, [ 3555] = 0x8054, [ 3556] = 0x3DCC, [ 3557] = 0x57B4,
++  [ 3558] = 0x70A0, [ 3559] = 0x80B7, [ 3560] = 0x80E9, [ 3561] = 0x43ED,
++  [ 3562] = 0x810C, [ 3563] = 0x732A, [ 3564] = 0x810E, [ 3565] = 0x8112,
++  [ 3566] = 0x7560, [ 3567] = 0x8114, [ 3568] = 0x4401, [ 3569] = 0x3B39,
++  [ 3570] = 0x8156, [ 3571] = 0x8159, [ 3572] = 0x815A, [ 3607] = 0x4413,
++  [ 3608] = 0x583A, [ 3609] = 0x817C, [ 3610] = 0x8184, [ 3611] = 0x4425,
++  [ 3612] = 0x8193, [ 3613] = 0x442D, [ 3614] = 0x81A5, [ 3615] = 0x57EF,
++  [ 3616] = 0x81C1, [ 3617] = 0x81E4, [ 3618] = 0x8254, [ 3619] = 0x448F,
++  [ 3620] = 0x82A6, [ 3621] = 0x8276, [ 3622] = 0x82CA, [ 3623] = 0x82D8,
++  [ 3624] = 0x82FF, [ 3625] = 0x44B0, [ 3626] = 0x8357, [ 3627] = 0x9669,
++  [ 3628] = 0x698A, [ 3629] = 0x8405, [ 3630] = 0x70F5, [ 3631] = 0x8464,
++  [ 3632] = 0x60E3, [ 3633] = 0x8488, [ 3634] = 0x4504, [ 3635] = 0x84BE,
++  [ 3636] = 0x84E1, [ 3637] = 0x84F8, [ 3638] = 0x8510, [ 3639] = 0x8538,
++  [ 3640] = 0x8552, [ 3641] = 0x453B, [ 3642] = 0x856F, [ 3643] = 0x8570,
++  [ 3644] = 0x85E0, [ 3645] = 0x4577, [ 3646] = 0x8672, [ 3647] = 0x8692,
++  [ 3648] = 0x86B2, [ 3649] = 0x86EF, [ 3650] = 0x9645, [ 3651] = 0x878B,
++  [ 3652] = 0x4606, [ 3653] = 0x4617, [ 3654] = 0x88AE, [ 3655] = 0x88FF,
++  [ 3656] = 0x8924, [ 3657] = 0x8947, [ 3658] = 0x8991, [ 3659] = 0x27967,
++  [ 3660] = 0x8A29, [ 3661] = 0x8A38, [ 3662] = 0x8A94, [ 3663] = 0x8AB4,
++  [ 3664] = 0x8C51, [ 3665] = 0x8CD4, [ 3666] = 0x8CF2, [ 3667] = 0x8D1C,
++  [ 3668] = 0x4798, [ 3669] = 0x585F, [ 3670] = 0x8DC3, [ 3671] = 0x47ED,
++  [ 3672] = 0x4EEE, [ 3673] = 0x8E3A, [ 3674] = 0x55D8, [ 3675] = 0x5754,
++  [ 3676] = 0x8E71, [ 3677] = 0x55F5, [ 3678] = 0x8EB0, [ 3679] = 0x4837,
++  [ 3680] = 0x8ECE, [ 3681] = 0x8EE2, [ 3682] = 0x8EE4, [ 3683] = 0x8EED,
++  [ 3684] = 0x8EF2, [ 3685] = 0x8FB7, [ 3686] = 0x8FC1, [ 3687] = 0x8FCA,
++  [ 3688] = 0x8FCC, [ 3689] = 0x9033, [ 3690] = 0x99C4, [ 3691] = 0x48AD,
++  [ 3692] = 0x98E0, [ 3693] = 0x9213, [ 3694] = 0x491E, [ 3695] = 0x9228,
++  [ 3696] = 0x9258, [ 3697] = 0x926B, [ 3698] = 0x92B1, [ 3699] = 0x92AE,
++  [ 3700] = 0x92BF, [ 3705] = 0x92E3, [ 3706] = 0x92EB, [ 3707] = 0x92F3,
++  [ 3708] = 0x92F4, [ 3709] = 0x92FD, [ 3710] = 0x9343, [ 3711] = 0x9384,
++  [ 3712] = 0x93AD, [ 3713] = 0x4945, [ 3714] = 0x4951, [ 3715] = 0x9EBF,
++  [ 3716] = 0x9417, [ 3717] = 0x5301, [ 3718] = 0x941D, [ 3719] = 0x942D,
++  [ 3720] = 0x943E, [ 3721] = 0x496A, [ 3722] = 0x9454, [ 3723] = 0x9479,
++  [ 3724] = 0x952D, [ 3725] = 0x95A2, [ 3726] = 0x49A7, [ 3727] = 0x95F4,
++  [ 3728] = 0x9633, [ 3729] = 0x49E5, [ 3730] = 0x67A0, [ 3731] = 0x4A24,
++  [ 3732] = 0x9740, [ 3733] = 0x4A35, [ 3734] = 0x97B2, [ 3735] = 0x97C2,
++  [ 3736] = 0x5654, [ 3737] = 0x4AE4, [ 3738] = 0x60E8, [ 3739] = 0x98B9,
++  [ 3740] = 0x4B19, [ 3741] = 0x98F1, [ 3742] = 0x5844, [ 3743] = 0x990E,
++  [ 3744] = 0x9919, [ 3745] = 0x51B4, [ 3746] = 0x991C, [ 3747] = 0x9937,
++  [ 3748] = 0x9942, [ 3749] = 0x995D, [ 3750] = 0x9962, [ 3751] = 0x4B70,
++  [ 3752] = 0x99C5, [ 3753] = 0x4B9D, [ 3754] = 0x9A3C, [ 3755] = 0x9B0F,
++  [ 3756] = 0x7A83, [ 3757] = 0x9B69, [ 3758] = 0x9B81, [ 3759] = 0x9BDD,
++  [ 3760] = 0x9BF1, [ 3761] = 0x9BF4, [ 3762] = 0x4C6D, [ 3763] = 0x9C20,
++  [ 3764] = 0x376F, [ 3765] = 0x21BC2, [ 3766] = 0x9D49, [ 3767] = 0x9C3A,
++  [ 3802] = 0x9EFE, [ 3803] = 0x5650, [ 3804] = 0x9D93, [ 3805] = 0x9DBD,
++  [ 3806] = 0x9DC0, [ 3807] = 0x9DFC, [ 3808] = 0x94F6, [ 3809] = 0x8FB6,
++  [ 3810] = 0x9E7B, [ 3811] = 0x9EAC, [ 3812] = 0x9EB1, [ 3813] = 0x9EBD,
++  [ 3814] = 0x9EC6, [ 3815] = 0x94DC, [ 3816] = 0x9EE2, [ 3817] = 0x9EF1,
++  [ 3818] = 0x9EF8, [ 3819] = 0x7AC8, [ 3820] = 0x9F44, [ 3821] = 0x20094,
++  [ 3822] = 0x202B7, [ 3823] = 0x203A0, [ 3824] = 0x691A, [ 3825] = 0x94C3,
++  [ 3826] = 0x59AC, [ 3827] = 0x204D7, [ 3828] = 0x5840, [ 3829] = 0x94C1,
++  [ 3830] = 0x37B9, [ 3831] = 0x205D5, [ 3832] = 0x20615, [ 3833] = 0x20676,
++  [ 3834] = 0x216BA, [ 3835] = 0x5757, [ 3836] = 0x7173, [ 3837] = 0x20AC2,
++  [ 3838] = 0x20ACD, [ 3839] = 0x20BBF, [ 3840] = 0x546A, [ 3841] = 0x2F83B,
++  [ 3842] = 0x20BCB, [ 3843] = 0x549E, [ 3844] = 0x20BFB, [ 3845] = 0x20C3B,
++  [ 3846] = 0x20C53, [ 3847] = 0x20C65, [ 3848] = 0x20C7C, [ 3849] = 0x60E7,
++  [ 3850] = 0x20C8D, [ 3851] = 0x567A, [ 3852] = 0x20CB5, [ 3853] = 0x20CDD,
++  [ 3854] = 0x20CED, [ 3855] = 0x20D6F, [ 3856] = 0x20DB2, [ 3857] = 0x20DC8,
++  [ 3858] = 0x6955, [ 3859] = 0x9C2F, [ 3860] = 0x87A5, [ 3861] = 0x20E04,
++  [ 3862] = 0x20E0E, [ 3863] = 0x20ED7, [ 3864] = 0x20F90, [ 3865] = 0x20F2D,
++  [ 3866] = 0x20E73, [ 3867] = 0x5C20, [ 3868] = 0x20FBC, [ 3869] = 0x5E0B,
++  [ 3870] = 0x2105C, [ 3871] = 0x2104F, [ 3872] = 0x21076, [ 3873] = 0x671E,
++  [ 3874] = 0x2107B, [ 3875] = 0x21088, [ 3876] = 0x21096, [ 3877] = 0x3647,
++  [ 3878] = 0x210BF, [ 3879] = 0x210D3, [ 3880] = 0x2112F, [ 3881] = 0x2113B,
++  [ 3882] = 0x5364, [ 3883] = 0x84AD, [ 3884] = 0x212E3, [ 3885] = 0x21375,
++  [ 3886] = 0x21336, [ 3887] = 0x8B81, [ 3888] = 0x21577, [ 3889] = 0x21619,
++  [ 3890] = 0x217C3, [ 3891] = 0x217C7, [ 3892] = 0x4E78, [ 3893] = 0x70BB,
++  [ 3894] = 0x2182D, [ 3895] = 0x2196A, [ 3900] = 0x21A2D, [ 3901] = 0x21A45,
++  [ 3902] = 0x21C2A, [ 3903] = 0x21C70, [ 3904] = 0x21CAC, [ 3905] = 0x21EC8,
++  [ 3906] = 0x62C3, [ 3907] = 0x21ED5, [ 3908] = 0x21F15, [ 3909] = 0x7198,
++  [ 3910] = 0x6855, [ 3911] = 0x22045, [ 3912] = 0x69E9, [ 3913] = 0x36C8,
++  [ 3914] = 0x2227C, [ 3915] = 0x223D7, [ 3916] = 0x223FA, [ 3917] = 0x2272A,
++  [ 3918] = 0x22871, [ 3919] = 0x2294F, [ 3920] = 0x82FD, [ 3921] = 0x22967,
++  [ 3922] = 0x22993, [ 3923] = 0x22AD5, [ 3924] = 0x89A5, [ 3925] = 0x22AE8,
++  [ 3926] = 0x8FA0, [ 3927] = 0x22B0E, [ 3928] = 0x97B8, [ 3929] = 0x22B3F,
++  [ 3930] = 0x9847, [ 3931] = 0x9ABD, [ 3932] = 0x22C4C, [ 3934] = 0x22C88,
++  [ 3935] = 0x22CB7, [ 3936] = 0x25BE8, [ 3937] = 0x22D08, [ 3938] = 0x22D12,
++  [ 3939] = 0x22DB7, [ 3940] = 0x22D95, [ 3941] = 0x22E42, [ 3942] = 0x22F74,
++  [ 3943] = 0x22FCC, [ 3944] = 0x23033, [ 3945] = 0x23066, [ 3946] = 0x2331F,
++  [ 3947] = 0x233DE, [ 3948] = 0x5FB1, [ 3949] = 0x6648, [ 3950] = 0x66BF,
++  [ 3951] = 0x27A79, [ 3952] = 0x23567, [ 3953] = 0x235F3, [ 3955] = 0x249BA,
++  [ 3957] = 0x2361A, [ 3958] = 0x23716, [ 3960] = 0x20346, [ 3961] = 0x58B5,
++  [ 3962] = 0x670E, [ 3997] = 0x6918, [ 3998] = 0x23AA7, [ 3999] = 0x27657,
++  [ 4000] = 0x25FE2, [ 4001] = 0x23E11, [ 4002] = 0x23EB9, [ 4003] = 0x275FE,
++  [ 4004] = 0x2209A, [ 4005] = 0x48D0, [ 4006] = 0x4AB8, [ 4007] = 0x24119,
++  [ 4008] = 0x28A9A, [ 4009] = 0x242EE, [ 4010] = 0x2430D, [ 4011] = 0x2403B,
++  [ 4012] = 0x24334, [ 4013] = 0x24396, [ 4014] = 0x24A45, [ 4015] = 0x205CA,
++  [ 4016] = 0x51D2, [ 4017] = 0x20611, [ 4018] = 0x599F, [ 4019] = 0x21EA8,
++  [ 4020] = 0x3BBE, [ 4021] = 0x23CFF, [ 4022] = 0x24404, [ 4023] = 0x244D6,
++  [ 4024] = 0x5788, [ 4025] = 0x24674, [ 4026] = 0x399B, [ 4027] = 0x2472F,
++  [ 4028] = 0x285E8, [ 4029] = 0x299C9, [ 4030] = 0x3762, [ 4031] = 0x221C3,
++  [ 4032] = 0x8B5E, [ 4033] = 0x28B4E, [ 4035] = 0x24812, [ 4036] = 0x248FB,
++  [ 4037] = 0x24A15, [ 4038] = 0x7209, [ 4039] = 0x24AC0, [ 4040] = 0x20C78,
++  [ 4041] = 0x5965, [ 4042] = 0x24EA5, [ 4043] = 0x24F86, [ 4044] = 0x20779,
++  [ 4045] = 0x8EDA, [ 4046] = 0x2502C, [ 4047] = 0x528F, [ 4048] = 0x573F,
++  [ 4049] = 0x7171, [ 4050] = 0x25299, [ 4051] = 0x25419, [ 4052] = 0x23F4A,
++  [ 4053] = 0x24AA7, [ 4054] = 0x55BC, [ 4055] = 0x25446, [ 4056] = 0x2546E,
++  [ 4057] = 0x26B52, [ 4059] = 0x3473, [ 4060] = 0x2553F, [ 4061] = 0x27632,
++  [ 4062] = 0x2555E, [ 4063] = 0x4718, [ 4064] = 0x25562, [ 4065] = 0x25566,
++  [ 4066] = 0x257C7, [ 4067] = 0x2493F, [ 4068] = 0x2585D, [ 4069] = 0x5066,
++  [ 4070] = 0x34FB, [ 4071] = 0x233CC, [ 4073] = 0x25903, [ 4074] = 0x477C,
++  [ 4075] = 0x28948, [ 4076] = 0x25AAE, [ 4077] = 0x25B89, [ 4078] = 0x25C06,
++  [ 4079] = 0x21D90, [ 4080] = 0x57A1, [ 4081] = 0x7151, [ 4083] = 0x26102,
++  [ 4084] = 0x27C12, [ 4085] = 0x9056, [ 4086] = 0x261B2, [ 4087] = 0x24F9A,
++  [ 4088] = 0x8B62, [ 4089] = 0x26402, [ 4090] = 0x2644A, [ 4095] = 0x5D5B,
++  [ 4096] = 0x26BF7, [ 4098] = 0x26484, [ 4099] = 0x2191C, [ 4100] = 0x8AEA,
++  [ 4101] = 0x249F6, [ 4102] = 0x26488, [ 4103] = 0x23FEF, [ 4104] = 0x26512,
++  [ 4105] = 0x4BC0, [ 4106] = 0x265BF, [ 4107] = 0x266B5, [ 4108] = 0x2271B,
++  [ 4109] = 0x9465, [ 4110] = 0x257E1, [ 4111] = 0x6195, [ 4112] = 0x5A27,
++  [ 4113] = 0x2F8CD, [ 4115] = 0x56B9, [ 4116] = 0x24521, [ 4117] = 0x266FC,
++  [ 4118] = 0x4E6A, [ 4119] = 0x24934, [ 4120] = 0x9656, [ 4121] = 0x6D8F,
++  [ 4122] = 0x26CBD, [ 4123] = 0x3618, [ 4124] = 0x8977, [ 4125] = 0x26799,
++  [ 4126] = 0x2686E, [ 4127] = 0x26411, [ 4128] = 0x2685E, [ 4130] = 0x268C7,
++  [ 4131] = 0x7B42, [ 4132] = 0x290C0, [ 4133] = 0x20A11, [ 4134] = 0x26926,
++  [ 4136] = 0x26939, [ 4137] = 0x7A45, [ 4139] = 0x269FA, [ 4140] = 0x9A26,
++  [ 4141] = 0x26A2D, [ 4142] = 0x365F, [ 4143] = 0x26469, [ 4144] = 0x20021,
++  [ 4145] = 0x7983, [ 4146] = 0x26A34, [ 4147] = 0x26B5B, [ 4148] = 0x5D2C,
++  [ 4149] = 0x23519, [ 4151] = 0x26B9D, [ 4152] = 0x46D0, [ 4153] = 0x26CA4,
++  [ 4154] = 0x753B, [ 4155] = 0x8865, [ 4156] = 0x26DAE, [ 4157] = 0x58B6,
++  [ 4192] = 0x371C, [ 4193] = 0x2258D, [ 4194] = 0x2704B, [ 4195] = 0x271CD,
++  [ 4196] = 0x3C54, [ 4197] = 0x27280, [ 4198] = 0x27285, [ 4199] = 0x9281,
++  [ 4200] = 0x2217A, [ 4201] = 0x2728B, [ 4202] = 0x9330, [ 4203] = 0x272E6,
++  [ 4204] = 0x249D0, [ 4205] = 0x6C39, [ 4206] = 0x949F, [ 4207] = 0x27450,
++  [ 4208] = 0x20EF8, [ 4209] = 0x8827, [ 4210] = 0x88F5, [ 4211] = 0x22926,
++  [ 4212] = 0x28473, [ 4213] = 0x217B1, [ 4214] = 0x6EB8, [ 4215] = 0x24A2A,
++  [ 4216] = 0x21820, [ 4217] = 0x39A4, [ 4218] = 0x36B9, [ 4221] = 0x453F,
++  [ 4222] = 0x66B6, [ 4223] = 0x29CAD, [ 4224] = 0x298A4, [ 4225] = 0x8943,
++  [ 4226] = 0x277CC, [ 4227] = 0x27858, [ 4228] = 0x56D6, [ 4229] = 0x40DF,
++  [ 4230] = 0x2160A, [ 4231] = 0x39A1, [ 4232] = 0x2372F, [ 4233] = 0x280E8,
++  [ 4234] = 0x213C5, [ 4235] = 0x71AD, [ 4236] = 0x8366, [ 4237] = 0x279DD,
++  [ 4238] = 0x291A8, [ 4240] = 0x4CB7, [ 4241] = 0x270AF, [ 4242] = 0x289AB,
++  [ 4243] = 0x279FD, [ 4244] = 0x27A0A, [ 4245] = 0x27B0B, [ 4246] = 0x27D66,
++  [ 4247] = 0x2417A, [ 4248] = 0x7B43, [ 4249] = 0x797E, [ 4250] = 0x28009,
++  [ 4251] = 0x6FB5, [ 4252] = 0x2A2DF, [ 4253] = 0x6A03, [ 4254] = 0x28318,
++  [ 4255] = 0x53A2, [ 4256] = 0x26E07, [ 4257] = 0x93BF, [ 4258] = 0x6836,
++  [ 4259] = 0x975D, [ 4260] = 0x2816F, [ 4261] = 0x28023, [ 4262] = 0x269B5,
++  [ 4263] = 0x213ED, [ 4264] = 0x2322F, [ 4265] = 0x28048, [ 4266] = 0x5D85,
++  [ 4267] = 0x28C30, [ 4268] = 0x28083, [ 4269] = 0x5715, [ 4270] = 0x9823,
++  [ 4271] = 0x28949, [ 4272] = 0x5DAB, [ 4273] = 0x24988, [ 4274] = 0x65BE,
++  [ 4275] = 0x69D5, [ 4276] = 0x53D2, [ 4277] = 0x24AA5, [ 4278] = 0x23F81,
++  [ 4279] = 0x3C11, [ 4280] = 0x6736, [ 4281] = 0x28090, [ 4282] = 0x280F4,
++  [ 4283] = 0x2812E, [ 4284] = 0x21FA1, [ 4285] = 0x2814F, [ 4290] = 0x28189,
++  [ 4291] = 0x281AF, [ 4292] = 0x2821A, [ 4293] = 0x28306, [ 4294] = 0x2832F,
++  [ 4295] = 0x2838A, [ 4296] = 0x35CA, [ 4297] = 0x28468, [ 4298] = 0x286AA,
++  [ 4299] = 0x48FA, [ 4300] = 0x63E6, [ 4301] = 0x28956, [ 4302] = 0x7808,
++  [ 4303] = 0x9255, [ 4304] = 0x289B8, [ 4305] = 0x43F2, [ 4306] = 0x289E7,
++  [ 4307] = 0x43DF, [ 4308] = 0x289E8, [ 4309] = 0x28B46, [ 4310] = 0x28BD4,
++  [ 4311] = 0x59F8, [ 4312] = 0x28C09, [ 4314] = 0x28FC5, [ 4315] = 0x290EC,
++  [ 4317] = 0x29110, [ 4318] = 0x2913C, [ 4319] = 0x3DF7, [ 4320] = 0x2915E,
++  [ 4321] = 0x24ACA, [ 4322] = 0x8FD0, [ 4323] = 0x728F, [ 4324] = 0x568B,
++  [ 4325] = 0x294E7, [ 4326] = 0x295E9, [ 4327] = 0x295B0, [ 4328] = 0x295B8,
++  [ 4329] = 0x29732, [ 4330] = 0x298D1, [ 4331] = 0x29949, [ 4332] = 0x2996A,
++  [ 4333] = 0x299C3, [ 4334] = 0x29A28, [ 4335] = 0x29B0E, [ 4336] = 0x29D5A,
++  [ 4337] = 0x29D9B, [ 4338] = 0x7E9F, [ 4339] = 0x29EF8, [ 4340] = 0x29F23,
++  [ 4341] = 0x4CA4, [ 4342] = 0x9547, [ 4343] = 0x2A293, [ 4344] = 0x71A2,
++  [ 4345] = 0x2A2FF, [ 4346] = 0x4D91, [ 4347] = 0x9012, [ 4348] = 0x2A5CB,
++  [ 4349] = 0x4D9C, [ 4350] = 0x20C9C, [ 4351] = 0x8FBE, [ 4352] = 0x55C1,
++  [ 4387] = 0x8FBA, [ 4388] = 0x224B0, [ 4389] = 0x8FB9, [ 4390] = 0x24A93,
++  [ 4391] = 0x4509, [ 4392] = 0x7E7F, [ 4393] = 0x6F56, [ 4394] = 0x6AB1,
++  [ 4395] = 0x4EEA, [ 4396] = 0x34E4, [ 4397] = 0x28B2C, [ 4398] = 0x2789D,
++  [ 4399] = 0x373A, [ 4400] = 0x8E80, [ 4401] = 0x217F5, [ 4402] = 0x28024,
++  [ 4403] = 0x28B6C, [ 4404] = 0x28B99, [ 4405] = 0x27A3E, [ 4406] = 0x266AF,
++  [ 4407] = 0x3DEB, [ 4408] = 0x27655, [ 4409] = 0x23CB7, [ 4410] = 0x25635,
++  [ 4411] = 0x25956, [ 4412] = 0x4E9A, [ 4413] = 0x25E81, [ 4414] = 0x26258,
++  [ 4415] = 0x56BF, [ 4416] = 0x20E6D, [ 4417] = 0x8E0E, [ 4418] = 0x5B6D,
++  [ 4419] = 0x23E88, [ 4420] = 0x24C9E, [ 4421] = 0x63DE, [ 4423] = 0x217F6,
++  [ 4424] = 0x2187B, [ 4425] = 0x6530, [ 4426] = 0x562D, [ 4427] = 0x25C4A,
++  [ 4428] = 0x541A, [ 4429] = 0x25311, [ 4430] = 0x3DC6, [ 4431] = 0x29D98,
++  [ 4432] = 0x4C7D, [ 4433] = 0x5622, [ 4434] = 0x561E, [ 4435] = 0x7F49,
++  [ 4436] = 0x25ED8, [ 4437] = 0x5975, [ 4438] = 0x23D40, [ 4439] = 0x8770,
++  [ 4440] = 0x4E1C, [ 4441] = 0x20FEA, [ 4442] = 0x20D49, [ 4443] = 0x236BA,
++  [ 4444] = 0x8117, [ 4445] = 0x9D5E, [ 4446] = 0x8D18, [ 4447] = 0x763B,
++  [ 4448] = 0x9C45, [ 4449] = 0x764E, [ 4450] = 0x77B9, [ 4451] = 0x9345,
++  [ 4452] = 0x5432, [ 4453] = 0x8148, [ 4454] = 0x82F7, [ 4455] = 0x5625,
++  [ 4456] = 0x8132, [ 4457] = 0x8418, [ 4458] = 0x80BD, [ 4459] = 0x55EA,
++  [ 4460] = 0x7962, [ 4461] = 0x5643, [ 4462] = 0x5416, [ 4463] = 0x20E9D,
++  [ 4464] = 0x35CE, [ 4465] = 0x5605, [ 4466] = 0x55F1, [ 4467] = 0x66F1,
++  [ 4468] = 0x282E2, [ 4469] = 0x362D, [ 4470] = 0x7534, [ 4471] = 0x55F0,
++  [ 4472] = 0x55BA, [ 4473] = 0x5497, [ 4474] = 0x5572, [ 4475] = 0x20C41,
++  [ 4476] = 0x20C96, [ 4477] = 0x5ED0, [ 4478] = 0x25148, [ 4479] = 0x20E76,
++  [ 4480] = 0x22C62, [ 4485] = 0x20EA2, [ 4486] = 0x9EAB, [ 4487] = 0x7D5A,
++  [ 4488] = 0x55DE, [ 4489] = 0x21075, [ 4490] = 0x629D, [ 4491] = 0x976D,
++  [ 4492] = 0x5494, [ 4493] = 0x8CCD, [ 4494] = 0x71F6, [ 4495] = 0x9176,
++  [ 4496] = 0x63FC, [ 4497] = 0x63B9, [ 4498] = 0x63FE, [ 4499] = 0x5569,
++  [ 4500] = 0x22B43, [ 4501] = 0x9C72, [ 4502] = 0x22EB3, [ 4503] = 0x519A,
++  [ 4504] = 0x34DF, [ 4505] = 0x20DA7, [ 4506] = 0x51A7, [ 4507] = 0x544D,
++  [ 4508] = 0x551E, [ 4509] = 0x5513, [ 4510] = 0x7666, [ 4511] = 0x8E2D,
++  [ 4512] = 0x2688A, [ 4513] = 0x75B1, [ 4514] = 0x80B6, [ 4515] = 0x8804,
++  [ 4516] = 0x8786, [ 4517] = 0x88C7, [ 4518] = 0x81B6, [ 4519] = 0x841C,
++  [ 4520] = 0x210C1, [ 4521] = 0x44EC, [ 4522] = 0x7304, [ 4523] = 0x24706,
++  [ 4524] = 0x5B90, [ 4525] = 0x830B, [ 4526] = 0x26893, [ 4527] = 0x567B,
++  [ 4528] = 0x226F4, [ 4529] = 0x27D2F, [ 4530] = 0x241A3, [ 4531] = 0x27D73,
++  [ 4532] = 0x26ED0, [ 4533] = 0x272B6, [ 4534] = 0x9170, [ 4535] = 0x211D9,
++  [ 4536] = 0x9208, [ 4537] = 0x23CFC, [ 4538] = 0x2A6A9, [ 4539] = 0x20EAC,
++  [ 4540] = 0x20EF9, [ 4541] = 0x7266, [ 4542] = 0x21CA2, [ 4543] = 0x474E,
++  [ 4544] = 0x24FC2, [ 4545] = 0x27FF9, [ 4546] = 0x20FEB, [ 4547] = 0x40FA,
++  [ 4582] = 0x9C5D, [ 4583] = 0x651F, [ 4584] = 0x22DA0, [ 4585] = 0x48F3,
++  [ 4586] = 0x247E0, [ 4587] = 0x29D7C, [ 4588] = 0x20FEC, [ 4589] = 0x20E0A,
++  [ 4591] = 0x275A3, [ 4592] = 0x20FED, [ 4594] = 0x26048, [ 4595] = 0x21187,
++  [ 4596] = 0x71A3, [ 4597] = 0x7E8E, [ 4598] = 0x9D50, [ 4599] = 0x4E1A,
++  [ 4600] = 0x4E04, [ 4601] = 0x3577, [ 4602] = 0x5B0D, [ 4603] = 0x6CB2,
++  [ 4604] = 0x5367, [ 4605] = 0x36AC, [ 4606] = 0x39DC, [ 4607] = 0x537D,
++  [ 4608] = 0x36A5, [ 4609] = 0x24618, [ 4610] = 0x589A, [ 4611] = 0x24B6E,
++  [ 4612] = 0x822D, [ 4613] = 0x544B, [ 4614] = 0x57AA, [ 4615] = 0x25A95,
++  [ 4616] = 0x20979, [ 4618] = 0x3A52, [ 4619] = 0x22465, [ 4620] = 0x7374,
++  [ 4621] = 0x29EAC, [ 4622] = 0x4D09, [ 4623] = 0x9BED, [ 4624] = 0x23CFE,
++  [ 4625] = 0x29F30, [ 4626] = 0x4C5B, [ 4627] = 0x24FA9, [ 4628] = 0x2959E,
++  [ 4629] = 0x29FDE, [ 4630] = 0x845C, [ 4631] = 0x23DB6, [ 4632] = 0x272B2,
++  [ 4633] = 0x267B3, [ 4634] = 0x23720, [ 4635] = 0x632E, [ 4636] = 0x7D25,
++  [ 4637] = 0x23EF7, [ 4638] = 0x23E2C, [ 4639] = 0x3A2A, [ 4640] = 0x9008,
++  [ 4641] = 0x52CC, [ 4642] = 0x3E74, [ 4643] = 0x367A, [ 4644] = 0x45E9,
++  [ 4645] = 0x2048E, [ 4646] = 0x7640, [ 4647] = 0x5AF0, [ 4648] = 0x20EB6,
++  [ 4649] = 0x787A, [ 4650] = 0x27F2E, [ 4651] = 0x58A7, [ 4652] = 0x40BF,
++  [ 4653] = 0x567C, [ 4654] = 0x9B8B, [ 4655] = 0x5D74, [ 4656] = 0x7654,
++  [ 4657] = 0x2A434, [ 4658] = 0x9E85, [ 4659] = 0x4CE1, [ 4661] = 0x37FB,
++  [ 4662] = 0x6119, [ 4663] = 0x230DA, [ 4664] = 0x243F2, [ 4666] = 0x565D,
++  [ 4667] = 0x212A9, [ 4668] = 0x57A7, [ 4669] = 0x24963, [ 4670] = 0x29E06,
++  [ 4671] = 0x5234, [ 4672] = 0x270AE, [ 4673] = 0x35AD, [ 4675] = 0x9D7C,
++  [ 4680] = 0x7C56, [ 4681] = 0x9B39, [ 4682] = 0x57DE, [ 4683] = 0x2176C,
++  [ 4684] = 0x5C53, [ 4685] = 0x64D3, [ 4686] = 0x294D0, [ 4687] = 0x26335,
++  [ 4688] = 0x27164, [ 4689] = 0x86AD, [ 4690] = 0x20D28, [ 4691] = 0x26D22,
++  [ 4692] = 0x24AE2, [ 4693] = 0x20D71, [ 4695] = 0x51FE, [ 4696] = 0x21F0F,
++  [ 4697] = 0x5D8E, [ 4698] = 0x9703, [ 4699] = 0x21DD1, [ 4700] = 0x9E81,
++  [ 4701] = 0x904C, [ 4702] = 0x7B1F, [ 4703] = 0x9B02, [ 4704] = 0x5CD1,
++  [ 4705] = 0x7BA3, [ 4706] = 0x6268, [ 4707] = 0x6335, [ 4708] = 0x9AFF,
++  [ 4709] = 0x7BCF, [ 4710] = 0x9B2A, [ 4711] = 0x7C7E, [ 4713] = 0x7C42,
++  [ 4714] = 0x7C86, [ 4715] = 0x9C15, [ 4716] = 0x7BFC, [ 4717] = 0x9B09,
++  [ 4719] = 0x9C1B, [ 4720] = 0x2493E, [ 4721] = 0x9F5A, [ 4722] = 0x5573,
++  [ 4723] = 0x5BC3, [ 4724] = 0x4FFD, [ 4725] = 0x9E98, [ 4726] = 0x4FF2,
++  [ 4727] = 0x5260, [ 4728] = 0x3E06, [ 4729] = 0x52D1, [ 4730] = 0x5767,
++  [ 4731] = 0x5056, [ 4732] = 0x59B7, [ 4733] = 0x5E12, [ 4734] = 0x97C8,
++  [ 4735] = 0x9DAB, [ 4736] = 0x8F5C, [ 4737] = 0x5469, [ 4738] = 0x97B4,
++  [ 4739] = 0x9940, [ 4740] = 0x97BA, [ 4741] = 0x532C, [ 4742] = 0x6130,
++  [ 4777] = 0x692C, [ 4778] = 0x53DA, [ 4779] = 0x9C0A, [ 4780] = 0x9D02,
++  [ 4781] = 0x4C3B, [ 4782] = 0x9641, [ 4783] = 0x6980, [ 4784] = 0x50A6,
++  [ 4785] = 0x7546, [ 4786] = 0x2176D, [ 4787] = 0x99DA, [ 4788] = 0x5273,
++  [ 4790] = 0x9159, [ 4791] = 0x9681, [ 4792] = 0x915C, [ 4794] = 0x9151,
++  [ 4795] = 0x28E97, [ 4796] = 0x637F, [ 4797] = 0x26D23, [ 4798] = 0x6ACA,
++  [ 4799] = 0x5611, [ 4800] = 0x918E, [ 4801] = 0x757A, [ 4802] = 0x6285,
++  [ 4803] = 0x203FC, [ 4804] = 0x734F, [ 4805] = 0x7C70, [ 4806] = 0x25C21,
++  [ 4807] = 0x23CFD, [ 4809] = 0x24919, [ 4810] = 0x76D6, [ 4811] = 0x9B9D,
++  [ 4812] = 0x4E2A, [ 4813] = 0x20CD4, [ 4814] = 0x83BE, [ 4815] = 0x8842,
++  [ 4817] = 0x5C4A, [ 4818] = 0x69C0, [ 4820] = 0x577A, [ 4821] = 0x521F,
++  [ 4822] = 0x5DF5, [ 4823] = 0x4ECE, [ 4824] = 0x6C31, [ 4825] = 0x201F2,
++  [ 4826] = 0x4F39, [ 4827] = 0x549C, [ 4828] = 0x54DA, [ 4829] = 0x529A,
++  [ 4830] = 0x8D82, [ 4831] = 0x35FE, [ 4833] = 0x35F3, [ 4835] = 0x6B52,
++  [ 4836] = 0x917C, [ 4837] = 0x9FA5, [ 4838] = 0x9B97, [ 4839] = 0x982E,
++  [ 4840] = 0x98B4, [ 4841] = 0x9ABA, [ 4842] = 0x9EA8, [ 4843] = 0x9E84,
++  [ 4844] = 0x717A, [ 4845] = 0x7B14, [ 4847] = 0x6BFA, [ 4848] = 0x8818,
++  [ 4849] = 0x7F78, [ 4851] = 0x5620, [ 4852] = 0x2A64A, [ 4853] = 0x8E77,
++  [ 4854] = 0x9F53, [ 4856] = 0x8DD4, [ 4857] = 0x8E4F, [ 4858] = 0x9E1C,
++  [ 4859] = 0x8E01, [ 4860] = 0x6282, [ 4861] = 0x2837D, [ 4862] = 0x8E28,
++  [ 4863] = 0x8E75, [ 4864] = 0x7AD3, [ 4865] = 0x24A77, [ 4866] = 0x7A3E,
++  [ 4867] = 0x78D8, [ 4868] = 0x6CEA, [ 4869] = 0x8A67, [ 4870] = 0x7607,
++  [ 4875] = 0x28A5A, [ 4876] = 0x9F26, [ 4877] = 0x6CCE, [ 4878] = 0x87D6,
++  [ 4879] = 0x75C3, [ 4880] = 0x2A2B2, [ 4881] = 0x7853, [ 4882] = 0x2F840,
++  [ 4883] = 0x8D0C, [ 4884] = 0x72E2, [ 4885] = 0x7371, [ 4886] = 0x8B2D,
++  [ 4887] = 0x7302, [ 4888] = 0x74F1, [ 4889] = 0x8CEB, [ 4890] = 0x24ABB,
++  [ 4891] = 0x862F, [ 4892] = 0x5FBA, [ 4893] = 0x88A0, [ 4894] = 0x44B7,
++  [ 4896] = 0x2183B, [ 4897] = 0x26E05, [ 4899] = 0x8A7E, [ 4900] = 0x2251B,
++  [ 4902] = 0x60FD, [ 4903] = 0x7667, [ 4904] = 0x9AD7, [ 4905] = 0x9D44,
++  [ 4906] = 0x936E, [ 4907] = 0x9B8F, [ 4908] = 0x87F5, [ 4911] = 0x8CF7,
++  [ 4912] = 0x732C, [ 4913] = 0x9721, [ 4914] = 0x9BB0, [ 4915] = 0x35D6,
++  [ 4916] = 0x72B2, [ 4917] = 0x4C07, [ 4918] = 0x7C51, [ 4919] = 0x994A,
++  [ 4920] = 0x26159, [ 4921] = 0x6159, [ 4922] = 0x4C04, [ 4923] = 0x9E96,
++  [ 4924] = 0x617D, [ 4926] = 0x575F, [ 4927] = 0x616F, [ 4928] = 0x62A6,
++  [ 4929] = 0x6239, [ 4931] = 0x3A5C, [ 4932] = 0x61E2, [ 4933] = 0x53AA,
++  [ 4934] = 0x233F5, [ 4935] = 0x6364, [ 4936] = 0x6802, [ 4937] = 0x35D2,
++  [ 4972] = 0x5D57, [ 4973] = 0x28BC2, [ 4974] = 0x8FDA, [ 4975] = 0x28E39,
++  [ 4977] = 0x50D9, [ 4978] = 0x21D46, [ 4979] = 0x7906, [ 4980] = 0x5332,
++  [ 4981] = 0x9638, [ 4982] = 0x20F3B, [ 4983] = 0x4065, [ 4985] = 0x77FE,
++  [ 4987] = 0x7CC2, [ 4988] = 0x25F1A, [ 4989] = 0x7CDA, [ 4990] = 0x7A2D,
++  [ 4991] = 0x8066, [ 4992] = 0x8063, [ 4993] = 0x7D4D, [ 4994] = 0x7505,
++  [ 4995] = 0x74F2, [ 4996] = 0x8994, [ 4997] = 0x821A, [ 4998] = 0x670C,
++  [ 4999] = 0x8062, [ 5000] = 0x27486, [ 5001] = 0x805B, [ 5002] = 0x74F0,
++  [ 5003] = 0x8103, [ 5004] = 0x7724, [ 5005] = 0x8989, [ 5006] = 0x267CC,
++  [ 5007] = 0x7553, [ 5008] = 0x26ED1, [ 5009] = 0x87A9, [ 5010] = 0x87CE,
++  [ 5011] = 0x81C8, [ 5012] = 0x878C, [ 5013] = 0x8A49, [ 5014] = 0x8CAD,
++  [ 5015] = 0x8B43, [ 5016] = 0x772B, [ 5017] = 0x74F8, [ 5018] = 0x84DA,
++  [ 5019] = 0x3635, [ 5020] = 0x69B2, [ 5021] = 0x8DA6, [ 5023] = 0x89A9,
++  [ 5025] = 0x6DB9, [ 5026] = 0x87C1, [ 5027] = 0x24011, [ 5028] = 0x74E7,
++  [ 5029] = 0x3DDB, [ 5030] = 0x7176, [ 5031] = 0x60A4, [ 5032] = 0x619C,
++  [ 5033] = 0x3CD1, [ 5035] = 0x6077, [ 5037] = 0x7F71, [ 5038] = 0x28B2D,
++  [ 5040] = 0x60E9, [ 5041] = 0x4B7E, [ 5042] = 0x5220, [ 5043] = 0x3C18,
++  [ 5044] = 0x23CC7, [ 5045] = 0x25ED7, [ 5046] = 0x27656, [ 5047] = 0x25531,
++  [ 5048] = 0x21944, [ 5049] = 0x212FE, [ 5050] = 0x29903, [ 5051] = 0x26DDC,
++  [ 5052] = 0x270AD, [ 5053] = 0x5CC1, [ 5054] = 0x261AD, [ 5055] = 0x28A0F,
++  [ 5056] = 0x23677, [ 5057] = 0x200EE, [ 5058] = 0x26846, [ 5059] = 0x24F0E,
++  [ 5060] = 0x4562, [ 5061] = 0x5B1F, [ 5062] = 0x2634C, [ 5063] = 0x9F50,
++  [ 5064] = 0x9EA6, [ 5065] = 0x2626B, [ 5070] = 0x3000, [ 5071] = 0xFF0C,
++  [ 5072] = 0x3001, [ 5073] = 0x3002, [ 5074] = 0xFF0E, [ 5075] = 0x2022,
++  [ 5076] = 0xFF1B, [ 5077] = 0xFF1A, [ 5078] = 0xFF1F, [ 5079] = 0xFF01,
++  [ 5080] = 0xFE30, [ 5081] = 0x2026, [ 5082] = 0x2025, [ 5083] = 0xFE50,
++  [ 5084] = 0xFF64, [ 5085] = 0xFE52, [ 5086] = 0x00B7, [ 5087] = 0xFE54,
++  [ 5088] = 0xFE55, [ 5089] = 0xFE56, [ 5090] = 0xFE57, [ 5091] = 0xFF5C,
++  [ 5092] = 0x2013, [ 5093] = 0xFE31, [ 5094] = 0x2014, [ 5095] = 0xFE33,
++  [ 5097] = 0xFE34, [ 5098] = 0xFE4F, [ 5099] = 0xFF08, [ 5100] = 0xFF09,
++  [ 5101] = 0xFE35, [ 5102] = 0xFE36, [ 5103] = 0xFF5B, [ 5104] = 0xFF5D,
++  [ 5105] = 0xFE37, [ 5106] = 0xFE38, [ 5107] = 0x3014, [ 5108] = 0x3015,
++  [ 5109] = 0xFE39, [ 5110] = 0xFE3A, [ 5111] = 0x3010, [ 5112] = 0x3011,
++  [ 5113] = 0xFE3B, [ 5114] = 0xFE3C, [ 5115] = 0x300A, [ 5116] = 0x300B,
++  [ 5117] = 0xFE3D, [ 5118] = 0xFE3E, [ 5119] = 0x3008, [ 5120] = 0x3009,
++  [ 5121] = 0xFE3F, [ 5122] = 0xFE40, [ 5123] = 0x300C, [ 5124] = 0x300D,
++  [ 5125] = 0xFE41, [ 5126] = 0xFE42, [ 5127] = 0x300E, [ 5128] = 0x300F,
++  [ 5129] = 0xFE43, [ 5130] = 0xFE44, [ 5131] = 0xFE59, [ 5132] = 0xFE5A,
++  [ 5167] = 0xFE5B, [ 5168] = 0xFE5C, [ 5169] = 0xFE5D, [ 5170] = 0xFE5E,
++  [ 5171] = 0x2018, [ 5172] = 0x2019, [ 5173] = 0x201C, [ 5174] = 0x201D,
++  [ 5175] = 0x301D, [ 5176] = 0x301E, [ 5177] = 0x2035, [ 5178] = 0x2032,
++  [ 5179] = 0xFF03, [ 5180] = 0xFF06, [ 5181] = 0xFF0A, [ 5182] = 0x203B,
++  [ 5183] = 0x00A7, [ 5184] = 0x3003, [ 5185] = 0x25CB, [ 5186] = 0x25CF,
++  [ 5187] = 0x25B3, [ 5188] = 0x25B2, [ 5189] = 0x25CE, [ 5190] = 0x2606,
++  [ 5191] = 0x2605, [ 5192] = 0x25C7, [ 5193] = 0x25C6, [ 5194] = 0x25A1,
++  [ 5195] = 0x25A0, [ 5196] = 0x25BD, [ 5197] = 0x25BC, [ 5198] = 0x32A3,
++  [ 5199] = 0x2105, [ 5200] = 0x203E, [ 5202] = 0xFF3F, [ 5204] = 0xFE49,
++  [ 5205] = 0xFE4A, [ 5206] = 0xFE4D, [ 5207] = 0xFE4E, [ 5208] = 0xFE4B,
++  [ 5209] = 0xFE4C, [ 5210] = 0xFE5F, [ 5211] = 0xFE60, [ 5212] = 0xFE61,
++  [ 5213] = 0xFF0B, [ 5214] = 0xFF0D, [ 5215] = 0x00D7, [ 5216] = 0x00F7,
++  [ 5217] = 0x00B1, [ 5218] = 0x221A, [ 5219] = 0xFF1C, [ 5220] = 0xFF1E,
++  [ 5221] = 0xFF1D, [ 5222] = 0x2266, [ 5223] = 0x2267, [ 5224] = 0x2260,
++  [ 5225] = 0x221E, [ 5226] = 0x2252, [ 5227] = 0x2261, [ 5228] = 0xFE62,
++  [ 5229] = 0xFE63, [ 5230] = 0xFE64, [ 5231] = 0xFE65, [ 5232] = 0xFE66,
++  [ 5233] = 0x223C, [ 5234] = 0x2229, [ 5235] = 0x222A, [ 5236] = 0x22A5,
++  [ 5237] = 0x2220, [ 5238] = 0x221F, [ 5239] = 0x22BF, [ 5240] = 0x33D2,
++  [ 5241] = 0x33D1, [ 5242] = 0x222B, [ 5243] = 0x222E, [ 5244] = 0x2235,
++  [ 5245] = 0x2234, [ 5246] = 0x2640, [ 5247] = 0x2642, [ 5248] = 0x2641,
++  [ 5249] = 0x2609, [ 5250] = 0x2191, [ 5251] = 0x2193, [ 5252] = 0x2190,
++  [ 5253] = 0x2192, [ 5254] = 0x2196, [ 5255] = 0x2197, [ 5256] = 0x2199,
++  [ 5257] = 0x2198, [ 5258] = 0x2225, [ 5259] = 0x2223, [ 5266] = 0xFF0F,
++  [ 5267] = 0xFF3C, [ 5268] = 0xFF04, [ 5269] = 0x00A5, [ 5270] = 0x3012,
++  [ 5271] = 0x00A2, [ 5272] = 0x00A3, [ 5273] = 0xFF05, [ 5274] = 0xFF20,
++  [ 5275] = 0x2103, [ 5276] = 0x2109, [ 5277] = 0xFE69, [ 5278] = 0xFE6A,
++  [ 5279] = 0xFE6B, [ 5280] = 0x33D5, [ 5281] = 0x339C, [ 5282] = 0x339D,
++  [ 5283] = 0x339E, [ 5284] = 0x33CE, [ 5285] = 0x33A1, [ 5286] = 0x338E,
++  [ 5287] = 0x338F, [ 5288] = 0x33C4, [ 5289] = 0x00B0, [ 5290] = 0x5159,
++  [ 5291] = 0x515B, [ 5292] = 0x515E, [ 5293] = 0x515D, [ 5294] = 0x5161,
++  [ 5295] = 0x5163, [ 5296] = 0x55E7, [ 5297] = 0x74E9, [ 5298] = 0x7CCE,
++  [ 5299] = 0x2581, [ 5300] = 0x2582, [ 5301] = 0x2583, [ 5302] = 0x2584,
++  [ 5303] = 0x2585, [ 5304] = 0x2586, [ 5305] = 0x2587, [ 5306] = 0x2588,
++  [ 5307] = 0x258F, [ 5308] = 0x258E, [ 5309] = 0x258D, [ 5310] = 0x258C,
++  [ 5311] = 0x258B, [ 5312] = 0x258A, [ 5313] = 0x2589, [ 5314] = 0x253C,
++  [ 5315] = 0x2534, [ 5316] = 0x252C, [ 5317] = 0x2524, [ 5318] = 0x251C,
++  [ 5319] = 0x2594, [ 5320] = 0x2500, [ 5321] = 0x2502, [ 5322] = 0x2595,
++  [ 5323] = 0x250C, [ 5324] = 0x2510, [ 5325] = 0x2514, [ 5326] = 0x2518,
++  [ 5327] = 0x256D, [ 5362] = 0x256E, [ 5363] = 0x2570, [ 5364] = 0x256F,
++  [ 5365] = 0x2550, [ 5366] = 0x255E, [ 5367] = 0x256A, [ 5368] = 0x2561,
++  [ 5369] = 0x25E2, [ 5370] = 0x25E3, [ 5371] = 0x25E5, [ 5372] = 0x25E4,
++  [ 5373] = 0x2571, [ 5374] = 0x2572, [ 5375] = 0x2573, [ 5376] = 0xFF10,
++  [ 5377] = 0xFF11, [ 5378] = 0xFF12, [ 5379] = 0xFF13, [ 5380] = 0xFF14,
++  [ 5381] = 0xFF15, [ 5382] = 0xFF16, [ 5383] = 0xFF17, [ 5384] = 0xFF18,
++  [ 5385] = 0xFF19, [ 5386] = 0x2160, [ 5387] = 0x2161, [ 5388] = 0x2162,
++  [ 5389] = 0x2163, [ 5390] = 0x2164, [ 5391] = 0x2165, [ 5392] = 0x2166,
++  [ 5393] = 0x2167, [ 5394] = 0x2168, [ 5395] = 0x2169, [ 5396] = 0x3021,
++  [ 5397] = 0x3022, [ 5398] = 0x3023, [ 5399] = 0x3024, [ 5400] = 0x3025,
++  [ 5401] = 0x3026, [ 5402] = 0x3027, [ 5403] = 0x3028, [ 5404] = 0x3029,
++  [ 5406] = 0x5344, [ 5408] = 0xFF21, [ 5409] = 0xFF22, [ 5410] = 0xFF23,
++  [ 5411] = 0xFF24, [ 5412] = 0xFF25, [ 5413] = 0xFF26, [ 5414] = 0xFF27,
++  [ 5415] = 0xFF28, [ 5416] = 0xFF29, [ 5417] = 0xFF2A, [ 5418] = 0xFF2B,
++  [ 5419] = 0xFF2C, [ 5420] = 0xFF2D, [ 5421] = 0xFF2E, [ 5422] = 0xFF2F,
++  [ 5423] = 0xFF30, [ 5424] = 0xFF31, [ 5425] = 0xFF32, [ 5426] = 0xFF33,
++  [ 5427] = 0xFF34, [ 5428] = 0xFF35, [ 5429] = 0xFF36, [ 5430] = 0xFF37,
++  [ 5431] = 0xFF38, [ 5432] = 0xFF39, [ 5433] = 0xFF3A, [ 5434] = 0xFF41,
++  [ 5435] = 0xFF42, [ 5436] = 0xFF43, [ 5437] = 0xFF44, [ 5438] = 0xFF45,
++  [ 5439] = 0xFF46, [ 5440] = 0xFF47, [ 5441] = 0xFF48, [ 5442] = 0xFF49,
++  [ 5443] = 0xFF4A, [ 5444] = 0xFF4B, [ 5445] = 0xFF4C, [ 5446] = 0xFF4D,
++  [ 5447] = 0xFF4E, [ 5448] = 0xFF4F, [ 5449] = 0xFF50, [ 5450] = 0xFF51,
++  [ 5451] = 0xFF52, [ 5452] = 0xFF53, [ 5453] = 0xFF54, [ 5454] = 0xFF55,
++  [ 5455] = 0xFF56, [ 5460] = 0xFF57, [ 5461] = 0xFF58, [ 5462] = 0xFF59,
++  [ 5463] = 0xFF5A, [ 5464] = 0x0391, [ 5465] = 0x0392, [ 5466] = 0x0393,
++  [ 5467] = 0x0394, [ 5468] = 0x0395, [ 5469] = 0x0396, [ 5470] = 0x0397,
++  [ 5471] = 0x0398, [ 5472] = 0x0399, [ 5473] = 0x039A, [ 5474] = 0x039B,
++  [ 5475] = 0x039C, [ 5476] = 0x039D, [ 5477] = 0x039E, [ 5478] = 0x039F,
++  [ 5479] = 0x03A0, [ 5480] = 0x03A1, [ 5481] = 0x03A3, [ 5482] = 0x03A4,
++  [ 5483] = 0x03A5, [ 5484] = 0x03A6, [ 5485] = 0x03A7, [ 5486] = 0x03A8,
++  [ 5487] = 0x03A9, [ 5488] = 0x03B1, [ 5489] = 0x03B2, [ 5490] = 0x03B3,
++  [ 5491] = 0x03B4, [ 5492] = 0x03B5, [ 5493] = 0x03B6, [ 5494] = 0x03B7,
++  [ 5495] = 0x03B8, [ 5496] = 0x03B9, [ 5497] = 0x03BA, [ 5498] = 0x03BB,
++  [ 5499] = 0x03BC, [ 5500] = 0x03BD, [ 5501] = 0x03BE, [ 5502] = 0x03BF,
++  [ 5503] = 0x03C0, [ 5504] = 0x03C1, [ 5505] = 0x03C3, [ 5506] = 0x03C4,
++  [ 5507] = 0x03C5, [ 5508] = 0x03C6, [ 5509] = 0x03C7, [ 5510] = 0x03C8,
++  [ 5511] = 0x03C9, [ 5512] = 0x3105, [ 5513] = 0x3106, [ 5514] = 0x3107,
++  [ 5515] = 0x3108, [ 5516] = 0x3109, [ 5517] = 0x310A, [ 5518] = 0x310B,
++  [ 5519] = 0x310C, [ 5520] = 0x310D, [ 5521] = 0x310E, [ 5522] = 0x310F,
++  [ 5557] = 0x3110, [ 5558] = 0x3111, [ 5559] = 0x3112, [ 5560] = 0x3113,
++  [ 5561] = 0x3114, [ 5562] = 0x3115, [ 5563] = 0x3116, [ 5564] = 0x3117,
++  [ 5565] = 0x3118, [ 5566] = 0x3119, [ 5567] = 0x311A, [ 5568] = 0x311B,
++  [ 5569] = 0x311C, [ 5570] = 0x311D, [ 5571] = 0x311E, [ 5572] = 0x311F,
++  [ 5573] = 0x3120, [ 5574] = 0x3121, [ 5575] = 0x3122, [ 5576] = 0x3123,
++  [ 5577] = 0x3124, [ 5578] = 0x3125, [ 5579] = 0x3126, [ 5580] = 0x3127,
++  [ 5581] = 0x3128, [ 5582] = 0x3129, [ 5583] = 0x02D9, [ 5584] = 0x02C9,
++  [ 5585] = 0x02CA, [ 5586] = 0x02C7, [ 5587] = 0x02CB, [ 5655] = 0x4E00,
++  [ 5656] = 0x4E59, [ 5657] = 0x4E01, [ 5658] = 0x4E03, [ 5659] = 0x4E43,
++  [ 5660] = 0x4E5D, [ 5661] = 0x4E86, [ 5662] = 0x4E8C, [ 5663] = 0x4EBA,
++  [ 5664] = 0x513F, [ 5665] = 0x5165, [ 5666] = 0x516B, [ 5667] = 0x51E0,
++  [ 5668] = 0x5200, [ 5669] = 0x5201, [ 5670] = 0x529B, [ 5671] = 0x5315,
++  [ 5672] = 0x5341, [ 5673] = 0x535C, [ 5674] = 0x53C8, [ 5675] = 0x4E09,
++  [ 5676] = 0x4E0B, [ 5677] = 0x4E08, [ 5678] = 0x4E0A, [ 5679] = 0x4E2B,
++  [ 5680] = 0x4E38, [ 5681] = 0x51E1, [ 5682] = 0x4E45, [ 5683] = 0x4E48,
++  [ 5684] = 0x4E5F, [ 5685] = 0x4E5E, [ 5686] = 0x4E8E, [ 5687] = 0x4EA1,
++  [ 5688] = 0x5140, [ 5689] = 0x5203, [ 5690] = 0x52FA, [ 5691] = 0x5343,
++  [ 5692] = 0x53C9, [ 5693] = 0x53E3, [ 5694] = 0x571F, [ 5695] = 0x58EB,
++  [ 5696] = 0x5915, [ 5697] = 0x5927, [ 5698] = 0x5973, [ 5699] = 0x5B50,
++  [ 5700] = 0x5B51, [ 5701] = 0x5B53, [ 5702] = 0x5BF8, [ 5703] = 0x5C0F,
++  [ 5704] = 0x5C22, [ 5705] = 0x5C38, [ 5706] = 0x5C71, [ 5707] = 0x5DDD,
++  [ 5708] = 0x5DE5, [ 5709] = 0x5DF1, [ 5710] = 0x5DF2, [ 5711] = 0x5DF3,
++  [ 5712] = 0x5DFE, [ 5713] = 0x5E72, [ 5714] = 0x5EFE, [ 5715] = 0x5F0B,
++  [ 5716] = 0x5F13, [ 5717] = 0x624D, [ 5752] = 0x4E11, [ 5753] = 0x4E10,
++  [ 5754] = 0x4E0D, [ 5755] = 0x4E2D, [ 5756] = 0x4E30, [ 5757] = 0x4E39,
++  [ 5758] = 0x4E4B, [ 5759] = 0x5C39, [ 5760] = 0x4E88, [ 5761] = 0x4E91,
++  [ 5762] = 0x4E95, [ 5763] = 0x4E92, [ 5764] = 0x4E94, [ 5765] = 0x4EA2,
++  [ 5766] = 0x4EC1, [ 5767] = 0x4EC0, [ 5768] = 0x4EC3, [ 5769] = 0x4EC6,
++  [ 5770] = 0x4EC7, [ 5771] = 0x4ECD, [ 5772] = 0x4ECA, [ 5773] = 0x4ECB,
++  [ 5774] = 0x4EC4, [ 5775] = 0x5143, [ 5776] = 0x5141, [ 5777] = 0x5167,
++  [ 5778] = 0x516D, [ 5779] = 0x516E, [ 5780] = 0x516C, [ 5781] = 0x5197,
++  [ 5782] = 0x51F6, [ 5783] = 0x5206, [ 5784] = 0x5207, [ 5785] = 0x5208,
++  [ 5786] = 0x52FB, [ 5787] = 0x52FE, [ 5788] = 0x52FF, [ 5789] = 0x5316,
++  [ 5790] = 0x5339, [ 5791] = 0x5348, [ 5792] = 0x5347, [ 5793] = 0x5345,
++  [ 5794] = 0x535E, [ 5795] = 0x5384, [ 5796] = 0x53CB, [ 5797] = 0x53CA,
++  [ 5798] = 0x53CD, [ 5799] = 0x58EC, [ 5800] = 0x5929, [ 5801] = 0x592B,
++  [ 5802] = 0x592A, [ 5803] = 0x592D, [ 5804] = 0x5B54, [ 5805] = 0x5C11,
++  [ 5806] = 0x5C24, [ 5807] = 0x5C3A, [ 5808] = 0x5C6F, [ 5809] = 0x5DF4,
++  [ 5810] = 0x5E7B, [ 5811] = 0x5EFF, [ 5812] = 0x5F14, [ 5813] = 0x5F15,
++  [ 5814] = 0x5FC3, [ 5815] = 0x6208, [ 5816] = 0x6236, [ 5817] = 0x624B,
++  [ 5818] = 0x624E, [ 5819] = 0x652F, [ 5820] = 0x6587, [ 5821] = 0x6597,
++  [ 5822] = 0x65A4, [ 5823] = 0x65B9, [ 5824] = 0x65E5, [ 5825] = 0x66F0,
++  [ 5826] = 0x6708, [ 5827] = 0x6728, [ 5828] = 0x6B20, [ 5829] = 0x6B62,
++  [ 5830] = 0x6B79, [ 5831] = 0x6BCB, [ 5832] = 0x6BD4, [ 5833] = 0x6BDB,
++  [ 5834] = 0x6C0F, [ 5835] = 0x6C34, [ 5836] = 0x706B, [ 5837] = 0x722A,
++  [ 5838] = 0x7236, [ 5839] = 0x723B, [ 5840] = 0x7247, [ 5841] = 0x7259,
++  [ 5842] = 0x725B, [ 5843] = 0x72AC, [ 5844] = 0x738B, [ 5845] = 0x4E19,
++  [ 5850] = 0x4E16, [ 5851] = 0x4E15, [ 5852] = 0x4E14, [ 5853] = 0x4E18,
++  [ 5854] = 0x4E3B, [ 5855] = 0x4E4D, [ 5856] = 0x4E4F, [ 5857] = 0x4E4E,
++  [ 5858] = 0x4EE5, [ 5859] = 0x4ED8, [ 5860] = 0x4ED4, [ 5861] = 0x4ED5,
++  [ 5862] = 0x4ED6, [ 5863] = 0x4ED7, [ 5864] = 0x4EE3, [ 5865] = 0x4EE4,
++  [ 5866] = 0x4ED9, [ 5867] = 0x4EDE, [ 5868] = 0x5145, [ 5869] = 0x5144,
++  [ 5870] = 0x5189, [ 5871] = 0x518A, [ 5872] = 0x51AC, [ 5873] = 0x51F9,
++  [ 5874] = 0x51FA, [ 5875] = 0x51F8, [ 5876] = 0x520A, [ 5877] = 0x52A0,
++  [ 5878] = 0x529F, [ 5879] = 0x5305, [ 5880] = 0x5306, [ 5881] = 0x5317,
++  [ 5882] = 0x531D, [ 5883] = 0x4EDF, [ 5884] = 0x534A, [ 5885] = 0x5349,
++  [ 5886] = 0x5361, [ 5887] = 0x5360, [ 5888] = 0x536F, [ 5889] = 0x536E,
++  [ 5890] = 0x53BB, [ 5891] = 0x53EF, [ 5892] = 0x53E4, [ 5893] = 0x53F3,
++  [ 5894] = 0x53EC, [ 5895] = 0x53EE, [ 5896] = 0x53E9, [ 5897] = 0x53E8,
++  [ 5898] = 0x53FC, [ 5899] = 0x53F8, [ 5900] = 0x53F5, [ 5901] = 0x53EB,
++  [ 5902] = 0x53E6, [ 5903] = 0x53EA, [ 5904] = 0x53F2, [ 5905] = 0x53F1,
++  [ 5906] = 0x53F0, [ 5907] = 0x53E5, [ 5908] = 0x53ED, [ 5909] = 0x53FB,
++  [ 5910] = 0x56DB, [ 5911] = 0x56DA, [ 5912] = 0x5916, [ 5947] = 0x592E,
++  [ 5948] = 0x5931, [ 5949] = 0x5974, [ 5950] = 0x5976, [ 5951] = 0x5B55,
++  [ 5952] = 0x5B83, [ 5953] = 0x5C3C, [ 5954] = 0x5DE8, [ 5955] = 0x5DE7,
++  [ 5956] = 0x5DE6, [ 5957] = 0x5E02, [ 5958] = 0x5E03, [ 5959] = 0x5E73,
++  [ 5960] = 0x5E7C, [ 5961] = 0x5F01, [ 5962] = 0x5F18, [ 5963] = 0x5F17,
++  [ 5964] = 0x5FC5, [ 5965] = 0x620A, [ 5966] = 0x6253, [ 5967] = 0x6254,
++  [ 5968] = 0x6252, [ 5969] = 0x6251, [ 5970] = 0x65A5, [ 5971] = 0x65E6,
++  [ 5972] = 0x672E, [ 5973] = 0x672C, [ 5974] = 0x672A, [ 5975] = 0x672B,
++  [ 5976] = 0x672D, [ 5977] = 0x6B63, [ 5978] = 0x6BCD, [ 5979] = 0x6C11,
++  [ 5980] = 0x6C10, [ 5981] = 0x6C38, [ 5982] = 0x6C41, [ 5983] = 0x6C40,
++  [ 5984] = 0x6C3E, [ 5985] = 0x72AF, [ 5986] = 0x7384, [ 5987] = 0x7389,
++  [ 5988] = 0x74DC, [ 5989] = 0x74E6, [ 5990] = 0x7518, [ 5991] = 0x751F,
++  [ 5992] = 0x7528, [ 5993] = 0x7529, [ 5994] = 0x7530, [ 5995] = 0x7531,
++  [ 5996] = 0x7532, [ 5997] = 0x7533, [ 5998] = 0x758B, [ 5999] = 0x767D,
++  [ 6000] = 0x76AE, [ 6001] = 0x76BF, [ 6002] = 0x76EE, [ 6003] = 0x77DB,
++  [ 6004] = 0x77E2, [ 6005] = 0x77F3, [ 6006] = 0x793A, [ 6007] = 0x79BE,
++  [ 6008] = 0x7A74, [ 6009] = 0x7ACB, [ 6010] = 0x4E1E, [ 6011] = 0x4E1F,
++  [ 6012] = 0x4E52, [ 6013] = 0x4E53, [ 6014] = 0x4E69, [ 6015] = 0x4E99,
++  [ 6016] = 0x4EA4, [ 6017] = 0x4EA6, [ 6018] = 0x4EA5, [ 6019] = 0x4EFF,
++  [ 6020] = 0x4F09, [ 6021] = 0x4F19, [ 6022] = 0x4F0A, [ 6023] = 0x4F15,
++  [ 6024] = 0x4F0D, [ 6025] = 0x4F10, [ 6026] = 0x4F11, [ 6027] = 0x4F0F,
++  [ 6028] = 0x4EF2, [ 6029] = 0x4EF6, [ 6030] = 0x4EFB, [ 6031] = 0x4EF0,
++  [ 6032] = 0x4EF3, [ 6033] = 0x4EFD, [ 6034] = 0x4F01, [ 6035] = 0x4F0B,
++  [ 6036] = 0x5149, [ 6037] = 0x5147, [ 6038] = 0x5146, [ 6039] = 0x5148,
++  [ 6040] = 0x5168, [ 6045] = 0x5171, [ 6046] = 0x518D, [ 6047] = 0x51B0,
++  [ 6048] = 0x5217, [ 6049] = 0x5211, [ 6050] = 0x5212, [ 6051] = 0x520E,
++  [ 6052] = 0x5216, [ 6053] = 0x52A3, [ 6054] = 0x5308, [ 6055] = 0x5321,
++  [ 6056] = 0x5320, [ 6057] = 0x5370, [ 6058] = 0x5371, [ 6059] = 0x5409,
++  [ 6060] = 0x540F, [ 6061] = 0x540C, [ 6062] = 0x540A, [ 6063] = 0x5410,
++  [ 6064] = 0x5401, [ 6065] = 0x540B, [ 6066] = 0x5404, [ 6067] = 0x5411,
++  [ 6068] = 0x540D, [ 6069] = 0x5408, [ 6070] = 0x5403, [ 6071] = 0x540E,
++  [ 6072] = 0x5406, [ 6073] = 0x5412, [ 6074] = 0x56E0, [ 6075] = 0x56DE,
++  [ 6076] = 0x56DD, [ 6077] = 0x5733, [ 6078] = 0x5730, [ 6079] = 0x5728,
++  [ 6080] = 0x572D, [ 6081] = 0x572C, [ 6082] = 0x572F, [ 6083] = 0x5729,
++  [ 6084] = 0x5919, [ 6085] = 0x591A, [ 6086] = 0x5937, [ 6087] = 0x5938,
++  [ 6088] = 0x5984, [ 6089] = 0x5978, [ 6090] = 0x5983, [ 6091] = 0x597D,
++  [ 6092] = 0x5979, [ 6093] = 0x5982, [ 6094] = 0x5981, [ 6095] = 0x5B57,
++  [ 6096] = 0x5B58, [ 6097] = 0x5B87, [ 6098] = 0x5B88, [ 6099] = 0x5B85,
++  [ 6100] = 0x5B89, [ 6101] = 0x5BFA, [ 6102] = 0x5C16, [ 6103] = 0x5C79,
++  [ 6104] = 0x5DDE, [ 6105] = 0x5E06, [ 6106] = 0x5E76, [ 6107] = 0x5E74,
++  [ 6142] = 0x5F0F, [ 6143] = 0x5F1B, [ 6144] = 0x5FD9, [ 6145] = 0x5FD6,
++  [ 6146] = 0x620E, [ 6147] = 0x620C, [ 6148] = 0x620D, [ 6149] = 0x6210,
++  [ 6150] = 0x6263, [ 6151] = 0x625B, [ 6152] = 0x6258, [ 6153] = 0x6536,
++  [ 6154] = 0x65E9, [ 6155] = 0x65E8, [ 6156] = 0x65EC, [ 6157] = 0x65ED,
++  [ 6158] = 0x66F2, [ 6159] = 0x66F3, [ 6160] = 0x6709, [ 6161] = 0x673D,
++  [ 6162] = 0x6734, [ 6163] = 0x6731, [ 6164] = 0x6735, [ 6165] = 0x6B21,
++  [ 6166] = 0x6B64, [ 6167] = 0x6B7B, [ 6168] = 0x6C16, [ 6169] = 0x6C5D,
++  [ 6170] = 0x6C57, [ 6171] = 0x6C59, [ 6172] = 0x6C5F, [ 6173] = 0x6C60,
++  [ 6174] = 0x6C50, [ 6175] = 0x6C55, [ 6176] = 0x6C61, [ 6177] = 0x6C5B,
++  [ 6178] = 0x6C4D, [ 6179] = 0x6C4E, [ 6180] = 0x7070, [ 6181] = 0x725F,
++  [ 6182] = 0x725D, [ 6183] = 0x767E, [ 6184] = 0x7AF9, [ 6185] = 0x7C73,
++  [ 6186] = 0x7CF8, [ 6187] = 0x7F36, [ 6188] = 0x7F8A, [ 6189] = 0x7FBD,
++  [ 6190] = 0x8001, [ 6191] = 0x8003, [ 6192] = 0x800C, [ 6193] = 0x8012,
++  [ 6194] = 0x8033, [ 6195] = 0x807F, [ 6196] = 0x8089, [ 6197] = 0x808B,
++  [ 6198] = 0x808C, [ 6199] = 0x81E3, [ 6200] = 0x81EA, [ 6201] = 0x81F3,
++  [ 6202] = 0x81FC, [ 6203] = 0x820C, [ 6204] = 0x821B, [ 6205] = 0x821F,
++  [ 6206] = 0x826E, [ 6207] = 0x8272, [ 6208] = 0x827E, [ 6209] = 0x866B,
++  [ 6210] = 0x8840, [ 6211] = 0x884C, [ 6212] = 0x8863, [ 6213] = 0x897F,
++  [ 6214] = 0x9621, [ 6215] = 0x4E32, [ 6216] = 0x4EA8, [ 6217] = 0x4F4D,
++  [ 6218] = 0x4F4F, [ 6219] = 0x4F47, [ 6220] = 0x4F57, [ 6221] = 0x4F5E,
++  [ 6222] = 0x4F34, [ 6223] = 0x4F5B, [ 6224] = 0x4F55, [ 6225] = 0x4F30,
++  [ 6226] = 0x4F50, [ 6227] = 0x4F51, [ 6228] = 0x4F3D, [ 6229] = 0x4F3A,
++  [ 6230] = 0x4F38, [ 6231] = 0x4F43, [ 6232] = 0x4F54, [ 6233] = 0x4F3C,
++  [ 6234] = 0x4F46, [ 6235] = 0x4F63, [ 6240] = 0x4F5C, [ 6241] = 0x4F60,
++  [ 6242] = 0x4F2F, [ 6243] = 0x4F4E, [ 6244] = 0x4F36, [ 6245] = 0x4F59,
++  [ 6246] = 0x4F5D, [ 6247] = 0x4F48, [ 6248] = 0x4F5A, [ 6249] = 0x514C,
++  [ 6250] = 0x514B, [ 6251] = 0x514D, [ 6252] = 0x5175, [ 6253] = 0x51B6,
++  [ 6254] = 0x51B7, [ 6255] = 0x5225, [ 6256] = 0x5224, [ 6257] = 0x5229,
++  [ 6258] = 0x522A, [ 6259] = 0x5228, [ 6260] = 0x52AB, [ 6261] = 0x52A9,
++  [ 6262] = 0x52AA, [ 6263] = 0x52AC, [ 6264] = 0x5323, [ 6265] = 0x5373,
++  [ 6266] = 0x5375, [ 6267] = 0x541D, [ 6268] = 0x542D, [ 6269] = 0x541E,
++  [ 6270] = 0x543E, [ 6271] = 0x5426, [ 6272] = 0x544E, [ 6273] = 0x5427,
++  [ 6274] = 0x5446, [ 6275] = 0x5443, [ 6276] = 0x5433, [ 6277] = 0x5448,
++  [ 6278] = 0x5442, [ 6279] = 0x541B, [ 6280] = 0x5429, [ 6281] = 0x544A,
++  [ 6282] = 0x5439, [ 6283] = 0x543B, [ 6284] = 0x5438, [ 6285] = 0x542E,
++  [ 6286] = 0x5435, [ 6287] = 0x5436, [ 6288] = 0x5420, [ 6289] = 0x543C,
++  [ 6290] = 0x5440, [ 6291] = 0x5431, [ 6292] = 0x542B, [ 6293] = 0x541F,
++  [ 6294] = 0x542C, [ 6295] = 0x56EA, [ 6296] = 0x56F0, [ 6297] = 0x56E4,
++  [ 6298] = 0x56EB, [ 6299] = 0x574A, [ 6300] = 0x5751, [ 6301] = 0x5740,
++  [ 6302] = 0x574D, [ 6337] = 0x5747, [ 6338] = 0x574E, [ 6339] = 0x573E,
++  [ 6340] = 0x5750, [ 6341] = 0x574F, [ 6342] = 0x573B, [ 6343] = 0x58EF,
++  [ 6344] = 0x593E, [ 6345] = 0x599D, [ 6346] = 0x5992, [ 6347] = 0x59A8,
++  [ 6348] = 0x599E, [ 6349] = 0x59A3, [ 6350] = 0x5999, [ 6351] = 0x5996,
++  [ 6352] = 0x598D, [ 6353] = 0x59A4, [ 6354] = 0x5993, [ 6355] = 0x598A,
++  [ 6356] = 0x59A5, [ 6357] = 0x5B5D, [ 6358] = 0x5B5C, [ 6359] = 0x5B5A,
++  [ 6360] = 0x5B5B, [ 6361] = 0x5B8C, [ 6362] = 0x5B8B, [ 6363] = 0x5B8F,
++  [ 6364] = 0x5C2C, [ 6365] = 0x5C40, [ 6366] = 0x5C41, [ 6367] = 0x5C3F,
++  [ 6368] = 0x5C3E, [ 6369] = 0x5C90, [ 6370] = 0x5C91, [ 6371] = 0x5C94,
++  [ 6372] = 0x5C8C, [ 6373] = 0x5DEB, [ 6374] = 0x5E0C, [ 6375] = 0x5E8F,
++  [ 6376] = 0x5E87, [ 6377] = 0x5E8A, [ 6378] = 0x5EF7, [ 6379] = 0x5F04,
++  [ 6380] = 0x5F1F, [ 6381] = 0x5F64, [ 6382] = 0x5F62, [ 6383] = 0x5F77,
++  [ 6384] = 0x5F79, [ 6385] = 0x5FD8, [ 6386] = 0x5FCC, [ 6387] = 0x5FD7,
++  [ 6388] = 0x5FCD, [ 6389] = 0x5FF1, [ 6390] = 0x5FEB, [ 6391] = 0x5FF8,
++  [ 6392] = 0x5FEA, [ 6393] = 0x6212, [ 6394] = 0x6211, [ 6395] = 0x6284,
++  [ 6396] = 0x6297, [ 6397] = 0x6296, [ 6398] = 0x6280, [ 6399] = 0x6276,
++  [ 6400] = 0x6289, [ 6401] = 0x626D, [ 6402] = 0x628A, [ 6403] = 0x627C,
++  [ 6404] = 0x627E, [ 6405] = 0x6279, [ 6406] = 0x6273, [ 6407] = 0x6292,
++  [ 6408] = 0x626F, [ 6409] = 0x6298, [ 6410] = 0x626E, [ 6411] = 0x6295,
++  [ 6412] = 0x6293, [ 6413] = 0x6291, [ 6414] = 0x6286, [ 6415] = 0x6539,
++  [ 6416] = 0x653B, [ 6417] = 0x6538, [ 6418] = 0x65F1, [ 6419] = 0x66F4,
++  [ 6420] = 0x675F, [ 6421] = 0x674E, [ 6422] = 0x674F, [ 6423] = 0x6750,
++  [ 6424] = 0x6751, [ 6425] = 0x675C, [ 6426] = 0x6756, [ 6427] = 0x675E,
++  [ 6428] = 0x6749, [ 6429] = 0x6746, [ 6430] = 0x6760, [ 6435] = 0x6753,
++  [ 6436] = 0x6757, [ 6437] = 0x6B65, [ 6438] = 0x6BCF, [ 6439] = 0x6C42,
++  [ 6440] = 0x6C5E, [ 6441] = 0x6C99, [ 6442] = 0x6C81, [ 6443] = 0x6C88,
++  [ 6444] = 0x6C89, [ 6445] = 0x6C85, [ 6446] = 0x6C9B, [ 6447] = 0x6C6A,
++  [ 6448] = 0x6C7A, [ 6449] = 0x6C90, [ 6450] = 0x6C70, [ 6451] = 0x6C8C,
++  [ 6452] = 0x6C68, [ 6453] = 0x6C96, [ 6454] = 0x6C92, [ 6455] = 0x6C7D,
++  [ 6456] = 0x6C83, [ 6457] = 0x6C72, [ 6458] = 0x6C7E, [ 6459] = 0x6C74,
++  [ 6460] = 0x6C86, [ 6461] = 0x6C76, [ 6462] = 0x6C8D, [ 6463] = 0x6C94,
++  [ 6464] = 0x6C98, [ 6465] = 0x6C82, [ 6466] = 0x7076, [ 6467] = 0x707C,
++  [ 6468] = 0x707D, [ 6469] = 0x7078, [ 6470] = 0x7262, [ 6471] = 0x7261,
++  [ 6472] = 0x7260, [ 6473] = 0x72C4, [ 6474] = 0x72C2, [ 6475] = 0x7396,
++  [ 6476] = 0x752C, [ 6477] = 0x752B, [ 6478] = 0x7537, [ 6479] = 0x7538,
++  [ 6480] = 0x7682, [ 6481] = 0x76EF, [ 6482] = 0x77E3, [ 6483] = 0x79C1,
++  [ 6484] = 0x79C0, [ 6485] = 0x79BF, [ 6486] = 0x7A76, [ 6487] = 0x7CFB,
++  [ 6488] = 0x7F55, [ 6489] = 0x8096, [ 6490] = 0x8093, [ 6491] = 0x809D,
++  [ 6492] = 0x8098, [ 6493] = 0x809B, [ 6494] = 0x809A, [ 6495] = 0x80B2,
++  [ 6496] = 0x826F, [ 6497] = 0x8292, [ 6532] = 0x828B, [ 6533] = 0x828D,
++  [ 6534] = 0x898B, [ 6535] = 0x89D2, [ 6536] = 0x8A00, [ 6537] = 0x8C37,
++  [ 6538] = 0x8C46, [ 6539] = 0x8C55, [ 6540] = 0x8C9D, [ 6541] = 0x8D64,
++  [ 6542] = 0x8D70, [ 6543] = 0x8DB3, [ 6544] = 0x8EAB, [ 6545] = 0x8ECA,
++  [ 6546] = 0x8F9B, [ 6547] = 0x8FB0, [ 6548] = 0x8FC2, [ 6549] = 0x8FC6,
++  [ 6550] = 0x8FC5, [ 6551] = 0x8FC4, [ 6552] = 0x5DE1, [ 6553] = 0x9091,
++  [ 6554] = 0x90A2, [ 6555] = 0x90AA, [ 6556] = 0x90A6, [ 6557] = 0x90A3,
++  [ 6558] = 0x9149, [ 6559] = 0x91C6, [ 6560] = 0x91CC, [ 6561] = 0x9632,
++  [ 6562] = 0x962E, [ 6563] = 0x9631, [ 6564] = 0x962A, [ 6565] = 0x962C,
++  [ 6566] = 0x4E26, [ 6567] = 0x4E56, [ 6568] = 0x4E73, [ 6569] = 0x4E8B,
++  [ 6570] = 0x4E9B, [ 6571] = 0x4E9E, [ 6572] = 0x4EAB, [ 6573] = 0x4EAC,
++  [ 6574] = 0x4F6F, [ 6575] = 0x4F9D, [ 6576] = 0x4F8D, [ 6577] = 0x4F73,
++  [ 6578] = 0x4F7F, [ 6579] = 0x4F6C, [ 6580] = 0x4F9B, [ 6581] = 0x4F8B,
++  [ 6582] = 0x4F86, [ 6583] = 0x4F83, [ 6584] = 0x4F70, [ 6585] = 0x4F75,
++  [ 6586] = 0x4F88, [ 6587] = 0x4F69, [ 6588] = 0x4F7B, [ 6589] = 0x4F96,
++  [ 6590] = 0x4F7E, [ 6591] = 0x4F8F, [ 6592] = 0x4F91, [ 6593] = 0x4F7A,
++  [ 6594] = 0x5154, [ 6595] = 0x5152, [ 6596] = 0x5155, [ 6597] = 0x5169,
++  [ 6598] = 0x5177, [ 6599] = 0x5176, [ 6600] = 0x5178, [ 6601] = 0x51BD,
++  [ 6602] = 0x51FD, [ 6603] = 0x523B, [ 6604] = 0x5238, [ 6605] = 0x5237,
++  [ 6606] = 0x523A, [ 6607] = 0x5230, [ 6608] = 0x522E, [ 6609] = 0x5236,
++  [ 6610] = 0x5241, [ 6611] = 0x52BE, [ 6612] = 0x52BB, [ 6613] = 0x5352,
++  [ 6614] = 0x5354, [ 6615] = 0x5353, [ 6616] = 0x5351, [ 6617] = 0x5366,
++  [ 6618] = 0x5377, [ 6619] = 0x5378, [ 6620] = 0x5379, [ 6621] = 0x53D6,
++  [ 6622] = 0x53D4, [ 6623] = 0x53D7, [ 6624] = 0x5473, [ 6625] = 0x5475,
++  [ 6630] = 0x5496, [ 6631] = 0x5478, [ 6632] = 0x5495, [ 6633] = 0x5480,
++  [ 6634] = 0x547B, [ 6635] = 0x5477, [ 6636] = 0x5484, [ 6637] = 0x5492,
++  [ 6638] = 0x5486, [ 6639] = 0x547C, [ 6640] = 0x5490, [ 6641] = 0x5471,
++  [ 6642] = 0x5476, [ 6643] = 0x548C, [ 6644] = 0x549A, [ 6645] = 0x5462,
++  [ 6646] = 0x5468, [ 6647] = 0x548B, [ 6648] = 0x547D, [ 6649] = 0x548E,
++  [ 6650] = 0x56FA, [ 6651] = 0x5783, [ 6652] = 0x5777, [ 6653] = 0x576A,
++  [ 6654] = 0x5769, [ 6655] = 0x5761, [ 6656] = 0x5766, [ 6657] = 0x5764,
++  [ 6658] = 0x577C, [ 6659] = 0x591C, [ 6660] = 0x5949, [ 6661] = 0x5947,
++  [ 6662] = 0x5948, [ 6663] = 0x5944, [ 6664] = 0x5954, [ 6665] = 0x59BE,
++  [ 6666] = 0x59BB, [ 6667] = 0x59D4, [ 6668] = 0x59B9, [ 6669] = 0x59AE,
++  [ 6670] = 0x59D1, [ 6671] = 0x59C6, [ 6672] = 0x59D0, [ 6673] = 0x59CD,
++  [ 6674] = 0x59CB, [ 6675] = 0x59D3, [ 6676] = 0x59CA, [ 6677] = 0x59AF,
++  [ 6678] = 0x59B3, [ 6679] = 0x59D2, [ 6680] = 0x59C5, [ 6681] = 0x5B5F,
++  [ 6682] = 0x5B64, [ 6683] = 0x5B63, [ 6684] = 0x5B97, [ 6685] = 0x5B9A,
++  [ 6686] = 0x5B98, [ 6687] = 0x5B9C, [ 6688] = 0x5B99, [ 6689] = 0x5B9B,
++  [ 6690] = 0x5C1A, [ 6691] = 0x5C48, [ 6692] = 0x5C45, [ 6727] = 0x5C46,
++  [ 6728] = 0x5CB7, [ 6729] = 0x5CA1, [ 6730] = 0x5CB8, [ 6731] = 0x5CA9,
++  [ 6732] = 0x5CAB, [ 6733] = 0x5CB1, [ 6734] = 0x5CB3, [ 6735] = 0x5E18,
++  [ 6736] = 0x5E1A, [ 6737] = 0x5E16, [ 6738] = 0x5E15, [ 6739] = 0x5E1B,
++  [ 6740] = 0x5E11, [ 6741] = 0x5E78, [ 6742] = 0x5E9A, [ 6743] = 0x5E97,
++  [ 6744] = 0x5E9C, [ 6745] = 0x5E95, [ 6746] = 0x5E96, [ 6747] = 0x5EF6,
++  [ 6748] = 0x5F26, [ 6749] = 0x5F27, [ 6750] = 0x5F29, [ 6751] = 0x5F80,
++  [ 6752] = 0x5F81, [ 6753] = 0x5F7F, [ 6754] = 0x5F7C, [ 6755] = 0x5FDD,
++  [ 6756] = 0x5FE0, [ 6757] = 0x5FFD, [ 6758] = 0x5FF5, [ 6759] = 0x5FFF,
++  [ 6760] = 0x600F, [ 6761] = 0x6014, [ 6762] = 0x602F, [ 6763] = 0x6035,
++  [ 6764] = 0x6016, [ 6765] = 0x602A, [ 6766] = 0x6015, [ 6767] = 0x6021,
++  [ 6768] = 0x6027, [ 6769] = 0x6029, [ 6770] = 0x602B, [ 6771] = 0x601B,
++  [ 6772] = 0x6216, [ 6773] = 0x6215, [ 6774] = 0x623F, [ 6775] = 0x623E,
++  [ 6776] = 0x6240, [ 6777] = 0x627F, [ 6778] = 0x62C9, [ 6779] = 0x62CC,
++  [ 6780] = 0x62C4, [ 6781] = 0x62BF, [ 6782] = 0x62C2, [ 6783] = 0x62B9,
++  [ 6784] = 0x62D2, [ 6785] = 0x62DB, [ 6786] = 0x62AB, [ 6787] = 0x62D3,
++  [ 6788] = 0x62D4, [ 6789] = 0x62CB, [ 6790] = 0x62C8, [ 6791] = 0x62A8,
++  [ 6792] = 0x62BD, [ 6793] = 0x62BC, [ 6794] = 0x62D0, [ 6795] = 0x62D9,
++  [ 6796] = 0x62C7, [ 6797] = 0x62CD, [ 6798] = 0x62B5, [ 6799] = 0x62DA,
++  [ 6800] = 0x62B1, [ 6801] = 0x62D8, [ 6802] = 0x62D6, [ 6803] = 0x62D7,
++  [ 6804] = 0x62C6, [ 6805] = 0x62AC, [ 6806] = 0x62CE, [ 6807] = 0x653E,
++  [ 6808] = 0x65A7, [ 6809] = 0x65BC, [ 6810] = 0x65FA, [ 6811] = 0x6614,
++  [ 6812] = 0x6613, [ 6813] = 0x660C, [ 6814] = 0x6606, [ 6815] = 0x6602,
++  [ 6816] = 0x660E, [ 6817] = 0x6600, [ 6818] = 0x660F, [ 6819] = 0x6615,
++  [ 6820] = 0x660A, [ 6825] = 0x6607, [ 6826] = 0x670D, [ 6827] = 0x670B,
++  [ 6828] = 0x676D, [ 6829] = 0x678B, [ 6830] = 0x6795, [ 6831] = 0x6771,
++  [ 6832] = 0x679C, [ 6833] = 0x6773, [ 6834] = 0x6777, [ 6835] = 0x6787,
++  [ 6836] = 0x679D, [ 6837] = 0x6797, [ 6838] = 0x676F, [ 6839] = 0x6770,
++  [ 6840] = 0x677F, [ 6841] = 0x6789, [ 6842] = 0x677E, [ 6843] = 0x6790,
++  [ 6844] = 0x6775, [ 6845] = 0x679A, [ 6846] = 0x6793, [ 6847] = 0x677C,
++  [ 6848] = 0x676A, [ 6849] = 0x6772, [ 6850] = 0x6B23, [ 6851] = 0x6B66,
++  [ 6852] = 0x6B67, [ 6853] = 0x6B7F, [ 6854] = 0x6C13, [ 6855] = 0x6C1B,
++  [ 6856] = 0x6CE3, [ 6857] = 0x6CE8, [ 6858] = 0x6CF3, [ 6859] = 0x6CB1,
++  [ 6860] = 0x6CCC, [ 6861] = 0x6CE5, [ 6862] = 0x6CB3, [ 6863] = 0x6CBD,
++  [ 6864] = 0x6CBE, [ 6865] = 0x6CBC, [ 6866] = 0x6CE2, [ 6867] = 0x6CAB,
++  [ 6868] = 0x6CD5, [ 6869] = 0x6CD3, [ 6870] = 0x6CB8, [ 6871] = 0x6CC4,
++  [ 6872] = 0x6CB9, [ 6873] = 0x6CC1, [ 6874] = 0x6CAE, [ 6875] = 0x6CD7,
++  [ 6876] = 0x6CC5, [ 6877] = 0x6CF1, [ 6878] = 0x6CBF, [ 6879] = 0x6CBB,
++  [ 6880] = 0x6CE1, [ 6881] = 0x6CDB, [ 6882] = 0x6CCA, [ 6883] = 0x6CAC,
++  [ 6884] = 0x6CEF, [ 6885] = 0x6CDC, [ 6886] = 0x6CD6, [ 6887] = 0x6CE0,
++  [ 6922] = 0x7095, [ 6923] = 0x708E, [ 6924] = 0x7092, [ 6925] = 0x708A,
++  [ 6926] = 0x7099, [ 6927] = 0x722C, [ 6928] = 0x722D, [ 6929] = 0x7238,
++  [ 6930] = 0x7248, [ 6931] = 0x7267, [ 6932] = 0x7269, [ 6933] = 0x72C0,
++  [ 6934] = 0x72CE, [ 6935] = 0x72D9, [ 6936] = 0x72D7, [ 6937] = 0x72D0,
++  [ 6938] = 0x73A9, [ 6939] = 0x73A8, [ 6940] = 0x739F, [ 6941] = 0x73AB,
++  [ 6942] = 0x73A5, [ 6943] = 0x753D, [ 6944] = 0x759D, [ 6945] = 0x7599,
++  [ 6946] = 0x759A, [ 6947] = 0x7684, [ 6948] = 0x76C2, [ 6949] = 0x76F2,
++  [ 6950] = 0x76F4, [ 6951] = 0x77E5, [ 6952] = 0x77FD, [ 6953] = 0x793E,
++  [ 6954] = 0x7940, [ 6955] = 0x7941, [ 6956] = 0x79C9, [ 6957] = 0x79C8,
++  [ 6958] = 0x7A7A, [ 6959] = 0x7A79, [ 6960] = 0x7AFA, [ 6961] = 0x7CFE,
++  [ 6962] = 0x7F54, [ 6963] = 0x7F8C, [ 6964] = 0x7F8B, [ 6965] = 0x8005,
++  [ 6966] = 0x80BA, [ 6967] = 0x80A5, [ 6968] = 0x80A2, [ 6969] = 0x80B1,
++  [ 6970] = 0x80A1, [ 6971] = 0x80AB, [ 6972] = 0x80A9, [ 6973] = 0x80B4,
++  [ 6974] = 0x80AA, [ 6975] = 0x80AF, [ 6976] = 0x81E5, [ 6977] = 0x81FE,
++  [ 6978] = 0x820D, [ 6979] = 0x82B3, [ 6980] = 0x829D, [ 6981] = 0x8299,
++  [ 6982] = 0x82AD, [ 6983] = 0x82BD, [ 6984] = 0x829F, [ 6985] = 0x82B9,
++  [ 6986] = 0x82B1, [ 6987] = 0x82AC, [ 6988] = 0x82A5, [ 6989] = 0x82AF,
++  [ 6990] = 0x82B8, [ 6991] = 0x82A3, [ 6992] = 0x82B0, [ 6993] = 0x82BE,
++  [ 6994] = 0x82B7, [ 6995] = 0x864E, [ 6996] = 0x8671, [ 6997] = 0x521D,
++  [ 6998] = 0x8868, [ 6999] = 0x8ECB, [ 7000] = 0x8FCE, [ 7001] = 0x8FD4,
++  [ 7002] = 0x8FD1, [ 7003] = 0x90B5, [ 7004] = 0x90B8, [ 7005] = 0x90B1,
++  [ 7006] = 0x90B6, [ 7007] = 0x91C7, [ 7008] = 0x91D1, [ 7009] = 0x9577,
++  [ 7010] = 0x9580, [ 7011] = 0x961C, [ 7012] = 0x9640, [ 7013] = 0x963F,
++  [ 7014] = 0x963B, [ 7015] = 0x9644, [ 7020] = 0x9642, [ 7021] = 0x96B9,
++  [ 7022] = 0x96E8, [ 7023] = 0x9752, [ 7024] = 0x975E, [ 7025] = 0x4E9F,
++  [ 7026] = 0x4EAD, [ 7027] = 0x4EAE, [ 7028] = 0x4FE1, [ 7029] = 0x4FB5,
++  [ 7030] = 0x4FAF, [ 7031] = 0x4FBF, [ 7032] = 0x4FE0, [ 7033] = 0x4FD1,
++  [ 7034] = 0x4FCF, [ 7035] = 0x4FDD, [ 7036] = 0x4FC3, [ 7037] = 0x4FB6,
++  [ 7038] = 0x4FD8, [ 7039] = 0x4FDF, [ 7040] = 0x4FCA, [ 7041] = 0x4FD7,
++  [ 7042] = 0x4FAE, [ 7043] = 0x4FD0, [ 7044] = 0x4FC4, [ 7045] = 0x4FC2,
++  [ 7046] = 0x4FDA, [ 7047] = 0x4FCE, [ 7048] = 0x4FDE, [ 7049] = 0x4FB7,
++  [ 7050] = 0x5157, [ 7051] = 0x5192, [ 7052] = 0x5191, [ 7053] = 0x51A0,
++  [ 7054] = 0x524E, [ 7055] = 0x5243, [ 7056] = 0x524A, [ 7057] = 0x524D,
++  [ 7058] = 0x524C, [ 7059] = 0x524B, [ 7060] = 0x5247, [ 7061] = 0x52C7,
++  [ 7062] = 0x52C9, [ 7063] = 0x52C3, [ 7064] = 0x52C1, [ 7065] = 0x530D,
++  [ 7066] = 0x5357, [ 7067] = 0x537B, [ 7068] = 0x539A, [ 7069] = 0x53DB,
++  [ 7070] = 0x54AC, [ 7071] = 0x54C0, [ 7072] = 0x54A8, [ 7073] = 0x54CE,
++  [ 7074] = 0x54C9, [ 7075] = 0x54B8, [ 7076] = 0x54A6, [ 7077] = 0x54B3,
++  [ 7078] = 0x54C7, [ 7079] = 0x54C2, [ 7080] = 0x54BD, [ 7081] = 0x54AA,
++  [ 7082] = 0x54C1, [ 7117] = 0x54C4, [ 7118] = 0x54C8, [ 7119] = 0x54AF,
++  [ 7120] = 0x54AB, [ 7121] = 0x54B1, [ 7122] = 0x54BB, [ 7123] = 0x54A9,
++  [ 7124] = 0x54A7, [ 7125] = 0x54BF, [ 7126] = 0x56FF, [ 7127] = 0x5782,
++  [ 7128] = 0x578B, [ 7129] = 0x57A0, [ 7130] = 0x57A3, [ 7131] = 0x57A2,
++  [ 7132] = 0x57CE, [ 7133] = 0x57AE, [ 7134] = 0x5793, [ 7135] = 0x5955,
++  [ 7136] = 0x5951, [ 7137] = 0x594F, [ 7138] = 0x594E, [ 7139] = 0x5950,
++  [ 7140] = 0x59DC, [ 7141] = 0x59D8, [ 7142] = 0x59FF, [ 7143] = 0x59E3,
++  [ 7144] = 0x59E8, [ 7145] = 0x5A03, [ 7146] = 0x59E5, [ 7147] = 0x59EA,
++  [ 7148] = 0x59DA, [ 7149] = 0x59E6, [ 7150] = 0x5A01, [ 7151] = 0x59FB,
++  [ 7152] = 0x5B69, [ 7153] = 0x5BA3, [ 7154] = 0x5BA6, [ 7155] = 0x5BA4,
++  [ 7156] = 0x5BA2, [ 7157] = 0x5BA5, [ 7158] = 0x5C01, [ 7159] = 0x5C4E,
++  [ 7160] = 0x5C4F, [ 7161] = 0x5C4D, [ 7162] = 0x5C4B, [ 7163] = 0x5CD9,
++  [ 7164] = 0x5CD2, [ 7165] = 0x5DF7, [ 7166] = 0x5E1D, [ 7167] = 0x5E25,
++  [ 7168] = 0x5E1F, [ 7169] = 0x5E7D, [ 7170] = 0x5EA0, [ 7171] = 0x5EA6,
++  [ 7172] = 0x5EFA, [ 7173] = 0x5F08, [ 7174] = 0x5F2D, [ 7175] = 0x5F65,
++  [ 7176] = 0x5F88, [ 7177] = 0x5F85, [ 7178] = 0x5F8A, [ 7179] = 0x5F8B,
++  [ 7180] = 0x5F87, [ 7181] = 0x5F8C, [ 7182] = 0x5F89, [ 7183] = 0x6012,
++  [ 7184] = 0x601D, [ 7185] = 0x6020, [ 7186] = 0x6025, [ 7187] = 0x600E,
++  [ 7188] = 0x6028, [ 7189] = 0x604D, [ 7190] = 0x6070, [ 7191] = 0x6068,
++  [ 7192] = 0x6062, [ 7193] = 0x6046, [ 7194] = 0x6043, [ 7195] = 0x606C,
++  [ 7196] = 0x606B, [ 7197] = 0x606A, [ 7198] = 0x6064, [ 7199] = 0x6241,
++  [ 7200] = 0x62DC, [ 7201] = 0x6316, [ 7202] = 0x6309, [ 7203] = 0x62FC,
++  [ 7204] = 0x62ED, [ 7205] = 0x6301, [ 7206] = 0x62EE, [ 7207] = 0x62FD,
++  [ 7208] = 0x6307, [ 7209] = 0x62F1, [ 7210] = 0x62F7, [ 7215] = 0x62EF,
++  [ 7216] = 0x62EC, [ 7217] = 0x62FE, [ 7218] = 0x62F4, [ 7219] = 0x6311,
++  [ 7220] = 0x6302, [ 7221] = 0x653F, [ 7222] = 0x6545, [ 7223] = 0x65AB,
++  [ 7224] = 0x65BD, [ 7225] = 0x65E2, [ 7226] = 0x6625, [ 7227] = 0x662D,
++  [ 7228] = 0x6620, [ 7229] = 0x6627, [ 7230] = 0x662F, [ 7231] = 0x661F,
++  [ 7232] = 0x6628, [ 7233] = 0x6631, [ 7234] = 0x6624, [ 7235] = 0x66F7,
++  [ 7236] = 0x67FF, [ 7237] = 0x67D3, [ 7238] = 0x67F1, [ 7239] = 0x67D4,
++  [ 7240] = 0x67D0, [ 7241] = 0x67EC, [ 7242] = 0x67B6, [ 7243] = 0x67AF,
++  [ 7244] = 0x67F5, [ 7245] = 0x67E9, [ 7246] = 0x67EF, [ 7247] = 0x67C4,
++  [ 7248] = 0x67D1, [ 7249] = 0x67B4, [ 7250] = 0x67DA, [ 7251] = 0x67E5,
++  [ 7252] = 0x67B8, [ 7253] = 0x67CF, [ 7254] = 0x67DE, [ 7255] = 0x67F3,
++  [ 7256] = 0x67B0, [ 7257] = 0x67D9, [ 7258] = 0x67E2, [ 7259] = 0x67DD,
++  [ 7260] = 0x67D2, [ 7261] = 0x6B6A, [ 7262] = 0x6B83, [ 7263] = 0x6B86,
++  [ 7264] = 0x6BB5, [ 7265] = 0x6BD2, [ 7266] = 0x6BD7, [ 7267] = 0x6C1F,
++  [ 7268] = 0x6CC9, [ 7269] = 0x6D0B, [ 7270] = 0x6D32, [ 7271] = 0x6D2A,
++  [ 7272] = 0x6D41, [ 7273] = 0x6D25, [ 7274] = 0x6D0C, [ 7275] = 0x6D31,
++  [ 7276] = 0x6D1E, [ 7277] = 0x6D17, [ 7312] = 0x6D3B, [ 7313] = 0x6D3D,
++  [ 7314] = 0x6D3E, [ 7315] = 0x6D36, [ 7316] = 0x6D1B, [ 7317] = 0x6CF5,
++  [ 7318] = 0x6D39, [ 7319] = 0x6D27, [ 7320] = 0x6D38, [ 7321] = 0x6D29,
++  [ 7322] = 0x6D2E, [ 7323] = 0x6D35, [ 7324] = 0x6D0E, [ 7325] = 0x6D2B,
++  [ 7326] = 0x70AB, [ 7327] = 0x70BA, [ 7328] = 0x70B3, [ 7329] = 0x70AC,
++  [ 7330] = 0x70AF, [ 7331] = 0x70AD, [ 7332] = 0x70B8, [ 7333] = 0x70AE,
++  [ 7334] = 0x70A4, [ 7335] = 0x7230, [ 7336] = 0x7272, [ 7337] = 0x726F,
++  [ 7338] = 0x7274, [ 7339] = 0x72E9, [ 7340] = 0x72E0, [ 7341] = 0x72E1,
++  [ 7342] = 0x73B7, [ 7343] = 0x73CA, [ 7344] = 0x73BB, [ 7345] = 0x73B2,
++  [ 7346] = 0x73CD, [ 7347] = 0x73C0, [ 7348] = 0x73B3, [ 7349] = 0x751A,
++  [ 7350] = 0x752D, [ 7351] = 0x754F, [ 7352] = 0x754C, [ 7353] = 0x754E,
++  [ 7354] = 0x754B, [ 7355] = 0x75AB, [ 7356] = 0x75A4, [ 7357] = 0x75A5,
++  [ 7358] = 0x75A2, [ 7359] = 0x75A3, [ 7360] = 0x7678, [ 7361] = 0x7686,
++  [ 7362] = 0x7687, [ 7363] = 0x7688, [ 7364] = 0x76C8, [ 7365] = 0x76C6,
++  [ 7366] = 0x76C3, [ 7367] = 0x76C5, [ 7368] = 0x7701, [ 7369] = 0x76F9,
++  [ 7370] = 0x76F8, [ 7371] = 0x7709, [ 7372] = 0x770B, [ 7373] = 0x76FE,
++  [ 7374] = 0x76FC, [ 7375] = 0x7707, [ 7376] = 0x77DC, [ 7377] = 0x7802,
++  [ 7378] = 0x7814, [ 7379] = 0x780C, [ 7380] = 0x780D, [ 7381] = 0x7946,
++  [ 7382] = 0x7949, [ 7383] = 0x7948, [ 7384] = 0x7947, [ 7385] = 0x79B9,
++  [ 7386] = 0x79BA, [ 7387] = 0x79D1, [ 7388] = 0x79D2, [ 7389] = 0x79CB,
++  [ 7390] = 0x7A7F, [ 7391] = 0x7A81, [ 7392] = 0x7AFF, [ 7393] = 0x7AFD,
++  [ 7394] = 0x7C7D, [ 7395] = 0x7D02, [ 7396] = 0x7D05, [ 7397] = 0x7D00,
++  [ 7398] = 0x7D09, [ 7399] = 0x7D07, [ 7400] = 0x7D04, [ 7401] = 0x7D06,
++  [ 7402] = 0x7F38, [ 7403] = 0x7F8E, [ 7404] = 0x7FBF, [ 7405] = 0x8004,
++  [ 7410] = 0x8010, [ 7411] = 0x800D, [ 7412] = 0x8011, [ 7413] = 0x8036,
++  [ 7414] = 0x80D6, [ 7415] = 0x80E5, [ 7416] = 0x80DA, [ 7417] = 0x80C3,
++  [ 7418] = 0x80C4, [ 7419] = 0x80CC, [ 7420] = 0x80E1, [ 7421] = 0x80DB,
++  [ 7422] = 0x80CE, [ 7423] = 0x80DE, [ 7424] = 0x80E4, [ 7425] = 0x80DD,
++  [ 7426] = 0x81F4, [ 7427] = 0x8222, [ 7428] = 0x82E7, [ 7429] = 0x8303,
++  [ 7430] = 0x8305, [ 7431] = 0x82E3, [ 7432] = 0x82DB, [ 7433] = 0x82E6,
++  [ 7434] = 0x8304, [ 7435] = 0x82E5, [ 7436] = 0x8302, [ 7437] = 0x8309,
++  [ 7438] = 0x82D2, [ 7439] = 0x82D7, [ 7440] = 0x82F1, [ 7441] = 0x8301,
++  [ 7442] = 0x82DC, [ 7443] = 0x82D4, [ 7444] = 0x82D1, [ 7445] = 0x82DE,
++  [ 7446] = 0x82D3, [ 7447] = 0x82DF, [ 7448] = 0x82EF, [ 7449] = 0x8306,
++  [ 7450] = 0x8650, [ 7451] = 0x8679, [ 7452] = 0x867B, [ 7453] = 0x867A,
++  [ 7454] = 0x884D, [ 7455] = 0x886B, [ 7456] = 0x8981, [ 7457] = 0x89D4,
++  [ 7458] = 0x8A08, [ 7459] = 0x8A02, [ 7460] = 0x8A03, [ 7461] = 0x8C9E,
++  [ 7462] = 0x8CA0, [ 7463] = 0x8D74, [ 7464] = 0x8D73, [ 7465] = 0x8DB4,
++  [ 7466] = 0x8ECD, [ 7467] = 0x8ECC, [ 7468] = 0x8FF0, [ 7469] = 0x8FE6,
++  [ 7470] = 0x8FE2, [ 7471] = 0x8FEA, [ 7472] = 0x8FE5, [ 7507] = 0x8FED,
++  [ 7508] = 0x8FEB, [ 7509] = 0x8FE4, [ 7510] = 0x8FE8, [ 7511] = 0x90CA,
++  [ 7512] = 0x90CE, [ 7513] = 0x90C1, [ 7514] = 0x90C3, [ 7515] = 0x914B,
++  [ 7516] = 0x914A, [ 7517] = 0x91CD, [ 7518] = 0x9582, [ 7519] = 0x9650,
++  [ 7520] = 0x964B, [ 7521] = 0x964C, [ 7522] = 0x964D, [ 7523] = 0x9762,
++  [ 7524] = 0x9769, [ 7525] = 0x97CB, [ 7526] = 0x97ED, [ 7527] = 0x97F3,
++  [ 7528] = 0x9801, [ 7529] = 0x98A8, [ 7530] = 0x98DB, [ 7531] = 0x98DF,
++  [ 7532] = 0x9996, [ 7533] = 0x9999, [ 7534] = 0x4E58, [ 7535] = 0x4EB3,
++  [ 7536] = 0x500C, [ 7537] = 0x500D, [ 7538] = 0x5023, [ 7539] = 0x4FEF,
++  [ 7540] = 0x5026, [ 7541] = 0x5025, [ 7542] = 0x4FF8, [ 7543] = 0x5029,
++  [ 7544] = 0x5016, [ 7545] = 0x5006, [ 7546] = 0x503C, [ 7547] = 0x501F,
++  [ 7548] = 0x501A, [ 7549] = 0x5012, [ 7550] = 0x5011, [ 7551] = 0x4FFA,
++  [ 7552] = 0x5000, [ 7553] = 0x5014, [ 7554] = 0x5028, [ 7555] = 0x4FF1,
++  [ 7556] = 0x5021, [ 7557] = 0x500B, [ 7558] = 0x5019, [ 7559] = 0x5018,
++  [ 7560] = 0x4FF3, [ 7561] = 0x4FEE, [ 7562] = 0x502D, [ 7563] = 0x502A,
++  [ 7564] = 0x4FFE, [ 7565] = 0x502B, [ 7566] = 0x5009, [ 7567] = 0x517C,
++  [ 7568] = 0x51A4, [ 7569] = 0x51A5, [ 7570] = 0x51A2, [ 7571] = 0x51CD,
++  [ 7572] = 0x51CC, [ 7573] = 0x51C6, [ 7574] = 0x51CB, [ 7575] = 0x5256,
++  [ 7576] = 0x525C, [ 7577] = 0x5254, [ 7578] = 0x525B, [ 7579] = 0x525D,
++  [ 7580] = 0x532A, [ 7581] = 0x537F, [ 7582] = 0x539F, [ 7583] = 0x539D,
++  [ 7584] = 0x53DF, [ 7585] = 0x54E8, [ 7586] = 0x5510, [ 7587] = 0x5501,
++  [ 7588] = 0x5537, [ 7589] = 0x54FC, [ 7590] = 0x54E5, [ 7591] = 0x54F2,
++  [ 7592] = 0x5506, [ 7593] = 0x54FA, [ 7594] = 0x5514, [ 7595] = 0x54E9,
++  [ 7596] = 0x54ED, [ 7597] = 0x54E1, [ 7598] = 0x5509, [ 7599] = 0x54EE,
++  [ 7600] = 0x54EA, [ 7605] = 0x54E6, [ 7606] = 0x5527, [ 7607] = 0x5507,
++  [ 7608] = 0x54FD, [ 7609] = 0x550F, [ 7610] = 0x5703, [ 7611] = 0x5704,
++  [ 7612] = 0x57C2, [ 7613] = 0x57D4, [ 7614] = 0x57CB, [ 7615] = 0x57C3,
++  [ 7616] = 0x5809, [ 7617] = 0x590F, [ 7618] = 0x5957, [ 7619] = 0x5958,
++  [ 7620] = 0x595A, [ 7621] = 0x5A11, [ 7622] = 0x5A18, [ 7623] = 0x5A1C,
++  [ 7624] = 0x5A1F, [ 7625] = 0x5A1B, [ 7626] = 0x5A13, [ 7627] = 0x59EC,
++  [ 7628] = 0x5A20, [ 7629] = 0x5A23, [ 7630] = 0x5A29, [ 7631] = 0x5A25,
++  [ 7632] = 0x5A0C, [ 7633] = 0x5A09, [ 7634] = 0x5B6B, [ 7635] = 0x5C58,
++  [ 7636] = 0x5BB0, [ 7637] = 0x5BB3, [ 7638] = 0x5BB6, [ 7639] = 0x5BB4,
++  [ 7640] = 0x5BAE, [ 7641] = 0x5BB5, [ 7642] = 0x5BB9, [ 7643] = 0x5BB8,
++  [ 7644] = 0x5C04, [ 7645] = 0x5C51, [ 7646] = 0x5C55, [ 7647] = 0x5C50,
++  [ 7648] = 0x5CED, [ 7649] = 0x5CFD, [ 7650] = 0x5CFB, [ 7651] = 0x5CEA,
++  [ 7652] = 0x5CE8, [ 7653] = 0x5CF0, [ 7654] = 0x5CF6, [ 7655] = 0x5D01,
++  [ 7656] = 0x5CF4, [ 7657] = 0x5DEE, [ 7658] = 0x5E2D, [ 7659] = 0x5E2B,
++  [ 7660] = 0x5EAB, [ 7661] = 0x5EAD, [ 7662] = 0x5EA7, [ 7663] = 0x5F31,
++  [ 7664] = 0x5F92, [ 7665] = 0x5F91, [ 7666] = 0x5F90, [ 7667] = 0x6059,
++  [ 7702] = 0x6063, [ 7703] = 0x6065, [ 7704] = 0x6050, [ 7705] = 0x6055,
++  [ 7706] = 0x606D, [ 7707] = 0x6069, [ 7708] = 0x606F, [ 7709] = 0x6084,
++  [ 7710] = 0x609F, [ 7711] = 0x609A, [ 7712] = 0x608D, [ 7713] = 0x6094,
++  [ 7714] = 0x608C, [ 7715] = 0x6085, [ 7716] = 0x6096, [ 7717] = 0x6247,
++  [ 7718] = 0x62F3, [ 7719] = 0x6308, [ 7720] = 0x62FF, [ 7721] = 0x634E,
++  [ 7722] = 0x633E, [ 7723] = 0x632F, [ 7724] = 0x6355, [ 7725] = 0x6342,
++  [ 7726] = 0x6346, [ 7727] = 0x634F, [ 7728] = 0x6349, [ 7729] = 0x633A,
++  [ 7730] = 0x6350, [ 7731] = 0x633D, [ 7732] = 0x632A, [ 7733] = 0x632B,
++  [ 7734] = 0x6328, [ 7735] = 0x634D, [ 7736] = 0x634C, [ 7737] = 0x6548,
++  [ 7738] = 0x6549, [ 7739] = 0x6599, [ 7740] = 0x65C1, [ 7741] = 0x65C5,
++  [ 7742] = 0x6642, [ 7743] = 0x6649, [ 7744] = 0x664F, [ 7745] = 0x6643,
++  [ 7746] = 0x6652, [ 7747] = 0x664C, [ 7748] = 0x6645, [ 7749] = 0x6641,
++  [ 7750] = 0x66F8, [ 7751] = 0x6714, [ 7752] = 0x6715, [ 7753] = 0x6717,
++  [ 7754] = 0x6821, [ 7755] = 0x6838, [ 7756] = 0x6848, [ 7757] = 0x6846,
++  [ 7758] = 0x6853, [ 7759] = 0x6839, [ 7760] = 0x6842, [ 7761] = 0x6854,
++  [ 7762] = 0x6829, [ 7763] = 0x68B3, [ 7764] = 0x6817, [ 7765] = 0x684C,
++  [ 7766] = 0x6851, [ 7767] = 0x683D, [ 7768] = 0x67F4, [ 7769] = 0x6850,
++  [ 7770] = 0x6840, [ 7771] = 0x683C, [ 7772] = 0x6843, [ 7773] = 0x682A,
++  [ 7774] = 0x6845, [ 7775] = 0x6813, [ 7776] = 0x6818, [ 7777] = 0x6841,
++  [ 7778] = 0x6B8A, [ 7779] = 0x6B89, [ 7780] = 0x6BB7, [ 7781] = 0x6C23,
++  [ 7782] = 0x6C27, [ 7783] = 0x6C28, [ 7784] = 0x6C26, [ 7785] = 0x6C24,
++  [ 7786] = 0x6CF0, [ 7787] = 0x6D6A, [ 7788] = 0x6D95, [ 7789] = 0x6D88,
++  [ 7790] = 0x6D87, [ 7791] = 0x6D66, [ 7792] = 0x6D78, [ 7793] = 0x6D77,
++  [ 7794] = 0x6D59, [ 7795] = 0x6D93, [ 7800] = 0x6D6C, [ 7801] = 0x6D89,
++  [ 7802] = 0x6D6E, [ 7803] = 0x6D5A, [ 7804] = 0x6D74, [ 7805] = 0x6D69,
++  [ 7806] = 0x6D8C, [ 7807] = 0x6D8A, [ 7808] = 0x6D79, [ 7809] = 0x6D85,
++  [ 7810] = 0x6D65, [ 7811] = 0x6D94, [ 7812] = 0x70CA, [ 7813] = 0x70D8,
++  [ 7814] = 0x70E4, [ 7815] = 0x70D9, [ 7816] = 0x70C8, [ 7817] = 0x70CF,
++  [ 7818] = 0x7239, [ 7819] = 0x7279, [ 7820] = 0x72FC, [ 7821] = 0x72F9,
++  [ 7822] = 0x72FD, [ 7823] = 0x72F8, [ 7824] = 0x72F7, [ 7825] = 0x7386,
++  [ 7826] = 0x73ED, [ 7827] = 0x7409, [ 7828] = 0x73EE, [ 7829] = 0x73E0,
++  [ 7830] = 0x73EA, [ 7831] = 0x73DE, [ 7832] = 0x7554, [ 7833] = 0x755D,
++  [ 7834] = 0x755C, [ 7835] = 0x755A, [ 7836] = 0x7559, [ 7837] = 0x75BE,
++  [ 7838] = 0x75C5, [ 7839] = 0x75C7, [ 7840] = 0x75B2, [ 7841] = 0x75B3,
++  [ 7842] = 0x75BD, [ 7843] = 0x75BC, [ 7844] = 0x75B9, [ 7845] = 0x75C2,
++  [ 7846] = 0x75B8, [ 7847] = 0x768B, [ 7848] = 0x76B0, [ 7849] = 0x76CA,
++  [ 7850] = 0x76CD, [ 7851] = 0x76CE, [ 7852] = 0x7729, [ 7853] = 0x771F,
++  [ 7854] = 0x7720, [ 7855] = 0x7728, [ 7856] = 0x77E9, [ 7857] = 0x7830,
++  [ 7858] = 0x7827, [ 7859] = 0x7838, [ 7860] = 0x781D, [ 7861] = 0x7834,
++  [ 7862] = 0x7837, [ 7897] = 0x7825, [ 7898] = 0x782D, [ 7899] = 0x7820,
++  [ 7900] = 0x781F, [ 7901] = 0x7832, [ 7902] = 0x7955, [ 7903] = 0x7950,
++  [ 7904] = 0x7960, [ 7905] = 0x795F, [ 7906] = 0x7956, [ 7907] = 0x795E,
++  [ 7908] = 0x795D, [ 7909] = 0x7957, [ 7910] = 0x795A, [ 7911] = 0x79E4,
++  [ 7912] = 0x79E3, [ 7913] = 0x79E7, [ 7914] = 0x79DF, [ 7915] = 0x79E6,
++  [ 7916] = 0x79E9, [ 7917] = 0x79D8, [ 7918] = 0x7A84, [ 7919] = 0x7A88,
++  [ 7920] = 0x7AD9, [ 7921] = 0x7B06, [ 7922] = 0x7B11, [ 7923] = 0x7C89,
++  [ 7924] = 0x7D21, [ 7925] = 0x7D17, [ 7926] = 0x7D0B, [ 7927] = 0x7D0A,
++  [ 7928] = 0x7D20, [ 7929] = 0x7D22, [ 7930] = 0x7D14, [ 7931] = 0x7D10,
++  [ 7932] = 0x7D15, [ 7933] = 0x7D1A, [ 7934] = 0x7D1C, [ 7935] = 0x7D0D,
++  [ 7936] = 0x7D19, [ 7937] = 0x7D1B, [ 7938] = 0x7F3A, [ 7939] = 0x7F5F,
++  [ 7940] = 0x7F94, [ 7941] = 0x7FC5, [ 7942] = 0x7FC1, [ 7943] = 0x8006,
++  [ 7944] = 0x8018, [ 7945] = 0x8015, [ 7946] = 0x8019, [ 7947] = 0x8017,
++  [ 7948] = 0x803D, [ 7949] = 0x803F, [ 7950] = 0x80F1, [ 7951] = 0x8102,
++  [ 7952] = 0x80F0, [ 7953] = 0x8105, [ 7954] = 0x80ED, [ 7955] = 0x80F4,
++  [ 7956] = 0x8106, [ 7957] = 0x80F8, [ 7958] = 0x80F3, [ 7959] = 0x8108,
++  [ 7960] = 0x80FD, [ 7961] = 0x810A, [ 7962] = 0x80FC, [ 7963] = 0x80EF,
++  [ 7964] = 0x81ED, [ 7965] = 0x81EC, [ 7966] = 0x8200, [ 7967] = 0x8210,
++  [ 7968] = 0x822A, [ 7969] = 0x822B, [ 7970] = 0x8228, [ 7971] = 0x822C,
++  [ 7972] = 0x82BB, [ 7973] = 0x832B, [ 7974] = 0x8352, [ 7975] = 0x8354,
++  [ 7976] = 0x834A, [ 7977] = 0x8338, [ 7978] = 0x8350, [ 7979] = 0x8349,
++  [ 7980] = 0x8335, [ 7981] = 0x8334, [ 7982] = 0x834F, [ 7983] = 0x8332,
++  [ 7984] = 0x8339, [ 7985] = 0x8336, [ 7986] = 0x8317, [ 7987] = 0x8340,
++  [ 7988] = 0x8331, [ 7989] = 0x8328, [ 7990] = 0x8343, [ 7995] = 0x8654,
++  [ 7996] = 0x868A, [ 7997] = 0x86AA, [ 7998] = 0x8693, [ 7999] = 0x86A4,
++  [ 8000] = 0x86A9, [ 8001] = 0x868C, [ 8002] = 0x86A3, [ 8003] = 0x869C,
++  [ 8004] = 0x8870, [ 8005] = 0x8877, [ 8006] = 0x8881, [ 8007] = 0x8882,
++  [ 8008] = 0x887D, [ 8009] = 0x8879, [ 8010] = 0x8A18, [ 8011] = 0x8A10,
++  [ 8012] = 0x8A0E, [ 8013] = 0x8A0C, [ 8014] = 0x8A15, [ 8015] = 0x8A0A,
++  [ 8016] = 0x8A17, [ 8017] = 0x8A13, [ 8018] = 0x8A16, [ 8019] = 0x8A0F,
++  [ 8020] = 0x8A11, [ 8021] = 0x8C48, [ 8022] = 0x8C7A, [ 8023] = 0x8C79,
++  [ 8024] = 0x8CA1, [ 8025] = 0x8CA2, [ 8026] = 0x8D77, [ 8027] = 0x8EAC,
++  [ 8028] = 0x8ED2, [ 8029] = 0x8ED4, [ 8030] = 0x8ECF, [ 8031] = 0x8FB1,
++  [ 8032] = 0x9001, [ 8033] = 0x9006, [ 8034] = 0x8FF7, [ 8035] = 0x9000,
++  [ 8036] = 0x8FFA, [ 8037] = 0x8FF4, [ 8038] = 0x9003, [ 8039] = 0x8FFD,
++  [ 8040] = 0x9005, [ 8041] = 0x8FF8, [ 8042] = 0x9095, [ 8043] = 0x90E1,
++  [ 8044] = 0x90DD, [ 8045] = 0x90E2, [ 8046] = 0x9152, [ 8047] = 0x914D,
++  [ 8048] = 0x914C, [ 8049] = 0x91D8, [ 8050] = 0x91DD, [ 8051] = 0x91D7,
++  [ 8052] = 0x91DC, [ 8053] = 0x91D9, [ 8054] = 0x9583, [ 8055] = 0x9662,
++  [ 8056] = 0x9663, [ 8057] = 0x9661, [ 8092] = 0x965B, [ 8093] = 0x965D,
++  [ 8094] = 0x9664, [ 8095] = 0x9658, [ 8096] = 0x965E, [ 8097] = 0x96BB,
++  [ 8098] = 0x98E2, [ 8099] = 0x99AC, [ 8100] = 0x9AA8, [ 8101] = 0x9AD8,
++  [ 8102] = 0x9B25, [ 8103] = 0x9B32, [ 8104] = 0x9B3C, [ 8105] = 0x4E7E,
++  [ 8106] = 0x507A, [ 8107] = 0x507D, [ 8108] = 0x505C, [ 8109] = 0x5047,
++  [ 8110] = 0x5043, [ 8111] = 0x504C, [ 8112] = 0x505A, [ 8113] = 0x5049,
++  [ 8114] = 0x5065, [ 8115] = 0x5076, [ 8116] = 0x504E, [ 8117] = 0x5055,
++  [ 8118] = 0x5075, [ 8119] = 0x5074, [ 8120] = 0x5077, [ 8121] = 0x504F,
++  [ 8122] = 0x500F, [ 8123] = 0x506F, [ 8124] = 0x506D, [ 8125] = 0x515C,
++  [ 8126] = 0x5195, [ 8127] = 0x51F0, [ 8128] = 0x526A, [ 8129] = 0x526F,
++  [ 8130] = 0x52D2, [ 8131] = 0x52D9, [ 8132] = 0x52D8, [ 8133] = 0x52D5,
++  [ 8134] = 0x5310, [ 8135] = 0x530F, [ 8136] = 0x5319, [ 8137] = 0x533F,
++  [ 8138] = 0x5340, [ 8139] = 0x533E, [ 8140] = 0x53C3, [ 8141] = 0x66FC,
++  [ 8142] = 0x5546, [ 8143] = 0x556A, [ 8144] = 0x5566, [ 8145] = 0x5544,
++  [ 8146] = 0x555E, [ 8147] = 0x5561, [ 8148] = 0x5543, [ 8149] = 0x554A,
++  [ 8150] = 0x5531, [ 8151] = 0x5556, [ 8152] = 0x554F, [ 8153] = 0x5555,
++  [ 8154] = 0x552F, [ 8155] = 0x5564, [ 8156] = 0x5538, [ 8157] = 0x552E,
++  [ 8158] = 0x555C, [ 8159] = 0x552C, [ 8160] = 0x5563, [ 8161] = 0x5533,
++  [ 8162] = 0x5541, [ 8163] = 0x5557, [ 8164] = 0x5708, [ 8165] = 0x570B,
++  [ 8166] = 0x5709, [ 8167] = 0x57DF, [ 8168] = 0x5805, [ 8169] = 0x580A,
++  [ 8170] = 0x5806, [ 8171] = 0x57E0, [ 8172] = 0x57E4, [ 8173] = 0x57FA,
++  [ 8174] = 0x5802, [ 8175] = 0x5835, [ 8176] = 0x57F7, [ 8177] = 0x57F9,
++  [ 8178] = 0x5920, [ 8179] = 0x5962, [ 8180] = 0x5A36, [ 8181] = 0x5A41,
++  [ 8182] = 0x5A49, [ 8183] = 0x5A66, [ 8184] = 0x5A6A, [ 8185] = 0x5A40,
++  [ 8190] = 0x5A3C, [ 8191] = 0x5A62, [ 8192] = 0x5A5A, [ 8193] = 0x5A46,
++  [ 8194] = 0x5A4A, [ 8195] = 0x5B70, [ 8196] = 0x5BC7, [ 8197] = 0x5BC5,
++  [ 8198] = 0x5BC4, [ 8199] = 0x5BC2, [ 8200] = 0x5BBF, [ 8201] = 0x5BC6,
++  [ 8202] = 0x5C09, [ 8203] = 0x5C08, [ 8204] = 0x5C07, [ 8205] = 0x5C60,
++  [ 8206] = 0x5C5C, [ 8207] = 0x5C5D, [ 8208] = 0x5D07, [ 8209] = 0x5D06,
++  [ 8210] = 0x5D0E, [ 8211] = 0x5D1B, [ 8212] = 0x5D16, [ 8213] = 0x5D22,
++  [ 8214] = 0x5D11, [ 8215] = 0x5D29, [ 8216] = 0x5D14, [ 8217] = 0x5D19,
++  [ 8218] = 0x5D24, [ 8219] = 0x5D27, [ 8220] = 0x5D17, [ 8221] = 0x5DE2,
++  [ 8222] = 0x5E38, [ 8223] = 0x5E36, [ 8224] = 0x5E33, [ 8225] = 0x5E37,
++  [ 8226] = 0x5EB7, [ 8227] = 0x5EB8, [ 8228] = 0x5EB6, [ 8229] = 0x5EB5,
++  [ 8230] = 0x5EBE, [ 8231] = 0x5F35, [ 8232] = 0x5F37, [ 8233] = 0x5F57,
++  [ 8234] = 0x5F6C, [ 8235] = 0x5F69, [ 8236] = 0x5F6B, [ 8237] = 0x5F97,
++  [ 8238] = 0x5F99, [ 8239] = 0x5F9E, [ 8240] = 0x5F98, [ 8241] = 0x5FA1,
++  [ 8242] = 0x5FA0, [ 8243] = 0x5F9C, [ 8244] = 0x607F, [ 8245] = 0x60A3,
++  [ 8246] = 0x6089, [ 8247] = 0x60A0, [ 8248] = 0x60A8, [ 8249] = 0x60CB,
++  [ 8250] = 0x60B4, [ 8251] = 0x60E6, [ 8252] = 0x60BD, [ 8287] = 0x60C5,
++  [ 8288] = 0x60BB, [ 8289] = 0x60B5, [ 8290] = 0x60DC, [ 8291] = 0x60BC,
++  [ 8292] = 0x60D8, [ 8293] = 0x60D5, [ 8294] = 0x60C6, [ 8295] = 0x60DF,
++  [ 8296] = 0x60B8, [ 8297] = 0x60DA, [ 8298] = 0x60C7, [ 8299] = 0x621A,
++  [ 8300] = 0x621B, [ 8301] = 0x6248, [ 8302] = 0x63A0, [ 8303] = 0x63A7,
++  [ 8304] = 0x6372, [ 8305] = 0x6396, [ 8306] = 0x63A2, [ 8307] = 0x63A5,
++  [ 8308] = 0x6377, [ 8309] = 0x6367, [ 8310] = 0x6398, [ 8311] = 0x63AA,
++  [ 8312] = 0x6371, [ 8313] = 0x63A9, [ 8314] = 0x6389, [ 8315] = 0x6383,
++  [ 8316] = 0x639B, [ 8317] = 0x636B, [ 8318] = 0x63A8, [ 8319] = 0x6384,
++  [ 8320] = 0x6388, [ 8321] = 0x6399, [ 8322] = 0x63A1, [ 8323] = 0x63AC,
++  [ 8324] = 0x6392, [ 8325] = 0x638F, [ 8326] = 0x6380, [ 8327] = 0x637B,
++  [ 8328] = 0x6369, [ 8329] = 0x6368, [ 8330] = 0x637A, [ 8331] = 0x655D,
++  [ 8332] = 0x6556, [ 8333] = 0x6551, [ 8334] = 0x6559, [ 8335] = 0x6557,
++  [ 8336] = 0x555F, [ 8337] = 0x654F, [ 8338] = 0x6558, [ 8339] = 0x6555,
++  [ 8340] = 0x6554, [ 8341] = 0x659C, [ 8342] = 0x659B, [ 8343] = 0x65AC,
++  [ 8344] = 0x65CF, [ 8345] = 0x65CB, [ 8346] = 0x65CC, [ 8347] = 0x65CE,
++  [ 8348] = 0x665D, [ 8349] = 0x665A, [ 8350] = 0x6664, [ 8351] = 0x6668,
++  [ 8352] = 0x6666, [ 8353] = 0x665E, [ 8354] = 0x66F9, [ 8355] = 0x52D7,
++  [ 8356] = 0x671B, [ 8357] = 0x6881, [ 8358] = 0x68AF, [ 8359] = 0x68A2,
++  [ 8360] = 0x6893, [ 8361] = 0x68B5, [ 8362] = 0x687F, [ 8363] = 0x6876,
++  [ 8364] = 0x68B1, [ 8365] = 0x68A7, [ 8366] = 0x6897, [ 8367] = 0x68B0,
++  [ 8368] = 0x6883, [ 8369] = 0x68C4, [ 8370] = 0x68AD, [ 8371] = 0x6886,
++  [ 8372] = 0x6885, [ 8373] = 0x6894, [ 8374] = 0x689D, [ 8375] = 0x68A8,
++  [ 8376] = 0x689F, [ 8377] = 0x68A1, [ 8378] = 0x6882, [ 8379] = 0x6B32,
++  [ 8380] = 0x6BBA, [ 8385] = 0x6BEB, [ 8386] = 0x6BEC, [ 8387] = 0x6C2B,
++  [ 8388] = 0x6D8E, [ 8389] = 0x6DBC, [ 8390] = 0x6DF3, [ 8391] = 0x6DD9,
++  [ 8392] = 0x6DB2, [ 8393] = 0x6DE1, [ 8394] = 0x6DCC, [ 8395] = 0x6DE4,
++  [ 8396] = 0x6DFB, [ 8397] = 0x6DFA, [ 8398] = 0x6E05, [ 8399] = 0x6DC7,
++  [ 8400] = 0x6DCB, [ 8401] = 0x6DAF, [ 8402] = 0x6DD1, [ 8403] = 0x6DAE,
++  [ 8404] = 0x6DDE, [ 8405] = 0x6DF9, [ 8406] = 0x6DB8, [ 8407] = 0x6DF7,
++  [ 8408] = 0x6DF5, [ 8409] = 0x6DC5, [ 8410] = 0x6DD2, [ 8411] = 0x6E1A,
++  [ 8412] = 0x6DB5, [ 8413] = 0x6DDA, [ 8414] = 0x6DEB, [ 8415] = 0x6DD8,
++  [ 8416] = 0x6DEA, [ 8417] = 0x6DF1, [ 8418] = 0x6DEE, [ 8419] = 0x6DE8,
++  [ 8420] = 0x6DC6, [ 8421] = 0x6DC4, [ 8422] = 0x6DAA, [ 8423] = 0x6DEC,
++  [ 8424] = 0x6DBF, [ 8425] = 0x6DE6, [ 8426] = 0x70F9, [ 8427] = 0x7109,
++  [ 8428] = 0x710A, [ 8429] = 0x70FD, [ 8430] = 0x70EF, [ 8431] = 0x723D,
++  [ 8432] = 0x727D, [ 8433] = 0x7281, [ 8434] = 0x731C, [ 8435] = 0x731B,
++  [ 8436] = 0x7316, [ 8437] = 0x7313, [ 8438] = 0x7319, [ 8439] = 0x7387,
++  [ 8440] = 0x7405, [ 8441] = 0x740A, [ 8442] = 0x7403, [ 8443] = 0x7406,
++  [ 8444] = 0x73FE, [ 8445] = 0x740D, [ 8446] = 0x74E0, [ 8447] = 0x74F6,
++  [ 8482] = 0x74F7, [ 8483] = 0x751C, [ 8484] = 0x7522, [ 8485] = 0x7565,
++  [ 8486] = 0x7566, [ 8487] = 0x7562, [ 8488] = 0x7570, [ 8489] = 0x758F,
++  [ 8490] = 0x75D4, [ 8491] = 0x75D5, [ 8492] = 0x75B5, [ 8493] = 0x75CA,
++  [ 8494] = 0x75CD, [ 8495] = 0x768E, [ 8496] = 0x76D4, [ 8497] = 0x76D2,
++  [ 8498] = 0x76DB, [ 8499] = 0x7737, [ 8500] = 0x773E, [ 8501] = 0x773C,
++  [ 8502] = 0x7736, [ 8503] = 0x7738, [ 8504] = 0x773A, [ 8505] = 0x786B,
++  [ 8506] = 0x7843, [ 8507] = 0x784E, [ 8508] = 0x7965, [ 8509] = 0x7968,
++  [ 8510] = 0x796D, [ 8511] = 0x79FB, [ 8512] = 0x7A92, [ 8513] = 0x7A95,
++  [ 8514] = 0x7B20, [ 8515] = 0x7B28, [ 8516] = 0x7B1B, [ 8517] = 0x7B2C,
++  [ 8518] = 0x7B26, [ 8519] = 0x7B19, [ 8520] = 0x7B1E, [ 8521] = 0x7B2E,
++  [ 8522] = 0x7C92, [ 8523] = 0x7C97, [ 8524] = 0x7C95, [ 8525] = 0x7D46,
++  [ 8526] = 0x7D43, [ 8527] = 0x7D71, [ 8528] = 0x7D2E, [ 8529] = 0x7D39,
++  [ 8530] = 0x7D3C, [ 8531] = 0x7D40, [ 8532] = 0x7D30, [ 8533] = 0x7D33,
++  [ 8534] = 0x7D44, [ 8535] = 0x7D2F, [ 8536] = 0x7D42, [ 8537] = 0x7D32,
++  [ 8538] = 0x7D31, [ 8539] = 0x7F3D, [ 8540] = 0x7F9E, [ 8541] = 0x7F9A,
++  [ 8542] = 0x7FCC, [ 8543] = 0x7FCE, [ 8544] = 0x7FD2, [ 8545] = 0x801C,
++  [ 8546] = 0x804A, [ 8547] = 0x8046, [ 8548] = 0x812F, [ 8549] = 0x8116,
++  [ 8550] = 0x8123, [ 8551] = 0x812B, [ 8552] = 0x8129, [ 8553] = 0x8130,
++  [ 8554] = 0x8124, [ 8555] = 0x8202, [ 8556] = 0x8235, [ 8557] = 0x8237,
++  [ 8558] = 0x8236, [ 8559] = 0x8239, [ 8560] = 0x838E, [ 8561] = 0x839E,
++  [ 8562] = 0x8398, [ 8563] = 0x8378, [ 8564] = 0x83A2, [ 8565] = 0x8396,
++  [ 8566] = 0x83BD, [ 8567] = 0x83AB, [ 8568] = 0x8392, [ 8569] = 0x838A,
++  [ 8570] = 0x8393, [ 8571] = 0x8389, [ 8572] = 0x83A0, [ 8573] = 0x8377,
++  [ 8574] = 0x837B, [ 8575] = 0x837C, [ 8580] = 0x8386, [ 8581] = 0x83A7,
++  [ 8582] = 0x8655, [ 8583] = 0x5F6A, [ 8584] = 0x86C7, [ 8585] = 0x86C0,
++  [ 8586] = 0x86B6, [ 8587] = 0x86C4, [ 8588] = 0x86B5, [ 8589] = 0x86C6,
++  [ 8590] = 0x86CB, [ 8591] = 0x86B1, [ 8592] = 0x86AF, [ 8593] = 0x86C9,
++  [ 8594] = 0x8853, [ 8595] = 0x889E, [ 8596] = 0x8888, [ 8597] = 0x88AB,
++  [ 8598] = 0x8892, [ 8599] = 0x8896, [ 8600] = 0x888D, [ 8601] = 0x888B,
++  [ 8602] = 0x8993, [ 8603] = 0x898F, [ 8604] = 0x8A2A, [ 8605] = 0x8A1D,
++  [ 8606] = 0x8A23, [ 8607] = 0x8A25, [ 8608] = 0x8A31, [ 8609] = 0x8A2D,
++  [ 8610] = 0x8A1F, [ 8611] = 0x8A1B, [ 8612] = 0x8A22, [ 8613] = 0x8C49,
++  [ 8614] = 0x8C5A, [ 8615] = 0x8CA9, [ 8616] = 0x8CAC, [ 8617] = 0x8CAB,
++  [ 8618] = 0x8CA8, [ 8619] = 0x8CAA, [ 8620] = 0x8CA7, [ 8621] = 0x8D67,
++  [ 8622] = 0x8D66, [ 8623] = 0x8DBE, [ 8624] = 0x8DBA, [ 8625] = 0x8EDB,
++  [ 8626] = 0x8EDF, [ 8627] = 0x9019, [ 8628] = 0x900D, [ 8629] = 0x901A,
++  [ 8630] = 0x9017, [ 8631] = 0x9023, [ 8632] = 0x901F, [ 8633] = 0x901D,
++  [ 8634] = 0x9010, [ 8635] = 0x9015, [ 8636] = 0x901E, [ 8637] = 0x9020,
++  [ 8638] = 0x900F, [ 8639] = 0x9022, [ 8640] = 0x9016, [ 8641] = 0x901B,
++  [ 8642] = 0x9014, [ 8677] = 0x90E8, [ 8678] = 0x90ED, [ 8679] = 0x90FD,
++  [ 8680] = 0x9157, [ 8681] = 0x91CE, [ 8682] = 0x91F5, [ 8683] = 0x91E6,
++  [ 8684] = 0x91E3, [ 8685] = 0x91E7, [ 8686] = 0x91ED, [ 8687] = 0x91E9,
++  [ 8688] = 0x9589, [ 8689] = 0x966A, [ 8690] = 0x9675, [ 8691] = 0x9673,
++  [ 8692] = 0x9678, [ 8693] = 0x9670, [ 8694] = 0x9674, [ 8695] = 0x9676,
++  [ 8696] = 0x9677, [ 8697] = 0x966C, [ 8698] = 0x96C0, [ 8699] = 0x96EA,
++  [ 8700] = 0x96E9, [ 8701] = 0x7AE0, [ 8702] = 0x7ADF, [ 8703] = 0x9802,
++  [ 8704] = 0x9803, [ 8705] = 0x9B5A, [ 8706] = 0x9CE5, [ 8707] = 0x9E75,
++  [ 8708] = 0x9E7F, [ 8709] = 0x9EA5, [ 8710] = 0x9EBB, [ 8711] = 0x50A2,
++  [ 8712] = 0x508D, [ 8713] = 0x5085, [ 8714] = 0x5099, [ 8715] = 0x5091,
++  [ 8716] = 0x5080, [ 8717] = 0x5096, [ 8718] = 0x5098, [ 8719] = 0x509A,
++  [ 8720] = 0x6700, [ 8721] = 0x51F1, [ 8722] = 0x5272, [ 8723] = 0x5274,
++  [ 8724] = 0x5275, [ 8725] = 0x5269, [ 8726] = 0x52DE, [ 8727] = 0x52DD,
++  [ 8728] = 0x52DB, [ 8729] = 0x535A, [ 8730] = 0x53A5, [ 8731] = 0x557B,
++  [ 8732] = 0x5580, [ 8733] = 0x55A7, [ 8734] = 0x557C, [ 8735] = 0x558A,
++  [ 8736] = 0x559D, [ 8737] = 0x5598, [ 8738] = 0x5582, [ 8739] = 0x559C,
++  [ 8740] = 0x55AA, [ 8741] = 0x5594, [ 8742] = 0x5587, [ 8743] = 0x558B,
++  [ 8744] = 0x5583, [ 8745] = 0x55B3, [ 8746] = 0x55AE, [ 8747] = 0x559F,
++  [ 8748] = 0x553E, [ 8749] = 0x55B2, [ 8750] = 0x559A, [ 8751] = 0x55BB,
++  [ 8752] = 0x55AC, [ 8753] = 0x55B1, [ 8754] = 0x557E, [ 8755] = 0x5589,
++  [ 8756] = 0x55AB, [ 8757] = 0x5599, [ 8758] = 0x570D, [ 8759] = 0x582F,
++  [ 8760] = 0x582A, [ 8761] = 0x5834, [ 8762] = 0x5824, [ 8763] = 0x5830,
++  [ 8764] = 0x5831, [ 8765] = 0x5821, [ 8766] = 0x581D, [ 8767] = 0x5820,
++  [ 8768] = 0x58F9, [ 8769] = 0x58FA, [ 8770] = 0x5960, [ 8775] = 0x5A77,
++  [ 8776] = 0x5A9A, [ 8777] = 0x5A7F, [ 8778] = 0x5A92, [ 8779] = 0x5A9B,
++  [ 8780] = 0x5AA7, [ 8781] = 0x5B73, [ 8782] = 0x5B71, [ 8783] = 0x5BD2,
++  [ 8784] = 0x5BCC, [ 8785] = 0x5BD3, [ 8786] = 0x5BD0, [ 8787] = 0x5C0A,
++  [ 8788] = 0x5C0B, [ 8789] = 0x5C31, [ 8790] = 0x5D4C, [ 8791] = 0x5D50,
++  [ 8792] = 0x5D34, [ 8793] = 0x5D47, [ 8794] = 0x5DFD, [ 8795] = 0x5E45,
++  [ 8796] = 0x5E3D, [ 8797] = 0x5E40, [ 8798] = 0x5E43, [ 8799] = 0x5E7E,
++  [ 8800] = 0x5ECA, [ 8801] = 0x5EC1, [ 8802] = 0x5EC2, [ 8803] = 0x5EC4,
++  [ 8804] = 0x5F3C, [ 8805] = 0x5F6D, [ 8806] = 0x5FA9, [ 8807] = 0x5FAA,
++  [ 8808] = 0x5FA8, [ 8809] = 0x60D1, [ 8810] = 0x60E1, [ 8811] = 0x60B2,
++  [ 8812] = 0x60B6, [ 8813] = 0x60E0, [ 8814] = 0x611C, [ 8815] = 0x6123,
++  [ 8816] = 0x60FA, [ 8817] = 0x6115, [ 8818] = 0x60F0, [ 8819] = 0x60FB,
++  [ 8820] = 0x60F4, [ 8821] = 0x6168, [ 8822] = 0x60F1, [ 8823] = 0x610E,
++  [ 8824] = 0x60F6, [ 8825] = 0x6109, [ 8826] = 0x6100, [ 8827] = 0x6112,
++  [ 8828] = 0x621F, [ 8829] = 0x6249, [ 8830] = 0x63A3, [ 8831] = 0x638C,
++  [ 8832] = 0x63CF, [ 8833] = 0x63C0, [ 8834] = 0x63E9, [ 8835] = 0x63C9,
++  [ 8836] = 0x63C6, [ 8837] = 0x63CD, [ 8872] = 0x63D2, [ 8873] = 0x63E3,
++  [ 8874] = 0x63D0, [ 8875] = 0x63E1, [ 8876] = 0x63D6, [ 8877] = 0x63ED,
++  [ 8878] = 0x63EE, [ 8879] = 0x6376, [ 8880] = 0x63F4, [ 8881] = 0x63EA,
++  [ 8882] = 0x63DB, [ 8883] = 0x6452, [ 8884] = 0x63DA, [ 8885] = 0x63F9,
++  [ 8886] = 0x655E, [ 8887] = 0x6566, [ 8888] = 0x6562, [ 8889] = 0x6563,
++  [ 8890] = 0x6591, [ 8891] = 0x6590, [ 8892] = 0x65AF, [ 8893] = 0x666E,
++  [ 8894] = 0x6670, [ 8895] = 0x6674, [ 8896] = 0x6676, [ 8897] = 0x666F,
++  [ 8898] = 0x6691, [ 8899] = 0x667A, [ 8900] = 0x667E, [ 8901] = 0x6677,
++  [ 8902] = 0x66FE, [ 8903] = 0x66FF, [ 8904] = 0x671F, [ 8905] = 0x671D,
++  [ 8906] = 0x68FA, [ 8907] = 0x68D5, [ 8908] = 0x68E0, [ 8909] = 0x68D8,
++  [ 8910] = 0x68D7, [ 8911] = 0x6905, [ 8912] = 0x68DF, [ 8913] = 0x68F5,
++  [ 8914] = 0x68EE, [ 8915] = 0x68E7, [ 8916] = 0x68F9, [ 8917] = 0x68D2,
++  [ 8918] = 0x68F2, [ 8919] = 0x68E3, [ 8920] = 0x68CB, [ 8921] = 0x68CD,
++  [ 8922] = 0x690D, [ 8923] = 0x6912, [ 8924] = 0x690E, [ 8925] = 0x68C9,
++  [ 8926] = 0x68DA, [ 8927] = 0x696E, [ 8928] = 0x68FB, [ 8929] = 0x6B3E,
++  [ 8930] = 0x6B3A, [ 8931] = 0x6B3D, [ 8932] = 0x6B98, [ 8933] = 0x6B96,
++  [ 8934] = 0x6BBC, [ 8935] = 0x6BEF, [ 8936] = 0x6C2E, [ 8937] = 0x6C2F,
++  [ 8938] = 0x6C2C, [ 8939] = 0x6E2F, [ 8940] = 0x6E38, [ 8941] = 0x6E54,
++  [ 8942] = 0x6E21, [ 8943] = 0x6E32, [ 8944] = 0x6E67, [ 8945] = 0x6E4A,
++  [ 8946] = 0x6E20, [ 8947] = 0x6E25, [ 8948] = 0x6E23, [ 8949] = 0x6E1B,
++  [ 8950] = 0x6E5B, [ 8951] = 0x6E58, [ 8952] = 0x6E24, [ 8953] = 0x6E56,
++  [ 8954] = 0x6E6E, [ 8955] = 0x6E2D, [ 8956] = 0x6E26, [ 8957] = 0x6E6F,
++  [ 8958] = 0x6E34, [ 8959] = 0x6E4D, [ 8960] = 0x6E3A, [ 8961] = 0x6E2C,
++  [ 8962] = 0x6E43, [ 8963] = 0x6E1D, [ 8964] = 0x6E3E, [ 8965] = 0x6ECB,
++  [ 8970] = 0x6E89, [ 8971] = 0x6E19, [ 8972] = 0x6E4E, [ 8973] = 0x6E63,
++  [ 8974] = 0x6E44, [ 8975] = 0x6E72, [ 8976] = 0x6E69, [ 8977] = 0x6E5F,
++  [ 8978] = 0x7119, [ 8979] = 0x711A, [ 8980] = 0x7126, [ 8981] = 0x7130,
++  [ 8982] = 0x7121, [ 8983] = 0x7136, [ 8984] = 0x716E, [ 8985] = 0x711C,
++  [ 8986] = 0x724C, [ 8987] = 0x7284, [ 8988] = 0x7280, [ 8989] = 0x7336,
++  [ 8990] = 0x7325, [ 8991] = 0x7334, [ 8992] = 0x7329, [ 8993] = 0x743A,
++  [ 8994] = 0x742A, [ 8995] = 0x7433, [ 8996] = 0x7422, [ 8997] = 0x7425,
++  [ 8998] = 0x7435, [ 8999] = 0x7436, [ 9000] = 0x7434, [ 9001] = 0x742F,
++  [ 9002] = 0x741B, [ 9003] = 0x7426, [ 9004] = 0x7428, [ 9005] = 0x7525,
++  [ 9006] = 0x7526, [ 9007] = 0x756B, [ 9008] = 0x756A, [ 9009] = 0x75E2,
++  [ 9010] = 0x75DB, [ 9011] = 0x75E3, [ 9012] = 0x75D9, [ 9013] = 0x75D8,
++  [ 9014] = 0x75DE, [ 9015] = 0x75E0, [ 9016] = 0x767B, [ 9017] = 0x767C,
++  [ 9018] = 0x7696, [ 9019] = 0x7693, [ 9020] = 0x76B4, [ 9021] = 0x76DC,
++  [ 9022] = 0x774F, [ 9023] = 0x77ED, [ 9024] = 0x785D, [ 9025] = 0x786C,
++  [ 9026] = 0x786F, [ 9027] = 0x7A0D, [ 9028] = 0x7A08, [ 9029] = 0x7A0B,
++  [ 9030] = 0x7A05, [ 9031] = 0x7A00, [ 9032] = 0x7A98, [ 9067] = 0x7A97,
++  [ 9068] = 0x7A96, [ 9069] = 0x7AE5, [ 9070] = 0x7AE3, [ 9071] = 0x7B49,
++  [ 9072] = 0x7B56, [ 9073] = 0x7B46, [ 9074] = 0x7B50, [ 9075] = 0x7B52,
++  [ 9076] = 0x7B54, [ 9077] = 0x7B4D, [ 9078] = 0x7B4B, [ 9079] = 0x7B4F,
++  [ 9080] = 0x7B51, [ 9081] = 0x7C9F, [ 9082] = 0x7CA5, [ 9083] = 0x7D5E,
++  [ 9084] = 0x7D50, [ 9085] = 0x7D68, [ 9086] = 0x7D55, [ 9087] = 0x7D2B,
++  [ 9088] = 0x7D6E, [ 9089] = 0x7D72, [ 9090] = 0x7D61, [ 9091] = 0x7D66,
++  [ 9092] = 0x7D62, [ 9093] = 0x7D70, [ 9094] = 0x7D73, [ 9095] = 0x5584,
++  [ 9096] = 0x7FD4, [ 9097] = 0x7FD5, [ 9098] = 0x800B, [ 9099] = 0x8052,
++  [ 9100] = 0x8085, [ 9101] = 0x8155, [ 9102] = 0x8154, [ 9103] = 0x814B,
++  [ 9104] = 0x8151, [ 9105] = 0x814E, [ 9106] = 0x8139, [ 9107] = 0x8146,
++  [ 9108] = 0x813E, [ 9109] = 0x814C, [ 9110] = 0x8153, [ 9111] = 0x8174,
++  [ 9112] = 0x8212, [ 9113] = 0x821C, [ 9114] = 0x83E9, [ 9115] = 0x8403,
++  [ 9116] = 0x83F8, [ 9117] = 0x840D, [ 9118] = 0x83E0, [ 9119] = 0x83C5,
++  [ 9120] = 0x840B, [ 9121] = 0x83C1, [ 9122] = 0x83EF, [ 9123] = 0x83F1,
++  [ 9124] = 0x83F4, [ 9125] = 0x8457, [ 9126] = 0x840A, [ 9127] = 0x83F0,
++  [ 9128] = 0x840C, [ 9129] = 0x83CC, [ 9130] = 0x83FD, [ 9131] = 0x83F2,
++  [ 9132] = 0x83CA, [ 9133] = 0x8438, [ 9134] = 0x840E, [ 9135] = 0x8404,
++  [ 9136] = 0x83DC, [ 9137] = 0x8407, [ 9138] = 0x83D4, [ 9139] = 0x83DF,
++  [ 9140] = 0x865B, [ 9141] = 0x86DF, [ 9142] = 0x86D9, [ 9143] = 0x86ED,
++  [ 9144] = 0x86D4, [ 9145] = 0x86DB, [ 9146] = 0x86E4, [ 9147] = 0x86D0,
++  [ 9148] = 0x86DE, [ 9149] = 0x8857, [ 9150] = 0x88C1, [ 9151] = 0x88C2,
++  [ 9152] = 0x88B1, [ 9153] = 0x8983, [ 9154] = 0x8996, [ 9155] = 0x8A3B,
++  [ 9156] = 0x8A60, [ 9157] = 0x8A55, [ 9158] = 0x8A5E, [ 9159] = 0x8A3C,
++  [ 9160] = 0x8A41, [ 9165] = 0x8A54, [ 9166] = 0x8A5B, [ 9167] = 0x8A50,
++  [ 9168] = 0x8A46, [ 9169] = 0x8A34, [ 9170] = 0x8A3A, [ 9171] = 0x8A36,
++  [ 9172] = 0x8A56, [ 9173] = 0x8C61, [ 9174] = 0x8C82, [ 9175] = 0x8CAF,
++  [ 9176] = 0x8CBC, [ 9177] = 0x8CB3, [ 9178] = 0x8CBD, [ 9179] = 0x8CC1,
++  [ 9180] = 0x8CBB, [ 9181] = 0x8CC0, [ 9182] = 0x8CB4, [ 9183] = 0x8CB7,
++  [ 9184] = 0x8CB6, [ 9185] = 0x8CBF, [ 9186] = 0x8CB8, [ 9187] = 0x8D8A,
++  [ 9188] = 0x8D85, [ 9189] = 0x8D81, [ 9190] = 0x8DCE, [ 9191] = 0x8DDD,
++  [ 9192] = 0x8DCB, [ 9193] = 0x8DDA, [ 9194] = 0x8DD1, [ 9195] = 0x8DCC,
++  [ 9196] = 0x8DDB, [ 9197] = 0x8DC6, [ 9198] = 0x8EFB, [ 9199] = 0x8EF8,
++  [ 9200] = 0x8EFC, [ 9201] = 0x8F9C, [ 9202] = 0x902E, [ 9203] = 0x9035,
++  [ 9204] = 0x9031, [ 9205] = 0x9038, [ 9206] = 0x9032, [ 9207] = 0x9036,
++  [ 9208] = 0x9102, [ 9209] = 0x90F5, [ 9210] = 0x9109, [ 9211] = 0x90FE,
++  [ 9212] = 0x9163, [ 9213] = 0x9165, [ 9214] = 0x91CF, [ 9215] = 0x9214,
++  [ 9216] = 0x9215, [ 9217] = 0x9223, [ 9218] = 0x9209, [ 9219] = 0x921E,
++  [ 9220] = 0x920D, [ 9221] = 0x9210, [ 9222] = 0x9207, [ 9223] = 0x9211,
++  [ 9224] = 0x9594, [ 9225] = 0x958F, [ 9226] = 0x958B, [ 9227] = 0x9591,
++  [ 9262] = 0x9593, [ 9263] = 0x9592, [ 9264] = 0x958E, [ 9265] = 0x968A,
++  [ 9266] = 0x968E, [ 9267] = 0x968B, [ 9268] = 0x967D, [ 9269] = 0x9685,
++  [ 9270] = 0x9686, [ 9271] = 0x968D, [ 9272] = 0x9672, [ 9273] = 0x9684,
++  [ 9274] = 0x96C1, [ 9275] = 0x96C5, [ 9276] = 0x96C4, [ 9277] = 0x96C6,
++  [ 9278] = 0x96C7, [ 9279] = 0x96EF, [ 9280] = 0x96F2, [ 9281] = 0x97CC,
++  [ 9282] = 0x9805, [ 9283] = 0x9806, [ 9284] = 0x9808, [ 9285] = 0x98E7,
++  [ 9286] = 0x98EA, [ 9287] = 0x98EF, [ 9288] = 0x98E9, [ 9289] = 0x98F2,
++  [ 9290] = 0x98ED, [ 9291] = 0x99AE, [ 9292] = 0x99AD, [ 9293] = 0x9EC3,
++  [ 9294] = 0x9ECD, [ 9295] = 0x9ED1, [ 9296] = 0x4E82, [ 9297] = 0x50AD,
++  [ 9298] = 0x50B5, [ 9299] = 0x50B2, [ 9300] = 0x50B3, [ 9301] = 0x50C5,
++  [ 9302] = 0x50BE, [ 9303] = 0x50AC, [ 9304] = 0x50B7, [ 9305] = 0x50BB,
++  [ 9306] = 0x50AF, [ 9307] = 0x50C7, [ 9308] = 0x527F, [ 9309] = 0x5277,
++  [ 9310] = 0x527D, [ 9311] = 0x52DF, [ 9312] = 0x52E6, [ 9313] = 0x52E4,
++  [ 9314] = 0x52E2, [ 9315] = 0x52E3, [ 9316] = 0x532F, [ 9317] = 0x55DF,
++  [ 9318] = 0x55E8, [ 9319] = 0x55D3, [ 9320] = 0x55E6, [ 9321] = 0x55CE,
++  [ 9322] = 0x55DC, [ 9323] = 0x55C7, [ 9324] = 0x55D1, [ 9325] = 0x55E3,
++  [ 9326] = 0x55E4, [ 9327] = 0x55EF, [ 9328] = 0x55DA, [ 9329] = 0x55E1,
++  [ 9330] = 0x55C5, [ 9331] = 0x55C6, [ 9332] = 0x55E5, [ 9333] = 0x55C9,
++  [ 9334] = 0x5712, [ 9335] = 0x5713, [ 9336] = 0x585E, [ 9337] = 0x5851,
++  [ 9338] = 0x5858, [ 9339] = 0x5857, [ 9340] = 0x585A, [ 9341] = 0x5854,
++  [ 9342] = 0x586B, [ 9343] = 0x584C, [ 9344] = 0x586D, [ 9345] = 0x584A,
++  [ 9346] = 0x5862, [ 9347] = 0x5852, [ 9348] = 0x584B, [ 9349] = 0x5967,
++  [ 9350] = 0x5AC1, [ 9351] = 0x5AC9, [ 9352] = 0x5ACC, [ 9353] = 0x5ABE,
++  [ 9354] = 0x5ABD, [ 9355] = 0x5ABC, [ 9360] = 0x5AB3, [ 9361] = 0x5AC2,
++  [ 9362] = 0x5AB2, [ 9363] = 0x5D69, [ 9364] = 0x5D6F, [ 9365] = 0x5E4C,
++  [ 9366] = 0x5E79, [ 9367] = 0x5EC9, [ 9368] = 0x5EC8, [ 9369] = 0x5F12,
++  [ 9370] = 0x5F59, [ 9371] = 0x5FAC, [ 9372] = 0x5FAE, [ 9373] = 0x611A,
++  [ 9374] = 0x610F, [ 9375] = 0x6148, [ 9376] = 0x611F, [ 9377] = 0x60F3,
++  [ 9378] = 0x611B, [ 9379] = 0x60F9, [ 9380] = 0x6101, [ 9381] = 0x6108,
++  [ 9382] = 0x614E, [ 9383] = 0x614C, [ 9384] = 0x6144, [ 9385] = 0x614D,
++  [ 9386] = 0x613E, [ 9387] = 0x6134, [ 9388] = 0x6127, [ 9389] = 0x610D,
++  [ 9390] = 0x6106, [ 9391] = 0x6137, [ 9392] = 0x6221, [ 9393] = 0x6222,
++  [ 9394] = 0x6413, [ 9395] = 0x643E, [ 9396] = 0x641E, [ 9397] = 0x642A,
++  [ 9398] = 0x642D, [ 9399] = 0x643D, [ 9400] = 0x642C, [ 9401] = 0x640F,
++  [ 9402] = 0x641C, [ 9403] = 0x6414, [ 9404] = 0x640D, [ 9405] = 0x6436,
++  [ 9406] = 0x6416, [ 9407] = 0x6417, [ 9408] = 0x6406, [ 9409] = 0x656C,
++  [ 9410] = 0x659F, [ 9411] = 0x65B0, [ 9412] = 0x6697, [ 9413] = 0x6689,
++  [ 9414] = 0x6687, [ 9415] = 0x6688, [ 9416] = 0x6696, [ 9417] = 0x6684,
++  [ 9418] = 0x6698, [ 9419] = 0x668D, [ 9420] = 0x6703, [ 9421] = 0x6994,
++  [ 9422] = 0x696D, [ 9457] = 0x695A, [ 9458] = 0x6977, [ 9459] = 0x6960,
++  [ 9460] = 0x6954, [ 9461] = 0x6975, [ 9462] = 0x6930, [ 9463] = 0x6982,
++  [ 9464] = 0x694A, [ 9465] = 0x6968, [ 9466] = 0x696B, [ 9467] = 0x695E,
++  [ 9468] = 0x6953, [ 9469] = 0x6979, [ 9470] = 0x6986, [ 9471] = 0x695D,
++  [ 9472] = 0x6963, [ 9473] = 0x695B, [ 9474] = 0x6B47, [ 9475] = 0x6B72,
++  [ 9476] = 0x6BC0, [ 9477] = 0x6BBF, [ 9478] = 0x6BD3, [ 9479] = 0x6BFD,
++  [ 9480] = 0x6EA2, [ 9481] = 0x6EAF, [ 9482] = 0x6ED3, [ 9483] = 0x6EB6,
++  [ 9484] = 0x6EC2, [ 9485] = 0x6E90, [ 9486] = 0x6E9D, [ 9487] = 0x6EC7,
++  [ 9488] = 0x6EC5, [ 9489] = 0x6EA5, [ 9490] = 0x6E98, [ 9491] = 0x6EBC,
++  [ 9492] = 0x6EBA, [ 9493] = 0x6EAB, [ 9494] = 0x6ED1, [ 9495] = 0x6E96,
++  [ 9496] = 0x6E9C, [ 9497] = 0x6EC4, [ 9498] = 0x6ED4, [ 9499] = 0x6EAA,
++  [ 9500] = 0x6EA7, [ 9501] = 0x6EB4, [ 9502] = 0x714E, [ 9503] = 0x7159,
++  [ 9504] = 0x7169, [ 9505] = 0x7164, [ 9506] = 0x7149, [ 9507] = 0x7167,
++  [ 9508] = 0x715C, [ 9509] = 0x716C, [ 9510] = 0x7166, [ 9511] = 0x714C,
++  [ 9512] = 0x7165, [ 9513] = 0x715E, [ 9514] = 0x7146, [ 9515] = 0x7168,
++  [ 9516] = 0x7156, [ 9517] = 0x723A, [ 9518] = 0x7252, [ 9519] = 0x7337,
++  [ 9520] = 0x7345, [ 9521] = 0x733F, [ 9522] = 0x733E, [ 9523] = 0x746F,
++  [ 9524] = 0x745A, [ 9525] = 0x7455, [ 9526] = 0x745F, [ 9527] = 0x745E,
++  [ 9528] = 0x7441, [ 9529] = 0x743F, [ 9530] = 0x7459, [ 9531] = 0x745B,
++  [ 9532] = 0x745C, [ 9533] = 0x7576, [ 9534] = 0x7578, [ 9535] = 0x7600,
++  [ 9536] = 0x75F0, [ 9537] = 0x7601, [ 9538] = 0x75F2, [ 9539] = 0x75F1,
++  [ 9540] = 0x75FA, [ 9541] = 0x75FF, [ 9542] = 0x75F4, [ 9543] = 0x75F3,
++  [ 9544] = 0x76DE, [ 9545] = 0x76DF, [ 9546] = 0x775B, [ 9547] = 0x776B,
++  [ 9548] = 0x7766, [ 9549] = 0x775E, [ 9550] = 0x7763, [ 9555] = 0x7779,
++  [ 9556] = 0x776A, [ 9557] = 0x776C, [ 9558] = 0x775C, [ 9559] = 0x7765,
++  [ 9560] = 0x7768, [ 9561] = 0x7762, [ 9562] = 0x77EE, [ 9563] = 0x788E,
++  [ 9564] = 0x78B0, [ 9565] = 0x7897, [ 9566] = 0x7898, [ 9567] = 0x788C,
++  [ 9568] = 0x7889, [ 9569] = 0x787C, [ 9570] = 0x7891, [ 9571] = 0x7893,
++  [ 9572] = 0x787F, [ 9573] = 0x797A, [ 9574] = 0x797F, [ 9575] = 0x7981,
++  [ 9576] = 0x842C, [ 9577] = 0x79BD, [ 9578] = 0x7A1C, [ 9579] = 0x7A1A,
++  [ 9580] = 0x7A20, [ 9581] = 0x7A14, [ 9582] = 0x7A1F, [ 9583] = 0x7A1E,
++  [ 9584] = 0x7A9F, [ 9585] = 0x7AA0, [ 9586] = 0x7B77, [ 9587] = 0x7BC0,
++  [ 9588] = 0x7B60, [ 9589] = 0x7B6E, [ 9590] = 0x7B67, [ 9591] = 0x7CB1,
++  [ 9592] = 0x7CB3, [ 9593] = 0x7CB5, [ 9594] = 0x7D93, [ 9595] = 0x7D79,
++  [ 9596] = 0x7D91, [ 9597] = 0x7D81, [ 9598] = 0x7D8F, [ 9599] = 0x7D5B,
++  [ 9600] = 0x7F6E, [ 9601] = 0x7F69, [ 9602] = 0x7F6A, [ 9603] = 0x7F72,
++  [ 9604] = 0x7FA9, [ 9605] = 0x7FA8, [ 9606] = 0x7FA4, [ 9607] = 0x8056,
++  [ 9608] = 0x8058, [ 9609] = 0x8086, [ 9610] = 0x8084, [ 9611] = 0x8171,
++  [ 9612] = 0x8170, [ 9613] = 0x8178, [ 9614] = 0x8165, [ 9615] = 0x816E,
++  [ 9616] = 0x8173, [ 9617] = 0x816B, [ 9652] = 0x8179, [ 9653] = 0x817A,
++  [ 9654] = 0x8166, [ 9655] = 0x8205, [ 9656] = 0x8247, [ 9657] = 0x8482,
++  [ 9658] = 0x8477, [ 9659] = 0x843D, [ 9660] = 0x8431, [ 9661] = 0x8475,
++  [ 9662] = 0x8466, [ 9663] = 0x846B, [ 9664] = 0x8449, [ 9665] = 0x846C,
++  [ 9666] = 0x845B, [ 9667] = 0x843C, [ 9668] = 0x8435, [ 9669] = 0x8461,
++  [ 9670] = 0x8463, [ 9671] = 0x8469, [ 9672] = 0x846D, [ 9673] = 0x8446,
++  [ 9674] = 0x865E, [ 9675] = 0x865C, [ 9676] = 0x865F, [ 9677] = 0x86F9,
++  [ 9678] = 0x8713, [ 9679] = 0x8708, [ 9680] = 0x8707, [ 9681] = 0x8700,
++  [ 9682] = 0x86FE, [ 9683] = 0x86FB, [ 9684] = 0x8702, [ 9685] = 0x8703,
++  [ 9686] = 0x8706, [ 9687] = 0x870A, [ 9688] = 0x8859, [ 9689] = 0x88DF,
++  [ 9690] = 0x88D4, [ 9691] = 0x88D9, [ 9692] = 0x88DC, [ 9693] = 0x88D8,
++  [ 9694] = 0x88DD, [ 9695] = 0x88E1, [ 9696] = 0x88CA, [ 9697] = 0x88D5,
++  [ 9698] = 0x88D2, [ 9699] = 0x899C, [ 9700] = 0x89E3, [ 9701] = 0x8A6B,
++  [ 9702] = 0x8A72, [ 9703] = 0x8A73, [ 9704] = 0x8A66, [ 9705] = 0x8A69,
++  [ 9706] = 0x8A70, [ 9707] = 0x8A87, [ 9708] = 0x8A7C, [ 9709] = 0x8A63,
++  [ 9710] = 0x8AA0, [ 9711] = 0x8A71, [ 9712] = 0x8A85, [ 9713] = 0x8A6D,
++  [ 9714] = 0x8A62, [ 9715] = 0x8A6E, [ 9716] = 0x8A6C, [ 9717] = 0x8A79,
++  [ 9718] = 0x8A7B, [ 9719] = 0x8A3E, [ 9720] = 0x8A68, [ 9721] = 0x8C62,
++  [ 9722] = 0x8C8A, [ 9723] = 0x8C89, [ 9724] = 0x8CCA, [ 9725] = 0x8CC7,
++  [ 9726] = 0x8CC8, [ 9727] = 0x8CC4, [ 9728] = 0x8CB2, [ 9729] = 0x8CC3,
++  [ 9730] = 0x8CC2, [ 9731] = 0x8CC5, [ 9732] = 0x8DE1, [ 9733] = 0x8DDF,
++  [ 9734] = 0x8DE8, [ 9735] = 0x8DEF, [ 9736] = 0x8DF3, [ 9737] = 0x8DFA,
++  [ 9738] = 0x8DEA, [ 9739] = 0x8DE4, [ 9740] = 0x8DE6, [ 9741] = 0x8EB2,
++  [ 9742] = 0x8F03, [ 9743] = 0x8F09, [ 9744] = 0x8EFE, [ 9745] = 0x8F0A,
++  [ 9750] = 0x8F9F, [ 9751] = 0x8FB2, [ 9752] = 0x904B, [ 9753] = 0x904A,
++  [ 9754] = 0x9053, [ 9755] = 0x9042, [ 9756] = 0x9054, [ 9757] = 0x903C,
++  [ 9758] = 0x9055, [ 9759] = 0x9050, [ 9760] = 0x9047, [ 9761] = 0x904F,
++  [ 9762] = 0x904E, [ 9763] = 0x904D, [ 9764] = 0x9051, [ 9765] = 0x903E,
++  [ 9766] = 0x9041, [ 9767] = 0x9112, [ 9768] = 0x9117, [ 9769] = 0x916C,
++  [ 9770] = 0x916A, [ 9771] = 0x9169, [ 9772] = 0x91C9, [ 9773] = 0x9237,
++  [ 9774] = 0x9257, [ 9775] = 0x9238, [ 9776] = 0x923D, [ 9777] = 0x9240,
++  [ 9778] = 0x923E, [ 9779] = 0x925B, [ 9780] = 0x924B, [ 9781] = 0x9264,
++  [ 9782] = 0x9251, [ 9783] = 0x9234, [ 9784] = 0x9249, [ 9785] = 0x924D,
++  [ 9786] = 0x9245, [ 9787] = 0x9239, [ 9788] = 0x923F, [ 9789] = 0x925A,
++  [ 9790] = 0x9598, [ 9791] = 0x9698, [ 9792] = 0x9694, [ 9793] = 0x9695,
++  [ 9794] = 0x96CD, [ 9795] = 0x96CB, [ 9796] = 0x96C9, [ 9797] = 0x96CA,
++  [ 9798] = 0x96F7, [ 9799] = 0x96FB, [ 9800] = 0x96F9, [ 9801] = 0x96F6,
++  [ 9802] = 0x9756, [ 9803] = 0x9774, [ 9804] = 0x9776, [ 9805] = 0x9810,
++  [ 9806] = 0x9811, [ 9807] = 0x9813, [ 9808] = 0x980A, [ 9809] = 0x9812,
++  [ 9810] = 0x980C, [ 9811] = 0x98FC, [ 9812] = 0x98F4, [ 9847] = 0x98FD,
++  [ 9848] = 0x98FE, [ 9849] = 0x99B3, [ 9850] = 0x99B1, [ 9851] = 0x99B4,
++  [ 9852] = 0x9AE1, [ 9853] = 0x9CE9, [ 9854] = 0x9E82, [ 9855] = 0x9F0E,
++  [ 9856] = 0x9F13, [ 9857] = 0x9F20, [ 9858] = 0x50E7, [ 9859] = 0x50EE,
++  [ 9860] = 0x50E5, [ 9861] = 0x50D6, [ 9862] = 0x50ED, [ 9863] = 0x50DA,
++  [ 9864] = 0x50D5, [ 9865] = 0x50CF, [ 9866] = 0x50D1, [ 9867] = 0x50F1,
++  [ 9868] = 0x50CE, [ 9869] = 0x50E9, [ 9870] = 0x5162, [ 9871] = 0x51F3,
++  [ 9872] = 0x5283, [ 9873] = 0x5282, [ 9874] = 0x5331, [ 9875] = 0x53AD,
++  [ 9876] = 0x55FE, [ 9877] = 0x5600, [ 9878] = 0x561B, [ 9879] = 0x5617,
++  [ 9880] = 0x55FD, [ 9881] = 0x5614, [ 9882] = 0x5606, [ 9883] = 0x5609,
++  [ 9884] = 0x560D, [ 9885] = 0x560E, [ 9886] = 0x55F7, [ 9887] = 0x5616,
++  [ 9888] = 0x561F, [ 9889] = 0x5608, [ 9890] = 0x5610, [ 9891] = 0x55F6,
++  [ 9892] = 0x5718, [ 9893] = 0x5716, [ 9894] = 0x5875, [ 9895] = 0x587E,
++  [ 9896] = 0x5883, [ 9897] = 0x5893, [ 9898] = 0x588A, [ 9899] = 0x5879,
++  [ 9900] = 0x5885, [ 9901] = 0x587D, [ 9902] = 0x58FD, [ 9903] = 0x5925,
++  [ 9904] = 0x5922, [ 9905] = 0x5924, [ 9906] = 0x596A, [ 9907] = 0x5969,
++  [ 9908] = 0x5AE1, [ 9909] = 0x5AE6, [ 9910] = 0x5AE9, [ 9911] = 0x5AD7,
++  [ 9912] = 0x5AD6, [ 9913] = 0x5AD8, [ 9914] = 0x5AE3, [ 9915] = 0x5B75,
++  [ 9916] = 0x5BDE, [ 9917] = 0x5BE7, [ 9918] = 0x5BE1, [ 9919] = 0x5BE5,
++  [ 9920] = 0x5BE6, [ 9921] = 0x5BE8, [ 9922] = 0x5BE2, [ 9923] = 0x5BE4,
++  [ 9924] = 0x5BDF, [ 9925] = 0x5C0D, [ 9926] = 0x5C62, [ 9927] = 0x5D84,
++  [ 9928] = 0x5D87, [ 9929] = 0x5E5B, [ 9930] = 0x5E63, [ 9931] = 0x5E55,
++  [ 9932] = 0x5E57, [ 9933] = 0x5E54, [ 9934] = 0x5ED3, [ 9935] = 0x5ED6,
++  [ 9936] = 0x5F0A, [ 9937] = 0x5F46, [ 9938] = 0x5F70, [ 9939] = 0x5FB9,
++  [ 9940] = 0x6147, [ 9945] = 0x613F, [ 9946] = 0x614B, [ 9947] = 0x6177,
++  [ 9948] = 0x6162, [ 9949] = 0x6163, [ 9950] = 0x615F, [ 9951] = 0x615A,
++  [ 9952] = 0x6158, [ 9953] = 0x6175, [ 9954] = 0x622A, [ 9955] = 0x6487,
++  [ 9956] = 0x6458, [ 9957] = 0x6454, [ 9958] = 0x64A4, [ 9959] = 0x6478,
++  [ 9960] = 0x645F, [ 9961] = 0x647A, [ 9962] = 0x6451, [ 9963] = 0x6467,
++  [ 9964] = 0x6434, [ 9965] = 0x646D, [ 9966] = 0x647B, [ 9967] = 0x6572,
++  [ 9968] = 0x65A1, [ 9969] = 0x65D7, [ 9970] = 0x65D6, [ 9971] = 0x66A2,
++  [ 9972] = 0x66A8, [ 9973] = 0x669D, [ 9974] = 0x699C, [ 9975] = 0x69A8,
++  [ 9976] = 0x6995, [ 9977] = 0x69C1, [ 9978] = 0x69AE, [ 9979] = 0x69D3,
++  [ 9980] = 0x69CB, [ 9981] = 0x699B, [ 9982] = 0x69B7, [ 9983] = 0x69BB,
++  [ 9984] = 0x69AB, [ 9985] = 0x69B4, [ 9986] = 0x69D0, [ 9987] = 0x69CD,
++  [ 9988] = 0x69AD, [ 9989] = 0x69CC, [ 9990] = 0x69A6, [ 9991] = 0x69C3,
++  [ 9992] = 0x69A3, [ 9993] = 0x6B49, [ 9994] = 0x6B4C, [ 9995] = 0x6C33,
++  [ 9996] = 0x6F33, [ 9997] = 0x6F14, [ 9998] = 0x6EFE, [ 9999] = 0x6F13,
++  [10000] = 0x6EF4, [10001] = 0x6F29, [10002] = 0x6F3E, [10003] = 0x6F20,
++  [10004] = 0x6F2C, [10005] = 0x6F0F, [10006] = 0x6F02, [10007] = 0x6F22,
++  [10042] = 0x6EFF, [10043] = 0x6EEF, [10044] = 0x6F06, [10045] = 0x6F31,
++  [10046] = 0x6F38, [10047] = 0x6F32, [10048] = 0x6F23, [10049] = 0x6F15,
++  [10050] = 0x6F2B, [10051] = 0x6F2F, [10052] = 0x6F88, [10053] = 0x6F2A,
++  [10054] = 0x6EEC, [10055] = 0x6F01, [10056] = 0x6EF2, [10057] = 0x6ECC,
++  [10058] = 0x6EF7, [10059] = 0x7194, [10060] = 0x7199, [10061] = 0x717D,
++  [10062] = 0x718A, [10063] = 0x7184, [10064] = 0x7192, [10065] = 0x723E,
++  [10066] = 0x7292, [10067] = 0x7296, [10068] = 0x7344, [10069] = 0x7350,
++  [10070] = 0x7464, [10071] = 0x7463, [10072] = 0x746A, [10073] = 0x7470,
++  [10074] = 0x746D, [10075] = 0x7504, [10076] = 0x7591, [10077] = 0x7627,
++  [10078] = 0x760D, [10079] = 0x760B, [10080] = 0x7609, [10081] = 0x7613,
++  [10082] = 0x76E1, [10083] = 0x76E3, [10084] = 0x7784, [10085] = 0x777D,
++  [10086] = 0x777F, [10087] = 0x7761, [10088] = 0x78C1, [10089] = 0x789F,
++  [10090] = 0x78A7, [10091] = 0x78B3, [10092] = 0x78A9, [10093] = 0x78A3,
++  [10094] = 0x798E, [10095] = 0x798F, [10096] = 0x798D, [10097] = 0x7A2E,
++  [10098] = 0x7A31, [10099] = 0x7AAA, [10100] = 0x7AA9, [10101] = 0x7AED,
++  [10102] = 0x7AEF, [10103] = 0x7BA1, [10104] = 0x7B95, [10105] = 0x7B8B,
++  [10106] = 0x7B75, [10107] = 0x7B97, [10108] = 0x7B9D, [10109] = 0x7B94,
++  [10110] = 0x7B8F, [10111] = 0x7BB8, [10112] = 0x7B87, [10113] = 0x7B84,
++  [10114] = 0x7CB9, [10115] = 0x7CBD, [10116] = 0x7CBE, [10117] = 0x7DBB,
++  [10118] = 0x7DB0, [10119] = 0x7D9C, [10120] = 0x7DBD, [10121] = 0x7DBE,
++  [10122] = 0x7DA0, [10123] = 0x7DCA, [10124] = 0x7DB4, [10125] = 0x7DB2,
++  [10126] = 0x7DB1, [10127] = 0x7DBA, [10128] = 0x7DA2, [10129] = 0x7DBF,
++  [10130] = 0x7DB5, [10131] = 0x7DB8, [10132] = 0x7DAD, [10133] = 0x7DD2,
++  [10134] = 0x7DC7, [10135] = 0x7DAC, [10140] = 0x7F70, [10141] = 0x7FE0,
++  [10142] = 0x7FE1, [10143] = 0x7FDF, [10144] = 0x805E, [10145] = 0x805A,
++  [10146] = 0x8087, [10147] = 0x8150, [10148] = 0x8180, [10149] = 0x818F,
++  [10150] = 0x8188, [10151] = 0x818A, [10152] = 0x817F, [10153] = 0x8182,
++  [10154] = 0x81E7, [10155] = 0x81FA, [10156] = 0x8207, [10157] = 0x8214,
++  [10158] = 0x821E, [10159] = 0x824B, [10160] = 0x84C9, [10161] = 0x84BF,
++  [10162] = 0x84C6, [10163] = 0x84C4, [10164] = 0x8499, [10165] = 0x849E,
++  [10166] = 0x84B2, [10167] = 0x849C, [10168] = 0x84CB, [10169] = 0x84B8,
++  [10170] = 0x84C0, [10171] = 0x84D3, [10172] = 0x8490, [10173] = 0x84BC,
++  [10174] = 0x84D1, [10175] = 0x84CA, [10176] = 0x873F, [10177] = 0x871C,
++  [10178] = 0x873B, [10179] = 0x8722, [10180] = 0x8725, [10181] = 0x8734,
++  [10182] = 0x8718, [10183] = 0x8755, [10184] = 0x8737, [10185] = 0x8729,
++  [10186] = 0x88F3, [10187] = 0x8902, [10188] = 0x88F4, [10189] = 0x88F9,
++  [10190] = 0x88F8, [10191] = 0x88FD, [10192] = 0x88E8, [10193] = 0x891A,
++  [10194] = 0x88EF, [10195] = 0x8AA6, [10196] = 0x8A8C, [10197] = 0x8A9E,
++  [10198] = 0x8AA3, [10199] = 0x8A8D, [10200] = 0x8AA1, [10201] = 0x8A93,
++  [10202] = 0x8AA4, [10237] = 0x8AAA, [10238] = 0x8AA5, [10239] = 0x8AA8,
++  [10240] = 0x8A98, [10241] = 0x8A91, [10242] = 0x8A9A, [10243] = 0x8AA7,
++  [10244] = 0x8C6A, [10245] = 0x8C8D, [10246] = 0x8C8C, [10247] = 0x8CD3,
++  [10248] = 0x8CD1, [10249] = 0x8CD2, [10250] = 0x8D6B, [10251] = 0x8D99,
++  [10252] = 0x8D95, [10253] = 0x8DFC, [10254] = 0x8F14, [10255] = 0x8F12,
++  [10256] = 0x8F15, [10257] = 0x8F13, [10258] = 0x8FA3, [10259] = 0x9060,
++  [10260] = 0x9058, [10261] = 0x905C, [10262] = 0x9063, [10263] = 0x9059,
++  [10264] = 0x905E, [10265] = 0x9062, [10266] = 0x905D, [10267] = 0x905B,
++  [10268] = 0x9119, [10269] = 0x9118, [10270] = 0x911E, [10271] = 0x9175,
++  [10272] = 0x9178, [10273] = 0x9177, [10274] = 0x9174, [10275] = 0x9278,
++  [10276] = 0x9280, [10277] = 0x9285, [10278] = 0x9298, [10279] = 0x9296,
++  [10280] = 0x927B, [10281] = 0x9293, [10282] = 0x929C, [10283] = 0x92A8,
++  [10284] = 0x927C, [10285] = 0x9291, [10286] = 0x95A1, [10287] = 0x95A8,
++  [10288] = 0x95A9, [10289] = 0x95A3, [10290] = 0x95A5, [10291] = 0x95A4,
++  [10292] = 0x9699, [10293] = 0x969C, [10294] = 0x969B, [10295] = 0x96CC,
++  [10296] = 0x96D2, [10297] = 0x9700, [10298] = 0x977C, [10299] = 0x9785,
++  [10300] = 0x97F6, [10301] = 0x9817, [10302] = 0x9818, [10303] = 0x98AF,
++  [10304] = 0x98B1, [10305] = 0x9903, [10306] = 0x9905, [10307] = 0x990C,
++  [10308] = 0x9909, [10309] = 0x99C1, [10310] = 0x9AAF, [10311] = 0x9AB0,
++  [10312] = 0x9AE6, [10313] = 0x9B41, [10314] = 0x9B42, [10315] = 0x9CF4,
++  [10316] = 0x9CF6, [10317] = 0x9CF3, [10318] = 0x9EBC, [10319] = 0x9F3B,
++  [10320] = 0x9F4A, [10321] = 0x5104, [10322] = 0x5100, [10323] = 0x50FB,
++  [10324] = 0x50F5, [10325] = 0x50F9, [10326] = 0x5102, [10327] = 0x5108,
++  [10328] = 0x5109, [10329] = 0x5105, [10330] = 0x51DC, [10335] = 0x5287,
++  [10336] = 0x5288, [10337] = 0x5289, [10338] = 0x528D, [10339] = 0x528A,
++  [10340] = 0x52F0, [10341] = 0x53B2, [10342] = 0x562E, [10343] = 0x563B,
++  [10344] = 0x5639, [10345] = 0x5632, [10346] = 0x563F, [10347] = 0x5634,
++  [10348] = 0x5629, [10349] = 0x5653, [10350] = 0x564E, [10351] = 0x5657,
++  [10352] = 0x5674, [10353] = 0x5636, [10354] = 0x562F, [10355] = 0x5630,
++  [10356] = 0x5880, [10357] = 0x589F, [10358] = 0x589E, [10359] = 0x58B3,
++  [10360] = 0x589C, [10361] = 0x58AE, [10362] = 0x58A9, [10363] = 0x58A6,
++  [10364] = 0x596D, [10365] = 0x5B09, [10366] = 0x5AFB, [10367] = 0x5B0B,
++  [10368] = 0x5AF5, [10369] = 0x5B0C, [10370] = 0x5B08, [10371] = 0x5BEE,
++  [10372] = 0x5BEC, [10373] = 0x5BE9, [10374] = 0x5BEB, [10375] = 0x5C64,
++  [10376] = 0x5C65, [10377] = 0x5D9D, [10378] = 0x5D94, [10379] = 0x5E62,
++  [10380] = 0x5E5F, [10381] = 0x5E61, [10382] = 0x5EE2, [10383] = 0x5EDA,
++  [10384] = 0x5EDF, [10385] = 0x5EDD, [10386] = 0x5EE3, [10387] = 0x5EE0,
++  [10388] = 0x5F48, [10389] = 0x5F71, [10390] = 0x5FB7, [10391] = 0x5FB5,
++  [10392] = 0x6176, [10393] = 0x6167, [10394] = 0x616E, [10395] = 0x615D,
++  [10396] = 0x6155, [10397] = 0x6182, [10432] = 0x617C, [10433] = 0x6170,
++  [10434] = 0x616B, [10435] = 0x617E, [10436] = 0x61A7, [10437] = 0x6190,
++  [10438] = 0x61AB, [10439] = 0x618E, [10440] = 0x61AC, [10441] = 0x619A,
++  [10442] = 0x61A4, [10443] = 0x6194, [10444] = 0x61AE, [10445] = 0x622E,
++  [10446] = 0x6469, [10447] = 0x646F, [10448] = 0x6479, [10449] = 0x649E,
++  [10450] = 0x64B2, [10451] = 0x6488, [10452] = 0x6490, [10453] = 0x64B0,
++  [10454] = 0x64A5, [10455] = 0x6493, [10456] = 0x6495, [10457] = 0x64A9,
++  [10458] = 0x6492, [10459] = 0x64AE, [10460] = 0x64AD, [10461] = 0x64AB,
++  [10462] = 0x649A, [10463] = 0x64AC, [10464] = 0x6499, [10465] = 0x64A2,
++  [10466] = 0x64B3, [10467] = 0x6575, [10468] = 0x6577, [10469] = 0x6578,
++  [10470] = 0x66AE, [10471] = 0x66AB, [10472] = 0x66B4, [10473] = 0x66B1,
++  [10474] = 0x6A23, [10475] = 0x6A1F, [10476] = 0x69E8, [10477] = 0x6A01,
++  [10478] = 0x6A1E, [10479] = 0x6A19, [10480] = 0x69FD, [10481] = 0x6A21,
++  [10482] = 0x6A13, [10483] = 0x6A0A, [10484] = 0x69F3, [10485] = 0x6A02,
++  [10486] = 0x6A05, [10487] = 0x69ED, [10488] = 0x6A11, [10489] = 0x6B50,
++  [10490] = 0x6B4E, [10491] = 0x6BA4, [10492] = 0x6BC5, [10493] = 0x6BC6,
++  [10494] = 0x6F3F, [10495] = 0x6F7C, [10496] = 0x6F84, [10497] = 0x6F51,
++  [10498] = 0x6F66, [10499] = 0x6F54, [10500] = 0x6F86, [10501] = 0x6F6D,
++  [10502] = 0x6F5B, [10503] = 0x6F78, [10504] = 0x6F6E, [10505] = 0x6F8E,
++  [10506] = 0x6F7A, [10507] = 0x6F70, [10508] = 0x6F64, [10509] = 0x6F97,
++  [10510] = 0x6F58, [10511] = 0x6ED5, [10512] = 0x6F6F, [10513] = 0x6F60,
++  [10514] = 0x6F5F, [10515] = 0x719F, [10516] = 0x71AC, [10517] = 0x71B1,
++  [10518] = 0x71A8, [10519] = 0x7256, [10520] = 0x729B, [10521] = 0x734E,
++  [10522] = 0x7357, [10523] = 0x7469, [10524] = 0x748B, [10525] = 0x7483,
++  [10530] = 0x747E, [10531] = 0x7480, [10532] = 0x757F, [10533] = 0x7620,
++  [10534] = 0x7629, [10535] = 0x761F, [10536] = 0x7624, [10537] = 0x7626,
++  [10538] = 0x7621, [10539] = 0x7622, [10540] = 0x769A, [10541] = 0x76BA,
++  [10542] = 0x76E4, [10543] = 0x778E, [10544] = 0x7787, [10545] = 0x778C,
++  [10546] = 0x7791, [10547] = 0x778B, [10548] = 0x78CB, [10549] = 0x78C5,
++  [10550] = 0x78BA, [10551] = 0x78CA, [10552] = 0x78BE, [10553] = 0x78D5,
++  [10554] = 0x78BC, [10555] = 0x78D0, [10556] = 0x7A3F, [10557] = 0x7A3C,
++  [10558] = 0x7A40, [10559] = 0x7A3D, [10560] = 0x7A37, [10561] = 0x7A3B,
++  [10562] = 0x7AAF, [10563] = 0x7AAE, [10564] = 0x7BAD, [10565] = 0x7BB1,
++  [10566] = 0x7BC4, [10567] = 0x7BB4, [10568] = 0x7BC6, [10569] = 0x7BC7,
++  [10570] = 0x7BC1, [10571] = 0x7BA0, [10572] = 0x7BCC, [10573] = 0x7CCA,
++  [10574] = 0x7DE0, [10575] = 0x7DF4, [10576] = 0x7DEF, [10577] = 0x7DFB,
++  [10578] = 0x7DD8, [10579] = 0x7DEC, [10580] = 0x7DDD, [10581] = 0x7DE8,
++  [10582] = 0x7DE3, [10583] = 0x7DDA, [10584] = 0x7DDE, [10585] = 0x7DE9,
++  [10586] = 0x7D9E, [10587] = 0x7DD9, [10588] = 0x7DF2, [10589] = 0x7DF9,
++  [10590] = 0x7F75, [10591] = 0x7F77, [10592] = 0x7FAF, [10627] = 0x7FE9,
++  [10628] = 0x8026, [10629] = 0x819B, [10630] = 0x819C, [10631] = 0x819D,
++  [10632] = 0x81A0, [10633] = 0x819A, [10634] = 0x8198, [10635] = 0x8517,
++  [10636] = 0x853D, [10637] = 0x851A, [10638] = 0x84EE, [10639] = 0x852C,
++  [10640] = 0x852D, [10641] = 0x8513, [10642] = 0x8511, [10643] = 0x8523,
++  [10644] = 0x8521, [10645] = 0x8514, [10646] = 0x84EC, [10647] = 0x8525,
++  [10648] = 0x84FF, [10649] = 0x8506, [10650] = 0x8782, [10651] = 0x8774,
++  [10652] = 0x8776, [10653] = 0x8760, [10654] = 0x8766, [10655] = 0x8778,
++  [10656] = 0x8768, [10657] = 0x8759, [10658] = 0x8757, [10659] = 0x874C,
++  [10660] = 0x8753, [10661] = 0x885B, [10662] = 0x885D, [10663] = 0x8910,
++  [10664] = 0x8907, [10665] = 0x8912, [10666] = 0x8913, [10667] = 0x8915,
++  [10668] = 0x890A, [10669] = 0x8ABC, [10670] = 0x8AD2, [10671] = 0x8AC7,
++  [10672] = 0x8AC4, [10673] = 0x8A95, [10674] = 0x8ACB, [10675] = 0x8AF8,
++  [10676] = 0x8AB2, [10677] = 0x8AC9, [10678] = 0x8AC2, [10679] = 0x8ABF,
++  [10680] = 0x8AB0, [10681] = 0x8AD6, [10682] = 0x8ACD, [10683] = 0x8AB6,
++  [10684] = 0x8AB9, [10685] = 0x8ADB, [10686] = 0x8C4C, [10687] = 0x8C4E,
++  [10688] = 0x8C6C, [10689] = 0x8CE0, [10690] = 0x8CDE, [10691] = 0x8CE6,
++  [10692] = 0x8CE4, [10693] = 0x8CEC, [10694] = 0x8CED, [10695] = 0x8CE2,
++  [10696] = 0x8CE3, [10697] = 0x8CDC, [10698] = 0x8CEA, [10699] = 0x8CE1,
++  [10700] = 0x8D6D, [10701] = 0x8D9F, [10702] = 0x8DA3, [10703] = 0x8E2B,
++  [10704] = 0x8E10, [10705] = 0x8E1D, [10706] = 0x8E22, [10707] = 0x8E0F,
++  [10708] = 0x8E29, [10709] = 0x8E1F, [10710] = 0x8E21, [10711] = 0x8E1E,
++  [10712] = 0x8EBA, [10713] = 0x8F1D, [10714] = 0x8F1B, [10715] = 0x8F1F,
++  [10716] = 0x8F29, [10717] = 0x8F26, [10718] = 0x8F2A, [10719] = 0x8F1C,
++  [10720] = 0x8F1E, [10725] = 0x8F25, [10726] = 0x9069, [10727] = 0x906E,
++  [10728] = 0x9068, [10729] = 0x906D, [10730] = 0x9077, [10731] = 0x9130,
++  [10732] = 0x912D, [10733] = 0x9127, [10734] = 0x9131, [10735] = 0x9187,
++  [10736] = 0x9189, [10737] = 0x918B, [10738] = 0x9183, [10739] = 0x92C5,
++  [10740] = 0x92BB, [10741] = 0x92B7, [10742] = 0x92EA, [10743] = 0x92AC,
++  [10744] = 0x92E4, [10745] = 0x92C1, [10746] = 0x92B3, [10747] = 0x92BC,
++  [10748] = 0x92D2, [10749] = 0x92C7, [10750] = 0x92F0, [10751] = 0x92B2,
++  [10752] = 0x95AD, [10753] = 0x95B1, [10754] = 0x9704, [10755] = 0x9706,
++  [10756] = 0x9707, [10757] = 0x9709, [10758] = 0x9760, [10759] = 0x978D,
++  [10760] = 0x978B, [10761] = 0x978F, [10762] = 0x9821, [10763] = 0x982B,
++  [10764] = 0x981C, [10765] = 0x98B3, [10766] = 0x990A, [10767] = 0x9913,
++  [10768] = 0x9912, [10769] = 0x9918, [10770] = 0x99DD, [10771] = 0x99D0,
++  [10772] = 0x99DF, [10773] = 0x99DB, [10774] = 0x99D1, [10775] = 0x99D5,
++  [10776] = 0x99D2, [10777] = 0x99D9, [10778] = 0x9AB7, [10779] = 0x9AEE,
++  [10780] = 0x9AEF, [10781] = 0x9B27, [10782] = 0x9B45, [10783] = 0x9B44,
++  [10784] = 0x9B77, [10785] = 0x9B6F, [10786] = 0x9D06, [10787] = 0x9D09,
++  [10822] = 0x9D03, [10823] = 0x9EA9, [10824] = 0x9EBE, [10825] = 0x9ECE,
++  [10826] = 0x58A8, [10827] = 0x9F52, [10828] = 0x5112, [10829] = 0x5118,
++  [10830] = 0x5114, [10831] = 0x5110, [10832] = 0x5115, [10833] = 0x5180,
++  [10834] = 0x51AA, [10835] = 0x51DD, [10836] = 0x5291, [10837] = 0x5293,
++  [10838] = 0x52F3, [10839] = 0x5659, [10840] = 0x566B, [10841] = 0x5679,
++  [10842] = 0x5669, [10843] = 0x5664, [10844] = 0x5678, [10845] = 0x566A,
++  [10846] = 0x5668, [10847] = 0x5665, [10848] = 0x5671, [10849] = 0x566F,
++  [10850] = 0x566C, [10851] = 0x5662, [10852] = 0x5676, [10853] = 0x58C1,
++  [10854] = 0x58BE, [10855] = 0x58C7, [10856] = 0x58C5, [10857] = 0x596E,
++  [10858] = 0x5B1D, [10859] = 0x5B34, [10860] = 0x5B78, [10861] = 0x5BF0,
++  [10862] = 0x5C0E, [10863] = 0x5F4A, [10864] = 0x61B2, [10865] = 0x6191,
++  [10866] = 0x61A9, [10867] = 0x618A, [10868] = 0x61CD, [10869] = 0x61B6,
++  [10870] = 0x61BE, [10871] = 0x61CA, [10872] = 0x61C8, [10873] = 0x6230,
++  [10874] = 0x64C5, [10875] = 0x64C1, [10876] = 0x64CB, [10877] = 0x64BB,
++  [10878] = 0x64BC, [10879] = 0x64DA, [10880] = 0x64C4, [10881] = 0x64C7,
++  [10882] = 0x64C2, [10883] = 0x64CD, [10884] = 0x64BF, [10885] = 0x64D2,
++  [10886] = 0x64D4, [10887] = 0x64BE, [10888] = 0x6574, [10889] = 0x66C6,
++  [10890] = 0x66C9, [10891] = 0x66B9, [10892] = 0x66C4, [10893] = 0x66C7,
++  [10894] = 0x66B8, [10895] = 0x6A3D, [10896] = 0x6A38, [10897] = 0x6A3A,
++  [10898] = 0x6A59, [10899] = 0x6A6B, [10900] = 0x6A58, [10901] = 0x6A39,
++  [10902] = 0x6A44, [10903] = 0x6A62, [10904] = 0x6A61, [10905] = 0x6A4B,
++  [10906] = 0x6A47, [10907] = 0x6A35, [10908] = 0x6A5F, [10909] = 0x6A48,
++  [10910] = 0x6B59, [10911] = 0x6B77, [10912] = 0x6C05, [10913] = 0x6FC2,
++  [10914] = 0x6FB1, [10915] = 0x6FA1, [10920] = 0x6FC3, [10921] = 0x6FA4,
++  [10922] = 0x6FC1, [10923] = 0x6FA7, [10924] = 0x6FB3, [10925] = 0x6FC0,
++  [10926] = 0x6FB9, [10927] = 0x6FB6, [10928] = 0x6FA6, [10929] = 0x6FA0,
++  [10930] = 0x6FB4, [10931] = 0x71BE, [10932] = 0x71C9, [10933] = 0x71D0,
++  [10934] = 0x71D2, [10935] = 0x71C8, [10936] = 0x71D5, [10937] = 0x71B9,
++  [10938] = 0x71CE, [10939] = 0x71D9, [10940] = 0x71DC, [10941] = 0x71C3,
++  [10942] = 0x71C4, [10943] = 0x7368, [10944] = 0x749C, [10945] = 0x74A3,
++  [10946] = 0x7498, [10947] = 0x749F, [10948] = 0x749E, [10949] = 0x74E2,
++  [10950] = 0x750C, [10951] = 0x750D, [10952] = 0x7634, [10953] = 0x7638,
++  [10954] = 0x763A, [10955] = 0x76E7, [10956] = 0x76E5, [10957] = 0x77A0,
++  [10958] = 0x779E, [10959] = 0x779F, [10960] = 0x77A5, [10961] = 0x78E8,
++  [10962] = 0x78DA, [10963] = 0x78EC, [10964] = 0x78E7, [10965] = 0x79A6,
++  [10966] = 0x7A4D, [10967] = 0x7A4E, [10968] = 0x7A46, [10969] = 0x7A4C,
++  [10970] = 0x7A4B, [10971] = 0x7ABA, [10972] = 0x7BD9, [10973] = 0x7C11,
++  [10974] = 0x7BC9, [10975] = 0x7BE4, [10976] = 0x7BDB, [10977] = 0x7BE1,
++  [10978] = 0x7BE9, [10979] = 0x7BE6, [10980] = 0x7CD5, [10981] = 0x7CD6,
++  [10982] = 0x7E0A, [11017] = 0x7E11, [11018] = 0x7E08, [11019] = 0x7E1B,
++  [11020] = 0x7E23, [11021] = 0x7E1E, [11022] = 0x7E1D, [11023] = 0x7E09,
++  [11024] = 0x7E10, [11025] = 0x7F79, [11026] = 0x7FB2, [11027] = 0x7FF0,
++  [11028] = 0x7FF1, [11029] = 0x7FEE, [11030] = 0x8028, [11031] = 0x81B3,
++  [11032] = 0x81A9, [11033] = 0x81A8, [11034] = 0x81FB, [11035] = 0x8208,
++  [11036] = 0x8258, [11037] = 0x8259, [11038] = 0x854A, [11039] = 0x8559,
++  [11040] = 0x8548, [11041] = 0x8568, [11042] = 0x8569, [11043] = 0x8543,
++  [11044] = 0x8549, [11045] = 0x856D, [11046] = 0x856A, [11047] = 0x855E,
++  [11048] = 0x8783, [11049] = 0x879F, [11050] = 0x879E, [11051] = 0x87A2,
++  [11052] = 0x878D, [11053] = 0x8861, [11054] = 0x892A, [11055] = 0x8932,
++  [11056] = 0x8925, [11057] = 0x892B, [11058] = 0x8921, [11059] = 0x89AA,
++  [11060] = 0x89A6, [11061] = 0x8AE6, [11062] = 0x8AFA, [11063] = 0x8AEB,
++  [11064] = 0x8AF1, [11065] = 0x8B00, [11066] = 0x8ADC, [11067] = 0x8AE7,
++  [11068] = 0x8AEE, [11069] = 0x8AFE, [11070] = 0x8B01, [11071] = 0x8B02,
++  [11072] = 0x8AF7, [11073] = 0x8AED, [11074] = 0x8AF3, [11075] = 0x8AF6,
++  [11076] = 0x8AFC, [11077] = 0x8C6B, [11078] = 0x8C6D, [11079] = 0x8C93,
++  [11080] = 0x8CF4, [11081] = 0x8E44, [11082] = 0x8E31, [11083] = 0x8E34,
++  [11084] = 0x8E42, [11085] = 0x8E39, [11086] = 0x8E35, [11087] = 0x8F3B,
++  [11088] = 0x8F2F, [11089] = 0x8F38, [11090] = 0x8F33, [11091] = 0x8FA8,
++  [11092] = 0x8FA6, [11093] = 0x9075, [11094] = 0x9074, [11095] = 0x9078,
++  [11096] = 0x9072, [11097] = 0x907C, [11098] = 0x907A, [11099] = 0x9134,
++  [11100] = 0x9192, [11101] = 0x9320, [11102] = 0x9336, [11103] = 0x92F8,
++  [11104] = 0x9333, [11105] = 0x932F, [11106] = 0x9322, [11107] = 0x92FC,
++  [11108] = 0x932B, [11109] = 0x9304, [11110] = 0x931A, [11115] = 0x9310,
++  [11116] = 0x9326, [11117] = 0x9321, [11118] = 0x9315, [11119] = 0x932E,
++  [11120] = 0x9319, [11121] = 0x95BB, [11122] = 0x96A7, [11123] = 0x96A8,
++  [11124] = 0x96AA, [11125] = 0x96D5, [11126] = 0x970E, [11127] = 0x9711,
++  [11128] = 0x9716, [11129] = 0x970D, [11130] = 0x9713, [11131] = 0x970F,
++  [11132] = 0x975B, [11133] = 0x975C, [11134] = 0x9766, [11135] = 0x9798,
++  [11136] = 0x9830, [11137] = 0x9838, [11138] = 0x983B, [11139] = 0x9837,
++  [11140] = 0x982D, [11141] = 0x9839, [11142] = 0x9824, [11143] = 0x9910,
++  [11144] = 0x9928, [11145] = 0x991E, [11146] = 0x991B, [11147] = 0x9921,
++  [11148] = 0x991A, [11149] = 0x99ED, [11150] = 0x99E2, [11151] = 0x99F1,
++  [11152] = 0x9AB8, [11153] = 0x9ABC, [11154] = 0x9AFB, [11155] = 0x9AED,
++  [11156] = 0x9B28, [11157] = 0x9B91, [11158] = 0x9D15, [11159] = 0x9D23,
++  [11160] = 0x9D26, [11161] = 0x9D28, [11162] = 0x9D12, [11163] = 0x9D1B,
++  [11164] = 0x9ED8, [11165] = 0x9ED4, [11166] = 0x9F8D, [11167] = 0x9F9C,
++  [11168] = 0x512A, [11169] = 0x511F, [11170] = 0x5121, [11171] = 0x5132,
++  [11172] = 0x52F5, [11173] = 0x568E, [11174] = 0x5680, [11175] = 0x5690,
++  [11176] = 0x5685, [11177] = 0x5687, [11212] = 0x568F, [11213] = 0x58D5,
++  [11214] = 0x58D3, [11215] = 0x58D1, [11216] = 0x58CE, [11217] = 0x5B30,
++  [11218] = 0x5B2A, [11219] = 0x5B24, [11220] = 0x5B7A, [11221] = 0x5C37,
++  [11222] = 0x5C68, [11223] = 0x5DBC, [11224] = 0x5DBA, [11225] = 0x5DBD,
++  [11226] = 0x5DB8, [11227] = 0x5E6B, [11228] = 0x5F4C, [11229] = 0x5FBD,
++  [11230] = 0x61C9, [11231] = 0x61C2, [11232] = 0x61C7, [11233] = 0x61E6,
++  [11234] = 0x61CB, [11235] = 0x6232, [11236] = 0x6234, [11237] = 0x64CE,
++  [11238] = 0x64CA, [11239] = 0x64D8, [11240] = 0x64E0, [11241] = 0x64F0,
++  [11242] = 0x64E6, [11243] = 0x64EC, [11244] = 0x64F1, [11245] = 0x64E2,
++  [11246] = 0x64ED, [11247] = 0x6582, [11248] = 0x6583, [11249] = 0x66D9,
++  [11250] = 0x66D6, [11251] = 0x6A80, [11252] = 0x6A94, [11253] = 0x6A84,
++  [11254] = 0x6AA2, [11255] = 0x6A9C, [11256] = 0x6ADB, [11257] = 0x6AA3,
++  [11258] = 0x6A7E, [11259] = 0x6A97, [11260] = 0x6A90, [11261] = 0x6AA0,
++  [11262] = 0x6B5C, [11263] = 0x6BAE, [11264] = 0x6BDA, [11265] = 0x6C08,
++  [11266] = 0x6FD8, [11267] = 0x6FF1, [11268] = 0x6FDF, [11269] = 0x6FE0,
++  [11270] = 0x6FDB, [11271] = 0x6FE4, [11272] = 0x6FEB, [11273] = 0x6FEF,
++  [11274] = 0x6F80, [11275] = 0x6FEC, [11276] = 0x6FE1, [11277] = 0x6FE9,
++  [11278] = 0x6FD5, [11279] = 0x6FEE, [11280] = 0x6FF0, [11281] = 0x71E7,
++  [11282] = 0x71DF, [11283] = 0x71EE, [11284] = 0x71E6, [11285] = 0x71E5,
++  [11286] = 0x71ED, [11287] = 0x71EC, [11288] = 0x71F4, [11289] = 0x71E0,
++  [11290] = 0x7235, [11291] = 0x7246, [11292] = 0x7370, [11293] = 0x7372,
++  [11294] = 0x74A9, [11295] = 0x74B0, [11296] = 0x74A6, [11297] = 0x74A8,
++  [11298] = 0x7646, [11299] = 0x7642, [11300] = 0x764C, [11301] = 0x76EA,
++  [11302] = 0x77B3, [11303] = 0x77AA, [11304] = 0x77B0, [11305] = 0x77AC,
++  [11310] = 0x77A7, [11311] = 0x77AD, [11312] = 0x77EF, [11313] = 0x78F7,
++  [11314] = 0x78FA, [11315] = 0x78F4, [11316] = 0x78EF, [11317] = 0x7901,
++  [11318] = 0x79A7, [11319] = 0x79AA, [11320] = 0x7A57, [11321] = 0x7ABF,
++  [11322] = 0x7C07, [11323] = 0x7C0D, [11324] = 0x7BFE, [11325] = 0x7BF7,
++  [11326] = 0x7C0C, [11327] = 0x7BE0, [11328] = 0x7CE0, [11329] = 0x7CDC,
++  [11330] = 0x7CDE, [11331] = 0x7CE2, [11332] = 0x7CDF, [11333] = 0x7CD9,
++  [11334] = 0x7CDD, [11335] = 0x7E2E, [11336] = 0x7E3E, [11337] = 0x7E46,
++  [11338] = 0x7E37, [11339] = 0x7E32, [11340] = 0x7E43, [11341] = 0x7E2B,
++  [11342] = 0x7E3D, [11343] = 0x7E31, [11344] = 0x7E45, [11345] = 0x7E41,
++  [11346] = 0x7E34, [11347] = 0x7E39, [11348] = 0x7E48, [11349] = 0x7E35,
++  [11350] = 0x7E3F, [11351] = 0x7E2F, [11352] = 0x7F44, [11353] = 0x7FF3,
++  [11354] = 0x7FFC, [11355] = 0x8071, [11356] = 0x8072, [11357] = 0x8070,
++  [11358] = 0x806F, [11359] = 0x8073, [11360] = 0x81C6, [11361] = 0x81C3,
++  [11362] = 0x81BA, [11363] = 0x81C2, [11364] = 0x81C0, [11365] = 0x81BF,
++  [11366] = 0x81BD, [11367] = 0x81C9, [11368] = 0x81BE, [11369] = 0x81E8,
++  [11370] = 0x8209, [11371] = 0x8271, [11372] = 0x85AA, [11407] = 0x8584,
++  [11408] = 0x857E, [11409] = 0x859C, [11410] = 0x8591, [11411] = 0x8594,
++  [11412] = 0x85AF, [11413] = 0x859B, [11414] = 0x8587, [11415] = 0x85A8,
++  [11416] = 0x858A, [11417] = 0x8667, [11418] = 0x87C0, [11419] = 0x87D1,
++  [11420] = 0x87B3, [11421] = 0x87D2, [11422] = 0x87C6, [11423] = 0x87AB,
++  [11424] = 0x87BB, [11425] = 0x87BA, [11426] = 0x87C8, [11427] = 0x87CB,
++  [11428] = 0x893B, [11429] = 0x8936, [11430] = 0x8944, [11431] = 0x8938,
++  [11432] = 0x893D, [11433] = 0x89AC, [11434] = 0x8B0E, [11435] = 0x8B17,
++  [11436] = 0x8B19, [11437] = 0x8B1B, [11438] = 0x8B0A, [11439] = 0x8B20,
++  [11440] = 0x8B1D, [11441] = 0x8B04, [11442] = 0x8B10, [11443] = 0x8C41,
++  [11444] = 0x8C3F, [11445] = 0x8C73, [11446] = 0x8CFA, [11447] = 0x8CFD,
++  [11448] = 0x8CFC, [11449] = 0x8CF8, [11450] = 0x8CFB, [11451] = 0x8DA8,
++  [11452] = 0x8E49, [11453] = 0x8E4B, [11454] = 0x8E48, [11455] = 0x8E4A,
++  [11456] = 0x8F44, [11457] = 0x8F3E, [11458] = 0x8F42, [11459] = 0x8F45,
++  [11460] = 0x8F3F, [11461] = 0x907F, [11462] = 0x907D, [11463] = 0x9084,
++  [11464] = 0x9081, [11465] = 0x9082, [11466] = 0x9080, [11467] = 0x9139,
++  [11468] = 0x91A3, [11469] = 0x919E, [11470] = 0x919C, [11471] = 0x934D,
++  [11472] = 0x9382, [11473] = 0x9328, [11474] = 0x9375, [11475] = 0x934A,
++  [11476] = 0x9365, [11477] = 0x934B, [11478] = 0x9318, [11479] = 0x937E,
++  [11480] = 0x936C, [11481] = 0x935B, [11482] = 0x9370, [11483] = 0x935A,
++  [11484] = 0x9354, [11485] = 0x95CA, [11486] = 0x95CB, [11487] = 0x95CC,
++  [11488] = 0x95C8, [11489] = 0x95C6, [11490] = 0x96B1, [11491] = 0x96B8,
++  [11492] = 0x96D6, [11493] = 0x971C, [11494] = 0x971E, [11495] = 0x97A0,
++  [11496] = 0x97D3, [11497] = 0x9846, [11498] = 0x98B6, [11499] = 0x9935,
++  [11500] = 0x9A01, [11505] = 0x99FF, [11506] = 0x9BAE, [11507] = 0x9BAB,
++  [11508] = 0x9BAA, [11509] = 0x9BAD, [11510] = 0x9D3B, [11511] = 0x9D3F,
++  [11512] = 0x9E8B, [11513] = 0x9ECF, [11514] = 0x9EDE, [11515] = 0x9EDC,
++  [11516] = 0x9EDD, [11517] = 0x9EDB, [11518] = 0x9F3E, [11519] = 0x9F4B,
++  [11520] = 0x53E2, [11521] = 0x5695, [11522] = 0x56AE, [11523] = 0x58D9,
++  [11524] = 0x58D8, [11525] = 0x5B38, [11526] = 0x5F5D, [11527] = 0x61E3,
++  [11528] = 0x6233, [11529] = 0x64F4, [11530] = 0x64F2, [11531] = 0x64FE,
++  [11532] = 0x6506, [11533] = 0x64FA, [11534] = 0x64FB, [11535] = 0x64F7,
++  [11536] = 0x65B7, [11537] = 0x66DC, [11538] = 0x6726, [11539] = 0x6AB3,
++  [11540] = 0x6AAC, [11541] = 0x6AC3, [11542] = 0x6ABB, [11543] = 0x6AB8,
++  [11544] = 0x6AC2, [11545] = 0x6AAE, [11546] = 0x6AAF, [11547] = 0x6B5F,
++  [11548] = 0x6B78, [11549] = 0x6BAF, [11550] = 0x7009, [11551] = 0x700B,
++  [11552] = 0x6FFE, [11553] = 0x7006, [11554] = 0x6FFA, [11555] = 0x7011,
++  [11556] = 0x700F, [11557] = 0x71FB, [11558] = 0x71FC, [11559] = 0x71FE,
++  [11560] = 0x71F8, [11561] = 0x7377, [11562] = 0x7375, [11563] = 0x74A7,
++  [11564] = 0x74BF, [11565] = 0x7515, [11566] = 0x7656, [11567] = 0x7658,
++  [11602] = 0x7652, [11603] = 0x77BD, [11604] = 0x77BF, [11605] = 0x77BB,
++  [11606] = 0x77BC, [11607] = 0x790E, [11608] = 0x79AE, [11609] = 0x7A61,
++  [11610] = 0x7A62, [11611] = 0x7A60, [11612] = 0x7AC4, [11613] = 0x7AC5,
++  [11614] = 0x7C2B, [11615] = 0x7C27, [11616] = 0x7C2A, [11617] = 0x7C1E,
++  [11618] = 0x7C23, [11619] = 0x7C21, [11620] = 0x7CE7, [11621] = 0x7E54,
++  [11622] = 0x7E55, [11623] = 0x7E5E, [11624] = 0x7E5A, [11625] = 0x7E61,
++  [11626] = 0x7E52, [11627] = 0x7E59, [11628] = 0x7F48, [11629] = 0x7FF9,
++  [11630] = 0x7FFB, [11631] = 0x8077, [11632] = 0x8076, [11633] = 0x81CD,
++  [11634] = 0x81CF, [11635] = 0x820A, [11636] = 0x85CF, [11637] = 0x85A9,
++  [11638] = 0x85CD, [11639] = 0x85D0, [11640] = 0x85C9, [11641] = 0x85B0,
++  [11642] = 0x85BA, [11643] = 0x85B9, [11644] = 0x85A6, [11645] = 0x87EF,
++  [11646] = 0x87EC, [11647] = 0x87F2, [11648] = 0x87E0, [11649] = 0x8986,
++  [11650] = 0x89B2, [11651] = 0x89F4, [11652] = 0x8B28, [11653] = 0x8B39,
++  [11654] = 0x8B2C, [11655] = 0x8B2B, [11656] = 0x8C50, [11657] = 0x8D05,
++  [11658] = 0x8E59, [11659] = 0x8E63, [11660] = 0x8E66, [11661] = 0x8E64,
++  [11662] = 0x8E5F, [11663] = 0x8E55, [11664] = 0x8EC0, [11665] = 0x8F49,
++  [11666] = 0x8F4D, [11667] = 0x9087, [11668] = 0x9083, [11669] = 0x9088,
++  [11670] = 0x91AB, [11671] = 0x91AC, [11672] = 0x91D0, [11673] = 0x9394,
++  [11674] = 0x938A, [11675] = 0x9396, [11676] = 0x93A2, [11677] = 0x93B3,
++  [11678] = 0x93AE, [11679] = 0x93AC, [11680] = 0x93B0, [11681] = 0x9398,
++  [11682] = 0x939A, [11683] = 0x9397, [11684] = 0x95D4, [11685] = 0x95D6,
++  [11686] = 0x95D0, [11687] = 0x95D5, [11688] = 0x96E2, [11689] = 0x96DC,
++  [11690] = 0x96D9, [11691] = 0x96DB, [11692] = 0x96DE, [11693] = 0x9724,
++  [11694] = 0x97A3, [11695] = 0x97A6, [11700] = 0x97AD, [11701] = 0x97F9,
++  [11702] = 0x984D, [11703] = 0x984F, [11704] = 0x984C, [11705] = 0x984E,
++  [11706] = 0x9853, [11707] = 0x98BA, [11708] = 0x993E, [11709] = 0x993F,
++  [11710] = 0x993D, [11711] = 0x992E, [11712] = 0x99A5, [11713] = 0x9A0E,
++  [11714] = 0x9AC1, [11715] = 0x9B03, [11716] = 0x9B06, [11717] = 0x9B4F,
++  [11718] = 0x9B4E, [11719] = 0x9B4D, [11720] = 0x9BCA, [11721] = 0x9BC9,
++  [11722] = 0x9BFD, [11723] = 0x9BC8, [11724] = 0x9BC0, [11725] = 0x9D51,
++  [11726] = 0x9D5D, [11727] = 0x9D60, [11728] = 0x9EE0, [11729] = 0x9F15,
++  [11730] = 0x9F2C, [11731] = 0x5133, [11732] = 0x56A5, [11733] = 0x58DE,
++  [11734] = 0x58DF, [11735] = 0x58E2, [11736] = 0x5BF5, [11737] = 0x9F90,
++  [11738] = 0x5EEC, [11739] = 0x61F2, [11740] = 0x61F7, [11741] = 0x61F6,
++  [11742] = 0x61F5, [11743] = 0x6500, [11744] = 0x650F, [11745] = 0x66E0,
++  [11746] = 0x66DD, [11747] = 0x6AE5, [11748] = 0x6ADD, [11749] = 0x6ADA,
++  [11750] = 0x6AD3, [11751] = 0x701B, [11752] = 0x701F, [11753] = 0x7028,
++  [11754] = 0x701A, [11755] = 0x701D, [11756] = 0x7015, [11757] = 0x7018,
++  [11758] = 0x7206, [11759] = 0x720D, [11760] = 0x7258, [11761] = 0x72A2,
++  [11762] = 0x7378, [11797] = 0x737A, [11798] = 0x74BD, [11799] = 0x74CA,
++  [11800] = 0x74E3, [11801] = 0x7587, [11802] = 0x7586, [11803] = 0x765F,
++  [11804] = 0x7661, [11805] = 0x77C7, [11806] = 0x7919, [11807] = 0x79B1,
++  [11808] = 0x7A6B, [11809] = 0x7A69, [11810] = 0x7C3E, [11811] = 0x7C3F,
++  [11812] = 0x7C38, [11813] = 0x7C3D, [11814] = 0x7C37, [11815] = 0x7C40,
++  [11816] = 0x7E6B, [11817] = 0x7E6D, [11818] = 0x7E79, [11819] = 0x7E69,
++  [11820] = 0x7E6A, [11821] = 0x7F85, [11822] = 0x7E73, [11823] = 0x7FB6,
++  [11824] = 0x7FB9, [11825] = 0x7FB8, [11826] = 0x81D8, [11827] = 0x85E9,
++  [11828] = 0x85DD, [11829] = 0x85EA, [11830] = 0x85D5, [11831] = 0x85E4,
++  [11832] = 0x85E5, [11833] = 0x85F7, [11834] = 0x87FB, [11835] = 0x8805,
++  [11836] = 0x880D, [11837] = 0x87F9, [11838] = 0x87FE, [11839] = 0x8960,
++  [11840] = 0x895F, [11841] = 0x8956, [11842] = 0x895E, [11843] = 0x8B41,
++  [11844] = 0x8B5C, [11845] = 0x8B58, [11846] = 0x8B49, [11847] = 0x8B5A,
++  [11848] = 0x8B4E, [11849] = 0x8B4F, [11850] = 0x8B46, [11851] = 0x8B59,
++  [11852] = 0x8D08, [11853] = 0x8D0A, [11854] = 0x8E7C, [11855] = 0x8E72,
++  [11856] = 0x8E87, [11857] = 0x8E76, [11858] = 0x8E6C, [11859] = 0x8E7A,
++  [11860] = 0x8E74, [11861] = 0x8F54, [11862] = 0x8F4E, [11863] = 0x8FAD,
++  [11864] = 0x908A, [11865] = 0x908B, [11866] = 0x91B1, [11867] = 0x91AE,
++  [11868] = 0x93E1, [11869] = 0x93D1, [11870] = 0x93DF, [11871] = 0x93C3,
++  [11872] = 0x93C8, [11873] = 0x93DC, [11874] = 0x93DD, [11875] = 0x93D6,
++  [11876] = 0x93E2, [11877] = 0x93CD, [11878] = 0x93D8, [11879] = 0x93E4,
++  [11880] = 0x93D7, [11881] = 0x93E8, [11882] = 0x95DC, [11883] = 0x96B4,
++  [11884] = 0x96E3, [11885] = 0x972A, [11886] = 0x9727, [11887] = 0x9761,
++  [11888] = 0x97DC, [11889] = 0x97FB, [11890] = 0x985E, [11895] = 0x9858,
++  [11896] = 0x985B, [11897] = 0x98BC, [11898] = 0x9945, [11899] = 0x9949,
++  [11900] = 0x9A16, [11901] = 0x9A19, [11902] = 0x9B0D, [11903] = 0x9BE8,
++  [11904] = 0x9BE7, [11905] = 0x9BD6, [11906] = 0x9BDB, [11907] = 0x9D89,
++  [11908] = 0x9D61, [11909] = 0x9D72, [11910] = 0x9D6A, [11911] = 0x9D6C,
++  [11912] = 0x9E92, [11913] = 0x9E97, [11914] = 0x9E93, [11915] = 0x9EB4,
++  [11916] = 0x52F8, [11917] = 0x56A8, [11918] = 0x56B7, [11919] = 0x56B6,
++  [11920] = 0x56B4, [11921] = 0x56BC, [11922] = 0x58E4, [11923] = 0x5B40,
++  [11924] = 0x5B43, [11925] = 0x5B7D, [11926] = 0x5BF6, [11927] = 0x5DC9,
++  [11928] = 0x61F8, [11929] = 0x61FA, [11930] = 0x6518, [11931] = 0x6514,
++  [11932] = 0x6519, [11933] = 0x66E6, [11934] = 0x6727, [11935] = 0x6AEC,
++  [11936] = 0x703E, [11937] = 0x7030, [11938] = 0x7032, [11939] = 0x7210,
++  [11940] = 0x737B, [11941] = 0x74CF, [11942] = 0x7662, [11943] = 0x7665,
++  [11944] = 0x7926, [11945] = 0x792A, [11946] = 0x792C, [11947] = 0x792B,
++  [11948] = 0x7AC7, [11949] = 0x7AF6, [11950] = 0x7C4C, [11951] = 0x7C43,
++  [11952] = 0x7C4D, [11953] = 0x7CEF, [11954] = 0x7CF0, [11955] = 0x8FAE,
++  [11956] = 0x7E7D, [11957] = 0x7E7C, [11992] = 0x7E82, [11993] = 0x7F4C,
++  [11994] = 0x8000, [11995] = 0x81DA, [11996] = 0x8266, [11997] = 0x85FB,
++  [11998] = 0x85F9, [11999] = 0x8611, [12000] = 0x85FA, [12001] = 0x8606,
++  [12002] = 0x860B, [12003] = 0x8607, [12004] = 0x860A, [12005] = 0x8814,
++  [12006] = 0x8815, [12007] = 0x8964, [12008] = 0x89BA, [12009] = 0x89F8,
++  [12010] = 0x8B70, [12011] = 0x8B6C, [12012] = 0x8B66, [12013] = 0x8B6F,
++  [12014] = 0x8B5F, [12015] = 0x8B6B, [12016] = 0x8D0F, [12017] = 0x8D0D,
++  [12018] = 0x8E89, [12019] = 0x8E81, [12020] = 0x8E85, [12021] = 0x8E82,
++  [12022] = 0x91B4, [12023] = 0x91CB, [12024] = 0x9418, [12025] = 0x9403,
++  [12026] = 0x93FD, [12027] = 0x95E1, [12028] = 0x9730, [12029] = 0x98C4,
++  [12030] = 0x9952, [12031] = 0x9951, [12032] = 0x99A8, [12033] = 0x9A2B,
++  [12034] = 0x9A30, [12035] = 0x9A37, [12036] = 0x9A35, [12037] = 0x9C13,
++  [12038] = 0x9C0D, [12039] = 0x9E79, [12040] = 0x9EB5, [12041] = 0x9EE8,
++  [12042] = 0x9F2F, [12043] = 0x9F5F, [12044] = 0x9F63, [12045] = 0x9F61,
++  [12046] = 0x5137, [12047] = 0x5138, [12048] = 0x56C1, [12049] = 0x56C0,
++  [12050] = 0x56C2, [12051] = 0x5914, [12052] = 0x5C6C, [12053] = 0x5DCD,
++  [12054] = 0x61FC, [12055] = 0x61FE, [12056] = 0x651D, [12057] = 0x651C,
++  [12058] = 0x6595, [12059] = 0x66E9, [12060] = 0x6AFB, [12061] = 0x6B04,
++  [12062] = 0x6AFA, [12063] = 0x6BB2, [12064] = 0x704C, [12065] = 0x721B,
++  [12066] = 0x72A7, [12067] = 0x74D6, [12068] = 0x74D4, [12069] = 0x7669,
++  [12070] = 0x77D3, [12071] = 0x7C50, [12072] = 0x7E8F, [12073] = 0x7E8C,
++  [12074] = 0x7FBC, [12075] = 0x8617, [12076] = 0x862D, [12077] = 0x861A,
++  [12078] = 0x8823, [12079] = 0x8822, [12080] = 0x8821, [12081] = 0x881F,
++  [12082] = 0x896A, [12083] = 0x896C, [12084] = 0x89BD, [12085] = 0x8B74,
++  [12090] = 0x8B77, [12091] = 0x8B7D, [12092] = 0x8D13, [12093] = 0x8E8A,
++  [12094] = 0x8E8D, [12095] = 0x8E8B, [12096] = 0x8F5F, [12097] = 0x8FAF,
++  [12098] = 0x91BA, [12099] = 0x942E, [12100] = 0x9433, [12101] = 0x9435,
++  [12102] = 0x943A, [12103] = 0x9438, [12104] = 0x9432, [12105] = 0x942B,
++  [12106] = 0x95E2, [12107] = 0x9738, [12108] = 0x9739, [12109] = 0x9732,
++  [12110] = 0x97FF, [12111] = 0x9867, [12112] = 0x9865, [12113] = 0x9957,
++  [12114] = 0x9A45, [12115] = 0x9A43, [12116] = 0x9A40, [12117] = 0x9A3E,
++  [12118] = 0x9ACF, [12119] = 0x9B54, [12120] = 0x9B51, [12121] = 0x9C2D,
++  [12122] = 0x9C25, [12123] = 0x9DAF, [12124] = 0x9DB4, [12125] = 0x9DC2,
++  [12126] = 0x9DB8, [12127] = 0x9E9D, [12128] = 0x9EEF, [12129] = 0x9F19,
++  [12130] = 0x9F5C, [12131] = 0x9F66, [12132] = 0x9F67, [12133] = 0x513C,
++  [12134] = 0x513B, [12135] = 0x56C8, [12136] = 0x56CA, [12137] = 0x56C9,
++  [12138] = 0x5B7F, [12139] = 0x5DD4, [12140] = 0x5DD2, [12141] = 0x5F4E,
++  [12142] = 0x61FF, [12143] = 0x6524, [12144] = 0x6B0A, [12145] = 0x6B61,
++  [12146] = 0x7051, [12147] = 0x7058, [12148] = 0x7380, [12149] = 0x74E4,
++  [12150] = 0x758A, [12151] = 0x766E, [12152] = 0x766C, [12187] = 0x79B3,
++  [12188] = 0x7C60, [12189] = 0x7C5F, [12190] = 0x807E, [12191] = 0x807D,
++  [12192] = 0x81DF, [12193] = 0x8972, [12194] = 0x896F, [12195] = 0x89FC,
++  [12196] = 0x8B80, [12197] = 0x8D16, [12198] = 0x8D17, [12199] = 0x8E91,
++  [12200] = 0x8E93, [12201] = 0x8F61, [12202] = 0x9148, [12203] = 0x9444,
++  [12204] = 0x9451, [12205] = 0x9452, [12206] = 0x973D, [12207] = 0x973E,
++  [12208] = 0x97C3, [12209] = 0x97C1, [12210] = 0x986B, [12211] = 0x9955,
++  [12212] = 0x9A55, [12213] = 0x9A4D, [12214] = 0x9AD2, [12215] = 0x9B1A,
++  [12216] = 0x9C49, [12217] = 0x9C31, [12218] = 0x9C3E, [12219] = 0x9C3B,
++  [12220] = 0x9DD3, [12221] = 0x9DD7, [12222] = 0x9F34, [12223] = 0x9F6C,
++  [12224] = 0x9F6A, [12225] = 0x9F94, [12226] = 0x56CC, [12227] = 0x5DD6,
++  [12228] = 0x6200, [12229] = 0x6523, [12230] = 0x652B, [12231] = 0x652A,
++  [12232] = 0x66EC, [12233] = 0x6B10, [12234] = 0x74DA, [12235] = 0x7ACA,
++  [12236] = 0x7C64, [12237] = 0x7C63, [12238] = 0x7C65, [12239] = 0x7E93,
++  [12240] = 0x7E96, [12241] = 0x7E94, [12242] = 0x81E2, [12243] = 0x8638,
++  [12244] = 0x863F, [12245] = 0x8831, [12246] = 0x8B8A, [12247] = 0x9090,
++  [12248] = 0x908F, [12249] = 0x9463, [12250] = 0x9460, [12251] = 0x9464,
++  [12252] = 0x9768, [12253] = 0x986F, [12254] = 0x995C, [12255] = 0x9A5A,
++  [12256] = 0x9A5B, [12257] = 0x9A57, [12258] = 0x9AD3, [12259] = 0x9AD4,
++  [12260] = 0x9AD1, [12261] = 0x9C54, [12262] = 0x9C57, [12263] = 0x9C56,
++  [12264] = 0x9DE5, [12265] = 0x9E9F, [12266] = 0x9EF4, [12267] = 0x56D1,
++  [12268] = 0x58E9, [12269] = 0x652C, [12270] = 0x705E, [12271] = 0x7671,
++  [12272] = 0x7672, [12273] = 0x77D7, [12274] = 0x7F50, [12275] = 0x7F88,
++  [12276] = 0x8836, [12277] = 0x8839, [12278] = 0x8862, [12279] = 0x8B93,
++  [12280] = 0x8B92, [12285] = 0x8B96, [12286] = 0x8277, [12287] = 0x8D1B,
++  [12288] = 0x91C0, [12289] = 0x946A, [12290] = 0x9742, [12291] = 0x9748,
++  [12292] = 0x9744, [12293] = 0x97C6, [12294] = 0x9870, [12295] = 0x9A5F,
++  [12296] = 0x9B22, [12297] = 0x9B58, [12298] = 0x9C5F, [12299] = 0x9DF9,
++  [12300] = 0x9DFA, [12301] = 0x9E7C, [12302] = 0x9E7D, [12303] = 0x9F07,
++  [12304] = 0x9F77, [12305] = 0x9F72, [12306] = 0x5EF3, [12307] = 0x6B16,
++  [12308] = 0x7063, [12309] = 0x7C6C, [12310] = 0x7C6E, [12311] = 0x883B,
++  [12312] = 0x89C0, [12313] = 0x8EA1, [12314] = 0x91C1, [12315] = 0x9472,
++  [12316] = 0x9470, [12317] = 0x9871, [12318] = 0x995E, [12319] = 0x9AD6,
++  [12320] = 0x9B23, [12321] = 0x9ECC, [12322] = 0x7064, [12323] = 0x77DA,
++  [12324] = 0x8B9A, [12325] = 0x9477, [12326] = 0x97C9, [12327] = 0x9A62,
++  [12328] = 0x9A65, [12329] = 0x7E9C, [12330] = 0x8B9C, [12331] = 0x8EAA,
++  [12332] = 0x91C5, [12333] = 0x947D, [12334] = 0x947E, [12335] = 0x947C,
++  [12336] = 0x9C77, [12337] = 0x9C78, [12338] = 0x9EF7, [12339] = 0x8C54,
++  [12340] = 0x947F, [12341] = 0x9E1A, [12342] = 0x7228, [12343] = 0x9A6A,
++  [12344] = 0x9B31, [12345] = 0x9E1B, [12346] = 0x9E1E, [12347] = 0x7C72,
++  [12382] = 0x2460, [12383] = 0x2461, [12384] = 0x2462, [12385] = 0x2463,
++  [12386] = 0x2464, [12387] = 0x2465, [12388] = 0x2466, [12389] = 0x2467,
++  [12390] = 0x2468, [12391] = 0x2469, [12392] = 0x2474, [12393] = 0x2475,
++  [12394] = 0x2476, [12395] = 0x2477, [12396] = 0x2478, [12397] = 0x2479,
++  [12398] = 0x247A, [12399] = 0x247B, [12400] = 0x247C, [12401] = 0x247D,
++  [12402] = 0x2170, [12403] = 0x2171, [12404] = 0x2172, [12405] = 0x2173,
++  [12406] = 0x2174, [12407] = 0x2175, [12408] = 0x2176, [12409] = 0x2177,
++  [12410] = 0x2178, [12411] = 0x2179, [12412] = 0x4E36, [12413] = 0x4E3F,
++  [12414] = 0x4E85, [12415] = 0x4EA0, [12416] = 0x5182, [12417] = 0x5196,
++  [12418] = 0x51AB, [12419] = 0x52F9, [12420] = 0x5338, [12421] = 0x5369,
++  [12422] = 0x53B6, [12423] = 0x590A, [12424] = 0x5B80, [12425] = 0x5DDB,
++  [12426] = 0x2F33, [12427] = 0x5E7F, [12429] = 0x5F50, [12430] = 0x5F61,
++  [12431] = 0x6534, [12433] = 0x7592, [12435] = 0x8FB5, [12437] = 0x00A8,
++  [12438] = 0x02C6, [12439] = 0x30FD, [12440] = 0x30FE, [12441] = 0x309D,
++  [12442] = 0x309E, [12445] = 0x3005, [12446] = 0x3006, [12447] = 0x3007,
++  [12448] = 0x30FC, [12449] = 0xFF3B, [12450] = 0xFF3D, [12451] = 0x273D,
++  [12452] = 0x3041, [12453] = 0x3042, [12454] = 0x3043, [12455] = 0x3044,
++  [12456] = 0x3045, [12457] = 0x3046, [12458] = 0x3047, [12459] = 0x3048,
++  [12460] = 0x3049, [12461] = 0x304A, [12462] = 0x304B, [12463] = 0x304C,
++  [12464] = 0x304D, [12465] = 0x304E, [12466] = 0x304F, [12467] = 0x3050,
++  [12468] = 0x3051, [12469] = 0x3052, [12470] = 0x3053, [12471] = 0x3054,
++  [12472] = 0x3055, [12473] = 0x3056, [12474] = 0x3057, [12475] = 0x3058,
++  [12480] = 0x3059, [12481] = 0x305A, [12482] = 0x305B, [12483] = 0x305C,
++  [12484] = 0x305D, [12485] = 0x305E, [12486] = 0x305F, [12487] = 0x3060,
++  [12488] = 0x3061, [12489] = 0x3062, [12490] = 0x3063, [12491] = 0x3064,
++  [12492] = 0x3065, [12493] = 0x3066, [12494] = 0x3067, [12495] = 0x3068,
++  [12496] = 0x3069, [12497] = 0x306A, [12498] = 0x306B, [12499] = 0x306C,
++  [12500] = 0x306D, [12501] = 0x306E, [12502] = 0x306F, [12503] = 0x3070,
++  [12504] = 0x3071, [12505] = 0x3072, [12506] = 0x3073, [12507] = 0x3074,
++  [12508] = 0x3075, [12509] = 0x3076, [12510] = 0x3077, [12511] = 0x3078,
++  [12512] = 0x3079, [12513] = 0x307A, [12514] = 0x307B, [12515] = 0x307C,
++  [12516] = 0x307D, [12517] = 0x307E, [12518] = 0x307F, [12519] = 0x3080,
++  [12520] = 0x3081, [12521] = 0x3082, [12522] = 0x3083, [12523] = 0x3084,
++  [12524] = 0x3085, [12525] = 0x3086, [12526] = 0x3087, [12527] = 0x3088,
++  [12528] = 0x3089, [12529] = 0x308A, [12530] = 0x308B, [12531] = 0x308C,
++  [12532] = 0x308D, [12533] = 0x308E, [12534] = 0x308F, [12535] = 0x3090,
++  [12536] = 0x3091, [12537] = 0x3092, [12538] = 0x3093, [12539] = 0x30A1,
++  [12540] = 0x30A2, [12541] = 0x30A3, [12542] = 0x30A4, [12577] = 0x30A5,
++  [12578] = 0x30A6, [12579] = 0x30A7, [12580] = 0x30A8, [12581] = 0x30A9,
++  [12582] = 0x30AA, [12583] = 0x30AB, [12584] = 0x30AC, [12585] = 0x30AD,
++  [12586] = 0x30AE, [12587] = 0x30AF, [12588] = 0x30B0, [12589] = 0x30B1,
++  [12590] = 0x30B2, [12591] = 0x30B3, [12592] = 0x30B4, [12593] = 0x30B5,
++  [12594] = 0x30B6, [12595] = 0x30B7, [12596] = 0x30B8, [12597] = 0x30B9,
++  [12598] = 0x30BA, [12599] = 0x30BB, [12600] = 0x30BC, [12601] = 0x30BD,
++  [12602] = 0x30BE, [12603] = 0x30BF, [12604] = 0x30C0, [12605] = 0x30C1,
++  [12606] = 0x30C2, [12607] = 0x30C3, [12608] = 0x30C4, [12609] = 0x30C5,
++  [12610] = 0x30C6, [12611] = 0x30C7, [12612] = 0x30C8, [12613] = 0x30C9,
++  [12614] = 0x30CA, [12615] = 0x30CB, [12616] = 0x30CC, [12617] = 0x30CD,
++  [12618] = 0x30CE, [12619] = 0x30CF, [12620] = 0x30D0, [12621] = 0x30D1,
++  [12622] = 0x30D2, [12623] = 0x30D3, [12624] = 0x30D4, [12625] = 0x30D5,
++  [12626] = 0x30D6, [12627] = 0x30D7, [12628] = 0x30D8, [12629] = 0x30D9,
++  [12630] = 0x30DA, [12631] = 0x30DB, [12632] = 0x30DC, [12633] = 0x30DD,
++  [12634] = 0x30DE, [12635] = 0x30DF, [12636] = 0x30E0, [12637] = 0x30E1,
++  [12638] = 0x30E2, [12639] = 0x30E3, [12640] = 0x30E4, [12641] = 0x30E5,
++  [12642] = 0x30E6, [12643] = 0x30E7, [12644] = 0x30E8, [12645] = 0x30E9,
++  [12646] = 0x30EA, [12647] = 0x30EB, [12648] = 0x30EC, [12649] = 0x30ED,
++  [12650] = 0x30EE, [12651] = 0x30EF, [12652] = 0x30F0, [12653] = 0x30F1,
++  [12654] = 0x30F2, [12655] = 0x30F3, [12656] = 0x30F4, [12657] = 0x30F5,
++  [12658] = 0x30F6, [12659] = 0x0410, [12660] = 0x0411, [12661] = 0x0412,
++  [12662] = 0x0413, [12663] = 0x0414, [12664] = 0x0415, [12665] = 0x0401,
++  [12666] = 0x0416, [12667] = 0x0417, [12668] = 0x0418, [12669] = 0x0419,
++  [12670] = 0x041A, [12675] = 0x041B, [12676] = 0x041C, [12677] = 0x041D,
++  [12678] = 0x041E, [12679] = 0x041F, [12680] = 0x0420, [12681] = 0x0421,
++  [12682] = 0x0422, [12683] = 0x0423, [12684] = 0x0424, [12685] = 0x0425,
++  [12686] = 0x0426, [12687] = 0x0427, [12688] = 0x0428, [12689] = 0x0429,
++  [12690] = 0x042A, [12691] = 0x042B, [12692] = 0x042C, [12693] = 0x042D,
++  [12694] = 0x042E, [12695] = 0x042F, [12696] = 0x0430, [12697] = 0x0431,
++  [12698] = 0x0432, [12699] = 0x0433, [12700] = 0x0434, [12701] = 0x0435,
++  [12702] = 0x0451, [12703] = 0x0436, [12704] = 0x0437, [12705] = 0x0438,
++  [12706] = 0x0439, [12707] = 0x043A, [12708] = 0x043B, [12709] = 0x043C,
++  [12710] = 0x043D, [12711] = 0x043E, [12712] = 0x043F, [12713] = 0x0440,
++  [12714] = 0x0441, [12715] = 0x0442, [12716] = 0x0443, [12717] = 0x0444,
++  [12718] = 0x0445, [12719] = 0x0446, [12720] = 0x0447, [12721] = 0x0448,
++  [12722] = 0x0449, [12723] = 0x044A, [12724] = 0x044B, [12725] = 0x044C,
++  [12726] = 0x044D, [12727] = 0x044E, [12728] = 0x044F, [12729] = 0x21E7,
++  [12730] = 0x21B8, [12731] = 0x21B9, [12732] = 0x31CF, [12733] = 0x200CC,
++  [12734] = 0x4E5A, [12735] = 0x2008A, [12736] = 0x5202, [12737] = 0x4491,
++  [12772] = 0x9FB0, [12773] = 0x5188, [12774] = 0x9FB1, [12775] = 0x27607,
++  [12816] = 0xFFE2, [12817] = 0xFFE4, [12818] = 0xFF07, [12819] = 0xFF02,
++  [12820] = 0x3231, [12821] = 0x2116, [12822] = 0x2121, [12823] = 0x309B,
++  [12824] = 0x309C, [12825] = 0x2E80, [12826] = 0x2E84, [12827] = 0x2E86,
++  [12828] = 0x2E87, [12829] = 0x2E88, [12830] = 0x2E8A, [12831] = 0x2E8C,
++  [12832] = 0x2E8D, [12833] = 0x2E95, [12834] = 0x2E9C, [12835] = 0x2E9D,
++  [12836] = 0x2EA5, [12837] = 0x2EA7, [12838] = 0x2EAA, [12839] = 0x2EAC,
++  [12840] = 0x2EAE, [12841] = 0x2EB6, [12842] = 0x2EBC, [12843] = 0x2EBE,
++  [12844] = 0x2EC6, [12845] = 0x2ECA, [12846] = 0x2ECC, [12847] = 0x2ECD,
++  [12848] = 0x2ECF, [12849] = 0x2ED6, [12850] = 0x2ED7, [12851] = 0x2EDE,
++  [12852] = 0x2EE3, [12856] = 0x0283, [12857] = 0x0250, [12858] = 0x025B,
++  [12859] = 0x0254, [12860] = 0x0275, [12861] = 0x0153, [12862] = 0x00F8,
++  [12863] = 0x014B, [12864] = 0x028A, [12865] = 0x026A, [12870] = 0x4E42,
++  [12871] = 0x4E5C, [12872] = 0x51F5, [12873] = 0x531A, [12874] = 0x5382,
++  [12875] = 0x4E07, [12876] = 0x4E0C, [12877] = 0x4E47, [12878] = 0x4E8D,
++  [12879] = 0x56D7, [12880] = 0xFA0C, [12881] = 0x5C6E, [12882] = 0x5F73,
++  [12883] = 0x4E0F, [12884] = 0x5187, [12885] = 0x4E0E, [12886] = 0x4E2E,
++  [12887] = 0x4E93, [12888] = 0x4EC2, [12889] = 0x4EC9, [12890] = 0x4EC8,
++  [12891] = 0x5198, [12892] = 0x52FC, [12893] = 0x536C, [12894] = 0x53B9,
++  [12895] = 0x5720, [12896] = 0x5903, [12897] = 0x592C, [12898] = 0x5C10,
++  [12899] = 0x5DFF, [12900] = 0x65E1, [12901] = 0x6BB3, [12902] = 0x6BCC,
++  [12903] = 0x6C14, [12904] = 0x723F, [12905] = 0x4E31, [12906] = 0x4E3C,
++  [12907] = 0x4EE8, [12908] = 0x4EDC, [12909] = 0x4EE9, [12910] = 0x4EE1,
++  [12911] = 0x4EDD, [12912] = 0x4EDA, [12913] = 0x520C, [12914] = 0x531C,
++  [12915] = 0x534C, [12916] = 0x5722, [12917] = 0x5723, [12918] = 0x5917,
++  [12919] = 0x592F, [12920] = 0x5B81, [12921] = 0x5B84, [12922] = 0x5C12,
++  [12923] = 0x5C3B, [12924] = 0x5C74, [12925] = 0x5C73, [12926] = 0x5E04,
++  [12927] = 0x5E80, [12928] = 0x5E82, [12929] = 0x5FC9, [12930] = 0x6209,
++  [12931] = 0x6250, [12932] = 0x6C15, [12967] = 0x6C36, [12968] = 0x6C43,
++  [12969] = 0x6C3F, [12970] = 0x6C3B, [12971] = 0x72AE, [12972] = 0x72B0,
++  [12973] = 0x738A, [12974] = 0x79B8, [12975] = 0x808A, [12976] = 0x961E,
++  [12977] = 0x4F0E, [12978] = 0x4F18, [12979] = 0x4F2C, [12980] = 0x4EF5,
++  [12981] = 0x4F14, [12982] = 0x4EF1, [12983] = 0x4F00, [12984] = 0x4EF7,
++  [12985] = 0x4F08, [12986] = 0x4F1D, [12987] = 0x4F02, [12988] = 0x4F05,
++  [12989] = 0x4F22, [12990] = 0x4F13, [12991] = 0x4F04, [12992] = 0x4EF4,
++  [12993] = 0x4F12, [12994] = 0x51B1, [12995] = 0x5213, [12996] = 0x5209,
++  [12997] = 0x5210, [12998] = 0x52A6, [12999] = 0x5322, [13000] = 0x531F,
++  [13001] = 0x534D, [13002] = 0x538A, [13003] = 0x5407, [13004] = 0x56E1,
++  [13005] = 0x56DF, [13006] = 0x572E, [13007] = 0x572A, [13008] = 0x5734,
++  [13009] = 0x593C, [13010] = 0x5980, [13011] = 0x597C, [13012] = 0x5985,
++  [13013] = 0x597B, [13014] = 0x597E, [13015] = 0x5977, [13016] = 0x597F,
++  [13017] = 0x5B56, [13018] = 0x5C15, [13019] = 0x5C25, [13020] = 0x5C7C,
++  [13021] = 0x5C7A, [13022] = 0x5C7B, [13023] = 0x5C7E, [13024] = 0x5DDF,
++  [13025] = 0x5E75, [13026] = 0x5E84, [13027] = 0x5F02, [13028] = 0x5F1A,
++  [13029] = 0x5F74, [13030] = 0x5FD5, [13031] = 0x5FD4, [13032] = 0x5FCF,
++  [13033] = 0x625C, [13034] = 0x625E, [13035] = 0x6264, [13036] = 0x6261,
++  [13037] = 0x6266, [13038] = 0x6262, [13039] = 0x6259, [13040] = 0x6260,
++  [13041] = 0x625A, [13042] = 0x6265, [13043] = 0x65EF, [13044] = 0x65EE,
++  [13045] = 0x673E, [13046] = 0x6739, [13047] = 0x6738, [13048] = 0x673B,
++  [13049] = 0x673A, [13050] = 0x673F, [13051] = 0x673C, [13052] = 0x6733,
++  [13053] = 0x6C18, [13054] = 0x6C46, [13055] = 0x6C52, [13056] = 0x6C5C,
++  [13057] = 0x6C4F, [13058] = 0x6C4A, [13059] = 0x6C54, [13060] = 0x6C4B,
++  [13065] = 0x6C4C, [13066] = 0x7071, [13067] = 0x725E, [13068] = 0x72B4,
++  [13069] = 0x72B5, [13070] = 0x738E, [13071] = 0x752A, [13072] = 0x767F,
++  [13073] = 0x7A75, [13074] = 0x7F51, [13075] = 0x8278, [13076] = 0x827C,
++  [13077] = 0x8280, [13078] = 0x827D, [13079] = 0x827F, [13080] = 0x864D,
++  [13081] = 0x897E, [13082] = 0x9099, [13083] = 0x9097, [13084] = 0x9098,
++  [13085] = 0x909B, [13086] = 0x9094, [13087] = 0x9622, [13088] = 0x9624,
++  [13089] = 0x9620, [13090] = 0x9623, [13091] = 0x4F56, [13092] = 0x4F3B,
++  [13093] = 0x4F62, [13094] = 0x4F49, [13095] = 0x4F53, [13096] = 0x4F64,
++  [13097] = 0x4F3E, [13098] = 0x4F67, [13099] = 0x4F52, [13100] = 0x4F5F,
++  [13101] = 0x4F41, [13102] = 0x4F58, [13103] = 0x4F2D, [13104] = 0x4F33,
++  [13105] = 0x4F3F, [13106] = 0x4F61, [13107] = 0x518F, [13108] = 0x51B9,
++  [13109] = 0x521C, [13110] = 0x521E, [13111] = 0x5221, [13112] = 0x52AD,
++  [13113] = 0x52AE, [13114] = 0x5309, [13115] = 0x5363, [13116] = 0x5372,
++  [13117] = 0x538E, [13118] = 0x538F, [13119] = 0x5430, [13120] = 0x5437,
++  [13121] = 0x542A, [13122] = 0x5454, [13123] = 0x5445, [13124] = 0x5419,
++  [13125] = 0x541C, [13126] = 0x5425, [13127] = 0x5418, [13162] = 0x543D,
++  [13163] = 0x544F, [13164] = 0x5441, [13165] = 0x5428, [13166] = 0x5424,
++  [13167] = 0x5447, [13168] = 0x56EE, [13169] = 0x56E7, [13170] = 0x56E5,
++  [13171] = 0x5741, [13172] = 0x5745, [13173] = 0x574C, [13174] = 0x5749,
++  [13175] = 0x574B, [13176] = 0x5752, [13177] = 0x5906, [13178] = 0x5940,
++  [13179] = 0x59A6, [13180] = 0x5998, [13181] = 0x59A0, [13182] = 0x5997,
++  [13183] = 0x598E, [13184] = 0x59A2, [13185] = 0x5990, [13186] = 0x598F,
++  [13187] = 0x59A7, [13188] = 0x59A1, [13189] = 0x5B8E, [13190] = 0x5B92,
++  [13191] = 0x5C28, [13192] = 0x5C2A, [13193] = 0x5C8D, [13194] = 0x5C8F,
++  [13195] = 0x5C88, [13196] = 0x5C8B, [13197] = 0x5C89, [13198] = 0x5C92,
++  [13199] = 0x5C8A, [13200] = 0x5C86, [13201] = 0x5C93, [13202] = 0x5C95,
++  [13203] = 0x5DE0, [13204] = 0x5E0A, [13205] = 0x5E0E, [13206] = 0x5E8B,
++  [13207] = 0x5E89, [13208] = 0x5E8C, [13209] = 0x5E88, [13210] = 0x5E8D,
++  [13211] = 0x5F05, [13212] = 0x5F1D, [13213] = 0x5F78, [13214] = 0x5F76,
++  [13215] = 0x5FD2, [13216] = 0x5FD1, [13217] = 0x5FD0, [13218] = 0x5FED,
++  [13219] = 0x5FE8, [13220] = 0x5FEE, [13221] = 0x5FF3, [13222] = 0x5FE1,
++  [13223] = 0x5FE4, [13224] = 0x5FE3, [13225] = 0x5FFA, [13226] = 0x5FEF,
++  [13227] = 0x5FF7, [13228] = 0x5FFB, [13229] = 0x6000, [13230] = 0x5FF4,
++  [13231] = 0x623A, [13232] = 0x6283, [13233] = 0x628C, [13234] = 0x628E,
++  [13235] = 0x628F, [13236] = 0x6294, [13237] = 0x6287, [13238] = 0x6271,
++  [13239] = 0x627B, [13240] = 0x627A, [13241] = 0x6270, [13242] = 0x6281,
++  [13243] = 0x6288, [13244] = 0x6277, [13245] = 0x627D, [13246] = 0x6272,
++  [13247] = 0x6274, [13248] = 0x6537, [13249] = 0x65F0, [13250] = 0x65F4,
++  [13251] = 0x65F3, [13252] = 0x65F2, [13253] = 0x65F5, [13254] = 0x6745,
++  [13255] = 0x6747, [13260] = 0x6759, [13261] = 0x6755, [13262] = 0x674C,
++  [13263] = 0x6748, [13264] = 0x675D, [13265] = 0x674D, [13266] = 0x675A,
++  [13267] = 0x674B, [13268] = 0x6BD0, [13269] = 0x6C19, [13270] = 0x6C1A,
++  [13271] = 0x6C78, [13272] = 0x6C67, [13273] = 0x6C6B, [13274] = 0x6C84,
++  [13275] = 0x6C8B, [13276] = 0x6C8F, [13277] = 0x6C71, [13278] = 0x6C6F,
++  [13279] = 0x6C69, [13280] = 0x6C9A, [13281] = 0x6C6D, [13282] = 0x6C87,
++  [13283] = 0x6C95, [13284] = 0x6C9C, [13285] = 0x6C66, [13286] = 0x6C73,
++  [13287] = 0x6C65, [13288] = 0x6C7B, [13289] = 0x6C8E, [13290] = 0x7074,
++  [13291] = 0x707A, [13292] = 0x7263, [13293] = 0x72BF, [13294] = 0x72BD,
++  [13295] = 0x72C3, [13296] = 0x72C6, [13297] = 0x72C1, [13298] = 0x72BA,
++  [13299] = 0x72C5, [13300] = 0x7395, [13301] = 0x7397, [13302] = 0x7393,
++  [13303] = 0x7394, [13304] = 0x7392, [13305] = 0x753A, [13306] = 0x7539,
++  [13307] = 0x7594, [13308] = 0x7595, [13309] = 0x7681, [13310] = 0x793D,
++  [13311] = 0x8034, [13312] = 0x8095, [13313] = 0x8099, [13314] = 0x8090,
++  [13315] = 0x8092, [13316] = 0x809C, [13317] = 0x8290, [13318] = 0x828F,
++  [13319] = 0x8285, [13320] = 0x828E, [13321] = 0x8291, [13322] = 0x8293,
++  [13357] = 0x828A, [13358] = 0x8283, [13359] = 0x8284, [13360] = 0x8C78,
++  [13361] = 0x8FC9, [13362] = 0x8FBF, [13363] = 0x909F, [13364] = 0x90A1,
++  [13365] = 0x90A5, [13366] = 0x909E, [13367] = 0x90A7, [13368] = 0x90A0,
++  [13369] = 0x9630, [13370] = 0x9628, [13371] = 0x962F, [13372] = 0x962D,
++  [13373] = 0x4E33, [13374] = 0x4F98, [13375] = 0x4F7C, [13376] = 0x4F85,
++  [13377] = 0x4F7D, [13378] = 0x4F80, [13379] = 0x4F87, [13380] = 0x4F76,
++  [13381] = 0x4F74, [13382] = 0x4F89, [13383] = 0x4F84, [13384] = 0x4F77,
++  [13385] = 0x4F4C, [13386] = 0x4F97, [13387] = 0x4F6A, [13388] = 0x4F9A,
++  [13389] = 0x4F79, [13390] = 0x4F81, [13391] = 0x4F78, [13392] = 0x4F90,
++  [13393] = 0x4F9C, [13394] = 0x4F94, [13395] = 0x4F9E, [13396] = 0x4F92,
++  [13397] = 0x4F82, [13398] = 0x4F95, [13399] = 0x4F6B, [13400] = 0x4F6E,
++  [13401] = 0x519E, [13402] = 0x51BC, [13403] = 0x51BE, [13404] = 0x5235,
++  [13405] = 0x5232, [13406] = 0x5233, [13407] = 0x5246, [13408] = 0x5231,
++  [13409] = 0x52BC, [13410] = 0x530A, [13411] = 0x530B, [13412] = 0x533C,
++  [13413] = 0x5392, [13414] = 0x5394, [13415] = 0x5487, [13416] = 0x547F,
++  [13417] = 0x5481, [13418] = 0x5491, [13419] = 0x5482, [13420] = 0x5488,
++  [13421] = 0x546B, [13422] = 0x547A, [13423] = 0x547E, [13424] = 0x5465,
++  [13425] = 0x546C, [13426] = 0x5474, [13427] = 0x5466, [13428] = 0x548D,
++  [13429] = 0x546F, [13430] = 0x5461, [13431] = 0x5460, [13432] = 0x5498,
++  [13433] = 0x5463, [13434] = 0x5467, [13435] = 0x5464, [13436] = 0x56F7,
++  [13437] = 0x56F9, [13438] = 0x576F, [13439] = 0x5772, [13440] = 0x576D,
++  [13441] = 0x576B, [13442] = 0x5771, [13443] = 0x5770, [13444] = 0x5776,
++  [13445] = 0x5780, [13446] = 0x5775, [13447] = 0x577B, [13448] = 0x5773,
++  [13449] = 0x5774, [13450] = 0x5762, [13455] = 0x5768, [13456] = 0x577D,
++  [13457] = 0x590C, [13458] = 0x5945, [13459] = 0x59B5, [13460] = 0x59BA,
++  [13461] = 0x59CF, [13462] = 0x59CE, [13463] = 0x59B2, [13464] = 0x59CC,
++  [13465] = 0x59C1, [13466] = 0x59B6, [13467] = 0x59BC, [13468] = 0x59C3,
++  [13469] = 0x59D6, [13470] = 0x59B1, [13471] = 0x59BD, [13472] = 0x59C0,
++  [13473] = 0x59C8, [13474] = 0x59B4, [13475] = 0x59C7, [13476] = 0x5B62,
++  [13477] = 0x5B65, [13478] = 0x5B93, [13479] = 0x5B95, [13480] = 0x5C44,
++  [13481] = 0x5C47, [13482] = 0x5CAE, [13483] = 0x5CA4, [13484] = 0x5CA0,
++  [13485] = 0x5CB5, [13486] = 0x5CAF, [13487] = 0x5CA8, [13488] = 0x5CAC,
++  [13489] = 0x5C9F, [13490] = 0x5CA3, [13491] = 0x5CAD, [13492] = 0x5CA2,
++  [13493] = 0x5CAA, [13494] = 0x5CA7, [13495] = 0x5C9D, [13496] = 0x5CA5,
++  [13497] = 0x5CB6, [13498] = 0x5CB0, [13499] = 0x5CA6, [13500] = 0x5E17,
++  [13501] = 0x5E14, [13502] = 0x5E19, [13503] = 0x5F28, [13504] = 0x5F22,
++  [13505] = 0x5F23, [13506] = 0x5F24, [13507] = 0x5F54, [13508] = 0x5F82,
++  [13509] = 0x5F7E, [13510] = 0x5F7D, [13511] = 0x5FDE, [13512] = 0x5FE5,
++  [13513] = 0x602D, [13514] = 0x6026, [13515] = 0x6019, [13516] = 0x6032,
++  [13517] = 0x600B, [13552] = 0x6034, [13553] = 0x600A, [13554] = 0x6017,
++  [13555] = 0x6033, [13556] = 0x601A, [13557] = 0x601E, [13558] = 0x602C,
++  [13559] = 0x6022, [13560] = 0x600D, [13561] = 0x6010, [13562] = 0x602E,
++  [13563] = 0x6013, [13564] = 0x6011, [13565] = 0x600C, [13566] = 0x6009,
++  [13567] = 0x601C, [13568] = 0x6214, [13569] = 0x623D, [13570] = 0x62AD,
++  [13571] = 0x62B4, [13572] = 0x62D1, [13573] = 0x62BE, [13574] = 0x62AA,
++  [13575] = 0x62B6, [13576] = 0x62CA, [13577] = 0x62AE, [13578] = 0x62B3,
++  [13579] = 0x62AF, [13580] = 0x62BB, [13581] = 0x62A9, [13582] = 0x62B0,
++  [13583] = 0x62B8, [13584] = 0x653D, [13585] = 0x65A8, [13586] = 0x65BB,
++  [13587] = 0x6609, [13588] = 0x65FC, [13589] = 0x6604, [13590] = 0x6612,
++  [13591] = 0x6608, [13592] = 0x65FB, [13593] = 0x6603, [13594] = 0x660B,
++  [13595] = 0x660D, [13596] = 0x6605, [13597] = 0x65FD, [13598] = 0x6611,
++  [13599] = 0x6610, [13600] = 0x66F6, [13601] = 0x670A, [13602] = 0x6785,
++  [13603] = 0x676C, [13604] = 0x678E, [13605] = 0x6792, [13606] = 0x6776,
++  [13607] = 0x677B, [13608] = 0x6798, [13609] = 0x6786, [13610] = 0x6784,
++  [13611] = 0x6774, [13612] = 0x678D, [13613] = 0x678C, [13614] = 0x677A,
++  [13615] = 0x679F, [13616] = 0x6791, [13617] = 0x6799, [13618] = 0x6783,
++  [13619] = 0x677D, [13620] = 0x6781, [13621] = 0x6778, [13622] = 0x6779,
++  [13623] = 0x6794, [13624] = 0x6B25, [13625] = 0x6B80, [13626] = 0x6B7E,
++  [13627] = 0x6BDE, [13628] = 0x6C1D, [13629] = 0x6C93, [13630] = 0x6CEC,
++  [13631] = 0x6CEB, [13632] = 0x6CEE, [13633] = 0x6CD9, [13634] = 0x6CB6,
++  [13635] = 0x6CD4, [13636] = 0x6CAD, [13637] = 0x6CE7, [13638] = 0x6CB7,
++  [13639] = 0x6CD0, [13640] = 0x6CC2, [13641] = 0x6CBA, [13642] = 0x6CC3,
++  [13643] = 0x6CC6, [13644] = 0x6CED, [13645] = 0x6CF2, [13650] = 0x6CD2,
++  [13651] = 0x6CDD, [13652] = 0x6CB4, [13653] = 0x6C8A, [13654] = 0x6C9D,
++  [13655] = 0x6C80, [13656] = 0x6CDE, [13657] = 0x6CC0, [13658] = 0x6D30,
++  [13659] = 0x6CCD, [13660] = 0x6CC7, [13661] = 0x6CB0, [13662] = 0x6CF9,
++  [13663] = 0x6CCF, [13664] = 0x6CE9, [13665] = 0x6CD1, [13666] = 0x7094,
++  [13667] = 0x7098, [13668] = 0x7085, [13669] = 0x7093, [13670] = 0x7086,
++  [13671] = 0x7084, [13672] = 0x7091, [13673] = 0x7096, [13674] = 0x7082,
++  [13675] = 0x709A, [13676] = 0x7083, [13677] = 0x726A, [13678] = 0x72D6,
++  [13679] = 0x72CB, [13680] = 0x72D8, [13681] = 0x72C9, [13682] = 0x72DC,
++  [13683] = 0x72D2, [13684] = 0x72D4, [13685] = 0x72DA, [13686] = 0x72CC,
++  [13687] = 0x72D1, [13688] = 0x73A4, [13689] = 0x73A1, [13690] = 0x73AD,
++  [13691] = 0x73A6, [13692] = 0x73A2, [13693] = 0x73A0, [13694] = 0x73AC,
++  [13695] = 0x739D, [13696] = 0x74DD, [13697] = 0x74E8, [13698] = 0x753F,
++  [13699] = 0x7540, [13700] = 0x753E, [13701] = 0x758C, [13702] = 0x7598,
++  [13703] = 0x76AF, [13704] = 0x76F3, [13705] = 0x76F1, [13706] = 0x76F0,
++  [13707] = 0x76F5, [13708] = 0x77F8, [13709] = 0x77FC, [13710] = 0x77F9,
++  [13711] = 0x77FB, [13712] = 0x77FA, [13747] = 0x77F7, [13748] = 0x7942,
++  [13749] = 0x793F, [13750] = 0x79C5, [13751] = 0x7A78, [13752] = 0x7A7B,
++  [13753] = 0x7AFB, [13754] = 0x7C75, [13755] = 0x7CFD, [13756] = 0x8035,
++  [13757] = 0x808F, [13758] = 0x80AE, [13759] = 0x80A3, [13760] = 0x80B8,
++  [13761] = 0x80B5, [13762] = 0x80AD, [13763] = 0x8220, [13764] = 0x82A0,
++  [13765] = 0x82C0, [13766] = 0x82AB, [13767] = 0x829A, [13768] = 0x8298,
++  [13769] = 0x829B, [13770] = 0x82B5, [13771] = 0x82A7, [13772] = 0x82AE,
++  [13773] = 0x82BC, [13774] = 0x829E, [13775] = 0x82BA, [13776] = 0x82B4,
++  [13777] = 0x82A8, [13778] = 0x82A1, [13779] = 0x82A9, [13780] = 0x82C2,
++  [13781] = 0x82A4, [13782] = 0x82C3, [13783] = 0x82B6, [13784] = 0x82A2,
++  [13785] = 0x8670, [13786] = 0x866F, [13787] = 0x866D, [13788] = 0x866E,
++  [13789] = 0x8C56, [13790] = 0x8FD2, [13791] = 0x8FCB, [13792] = 0x8FD3,
++  [13793] = 0x8FCD, [13794] = 0x8FD6, [13795] = 0x8FD5, [13796] = 0x8FD7,
++  [13797] = 0x90B2, [13798] = 0x90B4, [13799] = 0x90AF, [13800] = 0x90B3,
++  [13801] = 0x90B0, [13802] = 0x9639, [13803] = 0x963D, [13804] = 0x963C,
++  [13805] = 0x963A, [13806] = 0x9643, [13807] = 0x4FCD, [13808] = 0x4FC5,
++  [13809] = 0x4FD3, [13810] = 0x4FB2, [13811] = 0x4FC9, [13812] = 0x4FCB,
++  [13813] = 0x4FC1, [13814] = 0x4FD4, [13815] = 0x4FDC, [13816] = 0x4FD9,
++  [13817] = 0x4FBB, [13818] = 0x4FB3, [13819] = 0x4FDB, [13820] = 0x4FC7,
++  [13821] = 0x4FD6, [13822] = 0x4FBA, [13823] = 0x4FC0, [13824] = 0x4FB9,
++  [13825] = 0x4FEC, [13826] = 0x5244, [13827] = 0x5249, [13828] = 0x52C0,
++  [13829] = 0x52C2, [13830] = 0x533D, [13831] = 0x537C, [13832] = 0x5397,
++  [13833] = 0x5396, [13834] = 0x5399, [13835] = 0x5398, [13836] = 0x54BA,
++  [13837] = 0x54A1, [13838] = 0x54AD, [13839] = 0x54A5, [13840] = 0x54CF,
++  [13845] = 0x54C3, [13846] = 0x830D, [13847] = 0x54B7, [13848] = 0x54AE,
++  [13849] = 0x54D6, [13850] = 0x54B6, [13851] = 0x54C5, [13852] = 0x54C6,
++  [13853] = 0x54A0, [13854] = 0x5470, [13855] = 0x54BC, [13856] = 0x54A2,
++  [13857] = 0x54BE, [13858] = 0x5472, [13859] = 0x54DE, [13860] = 0x54B0,
++  [13861] = 0x57B5, [13862] = 0x579E, [13863] = 0x579F, [13864] = 0x57A4,
++  [13865] = 0x578C, [13866] = 0x5797, [13867] = 0x579D, [13868] = 0x579B,
++  [13869] = 0x5794, [13870] = 0x5798, [13871] = 0x578F, [13872] = 0x5799,
++  [13873] = 0x57A5, [13874] = 0x579A, [13875] = 0x5795, [13876] = 0x58F4,
++  [13877] = 0x590D, [13878] = 0x5953, [13879] = 0x59E1, [13880] = 0x59DE,
++  [13881] = 0x59EE, [13882] = 0x5A00, [13883] = 0x59F1, [13884] = 0x59DD,
++  [13885] = 0x59FA, [13886] = 0x59FD, [13887] = 0x59FC, [13888] = 0x59F6,
++  [13889] = 0x59E4, [13890] = 0x59F2, [13891] = 0x59F7, [13892] = 0x59DB,
++  [13893] = 0x59E9, [13894] = 0x59F3, [13895] = 0x59F5, [13896] = 0x59E0,
++  [13897] = 0x59FE, [13898] = 0x59F4, [13899] = 0x59ED, [13900] = 0x5BA8,
++  [13901] = 0x5C4C, [13902] = 0x5CD0, [13903] = 0x5CD8, [13904] = 0x5CCC,
++  [13905] = 0x5CD7, [13906] = 0x5CCB, [13907] = 0x5CDB, [13942] = 0x5CDE,
++  [13943] = 0x5CDA, [13944] = 0x5CC9, [13945] = 0x5CC7, [13946] = 0x5CCA,
++  [13947] = 0x5CD6, [13948] = 0x5CD3, [13949] = 0x5CD4, [13950] = 0x5CCF,
++  [13951] = 0x5CC8, [13952] = 0x5CC6, [13953] = 0x5CCE, [13954] = 0x5CDF,
++  [13955] = 0x5CF8, [13956] = 0x5DF9, [13957] = 0x5E21, [13958] = 0x5E22,
++  [13959] = 0x5E23, [13960] = 0x5E20, [13961] = 0x5E24, [13962] = 0x5EB0,
++  [13963] = 0x5EA4, [13964] = 0x5EA2, [13965] = 0x5E9B, [13966] = 0x5EA3,
++  [13967] = 0x5EA5, [13968] = 0x5F07, [13969] = 0x5F2E, [13970] = 0x5F56,
++  [13971] = 0x5F86, [13972] = 0x6037, [13973] = 0x6039, [13974] = 0x6054,
++  [13975] = 0x6072, [13976] = 0x605E, [13977] = 0x6045, [13978] = 0x6053,
++  [13979] = 0x6047, [13980] = 0x6049, [13981] = 0x605B, [13982] = 0x604C,
++  [13983] = 0x6040, [13984] = 0x6042, [13985] = 0x605F, [13986] = 0x6024,
++  [13987] = 0x6044, [13988] = 0x6058, [13989] = 0x6066, [13990] = 0x606E,
++  [13991] = 0x6242, [13992] = 0x6243, [13993] = 0x62CF, [13994] = 0x630D,
++  [13995] = 0x630B, [13996] = 0x62F5, [13997] = 0x630E, [13998] = 0x6303,
++  [13999] = 0x62EB, [14000] = 0x62F9, [14001] = 0x630F, [14002] = 0x630C,
++  [14003] = 0x62F8, [14004] = 0x62F6, [14005] = 0x6300, [14006] = 0x6313,
++  [14007] = 0x6314, [14008] = 0x62FA, [14009] = 0x6315, [14010] = 0x62FB,
++  [14011] = 0x62F0, [14012] = 0x6541, [14013] = 0x6543, [14014] = 0x65AA,
++  [14015] = 0x65BF, [14016] = 0x6636, [14017] = 0x6621, [14018] = 0x6632,
++  [14019] = 0x6635, [14020] = 0x661C, [14021] = 0x6626, [14022] = 0x6622,
++  [14023] = 0x6633, [14024] = 0x662B, [14025] = 0x663A, [14026] = 0x661D,
++  [14027] = 0x6634, [14028] = 0x6639, [14029] = 0x662E, [14030] = 0x670F,
++  [14031] = 0x6710, [14032] = 0x67C1, [14033] = 0x67F2, [14034] = 0x67C8,
++  [14035] = 0x67BA, [14040] = 0x67DC, [14041] = 0x67BB, [14042] = 0x67F8,
++  [14043] = 0x67D8, [14044] = 0x67C0, [14045] = 0x67B7, [14046] = 0x67C5,
++  [14047] = 0x67EB, [14048] = 0x67E4, [14049] = 0x67DF, [14050] = 0x67B5,
++  [14051] = 0x67CD, [14052] = 0x67B3, [14053] = 0x67F7, [14054] = 0x67F6,
++  [14055] = 0x67EE, [14056] = 0x67E3, [14057] = 0x67C2, [14058] = 0x67B9,
++  [14059] = 0x67CE, [14060] = 0x67E7, [14061] = 0x67F0, [14062] = 0x67B2,
++  [14063] = 0x67FC, [14064] = 0x67C6, [14065] = 0x67ED, [14066] = 0x67CC,
++  [14067] = 0x67AE, [14068] = 0x67E6, [14069] = 0x67DB, [14070] = 0x67FA,
++  [14071] = 0x67C9, [14072] = 0x67CA, [14073] = 0x67C3, [14074] = 0x67EA,
++  [14075] = 0x67CB, [14076] = 0x6B28, [14077] = 0x6B82, [14078] = 0x6B84,
++  [14079] = 0x6BB6, [14080] = 0x6BD6, [14081] = 0x6BD8, [14082] = 0x6BE0,
++  [14083] = 0x6C20, [14084] = 0x6C21, [14085] = 0x6D28, [14086] = 0x6D34,
++  [14087] = 0x6D2D, [14088] = 0x6D1F, [14089] = 0x6D3C, [14090] = 0x6D3F,
++  [14091] = 0x6D12, [14092] = 0x6D0A, [14093] = 0x6CDA, [14094] = 0x6D33,
++  [14095] = 0x6D04, [14096] = 0x6D19, [14097] = 0x6D3A, [14098] = 0x6D1A,
++  [14099] = 0x6D11, [14100] = 0x6D00, [14101] = 0x6D1D, [14102] = 0x6D42,
++  [14137] = 0x6D01, [14138] = 0x6D18, [14139] = 0x6D37, [14140] = 0x6D03,
++  [14141] = 0x6D0F, [14142] = 0x6D40, [14143] = 0x6D07, [14144] = 0x6D20,
++  [14145] = 0x6D2C, [14146] = 0x6D08, [14147] = 0x6D22, [14148] = 0x6D09,
++  [14149] = 0x6D10, [14150] = 0x70B7, [14151] = 0x709F, [14152] = 0x70BE,
++  [14153] = 0x70B1, [14154] = 0x70B0, [14155] = 0x70A1, [14156] = 0x70B4,
++  [14157] = 0x70B5, [14158] = 0x70A9, [14159] = 0x7241, [14160] = 0x7249,
++  [14161] = 0x724A, [14162] = 0x726C, [14163] = 0x7270, [14164] = 0x7273,
++  [14165] = 0x726E, [14166] = 0x72CA, [14167] = 0x72E4, [14168] = 0x72E8,
++  [14169] = 0x72EB, [14170] = 0x72DF, [14171] = 0x72EA, [14172] = 0x72E6,
++  [14173] = 0x72E3, [14174] = 0x7385, [14175] = 0x73CC, [14176] = 0x73C2,
++  [14177] = 0x73C8, [14178] = 0x73C5, [14179] = 0x73B9, [14180] = 0x73B6,
++  [14181] = 0x73B5, [14182] = 0x73B4, [14183] = 0x73EB, [14184] = 0x73BF,
++  [14185] = 0x73C7, [14186] = 0x73BE, [14187] = 0x73C3, [14188] = 0x73C6,
++  [14189] = 0x73B8, [14190] = 0x73CB, [14191] = 0x74EC, [14192] = 0x74EE,
++  [14193] = 0x752E, [14194] = 0x7547, [14195] = 0x7548, [14196] = 0x75A7,
++  [14197] = 0x75AA, [14198] = 0x7679, [14199] = 0x76C4, [14200] = 0x7708,
++  [14201] = 0x7703, [14202] = 0x7704, [14203] = 0x7705, [14204] = 0x770A,
++  [14205] = 0x76F7, [14206] = 0x76FB, [14207] = 0x76FA, [14208] = 0x77E7,
++  [14209] = 0x77E8, [14210] = 0x7806, [14211] = 0x7811, [14212] = 0x7812,
++  [14213] = 0x7805, [14214] = 0x7810, [14215] = 0x780F, [14216] = 0x780E,
++  [14217] = 0x7809, [14218] = 0x7803, [14219] = 0x7813, [14220] = 0x794A,
++  [14221] = 0x794C, [14222] = 0x794B, [14223] = 0x7945, [14224] = 0x7944,
++  [14225] = 0x79D5, [14226] = 0x79CD, [14227] = 0x79CF, [14228] = 0x79D6,
++  [14229] = 0x79CE, [14230] = 0x7A80, [14235] = 0x7A7E, [14236] = 0x7AD1,
++  [14237] = 0x7B00, [14238] = 0x7B01, [14239] = 0x7C7A, [14240] = 0x7C78,
++  [14241] = 0x7C79, [14242] = 0x7C7F, [14243] = 0x7C80, [14244] = 0x7C81,
++  [14245] = 0x7D03, [14246] = 0x7D08, [14247] = 0x7D01, [14248] = 0x7F58,
++  [14249] = 0x7F91, [14250] = 0x7F8D, [14251] = 0x7FBE, [14252] = 0x8007,
++  [14253] = 0x800E, [14254] = 0x800F, [14255] = 0x8014, [14256] = 0x8037,
++  [14257] = 0x80D8, [14258] = 0x80C7, [14259] = 0x80E0, [14260] = 0x80D1,
++  [14261] = 0x80C8, [14262] = 0x80C2, [14263] = 0x80D0, [14264] = 0x80C5,
++  [14265] = 0x80E3, [14266] = 0x80D9, [14267] = 0x80DC, [14268] = 0x80CA,
++  [14269] = 0x80D5, [14270] = 0x80C9, [14271] = 0x80CF, [14272] = 0x80D7,
++  [14273] = 0x80E6, [14274] = 0x80CD, [14275] = 0x81FF, [14276] = 0x8221,
++  [14277] = 0x8294, [14278] = 0x82D9, [14279] = 0x82FE, [14280] = 0x82F9,
++  [14281] = 0x8307, [14282] = 0x82E8, [14283] = 0x8300, [14284] = 0x82D5,
++  [14285] = 0x833A, [14286] = 0x82EB, [14287] = 0x82D6, [14288] = 0x82F4,
++  [14289] = 0x82EC, [14290] = 0x82E1, [14291] = 0x82F2, [14292] = 0x82F5,
++  [14293] = 0x830C, [14294] = 0x82FB, [14295] = 0x82F6, [14296] = 0x82F0,
++  [14297] = 0x82EA, [14332] = 0x82E4, [14333] = 0x82E0, [14334] = 0x82FA,
++  [14335] = 0x82F3, [14336] = 0x82ED, [14337] = 0x8677, [14338] = 0x8674,
++  [14339] = 0x867C, [14340] = 0x8673, [14341] = 0x8841, [14342] = 0x884E,
++  [14343] = 0x8867, [14344] = 0x886A, [14345] = 0x8869, [14346] = 0x89D3,
++  [14347] = 0x8A04, [14348] = 0x8A07, [14349] = 0x8D72, [14350] = 0x8FE3,
++  [14351] = 0x8FE1, [14352] = 0x8FEE, [14353] = 0x8FE0, [14354] = 0x90F1,
++  [14355] = 0x90BD, [14356] = 0x90BF, [14357] = 0x90D5, [14358] = 0x90C5,
++  [14359] = 0x90BE, [14360] = 0x90C7, [14361] = 0x90CB, [14362] = 0x90C8,
++  [14363] = 0x91D4, [14364] = 0x91D3, [14365] = 0x9654, [14366] = 0x964F,
++  [14367] = 0x9651, [14368] = 0x9653, [14369] = 0x964A, [14370] = 0x964E,
++  [14371] = 0x501E, [14372] = 0x5005, [14373] = 0x5007, [14374] = 0x5013,
++  [14375] = 0x5022, [14376] = 0x5030, [14377] = 0x501B, [14378] = 0x4FF5,
++  [14379] = 0x4FF4, [14380] = 0x5033, [14381] = 0x5037, [14382] = 0x502C,
++  [14383] = 0x4FF6, [14384] = 0x4FF7, [14385] = 0x5017, [14386] = 0x501C,
++  [14387] = 0x5020, [14388] = 0x5027, [14389] = 0x5035, [14390] = 0x502F,
++  [14391] = 0x5031, [14392] = 0x500E, [14393] = 0x515A, [14394] = 0x5194,
++  [14395] = 0x5193, [14396] = 0x51CA, [14397] = 0x51C4, [14398] = 0x51C5,
++  [14399] = 0x51C8, [14400] = 0x51CE, [14401] = 0x5261, [14402] = 0x525A,
++  [14403] = 0x5252, [14404] = 0x525E, [14405] = 0x525F, [14406] = 0x5255,
++  [14407] = 0x5262, [14408] = 0x52CD, [14409] = 0x530E, [14410] = 0x539E,
++  [14411] = 0x5526, [14412] = 0x54E2, [14413] = 0x5517, [14414] = 0x5512,
++  [14415] = 0x54E7, [14416] = 0x54F3, [14417] = 0x54E4, [14418] = 0x551A,
++  [14419] = 0x54FF, [14420] = 0x5504, [14421] = 0x5508, [14422] = 0x54EB,
++  [14423] = 0x5511, [14424] = 0x5505, [14425] = 0x54F1, [14430] = 0x550A,
++  [14431] = 0x54FB, [14432] = 0x54F7, [14433] = 0x54F8, [14434] = 0x54E0,
++  [14435] = 0x550E, [14436] = 0x5503, [14437] = 0x550B, [14438] = 0x5701,
++  [14439] = 0x5702, [14440] = 0x57CC, [14441] = 0x5832, [14442] = 0x57D5,
++  [14443] = 0x57D2, [14444] = 0x57BA, [14445] = 0x57C6, [14446] = 0x57BD,
++  [14447] = 0x57BC, [14448] = 0x57B8, [14449] = 0x57B6, [14450] = 0x57BF,
++  [14451] = 0x57C7, [14452] = 0x57D0, [14453] = 0x57B9, [14454] = 0x57C1,
++  [14455] = 0x590E, [14456] = 0x594A, [14457] = 0x5A19, [14458] = 0x5A16,
++  [14459] = 0x5A2D, [14460] = 0x5A2E, [14461] = 0x5A15, [14462] = 0x5A0F,
++  [14463] = 0x5A17, [14464] = 0x5A0A, [14465] = 0x5A1E, [14466] = 0x5A33,
++  [14467] = 0x5B6C, [14468] = 0x5BA7, [14469] = 0x5BAD, [14470] = 0x5BAC,
++  [14471] = 0x5C03, [14472] = 0x5C56, [14473] = 0x5C54, [14474] = 0x5CEC,
++  [14475] = 0x5CFF, [14476] = 0x5CEE, [14477] = 0x5CF1, [14478] = 0x5CF7,
++  [14479] = 0x5D00, [14480] = 0x5CF9, [14481] = 0x5E29, [14482] = 0x5E28,
++  [14483] = 0x5EA8, [14484] = 0x5EAE, [14485] = 0x5EAA, [14486] = 0x5EAC,
++  [14487] = 0x5F33, [14488] = 0x5F30, [14489] = 0x5F67, [14490] = 0x605D,
++  [14491] = 0x605A, [14492] = 0x6067, [14527] = 0x6041, [14528] = 0x60A2,
++  [14529] = 0x6088, [14530] = 0x6080, [14531] = 0x6092, [14532] = 0x6081,
++  [14533] = 0x609D, [14534] = 0x6083, [14535] = 0x6095, [14536] = 0x609B,
++  [14537] = 0x6097, [14538] = 0x6087, [14539] = 0x609C, [14540] = 0x608E,
++  [14541] = 0x6219, [14542] = 0x6246, [14543] = 0x62F2, [14544] = 0x6310,
++  [14545] = 0x6356, [14546] = 0x632C, [14547] = 0x6344, [14548] = 0x6345,
++  [14549] = 0x6336, [14550] = 0x6343, [14551] = 0x63E4, [14552] = 0x6339,
++  [14553] = 0x634B, [14554] = 0x634A, [14555] = 0x633C, [14556] = 0x6329,
++  [14557] = 0x6341, [14558] = 0x6334, [14559] = 0x6358, [14560] = 0x6354,
++  [14561] = 0x6359, [14562] = 0x632D, [14563] = 0x6347, [14564] = 0x6333,
++  [14565] = 0x635A, [14566] = 0x6351, [14567] = 0x6338, [14568] = 0x6357,
++  [14569] = 0x6340, [14570] = 0x6348, [14571] = 0x654A, [14572] = 0x6546,
++  [14573] = 0x65C6, [14574] = 0x65C3, [14575] = 0x65C4, [14576] = 0x65C2,
++  [14577] = 0x664A, [14578] = 0x665F, [14579] = 0x6647, [14580] = 0x6651,
++  [14581] = 0x6712, [14582] = 0x6713, [14583] = 0x681F, [14584] = 0x681A,
++  [14585] = 0x6849, [14586] = 0x6832, [14587] = 0x6833, [14588] = 0x683B,
++  [14589] = 0x684B, [14590] = 0x684F, [14591] = 0x6816, [14592] = 0x6831,
++  [14593] = 0x681C, [14594] = 0x6835, [14595] = 0x682B, [14596] = 0x682D,
++  [14597] = 0x682F, [14598] = 0x684E, [14599] = 0x6844, [14600] = 0x6834,
++  [14601] = 0x681D, [14602] = 0x6812, [14603] = 0x6814, [14604] = 0x6826,
++  [14605] = 0x6828, [14606] = 0x682E, [14607] = 0x684D, [14608] = 0x683A,
++  [14609] = 0x6825, [14610] = 0x6820, [14611] = 0x6B2C, [14612] = 0x6B2F,
++  [14613] = 0x6B2D, [14614] = 0x6B31, [14615] = 0x6B34, [14616] = 0x6B6D,
++  [14617] = 0x8082, [14618] = 0x6B88, [14619] = 0x6BE6, [14620] = 0x6BE4,
++  [14625] = 0x6BE8, [14626] = 0x6BE3, [14627] = 0x6BE2, [14628] = 0x6BE7,
++  [14629] = 0x6C25, [14630] = 0x6D7A, [14631] = 0x6D63, [14632] = 0x6D64,
++  [14633] = 0x6D76, [14634] = 0x6D0D, [14635] = 0x6D61, [14636] = 0x6D92,
++  [14637] = 0x6D58, [14638] = 0x6D62, [14639] = 0x6D6D, [14640] = 0x6D6F,
++  [14641] = 0x6D91, [14642] = 0x6D8D, [14643] = 0x6DEF, [14644] = 0x6D7F,
++  [14645] = 0x6D86, [14646] = 0x6D5E, [14647] = 0x6D67, [14648] = 0x6D60,
++  [14649] = 0x6D97, [14650] = 0x6D70, [14651] = 0x6D7C, [14652] = 0x6D5F,
++  [14653] = 0x6D82, [14654] = 0x6D98, [14655] = 0x6D2F, [14656] = 0x6D68,
++  [14657] = 0x6D8B, [14658] = 0x6D7E, [14659] = 0x6D80, [14660] = 0x6D84,
++  [14661] = 0x6D16, [14662] = 0x6D83, [14663] = 0x6D7B, [14664] = 0x6D7D,
++  [14665] = 0x6D75, [14666] = 0x6D90, [14667] = 0x70DC, [14668] = 0x70D3,
++  [14669] = 0x70D1, [14670] = 0x70DD, [14671] = 0x70CB, [14672] = 0x7F39,
++  [14673] = 0x70E2, [14674] = 0x70D7, [14675] = 0x70D2, [14676] = 0x70DE,
++  [14677] = 0x70E0, [14678] = 0x70D4, [14679] = 0x70CD, [14680] = 0x70C5,
++  [14681] = 0x70C6, [14682] = 0x70C7, [14683] = 0x70DA, [14684] = 0x70CE,
++  [14685] = 0x70E1, [14686] = 0x7242, [14687] = 0x7278, [14722] = 0x7277,
++  [14723] = 0x7276, [14724] = 0x7300, [14725] = 0x72FA, [14726] = 0x72F4,
++  [14727] = 0x72FE, [14728] = 0x72F6, [14729] = 0x72F3, [14730] = 0x72FB,
++  [14731] = 0x7301, [14732] = 0x73D3, [14733] = 0x73D9, [14734] = 0x73E5,
++  [14735] = 0x73D6, [14736] = 0x73BC, [14737] = 0x73E7, [14738] = 0x73E3,
++  [14739] = 0x73E9, [14740] = 0x73DC, [14741] = 0x73D2, [14742] = 0x73DB,
++  [14743] = 0x73D4, [14744] = 0x73DD, [14745] = 0x73DA, [14746] = 0x73D7,
++  [14747] = 0x73D8, [14748] = 0x73E8, [14749] = 0x74DE, [14750] = 0x74DF,
++  [14751] = 0x74F4, [14752] = 0x74F5, [14753] = 0x7521, [14754] = 0x755B,
++  [14755] = 0x755F, [14756] = 0x75B0, [14757] = 0x75C1, [14758] = 0x75BB,
++  [14759] = 0x75C4, [14760] = 0x75C0, [14761] = 0x75BF, [14762] = 0x75B6,
++  [14763] = 0x75BA, [14764] = 0x768A, [14765] = 0x76C9, [14766] = 0x771D,
++  [14767] = 0x771B, [14768] = 0x7710, [14769] = 0x7713, [14770] = 0x7712,
++  [14771] = 0x7723, [14772] = 0x7711, [14773] = 0x7715, [14774] = 0x7719,
++  [14775] = 0x771A, [14776] = 0x7722, [14777] = 0x7727, [14778] = 0x7823,
++  [14779] = 0x782C, [14780] = 0x7822, [14781] = 0x7835, [14782] = 0x782F,
++  [14783] = 0x7828, [14784] = 0x782E, [14785] = 0x782B, [14786] = 0x7821,
++  [14787] = 0x7829, [14788] = 0x7833, [14789] = 0x782A, [14790] = 0x7831,
++  [14791] = 0x7954, [14792] = 0x795B, [14793] = 0x794F, [14794] = 0x795C,
++  [14795] = 0x7953, [14796] = 0x7952, [14797] = 0x7951, [14798] = 0x79EB,
++  [14799] = 0x79EC, [14800] = 0x79E0, [14801] = 0x79EE, [14802] = 0x79ED,
++  [14803] = 0x79EA, [14804] = 0x79DC, [14805] = 0x79DE, [14806] = 0x79DD,
++  [14807] = 0x7A86, [14808] = 0x7A89, [14809] = 0x7A85, [14810] = 0x7A8B,
++  [14811] = 0x7A8C, [14812] = 0x7A8A, [14813] = 0x7A87, [14814] = 0x7AD8,
++  [14815] = 0x7B10, [14820] = 0x7B04, [14821] = 0x7B13, [14822] = 0x7B05,
++  [14823] = 0x7B0F, [14824] = 0x7B08, [14825] = 0x7B0A, [14826] = 0x7B0E,
++  [14827] = 0x7B09, [14828] = 0x7B12, [14829] = 0x7C84, [14830] = 0x7C91,
++  [14831] = 0x7C8A, [14832] = 0x7C8C, [14833] = 0x7C88, [14834] = 0x7C8D,
++  [14835] = 0x7C85, [14836] = 0x7D1E, [14837] = 0x7D1D, [14838] = 0x7D11,
++  [14839] = 0x7D0E, [14840] = 0x7D18, [14841] = 0x7D16, [14842] = 0x7D13,
++  [14843] = 0x7D1F, [14844] = 0x7D12, [14845] = 0x7D0F, [14846] = 0x7D0C,
++  [14847] = 0x7F5C, [14848] = 0x7F61, [14849] = 0x7F5E, [14850] = 0x7F60,
++  [14851] = 0x7F5D, [14852] = 0x7F5B, [14853] = 0x7F96, [14854] = 0x7F92,
++  [14855] = 0x7FC3, [14856] = 0x7FC2, [14857] = 0x7FC0, [14858] = 0x8016,
++  [14859] = 0x803E, [14860] = 0x8039, [14861] = 0x80FA, [14862] = 0x80F2,
++  [14863] = 0x80F9, [14864] = 0x80F5, [14865] = 0x8101, [14866] = 0x80FB,
++  [14867] = 0x8100, [14868] = 0x8201, [14869] = 0x822F, [14870] = 0x8225,
++  [14871] = 0x8333, [14872] = 0x832D, [14873] = 0x8344, [14874] = 0x8319,
++  [14875] = 0x8351, [14876] = 0x8325, [14877] = 0x8356, [14878] = 0x833F,
++  [14879] = 0x8341, [14880] = 0x8326, [14881] = 0x831C, [14882] = 0x8322,
++  [14917] = 0x8342, [14918] = 0x834E, [14919] = 0x831B, [14920] = 0x832A,
++  [14921] = 0x8308, [14922] = 0x833C, [14923] = 0x834D, [14924] = 0x8316,
++  [14925] = 0x8324, [14926] = 0x8320, [14927] = 0x8337, [14928] = 0x832F,
++  [14929] = 0x8329, [14930] = 0x8347, [14931] = 0x8345, [14932] = 0x834C,
++  [14933] = 0x8353, [14934] = 0x831E, [14935] = 0x832C, [14936] = 0x834B,
++  [14937] = 0x8327, [14938] = 0x8348, [14939] = 0x8653, [14940] = 0x8652,
++  [14941] = 0x86A2, [14942] = 0x86A8, [14943] = 0x8696, [14944] = 0x868D,
++  [14945] = 0x8691, [14946] = 0x869E, [14947] = 0x8687, [14948] = 0x8697,
++  [14949] = 0x8686, [14950] = 0x868B, [14951] = 0x869A, [14952] = 0x8685,
++  [14953] = 0x86A5, [14954] = 0x8699, [14955] = 0x86A1, [14956] = 0x86A7,
++  [14957] = 0x8695, [14958] = 0x8698, [14959] = 0x868E, [14960] = 0x869D,
++  [14961] = 0x8690, [14962] = 0x8694, [14963] = 0x8843, [14964] = 0x8844,
++  [14965] = 0x886D, [14966] = 0x8875, [14967] = 0x8876, [14968] = 0x8872,
++  [14969] = 0x8880, [14970] = 0x8871, [14971] = 0x887F, [14972] = 0x886F,
++  [14973] = 0x8883, [14974] = 0x887E, [14975] = 0x8874, [14976] = 0x887C,
++  [14977] = 0x8A12, [14978] = 0x8C47, [14979] = 0x8C57, [14980] = 0x8C7B,
++  [14981] = 0x8CA4, [14982] = 0x8CA3, [14983] = 0x8D76, [14984] = 0x8D78,
++  [14985] = 0x8DB5, [14986] = 0x8DB7, [14987] = 0x8DB6, [14988] = 0x8ED1,
++  [14989] = 0x8ED3, [14990] = 0x8FFE, [14991] = 0x8FF5, [14992] = 0x9002,
++  [14993] = 0x8FFF, [14994] = 0x8FFB, [14995] = 0x9004, [14996] = 0x8FFC,
++  [14997] = 0x8FF6, [14998] = 0x90D6, [14999] = 0x90E0, [15000] = 0x90D9,
++  [15001] = 0x90DA, [15002] = 0x90E3, [15003] = 0x90DF, [15004] = 0x90E5,
++  [15005] = 0x90D8, [15006] = 0x90DB, [15007] = 0x90D7, [15008] = 0x90DC,
++  [15009] = 0x90E4, [15010] = 0x9150, [15015] = 0x914E, [15016] = 0x914F,
++  [15017] = 0x91D5, [15018] = 0x91E2, [15019] = 0x91DA, [15020] = 0x965C,
++  [15021] = 0x965F, [15022] = 0x96BC, [15023] = 0x98E3, [15024] = 0x9ADF,
++  [15025] = 0x9B2F, [15026] = 0x4E7F, [15027] = 0x5070, [15028] = 0x506A,
++  [15029] = 0x5061, [15030] = 0x505E, [15031] = 0x5060, [15032] = 0x5053,
++  [15033] = 0x504B, [15034] = 0x505D, [15035] = 0x5072, [15036] = 0x5048,
++  [15037] = 0x504D, [15038] = 0x5041, [15039] = 0x505B, [15040] = 0x504A,
++  [15041] = 0x5062, [15042] = 0x5015, [15043] = 0x5045, [15044] = 0x505F,
++  [15045] = 0x5069, [15046] = 0x506B, [15047] = 0x5063, [15048] = 0x5064,
++  [15049] = 0x5046, [15050] = 0x5040, [15051] = 0x506E, [15052] = 0x5073,
++  [15053] = 0x5057, [15054] = 0x5051, [15055] = 0x51D0, [15056] = 0x526B,
++  [15057] = 0x526D, [15058] = 0x526C, [15059] = 0x526E, [15060] = 0x52D6,
++  [15061] = 0x52D3, [15062] = 0x532D, [15063] = 0x539C, [15064] = 0x5575,
++  [15065] = 0x5576, [15066] = 0x553C, [15067] = 0x554D, [15068] = 0x5550,
++  [15069] = 0x5534, [15070] = 0x552A, [15071] = 0x5551, [15072] = 0x5562,
++  [15073] = 0x5536, [15074] = 0x5535, [15075] = 0x5530, [15076] = 0x5552,
++  [15077] = 0x5545, [15112] = 0x550C, [15113] = 0x5532, [15114] = 0x5565,
++  [15115] = 0x554E, [15116] = 0x5539, [15117] = 0x5548, [15118] = 0x552D,
++  [15119] = 0x553B, [15120] = 0x5540, [15121] = 0x554B, [15122] = 0x570A,
++  [15123] = 0x5707, [15124] = 0x57FB, [15125] = 0x5814, [15126] = 0x57E2,
++  [15127] = 0x57F6, [15128] = 0x57DC, [15129] = 0x57F4, [15130] = 0x5800,
++  [15131] = 0x57ED, [15132] = 0x57FD, [15133] = 0x5808, [15134] = 0x57F8,
++  [15135] = 0x580B, [15136] = 0x57F3, [15137] = 0x57CF, [15138] = 0x5807,
++  [15139] = 0x57EE, [15140] = 0x57E3, [15141] = 0x57F2, [15142] = 0x57E5,
++  [15143] = 0x57EC, [15144] = 0x57E1, [15145] = 0x580E, [15146] = 0x57FC,
++  [15147] = 0x5810, [15148] = 0x57E7, [15149] = 0x5801, [15150] = 0x580C,
++  [15151] = 0x57F1, [15152] = 0x57E9, [15153] = 0x57F0, [15154] = 0x580D,
++  [15155] = 0x5804, [15156] = 0x595C, [15157] = 0x5A60, [15158] = 0x5A58,
++  [15159] = 0x5A55, [15160] = 0x5A67, [15161] = 0x5A5E, [15162] = 0x5A38,
++  [15163] = 0x5A35, [15164] = 0x5A6D, [15165] = 0x5A50, [15166] = 0x5A5F,
++  [15167] = 0x5A65, [15168] = 0x5A6C, [15169] = 0x5A53, [15170] = 0x5A64,
++  [15171] = 0x5A57, [15172] = 0x5A43, [15173] = 0x5A5D, [15174] = 0x5A52,
++  [15175] = 0x5A44, [15176] = 0x5A5B, [15177] = 0x5A48, [15178] = 0x5A8E,
++  [15179] = 0x5A3E, [15180] = 0x5A4D, [15181] = 0x5A39, [15182] = 0x5A4C,
++  [15183] = 0x5A70, [15184] = 0x5A69, [15185] = 0x5A47, [15186] = 0x5A51,
++  [15187] = 0x5A56, [15188] = 0x5A42, [15189] = 0x5A5C, [15190] = 0x5B72,
++  [15191] = 0x5B6E, [15192] = 0x5BC1, [15193] = 0x5BC0, [15194] = 0x5C59,
++  [15195] = 0x5D1E, [15196] = 0x5D0B, [15197] = 0x5D1D, [15198] = 0x5D1A,
++  [15199] = 0x5D20, [15200] = 0x5D0C, [15201] = 0x5D28, [15202] = 0x5D0D,
++  [15203] = 0x5D26, [15204] = 0x5D25, [15205] = 0x5D0F, [15210] = 0x5D30,
++  [15211] = 0x5D12, [15212] = 0x5D23, [15213] = 0x5D1F, [15214] = 0x5D2E,
++  [15215] = 0x5E3E, [15216] = 0x5E34, [15217] = 0x5EB1, [15218] = 0x5EB4,
++  [15219] = 0x5EB9, [15220] = 0x5EB2, [15221] = 0x5EB3, [15222] = 0x5F36,
++  [15223] = 0x5F38, [15224] = 0x5F9B, [15225] = 0x5F96, [15226] = 0x5F9F,
++  [15227] = 0x608A, [15228] = 0x6090, [15229] = 0x6086, [15230] = 0x60BE,
++  [15231] = 0x60B0, [15232] = 0x60BA, [15233] = 0x60D3, [15234] = 0x60D4,
++  [15235] = 0x60CF, [15236] = 0x60E4, [15237] = 0x60D9, [15238] = 0x60DD,
++  [15239] = 0x60C8, [15240] = 0x60B1, [15241] = 0x60DB, [15242] = 0x60B7,
++  [15243] = 0x60CA, [15244] = 0x60BF, [15245] = 0x60C3, [15246] = 0x60CD,
++  [15247] = 0x60C0, [15248] = 0x6332, [15249] = 0x6365, [15250] = 0x638A,
++  [15251] = 0x6382, [15252] = 0x637D, [15253] = 0x63BD, [15254] = 0x639E,
++  [15255] = 0x63AD, [15256] = 0x639D, [15257] = 0x6397, [15258] = 0x63AB,
++  [15259] = 0x638E, [15260] = 0x636F, [15261] = 0x6387, [15262] = 0x6390,
++  [15263] = 0x636E, [15264] = 0x63AF, [15265] = 0x6375, [15266] = 0x639C,
++  [15267] = 0x636D, [15268] = 0x63AE, [15269] = 0x637C, [15270] = 0x63A4,
++  [15271] = 0x633B, [15272] = 0x639F, [15307] = 0x6378, [15308] = 0x6385,
++  [15309] = 0x6381, [15310] = 0x6391, [15311] = 0x638D, [15312] = 0x6370,
++  [15313] = 0x6553, [15314] = 0x65CD, [15315] = 0x6665, [15316] = 0x6661,
++  [15317] = 0x665B, [15318] = 0x6659, [15319] = 0x665C, [15320] = 0x6662,
++  [15321] = 0x6718, [15322] = 0x6879, [15323] = 0x6887, [15324] = 0x6890,
++  [15325] = 0x689C, [15326] = 0x686D, [15327] = 0x686E, [15328] = 0x68AE,
++  [15329] = 0x68AB, [15330] = 0x6956, [15331] = 0x686F, [15332] = 0x68A3,
++  [15333] = 0x68AC, [15334] = 0x68A9, [15335] = 0x6875, [15336] = 0x6874,
++  [15337] = 0x68B2, [15338] = 0x688F, [15339] = 0x6877, [15340] = 0x6892,
++  [15341] = 0x687C, [15342] = 0x686B, [15343] = 0x6872, [15344] = 0x68AA,
++  [15345] = 0x6880, [15346] = 0x6871, [15347] = 0x687E, [15348] = 0x689B,
++  [15349] = 0x6896, [15350] = 0x688B, [15351] = 0x68A0, [15352] = 0x6889,
++  [15353] = 0x68A4, [15354] = 0x6878, [15355] = 0x687B, [15356] = 0x6891,
++  [15357] = 0x688C, [15358] = 0x688A, [15359] = 0x687D, [15360] = 0x6B36,
++  [15361] = 0x6B33, [15362] = 0x6B37, [15363] = 0x6B38, [15364] = 0x6B91,
++  [15365] = 0x6B8F, [15366] = 0x6B8D, [15367] = 0x6B8E, [15368] = 0x6B8C,
++  [15369] = 0x6C2A, [15370] = 0x6DC0, [15371] = 0x6DAB, [15372] = 0x6DB4,
++  [15373] = 0x6DB3, [15374] = 0x6E74, [15375] = 0x6DAC, [15376] = 0x6DE9,
++  [15377] = 0x6DE2, [15378] = 0x6DB7, [15379] = 0x6DF6, [15380] = 0x6DD4,
++  [15381] = 0x6E00, [15382] = 0x6DC8, [15383] = 0x6DE0, [15384] = 0x6DDF,
++  [15385] = 0x6DD6, [15386] = 0x6DBE, [15387] = 0x6DE5, [15388] = 0x6DDC,
++  [15389] = 0x6DDD, [15390] = 0x6DDB, [15391] = 0x6DF4, [15392] = 0x6DCA,
++  [15393] = 0x6DBD, [15394] = 0x6DED, [15395] = 0x6DF0, [15396] = 0x6DBA,
++  [15397] = 0x6DD5, [15398] = 0x6DC2, [15399] = 0x6DCF, [15400] = 0x6DC9,
++  [15405] = 0x6DD0, [15406] = 0x6DF2, [15407] = 0x6DD3, [15408] = 0x6DFD,
++  [15409] = 0x6DD7, [15410] = 0x6DCD, [15411] = 0x6DE3, [15412] = 0x6DBB,
++  [15413] = 0x70FA, [15414] = 0x710D, [15415] = 0x70F7, [15416] = 0x7117,
++  [15417] = 0x70F4, [15418] = 0x710C, [15419] = 0x70F0, [15420] = 0x7104,
++  [15421] = 0x70F3, [15422] = 0x7110, [15423] = 0x70FC, [15424] = 0x70FF,
++  [15425] = 0x7106, [15426] = 0x7113, [15427] = 0x7100, [15428] = 0x70F8,
++  [15429] = 0x70F6, [15430] = 0x710B, [15431] = 0x7102, [15432] = 0x710E,
++  [15433] = 0x727E, [15434] = 0x727B, [15435] = 0x727C, [15436] = 0x727F,
++  [15437] = 0x731D, [15438] = 0x7317, [15439] = 0x7307, [15440] = 0x7311,
++  [15441] = 0x7318, [15442] = 0x730A, [15443] = 0x7308, [15444] = 0x72FF,
++  [15445] = 0x730F, [15446] = 0x731E, [15447] = 0x7388, [15448] = 0x73F6,
++  [15449] = 0x73F8, [15450] = 0x73F5, [15451] = 0x7404, [15452] = 0x7401,
++  [15453] = 0x73FD, [15454] = 0x7407, [15455] = 0x7400, [15456] = 0x73FA,
++  [15457] = 0x73FC, [15458] = 0x73FF, [15459] = 0x740C, [15460] = 0x740B,
++  [15461] = 0x73F4, [15462] = 0x7408, [15463] = 0x7564, [15464] = 0x7563,
++  [15465] = 0x75CE, [15466] = 0x75D2, [15467] = 0x75CF, [15502] = 0x75CB,
++  [15503] = 0x75CC, [15504] = 0x75D1, [15505] = 0x75D0, [15506] = 0x768F,
++  [15507] = 0x7689, [15508] = 0x76D3, [15509] = 0x7739, [15510] = 0x772F,
++  [15511] = 0x772D, [15512] = 0x7731, [15513] = 0x7732, [15514] = 0x7734,
++  [15515] = 0x7733, [15516] = 0x773D, [15517] = 0x7725, [15518] = 0x773B,
++  [15519] = 0x7735, [15520] = 0x7848, [15521] = 0x7852, [15522] = 0x7849,
++  [15523] = 0x784D, [15524] = 0x784A, [15525] = 0x784C, [15526] = 0x7826,
++  [15527] = 0x7845, [15528] = 0x7850, [15529] = 0x7964, [15530] = 0x7967,
++  [15531] = 0x7969, [15532] = 0x796A, [15533] = 0x7963, [15534] = 0x796B,
++  [15535] = 0x7961, [15536] = 0x79BB, [15537] = 0x79FA, [15538] = 0x79F8,
++  [15539] = 0x79F6, [15540] = 0x79F7, [15541] = 0x7A8F, [15542] = 0x7A94,
++  [15543] = 0x7A90, [15544] = 0x7B35, [15545] = 0x7B47, [15546] = 0x7B34,
++  [15547] = 0x7B25, [15548] = 0x7B30, [15549] = 0x7B22, [15550] = 0x7B24,
++  [15551] = 0x7B33, [15552] = 0x7B18, [15553] = 0x7B2A, [15554] = 0x7B1D,
++  [15555] = 0x7B31, [15556] = 0x7B2B, [15557] = 0x7B2D, [15558] = 0x7B2F,
++  [15559] = 0x7B32, [15560] = 0x7B38, [15561] = 0x7B1A, [15562] = 0x7B23,
++  [15563] = 0x7C94, [15564] = 0x7C98, [15565] = 0x7C96, [15566] = 0x7CA3,
++  [15567] = 0x7D35, [15568] = 0x7D3D, [15569] = 0x7D38, [15570] = 0x7D36,
++  [15571] = 0x7D3A, [15572] = 0x7D45, [15573] = 0x7D2C, [15574] = 0x7D29,
++  [15575] = 0x7D41, [15576] = 0x7D47, [15577] = 0x7D3E, [15578] = 0x7D3F,
++  [15579] = 0x7D4A, [15580] = 0x7D3B, [15581] = 0x7D28, [15582] = 0x7F63,
++  [15583] = 0x7F95, [15584] = 0x7F9C, [15585] = 0x7F9D, [15586] = 0x7F9B,
++  [15587] = 0x7FCA, [15588] = 0x7FCB, [15589] = 0x7FCD, [15590] = 0x7FD0,
++  [15591] = 0x7FD1, [15592] = 0x7FC7, [15593] = 0x7FCF, [15594] = 0x7FC9,
++  [15595] = 0x801F, [15600] = 0x801E, [15601] = 0x801B, [15602] = 0x8047,
++  [15603] = 0x8043, [15604] = 0x8048, [15605] = 0x8118, [15606] = 0x8125,
++  [15607] = 0x8119, [15608] = 0x811B, [15609] = 0x812D, [15610] = 0x811F,
++  [15611] = 0x812C, [15612] = 0x811E, [15613] = 0x8121, [15614] = 0x8115,
++  [15615] = 0x8127, [15616] = 0x811D, [15617] = 0x8122, [15618] = 0x8211,
++  [15619] = 0x8238, [15620] = 0x8233, [15621] = 0x823A, [15622] = 0x8234,
++  [15623] = 0x8232, [15624] = 0x8274, [15625] = 0x8390, [15626] = 0x83A3,
++  [15627] = 0x83A8, [15628] = 0x838D, [15629] = 0x837A, [15630] = 0x8373,
++  [15631] = 0x83A4, [15632] = 0x8374, [15633] = 0x838F, [15634] = 0x8381,
++  [15635] = 0x8395, [15636] = 0x8399, [15637] = 0x8375, [15638] = 0x8394,
++  [15639] = 0x83A9, [15640] = 0x837D, [15641] = 0x8383, [15642] = 0x838C,
++  [15643] = 0x839D, [15644] = 0x839B, [15645] = 0x83AA, [15646] = 0x838B,
++  [15647] = 0x837E, [15648] = 0x83A5, [15649] = 0x83AF, [15650] = 0x8388,
++  [15651] = 0x8397, [15652] = 0x83B0, [15653] = 0x837F, [15654] = 0x83A6,
++  [15655] = 0x8387, [15656] = 0x83AE, [15657] = 0x8376, [15658] = 0x839A,
++  [15659] = 0x8659, [15660] = 0x8656, [15661] = 0x86BF, [15662] = 0x86B7,
++  [15697] = 0x86C2, [15698] = 0x86C1, [15699] = 0x86C5, [15700] = 0x86BA,
++  [15701] = 0x86B0, [15702] = 0x86C8, [15703] = 0x86B9, [15704] = 0x86B3,
++  [15705] = 0x86B8, [15706] = 0x86CC, [15707] = 0x86B4, [15708] = 0x86BB,
++  [15709] = 0x86BC, [15710] = 0x86C3, [15711] = 0x86BD, [15712] = 0x86BE,
++  [15713] = 0x8852, [15714] = 0x8889, [15715] = 0x8895, [15716] = 0x88A8,
++  [15717] = 0x88A2, [15718] = 0x88AA, [15719] = 0x889A, [15720] = 0x8891,
++  [15721] = 0x88A1, [15722] = 0x889F, [15723] = 0x8898, [15724] = 0x88A7,
++  [15725] = 0x8899, [15726] = 0x889B, [15727] = 0x8897, [15728] = 0x88A4,
++  [15729] = 0x88AC, [15730] = 0x888C, [15731] = 0x8893, [15732] = 0x888E,
++  [15733] = 0x8982, [15734] = 0x89D6, [15735] = 0x89D9, [15736] = 0x89D5,
++  [15737] = 0x8A30, [15738] = 0x8A27, [15739] = 0x8A2C, [15740] = 0x8A1E,
++  [15741] = 0x8C39, [15742] = 0x8C3B, [15743] = 0x8C5C, [15744] = 0x8C5D,
++  [15745] = 0x8C7D, [15746] = 0x8CA5, [15747] = 0x8D7D, [15748] = 0x8D7B,
++  [15749] = 0x8D79, [15750] = 0x8DBC, [15751] = 0x8DC2, [15752] = 0x8DB9,
++  [15753] = 0x8DBF, [15754] = 0x8DC1, [15755] = 0x8ED8, [15756] = 0x8EDE,
++  [15757] = 0x8EDD, [15758] = 0x8EDC, [15759] = 0x8ED7, [15760] = 0x8EE0,
++  [15761] = 0x8EE1, [15762] = 0x9024, [15763] = 0x900B, [15764] = 0x9011,
++  [15765] = 0x901C, [15766] = 0x900C, [15767] = 0x9021, [15768] = 0x90EF,
++  [15769] = 0x90EA, [15770] = 0x90F0, [15771] = 0x90F4, [15772] = 0x90F2,
++  [15773] = 0x90F3, [15774] = 0x90D4, [15775] = 0x90EB, [15776] = 0x90EC,
++  [15777] = 0x90E9, [15778] = 0x9156, [15779] = 0x9158, [15780] = 0x915A,
++  [15781] = 0x9153, [15782] = 0x9155, [15783] = 0x91EC, [15784] = 0x91F4,
++  [15785] = 0x91F1, [15786] = 0x91F3, [15787] = 0x91F8, [15788] = 0x91E4,
++  [15789] = 0x91F9, [15790] = 0x91EA, [15795] = 0x91EB, [15796] = 0x91F7,
++  [15797] = 0x91E8, [15798] = 0x91EE, [15799] = 0x957A, [15800] = 0x9586,
++  [15801] = 0x9588, [15802] = 0x967C, [15803] = 0x966D, [15804] = 0x966B,
++  [15805] = 0x9671, [15806] = 0x966F, [15807] = 0x96BF, [15808] = 0x976A,
++  [15809] = 0x9804, [15810] = 0x98E5, [15811] = 0x9997, [15812] = 0x509B,
++  [15813] = 0x5095, [15814] = 0x5094, [15815] = 0x509E, [15816] = 0x508B,
++  [15817] = 0x50A3, [15818] = 0x5083, [15819] = 0x508C, [15820] = 0x508E,
++  [15821] = 0x509D, [15822] = 0x5068, [15823] = 0x509C, [15824] = 0x5092,
++  [15825] = 0x5082, [15826] = 0x5087, [15827] = 0x515F, [15828] = 0x51D4,
++  [15829] = 0x5312, [15830] = 0x5311, [15831] = 0x53A4, [15832] = 0x53A7,
++  [15833] = 0x5591, [15834] = 0x55A8, [15835] = 0x55A5, [15836] = 0x55AD,
++  [15837] = 0x5577, [15838] = 0x5645, [15839] = 0x55A2, [15840] = 0x5593,
++  [15841] = 0x5588, [15842] = 0x558F, [15843] = 0x55B5, [15844] = 0x5581,
++  [15845] = 0x55A3, [15846] = 0x5592, [15847] = 0x55A4, [15848] = 0x557D,
++  [15849] = 0x558C, [15850] = 0x55A6, [15851] = 0x557F, [15852] = 0x5595,
++  [15853] = 0x55A1, [15854] = 0x558E, [15855] = 0x570C, [15856] = 0x5829,
++  [15857] = 0x5837, [15892] = 0x5819, [15893] = 0x581E, [15894] = 0x5827,
++  [15895] = 0x5823, [15896] = 0x5828, [15897] = 0x57F5, [15898] = 0x5848,
++  [15899] = 0x5825, [15900] = 0x581C, [15901] = 0x581B, [15902] = 0x5833,
++  [15903] = 0x583F, [15904] = 0x5836, [15905] = 0x582E, [15906] = 0x5839,
++  [15907] = 0x5838, [15908] = 0x582D, [15909] = 0x582C, [15910] = 0x583B,
++  [15911] = 0x5961, [15912] = 0x5AAF, [15913] = 0x5A94, [15914] = 0x5A9F,
++  [15915] = 0x5A7A, [15916] = 0x5AA2, [15917] = 0x5A9E, [15918] = 0x5A78,
++  [15919] = 0x5AA6, [15920] = 0x5A7C, [15921] = 0x5AA5, [15922] = 0x5AAC,
++  [15923] = 0x5A95, [15924] = 0x5AAE, [15925] = 0x5A37, [15926] = 0x5A84,
++  [15927] = 0x5A8A, [15928] = 0x5A97, [15929] = 0x5A83, [15930] = 0x5A8B,
++  [15931] = 0x5AA9, [15932] = 0x5A7B, [15933] = 0x5A7D, [15934] = 0x5A8C,
++  [15935] = 0x5A9C, [15936] = 0x5A8F, [15937] = 0x5A93, [15938] = 0x5A9D,
++  [15939] = 0x5BEA, [15940] = 0x5BCD, [15941] = 0x5BCB, [15942] = 0x5BD4,
++  [15943] = 0x5BD1, [15944] = 0x5BCA, [15945] = 0x5BCE, [15946] = 0x5C0C,
++  [15947] = 0x5C30, [15948] = 0x5D37, [15949] = 0x5D43, [15950] = 0x5D6B,
++  [15951] = 0x5D41, [15952] = 0x5D4B, [15953] = 0x5D3F, [15954] = 0x5D35,
++  [15955] = 0x5D51, [15956] = 0x5D4E, [15957] = 0x5D55, [15958] = 0x5D33,
++  [15959] = 0x5D3A, [15960] = 0x5D52, [15961] = 0x5D3D, [15962] = 0x5D31,
++  [15963] = 0x5D59, [15964] = 0x5D42, [15965] = 0x5D39, [15966] = 0x5D49,
++  [15967] = 0x5D38, [15968] = 0x5D3C, [15969] = 0x5D32, [15970] = 0x5D36,
++  [15971] = 0x5D40, [15972] = 0x5D45, [15973] = 0x5E44, [15974] = 0x5E41,
++  [15975] = 0x5F58, [15976] = 0x5FA6, [15977] = 0x5FA5, [15978] = 0x5FAB,
++  [15979] = 0x60C9, [15980] = 0x60B9, [15981] = 0x60CC, [15982] = 0x60E2,
++  [15983] = 0x60CE, [15984] = 0x60C4, [15985] = 0x6114, [15990] = 0x60F2,
++  [15991] = 0x610A, [15992] = 0x6116, [15993] = 0x6105, [15994] = 0x60F5,
++  [15995] = 0x6113, [15996] = 0x60F8, [15997] = 0x60FC, [15998] = 0x60FE,
++  [15999] = 0x60C1, [16000] = 0x6103, [16001] = 0x6118, [16002] = 0x611D,
++  [16003] = 0x6110, [16004] = 0x60FF, [16005] = 0x6104, [16006] = 0x610B,
++  [16007] = 0x624A, [16008] = 0x6394, [16009] = 0x63B1, [16010] = 0x63B0,
++  [16011] = 0x63CE, [16012] = 0x63E5, [16013] = 0x63E8, [16014] = 0x63EF,
++  [16015] = 0x63C3, [16016] = 0x649D, [16017] = 0x63F3, [16018] = 0x63CA,
++  [16019] = 0x63E0, [16020] = 0x63F6, [16021] = 0x63D5, [16022] = 0x63F2,
++  [16023] = 0x63F5, [16024] = 0x6461, [16025] = 0x63DF, [16026] = 0x63BE,
++  [16027] = 0x63DD, [16028] = 0x63DC, [16029] = 0x63C4, [16030] = 0x63D8,
++  [16031] = 0x63D3, [16032] = 0x63C2, [16033] = 0x63C7, [16034] = 0x63CC,
++  [16035] = 0x63CB, [16036] = 0x63C8, [16037] = 0x63F0, [16038] = 0x63D7,
++  [16039] = 0x63D9, [16040] = 0x6532, [16041] = 0x6567, [16042] = 0x656A,
++  [16043] = 0x6564, [16044] = 0x655C, [16045] = 0x6568, [16046] = 0x6565,
++  [16047] = 0x658C, [16048] = 0x659D, [16049] = 0x659E, [16050] = 0x65AE,
++  [16051] = 0x65D0, [16052] = 0x65D2, [16087] = 0x667C, [16088] = 0x666C,
++  [16089] = 0x667B, [16090] = 0x6680, [16091] = 0x6671, [16092] = 0x6679,
++  [16093] = 0x666A, [16094] = 0x6672, [16095] = 0x6701, [16096] = 0x690C,
++  [16097] = 0x68D3, [16098] = 0x6904, [16099] = 0x68DC, [16100] = 0x692A,
++  [16101] = 0x68EC, [16102] = 0x68EA, [16103] = 0x68F1, [16104] = 0x690F,
++  [16105] = 0x68D6, [16106] = 0x68F7, [16107] = 0x68EB, [16108] = 0x68E4,
++  [16109] = 0x68F6, [16110] = 0x6913, [16111] = 0x6910, [16112] = 0x68F3,
++  [16113] = 0x68E1, [16114] = 0x6907, [16115] = 0x68CC, [16116] = 0x6908,
++  [16117] = 0x6970, [16118] = 0x68B4, [16119] = 0x6911, [16120] = 0x68EF,
++  [16121] = 0x68C6, [16122] = 0x6914, [16123] = 0x68F8, [16124] = 0x68D0,
++  [16125] = 0x68FD, [16126] = 0x68FC, [16127] = 0x68E8, [16128] = 0x690B,
++  [16129] = 0x690A, [16130] = 0x6917, [16131] = 0x68CE, [16132] = 0x68C8,
++  [16133] = 0x68DD, [16134] = 0x68DE, [16135] = 0x68E6, [16136] = 0x68F4,
++  [16137] = 0x68D1, [16138] = 0x6906, [16139] = 0x68D4, [16140] = 0x68E9,
++  [16141] = 0x6915, [16142] = 0x6925, [16143] = 0x68C7, [16144] = 0x6B39,
++  [16145] = 0x6B3B, [16146] = 0x6B3F, [16147] = 0x6B3C, [16148] = 0x6B94,
++  [16149] = 0x6B97, [16150] = 0x6B99, [16151] = 0x6B95, [16152] = 0x6BBD,
++  [16153] = 0x6BF0, [16154] = 0x6BF2, [16155] = 0x6BF3, [16156] = 0x6C30,
++  [16157] = 0x6DFC, [16158] = 0x6E46, [16159] = 0x6E47, [16160] = 0x6E1F,
++  [16161] = 0x6E49, [16162] = 0x6E88, [16163] = 0x6E3C, [16164] = 0x6E3D,
++  [16165] = 0x6E45, [16166] = 0x6E62, [16167] = 0x6E2B, [16168] = 0x6E3F,
++  [16169] = 0x6E41, [16170] = 0x6E5D, [16171] = 0x6E73, [16172] = 0x6E1C,
++  [16173] = 0x6E33, [16174] = 0x6E4B, [16175] = 0x6E40, [16176] = 0x6E51,
++  [16177] = 0x6E3B, [16178] = 0x6E03, [16179] = 0x6E2E, [16180] = 0x6E5E,
++  [16185] = 0x6E68, [16186] = 0x6E5C, [16187] = 0x6E61, [16188] = 0x6E31,
++  [16189] = 0x6E28, [16190] = 0x6E60, [16191] = 0x6E71, [16192] = 0x6E6B,
++  [16193] = 0x6E39, [16194] = 0x6E22, [16195] = 0x6E30, [16196] = 0x6E53,
++  [16197] = 0x6E65, [16198] = 0x6E27, [16199] = 0x6E78, [16200] = 0x6E64,
++  [16201] = 0x6E77, [16202] = 0x6E55, [16203] = 0x6E79, [16204] = 0x6E52,
++  [16205] = 0x6E66, [16206] = 0x6E35, [16207] = 0x6E36, [16208] = 0x6E5A,
++  [16209] = 0x7120, [16210] = 0x711E, [16211] = 0x712F, [16212] = 0x70FB,
++  [16213] = 0x712E, [16214] = 0x7131, [16215] = 0x7123, [16216] = 0x7125,
++  [16217] = 0x7122, [16218] = 0x7132, [16219] = 0x711F, [16220] = 0x7128,
++  [16221] = 0x713A, [16222] = 0x711B, [16223] = 0x724B, [16224] = 0x725A,
++  [16225] = 0x7288, [16226] = 0x7289, [16227] = 0x7286, [16228] = 0x7285,
++  [16229] = 0x728B, [16230] = 0x7312, [16231] = 0x730B, [16232] = 0x7330,
++  [16233] = 0x7322, [16234] = 0x7331, [16235] = 0x7333, [16236] = 0x7327,
++  [16237] = 0x7332, [16238] = 0x732D, [16239] = 0x7326, [16240] = 0x7323,
++  [16241] = 0x7335, [16242] = 0x730C, [16243] = 0x742E, [16244] = 0x742C,
++  [16245] = 0x7430, [16246] = 0x742B, [16247] = 0x7416, [16282] = 0x741A,
++  [16283] = 0x7421, [16284] = 0x742D, [16285] = 0x7431, [16286] = 0x7424,
++  [16287] = 0x7423, [16288] = 0x741D, [16289] = 0x7429, [16290] = 0x7420,
++  [16291] = 0x7432, [16292] = 0x74FB, [16293] = 0x752F, [16294] = 0x756F,
++  [16295] = 0x756C, [16296] = 0x75E7, [16297] = 0x75DA, [16298] = 0x75E1,
++  [16299] = 0x75E6, [16300] = 0x75DD, [16301] = 0x75DF, [16302] = 0x75E4,
++  [16303] = 0x75D7, [16304] = 0x7695, [16305] = 0x7692, [16306] = 0x76DA,
++  [16307] = 0x7746, [16308] = 0x7747, [16309] = 0x7744, [16310] = 0x774D,
++  [16311] = 0x7745, [16312] = 0x774A, [16313] = 0x774E, [16314] = 0x774B,
++  [16315] = 0x774C, [16316] = 0x77DE, [16317] = 0x77EC, [16318] = 0x7860,
++  [16319] = 0x7864, [16320] = 0x7865, [16321] = 0x785C, [16322] = 0x786D,
++  [16323] = 0x7871, [16324] = 0x786A, [16325] = 0x786E, [16326] = 0x7870,
++  [16327] = 0x7869, [16328] = 0x7868, [16329] = 0x785E, [16330] = 0x7862,
++  [16331] = 0x7974, [16332] = 0x7973, [16333] = 0x7972, [16334] = 0x7970,
++  [16335] = 0x7A02, [16336] = 0x7A0A, [16337] = 0x7A03, [16338] = 0x7A0C,
++  [16339] = 0x7A04, [16340] = 0x7A99, [16341] = 0x7AE6, [16342] = 0x7AE4,
++  [16343] = 0x7B4A, [16344] = 0x7B3B, [16345] = 0x7B44, [16346] = 0x7B48,
++  [16347] = 0x7B4C, [16348] = 0x7B4E, [16349] = 0x7B40, [16350] = 0x7B58,
++  [16351] = 0x7B45, [16352] = 0x7CA2, [16353] = 0x7C9E, [16354] = 0x7CA8,
++  [16355] = 0x7CA1, [16356] = 0x7D58, [16357] = 0x7D6F, [16358] = 0x7D63,
++  [16359] = 0x7D53, [16360] = 0x7D56, [16361] = 0x7D67, [16362] = 0x7D6A,
++  [16363] = 0x7D4F, [16364] = 0x7D6D, [16365] = 0x7D5C, [16366] = 0x7D6B,
++  [16367] = 0x7D52, [16368] = 0x7D54, [16369] = 0x7D69, [16370] = 0x7D51,
++  [16371] = 0x7D5F, [16372] = 0x7D4E, [16373] = 0x7F3E, [16374] = 0x7F3F,
++  [16375] = 0x7F65, [16380] = 0x7F66, [16381] = 0x7FA2, [16382] = 0x7FA0,
++  [16383] = 0x7FA1, [16384] = 0x7FD7, [16385] = 0x8051, [16386] = 0x804F,
++  [16387] = 0x8050, [16388] = 0x80FE, [16389] = 0x80D4, [16390] = 0x8143,
++  [16391] = 0x814A, [16392] = 0x8152, [16393] = 0x814F, [16394] = 0x8147,
++  [16395] = 0x813D, [16396] = 0x814D, [16397] = 0x813A, [16398] = 0x81E6,
++  [16399] = 0x81EE, [16400] = 0x81F7, [16401] = 0x81F8, [16402] = 0x81F9,
++  [16403] = 0x8204, [16404] = 0x823C, [16405] = 0x823D, [16406] = 0x823F,
++  [16407] = 0x8275, [16408] = 0x833B, [16409] = 0x83CF, [16410] = 0x83F9,
++  [16411] = 0x8423, [16412] = 0x83C0, [16413] = 0x83E8, [16414] = 0x8412,
++  [16415] = 0x83E7, [16416] = 0x83E4, [16417] = 0x83FC, [16418] = 0x83F6,
++  [16419] = 0x8410, [16420] = 0x83C6, [16421] = 0x83C8, [16422] = 0x83EB,
++  [16423] = 0x83E3, [16424] = 0x83BF, [16425] = 0x8401, [16426] = 0x83DD,
++  [16427] = 0x83E5, [16428] = 0x83D8, [16429] = 0x83FF, [16430] = 0x83E1,
++  [16431] = 0x83CB, [16432] = 0x83CE, [16433] = 0x83D6, [16434] = 0x83F5,
++  [16435] = 0x83C9, [16436] = 0x8409, [16437] = 0x840F, [16438] = 0x83DE,
++  [16439] = 0x8411, [16440] = 0x8406, [16441] = 0x83C2, [16442] = 0x83F3,
++  [16477] = 0x83D5, [16478] = 0x83FA, [16479] = 0x83C7, [16480] = 0x83D1,
++  [16481] = 0x83EA, [16482] = 0x8413, [16483] = 0x83C3, [16484] = 0x83EC,
++  [16485] = 0x83EE, [16486] = 0x83C4, [16487] = 0x83FB, [16488] = 0x83D7,
++  [16489] = 0x83E2, [16490] = 0x841B, [16491] = 0x83DB, [16492] = 0x83FE,
++  [16493] = 0x86D8, [16494] = 0x86E2, [16495] = 0x86E6, [16496] = 0x86D3,
++  [16497] = 0x86E3, [16498] = 0x86DA, [16499] = 0x86EA, [16500] = 0x86DD,
++  [16501] = 0x86EB, [16502] = 0x86DC, [16503] = 0x86EC, [16504] = 0x86E9,
++  [16505] = 0x86D7, [16506] = 0x86E8, [16507] = 0x86D1, [16508] = 0x8848,
++  [16509] = 0x8856, [16510] = 0x8855, [16511] = 0x88BA, [16512] = 0x88D7,
++  [16513] = 0x88B9, [16514] = 0x88B8, [16515] = 0x88C0, [16516] = 0x88BE,
++  [16517] = 0x88B6, [16518] = 0x88BC, [16519] = 0x88B7, [16520] = 0x88BD,
++  [16521] = 0x88B2, [16522] = 0x8901, [16523] = 0x88C9, [16524] = 0x8995,
++  [16525] = 0x8998, [16526] = 0x8997, [16527] = 0x89DD, [16528] = 0x89DA,
++  [16529] = 0x89DB, [16530] = 0x8A4E, [16531] = 0x8A4D, [16532] = 0x8A39,
++  [16533] = 0x8A59, [16534] = 0x8A40, [16535] = 0x8A57, [16536] = 0x8A58,
++  [16537] = 0x8A44, [16538] = 0x8A45, [16539] = 0x8A52, [16540] = 0x8A48,
++  [16541] = 0x8A51, [16542] = 0x8A4A, [16543] = 0x8A4C, [16544] = 0x8A4F,
++  [16545] = 0x8C5F, [16546] = 0x8C81, [16547] = 0x8C80, [16548] = 0x8CBA,
++  [16549] = 0x8CBE, [16550] = 0x8CB0, [16551] = 0x8CB9, [16552] = 0x8CB5,
++  [16553] = 0x8D84, [16554] = 0x8D80, [16555] = 0x8D89, [16556] = 0x8DD8,
++  [16557] = 0x8DD3, [16558] = 0x8DCD, [16559] = 0x8DC7, [16560] = 0x8DD6,
++  [16561] = 0x8DDC, [16562] = 0x8DCF, [16563] = 0x8DD5, [16564] = 0x8DD9,
++  [16565] = 0x8DC8, [16566] = 0x8DD7, [16567] = 0x8DC5, [16568] = 0x8EEF,
++  [16569] = 0x8EF7, [16570] = 0x8EFA, [16575] = 0x8EF9, [16576] = 0x8EE6,
++  [16577] = 0x8EEE, [16578] = 0x8EE5, [16579] = 0x8EF5, [16580] = 0x8EE7,
++  [16581] = 0x8EE8, [16582] = 0x8EF6, [16583] = 0x8EEB, [16584] = 0x8EF1,
++  [16585] = 0x8EEC, [16586] = 0x8EF4, [16587] = 0x8EE9, [16588] = 0x902D,
++  [16589] = 0x9034, [16590] = 0x902F, [16591] = 0x9106, [16592] = 0x912C,
++  [16593] = 0x9104, [16594] = 0x90FF, [16595] = 0x90FC, [16596] = 0x9108,
++  [16597] = 0x90F9, [16598] = 0x90FB, [16599] = 0x9101, [16600] = 0x9100,
++  [16601] = 0x9107, [16602] = 0x9105, [16603] = 0x9103, [16604] = 0x9161,
++  [16605] = 0x9164, [16606] = 0x915F, [16607] = 0x9162, [16608] = 0x9160,
++  [16609] = 0x9201, [16610] = 0x920A, [16611] = 0x9225, [16612] = 0x9203,
++  [16613] = 0x921A, [16614] = 0x9226, [16615] = 0x920F, [16616] = 0x920C,
++  [16617] = 0x9200, [16618] = 0x9212, [16619] = 0x91FF, [16620] = 0x91FD,
++  [16621] = 0x9206, [16622] = 0x9204, [16623] = 0x9227, [16624] = 0x9202,
++  [16625] = 0x921C, [16626] = 0x9224, [16627] = 0x9219, [16628] = 0x9217,
++  [16629] = 0x9205, [16630] = 0x9216, [16631] = 0x957B, [16632] = 0x958D,
++  [16633] = 0x958C, [16634] = 0x9590, [16635] = 0x9687, [16636] = 0x967E,
++  [16637] = 0x9688, [16672] = 0x9689, [16673] = 0x9683, [16674] = 0x9680,
++  [16675] = 0x96C2, [16676] = 0x96C8, [16677] = 0x96C3, [16678] = 0x96F1,
++  [16679] = 0x96F0, [16680] = 0x976C, [16681] = 0x9770, [16682] = 0x976E,
++  [16683] = 0x9807, [16684] = 0x98A9, [16685] = 0x98EB, [16686] = 0x9CE6,
++  [16687] = 0x9EF9, [16688] = 0x4E83, [16689] = 0x4E84, [16690] = 0x4EB6,
++  [16691] = 0x50BD, [16692] = 0x50BF, [16693] = 0x50C6, [16694] = 0x50AE,
++  [16695] = 0x50C4, [16696] = 0x50CA, [16697] = 0x50B4, [16698] = 0x50C8,
++  [16699] = 0x50C2, [16700] = 0x50B0, [16701] = 0x50C1, [16702] = 0x50BA,
++  [16703] = 0x50B1, [16704] = 0x50CB, [16705] = 0x50C9, [16706] = 0x50B6,
++  [16707] = 0x50B8, [16708] = 0x51D7, [16709] = 0x527A, [16710] = 0x5278,
++  [16711] = 0x527B, [16712] = 0x527C, [16713] = 0x55C3, [16714] = 0x55DB,
++  [16715] = 0x55CC, [16716] = 0x55D0, [16717] = 0x55CB, [16718] = 0x55CA,
++  [16719] = 0x55DD, [16720] = 0x55C0, [16721] = 0x55D4, [16722] = 0x55C4,
++  [16723] = 0x55E9, [16724] = 0x55BF, [16725] = 0x55D2, [16726] = 0x558D,
++  [16727] = 0x55CF, [16728] = 0x55D5, [16729] = 0x55E2, [16730] = 0x55D6,
++  [16731] = 0x55C8, [16732] = 0x55F2, [16733] = 0x55CD, [16734] = 0x55D9,
++  [16735] = 0x55C2, [16736] = 0x5714, [16737] = 0x5853, [16738] = 0x5868,
++  [16739] = 0x5864, [16740] = 0x584F, [16741] = 0x584D, [16742] = 0x5849,
++  [16743] = 0x586F, [16744] = 0x5855, [16745] = 0x584E, [16746] = 0x585D,
++  [16747] = 0x5859, [16748] = 0x5865, [16749] = 0x585B, [16750] = 0x583D,
++  [16751] = 0x5863, [16752] = 0x5871, [16753] = 0x58FC, [16754] = 0x5AC7,
++  [16755] = 0x5AC4, [16756] = 0x5ACB, [16757] = 0x5ABA, [16758] = 0x5AB8,
++  [16759] = 0x5AB1, [16760] = 0x5AB5, [16761] = 0x5AB0, [16762] = 0x5ABF,
++  [16763] = 0x5AC8, [16764] = 0x5ABB, [16765] = 0x5AC6, [16770] = 0x5AB7,
++  [16771] = 0x5AC0, [16772] = 0x5ACA, [16773] = 0x5AB4, [16774] = 0x5AB6,
++  [16775] = 0x5ACD, [16776] = 0x5AB9, [16777] = 0x5A90, [16778] = 0x5BD6,
++  [16779] = 0x5BD8, [16780] = 0x5BD9, [16781] = 0x5C1F, [16782] = 0x5C33,
++  [16783] = 0x5D71, [16784] = 0x5D63, [16785] = 0x5D4A, [16786] = 0x5D65,
++  [16787] = 0x5D72, [16788] = 0x5D6C, [16789] = 0x5D5E, [16790] = 0x5D68,
++  [16791] = 0x5D67, [16792] = 0x5D62, [16793] = 0x5DF0, [16794] = 0x5E4F,
++  [16795] = 0x5E4E, [16796] = 0x5E4A, [16797] = 0x5E4D, [16798] = 0x5E4B,
++  [16799] = 0x5EC5, [16800] = 0x5ECC, [16801] = 0x5EC6, [16802] = 0x5ECB,
++  [16803] = 0x5EC7, [16804] = 0x5F40, [16805] = 0x5FAF, [16806] = 0x5FAD,
++  [16807] = 0x60F7, [16808] = 0x6149, [16809] = 0x614A, [16810] = 0x612B,
++  [16811] = 0x6145, [16812] = 0x6136, [16813] = 0x6132, [16814] = 0x612E,
++  [16815] = 0x6146, [16816] = 0x612F, [16817] = 0x614F, [16818] = 0x6129,
++  [16819] = 0x6140, [16820] = 0x6220, [16821] = 0x9168, [16822] = 0x6223,
++  [16823] = 0x6225, [16824] = 0x6224, [16825] = 0x63C5, [16826] = 0x63F1,
++  [16827] = 0x63EB, [16828] = 0x6410, [16829] = 0x6412, [16830] = 0x6409,
++  [16831] = 0x6420, [16832] = 0x6424, [16867] = 0x6433, [16868] = 0x6443,
++  [16869] = 0x641F, [16870] = 0x6415, [16871] = 0x6418, [16872] = 0x6439,
++  [16873] = 0x6437, [16874] = 0x6422, [16875] = 0x6423, [16876] = 0x640C,
++  [16877] = 0x6426, [16878] = 0x6430, [16879] = 0x6428, [16880] = 0x6441,
++  [16881] = 0x6435, [16882] = 0x642F, [16883] = 0x640A, [16884] = 0x641A,
++  [16885] = 0x6440, [16886] = 0x6425, [16887] = 0x6427, [16888] = 0x640B,
++  [16889] = 0x63E7, [16890] = 0x641B, [16891] = 0x642E, [16892] = 0x6421,
++  [16893] = 0x640E, [16894] = 0x656F, [16895] = 0x6592, [16896] = 0x65D3,
++  [16897] = 0x6686, [16898] = 0x668C, [16899] = 0x6695, [16900] = 0x6690,
++  [16901] = 0x668B, [16902] = 0x668A, [16903] = 0x6699, [16904] = 0x6694,
++  [16905] = 0x6678, [16906] = 0x6720, [16907] = 0x6966, [16908] = 0x695F,
++  [16909] = 0x6938, [16910] = 0x694E, [16911] = 0x6962, [16912] = 0x6971,
++  [16913] = 0x693F, [16914] = 0x6945, [16915] = 0x696A, [16916] = 0x6939,
++  [16917] = 0x6942, [16918] = 0x6957, [16919] = 0x6959, [16920] = 0x697A,
++  [16921] = 0x6948, [16922] = 0x6949, [16923] = 0x6935, [16924] = 0x696C,
++  [16925] = 0x6933, [16926] = 0x693D, [16927] = 0x6965, [16928] = 0x68F0,
++  [16929] = 0x6978, [16930] = 0x6934, [16931] = 0x6969, [16932] = 0x6940,
++  [16933] = 0x696F, [16934] = 0x6944, [16935] = 0x6976, [16936] = 0x6958,
++  [16937] = 0x6941, [16938] = 0x6974, [16939] = 0x694C, [16940] = 0x693B,
++  [16941] = 0x694B, [16942] = 0x6937, [16943] = 0x695C, [16944] = 0x694F,
++  [16945] = 0x6951, [16946] = 0x6932, [16947] = 0x6952, [16948] = 0x692F,
++  [16949] = 0x697B, [16950] = 0x693C, [16951] = 0x6B46, [16952] = 0x6B45,
++  [16953] = 0x6B43, [16954] = 0x6B42, [16955] = 0x6B48, [16956] = 0x6B41,
++  [16957] = 0x6B9B, [16958] = 0xFA0D, [16959] = 0x6BFB, [16960] = 0x6BFC,
++  [16965] = 0x6BF9, [16966] = 0x6BF7, [16967] = 0x6BF8, [16968] = 0x6E9B,
++  [16969] = 0x6ED6, [16970] = 0x6EC8, [16971] = 0x6E8F, [16972] = 0x6EC0,
++  [16973] = 0x6E9F, [16974] = 0x6E93, [16975] = 0x6E94, [16976] = 0x6EA0,
++  [16977] = 0x6EB1, [16978] = 0x6EB9, [16979] = 0x6EC6, [16980] = 0x6ED2,
++  [16981] = 0x6EBD, [16982] = 0x6EC1, [16983] = 0x6E9E, [16984] = 0x6EC9,
++  [16985] = 0x6EB7, [16986] = 0x6EB0, [16987] = 0x6ECD, [16988] = 0x6EA6,
++  [16989] = 0x6ECF, [16990] = 0x6EB2, [16991] = 0x6EBE, [16992] = 0x6EC3,
++  [16993] = 0x6EDC, [16994] = 0x6ED8, [16995] = 0x6E99, [16996] = 0x6E92,
++  [16997] = 0x6E8E, [16998] = 0x6E8D, [16999] = 0x6EA4, [17000] = 0x6EA1,
++  [17001] = 0x6EBF, [17002] = 0x6EB3, [17003] = 0x6ED0, [17004] = 0x6ECA,
++  [17005] = 0x6E97, [17006] = 0x6EAE, [17007] = 0x6EA3, [17008] = 0x7147,
++  [17009] = 0x7154, [17010] = 0x7152, [17011] = 0x7163, [17012] = 0x7160,
++  [17013] = 0x7141, [17014] = 0x715D, [17015] = 0x7162, [17016] = 0x7172,
++  [17017] = 0x7178, [17018] = 0x716A, [17019] = 0x7161, [17020] = 0x7142,
++  [17021] = 0x7158, [17022] = 0x7143, [17023] = 0x714B, [17024] = 0x7170,
++  [17025] = 0x715F, [17026] = 0x7150, [17027] = 0x7153, [17062] = 0x7144,
++  [17063] = 0x714D, [17064] = 0x715A, [17065] = 0x724F, [17066] = 0x728D,
++  [17067] = 0x728C, [17068] = 0x7291, [17069] = 0x7290, [17070] = 0x728E,
++  [17071] = 0x733C, [17072] = 0x7342, [17073] = 0x733B, [17074] = 0x733A,
++  [17075] = 0x7340, [17076] = 0x734A, [17077] = 0x7349, [17078] = 0x7444,
++  [17079] = 0x744A, [17080] = 0x744B, [17081] = 0x7452, [17082] = 0x7451,
++  [17083] = 0x7457, [17084] = 0x7440, [17085] = 0x744F, [17086] = 0x7450,
++  [17087] = 0x744E, [17088] = 0x7442, [17089] = 0x7446, [17090] = 0x744D,
++  [17091] = 0x7454, [17092] = 0x74E1, [17093] = 0x74FF, [17094] = 0x74FE,
++  [17095] = 0x74FD, [17096] = 0x751D, [17097] = 0x7579, [17098] = 0x7577,
++  [17099] = 0x6983, [17100] = 0x75EF, [17101] = 0x760F, [17102] = 0x7603,
++  [17103] = 0x75F7, [17104] = 0x75FE, [17105] = 0x75FC, [17106] = 0x75F9,
++  [17107] = 0x75F8, [17108] = 0x7610, [17109] = 0x75FB, [17110] = 0x75F6,
++  [17111] = 0x75ED, [17112] = 0x75F5, [17113] = 0x75FD, [17114] = 0x7699,
++  [17115] = 0x76B5, [17116] = 0x76DD, [17117] = 0x7755, [17118] = 0x775F,
++  [17119] = 0x7760, [17120] = 0x7752, [17121] = 0x7756, [17122] = 0x775A,
++  [17123] = 0x7769, [17124] = 0x7767, [17125] = 0x7754, [17126] = 0x7759,
++  [17127] = 0x776D, [17128] = 0x77E0, [17129] = 0x7887, [17130] = 0x789A,
++  [17131] = 0x7894, [17132] = 0x788F, [17133] = 0x7884, [17134] = 0x7895,
++  [17135] = 0x7885, [17136] = 0x7886, [17137] = 0x78A1, [17138] = 0x7883,
++  [17139] = 0x7879, [17140] = 0x7899, [17141] = 0x7880, [17142] = 0x7896,
++  [17143] = 0x787B, [17144] = 0x797C, [17145] = 0x7982, [17146] = 0x797D,
++  [17147] = 0x7979, [17148] = 0x7A11, [17149] = 0x7A18, [17150] = 0x7A19,
++  [17151] = 0x7A12, [17152] = 0x7A17, [17153] = 0x7A15, [17154] = 0x7A22,
++  [17155] = 0x7A13, [17160] = 0x7A1B, [17161] = 0x7A10, [17162] = 0x7AA3,
++  [17163] = 0x7AA2, [17164] = 0x7A9E, [17165] = 0x7AEB, [17166] = 0x7B66,
++  [17167] = 0x7B64, [17168] = 0x7B6D, [17169] = 0x7B74, [17170] = 0x7B69,
++  [17171] = 0x7B72, [17172] = 0x7B65, [17173] = 0x7B73, [17174] = 0x7B71,
++  [17175] = 0x7B70, [17176] = 0x7B61, [17177] = 0x7B78, [17178] = 0x7B76,
++  [17179] = 0x7B63, [17180] = 0x7CB2, [17181] = 0x7CB4, [17182] = 0x7CAF,
++  [17183] = 0x7D88, [17184] = 0x7D86, [17185] = 0x7D80, [17186] = 0x7D8D,
++  [17187] = 0x7D7F, [17188] = 0x7D85, [17189] = 0x7D7A, [17190] = 0x7D8E,
++  [17191] = 0x7D7B, [17192] = 0x7D83, [17193] = 0x7D7C, [17194] = 0x7D8C,
++  [17195] = 0x7D94, [17196] = 0x7D84, [17197] = 0x7D7D, [17198] = 0x7D92,
++  [17199] = 0x7F6D, [17200] = 0x7F6B, [17201] = 0x7F67, [17202] = 0x7F68,
++  [17203] = 0x7F6C, [17204] = 0x7FA6, [17205] = 0x7FA5, [17206] = 0x7FA7,
++  [17207] = 0x7FDB, [17208] = 0x7FDC, [17209] = 0x8021, [17210] = 0x8164,
++  [17211] = 0x8160, [17212] = 0x8177, [17213] = 0x815C, [17214] = 0x8169,
++  [17215] = 0x815B, [17216] = 0x8162, [17217] = 0x8172, [17218] = 0x6721,
++  [17219] = 0x815E, [17220] = 0x8176, [17221] = 0x8167, [17222] = 0x816F,
++  [17257] = 0x8144, [17258] = 0x8161, [17259] = 0x821D, [17260] = 0x8249,
++  [17261] = 0x8244, [17262] = 0x8240, [17263] = 0x8242, [17264] = 0x8245,
++  [17265] = 0x84F1, [17266] = 0x843F, [17267] = 0x8456, [17268] = 0x8476,
++  [17269] = 0x8479, [17270] = 0x848F, [17271] = 0x848D, [17272] = 0x8465,
++  [17273] = 0x8451, [17274] = 0x8440, [17275] = 0x8486, [17276] = 0x8467,
++  [17277] = 0x8430, [17278] = 0x844D, [17279] = 0x847D, [17280] = 0x845A,
++  [17281] = 0x8459, [17282] = 0x8474, [17283] = 0x8473, [17284] = 0x845D,
++  [17285] = 0x8507, [17286] = 0x845E, [17287] = 0x8437, [17288] = 0x843A,
++  [17289] = 0x8434, [17290] = 0x847A, [17291] = 0x8443, [17292] = 0x8478,
++  [17293] = 0x8432, [17294] = 0x8445, [17295] = 0x8429, [17296] = 0x83D9,
++  [17297] = 0x844B, [17298] = 0x842F, [17299] = 0x8442, [17300] = 0x842D,
++  [17301] = 0x845F, [17302] = 0x8470, [17303] = 0x8439, [17304] = 0x844E,
++  [17305] = 0x844C, [17306] = 0x8452, [17307] = 0x846F, [17308] = 0x84C5,
++  [17309] = 0x848E, [17310] = 0x843B, [17311] = 0x8447, [17312] = 0x8436,
++  [17313] = 0x8433, [17314] = 0x8468, [17315] = 0x847E, [17316] = 0x8444,
++  [17317] = 0x842B, [17318] = 0x8460, [17319] = 0x8454, [17320] = 0x846E,
++  [17321] = 0x8450, [17322] = 0x870B, [17323] = 0x8704, [17324] = 0x86F7,
++  [17325] = 0x870C, [17326] = 0x86FA, [17327] = 0x86D6, [17328] = 0x86F5,
++  [17329] = 0x874D, [17330] = 0x86F8, [17331] = 0x870E, [17332] = 0x8709,
++  [17333] = 0x8701, [17334] = 0x86F6, [17335] = 0x870D, [17336] = 0x8705,
++  [17337] = 0x88D6, [17338] = 0x88CB, [17339] = 0x88CD, [17340] = 0x88CE,
++  [17341] = 0x88DE, [17342] = 0x88DB, [17343] = 0x88DA, [17344] = 0x88CC,
++  [17345] = 0x88D0, [17346] = 0x8985, [17347] = 0x899B, [17348] = 0x89DF,
++  [17349] = 0x89E5, [17350] = 0x89E4, [17355] = 0x89E1, [17356] = 0x89E0,
++  [17357] = 0x89E2, [17358] = 0x89DC, [17359] = 0x89E6, [17360] = 0x8A76,
++  [17361] = 0x8A86, [17362] = 0x8A7F, [17363] = 0x8A61, [17364] = 0x8A3F,
++  [17365] = 0x8A77, [17366] = 0x8A82, [17367] = 0x8A84, [17368] = 0x8A75,
++  [17369] = 0x8A83, [17370] = 0x8A81, [17371] = 0x8A74, [17372] = 0x8A7A,
++  [17373] = 0x8C3C, [17374] = 0x8C4B, [17375] = 0x8C4A, [17376] = 0x8C65,
++  [17377] = 0x8C64, [17378] = 0x8C66, [17379] = 0x8C86, [17380] = 0x8C84,
++  [17381] = 0x8C85, [17382] = 0x8CCC, [17383] = 0x8D68, [17384] = 0x8D69,
++  [17385] = 0x8D91, [17386] = 0x8D8C, [17387] = 0x8D8E, [17388] = 0x8D8F,
++  [17389] = 0x8D8D, [17390] = 0x8D93, [17391] = 0x8D94, [17392] = 0x8D90,
++  [17393] = 0x8D92, [17394] = 0x8DF0, [17395] = 0x8DE0, [17396] = 0x8DEC,
++  [17397] = 0x8DF1, [17398] = 0x8DEE, [17399] = 0x8DD0, [17400] = 0x8DE9,
++  [17401] = 0x8DE3, [17402] = 0x8DE2, [17403] = 0x8DE7, [17404] = 0x8DF2,
++  [17405] = 0x8DEB, [17406] = 0x8DF4, [17407] = 0x8F06, [17408] = 0x8EFF,
++  [17409] = 0x8F01, [17410] = 0x8F00, [17411] = 0x8F05, [17412] = 0x8F07,
++  [17413] = 0x8F08, [17414] = 0x8F02, [17415] = 0x8F0B, [17416] = 0x9052,
++  [17417] = 0x903F, [17452] = 0x9044, [17453] = 0x9049, [17454] = 0x903D,
++  [17455] = 0x9110, [17456] = 0x910D, [17457] = 0x910F, [17458] = 0x9111,
++  [17459] = 0x9116, [17460] = 0x9114, [17461] = 0x910B, [17462] = 0x910E,
++  [17463] = 0x916E, [17464] = 0x916F, [17465] = 0x9248, [17466] = 0x9252,
++  [17467] = 0x9230, [17468] = 0x923A, [17469] = 0x9266, [17470] = 0x9233,
++  [17471] = 0x9265, [17472] = 0x925E, [17473] = 0x9283, [17474] = 0x922E,
++  [17475] = 0x924A, [17476] = 0x9246, [17477] = 0x926D, [17478] = 0x926C,
++  [17479] = 0x924F, [17480] = 0x9260, [17481] = 0x9267, [17482] = 0x926F,
++  [17483] = 0x9236, [17484] = 0x9261, [17485] = 0x9270, [17486] = 0x9231,
++  [17487] = 0x9254, [17488] = 0x9263, [17489] = 0x9250, [17490] = 0x9272,
++  [17491] = 0x924E, [17492] = 0x9253, [17493] = 0x924C, [17494] = 0x9256,
++  [17495] = 0x9232, [17496] = 0x959F, [17497] = 0x959C, [17498] = 0x959E,
++  [17499] = 0x959B, [17500] = 0x9692, [17501] = 0x9693, [17502] = 0x9691,
++  [17503] = 0x9697, [17504] = 0x96CE, [17505] = 0x96FA, [17506] = 0x96FD,
++  [17507] = 0x96F8, [17508] = 0x96F5, [17509] = 0x9773, [17510] = 0x9777,
++  [17511] = 0x9778, [17512] = 0x9772, [17513] = 0x980F, [17514] = 0x980D,
++  [17515] = 0x980E, [17516] = 0x98AC, [17517] = 0x98F6, [17518] = 0x98F9,
++  [17519] = 0x99AF, [17520] = 0x99B2, [17521] = 0x99B0, [17522] = 0x99B5,
++  [17523] = 0x9AAD, [17524] = 0x9AAB, [17525] = 0x9B5B, [17526] = 0x9CEA,
++  [17527] = 0x9CED, [17528] = 0x9CE7, [17529] = 0x9E80, [17530] = 0x9EFD,
++  [17531] = 0x50E6, [17532] = 0x50D4, [17533] = 0x50D7, [17534] = 0x50E8,
++  [17535] = 0x50F3, [17536] = 0x50DB, [17537] = 0x50EA, [17538] = 0x50DD,
++  [17539] = 0x50E4, [17540] = 0x50D3, [17541] = 0x50EC, [17542] = 0x50F0,
++  [17543] = 0x50EF, [17544] = 0x50E3, [17545] = 0x50E0, [17550] = 0x51D8,
++  [17551] = 0x5280, [17552] = 0x5281, [17553] = 0x52E9, [17554] = 0x52EB,
++  [17555] = 0x5330, [17556] = 0x53AC, [17557] = 0x5627, [17558] = 0x5615,
++  [17559] = 0x560C, [17560] = 0x5612, [17561] = 0x55FC, [17562] = 0x560F,
++  [17563] = 0x561C, [17564] = 0x5601, [17565] = 0x5613, [17566] = 0x5602,
++  [17567] = 0x55FA, [17568] = 0x561D, [17569] = 0x5604, [17570] = 0x55FF,
++  [17571] = 0x55F9, [17572] = 0x5889, [17573] = 0x587C, [17574] = 0x5890,
++  [17575] = 0x5898, [17576] = 0x5886, [17577] = 0x5881, [17578] = 0x587F,
++  [17579] = 0x5874, [17580] = 0x588B, [17581] = 0x587A, [17582] = 0x5887,
++  [17583] = 0x5891, [17584] = 0x588E, [17585] = 0x5876, [17586] = 0x5882,
++  [17587] = 0x5888, [17588] = 0x587B, [17589] = 0x5894, [17590] = 0x588F,
++  [17591] = 0x58FE, [17592] = 0x596B, [17593] = 0x5ADC, [17594] = 0x5AEE,
++  [17595] = 0x5AE5, [17596] = 0x5AD5, [17597] = 0x5AEA, [17598] = 0x5ADA,
++  [17599] = 0x5AED, [17600] = 0x5AEB, [17601] = 0x5AF3, [17602] = 0x5AE2,
++  [17603] = 0x5AE0, [17604] = 0x5ADB, [17605] = 0x5AEC, [17606] = 0x5ADE,
++  [17607] = 0x5ADD, [17608] = 0x5AD9, [17609] = 0x5AE8, [17610] = 0x5ADF,
++  [17611] = 0x5B77, [17612] = 0x5BE0, [17647] = 0x5BE3, [17648] = 0x5C63,
++  [17649] = 0x5D82, [17650] = 0x5D80, [17651] = 0x5D7D, [17652] = 0x5D86,
++  [17653] = 0x5D7A, [17654] = 0x5D81, [17655] = 0x5D77, [17656] = 0x5D8A,
++  [17657] = 0x5D89, [17658] = 0x5D88, [17659] = 0x5D7E, [17660] = 0x5D7C,
++  [17661] = 0x5D8D, [17662] = 0x5D79, [17663] = 0x5D7F, [17664] = 0x5E58,
++  [17665] = 0x5E59, [17666] = 0x5E53, [17667] = 0x5ED8, [17668] = 0x5ED1,
++  [17669] = 0x5ED7, [17670] = 0x5ECE, [17671] = 0x5EDC, [17672] = 0x5ED5,
++  [17673] = 0x5ED9, [17674] = 0x5ED2, [17675] = 0x5ED4, [17676] = 0x5F44,
++  [17677] = 0x5F43, [17678] = 0x5F6F, [17679] = 0x5FB6, [17680] = 0x612C,
++  [17681] = 0x6128, [17682] = 0x6141, [17683] = 0x615E, [17684] = 0x6171,
++  [17685] = 0x6173, [17686] = 0x6152, [17687] = 0x6153, [17688] = 0x6172,
++  [17689] = 0x616C, [17690] = 0x6180, [17691] = 0x6174, [17692] = 0x6154,
++  [17693] = 0x617A, [17694] = 0x615B, [17695] = 0x6165, [17696] = 0x613B,
++  [17697] = 0x616A, [17698] = 0x6161, [17699] = 0x6156, [17700] = 0x6229,
++  [17701] = 0x6227, [17702] = 0x622B, [17703] = 0x642B, [17704] = 0x644D,
++  [17705] = 0x645B, [17706] = 0x645D, [17707] = 0x6474, [17708] = 0x6476,
++  [17709] = 0x6472, [17710] = 0x6473, [17711] = 0x647D, [17712] = 0x6475,
++  [17713] = 0x6466, [17714] = 0x64A6, [17715] = 0x644E, [17716] = 0x6482,
++  [17717] = 0x645E, [17718] = 0x645C, [17719] = 0x644B, [17720] = 0x6453,
++  [17721] = 0x6460, [17722] = 0x6450, [17723] = 0x647F, [17724] = 0x643F,
++  [17725] = 0x646C, [17726] = 0x646B, [17727] = 0x6459, [17728] = 0x6465,
++  [17729] = 0x6477, [17730] = 0x6573, [17731] = 0x65A0, [17732] = 0x66A1,
++  [17733] = 0x66A0, [17734] = 0x669F, [17735] = 0x6705, [17736] = 0x6704,
++  [17737] = 0x6722, [17738] = 0x69B1, [17739] = 0x69B6, [17740] = 0x69C9,
++  [17745] = 0x69A0, [17746] = 0x69CE, [17747] = 0x6996, [17748] = 0x69B0,
++  [17749] = 0x69AC, [17750] = 0x69BC, [17751] = 0x6991, [17752] = 0x6999,
++  [17753] = 0x698E, [17754] = 0x69A7, [17755] = 0x698D, [17756] = 0x69A9,
++  [17757] = 0x69BE, [17758] = 0x69AF, [17759] = 0x69BF, [17760] = 0x69C4,
++  [17761] = 0x69BD, [17762] = 0x69A4, [17763] = 0x69D4, [17764] = 0x69B9,
++  [17765] = 0x69CA, [17766] = 0x699A, [17767] = 0x69CF, [17768] = 0x69B3,
++  [17769] = 0x6993, [17770] = 0x69AA, [17771] = 0x69A1, [17772] = 0x699E,
++  [17773] = 0x69D9, [17774] = 0x6997, [17775] = 0x6990, [17776] = 0x69C2,
++  [17777] = 0x69B5, [17778] = 0x69A5, [17779] = 0x69C6, [17780] = 0x6B4A,
++  [17781] = 0x6B4D, [17782] = 0x6B4B, [17783] = 0x6B9E, [17784] = 0x6B9F,
++  [17785] = 0x6BA0, [17786] = 0x6BC3, [17787] = 0x6BC4, [17788] = 0x6BFE,
++  [17789] = 0x6ECE, [17790] = 0x6EF5, [17791] = 0x6EF1, [17792] = 0x6F03,
++  [17793] = 0x6F25, [17794] = 0x6EF8, [17795] = 0x6F37, [17796] = 0x6EFB,
++  [17797] = 0x6F2E, [17798] = 0x6F09, [17799] = 0x6F4E, [17800] = 0x6F19,
++  [17801] = 0x6F1A, [17802] = 0x6F27, [17803] = 0x6F18, [17804] = 0x6F3B,
++  [17805] = 0x6F12, [17806] = 0x6EED, [17807] = 0x6F0A, [17842] = 0x6F36,
++  [17843] = 0x6F73, [17844] = 0x6EF9, [17845] = 0x6EEE, [17846] = 0x6F2D,
++  [17847] = 0x6F40, [17848] = 0x6F30, [17849] = 0x6F3C, [17850] = 0x6F35,
++  [17851] = 0x6EEB, [17852] = 0x6F07, [17853] = 0x6F0E, [17854] = 0x6F43,
++  [17855] = 0x6F05, [17856] = 0x6EFD, [17857] = 0x6EF6, [17858] = 0x6F39,
++  [17859] = 0x6F1C, [17860] = 0x6EFC, [17861] = 0x6F3A, [17862] = 0x6F1F,
++  [17863] = 0x6F0D, [17864] = 0x6F1E, [17865] = 0x6F08, [17866] = 0x6F21,
++  [17867] = 0x7187, [17868] = 0x7190, [17869] = 0x7189, [17870] = 0x7180,
++  [17871] = 0x7185, [17872] = 0x7182, [17873] = 0x718F, [17874] = 0x717B,
++  [17875] = 0x7186, [17876] = 0x7181, [17877] = 0x7197, [17878] = 0x7244,
++  [17879] = 0x7253, [17880] = 0x7297, [17881] = 0x7295, [17882] = 0x7293,
++  [17883] = 0x7343, [17884] = 0x734D, [17885] = 0x7351, [17886] = 0x734C,
++  [17887] = 0x7462, [17888] = 0x7473, [17889] = 0x7471, [17890] = 0x7475,
++  [17891] = 0x7472, [17892] = 0x7467, [17893] = 0x746E, [17894] = 0x7500,
++  [17895] = 0x7502, [17896] = 0x7503, [17897] = 0x757D, [17898] = 0x7590,
++  [17899] = 0x7616, [17900] = 0x7608, [17901] = 0x760C, [17902] = 0x7615,
++  [17903] = 0x7611, [17904] = 0x760A, [17905] = 0x7614, [17906] = 0x76B8,
++  [17907] = 0x7781, [17908] = 0x777C, [17909] = 0x7785, [17910] = 0x7782,
++  [17911] = 0x776E, [17912] = 0x7780, [17913] = 0x776F, [17914] = 0x777E,
++  [17915] = 0x7783, [17916] = 0x78B2, [17917] = 0x78AA, [17918] = 0x78B4,
++  [17919] = 0x78AD, [17920] = 0x78A8, [17921] = 0x787E, [17922] = 0x78AB,
++  [17923] = 0x789E, [17924] = 0x78A5, [17925] = 0x78A0, [17926] = 0x78AC,
++  [17927] = 0x78A2, [17928] = 0x78A4, [17929] = 0x7998, [17930] = 0x798A,
++  [17931] = 0x798B, [17932] = 0x7996, [17933] = 0x7995, [17934] = 0x7994,
++  [17935] = 0x7993, [17940] = 0x7997, [17941] = 0x7988, [17942] = 0x7992,
++  [17943] = 0x7990, [17944] = 0x7A2B, [17945] = 0x7A4A, [17946] = 0x7A30,
++  [17947] = 0x7A2F, [17948] = 0x7A28, [17949] = 0x7A26, [17950] = 0x7AA8,
++  [17951] = 0x7AAB, [17952] = 0x7AAC, [17953] = 0x7AEE, [17954] = 0x7B88,
++  [17955] = 0x7B9C, [17956] = 0x7B8A, [17957] = 0x7B91, [17958] = 0x7B90,
++  [17959] = 0x7B96, [17960] = 0x7B8D, [17961] = 0x7B8C, [17962] = 0x7B9B,
++  [17963] = 0x7B8E, [17964] = 0x7B85, [17965] = 0x7B98, [17966] = 0x5284,
++  [17967] = 0x7B99, [17968] = 0x7BA4, [17969] = 0x7B82, [17970] = 0x7CBB,
++  [17971] = 0x7CBF, [17972] = 0x7CBC, [17973] = 0x7CBA, [17974] = 0x7DA7,
++  [17975] = 0x7DB7, [17976] = 0x7DC2, [17977] = 0x7DA3, [17978] = 0x7DAA,
++  [17979] = 0x7DC1, [17980] = 0x7DC0, [17981] = 0x7DC5, [17982] = 0x7D9D,
++  [17983] = 0x7DCE, [17984] = 0x7DC4, [17985] = 0x7DC6, [17986] = 0x7DCB,
++  [17987] = 0x7DCC, [17988] = 0x7DAF, [17989] = 0x7DB9, [17990] = 0x7D96,
++  [17991] = 0x7DBC, [17992] = 0x7D9F, [17993] = 0x7DA6, [17994] = 0x7DAE,
++  [17995] = 0x7DA9, [17996] = 0x7DA1, [17997] = 0x7DC9, [17998] = 0x7F73,
++  [17999] = 0x7FE2, [18000] = 0x7FE3, [18001] = 0x7FE5, [18002] = 0x7FDE,
++  [18037] = 0x8024, [18038] = 0x805D, [18039] = 0x805C, [18040] = 0x8189,
++  [18041] = 0x8186, [18042] = 0x8183, [18043] = 0x8187, [18044] = 0x818D,
++  [18045] = 0x818C, [18046] = 0x818B, [18047] = 0x8215, [18048] = 0x8497,
++  [18049] = 0x84A4, [18050] = 0x84A1, [18051] = 0x849F, [18052] = 0x84BA,
++  [18053] = 0x84CE, [18054] = 0x84C2, [18055] = 0x84AC, [18056] = 0x84AE,
++  [18057] = 0x84AB, [18058] = 0x84B9, [18059] = 0x84B4, [18060] = 0x84C1,
++  [18061] = 0x84CD, [18062] = 0x84AA, [18063] = 0x849A, [18064] = 0x84B1,
++  [18065] = 0x84D0, [18066] = 0x849D, [18067] = 0x84A7, [18068] = 0x84BB,
++  [18069] = 0x84A2, [18070] = 0x8494, [18071] = 0x84C7, [18072] = 0x84CC,
++  [18073] = 0x849B, [18074] = 0x84A9, [18075] = 0x84AF, [18076] = 0x84A8,
++  [18077] = 0x84D6, [18078] = 0x8498, [18079] = 0x84B6, [18080] = 0x84CF,
++  [18081] = 0x84A0, [18082] = 0x84D7, [18083] = 0x84D4, [18084] = 0x84D2,
++  [18085] = 0x84DB, [18086] = 0x84B0, [18087] = 0x8491, [18088] = 0x8661,
++  [18089] = 0x8733, [18090] = 0x8723, [18091] = 0x8728, [18092] = 0x876B,
++  [18093] = 0x8740, [18094] = 0x872E, [18095] = 0x871E, [18096] = 0x8721,
++  [18097] = 0x8719, [18098] = 0x871B, [18099] = 0x8743, [18100] = 0x872C,
++  [18101] = 0x8741, [18102] = 0x873E, [18103] = 0x8746, [18104] = 0x8720,
++  [18105] = 0x8732, [18106] = 0x872A, [18107] = 0x872D, [18108] = 0x873C,
++  [18109] = 0x8712, [18110] = 0x873A, [18111] = 0x8731, [18112] = 0x8735,
++  [18113] = 0x8742, [18114] = 0x8726, [18115] = 0x8727, [18116] = 0x8738,
++  [18117] = 0x8724, [18118] = 0x871A, [18119] = 0x8730, [18120] = 0x8711,
++  [18121] = 0x88F7, [18122] = 0x88E7, [18123] = 0x88F1, [18124] = 0x88F2,
++  [18125] = 0x88FA, [18126] = 0x88FE, [18127] = 0x88EE, [18128] = 0x88FC,
++  [18129] = 0x88F6, [18130] = 0x88FB, [18135] = 0x88F0, [18136] = 0x88EC,
++  [18137] = 0x88EB, [18138] = 0x899D, [18139] = 0x89A1, [18140] = 0x899F,
++  [18141] = 0x899E, [18142] = 0x89E9, [18143] = 0x89EB, [18144] = 0x89E8,
++  [18145] = 0x8AAB, [18146] = 0x8A99, [18147] = 0x8A8B, [18148] = 0x8A92,
++  [18149] = 0x8A8F, [18150] = 0x8A96, [18151] = 0x8C3D, [18152] = 0x8C68,
++  [18153] = 0x8C69, [18154] = 0x8CD5, [18155] = 0x8CCF, [18156] = 0x8CD7,
++  [18157] = 0x8D96, [18158] = 0x8E09, [18159] = 0x8E02, [18160] = 0x8DFF,
++  [18161] = 0x8E0D, [18162] = 0x8DFD, [18163] = 0x8E0A, [18164] = 0x8E03,
++  [18165] = 0x8E07, [18166] = 0x8E06, [18167] = 0x8E05, [18168] = 0x8DFE,
++  [18169] = 0x8E00, [18170] = 0x8E04, [18171] = 0x8F10, [18172] = 0x8F11,
++  [18173] = 0x8F0E, [18174] = 0x8F0D, [18175] = 0x9123, [18176] = 0x911C,
++  [18177] = 0x9120, [18178] = 0x9122, [18179] = 0x911F, [18180] = 0x911D,
++  [18181] = 0x911A, [18182] = 0x9124, [18183] = 0x9121, [18184] = 0x911B,
++  [18185] = 0x917A, [18186] = 0x9172, [18187] = 0x9179, [18188] = 0x9173,
++  [18189] = 0x92A5, [18190] = 0x92A4, [18191] = 0x9276, [18192] = 0x929B,
++  [18193] = 0x927A, [18194] = 0x92A0, [18195] = 0x9294, [18196] = 0x92AA,
++  [18197] = 0x928D, [18232] = 0x92A6, [18233] = 0x929A, [18234] = 0x92AB,
++  [18235] = 0x9279, [18236] = 0x9297, [18237] = 0x927F, [18238] = 0x92A3,
++  [18239] = 0x92EE, [18240] = 0x928E, [18241] = 0x9282, [18242] = 0x9295,
++  [18243] = 0x92A2, [18244] = 0x927D, [18245] = 0x9288, [18246] = 0x92A1,
++  [18247] = 0x928A, [18248] = 0x9286, [18249] = 0x928C, [18250] = 0x9299,
++  [18251] = 0x92A7, [18252] = 0x927E, [18253] = 0x9287, [18254] = 0x92A9,
++  [18255] = 0x929D, [18256] = 0x928B, [18257] = 0x922D, [18258] = 0x969E,
++  [18259] = 0x96A1, [18260] = 0x96FF, [18261] = 0x9758, [18262] = 0x977D,
++  [18263] = 0x977A, [18264] = 0x977E, [18265] = 0x9783, [18266] = 0x9780,
++  [18267] = 0x9782, [18268] = 0x977B, [18269] = 0x9784, [18270] = 0x9781,
++  [18271] = 0x977F, [18272] = 0x97CE, [18273] = 0x97CD, [18274] = 0x9816,
++  [18275] = 0x98AD, [18276] = 0x98AE, [18277] = 0x9902, [18278] = 0x9900,
++  [18279] = 0x9907, [18280] = 0x999D, [18281] = 0x999C, [18282] = 0x99C3,
++  [18283] = 0x99B9, [18284] = 0x99BB, [18285] = 0x99BA, [18286] = 0x99C2,
++  [18287] = 0x99BD, [18288] = 0x99C7, [18289] = 0x9AB1, [18290] = 0x9AE3,
++  [18291] = 0x9AE7, [18292] = 0x9B3E, [18293] = 0x9B3F, [18294] = 0x9B60,
++  [18295] = 0x9B61, [18296] = 0x9B5F, [18297] = 0x9CF1, [18298] = 0x9CF2,
++  [18299] = 0x9CF5, [18300] = 0x9EA7, [18301] = 0x50FF, [18302] = 0x5103,
++  [18303] = 0x5130, [18304] = 0x50F8, [18305] = 0x5106, [18306] = 0x5107,
++  [18307] = 0x50F6, [18308] = 0x50FE, [18309] = 0x510B, [18310] = 0x510C,
++  [18311] = 0x50FD, [18312] = 0x510A, [18313] = 0x528B, [18314] = 0x528C,
++  [18315] = 0x52F1, [18316] = 0x52EF, [18317] = 0x5648, [18318] = 0x5642,
++  [18319] = 0x564C, [18320] = 0x5635, [18321] = 0x5641, [18322] = 0x564A,
++  [18323] = 0x5649, [18324] = 0x5646, [18325] = 0x5658, [18330] = 0x565A,
++  [18331] = 0x5640, [18332] = 0x5633, [18333] = 0x563D, [18334] = 0x562C,
++  [18335] = 0x563E, [18336] = 0x5638, [18337] = 0x562A, [18338] = 0x563A,
++  [18339] = 0x571A, [18340] = 0x58AB, [18341] = 0x589D, [18342] = 0x58B1,
++  [18343] = 0x58A0, [18344] = 0x58A3, [18345] = 0x58AF, [18346] = 0x58AC,
++  [18347] = 0x58A5, [18348] = 0x58A1, [18349] = 0x58FF, [18350] = 0x5AFF,
++  [18351] = 0x5AF4, [18352] = 0x5AFD, [18353] = 0x5AF7, [18354] = 0x5AF6,
++  [18355] = 0x5B03, [18356] = 0x5AF8, [18357] = 0x5B02, [18358] = 0x5AF9,
++  [18359] = 0x5B01, [18360] = 0x5B07, [18361] = 0x5B05, [18362] = 0x5B0F,
++  [18363] = 0x5C67, [18364] = 0x5D99, [18365] = 0x5D97, [18366] = 0x5D9F,
++  [18367] = 0x5D92, [18368] = 0x5DA2, [18369] = 0x5D93, [18370] = 0x5D95,
++  [18371] = 0x5DA0, [18372] = 0x5D9C, [18373] = 0x5DA1, [18374] = 0x5D9A,
++  [18375] = 0x5D9E, [18376] = 0x5E69, [18377] = 0x5E5D, [18378] = 0x5E60,
++  [18379] = 0x5E5C, [18380] = 0x7DF3, [18381] = 0x5EDB, [18382] = 0x5EDE,
++  [18383] = 0x5EE1, [18384] = 0x5F49, [18385] = 0x5FB2, [18386] = 0x618B,
++  [18387] = 0x6183, [18388] = 0x6179, [18389] = 0x61B1, [18390] = 0x61B0,
++  [18391] = 0x61A2, [18392] = 0x6189, [18427] = 0x619B, [18428] = 0x6193,
++  [18429] = 0x61AF, [18430] = 0x61AD, [18431] = 0x619F, [18432] = 0x6192,
++  [18433] = 0x61AA, [18434] = 0x61A1, [18435] = 0x618D, [18436] = 0x6166,
++  [18437] = 0x61B3, [18438] = 0x622D, [18439] = 0x646E, [18440] = 0x6470,
++  [18441] = 0x6496, [18442] = 0x64A0, [18443] = 0x6485, [18444] = 0x6497,
++  [18445] = 0x649C, [18446] = 0x648F, [18447] = 0x648B, [18448] = 0x648A,
++  [18449] = 0x648C, [18450] = 0x64A3, [18451] = 0x649F, [18452] = 0x6468,
++  [18453] = 0x64B1, [18454] = 0x6498, [18455] = 0x6576, [18456] = 0x657A,
++  [18457] = 0x6579, [18458] = 0x657B, [18459] = 0x65B2, [18460] = 0x65B3,
++  [18461] = 0x66B5, [18462] = 0x66B0, [18463] = 0x66A9, [18464] = 0x66B2,
++  [18465] = 0x66B7, [18466] = 0x66AA, [18467] = 0x66AF, [18468] = 0x6A00,
++  [18469] = 0x6A06, [18470] = 0x6A17, [18471] = 0x69E5, [18472] = 0x69F8,
++  [18473] = 0x6A15, [18474] = 0x69F1, [18475] = 0x69E4, [18476] = 0x6A20,
++  [18477] = 0x69FF, [18478] = 0x69EC, [18479] = 0x69E2, [18480] = 0x6A1B,
++  [18481] = 0x6A1D, [18482] = 0x69FE, [18483] = 0x6A27, [18484] = 0x69F2,
++  [18485] = 0x69EE, [18486] = 0x6A14, [18487] = 0x69F7, [18488] = 0x69E7,
++  [18489] = 0x6A40, [18490] = 0x6A08, [18491] = 0x69E6, [18492] = 0x69FB,
++  [18493] = 0x6A0D, [18494] = 0x69FC, [18495] = 0x69EB, [18496] = 0x6A09,
++  [18497] = 0x6A04, [18498] = 0x6A18, [18499] = 0x6A25, [18500] = 0x6A0F,
++  [18501] = 0x69F6, [18502] = 0x6A26, [18503] = 0x6A07, [18504] = 0x69F4,
++  [18505] = 0x6A16, [18506] = 0x6B51, [18507] = 0x6BA5, [18508] = 0x6BA3,
++  [18509] = 0x6BA2, [18510] = 0x6BA6, [18511] = 0x6C01, [18512] = 0x6C00,
++  [18513] = 0x6BFF, [18514] = 0x6C02, [18515] = 0x6F41, [18516] = 0x6F26,
++  [18517] = 0x6F7E, [18518] = 0x6F87, [18519] = 0x6FC6, [18520] = 0x6F92,
++  [18525] = 0x6F8D, [18526] = 0x6F89, [18527] = 0x6F8C, [18528] = 0x6F62,
++  [18529] = 0x6F4F, [18530] = 0x6F85, [18531] = 0x6F5A, [18532] = 0x6F96,
++  [18533] = 0x6F76, [18534] = 0x6F6C, [18535] = 0x6F82, [18536] = 0x6F55,
++  [18537] = 0x6F72, [18538] = 0x6F52, [18539] = 0x6F50, [18540] = 0x6F57,
++  [18541] = 0x6F94, [18542] = 0x6F93, [18543] = 0x6F5D, [18544] = 0x6F00,
++  [18545] = 0x6F61, [18546] = 0x6F6B, [18547] = 0x6F7D, [18548] = 0x6F67,
++  [18549] = 0x6F90, [18550] = 0x6F53, [18551] = 0x6F8B, [18552] = 0x6F69,
++  [18553] = 0x6F7F, [18554] = 0x6F95, [18555] = 0x6F63, [18556] = 0x6F77,
++  [18557] = 0x6F6A, [18558] = 0x6F7B, [18559] = 0x71B2, [18560] = 0x71AF,
++  [18561] = 0x719B, [18562] = 0x71B0, [18563] = 0x71A0, [18564] = 0x719A,
++  [18565] = 0x71A9, [18566] = 0x71B5, [18567] = 0x719D, [18568] = 0x71A5,
++  [18569] = 0x719E, [18570] = 0x71A4, [18571] = 0x71A1, [18572] = 0x71AA,
++  [18573] = 0x719C, [18574] = 0x71A7, [18575] = 0x71B3, [18576] = 0x7298,
++  [18577] = 0x729A, [18578] = 0x7358, [18579] = 0x7352, [18580] = 0x735E,
++  [18581] = 0x735F, [18582] = 0x7360, [18583] = 0x735D, [18584] = 0x735B,
++  [18585] = 0x7361, [18586] = 0x735A, [18587] = 0x7359, [18622] = 0x7362,
++  [18623] = 0x7487, [18624] = 0x7489, [18625] = 0x748A, [18626] = 0x7486,
++  [18627] = 0x7481, [18628] = 0x747D, [18629] = 0x7485, [18630] = 0x7488,
++  [18631] = 0x747C, [18632] = 0x7479, [18633] = 0x7508, [18634] = 0x7507,
++  [18635] = 0x757E, [18636] = 0x7625, [18637] = 0x761E, [18638] = 0x7619,
++  [18639] = 0x761D, [18640] = 0x761C, [18641] = 0x7623, [18642] = 0x761A,
++  [18643] = 0x7628, [18644] = 0x761B, [18645] = 0x769C, [18646] = 0x769D,
++  [18647] = 0x769E, [18648] = 0x769B, [18649] = 0x778D, [18650] = 0x778F,
++  [18651] = 0x7789, [18652] = 0x7788, [18653] = 0x78CD, [18654] = 0x78BB,
++  [18655] = 0x78CF, [18656] = 0x78CC, [18657] = 0x78D1, [18658] = 0x78CE,
++  [18659] = 0x78D4, [18660] = 0x78C8, [18661] = 0x78C3, [18662] = 0x78C4,
++  [18663] = 0x78C9, [18664] = 0x799A, [18665] = 0x79A1, [18666] = 0x79A0,
++  [18667] = 0x799C, [18668] = 0x79A2, [18669] = 0x799B, [18670] = 0x6B76,
++  [18671] = 0x7A39, [18672] = 0x7AB2, [18673] = 0x7AB4, [18674] = 0x7AB3,
++  [18675] = 0x7BB7, [18676] = 0x7BCB, [18677] = 0x7BBE, [18678] = 0x7BAC,
++  [18679] = 0x7BCE, [18680] = 0x7BAF, [18681] = 0x7BB9, [18682] = 0x7BCA,
++  [18683] = 0x7BB5, [18684] = 0x7CC5, [18685] = 0x7CC8, [18686] = 0x7CCC,
++  [18687] = 0x7CCB, [18688] = 0x7DF7, [18689] = 0x7DDB, [18690] = 0x7DEA,
++  [18691] = 0x7DE7, [18692] = 0x7DD7, [18693] = 0x7DE1, [18694] = 0x7E03,
++  [18695] = 0x7DFA, [18696] = 0x7DE6, [18697] = 0x7DF6, [18698] = 0x7DF1,
++  [18699] = 0x7DF0, [18700] = 0x7DEE, [18701] = 0x7DDF, [18702] = 0x7F76,
++  [18703] = 0x7FAC, [18704] = 0x7FB0, [18705] = 0x7FAD, [18706] = 0x7FED,
++  [18707] = 0x7FEB, [18708] = 0x7FEA, [18709] = 0x7FEC, [18710] = 0x7FE6,
++  [18711] = 0x7FE8, [18712] = 0x8064, [18713] = 0x8067, [18714] = 0x81A3,
++  [18715] = 0x819F, [18720] = 0x819E, [18721] = 0x8195, [18722] = 0x81A2,
++  [18723] = 0x8199, [18724] = 0x8197, [18725] = 0x8216, [18726] = 0x824F,
++  [18727] = 0x8253, [18728] = 0x8252, [18729] = 0x8250, [18730] = 0x824E,
++  [18731] = 0x8251, [18732] = 0x8524, [18733] = 0x853B, [18734] = 0x850F,
++  [18735] = 0x8500, [18736] = 0x8529, [18737] = 0x850E, [18738] = 0x8509,
++  [18739] = 0x850D, [18740] = 0x851F, [18741] = 0x850A, [18742] = 0x8527,
++  [18743] = 0x851C, [18744] = 0x84FB, [18745] = 0x852B, [18746] = 0x84FA,
++  [18747] = 0x8508, [18748] = 0x850C, [18749] = 0x84F4, [18750] = 0x852A,
++  [18751] = 0x84F2, [18752] = 0x8515, [18753] = 0x84F7, [18754] = 0x84EB,
++  [18755] = 0x84F3, [18756] = 0x84FC, [18757] = 0x8512, [18758] = 0x84EA,
++  [18759] = 0x84E9, [18760] = 0x8516, [18761] = 0x84FE, [18762] = 0x8528,
++  [18763] = 0x851D, [18764] = 0x852E, [18765] = 0x8502, [18766] = 0x84FD,
++  [18767] = 0x851E, [18768] = 0x84F6, [18769] = 0x8531, [18770] = 0x8526,
++  [18771] = 0x84E7, [18772] = 0x84E8, [18773] = 0x84F0, [18774] = 0x84EF,
++  [18775] = 0x84F9, [18776] = 0x8518, [18777] = 0x8520, [18778] = 0x8530,
++  [18779] = 0x850B, [18780] = 0x8519, [18781] = 0x852F, [18782] = 0x8662,
++  [18817] = 0x8756, [18818] = 0x8763, [18819] = 0x8764, [18820] = 0x8777,
++  [18821] = 0x87E1, [18822] = 0x8773, [18823] = 0x8758, [18824] = 0x8754,
++  [18825] = 0x875B, [18826] = 0x8752, [18827] = 0x8761, [18828] = 0x875A,
++  [18829] = 0x8751, [18830] = 0x875E, [18831] = 0x876D, [18832] = 0x876A,
++  [18833] = 0x8750, [18834] = 0x874E, [18835] = 0x875F, [18836] = 0x875D,
++  [18837] = 0x876F, [18838] = 0x876C, [18839] = 0x877A, [18840] = 0x876E,
++  [18841] = 0x875C, [18842] = 0x8765, [18843] = 0x874F, [18844] = 0x877B,
++  [18845] = 0x8775, [18846] = 0x8762, [18847] = 0x8767, [18848] = 0x8769,
++  [18849] = 0x885A, [18850] = 0x8905, [18851] = 0x890C, [18852] = 0x8914,
++  [18853] = 0x890B, [18854] = 0x8917, [18855] = 0x8918, [18856] = 0x8919,
++  [18857] = 0x8906, [18858] = 0x8916, [18859] = 0x8911, [18860] = 0x890E,
++  [18861] = 0x8909, [18862] = 0x89A2, [18863] = 0x89A4, [18864] = 0x89A3,
++  [18865] = 0x89ED, [18866] = 0x89F0, [18867] = 0x89EC, [18868] = 0x8ACF,
++  [18869] = 0x8AC6, [18870] = 0x8AB8, [18871] = 0x8AD3, [18872] = 0x8AD1,
++  [18873] = 0x8AD4, [18874] = 0x8AD5, [18875] = 0x8ABB, [18876] = 0x8AD7,
++  [18877] = 0x8ABE, [18878] = 0x8AC0, [18879] = 0x8AC5, [18880] = 0x8AD8,
++  [18881] = 0x8AC3, [18882] = 0x8ABA, [18883] = 0x8ABD, [18884] = 0x8AD9,
++  [18885] = 0x8C3E, [18886] = 0x8C4D, [18887] = 0x8C8F, [18888] = 0x8CE5,
++  [18889] = 0x8CDF, [18890] = 0x8CD9, [18891] = 0x8CE8, [18892] = 0x8CDA,
++  [18893] = 0x8CDD, [18894] = 0x8CE7, [18895] = 0x8DA0, [18896] = 0x8D9C,
++  [18897] = 0x8DA1, [18898] = 0x8D9B, [18899] = 0x8E20, [18900] = 0x8E23,
++  [18901] = 0x8E25, [18902] = 0x8E24, [18903] = 0x8E2E, [18904] = 0x8E15,
++  [18905] = 0x8E1B, [18906] = 0x8E16, [18907] = 0x8E11, [18908] = 0x8E19,
++  [18909] = 0x8E26, [18910] = 0x8E27, [18915] = 0x8E14, [18916] = 0x8E12,
++  [18917] = 0x8E18, [18918] = 0x8E13, [18919] = 0x8E1C, [18920] = 0x8E17,
++  [18921] = 0x8E1A, [18922] = 0x8F2C, [18923] = 0x8F24, [18924] = 0x8F18,
++  [18925] = 0x8F1A, [18926] = 0x8F20, [18927] = 0x8F23, [18928] = 0x8F16,
++  [18929] = 0x8F17, [18930] = 0x9073, [18931] = 0x9070, [18932] = 0x906F,
++  [18933] = 0x9067, [18934] = 0x906B, [18935] = 0x912F, [18936] = 0x912B,
++  [18937] = 0x9129, [18938] = 0x912A, [18939] = 0x9132, [18940] = 0x9126,
++  [18941] = 0x912E, [18942] = 0x9185, [18943] = 0x9186, [18944] = 0x918A,
++  [18945] = 0x9181, [18946] = 0x9182, [18947] = 0x9184, [18948] = 0x9180,
++  [18949] = 0x92D0, [18950] = 0x92C3, [18951] = 0x92C4, [18952] = 0x92C0,
++  [18953] = 0x92D9, [18954] = 0x92B6, [18955] = 0x92CF, [18956] = 0x92F1,
++  [18957] = 0x92DF, [18958] = 0x92D8, [18959] = 0x92E9, [18960] = 0x92D7,
++  [18961] = 0x92DD, [18962] = 0x92CC, [18963] = 0x92EF, [18964] = 0x92C2,
++  [18965] = 0x92E8, [18966] = 0x92CA, [18967] = 0x92C8, [18968] = 0x92CE,
++  [18969] = 0x92E6, [18970] = 0x92CD, [18971] = 0x92D5, [18972] = 0x92C9,
++  [18973] = 0x92E0, [18974] = 0x92DE, [18975] = 0x92E7, [18976] = 0x92D1,
++  [18977] = 0x92D3, [19012] = 0x92B5, [19013] = 0x92E1, [19014] = 0x92C6,
++  [19015] = 0x92B4, [19016] = 0x957C, [19017] = 0x95AC, [19018] = 0x95AB,
++  [19019] = 0x95AE, [19020] = 0x95B0, [19021] = 0x96A4, [19022] = 0x96A2,
++  [19023] = 0x96D3, [19024] = 0x9705, [19025] = 0x9708, [19026] = 0x9702,
++  [19027] = 0x975A, [19028] = 0x978A, [19029] = 0x978E, [19030] = 0x9788,
++  [19031] = 0x97D0, [19032] = 0x97CF, [19033] = 0x981E, [19034] = 0x981D,
++  [19035] = 0x9826, [19036] = 0x9829, [19037] = 0x9828, [19038] = 0x9820,
++  [19039] = 0x981B, [19040] = 0x9827, [19041] = 0x98B2, [19042] = 0x9908,
++  [19043] = 0x98FA, [19044] = 0x9911, [19045] = 0x9914, [19046] = 0x9916,
++  [19047] = 0x9917, [19048] = 0x9915, [19049] = 0x99DC, [19050] = 0x99CD,
++  [19051] = 0x99CF, [19052] = 0x99D3, [19053] = 0x99D4, [19054] = 0x99CE,
++  [19055] = 0x99C9, [19056] = 0x99D6, [19057] = 0x99D8, [19058] = 0x99CB,
++  [19059] = 0x99D7, [19060] = 0x99CC, [19061] = 0x9AB3, [19062] = 0x9AEC,
++  [19063] = 0x9AEB, [19064] = 0x9AF3, [19065] = 0x9AF2, [19066] = 0x9AF1,
++  [19067] = 0x9B46, [19068] = 0x9B43, [19069] = 0x9B67, [19070] = 0x9B74,
++  [19071] = 0x9B71, [19072] = 0x9B66, [19073] = 0x9B76, [19074] = 0x9B75,
++  [19075] = 0x9B70, [19076] = 0x9B68, [19077] = 0x9B64, [19078] = 0x9B6C,
++  [19079] = 0x9CFC, [19080] = 0x9CFA, [19081] = 0x9CFD, [19082] = 0x9CFF,
++  [19083] = 0x9CF7, [19084] = 0x9D07, [19085] = 0x9D00, [19086] = 0x9CF9,
++  [19087] = 0x9CFB, [19088] = 0x9D08, [19089] = 0x9D05, [19090] = 0x9D04,
++  [19091] = 0x9E83, [19092] = 0x9ED3, [19093] = 0x9F0F, [19094] = 0x9F10,
++  [19095] = 0x511C, [19096] = 0x5113, [19097] = 0x5117, [19098] = 0x511A,
++  [19099] = 0x5111, [19100] = 0x51DE, [19101] = 0x5334, [19102] = 0x53E1,
++  [19103] = 0x5670, [19104] = 0x5660, [19105] = 0x566E, [19110] = 0x5673,
++  [19111] = 0x5666, [19112] = 0x5663, [19113] = 0x566D, [19114] = 0x5672,
++  [19115] = 0x565E, [19116] = 0x5677, [19117] = 0x571C, [19118] = 0x571B,
++  [19119] = 0x58C8, [19120] = 0x58BD, [19121] = 0x58C9, [19122] = 0x58BF,
++  [19123] = 0x58BA, [19124] = 0x58C2, [19125] = 0x58BC, [19126] = 0x58C6,
++  [19127] = 0x5B17, [19128] = 0x5B19, [19129] = 0x5B1B, [19130] = 0x5B21,
++  [19131] = 0x5B14, [19132] = 0x5B13, [19133] = 0x5B10, [19134] = 0x5B16,
++  [19135] = 0x5B28, [19136] = 0x5B1A, [19137] = 0x5B20, [19138] = 0x5B1E,
++  [19139] = 0x5BEF, [19140] = 0x5DAC, [19141] = 0x5DB1, [19142] = 0x5DA9,
++  [19143] = 0x5DA7, [19144] = 0x5DB5, [19145] = 0x5DB0, [19146] = 0x5DAE,
++  [19147] = 0x5DAA, [19148] = 0x5DA8, [19149] = 0x5DB2, [19150] = 0x5DAD,
++  [19151] = 0x5DAF, [19152] = 0x5DB4, [19153] = 0x5E67, [19154] = 0x5E68,
++  [19155] = 0x5E66, [19156] = 0x5E6F, [19157] = 0x5EE9, [19158] = 0x5EE7,
++  [19159] = 0x5EE6, [19160] = 0x5EE8, [19161] = 0x5EE5, [19162] = 0x5F4B,
++  [19163] = 0x5FBC, [19164] = 0x619D, [19165] = 0x61A8, [19166] = 0x6196,
++  [19167] = 0x61C5, [19168] = 0x61B4, [19169] = 0x61C6, [19170] = 0x61C1,
++  [19171] = 0x61CC, [19172] = 0x61BA, [19207] = 0x61BF, [19208] = 0x61B8,
++  [19209] = 0x618C, [19210] = 0x64D7, [19211] = 0x64D6, [19212] = 0x64D0,
++  [19213] = 0x64CF, [19214] = 0x64C9, [19215] = 0x64BD, [19216] = 0x6489,
++  [19217] = 0x64C3, [19218] = 0x64DB, [19219] = 0x64F3, [19220] = 0x64D9,
++  [19221] = 0x6533, [19222] = 0x657F, [19223] = 0x657C, [19224] = 0x65A2,
++  [19225] = 0x66C8, [19226] = 0x66BE, [19227] = 0x66C0, [19228] = 0x66CA,
++  [19229] = 0x66CB, [19230] = 0x66CF, [19231] = 0x66BD, [19232] = 0x66BB,
++  [19233] = 0x66BA, [19234] = 0x66CC, [19235] = 0x6723, [19236] = 0x6A34,
++  [19237] = 0x6A66, [19238] = 0x6A49, [19239] = 0x6A67, [19240] = 0x6A32,
++  [19241] = 0x6A68, [19242] = 0x6A3E, [19243] = 0x6A5D, [19244] = 0x6A6D,
++  [19245] = 0x6A76, [19246] = 0x6A5B, [19247] = 0x6A51, [19248] = 0x6A28,
++  [19249] = 0x6A5A, [19250] = 0x6A3B, [19251] = 0x6A3F, [19252] = 0x6A41,
++  [19253] = 0x6A6A, [19254] = 0x6A64, [19255] = 0x6A50, [19256] = 0x6A4F,
++  [19257] = 0x6A54, [19258] = 0x6A6F, [19259] = 0x6A69, [19260] = 0x6A60,
++  [19261] = 0x6A3C, [19262] = 0x6A5E, [19263] = 0x6A56, [19264] = 0x6A55,
++  [19265] = 0x6A4D, [19266] = 0x6A4E, [19267] = 0x6A46, [19268] = 0x6B55,
++  [19269] = 0x6B54, [19270] = 0x6B56, [19271] = 0x6BA7, [19272] = 0x6BAA,
++  [19273] = 0x6BAB, [19274] = 0x6BC8, [19275] = 0x6BC7, [19276] = 0x6C04,
++  [19277] = 0x6C03, [19278] = 0x6C06, [19279] = 0x6FAD, [19280] = 0x6FCB,
++  [19281] = 0x6FA3, [19282] = 0x6FC7, [19283] = 0x6FBC, [19284] = 0x6FCE,
++  [19285] = 0x6FC8, [19286] = 0x6F5E, [19287] = 0x6FC4, [19288] = 0x6FBD,
++  [19289] = 0x6F9E, [19290] = 0x6FCA, [19291] = 0x6FA8, [19292] = 0x7004,
++  [19293] = 0x6FA5, [19294] = 0x6FAE, [19295] = 0x6FBA, [19296] = 0x6FAC,
++  [19297] = 0x6FAA, [19298] = 0x6FCF, [19299] = 0x6FBF, [19300] = 0x6FB8,
++  [19305] = 0x6FA2, [19306] = 0x6FC9, [19307] = 0x6FAB, [19308] = 0x6FCD,
++  [19309] = 0x6FAF, [19310] = 0x6FB2, [19311] = 0x6FB0, [19312] = 0x71C5,
++  [19313] = 0x71C2, [19314] = 0x71BF, [19315] = 0x71B8, [19316] = 0x71D6,
++  [19317] = 0x71C0, [19318] = 0x71C1, [19319] = 0x71CB, [19320] = 0x71D4,
++  [19321] = 0x71CA, [19322] = 0x71C7, [19323] = 0x71CF, [19324] = 0x71BD,
++  [19325] = 0x71D8, [19326] = 0x71BC, [19327] = 0x71C6, [19328] = 0x71DA,
++  [19329] = 0x71DB, [19330] = 0x729D, [19331] = 0x729E, [19332] = 0x7369,
++  [19333] = 0x7366, [19334] = 0x7367, [19335] = 0x736C, [19336] = 0x7365,
++  [19337] = 0x736B, [19338] = 0x736A, [19339] = 0x747F, [19340] = 0x749A,
++  [19341] = 0x74A0, [19342] = 0x7494, [19343] = 0x7492, [19344] = 0x7495,
++  [19345] = 0x74A1, [19346] = 0x750B, [19347] = 0x7580, [19348] = 0x762F,
++  [19349] = 0x762D, [19350] = 0x7631, [19351] = 0x763D, [19352] = 0x7633,
++  [19353] = 0x763C, [19354] = 0x7635, [19355] = 0x7632, [19356] = 0x7630,
++  [19357] = 0x76BB, [19358] = 0x76E6, [19359] = 0x779A, [19360] = 0x779D,
++  [19361] = 0x77A1, [19362] = 0x779C, [19363] = 0x779B, [19364] = 0x77A2,
++  [19365] = 0x77A3, [19366] = 0x7795, [19367] = 0x7799, [19402] = 0x7797,
++  [19403] = 0x78DD, [19404] = 0x78E9, [19405] = 0x78E5, [19406] = 0x78EA,
++  [19407] = 0x78DE, [19408] = 0x78E3, [19409] = 0x78DB, [19410] = 0x78E1,
++  [19411] = 0x78E2, [19412] = 0x78ED, [19413] = 0x78DF, [19414] = 0x78E0,
++  [19415] = 0x79A4, [19416] = 0x7A44, [19417] = 0x7A48, [19418] = 0x7A47,
++  [19419] = 0x7AB6, [19420] = 0x7AB8, [19421] = 0x7AB5, [19422] = 0x7AB1,
++  [19423] = 0x7AB7, [19424] = 0x7BDE, [19425] = 0x7BE3, [19426] = 0x7BE7,
++  [19427] = 0x7BDD, [19428] = 0x7BD5, [19429] = 0x7BE5, [19430] = 0x7BDA,
++  [19431] = 0x7BE8, [19432] = 0x7BF9, [19433] = 0x7BD4, [19434] = 0x7BEA,
++  [19435] = 0x7BE2, [19436] = 0x7BDC, [19437] = 0x7BEB, [19438] = 0x7BD8,
++  [19439] = 0x7BDF, [19440] = 0x7CD2, [19441] = 0x7CD4, [19442] = 0x7CD7,
++  [19443] = 0x7CD0, [19444] = 0x7CD1, [19445] = 0x7E12, [19446] = 0x7E21,
++  [19447] = 0x7E17, [19448] = 0x7E0C, [19449] = 0x7E1F, [19450] = 0x7E20,
++  [19451] = 0x7E13, [19452] = 0x7E0E, [19453] = 0x7E1C, [19454] = 0x7E15,
++  [19455] = 0x7E1A, [19456] = 0x7E22, [19457] = 0x7E0B, [19458] = 0x7E0F,
++  [19459] = 0x7E16, [19460] = 0x7E0D, [19461] = 0x7E14, [19462] = 0x7E25,
++  [19463] = 0x7E24, [19464] = 0x7F43, [19465] = 0x7F7B, [19466] = 0x7F7C,
++  [19467] = 0x7F7A, [19468] = 0x7FB1, [19469] = 0x7FEF, [19470] = 0x802A,
++  [19471] = 0x8029, [19472] = 0x806C, [19473] = 0x81B1, [19474] = 0x81A6,
++  [19475] = 0x81AE, [19476] = 0x81B9, [19477] = 0x81B5, [19478] = 0x81AB,
++  [19479] = 0x81B0, [19480] = 0x81AC, [19481] = 0x81B4, [19482] = 0x81B2,
++  [19483] = 0x81B7, [19484] = 0x81A7, [19485] = 0x81F2, [19486] = 0x8255,
++  [19487] = 0x8256, [19488] = 0x8257, [19489] = 0x8556, [19490] = 0x8545,
++  [19491] = 0x856B, [19492] = 0x854D, [19493] = 0x8553, [19494] = 0x8561,
++  [19495] = 0x8558, [19500] = 0x8540, [19501] = 0x8546, [19502] = 0x8564,
++  [19503] = 0x8541, [19504] = 0x8562, [19505] = 0x8544, [19506] = 0x8551,
++  [19507] = 0x8547, [19508] = 0x8563, [19509] = 0x853E, [19510] = 0x855B,
++  [19511] = 0x8571, [19512] = 0x854E, [19513] = 0x856E, [19514] = 0x8575,
++  [19515] = 0x8555, [19516] = 0x8567, [19517] = 0x8560, [19518] = 0x858C,
++  [19519] = 0x8566, [19520] = 0x855D, [19521] = 0x8554, [19522] = 0x8565,
++  [19523] = 0x856C, [19524] = 0x8663, [19525] = 0x8665, [19526] = 0x8664,
++  [19527] = 0x879B, [19528] = 0x878F, [19529] = 0x8797, [19530] = 0x8793,
++  [19531] = 0x8792, [19532] = 0x8788, [19533] = 0x8781, [19534] = 0x8796,
++  [19535] = 0x8798, [19536] = 0x8779, [19537] = 0x8787, [19538] = 0x87A3,
++  [19539] = 0x8785, [19540] = 0x8790, [19541] = 0x8791, [19542] = 0x879D,
++  [19543] = 0x8784, [19544] = 0x8794, [19545] = 0x879C, [19546] = 0x879A,
++  [19547] = 0x8789, [19548] = 0x891E, [19549] = 0x8926, [19550] = 0x8930,
++  [19551] = 0x892D, [19552] = 0x892E, [19553] = 0x8927, [19554] = 0x8931,
++  [19555] = 0x8922, [19556] = 0x8929, [19557] = 0x8923, [19558] = 0x892F,
++  [19559] = 0x892C, [19560] = 0x891F, [19561] = 0x89F1, [19562] = 0x8AE0,
++  [19597] = 0x8AE2, [19598] = 0x8AF2, [19599] = 0x8AF4, [19600] = 0x8AF5,
++  [19601] = 0x8ADD, [19602] = 0x8B14, [19603] = 0x8AE4, [19604] = 0x8ADF,
++  [19605] = 0x8AF0, [19606] = 0x8AC8, [19607] = 0x8ADE, [19608] = 0x8AE1,
++  [19609] = 0x8AE8, [19610] = 0x8AFF, [19611] = 0x8AEF, [19612] = 0x8AFB,
++  [19613] = 0x8C91, [19614] = 0x8C92, [19615] = 0x8C90, [19616] = 0x8CF5,
++  [19617] = 0x8CEE, [19618] = 0x8CF1, [19619] = 0x8CF0, [19620] = 0x8CF3,
++  [19621] = 0x8D6C, [19622] = 0x8D6E, [19623] = 0x8DA5, [19624] = 0x8DA7,
++  [19625] = 0x8E33, [19626] = 0x8E3E, [19627] = 0x8E38, [19628] = 0x8E40,
++  [19629] = 0x8E45, [19630] = 0x8E36, [19631] = 0x8E3C, [19632] = 0x8E3D,
++  [19633] = 0x8E41, [19634] = 0x8E30, [19635] = 0x8E3F, [19636] = 0x8EBD,
++  [19637] = 0x8F36, [19638] = 0x8F2E, [19639] = 0x8F35, [19640] = 0x8F32,
++  [19641] = 0x8F39, [19642] = 0x8F37, [19643] = 0x8F34, [19644] = 0x9076,
++  [19645] = 0x9079, [19646] = 0x907B, [19647] = 0x9086, [19648] = 0x90FA,
++  [19649] = 0x9133, [19650] = 0x9135, [19651] = 0x9136, [19652] = 0x9193,
++  [19653] = 0x9190, [19654] = 0x9191, [19655] = 0x918D, [19656] = 0x918F,
++  [19657] = 0x9327, [19658] = 0x931E, [19659] = 0x9308, [19660] = 0x931F,
++  [19661] = 0x9306, [19662] = 0x930F, [19663] = 0x937A, [19664] = 0x9338,
++  [19665] = 0x933C, [19666] = 0x931B, [19667] = 0x9323, [19668] = 0x9312,
++  [19669] = 0x9301, [19670] = 0x9346, [19671] = 0x932D, [19672] = 0x930E,
++  [19673] = 0x930D, [19674] = 0x92CB, [19675] = 0x931D, [19676] = 0x92FA,
++  [19677] = 0x9325, [19678] = 0x9313, [19679] = 0x92F9, [19680] = 0x92F7,
++  [19681] = 0x9334, [19682] = 0x9302, [19683] = 0x9324, [19684] = 0x92FF,
++  [19685] = 0x9329, [19686] = 0x9339, [19687] = 0x9335, [19688] = 0x932A,
++  [19689] = 0x9314, [19690] = 0x930C, [19695] = 0x930B, [19696] = 0x92FE,
++  [19697] = 0x9309, [19698] = 0x9300, [19699] = 0x92FB, [19700] = 0x9316,
++  [19701] = 0x95BC, [19702] = 0x95CD, [19703] = 0x95BE, [19704] = 0x95B9,
++  [19705] = 0x95BA, [19706] = 0x95B6, [19707] = 0x95BF, [19708] = 0x95B5,
++  [19709] = 0x95BD, [19710] = 0x96A9, [19711] = 0x96D4, [19712] = 0x970B,
++  [19713] = 0x9712, [19714] = 0x9710, [19715] = 0x9799, [19716] = 0x9797,
++  [19717] = 0x9794, [19718] = 0x97F0, [19719] = 0x97F8, [19720] = 0x9835,
++  [19721] = 0x982F, [19722] = 0x9832, [19723] = 0x9924, [19724] = 0x991F,
++  [19725] = 0x9927, [19726] = 0x9929, [19727] = 0x999E, [19728] = 0x99EE,
++  [19729] = 0x99EC, [19730] = 0x99E5, [19731] = 0x99E4, [19732] = 0x99F0,
++  [19733] = 0x99E3, [19734] = 0x99EA, [19735] = 0x99E9, [19736] = 0x99E7,
++  [19737] = 0x9AB9, [19738] = 0x9ABF, [19739] = 0x9AB4, [19740] = 0x9ABB,
++  [19741] = 0x9AF6, [19742] = 0x9AFA, [19743] = 0x9AF9, [19744] = 0x9AF7,
++  [19745] = 0x9B33, [19746] = 0x9B80, [19747] = 0x9B85, [19748] = 0x9B87,
++  [19749] = 0x9B7C, [19750] = 0x9B7E, [19751] = 0x9B7B, [19752] = 0x9B82,
++  [19753] = 0x9B93, [19754] = 0x9B92, [19755] = 0x9B90, [19756] = 0x9B7A,
++  [19757] = 0x9B95, [19792] = 0x9B7D, [19793] = 0x9B88, [19794] = 0x9D25,
++  [19795] = 0x9D17, [19796] = 0x9D20, [19797] = 0x9D1E, [19798] = 0x9D14,
++  [19799] = 0x9D29, [19800] = 0x9D1D, [19801] = 0x9D18, [19802] = 0x9D22,
++  [19803] = 0x9D10, [19804] = 0x9D19, [19805] = 0x9D1F, [19806] = 0x9E88,
++  [19807] = 0x9E86, [19808] = 0x9E87, [19809] = 0x9EAE, [19810] = 0x9EAD,
++  [19811] = 0x9ED5, [19812] = 0x9ED6, [19813] = 0x9EFA, [19814] = 0x9F12,
++  [19815] = 0x9F3D, [19816] = 0x5126, [19817] = 0x5125, [19818] = 0x5122,
++  [19819] = 0x5124, [19820] = 0x5120, [19821] = 0x5129, [19822] = 0x52F4,
++  [19823] = 0x5693, [19824] = 0x568C, [19825] = 0x568D, [19826] = 0x5686,
++  [19827] = 0x5684, [19828] = 0x5683, [19829] = 0x567E, [19830] = 0x5682,
++  [19831] = 0x567F, [19832] = 0x5681, [19833] = 0x58D6, [19834] = 0x58D4,
++  [19835] = 0x58CF, [19836] = 0x58D2, [19837] = 0x5B2D, [19838] = 0x5B25,
++  [19839] = 0x5B32, [19840] = 0x5B23, [19841] = 0x5B2C, [19842] = 0x5B27,
++  [19843] = 0x5B26, [19844] = 0x5B2F, [19845] = 0x5B2E, [19846] = 0x5B7B,
++  [19847] = 0x5BF1, [19848] = 0x5BF2, [19849] = 0x5DB7, [19850] = 0x5E6C,
++  [19851] = 0x5E6A, [19852] = 0x5FBE, [19853] = 0x5FBB, [19854] = 0x61C3,
++  [19855] = 0x61B5, [19856] = 0x61BC, [19857] = 0x61E7, [19858] = 0x61E0,
++  [19859] = 0x61E5, [19860] = 0x61E4, [19861] = 0x61E8, [19862] = 0x61DE,
++  [19863] = 0x64EF, [19864] = 0x64E9, [19865] = 0x64E3, [19866] = 0x64EB,
++  [19867] = 0x64E4, [19868] = 0x64E8, [19869] = 0x6581, [19870] = 0x6580,
++  [19871] = 0x65B6, [19872] = 0x65DA, [19873] = 0x66D2, [19874] = 0x6A8D,
++  [19875] = 0x6A96, [19876] = 0x6A81, [19877] = 0x6AA5, [19878] = 0x6A89,
++  [19879] = 0x6A9F, [19880] = 0x6A9B, [19881] = 0x6AA1, [19882] = 0x6A9E,
++  [19883] = 0x6A87, [19884] = 0x6A93, [19885] = 0x6A8E, [19890] = 0x6A95,
++  [19891] = 0x6A83, [19892] = 0x6AA8, [19893] = 0x6AA4, [19894] = 0x6A91,
++  [19895] = 0x6A7F, [19896] = 0x6AA6, [19897] = 0x6A9A, [19898] = 0x6A85,
++  [19899] = 0x6A8C, [19900] = 0x6A92, [19901] = 0x6B5B, [19902] = 0x6BAD,
++  [19903] = 0x6C09, [19904] = 0x6FCC, [19905] = 0x6FA9, [19906] = 0x6FF4,
++  [19907] = 0x6FD4, [19908] = 0x6FE3, [19909] = 0x6FDC, [19910] = 0x6FED,
++  [19911] = 0x6FE7, [19912] = 0x6FE6, [19913] = 0x6FDE, [19914] = 0x6FF2,
++  [19915] = 0x6FDD, [19916] = 0x6FE2, [19917] = 0x6FE8, [19918] = 0x71E1,
++  [19919] = 0x71F1, [19920] = 0x71E8, [19921] = 0x71F2, [19922] = 0x71E4,
++  [19923] = 0x71F0, [19924] = 0x71E2, [19925] = 0x7373, [19926] = 0x736E,
++  [19927] = 0x736F, [19928] = 0x7497, [19929] = 0x74B2, [19930] = 0x74AB,
++  [19931] = 0x7490, [19932] = 0x74AA, [19933] = 0x74AD, [19934] = 0x74B1,
++  [19935] = 0x74A5, [19936] = 0x74AF, [19937] = 0x7510, [19938] = 0x7511,
++  [19939] = 0x7512, [19940] = 0x750F, [19941] = 0x7584, [19942] = 0x7643,
++  [19943] = 0x7648, [19944] = 0x7649, [19945] = 0x7647, [19946] = 0x76A4,
++  [19947] = 0x76E9, [19948] = 0x77B5, [19949] = 0x77AB, [19950] = 0x77B2,
++  [19951] = 0x77B7, [19952] = 0x77B6, [19987] = 0x77B4, [19988] = 0x77B1,
++  [19989] = 0x77A8, [19990] = 0x77F0, [19991] = 0x78F3, [19992] = 0x78FD,
++  [19993] = 0x7902, [19994] = 0x78FB, [19995] = 0x78FC, [19996] = 0x78F2,
++  [19997] = 0x7905, [19998] = 0x78F9, [19999] = 0x78FE, [20000] = 0x7904,
++  [20001] = 0x79AB, [20002] = 0x79A8, [20003] = 0x7A5C, [20004] = 0x7A5B,
++  [20005] = 0x7A56, [20006] = 0x7A58, [20007] = 0x7A54, [20008] = 0x7A5A,
++  [20009] = 0x7ABE, [20010] = 0x7AC0, [20011] = 0x7AC1, [20012] = 0x7C05,
++  [20013] = 0x7C0F, [20014] = 0x7BF2, [20015] = 0x7C00, [20016] = 0x7BFF,
++  [20017] = 0x7BFB, [20018] = 0x7C0E, [20019] = 0x7BF4, [20020] = 0x7C0B,
++  [20021] = 0x7BF3, [20022] = 0x7C02, [20023] = 0x7C09, [20024] = 0x7C03,
++  [20025] = 0x7C01, [20026] = 0x7BF8, [20027] = 0x7BFD, [20028] = 0x7C06,
++  [20029] = 0x7BF0, [20030] = 0x7BF1, [20031] = 0x7C10, [20032] = 0x7C0A,
++  [20033] = 0x7CE8, [20034] = 0x7E2D, [20035] = 0x7E3C, [20036] = 0x7E42,
++  [20037] = 0x7E33, [20038] = 0x9848, [20039] = 0x7E38, [20040] = 0x7E2A,
++  [20041] = 0x7E49, [20042] = 0x7E40, [20043] = 0x7E47, [20044] = 0x7E29,
++  [20045] = 0x7E4C, [20046] = 0x7E30, [20047] = 0x7E3B, [20048] = 0x7E36,
++  [20049] = 0x7E44, [20050] = 0x7E3A, [20051] = 0x7F45, [20052] = 0x7F7F,
++  [20053] = 0x7F7E, [20054] = 0x7F7D, [20055] = 0x7FF4, [20056] = 0x7FF2,
++  [20057] = 0x802C, [20058] = 0x81BB, [20059] = 0x81C4, [20060] = 0x81CC,
++  [20061] = 0x81CA, [20062] = 0x81C5, [20063] = 0x81C7, [20064] = 0x81BC,
++  [20065] = 0x81E9, [20066] = 0x825B, [20067] = 0x825A, [20068] = 0x825C,
++  [20069] = 0x8583, [20070] = 0x8580, [20071] = 0x858F, [20072] = 0x85A7,
++  [20073] = 0x8595, [20074] = 0x85A0, [20075] = 0x858B, [20076] = 0x85A3,
++  [20077] = 0x857B, [20078] = 0x85A4, [20079] = 0x859A, [20080] = 0x859E,
++  [20085] = 0x8577, [20086] = 0x857C, [20087] = 0x8589, [20088] = 0x85A1,
++  [20089] = 0x857A, [20090] = 0x8578, [20091] = 0x8557, [20092] = 0x858E,
++  [20093] = 0x8596, [20094] = 0x8586, [20095] = 0x858D, [20096] = 0x8599,
++  [20097] = 0x859D, [20098] = 0x8581, [20099] = 0x85A2, [20100] = 0x8582,
++  [20101] = 0x8588, [20102] = 0x8585, [20103] = 0x8579, [20104] = 0x8576,
++  [20105] = 0x8598, [20106] = 0x8590, [20107] = 0x859F, [20108] = 0x8668,
++  [20109] = 0x87BE, [20110] = 0x87AA, [20111] = 0x87AD, [20112] = 0x87C5,
++  [20113] = 0x87B0, [20114] = 0x87AC, [20115] = 0x87B9, [20116] = 0x87B5,
++  [20117] = 0x87BC, [20118] = 0x87AE, [20119] = 0x87C9, [20120] = 0x87C3,
++  [20121] = 0x87C2, [20122] = 0x87CC, [20123] = 0x87B7, [20124] = 0x87AF,
++  [20125] = 0x87C4, [20126] = 0x87CA, [20127] = 0x87B4, [20128] = 0x87B6,
++  [20129] = 0x87BF, [20130] = 0x87B8, [20131] = 0x87BD, [20132] = 0x87DE,
++  [20133] = 0x87B2, [20134] = 0x8935, [20135] = 0x8933, [20136] = 0x893C,
++  [20137] = 0x893E, [20138] = 0x8941, [20139] = 0x8952, [20140] = 0x8937,
++  [20141] = 0x8942, [20142] = 0x89AD, [20143] = 0x89AF, [20144] = 0x89AE,
++  [20145] = 0x89F2, [20146] = 0x89F3, [20147] = 0x8B1E, [20182] = 0x8B18,
++  [20183] = 0x8B16, [20184] = 0x8B11, [20185] = 0x8B05, [20186] = 0x8B0B,
++  [20187] = 0x8B22, [20188] = 0x8B0F, [20189] = 0x8B12, [20190] = 0x8B15,
++  [20191] = 0x8B07, [20192] = 0x8B0D, [20193] = 0x8B08, [20194] = 0x8B06,
++  [20195] = 0x8B1C, [20196] = 0x8B13, [20197] = 0x8B1A, [20198] = 0x8C4F,
++  [20199] = 0x8C70, [20200] = 0x8C72, [20201] = 0x8C71, [20202] = 0x8C6F,
++  [20203] = 0x8C95, [20204] = 0x8C94, [20205] = 0x8CF9, [20206] = 0x8D6F,
++  [20207] = 0x8E4E, [20208] = 0x8E4D, [20209] = 0x8E53, [20210] = 0x8E50,
++  [20211] = 0x8E4C, [20212] = 0x8E47, [20213] = 0x8F43, [20214] = 0x8F40,
++  [20215] = 0x9085, [20216] = 0x907E, [20217] = 0x9138, [20218] = 0x919A,
++  [20219] = 0x91A2, [20220] = 0x919B, [20221] = 0x9199, [20222] = 0x919F,
++  [20223] = 0x91A1, [20224] = 0x919D, [20225] = 0x91A0, [20226] = 0x93A1,
++  [20227] = 0x9383, [20228] = 0x93AF, [20229] = 0x9364, [20230] = 0x9356,
++  [20231] = 0x9347, [20232] = 0x937C, [20233] = 0x9358, [20234] = 0x935C,
++  [20235] = 0x9376, [20236] = 0x9349, [20237] = 0x9350, [20238] = 0x9351,
++  [20239] = 0x9360, [20240] = 0x936D, [20241] = 0x938F, [20242] = 0x934C,
++  [20243] = 0x936A, [20244] = 0x9379, [20245] = 0x9357, [20246] = 0x9355,
++  [20247] = 0x9352, [20248] = 0x934F, [20249] = 0x9371, [20250] = 0x9377,
++  [20251] = 0x937B, [20252] = 0x9361, [20253] = 0x935E, [20254] = 0x9363,
++  [20255] = 0x9367, [20256] = 0x9380, [20257] = 0x934E, [20258] = 0x9359,
++  [20259] = 0x95C7, [20260] = 0x95C0, [20261] = 0x95C9, [20262] = 0x95C3,
++  [20263] = 0x95C5, [20264] = 0x95B7, [20265] = 0x96AE, [20266] = 0x96B0,
++  [20267] = 0x96AC, [20268] = 0x9720, [20269] = 0x971F, [20270] = 0x9718,
++  [20271] = 0x971D, [20272] = 0x9719, [20273] = 0x979A, [20274] = 0x97A1,
++  [20275] = 0x979C, [20280] = 0x979E, [20281] = 0x979D, [20282] = 0x97D5,
++  [20283] = 0x97D4, [20284] = 0x97F1, [20285] = 0x9841, [20286] = 0x9844,
++  [20287] = 0x984A, [20288] = 0x9849, [20289] = 0x9845, [20290] = 0x9843,
++  [20291] = 0x9925, [20292] = 0x992B, [20293] = 0x992C, [20294] = 0x992A,
++  [20295] = 0x9933, [20296] = 0x9932, [20297] = 0x992F, [20298] = 0x992D,
++  [20299] = 0x9931, [20300] = 0x9930, [20301] = 0x9998, [20302] = 0x99A3,
++  [20303] = 0x99A1, [20304] = 0x9A02, [20305] = 0x99FA, [20306] = 0x99F4,
++  [20307] = 0x99F7, [20308] = 0x99F9, [20309] = 0x99F8, [20310] = 0x99F6,
++  [20311] = 0x99FB, [20312] = 0x99FD, [20313] = 0x99FE, [20314] = 0x99FC,
++  [20315] = 0x9A03, [20316] = 0x9ABE, [20317] = 0x9AFE, [20318] = 0x9AFD,
++  [20319] = 0x9B01, [20320] = 0x9AFC, [20321] = 0x9B48, [20322] = 0x9B9A,
++  [20323] = 0x9BA8, [20324] = 0x9B9E, [20325] = 0x9B9B, [20326] = 0x9BA6,
++  [20327] = 0x9BA1, [20328] = 0x9BA5, [20329] = 0x9BA4, [20330] = 0x9B86,
++  [20331] = 0x9BA2, [20332] = 0x9BA0, [20333] = 0x9BAF, [20334] = 0x9D33,
++  [20335] = 0x9D41, [20336] = 0x9D67, [20337] = 0x9D36, [20338] = 0x9D2E,
++  [20339] = 0x9D2F, [20340] = 0x9D31, [20341] = 0x9D38, [20342] = 0x9D30,
++  [20377] = 0x9D45, [20378] = 0x9D42, [20379] = 0x9D43, [20380] = 0x9D3E,
++  [20381] = 0x9D37, [20382] = 0x9D40, [20383] = 0x9D3D, [20384] = 0x7FF5,
++  [20385] = 0x9D2D, [20386] = 0x9E8A, [20387] = 0x9E89, [20388] = 0x9E8D,
++  [20389] = 0x9EB0, [20390] = 0x9EC8, [20391] = 0x9EDA, [20392] = 0x9EFB,
++  [20393] = 0x9EFF, [20394] = 0x9F24, [20395] = 0x9F23, [20396] = 0x9F22,
++  [20397] = 0x9F54, [20398] = 0x9FA0, [20399] = 0x5131, [20400] = 0x512D,
++  [20401] = 0x512E, [20402] = 0x5698, [20403] = 0x569C, [20404] = 0x5697,
++  [20405] = 0x569A, [20406] = 0x569D, [20407] = 0x5699, [20408] = 0x5970,
++  [20409] = 0x5B3C, [20410] = 0x5C69, [20411] = 0x5C6A, [20412] = 0x5DC0,
++  [20413] = 0x5E6D, [20414] = 0x5E6E, [20415] = 0x61D8, [20416] = 0x61DF,
++  [20417] = 0x61ED, [20418] = 0x61EE, [20419] = 0x61F1, [20420] = 0x61EA,
++  [20421] = 0x61F0, [20422] = 0x61EB, [20423] = 0x61D6, [20424] = 0x61E9,
++  [20425] = 0x64FF, [20426] = 0x6504, [20427] = 0x64FD, [20428] = 0x64F8,
++  [20429] = 0x6501, [20430] = 0x6503, [20431] = 0x64FC, [20432] = 0x6594,
++  [20433] = 0x65DB, [20434] = 0x66DA, [20435] = 0x66DB, [20436] = 0x66D8,
++  [20437] = 0x6AC5, [20438] = 0x6AB9, [20439] = 0x6ABD, [20440] = 0x6AE1,
++  [20441] = 0x6AC6, [20442] = 0x6ABA, [20443] = 0x6AB6, [20444] = 0x6AB7,
++  [20445] = 0x6AC7, [20446] = 0x6AB4, [20447] = 0x6AAD, [20448] = 0x6B5E,
++  [20449] = 0x6BC9, [20450] = 0x6C0B, [20451] = 0x7007, [20452] = 0x700C,
++  [20453] = 0x700D, [20454] = 0x7001, [20455] = 0x7005, [20456] = 0x7014,
++  [20457] = 0x700E, [20458] = 0x6FFF, [20459] = 0x7000, [20460] = 0x6FFB,
++  [20461] = 0x7026, [20462] = 0x6FFC, [20463] = 0x6FF7, [20464] = 0x700A,
++  [20465] = 0x7201, [20466] = 0x71FF, [20467] = 0x71F9, [20468] = 0x7203,
++  [20469] = 0x71FD, [20470] = 0x7376, [20475] = 0x74B8, [20476] = 0x74C0,
++  [20477] = 0x74B5, [20478] = 0x74C1, [20479] = 0x74BE, [20480] = 0x74B6,
++  [20481] = 0x74BB, [20482] = 0x74C2, [20483] = 0x7514, [20484] = 0x7513,
++  [20485] = 0x765C, [20486] = 0x7664, [20487] = 0x7659, [20488] = 0x7650,
++  [20489] = 0x7653, [20490] = 0x7657, [20491] = 0x765A, [20492] = 0x76A6,
++  [20493] = 0x76BD, [20494] = 0x76EC, [20495] = 0x77C2, [20496] = 0x77BA,
++  [20497] = 0x78FF, [20498] = 0x790C, [20499] = 0x7913, [20500] = 0x7914,
++  [20501] = 0x7909, [20502] = 0x7910, [20503] = 0x7912, [20504] = 0x7911,
++  [20505] = 0x79AD, [20506] = 0x79AC, [20507] = 0x7A5F, [20508] = 0x7C1C,
++  [20509] = 0x7C29, [20510] = 0x7C19, [20511] = 0x7C20, [20512] = 0x7C1F,
++  [20513] = 0x7C2D, [20514] = 0x7C1D, [20515] = 0x7C26, [20516] = 0x7C28,
++  [20517] = 0x7C22, [20518] = 0x7C25, [20519] = 0x7C30, [20520] = 0x7E5C,
++  [20521] = 0x7E50, [20522] = 0x7E56, [20523] = 0x7E63, [20524] = 0x7E58,
++  [20525] = 0x7E62, [20526] = 0x7E5F, [20527] = 0x7E51, [20528] = 0x7E60,
++  [20529] = 0x7E57, [20530] = 0x7E53, [20531] = 0x7FB5, [20532] = 0x7FB3,
++  [20533] = 0x7FF7, [20534] = 0x7FF8, [20535] = 0x8075, [20536] = 0x81D1,
++  [20537] = 0x81D2, [20572] = 0x81D0, [20573] = 0x825F, [20574] = 0x825E,
++  [20575] = 0x85B4, [20576] = 0x85C6, [20577] = 0x85C0, [20578] = 0x85C3,
++  [20579] = 0x85C2, [20580] = 0x85B3, [20581] = 0x85B5, [20582] = 0x85BD,
++  [20583] = 0x85C7, [20584] = 0x85C4, [20585] = 0x85BF, [20586] = 0x85CB,
++  [20587] = 0x85CE, [20588] = 0x85C8, [20589] = 0x85C5, [20590] = 0x85B1,
++  [20591] = 0x85B6, [20592] = 0x85D2, [20593] = 0x8624, [20594] = 0x85B8,
++  [20595] = 0x85B7, [20596] = 0x85BE, [20597] = 0x8669, [20598] = 0x87E7,
++  [20599] = 0x87E6, [20600] = 0x87E2, [20601] = 0x87DB, [20602] = 0x87EB,
++  [20603] = 0x87EA, [20604] = 0x87E5, [20605] = 0x87DF, [20606] = 0x87F3,
++  [20607] = 0x87E4, [20608] = 0x87D4, [20609] = 0x87DC, [20610] = 0x87D3,
++  [20611] = 0x87ED, [20612] = 0x87D8, [20613] = 0x87E3, [20614] = 0x87A4,
++  [20615] = 0x87D7, [20616] = 0x87D9, [20617] = 0x8801, [20618] = 0x87F4,
++  [20619] = 0x87E8, [20620] = 0x87DD, [20621] = 0x8953, [20622] = 0x894B,
++  [20623] = 0x894F, [20624] = 0x894C, [20625] = 0x8946, [20626] = 0x8950,
++  [20627] = 0x8951, [20628] = 0x8949, [20629] = 0x8B2A, [20630] = 0x8B27,
++  [20631] = 0x8B23, [20632] = 0x8B33, [20633] = 0x8B30, [20634] = 0x8B35,
++  [20635] = 0x8B47, [20636] = 0x8B2F, [20637] = 0x8B3C, [20638] = 0x8B3E,
++  [20639] = 0x8B31, [20640] = 0x8B25, [20641] = 0x8B37, [20642] = 0x8B26,
++  [20643] = 0x8B36, [20644] = 0x8B2E, [20645] = 0x8B24, [20646] = 0x8B3B,
++  [20647] = 0x8B3D, [20648] = 0x8B3A, [20649] = 0x8C42, [20650] = 0x8C75,
++  [20651] = 0x8C99, [20652] = 0x8C98, [20653] = 0x8C97, [20654] = 0x8CFE,
++  [20655] = 0x8D04, [20656] = 0x8D02, [20657] = 0x8D00, [20658] = 0x8E5C,
++  [20659] = 0x8E62, [20660] = 0x8E60, [20661] = 0x8E57, [20662] = 0x8E56,
++  [20663] = 0x8E5E, [20664] = 0x8E65, [20665] = 0x8E67, [20670] = 0x8E5B,
++  [20671] = 0x8E5A, [20672] = 0x8E61, [20673] = 0x8E5D, [20674] = 0x8E69,
++  [20675] = 0x8E54, [20676] = 0x8F46, [20677] = 0x8F47, [20678] = 0x8F48,
++  [20679] = 0x8F4B, [20680] = 0x9128, [20681] = 0x913A, [20682] = 0x913B,
++  [20683] = 0x913E, [20684] = 0x91A8, [20685] = 0x91A5, [20686] = 0x91A7,
++  [20687] = 0x91AF, [20688] = 0x91AA, [20689] = 0x93B5, [20690] = 0x938C,
++  [20691] = 0x9392, [20692] = 0x93B7, [20693] = 0x939B, [20694] = 0x939D,
++  [20695] = 0x9389, [20696] = 0x93A7, [20697] = 0x938E, [20698] = 0x93AA,
++  [20699] = 0x939E, [20700] = 0x93A6, [20701] = 0x9395, [20702] = 0x9388,
++  [20703] = 0x9399, [20704] = 0x939F, [20705] = 0x938D, [20706] = 0x93B1,
++  [20707] = 0x9391, [20708] = 0x93B2, [20709] = 0x93A4, [20710] = 0x93A8,
++  [20711] = 0x93B4, [20712] = 0x93A3, [20713] = 0x93A5, [20714] = 0x95D2,
++  [20715] = 0x95D3, [20716] = 0x95D1, [20717] = 0x96B3, [20718] = 0x96D7,
++  [20719] = 0x96DA, [20720] = 0x5DC2, [20721] = 0x96DF, [20722] = 0x96D8,
++  [20723] = 0x96DD, [20724] = 0x9723, [20725] = 0x9722, [20726] = 0x9725,
++  [20727] = 0x97AC, [20728] = 0x97AE, [20729] = 0x97A8, [20730] = 0x97AB,
++  [20731] = 0x97A4, [20732] = 0x97AA, [20767] = 0x97A2, [20768] = 0x97A5,
++  [20769] = 0x97D7, [20770] = 0x97D9, [20771] = 0x97D6, [20772] = 0x97D8,
++  [20773] = 0x97FA, [20774] = 0x9850, [20775] = 0x9851, [20776] = 0x9852,
++  [20777] = 0x98B8, [20778] = 0x9941, [20779] = 0x993C, [20780] = 0x993A,
++  [20781] = 0x9A0F, [20782] = 0x9A0B, [20783] = 0x9A09, [20784] = 0x9A0D,
++  [20785] = 0x9A04, [20786] = 0x9A11, [20787] = 0x9A0A, [20788] = 0x9A05,
++  [20789] = 0x9A07, [20790] = 0x9A06, [20791] = 0x9AC0, [20792] = 0x9ADC,
++  [20793] = 0x9B08, [20794] = 0x9B04, [20795] = 0x9B05, [20796] = 0x9B29,
++  [20797] = 0x9B35, [20798] = 0x9B4A, [20799] = 0x9B4C, [20800] = 0x9B4B,
++  [20801] = 0x9BC7, [20802] = 0x9BC6, [20803] = 0x9BC3, [20804] = 0x9BBF,
++  [20805] = 0x9BC1, [20806] = 0x9BB5, [20807] = 0x9BB8, [20808] = 0x9BD3,
++  [20809] = 0x9BB6, [20810] = 0x9BC4, [20811] = 0x9BB9, [20812] = 0x9BBD,
++  [20813] = 0x9D5C, [20814] = 0x9D53, [20815] = 0x9D4F, [20816] = 0x9D4A,
++  [20817] = 0x9D5B, [20818] = 0x9D4B, [20819] = 0x9D59, [20820] = 0x9D56,
++  [20821] = 0x9D4C, [20822] = 0x9D57, [20823] = 0x9D52, [20824] = 0x9D54,
++  [20825] = 0x9D5F, [20826] = 0x9D58, [20827] = 0x9D5A, [20828] = 0x9E8E,
++  [20829] = 0x9E8C, [20830] = 0x9EDF, [20831] = 0x9F01, [20832] = 0x9F00,
++  [20833] = 0x9F16, [20834] = 0x9F25, [20835] = 0x9F2B, [20836] = 0x9F2A,
++  [20837] = 0x9F29, [20838] = 0x9F28, [20839] = 0x9F4C, [20840] = 0x9F55,
++  [20841] = 0x5134, [20842] = 0x5135, [20843] = 0x5296, [20844] = 0x52F7,
++  [20845] = 0x53B4, [20846] = 0x56AB, [20847] = 0x56AD, [20848] = 0x56A6,
++  [20849] = 0x56A7, [20850] = 0x56AA, [20851] = 0x56AC, [20852] = 0x58DA,
++  [20853] = 0x58DD, [20854] = 0x58DB, [20855] = 0x5912, [20856] = 0x5B3D,
++  [20857] = 0x5B3E, [20858] = 0x5B3F, [20859] = 0x5DC3, [20860] = 0x5E70,
++  [20865] = 0x5FBF, [20866] = 0x61FB, [20867] = 0x6507, [20868] = 0x6510,
++  [20869] = 0x650D, [20870] = 0x6509, [20871] = 0x650C, [20872] = 0x650E,
++  [20873] = 0x6584, [20874] = 0x65DE, [20875] = 0x65DD, [20876] = 0x66DE,
++  [20877] = 0x6AE7, [20878] = 0x6AE0, [20879] = 0x6ACC, [20880] = 0x6AD1,
++  [20881] = 0x6AD9, [20882] = 0x6ACB, [20883] = 0x6ADF, [20884] = 0x6ADC,
++  [20885] = 0x6AD0, [20886] = 0x6AEB, [20887] = 0x6ACF, [20888] = 0x6ACD,
++  [20889] = 0x6ADE, [20890] = 0x6B60, [20891] = 0x6BB0, [20892] = 0x6C0C,
++  [20893] = 0x7019, [20894] = 0x7027, [20895] = 0x7020, [20896] = 0x7016,
++  [20897] = 0x702B, [20898] = 0x7021, [20899] = 0x7022, [20900] = 0x7023,
++  [20901] = 0x7029, [20902] = 0x7017, [20903] = 0x7024, [20904] = 0x701C,
++  [20905] = 0x702A, [20906] = 0x720C, [20907] = 0x720A, [20908] = 0x7207,
++  [20909] = 0x7202, [20910] = 0x7205, [20911] = 0x72A5, [20912] = 0x72A6,
++  [20913] = 0x72A4, [20914] = 0x72A3, [20915] = 0x72A1, [20916] = 0x74CB,
++  [20917] = 0x74C5, [20918] = 0x74B7, [20919] = 0x74C3, [20920] = 0x7516,
++  [20921] = 0x7660, [20922] = 0x77C9, [20923] = 0x77CA, [20924] = 0x77C4,
++  [20925] = 0x77F1, [20926] = 0x791D, [20927] = 0x791B, [20962] = 0x7921,
++  [20963] = 0x791C, [20964] = 0x7917, [20965] = 0x791E, [20966] = 0x79B0,
++  [20967] = 0x7A67, [20968] = 0x7A68, [20969] = 0x7C33, [20970] = 0x7C3C,
++  [20971] = 0x7C39, [20972] = 0x7C2C, [20973] = 0x7C3B, [20974] = 0x7CEC,
++  [20975] = 0x7CEA, [20976] = 0x7E76, [20977] = 0x7E75, [20978] = 0x7E78,
++  [20979] = 0x7E70, [20980] = 0x7E77, [20981] = 0x7E6F, [20982] = 0x7E7A,
++  [20983] = 0x7E72, [20984] = 0x7E74, [20985] = 0x7E68, [20986] = 0x7F4B,
++  [20987] = 0x7F4A, [20988] = 0x7F83, [20989] = 0x7F86, [20990] = 0x7FB7,
++  [20991] = 0x7FFD, [20992] = 0x7FFE, [20993] = 0x8078, [20994] = 0x81D7,
++  [20995] = 0x81D5, [20996] = 0x8264, [20997] = 0x8261, [20998] = 0x8263,
++  [20999] = 0x85EB, [21000] = 0x85F1, [21001] = 0x85ED, [21002] = 0x85D9,
++  [21003] = 0x85E1, [21004] = 0x85E8, [21005] = 0x85DA, [21006] = 0x85D7,
++  [21007] = 0x85EC, [21008] = 0x85F2, [21009] = 0x85F8, [21010] = 0x85D8,
++  [21011] = 0x85DF, [21012] = 0x85E3, [21013] = 0x85DC, [21014] = 0x85D1,
++  [21015] = 0x85F0, [21016] = 0x85E6, [21017] = 0x85EF, [21018] = 0x85DE,
++  [21019] = 0x85E2, [21020] = 0x8800, [21021] = 0x87FA, [21022] = 0x8803,
++  [21023] = 0x87F6, [21024] = 0x87F7, [21025] = 0x8809, [21026] = 0x880C,
++  [21027] = 0x880B, [21028] = 0x8806, [21029] = 0x87FC, [21030] = 0x8808,
++  [21031] = 0x87FF, [21032] = 0x880A, [21033] = 0x8802, [21034] = 0x8962,
++  [21035] = 0x895A, [21036] = 0x895B, [21037] = 0x8957, [21038] = 0x8961,
++  [21039] = 0x895C, [21040] = 0x8958, [21041] = 0x895D, [21042] = 0x8959,
++  [21043] = 0x8988, [21044] = 0x89B7, [21045] = 0x89B6, [21046] = 0x89F6,
++  [21047] = 0x8B50, [21048] = 0x8B48, [21049] = 0x8B4A, [21050] = 0x8B40,
++  [21051] = 0x8B53, [21052] = 0x8B56, [21053] = 0x8B54, [21054] = 0x8B4B,
++  [21055] = 0x8B55, [21060] = 0x8B51, [21061] = 0x8B42, [21062] = 0x8B52,
++  [21063] = 0x8B57, [21064] = 0x8C43, [21065] = 0x8C77, [21066] = 0x8C76,
++  [21067] = 0x8C9A, [21068] = 0x8D06, [21069] = 0x8D07, [21070] = 0x8D09,
++  [21071] = 0x8DAC, [21072] = 0x8DAA, [21073] = 0x8DAD, [21074] = 0x8DAB,
++  [21075] = 0x8E6D, [21076] = 0x8E78, [21077] = 0x8E73, [21078] = 0x8E6A,
++  [21079] = 0x8E6F, [21080] = 0x8E7B, [21081] = 0x8EC2, [21082] = 0x8F52,
++  [21083] = 0x8F51, [21084] = 0x8F4F, [21085] = 0x8F50, [21086] = 0x8F53,
++  [21087] = 0x8FB4, [21088] = 0x9140, [21089] = 0x913F, [21090] = 0x91B0,
++  [21091] = 0x91AD, [21092] = 0x93DE, [21093] = 0x93C7, [21094] = 0x93CF,
++  [21095] = 0x93C2, [21096] = 0x93DA, [21097] = 0x93D0, [21098] = 0x93F9,
++  [21099] = 0x93EC, [21100] = 0x93CC, [21101] = 0x93D9, [21102] = 0x93A9,
++  [21103] = 0x93E6, [21104] = 0x93CA, [21105] = 0x93D4, [21106] = 0x93EE,
++  [21107] = 0x93E3, [21108] = 0x93D5, [21109] = 0x93C4, [21110] = 0x93CE,
++  [21111] = 0x93C0, [21112] = 0x93D2, [21113] = 0x93E7, [21114] = 0x957D,
++  [21115] = 0x95DA, [21116] = 0x95DB, [21117] = 0x96E1, [21118] = 0x9729,
++  [21119] = 0x972B, [21120] = 0x972C, [21121] = 0x9728, [21122] = 0x9726,
++  [21157] = 0x97B3, [21158] = 0x97B7, [21159] = 0x97B6, [21160] = 0x97DD,
++  [21161] = 0x97DE, [21162] = 0x97DF, [21163] = 0x985C, [21164] = 0x9859,
++  [21165] = 0x985D, [21166] = 0x9857, [21167] = 0x98BF, [21168] = 0x98BD,
++  [21169] = 0x98BB, [21170] = 0x98BE, [21171] = 0x9948, [21172] = 0x9947,
++  [21173] = 0x9943, [21174] = 0x99A6, [21175] = 0x99A7, [21176] = 0x9A1A,
++  [21177] = 0x9A15, [21178] = 0x9A25, [21179] = 0x9A1D, [21180] = 0x9A24,
++  [21181] = 0x9A1B, [21182] = 0x9A22, [21183] = 0x9A20, [21184] = 0x9A27,
++  [21185] = 0x9A23, [21186] = 0x9A1E, [21187] = 0x9A1C, [21188] = 0x9A14,
++  [21189] = 0x9AC2, [21190] = 0x9B0B, [21191] = 0x9B0A, [21192] = 0x9B0E,
++  [21193] = 0x9B0C, [21194] = 0x9B37, [21195] = 0x9BEA, [21196] = 0x9BEB,
++  [21197] = 0x9BE0, [21198] = 0x9BDE, [21199] = 0x9BE4, [21200] = 0x9BE6,
++  [21201] = 0x9BE2, [21202] = 0x9BF0, [21203] = 0x9BD4, [21204] = 0x9BD7,
++  [21205] = 0x9BEC, [21206] = 0x9BDC, [21207] = 0x9BD9, [21208] = 0x9BE5,
++  [21209] = 0x9BD5, [21210] = 0x9BE1, [21211] = 0x9BDA, [21212] = 0x9D77,
++  [21213] = 0x9D81, [21214] = 0x9D8A, [21215] = 0x9D84, [21216] = 0x9D88,
++  [21217] = 0x9D71, [21218] = 0x9D80, [21219] = 0x9D78, [21220] = 0x9D86,
++  [21221] = 0x9D8B, [21222] = 0x9D8C, [21223] = 0x9D7D, [21224] = 0x9D6B,
++  [21225] = 0x9D74, [21226] = 0x9D75, [21227] = 0x9D70, [21228] = 0x9D69,
++  [21229] = 0x9D85, [21230] = 0x9D73, [21231] = 0x9D7B, [21232] = 0x9D82,
++  [21233] = 0x9D6F, [21234] = 0x9D79, [21235] = 0x9D7F, [21236] = 0x9D87,
++  [21237] = 0x9D68, [21238] = 0x9E94, [21239] = 0x9E91, [21240] = 0x9EC0,
++  [21241] = 0x9EFC, [21242] = 0x9F2D, [21243] = 0x9F40, [21244] = 0x9F41,
++  [21245] = 0x9F4D, [21246] = 0x9F56, [21247] = 0x9F57, [21248] = 0x9F58,
++  [21249] = 0x5337, [21250] = 0x56B2, [21255] = 0x56B5, [21256] = 0x56B3,
++  [21257] = 0x58E3, [21258] = 0x5B45, [21259] = 0x5DC6, [21260] = 0x5DC7,
++  [21261] = 0x5EEE, [21262] = 0x5EEF, [21263] = 0x5FC0, [21264] = 0x5FC1,
++  [21265] = 0x61F9, [21266] = 0x6517, [21267] = 0x6516, [21268] = 0x6515,
++  [21269] = 0x6513, [21270] = 0x65DF, [21271] = 0x66E8, [21272] = 0x66E3,
++  [21273] = 0x66E4, [21274] = 0x6AF3, [21275] = 0x6AF0, [21276] = 0x6AEA,
++  [21277] = 0x6AE8, [21278] = 0x6AF9, [21279] = 0x6AF1, [21280] = 0x6AEE,
++  [21281] = 0x6AEF, [21282] = 0x703C, [21283] = 0x7035, [21284] = 0x702F,
++  [21285] = 0x7037, [21286] = 0x7034, [21287] = 0x7031, [21288] = 0x7042,
++  [21289] = 0x7038, [21290] = 0x703F, [21291] = 0x703A, [21292] = 0x7039,
++  [21293] = 0x7040, [21294] = 0x703B, [21295] = 0x7033, [21296] = 0x7041,
++  [21297] = 0x7213, [21298] = 0x7214, [21299] = 0x72A8, [21300] = 0x737D,
++  [21301] = 0x737C, [21302] = 0x74BA, [21303] = 0x76AB, [21304] = 0x76AA,
++  [21305] = 0x76BE, [21306] = 0x76ED, [21307] = 0x77CC, [21308] = 0x77CE,
++  [21309] = 0x77CF, [21310] = 0x77CD, [21311] = 0x77F2, [21312] = 0x7925,
++  [21313] = 0x7923, [21314] = 0x7927, [21315] = 0x7928, [21316] = 0x7924,
++  [21317] = 0x7929, [21352] = 0x79B2, [21353] = 0x7A6E, [21354] = 0x7A6C,
++  [21355] = 0x7A6D, [21356] = 0x7AF7, [21357] = 0x7C49, [21358] = 0x7C48,
++  [21359] = 0x7C4A, [21360] = 0x7C47, [21361] = 0x7C45, [21362] = 0x7CEE,
++  [21363] = 0x7E7B, [21364] = 0x7E7E, [21365] = 0x7E81, [21366] = 0x7E80,
++  [21367] = 0x7FBA, [21368] = 0x7FFF, [21369] = 0x8079, [21370] = 0x81DB,
++  [21371] = 0x81D9, [21372] = 0x820B, [21373] = 0x8268, [21374] = 0x8269,
++  [21375] = 0x8622, [21376] = 0x85FF, [21377] = 0x8601, [21378] = 0x85FE,
++  [21379] = 0x861B, [21380] = 0x8600, [21381] = 0x85F6, [21382] = 0x8604,
++  [21383] = 0x8609, [21384] = 0x8605, [21385] = 0x860C, [21386] = 0x85FD,
++  [21387] = 0x8819, [21388] = 0x8810, [21389] = 0x8811, [21390] = 0x8817,
++  [21391] = 0x8813, [21392] = 0x8816, [21393] = 0x8963, [21394] = 0x8966,
++  [21395] = 0x89B9, [21396] = 0x89F7, [21397] = 0x8B60, [21398] = 0x8B6A,
++  [21399] = 0x8B5D, [21400] = 0x8B68, [21401] = 0x8B63, [21402] = 0x8B65,
++  [21403] = 0x8B67, [21404] = 0x8B6D, [21405] = 0x8DAE, [21406] = 0x8E86,
++  [21407] = 0x8E88, [21408] = 0x8E84, [21409] = 0x8F59, [21410] = 0x8F56,
++  [21411] = 0x8F57, [21412] = 0x8F55, [21413] = 0x8F58, [21414] = 0x8F5A,
++  [21415] = 0x908D, [21416] = 0x9143, [21417] = 0x9141, [21418] = 0x91B7,
++  [21419] = 0x91B5, [21420] = 0x91B2, [21421] = 0x91B3, [21422] = 0x940B,
++  [21423] = 0x9413, [21424] = 0x93FB, [21425] = 0x9420, [21426] = 0x940F,
++  [21427] = 0x9414, [21428] = 0x93FE, [21429] = 0x9415, [21430] = 0x9410,
++  [21431] = 0x9428, [21432] = 0x9419, [21433] = 0x940D, [21434] = 0x93F5,
++  [21435] = 0x9400, [21436] = 0x93F7, [21437] = 0x9407, [21438] = 0x940E,
++  [21439] = 0x9416, [21440] = 0x9412, [21441] = 0x93FA, [21442] = 0x9409,
++  [21443] = 0x93F8, [21444] = 0x940A, [21445] = 0x93FF, [21450] = 0x93FC,
++  [21451] = 0x940C, [21452] = 0x93F6, [21453] = 0x9411, [21454] = 0x9406,
++  [21455] = 0x95DE, [21456] = 0x95E0, [21457] = 0x95DF, [21458] = 0x972E,
++  [21459] = 0x972F, [21460] = 0x97B9, [21461] = 0x97BB, [21462] = 0x97FD,
++  [21463] = 0x97FE, [21464] = 0x9860, [21465] = 0x9862, [21466] = 0x9863,
++  [21467] = 0x985F, [21468] = 0x98C1, [21469] = 0x98C2, [21470] = 0x9950,
++  [21471] = 0x994E, [21472] = 0x9959, [21473] = 0x994C, [21474] = 0x994B,
++  [21475] = 0x9953, [21476] = 0x9A32, [21477] = 0x9A34, [21478] = 0x9A31,
++  [21479] = 0x9A2C, [21480] = 0x9A2A, [21481] = 0x9A36, [21482] = 0x9A29,
++  [21483] = 0x9A2E, [21484] = 0x9A38, [21485] = 0x9A2D, [21486] = 0x9AC7,
++  [21487] = 0x9ACA, [21488] = 0x9AC6, [21489] = 0x9B10, [21490] = 0x9B12,
++  [21491] = 0x9B11, [21492] = 0x9C0B, [21493] = 0x9C08, [21494] = 0x9BF7,
++  [21495] = 0x9C05, [21496] = 0x9C12, [21497] = 0x9BF8, [21498] = 0x9C40,
++  [21499] = 0x9C07, [21500] = 0x9C0E, [21501] = 0x9C06, [21502] = 0x9C17,
++  [21503] = 0x9C14, [21504] = 0x9C09, [21505] = 0x9D9F, [21506] = 0x9D99,
++  [21507] = 0x9DA4, [21508] = 0x9D9D, [21509] = 0x9D92, [21510] = 0x9D98,
++  [21511] = 0x9D90, [21512] = 0x9D9B, [21547] = 0x9DA0, [21548] = 0x9D94,
++  [21549] = 0x9D9C, [21550] = 0x9DAA, [21551] = 0x9D97, [21552] = 0x9DA1,
++  [21553] = 0x9D9A, [21554] = 0x9DA2, [21555] = 0x9DA8, [21556] = 0x9D9E,
++  [21557] = 0x9DA3, [21558] = 0x9DBF, [21559] = 0x9DA9, [21560] = 0x9D96,
++  [21561] = 0x9DA6, [21562] = 0x9DA7, [21563] = 0x9E99, [21564] = 0x9E9B,
++  [21565] = 0x9E9A, [21566] = 0x9EE5, [21567] = 0x9EE4, [21568] = 0x9EE7,
++  [21569] = 0x9EE6, [21570] = 0x9F30, [21571] = 0x9F2E, [21572] = 0x9F5B,
++  [21573] = 0x9F60, [21574] = 0x9F5E, [21575] = 0x9F5D, [21576] = 0x9F59,
++  [21577] = 0x9F91, [21578] = 0x513A, [21579] = 0x5139, [21580] = 0x5298,
++  [21581] = 0x5297, [21582] = 0x56C3, [21583] = 0x56BD, [21584] = 0x56BE,
++  [21585] = 0x5B48, [21586] = 0x5B47, [21587] = 0x5DCB, [21588] = 0x5DCF,
++  [21589] = 0x5EF1, [21590] = 0x61FD, [21591] = 0x651B, [21592] = 0x6B02,
++  [21593] = 0x6AFC, [21594] = 0x6B03, [21595] = 0x6AF8, [21596] = 0x6B00,
++  [21597] = 0x7043, [21598] = 0x7044, [21599] = 0x704A, [21600] = 0x7048,
++  [21601] = 0x7049, [21602] = 0x7045, [21603] = 0x7046, [21604] = 0x721D,
++  [21605] = 0x721A, [21606] = 0x7219, [21607] = 0x737E, [21608] = 0x7517,
++  [21609] = 0x766A, [21610] = 0x77D0, [21611] = 0x792D, [21612] = 0x7931,
++  [21613] = 0x792F, [21614] = 0x7C54, [21615] = 0x7C53, [21616] = 0x7CF2,
++  [21617] = 0x7E8A, [21618] = 0x7E87, [21619] = 0x7E88, [21620] = 0x7E8B,
++  [21621] = 0x7E86, [21622] = 0x7E8D, [21623] = 0x7F4D, [21624] = 0x7FBB,
++  [21625] = 0x8030, [21626] = 0x81DD, [21627] = 0x8618, [21628] = 0x862A,
++  [21629] = 0x8626, [21630] = 0x861F, [21631] = 0x8623, [21632] = 0x861C,
++  [21633] = 0x8619, [21634] = 0x8627, [21635] = 0x862E, [21636] = 0x8621,
++  [21637] = 0x8620, [21638] = 0x8629, [21639] = 0x861E, [21640] = 0x8625,
++  [21645] = 0x8829, [21646] = 0x881D, [21647] = 0x881B, [21648] = 0x8820,
++  [21649] = 0x8824, [21650] = 0x881C, [21651] = 0x882B, [21652] = 0x884A,
++  [21653] = 0x896D, [21654] = 0x8969, [21655] = 0x896E, [21656] = 0x896B,
++  [21657] = 0x89FA, [21658] = 0x8B79, [21659] = 0x8B78, [21660] = 0x8B45,
++  [21661] = 0x8B7A, [21662] = 0x8B7B, [21663] = 0x8D10, [21664] = 0x8D14,
++  [21665] = 0x8DAF, [21666] = 0x8E8E, [21667] = 0x8E8C, [21668] = 0x8F5E,
++  [21669] = 0x8F5B, [21670] = 0x8F5D, [21671] = 0x9146, [21672] = 0x9144,
++  [21673] = 0x9145, [21674] = 0x91B9, [21675] = 0x943F, [21676] = 0x943B,
++  [21677] = 0x9436, [21678] = 0x9429, [21679] = 0x943D, [21680] = 0x943C,
++  [21681] = 0x9430, [21682] = 0x9439, [21683] = 0x942A, [21684] = 0x9437,
++  [21685] = 0x942C, [21686] = 0x9440, [21687] = 0x9431, [21688] = 0x95E5,
++  [21689] = 0x95E4, [21690] = 0x95E3, [21691] = 0x9735, [21692] = 0x973A,
++  [21693] = 0x97BF, [21694] = 0x97E1, [21695] = 0x9864, [21696] = 0x98C9,
++  [21697] = 0x98C6, [21698] = 0x98C0, [21699] = 0x9958, [21700] = 0x9956,
++  [21701] = 0x9A39, [21702] = 0x9A3D, [21703] = 0x9A46, [21704] = 0x9A44,
++  [21705] = 0x9A42, [21706] = 0x9A41, [21707] = 0x9A3A, [21742] = 0x9A3F,
++  [21743] = 0x9ACD, [21744] = 0x9B15, [21745] = 0x9B17, [21746] = 0x9B18,
++  [21747] = 0x9B16, [21748] = 0x9B3A, [21749] = 0x9B52, [21750] = 0x9C2B,
++  [21751] = 0x9C1D, [21752] = 0x9C1C, [21753] = 0x9C2C, [21754] = 0x9C23,
++  [21755] = 0x9C28, [21756] = 0x9C29, [21757] = 0x9C24, [21758] = 0x9C21,
++  [21759] = 0x9DB7, [21760] = 0x9DB6, [21761] = 0x9DBC, [21762] = 0x9DC1,
++  [21763] = 0x9DC7, [21764] = 0x9DCA, [21765] = 0x9DCF, [21766] = 0x9DBE,
++  [21767] = 0x9DC5, [21768] = 0x9DC3, [21769] = 0x9DBB, [21770] = 0x9DB5,
++  [21771] = 0x9DCE, [21772] = 0x9DB9, [21773] = 0x9DBA, [21774] = 0x9DAC,
++  [21775] = 0x9DC8, [21776] = 0x9DB1, [21777] = 0x9DAD, [21778] = 0x9DCC,
++  [21779] = 0x9DB3, [21780] = 0x9DCD, [21781] = 0x9DB2, [21782] = 0x9E7A,
++  [21783] = 0x9E9C, [21784] = 0x9EEB, [21785] = 0x9EEE, [21786] = 0x9EED,
++  [21787] = 0x9F1B, [21788] = 0x9F18, [21789] = 0x9F1A, [21790] = 0x9F31,
++  [21791] = 0x9F4E, [21792] = 0x9F65, [21793] = 0x9F64, [21794] = 0x9F92,
++  [21795] = 0x4EB9, [21796] = 0x56C6, [21797] = 0x56C5, [21798] = 0x56CB,
++  [21799] = 0x5971, [21800] = 0x5B4B, [21801] = 0x5B4C, [21802] = 0x5DD5,
++  [21803] = 0x5DD1, [21804] = 0x5EF2, [21805] = 0x6521, [21806] = 0x6520,
++  [21807] = 0x6526, [21808] = 0x6522, [21809] = 0x6B0B, [21810] = 0x6B08,
++  [21811] = 0x6B09, [21812] = 0x6C0D, [21813] = 0x7055, [21814] = 0x7056,
++  [21815] = 0x7057, [21816] = 0x7052, [21817] = 0x721E, [21818] = 0x721F,
++  [21819] = 0x72A9, [21820] = 0x737F, [21821] = 0x74D8, [21822] = 0x74D5,
++  [21823] = 0x74D9, [21824] = 0x74D7, [21825] = 0x766D, [21826] = 0x76AD,
++  [21827] = 0x7935, [21828] = 0x79B4, [21829] = 0x7A70, [21830] = 0x7A71,
++  [21831] = 0x7C57, [21832] = 0x7C5C, [21833] = 0x7C59, [21834] = 0x7C5B,
++  [21835] = 0x7C5A, [21840] = 0x7CF4, [21841] = 0x7CF1, [21842] = 0x7E91,
++  [21843] = 0x7F4F, [21844] = 0x7F87, [21845] = 0x81DE, [21846] = 0x826B,
++  [21847] = 0x8634, [21848] = 0x8635, [21849] = 0x8633, [21850] = 0x862C,
++  [21851] = 0x8632, [21852] = 0x8636, [21853] = 0x882C, [21854] = 0x8828,
++  [21855] = 0x8826, [21856] = 0x882A, [21857] = 0x8825, [21858] = 0x8971,
++  [21859] = 0x89BF, [21860] = 0x89BE, [21861] = 0x89FB, [21862] = 0x8B7E,
++  [21863] = 0x8B84, [21864] = 0x8B82, [21865] = 0x8B86, [21866] = 0x8B85,
++  [21867] = 0x8B7F, [21868] = 0x8D15, [21869] = 0x8E95, [21870] = 0x8E94,
++  [21871] = 0x8E9A, [21872] = 0x8E92, [21873] = 0x8E90, [21874] = 0x8E96,
++  [21875] = 0x8E97, [21876] = 0x8F60, [21877] = 0x8F62, [21878] = 0x9147,
++  [21879] = 0x944C, [21880] = 0x9450, [21881] = 0x944A, [21882] = 0x944B,
++  [21883] = 0x944F, [21884] = 0x9447, [21885] = 0x9445, [21886] = 0x9448,
++  [21887] = 0x9449, [21888] = 0x9446, [21889] = 0x973F, [21890] = 0x97E3,
++  [21891] = 0x986A, [21892] = 0x9869, [21893] = 0x98CB, [21894] = 0x9954,
++  [21895] = 0x995B, [21896] = 0x9A4E, [21897] = 0x9A53, [21898] = 0x9A54,
++  [21899] = 0x9A4C, [21900] = 0x9A4F, [21901] = 0x9A48, [21902] = 0x9A4A,
++  [21937] = 0x9A49, [21938] = 0x9A52, [21939] = 0x9A50, [21940] = 0x9AD0,
++  [21941] = 0x9B19, [21942] = 0x9B2B, [21943] = 0x9B3B, [21944] = 0x9B56,
++  [21945] = 0x9B55, [21946] = 0x9C46, [21947] = 0x9C48, [21948] = 0x9C3F,
++  [21949] = 0x9C44, [21950] = 0x9C39, [21951] = 0x9C33, [21952] = 0x9C41,
++  [21953] = 0x9C3C, [21954] = 0x9C37, [21955] = 0x9C34, [21956] = 0x9C32,
++  [21957] = 0x9C3D, [21958] = 0x9C36, [21959] = 0x9DDB, [21960] = 0x9DD2,
++  [21961] = 0x9DDE, [21962] = 0x9DDA, [21963] = 0x9DCB, [21964] = 0x9DD0,
++  [21965] = 0x9DDC, [21966] = 0x9DD1, [21967] = 0x9DDF, [21968] = 0x9DE9,
++  [21969] = 0x9DD9, [21970] = 0x9DD8, [21971] = 0x9DD6, [21972] = 0x9DF5,
++  [21973] = 0x9DD5, [21974] = 0x9DDD, [21975] = 0x9EB6, [21976] = 0x9EF0,
++  [21977] = 0x9F35, [21978] = 0x9F33, [21979] = 0x9F32, [21980] = 0x9F42,
++  [21981] = 0x9F6B, [21982] = 0x9F95, [21983] = 0x9FA2, [21984] = 0x513D,
++  [21985] = 0x5299, [21986] = 0x58E8, [21987] = 0x58E7, [21988] = 0x5972,
++  [21989] = 0x5B4D, [21990] = 0x5DD8, [21991] = 0x882F, [21992] = 0x5F4F,
++  [21993] = 0x6201, [21994] = 0x6203, [21995] = 0x6204, [21996] = 0x6529,
++  [21997] = 0x6525, [21998] = 0x6596, [21999] = 0x66EB, [22000] = 0x6B11,
++  [22001] = 0x6B12, [22002] = 0x6B0F, [22003] = 0x6BCA, [22004] = 0x705B,
++  [22005] = 0x705A, [22006] = 0x7222, [22007] = 0x7382, [22008] = 0x7381,
++  [22009] = 0x7383, [22010] = 0x7670, [22011] = 0x77D4, [22012] = 0x7C67,
++  [22013] = 0x7C66, [22014] = 0x7E95, [22015] = 0x826C, [22016] = 0x863A,
++  [22017] = 0x8640, [22018] = 0x8639, [22019] = 0x863C, [22020] = 0x8631,
++  [22021] = 0x863B, [22022] = 0x863E, [22023] = 0x8830, [22024] = 0x8832,
++  [22025] = 0x882E, [22026] = 0x8833, [22027] = 0x8976, [22028] = 0x8974,
++  [22029] = 0x8973, [22030] = 0x89FE, [22035] = 0x8B8C, [22036] = 0x8B8E,
++  [22037] = 0x8B8B, [22038] = 0x8B88, [22039] = 0x8C45, [22040] = 0x8D19,
++  [22041] = 0x8E98, [22042] = 0x8F64, [22043] = 0x8F63, [22044] = 0x91BC,
++  [22045] = 0x9462, [22046] = 0x9455, [22047] = 0x945D, [22048] = 0x9457,
++  [22049] = 0x945E, [22050] = 0x97C4, [22051] = 0x97C5, [22052] = 0x9800,
++  [22053] = 0x9A56, [22054] = 0x9A59, [22055] = 0x9B1E, [22056] = 0x9B1F,
++  [22057] = 0x9B20, [22058] = 0x9C52, [22059] = 0x9C58, [22060] = 0x9C50,
++  [22061] = 0x9C4A, [22062] = 0x9C4D, [22063] = 0x9C4B, [22064] = 0x9C55,
++  [22065] = 0x9C59, [22066] = 0x9C4C, [22067] = 0x9C4E, [22068] = 0x9DFB,
++  [22069] = 0x9DF7, [22070] = 0x9DEF, [22071] = 0x9DE3, [22072] = 0x9DEB,
++  [22073] = 0x9DF8, [22074] = 0x9DE4, [22075] = 0x9DF6, [22076] = 0x9DE1,
++  [22077] = 0x9DEE, [22078] = 0x9DE6, [22079] = 0x9DF2, [22080] = 0x9DF0,
++  [22081] = 0x9DE2, [22082] = 0x9DEC, [22083] = 0x9DF4, [22084] = 0x9DF3,
++  [22085] = 0x9DE8, [22086] = 0x9DED, [22087] = 0x9EC2, [22088] = 0x9ED0,
++  [22089] = 0x9EF2, [22090] = 0x9EF3, [22091] = 0x9F06, [22092] = 0x9F1C,
++  [22093] = 0x9F38, [22094] = 0x9F37, [22095] = 0x9F36, [22096] = 0x9F43,
++  [22097] = 0x9F4F, [22132] = 0x9F71, [22133] = 0x9F70, [22134] = 0x9F6E,
++  [22135] = 0x9F6F, [22136] = 0x56D3, [22137] = 0x56CD, [22138] = 0x5B4E,
++  [22139] = 0x5C6D, [22140] = 0x652D, [22141] = 0x66ED, [22142] = 0x66EE,
++  [22143] = 0x6B13, [22144] = 0x705F, [22145] = 0x7061, [22146] = 0x705D,
++  [22147] = 0x7060, [22148] = 0x7223, [22149] = 0x74DB, [22150] = 0x74E5,
++  [22151] = 0x77D5, [22152] = 0x7938, [22153] = 0x79B7, [22154] = 0x79B6,
++  [22155] = 0x7C6A, [22156] = 0x7E97, [22157] = 0x7F89, [22158] = 0x826D,
++  [22159] = 0x8643, [22160] = 0x8838, [22161] = 0x8837, [22162] = 0x8835,
++  [22163] = 0x884B, [22164] = 0x8B94, [22165] = 0x8B95, [22166] = 0x8E9E,
++  [22167] = 0x8E9F, [22168] = 0x8EA0, [22169] = 0x8E9D, [22170] = 0x91BE,
++  [22171] = 0x91BD, [22172] = 0x91C2, [22173] = 0x946B, [22174] = 0x9468,
++  [22175] = 0x9469, [22176] = 0x96E5, [22177] = 0x9746, [22178] = 0x9743,
++  [22179] = 0x9747, [22180] = 0x97C7, [22181] = 0x97E5, [22182] = 0x9A5E,
++  [22183] = 0x9AD5, [22184] = 0x9B59, [22185] = 0x9C63, [22186] = 0x9C67,
++  [22187] = 0x9C66, [22188] = 0x9C62, [22189] = 0x9C5E, [22190] = 0x9C60,
++  [22191] = 0x9E02, [22192] = 0x9DFE, [22193] = 0x9E07, [22194] = 0x9E03,
++  [22195] = 0x9E06, [22196] = 0x9E05, [22197] = 0x9E00, [22198] = 0x9E01,
++  [22199] = 0x9E09, [22200] = 0x9DFF, [22201] = 0x9DFD, [22202] = 0x9E04,
++  [22203] = 0x9EA0, [22204] = 0x9F1E, [22205] = 0x9F46, [22206] = 0x9F74,
++  [22207] = 0x9F75, [22208] = 0x9F76, [22209] = 0x56D4, [22210] = 0x652E,
++  [22211] = 0x65B8, [22212] = 0x6B18, [22213] = 0x6B19, [22214] = 0x6B17,
++  [22215] = 0x6B1A, [22216] = 0x7062, [22217] = 0x7226, [22218] = 0x72AA,
++  [22219] = 0x77D8, [22220] = 0x77D9, [22221] = 0x7939, [22222] = 0x7C69,
++  [22223] = 0x7C6B, [22224] = 0x7CF6, [22225] = 0x7E9A, [22230] = 0x7E98,
++  [22231] = 0x7E9B, [22232] = 0x7E99, [22233] = 0x81E0, [22234] = 0x81E1,
++  [22235] = 0x8646, [22236] = 0x8647, [22237] = 0x8648, [22238] = 0x8979,
++  [22239] = 0x897A, [22240] = 0x897C, [22241] = 0x897B, [22242] = 0x89FF,
++  [22243] = 0x8B98, [22244] = 0x8B99, [22245] = 0x8EA5, [22246] = 0x8EA4,
++  [22247] = 0x8EA3, [22248] = 0x946E, [22249] = 0x946D, [22250] = 0x946F,
++  [22251] = 0x9471, [22252] = 0x9473, [22253] = 0x9749, [22254] = 0x9872,
++  [22255] = 0x995F, [22256] = 0x9C68, [22257] = 0x9C6E, [22258] = 0x9C6D,
++  [22259] = 0x9E0B, [22260] = 0x9E0D, [22261] = 0x9E10, [22262] = 0x9E0F,
++  [22263] = 0x9E12, [22264] = 0x9E11, [22265] = 0x9EA1, [22266] = 0x9EF5,
++  [22267] = 0x9F09, [22268] = 0x9F47, [22269] = 0x9F78, [22270] = 0x9F7B,
++  [22271] = 0x9F7A, [22272] = 0x9F79, [22273] = 0x571E, [22274] = 0x7066,
++  [22275] = 0x7C6F, [22276] = 0x883C, [22277] = 0x8DB2, [22278] = 0x8EA6,
++  [22279] = 0x91C3, [22280] = 0x9474, [22281] = 0x9478, [22282] = 0x9476,
++  [22283] = 0x9475, [22284] = 0x9A60, [22285] = 0x9C74, [22286] = 0x9C73,
++  [22287] = 0x9C71, [22288] = 0x9C75, [22289] = 0x9E14, [22290] = 0x9E13,
++  [22291] = 0x9EF6, [22292] = 0x9F0A, [22327] = 0x9FA4, [22328] = 0x7068,
++  [22329] = 0x7065, [22330] = 0x7CF7, [22331] = 0x866A, [22332] = 0x883E,
++  [22333] = 0x883D, [22334] = 0x883F, [22335] = 0x8B9E, [22336] = 0x8C9C,
++  [22337] = 0x8EA9, [22338] = 0x8EC9, [22339] = 0x974B, [22340] = 0x9873,
++  [22341] = 0x9874, [22342] = 0x98CC, [22343] = 0x9961, [22344] = 0x99AB,
++  [22345] = 0x9A64, [22346] = 0x9A66, [22347] = 0x9A67, [22348] = 0x9B24,
++  [22349] = 0x9E15, [22350] = 0x9E17, [22351] = 0x9F48, [22352] = 0x6207,
++  [22353] = 0x6B1E, [22354] = 0x7227, [22355] = 0x864C, [22356] = 0x8EA8,
++  [22357] = 0x9482, [22358] = 0x9480, [22359] = 0x9481, [22360] = 0x9A69,
++  [22361] = 0x9A68, [22362] = 0x9B2E, [22363] = 0x9E19, [22364] = 0x7229,
++  [22365] = 0x864B, [22366] = 0x8B9F, [22367] = 0x9483, [22368] = 0x9C79,
++  [22369] = 0x9EB7, [22370] = 0x7675, [22371] = 0x9A6B, [22372] = 0x9C7A,
++  [22373] = 0x9E1D, [22374] = 0x7069, [22375] = 0x706A, [22376] = 0x9EA4,
++  [22377] = 0x9F7E, [22378] = 0x9F49, [22379] = 0x9F98, [22380] = 0x7881,
++  [22381] = 0x92B9, [22382] = 0x88CF, [22383] = 0x58BB, [22384] = 0x6052,
++  [22385] = 0x7CA7, [22386] = 0x5AFA, [22387] = 0x2554, [22388] = 0x2566,
++  [22389] = 0x2557, [22390] = 0x2560, [22391] = 0x256C, [22392] = 0x2563,
++  [22393] = 0x255A, [22394] = 0x2569, [22395] = 0x255D, [22396] = 0x2552,
++  [22397] = 0x2564, [22398] = 0x2555, [22399] = 0x255E, [22400] = 0x256A,
++  [22401] = 0x2561, [22402] = 0x2558, [22403] = 0x2567, [22404] = 0x255B,
++  [22405] = 0x2553, [22406] = 0x2565, [22407] = 0x2556, [22408] = 0x255F,
++  [22409] = 0x256B, [22410] = 0x2562, [22411] = 0x2559, [22412] = 0x2568,
++  [22413] = 0x255C, [22414] = 0x2551, [22415] = 0x2550, [22416] = 0x256D,
++  [22417] = 0x256E, [22418] = 0x2570, [22419] = 0x256F, [22420] = 0xFFED,
++  [22425] = 0x20547, [22426] = 0x92DB, [22427] = 0x205DF, [22428] = 0x23FC5,
++  [22429] = 0x854C, [22430] = 0x42B5, [22431] = 0x73EF, [22432] = 0x51B5,
++  [22433] = 0x3649, [22434] = 0x24942, [22435] = 0x289E4, [22436] = 0x9344,
++  [22437] = 0x219DB, [22438] = 0x82EE, [22439] = 0x23CC8, [22440] = 0x783C,
++  [22441] = 0x6744, [22442] = 0x62DF, [22443] = 0x24933, [22444] = 0x289AA,
++  [22445] = 0x202A0, [22446] = 0x26BB3, [22447] = 0x21305, [22448] = 0x4FAB,
++  [22449] = 0x224ED, [22450] = 0x5008, [22451] = 0x26D29, [22452] = 0x27A84,
++  [22453] = 0x23600, [22454] = 0x24AB1, [22455] = 0x22513, [22457] = 0x2037E,
++  [22458] = 0x5FA4, [22459] = 0x20380, [22460] = 0x20347, [22461] = 0x6EDB,
++  [22462] = 0x2041F, [22464] = 0x5101, [22465] = 0x347A, [22466] = 0x510E,
++  [22467] = 0x986C, [22468] = 0x3743, [22469] = 0x8416, [22470] = 0x249A4,
++  [22471] = 0x20487, [22472] = 0x5160, [22473] = 0x233B4, [22474] = 0x516A,
++  [22475] = 0x20BFF, [22476] = 0x220FC, [22477] = 0x202E5, [22478] = 0x22530,
++  [22479] = 0x2058E, [22480] = 0x23233, [22481] = 0x21983, [22482] = 0x5B82,
++  [22483] = 0x877D, [22484] = 0x205B3, [22485] = 0x23C99, [22486] = 0x51B2,
++  [22487] = 0x51B8, [22522] = 0x9D34, [22523] = 0x51C9, [22524] = 0x51CF,
++  [22525] = 0x51D1, [22526] = 0x3CDC, [22527] = 0x51D3, [22528] = 0x24AA6,
++  [22529] = 0x51B3, [22530] = 0x51E2, [22531] = 0x5342, [22532] = 0x51ED,
++  [22533] = 0x83CD, [22534] = 0x693E, [22535] = 0x2372D, [22536] = 0x5F7B,
++  [22537] = 0x520B, [22538] = 0x5226, [22539] = 0x523C, [22540] = 0x52B5,
++  [22541] = 0x5257, [22542] = 0x5294, [22543] = 0x52B9, [22544] = 0x52C5,
++  [22545] = 0x7C15, [22546] = 0x8542, [22547] = 0x52E0, [22548] = 0x860D,
++  [22549] = 0x26B13, [22551] = 0x28ADE, [22552] = 0x5549, [22553] = 0x6ED9,
++  [22554] = 0x23F80, [22555] = 0x20954, [22556] = 0x23FEC, [22557] = 0x5333,
++  [22559] = 0x20BE2, [22560] = 0x6CCB, [22561] = 0x21726, [22562] = 0x681B,
++  [22563] = 0x73D5, [22564] = 0x604A, [22565] = 0x3EAA, [22566] = 0x38CC,
++  [22567] = 0x216E8, [22568] = 0x71DD, [22569] = 0x44A2, [22570] = 0x536D,
++  [22571] = 0x5374, [22572] = 0x286AB, [22573] = 0x537E, [22575] = 0x21596,
++  [22576] = 0x21613, [22577] = 0x77E6, [22578] = 0x5393, [22579] = 0x28A9B,
++  [22580] = 0x53A0, [22581] = 0x53AB, [22582] = 0x53AE, [22583] = 0x73A7,
++  [22584] = 0x25772, [22585] = 0x3F59, [22586] = 0x739C, [22587] = 0x53C1,
++  [22588] = 0x53C5, [22589] = 0x6C49, [22590] = 0x4E49, [22591] = 0x57FE,
++  [22592] = 0x53D9, [22593] = 0x3AAB, [22594] = 0x20B8F, [22595] = 0x53E0,
++  [22596] = 0x23FEB, [22597] = 0x22DA3, [22598] = 0x53F6, [22599] = 0x20C77,
++  [22600] = 0x5413, [22601] = 0x7079, [22602] = 0x552B, [22603] = 0x6657,
++  [22604] = 0x6D5B, [22605] = 0x546D, [22606] = 0x26B53, [22607] = 0x20D74,
++  [22608] = 0x555D, [22609] = 0x548F, [22610] = 0x54A4, [22611] = 0x47A6,
++  [22612] = 0x2170D, [22613] = 0x20EDD, [22614] = 0x3DB4, [22615] = 0x20D4D,
++  [22620] = 0x289BC, [22621] = 0x22698, [22622] = 0x5547, [22623] = 0x4CED,
++  [22624] = 0x542F, [22625] = 0x7417, [22626] = 0x5586, [22627] = 0x55A9,
++  [22629] = 0x218D7, [22630] = 0x2403A, [22631] = 0x4552, [22632] = 0x24435,
++  [22633] = 0x66B3, [22634] = 0x210B4, [22635] = 0x5637, [22636] = 0x66CD,
++  [22637] = 0x2328A, [22638] = 0x66A4, [22639] = 0x66AD, [22640] = 0x564D,
++  [22641] = 0x564F, [22642] = 0x78F1, [22643] = 0x56F1, [22644] = 0x9787,
++  [22645] = 0x53FE, [22646] = 0x5700, [22647] = 0x56EF, [22648] = 0x56ED,
++  [22649] = 0x28B66, [22650] = 0x3623, [22651] = 0x2124F, [22652] = 0x5746,
++  [22653] = 0x241A5, [22654] = 0x6C6E, [22655] = 0x708B, [22656] = 0x5742,
++  [22657] = 0x36B1, [22658] = 0x26C7E, [22659] = 0x57E6, [22660] = 0x21416,
++  [22661] = 0x5803, [22662] = 0x21454, [22663] = 0x24363, [22664] = 0x5826,
++  [22665] = 0x24BF5, [22666] = 0x585C, [22667] = 0x58AA, [22668] = 0x3561,
++  [22669] = 0x58E0, [22670] = 0x58DC, [22671] = 0x2123C, [22672] = 0x58FB,
++  [22673] = 0x5BFF, [22674] = 0x5743, [22675] = 0x2A150, [22676] = 0x24278,
++  [22677] = 0x93D3, [22678] = 0x35A1, [22679] = 0x591F, [22680] = 0x68A6,
++  [22681] = 0x36C3, [22682] = 0x6E59, [22717] = 0x2163E, [22718] = 0x5A24,
++  [22719] = 0x5553, [22720] = 0x21692, [22721] = 0x8505, [22722] = 0x59C9,
++  [22723] = 0x20D4E, [22724] = 0x26C81, [22725] = 0x26D2A, [22726] = 0x217DC,
++  [22727] = 0x59D9, [22728] = 0x217FB, [22729] = 0x217B2, [22730] = 0x26DA6,
++  [22731] = 0x6D71, [22732] = 0x21828, [22733] = 0x216D5, [22734] = 0x59F9,
++  [22735] = 0x26E45, [22736] = 0x5AAB, [22737] = 0x5A63, [22738] = 0x36E6,
++  [22739] = 0x249A9, [22741] = 0x3708, [22742] = 0x5A96, [22743] = 0x7465,
++  [22744] = 0x5AD3, [22745] = 0x26FA1, [22746] = 0x22554, [22747] = 0x3D85,
++  [22748] = 0x21911, [22749] = 0x3732, [22750] = 0x216B8, [22751] = 0x5E83,
++  [22752] = 0x52D0, [22753] = 0x5B76, [22754] = 0x6588, [22755] = 0x5B7C,
++  [22756] = 0x27A0E, [22757] = 0x4004, [22758] = 0x485D, [22759] = 0x20204,
++  [22760] = 0x5BD5, [22761] = 0x6160, [22762] = 0x21A34, [22763] = 0x259CC,
++  [22764] = 0x205A5, [22765] = 0x5BF3, [22766] = 0x5B9D, [22767] = 0x4D10,
++  [22768] = 0x5C05, [22769] = 0x21B44, [22770] = 0x5C13, [22771] = 0x73CE,
++  [22772] = 0x5C14, [22773] = 0x21CA5, [22774] = 0x26B28, [22775] = 0x5C49,
++  [22776] = 0x48DD, [22777] = 0x5C85, [22778] = 0x5CE9, [22779] = 0x5CEF,
++  [22780] = 0x5D8B, [22781] = 0x21DF9, [22782] = 0x21E37, [22783] = 0x5D10,
++  [22784] = 0x5D18, [22785] = 0x5D46, [22786] = 0x21EA4, [22787] = 0x5CBA,
++  [22788] = 0x5DD7, [22789] = 0x82FC, [22790] = 0x382D, [22791] = 0x24901,
++  [22792] = 0x22049, [22793] = 0x22173, [22794] = 0x8287, [22795] = 0x3836,
++  [22796] = 0x3BC2, [22797] = 0x5E2E, [22798] = 0x6A8A, [22800] = 0x5E7A,
++  [22801] = 0x244BC, [22802] = 0x20CD3, [22803] = 0x53A6, [22804] = 0x4EB7,
++  [22806] = 0x53A8, [22807] = 0x21771, [22808] = 0x5E09, [22809] = 0x5EF4,
++  [22810] = 0x28482, [22815] = 0x5EF9, [22816] = 0x5EFB, [22817] = 0x38A0,
++  [22818] = 0x5EFC, [22819] = 0x683E, [22820] = 0x941B, [22821] = 0x5F0D,
++  [22822] = 0x201C1, [22823] = 0x2F894, [22824] = 0x3ADE, [22825] = 0x48AE,
++  [22826] = 0x2133A, [22827] = 0x5F3A, [22828] = 0x26888, [22829] = 0x223D0,
++  [22831] = 0x22471, [22832] = 0x5F63, [22833] = 0x97BD, [22834] = 0x26E6E,
++  [22835] = 0x5F72, [22836] = 0x9340, [22837] = 0x28A36, [22838] = 0x5FA7,
++  [22839] = 0x5DB6, [22840] = 0x3D5F, [22841] = 0x25250, [22842] = 0x21F6A,
++  [22843] = 0x270F8, [22844] = 0x22668, [22845] = 0x91D6, [22846] = 0x2029E,
++  [22847] = 0x28A29, [22848] = 0x6031, [22849] = 0x6685, [22850] = 0x21877,
++  [22851] = 0x3963, [22852] = 0x3DC7, [22853] = 0x3639, [22854] = 0x5790,
++  [22855] = 0x227B4, [22856] = 0x7971, [22857] = 0x3E40, [22858] = 0x609E,
++  [22860] = 0x60B3, [22861] = 0x24982, [22862] = 0x2498F, [22863] = 0x27A53,
++  [22864] = 0x74A4, [22865] = 0x50E1, [22866] = 0x5AA0, [22867] = 0x6164,
++  [22868] = 0x8424, [22869] = 0x6142, [22870] = 0x2F8A6, [22871] = 0x26ED2,
++  [22872] = 0x6181, [22873] = 0x51F4, [22874] = 0x20656, [22875] = 0x6187,
++  [22876] = 0x5BAA, [22877] = 0x23FB7, [22912] = 0x2285F, [22913] = 0x61D3,
++  [22914] = 0x28B9D, [22915] = 0x2995D, [22916] = 0x61D0, [22917] = 0x3932,
++  [22918] = 0x22980, [22919] = 0x228C1, [22920] = 0x6023, [22921] = 0x615C,
++  [22922] = 0x651E, [22923] = 0x638B, [22924] = 0x20118, [22925] = 0x62C5,
++  [22926] = 0x21770, [22927] = 0x62D5, [22928] = 0x22E0D, [22929] = 0x636C,
++  [22930] = 0x249DF, [22931] = 0x3A17, [22932] = 0x6438, [22933] = 0x63F8,
++  [22934] = 0x2138E, [22935] = 0x217FC, [22937] = 0x6F8A, [22938] = 0x22E36,
++  [22939] = 0x9814, [22940] = 0x2408C, [22941] = 0x2571D, [22942] = 0x64E1,
++  [22943] = 0x64E5, [22944] = 0x947B, [22945] = 0x3A66, [22946] = 0x643A,
++  [22947] = 0x3A57, [22948] = 0x654D, [22949] = 0x6F16, [22950] = 0x24A28,
++  [22951] = 0x24A23, [22952] = 0x6585, [22953] = 0x656D, [22954] = 0x655F,
++  [22955] = 0x2307E, [22956] = 0x65B5, [22957] = 0x24940, [22958] = 0x4B37,
++  [22959] = 0x65D1, [22960] = 0x40D8, [22961] = 0x21829, [22962] = 0x65E0,
++  [22963] = 0x65E3, [22964] = 0x5FDF, [22965] = 0x23400, [22966] = 0x6618,
++  [22967] = 0x231F7, [22968] = 0x231F8, [22969] = 0x6644, [22970] = 0x231A4,
++  [22971] = 0x231A5, [22972] = 0x664B, [22973] = 0x20E75, [22974] = 0x6667,
++  [22975] = 0x251E6, [22976] = 0x6673, [22978] = 0x21E3D, [22979] = 0x23231,
++  [22980] = 0x285F4, [22981] = 0x231C8, [22982] = 0x25313, [22983] = 0x77C5,
++  [22984] = 0x228F7, [22985] = 0x99A4, [22986] = 0x6702, [22987] = 0x2439C,
++  [22988] = 0x24A21, [22989] = 0x3B2B, [22990] = 0x69FA, [22991] = 0x237C2,
++  [22993] = 0x6767, [22994] = 0x6762, [22995] = 0x241CD, [22996] = 0x290ED,
++  [22997] = 0x67D7, [22998] = 0x44E9, [22999] = 0x6822, [23000] = 0x6E50,
++  [23001] = 0x923C, [23002] = 0x6801, [23003] = 0x233E6, [23004] = 0x26DA0,
++  [23005] = 0x685D, [23010] = 0x2346F, [23011] = 0x69E1, [23012] = 0x6A0B,
++  [23013] = 0x28ADF, [23014] = 0x6973, [23015] = 0x68C3, [23016] = 0x235CD,
++  [23017] = 0x6901, [23018] = 0x6900, [23019] = 0x3D32, [23020] = 0x3A01,
++  [23021] = 0x2363C, [23022] = 0x3B80, [23023] = 0x67AC, [23024] = 0x6961,
++  [23025] = 0x28A4A, [23026] = 0x42FC, [23027] = 0x6936, [23028] = 0x6998,
++  [23029] = 0x3BA1, [23030] = 0x203C9, [23031] = 0x8363, [23032] = 0x5090,
++  [23033] = 0x69F9, [23034] = 0x23659, [23035] = 0x2212A, [23036] = 0x6A45,
++  [23037] = 0x23703, [23038] = 0x6A9D, [23039] = 0x3BF3, [23040] = 0x67B1,
++  [23041] = 0x6AC8, [23042] = 0x2919C, [23043] = 0x3C0D, [23044] = 0x6B1D,
++  [23045] = 0x20923, [23046] = 0x60DE, [23047] = 0x6B35, [23048] = 0x6B74,
++  [23049] = 0x227CD, [23050] = 0x6EB5, [23051] = 0x23ADB, [23052] = 0x203B5,
++  [23053] = 0x21958, [23054] = 0x3740, [23055] = 0x5421, [23056] = 0x23B5A,
++  [23057] = 0x6BE1, [23058] = 0x23EFC, [23059] = 0x6BDC, [23060] = 0x6C37,
++  [23061] = 0x2248B, [23062] = 0x248F1, [23063] = 0x26B51, [23064] = 0x6C5A,
++  [23065] = 0x8226, [23066] = 0x6C79, [23067] = 0x23DBC, [23068] = 0x44C5,
++  [23069] = 0x23DBD, [23070] = 0x241A4, [23071] = 0x2490C, [23072] = 0x24900,
++  [23107] = 0x23CC9, [23108] = 0x36E5, [23109] = 0x3CEB, [23110] = 0x20D32,
++  [23111] = 0x9B83, [23112] = 0x231F9, [23113] = 0x22491, [23114] = 0x7F8F,
++  [23115] = 0x6837, [23116] = 0x26D25, [23117] = 0x26DA1, [23118] = 0x26DEB,
++  [23119] = 0x6D96, [23120] = 0x6D5C, [23121] = 0x6E7C, [23122] = 0x6F04,
++  [23123] = 0x2497F, [23124] = 0x24085, [23125] = 0x26E72, [23126] = 0x8533,
++  [23127] = 0x26F74, [23128] = 0x51C7, [23131] = 0x842E, [23132] = 0x28B21,
++  [23134] = 0x23E2F, [23135] = 0x7453, [23136] = 0x23F82, [23137] = 0x79CC,
++  [23138] = 0x6E4F, [23139] = 0x5A91, [23140] = 0x2304B, [23141] = 0x6FF8,
++  [23142] = 0x370D, [23143] = 0x6F9D, [23144] = 0x23E30, [23145] = 0x6EFA,
++  [23146] = 0x21497, [23147] = 0x2403D, [23148] = 0x4555, [23149] = 0x93F0,
++  [23150] = 0x6F44, [23151] = 0x6F5C, [23152] = 0x3D4E, [23153] = 0x6F74,
++  [23154] = 0x29170, [23155] = 0x3D3B, [23156] = 0x6F9F, [23157] = 0x24144,
++  [23158] = 0x6FD3, [23159] = 0x24091, [23160] = 0x24155, [23161] = 0x24039,
++  [23162] = 0x23FF0, [23163] = 0x23FB4, [23164] = 0x2413F, [23165] = 0x51DF,
++  [23166] = 0x24156, [23167] = 0x24157, [23168] = 0x24140, [23169] = 0x261DD,
++  [23170] = 0x704B, [23171] = 0x707E, [23172] = 0x70A7, [23173] = 0x7081,
++  [23174] = 0x70CC, [23175] = 0x70D5, [23176] = 0x70D6, [23177] = 0x70DF,
++  [23178] = 0x4104, [23179] = 0x3DE8, [23180] = 0x71B4, [23181] = 0x7196,
++  [23182] = 0x24277, [23183] = 0x712B, [23184] = 0x7145, [23185] = 0x5A88,
++  [23186] = 0x714A, [23188] = 0x5C9C, [23189] = 0x24365, [23190] = 0x714F,
++  [23191] = 0x9362, [23192] = 0x242C1, [23193] = 0x712C, [23194] = 0x2445A,
++  [23195] = 0x24A27, [23196] = 0x24A22, [23197] = 0x71BA, [23198] = 0x28BE8,
++  [23199] = 0x70BD, [23200] = 0x720E, [23205] = 0x9442, [23206] = 0x7215,
++  [23207] = 0x5911, [23208] = 0x9443, [23209] = 0x7224, [23210] = 0x9341,
++  [23211] = 0x25605, [23212] = 0x722E, [23213] = 0x7240, [23214] = 0x24974,
++  [23215] = 0x68BD, [23216] = 0x7255, [23217] = 0x7257, [23218] = 0x3E55,
++  [23219] = 0x23044, [23220] = 0x680D, [23221] = 0x6F3D, [23222] = 0x7282,
++  [23224] = 0x732B, [23225] = 0x24823, [23226] = 0x2882B, [23227] = 0x48ED,
++  [23228] = 0x28804, [23229] = 0x7328, [23230] = 0x732E, [23231] = 0x73CF,
++  [23232] = 0x73AA, [23233] = 0x20C3A, [23234] = 0x26A2E, [23235] = 0x73C9,
++  [23236] = 0x7449, [23237] = 0x241E2, [23238] = 0x216E7, [23239] = 0x24A24,
++  [23240] = 0x6623, [23241] = 0x36C5, [23242] = 0x249B7, [23243] = 0x2498D,
++  [23244] = 0x249FB, [23245] = 0x73F7, [23246] = 0x7415, [23247] = 0x6903,
++  [23248] = 0x24A26, [23249] = 0x7439, [23250] = 0x205C3, [23251] = 0x3ED7,
++  [23253] = 0x228AD, [23254] = 0x7460, [23255] = 0x28EB2, [23256] = 0x7447,
++  [23257] = 0x73E4, [23258] = 0x7476, [23259] = 0x83B9, [23260] = 0x746C,
++  [23261] = 0x3730, [23262] = 0x7474, [23263] = 0x93F1, [23264] = 0x6A2C,
++  [23265] = 0x7482, [23266] = 0x4953, [23267] = 0x24A8C, [23302] = 0x2415F,
++  [23303] = 0x24A79, [23304] = 0x28B8F, [23305] = 0x5B46, [23306] = 0x28C03,
++  [23307] = 0x2189E, [23308] = 0x74C8, [23309] = 0x21988, [23310] = 0x750E,
++  [23312] = 0x751E, [23313] = 0x28ED9, [23314] = 0x21A4B, [23315] = 0x5BD7,
++  [23316] = 0x28EAC, [23317] = 0x9385, [23318] = 0x754D, [23319] = 0x754A,
++  [23320] = 0x7567, [23321] = 0x756E, [23322] = 0x24F82, [23323] = 0x3F04,
++  [23324] = 0x24D13, [23325] = 0x758E, [23326] = 0x745D, [23327] = 0x759E,
++  [23328] = 0x75B4, [23329] = 0x7602, [23330] = 0x762C, [23331] = 0x7651,
++  [23332] = 0x764F, [23333] = 0x766F, [23334] = 0x7676, [23335] = 0x263F5,
++  [23336] = 0x7690, [23337] = 0x81EF, [23338] = 0x37F8, [23339] = 0x26911,
++  [23340] = 0x2690E, [23341] = 0x76A1, [23342] = 0x76A5, [23343] = 0x76B7,
++  [23344] = 0x76CC, [23345] = 0x26F9F, [23346] = 0x8462, [23347] = 0x2509D,
++  [23348] = 0x2517D, [23349] = 0x21E1C, [23350] = 0x771E, [23351] = 0x7726,
++  [23352] = 0x7740, [23353] = 0x64AF, [23354] = 0x25220, [23355] = 0x7758,
++  [23356] = 0x232AC, [23357] = 0x77AF, [23358] = 0x28964, [23359] = 0x28968,
++  [23360] = 0x216C1, [23361] = 0x77F4, [23363] = 0x21376, [23364] = 0x24A12,
++  [23365] = 0x68CA, [23366] = 0x78AF, [23367] = 0x78C7, [23368] = 0x78D3,
++  [23369] = 0x96A5, [23370] = 0x792E, [23371] = 0x255E0, [23372] = 0x78D7,
++  [23373] = 0x7934, [23374] = 0x78B1, [23375] = 0x2760C, [23376] = 0x8FB8,
++  [23377] = 0x8884, [23378] = 0x28B2B, [23379] = 0x26083, [23380] = 0x2261C,
++  [23381] = 0x7986, [23382] = 0x8900, [23383] = 0x6902, [23384] = 0x7980,
++  [23385] = 0x25857, [23386] = 0x799D, [23387] = 0x27B39, [23388] = 0x793C,
++  [23389] = 0x79A9, [23390] = 0x6E2A, [23391] = 0x27126, [23392] = 0x3EA8,
++  [23393] = 0x79C6, [23394] = 0x2910D, [23395] = 0x79D4
+ };
+ 
+ 
+@@ -4636,7 +4711,7 @@ static const uint32_t big5hkscs_to_ucs[] =
+    }
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+-static const char from_ucs4[][2] =
++static const unsigned char from_ucs4[][2] =
+ {
+   /* 0x00a2 */ "\xa2\x46", "\xa2\x47", "\x00\x00", "\xa2\x44", "\x00\x00",
+   /* 0x00a7 */ "\xa1\xb1", "\xc6\xd8", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -4895,6 +4970,8 @@ static const char from_ucs4[][2] =
+   /* 0x22b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa1\xe9",
+ 
++  /* 0x23da */ "\x88\xa9", "\x88\xaa",
++
+   /* 0x2460 */ "\xc6\xa1", "\xc6\xa2", "\xc6\xa3", "\xc6\xa4", "\xc6\xa5",
+   /* 0x2465 */ "\xc6\xa6", "\xc6\xa7", "\xc6\xa8", "\xc6\xa9", "\xc6\xaa",
+   /* 0x2469 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5068,29 +5145,52 @@ static const char from_ucs4[][2] =
+   /* 0x3122 */ "\xa3\xb3", "\xa3\xb4", "\xa3\xb5", "\xa3\xb6", "\xa3\xb7",
+   /* 0x3127 */ "\xa3\xb8", "\xa3\xb9", "\xa3\xba",
+ 
+-  /* 0x3231 */ "\xc8\xd1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3235 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x323a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x323f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3244 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3249 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x324e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3253 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3258 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x325d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3262 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3267 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x326c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3271 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3276 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x327b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3280 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3285 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x328a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x328f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3294 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3299 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x329e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa1\xc0",
++  /* 0x31c0 */ "\x88\x40", "\x88\x41", "\x88\x42", "\x88\x43", "\x88\x44",
++  /* 0x31c5 */ "\x88\x46", "\x88\x49", "\x88\x4a", "\x88\x4d", "\x88\x4f",
++  /* 0x31ca */ "\x88\x50", "\x88\x51", "\x88\x52", "\x88\x54", "\x88\x55",
++  /* 0x31cf */ "\xc8\x79", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x31fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3200 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3205 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x320a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x320f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3214 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3219 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x321e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3223 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3228 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x322d */ "\x00\x00", "\x00\x00", "\x00\x00", "\xc8\xd1", "\x00\x00",
++  /* 0x3232 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3237 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x323c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3241 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3246 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x324b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3250 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3255 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x325a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x325f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3264 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3269 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x326e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3273 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3278 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x327d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3282 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3287 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x328c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3291 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3296 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x329b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x32a0 */ "\x00\x00", "\x00\x00", "\xa1\xc0",
+ 
+   /* 0x338e */ "\xa2\x55", "\xa2\x56", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3392 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5129,7 +5229,7 @@ static const char from_ucs4[][2] =
+   /* 0x3437 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x343c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xdf", "\x00\x00",
+   /* 0x3441 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3446 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3446 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xf4", "\x00\x00",
+   /* 0x344c */ "\x89\xd5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3450 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3455 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5160,7 +5260,7 @@ static const char from_ucs4[][2] =
+   /* 0x34d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x34d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x34dc */ "\x00\x00", "\x00\x00", "\x9e\x53", "\x00\x00", "\x00\x00",
+-  /* 0x34e1 */ "\x00\x00", "\x00\x00", "\x9d\xaa", "\x00\x00", "\x00\x00",
++  /* 0x34e1 */ "\x00\x00", "\x00\x00", "\x9d\xaa", "\x00\x00", "\x87\xbe",
+   /* 0x34e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x34eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x34f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5183,7 +5283,7 @@ static const char from_ucs4[][2] =
+   /* 0x3545 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x354a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x354f */ "\x00\x00", "\x89\xe8", "\x00\x00", "\x89\xea", "\x00\x00",
+-  /* 0x3554 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3554 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x4b",
+   /* 0x3559 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x355e */ "\x00\x00", "\x00\x00", "\xfb\x70", "\x00\x00", "\x00\x00",
+   /* 0x3563 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5224,7 +5324,7 @@ static const char from_ucs4[][2] =
+   /* 0x3612 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3618 */ "\x9c\x5c", "\x00\x00", "\x8b\xb1", "\x00\x00", "\x00\x00",
+   /* 0x361c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3621 */ "\x00\x00", "\xfb\x5e", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3621 */ "\x00\x00", "\xfb\x5e", "\x00\x00", "\x87\x70", "\x00\x00",
+   /* 0x3626 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x362b */ "\x00\x00", "\x9d\xf3", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3630 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xd0",
+@@ -5236,7 +5336,7 @@ static const char from_ucs4[][2] =
+   /* 0x364e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3653 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3658 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x365d */ "\x00\x00", "\x9c\x6f", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x365d */ "\x00\x00", "\x9c\x6f", "\x00\x00", "\x8d\x5c", "\x00\x00",
+   /* 0x3662 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3667 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x366c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5311,7 +5411,7 @@ static const char from_ucs4[][2] =
+   /* 0x37c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x37ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x37cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x37d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x37d4 */ "\x00\x00", "\x8d\x4b", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x37d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x37de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x37e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5343,7 +5443,7 @@ static const char from_ucs4[][2] =
+   /* 0x3865 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x386a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x386f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3874 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3875 */ "\x87\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3879 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x387e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3883 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5362,7 +5462,7 @@ static const char from_ucs4[][2] =
+   /* 0x38c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x38c9 */ "\x00\x00", "\x00\x00", "\xfa\xcd", "\x00\x00", "\x00\x00",
+   /* 0x38ce */ "\x00\x00", "\x00\x00", "\x93\xdd", "\x00\x00", "\x00\x00",
+-  /* 0x38d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x38d4 */ "\x8d\x52", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x38d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x38dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x38e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5394,7 +5494,7 @@ static const char from_ucs4[][2] =
+   /* 0x3964 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3969 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x396e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3973 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3973 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xf3",
+   /* 0x3978 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x397d */ "\x00\x00", "\x00\x00", "\x90\x60", "\x00\x00", "\x00\x00",
+   /* 0x3982 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5471,7 +5571,7 @@ static const char from_ucs4[][2] =
+   /* 0x3ae5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3aea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3af0 */ "\x90\x6f", "\x00\x00", "\x8d\xb0", "\x00\x00", "\x00\x00",
+-  /* 0x3af4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3af5 */ "\x87\xa2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3af9 */ "\x00\x00", "\x94\x7e", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3afe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3b03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5503,7 +5603,7 @@ static const char from_ucs4[][2] =
+   /* 0x3b85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3b8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3b8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3b94 */ "\x00\x00", "\x93\xe4", "\x00\x00", "\x00\x00", "\x93\xe0",
++  /* 0x3b95 */ "\x87\x4b", "\x93\xe4", "\x00\x00", "\x00\x00", "\x93\xe0",
+   /* 0x3b99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3b9e */ "\x00\x00", "\x00\x00", "\xfd\x53", "\x00\x00", "\x00\x00",
+   /* 0x3ba3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5552,7 +5652,7 @@ static const char from_ucs4[][2] =
+   /* 0x3c7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3c7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3c84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3c89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3c89 */ "\x00\x00", "\x8c\x56", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3c8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3c93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3c98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5579,7 +5679,7 @@ static const char from_ucs4[][2] =
+   /* 0x3d01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3d06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3d0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3d10 */ "\x00\x00", "\x00\x00", "\x8e\xaf", "\x00\x00", "\x00\x00",
++  /* 0x3d10 */ "\x00\x00", "\x8c\xea", "\x8e\xaf", "\x00\x00", "\x00\x00",
+   /* 0x3d15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3d1a */ "\x00\x00", "\x00\x00", "\x91\xb5", "\x00\x00", "\x00\x00",
+   /* 0x3d1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5602,7 +5702,7 @@ static const char from_ucs4[][2] =
+   /* 0x3d75 */ "\x8d\xf0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3d79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xa6", "\x00\x00",
+   /* 0x3d7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3d83 */ "\x00\x00", "\xfb\xbf", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3d83 */ "\x00\x00", "\xfb\xbf", "\x00\x00", "\x00\x00", "\x8c\xdf",
+   /* 0x3d88 */ "\x00\x00", "\x8d\xf3", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3d8d */ "\x00\x00", "\x94\x49", "\x00\x00", "\x8d\xf5", "\x00\x00",
+   /* 0x3d92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5615,7 +5715,7 @@ static const char from_ucs4[][2] =
+   /* 0x3db5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3dba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\x50",
+   /* 0x3dbf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3dc4 */ "\x00\x00", "\x9d\xcc", "\xfc\x65", "\x00\x00", "\x00\x00",
++  /* 0x3dc4 */ "\x00\x00", "\x9d\xcc", "\xfc\x65", "\x00\x00", "\x8c\x44",
+   /* 0x3dc9 */ "\x00\x00", "\x00\x00", "\x99\x6e", "\x94\xa1", "\x00\x00",
+   /* 0x3dce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\x63",
+   /* 0x3dd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5624,7 +5724,7 @@ static const char from_ucs4[][2] =
+   /* 0x3de2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x53",
+   /* 0x3de8 */ "\xfd\xe9", "\x00\x00", "\x00\x00", "\x9d\xb5", "\x00\x00",
+   /* 0x3dec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3df1 */ "\x00\x00", "\x98\x79", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3df1 */ "\x00\x00", "\x98\x79", "\x87\x6a", "\x00\x00", "\x00\x00",
+   /* 0x3df7 */ "\x9d\x5d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3dfc */ "\x8d\x63", "\x96\x69", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3e00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5670,16 +5770,16 @@ static const char from_ucs4[][2] =
+   /* 0x3ec8 */ "\x00\x00", "\x98\xc3", "\x00\x00", "\x95\xf6", "\x00\x00",
+   /* 0x3ecd */ "\x00\x00", "\x00\x00", "\x8f\xfd", "\x98\xc5", "\x00\x00",
+   /* 0x3ed2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x66", "\xfe\x6e",
+-  /* 0x3ed7 */ "\x00\x00", "\x00\x00", "\x97\xdd", "\x00\x00", "\x00\x00",
++  /* 0x3ed7 */ "\x00\x00", "\x00\x00", "\x97\xdd", "\x8c\xaa", "\x00\x00",
+   /* 0x3edc */ "\x00\x00", "\x92\xd2", "\x00\x00", "\x00\x00", "\x97\x61",
+   /* 0x3ee2 */ "\x98\xcb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3ee7 */ "\x95\xf0", "\x00\x00", "\x97\x5d", "\x00\x00", "\x91\xe3",
+-  /* 0x3eeb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xcc",
++  /* 0x3eec */ "\x87\x7e", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xcc",
+   /* 0x3ef0 */ "\x00\x00", "\x00\x00", "\x94\x69", "\x98\xcd", "\x00\x00",
+   /* 0x3ef5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xce",
+   /* 0x3efa */ "\x00\x00", "\x95\xfc", "\x00\x00", "\x00\x00", "\x94\xa3",
+   /* 0x3f00 */ "\x96\x62", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xb6",
+-  /* 0x3f04 */ "\x00\x00", "\x94\x63", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3f04 */ "\x00\x00", "\x94\x63", "\x8d\x47", "\x00\x00", "\x00\x00",
+   /* 0x3f09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xd0",
+   /* 0x3f0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3f13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5718,7 +5818,7 @@ static const char from_ucs4[][2] =
+   /* 0x3fb8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3fbd */ "\x00\x00", "\x00\x00", "\x98\xd9", "\x00\x00", "\x00\x00",
+   /* 0x3fc2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x3fc7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x3fc8 */ "\x8d\x5a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3fcc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3fd1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3fd7 */ "\x98\xdb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5731,7 +5831,7 @@ static const char from_ucs4[][2] =
+   /* 0x3ffa */ "\x8a\xae", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x3ffe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4004 */ "\xfb\xc9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4008 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4009 */ "\x8c\x5d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x400d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4012 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4017 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5751,7 +5851,7 @@ static const char from_ucs4[][2] =
+   /* 0x405d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xdf",
+   /* 0x4062 */ "\x00\x00", "\x00\x00", "\xa0\xac", "\x00\x00", "\x00\x00",
+   /* 0x4067 */ "\x00\x00", "\x00\x00", "\x98\xeb", "\x00\x00", "\x00\x00",
+-  /* 0x406c */ "\x00\x00", "\x00\x00", "\x98\xec", "\x00\x00", "\x00\x00",
++  /* 0x406c */ "\x00\x00", "\x00\x00", "\x98\xec", "\x00\x00", "\x8c\xc3",
+   /* 0x4071 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4076 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x407b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5765,7 +5865,7 @@ static const char from_ucs4[][2] =
+   /* 0x40a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xf4",
+   /* 0x40a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x40ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x40b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x40b2 */ "\x00\x00", "\x87\xd9", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x40b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xb8", "\x00\x00",
+   /* 0x40bc */ "\x00\x00", "\x00\x00", "\x9e\xe7", "\x00\x00", "\x00\x00",
+   /* 0x40c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5778,9 +5878,9 @@ static const char from_ucs4[][2] =
+   /* 0x40e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x40e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x40ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x40f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x40f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x4a",
+   /* 0x40f8 */ "\x00\x00", "\x9e\x7e", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x40fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x40fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x44",
+   /* 0x4103 */ "\x98\xfe", "\xfd\xe8", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4107 */ "\x00\x00", "\x99\x40", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x410c */ "\x00\x00", "\x94\xc9", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5790,7 +5890,7 @@ static const char from_ucs4[][2] =
+   /* 0x4120 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4125 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x412a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x412f */ "\x00\x00", "\x00\x00", "\x94\xd3", "\x00\x00", "\x00\x00",
++  /* 0x412f */ "\x00\x00", "\x87\xc6", "\x94\xd3", "\x00\x00", "\x00\x00",
+   /* 0x4134 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4139 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x413e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5805,8 +5905,8 @@ static const char from_ucs4[][2] =
+   /* 0x416c */ "\x90\xc0", "\x00\x00", "\x94\xd1", "\x00\x00", "\x00\x00",
+   /* 0x4170 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4175 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x417a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x73",
+-  /* 0x417f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x417a */ "\x00\x00", "\x8d\x4e", "\x00\x00", "\x00\x00", "\x95\x73",
++  /* 0x417f */ "\x00\x00", "\x87\xce", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4184 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4189 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x418e */ "\x00\x00", "\x93\xc2", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5827,7 +5927,7 @@ static const char from_ucs4[][2] =
+   /* 0x41d9 */ "\x00\x00", "\x8e\xfe", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x41de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x41e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x41e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x41e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x5f",
+   /* 0x41ed */ "\x00\x00", "\x8e\x59", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x41f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x41f7 */ "\x00\x00", "\x94\xec", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5838,7 +5938,7 @@ static const char from_ucs4[][2] =
+   /* 0x4211 */ "\x94\xef", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4215 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x421a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x421f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x421f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x60", "\x00\x00",
+   /* 0x4224 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4229 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x422e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5855,7 +5955,7 @@ static const char from_ucs4[][2] =
+   /* 0x4265 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x44",
+   /* 0x426a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x426f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4274 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4274 */ "\x00\x00", "\x8c\xcb", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x427a */ "\x99\x56", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x427e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4283 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5864,7 +5964,7 @@ static const char from_ucs4[][2] =
+   /* 0x4292 */ "\x00\x00", "\x99\x5b", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4297 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x429c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x42a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x42a2 */ "\x8c\xc4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x42a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x42ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x42b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x45",
+@@ -5884,7 +5984,7 @@ static const char from_ucs4[][2] =
+   /* 0x42f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xc9",
+   /* 0x42fc */ "\xfd\x50", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4300 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4305 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4305 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xaa",
+   /* 0x430a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x430f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4314 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5913,7 +6013,7 @@ static const char from_ucs4[][2] =
+   /* 0x4387 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x438c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4391 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4397 */ "\x99\x67", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4397 */ "\x99\x67", "\x00\x00", "\x00\x00", "\x8c\xe3", "\x00\x00",
+   /* 0x439b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x43a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x43a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5930,7 +6030,7 @@ static const char from_ucs4[][2] =
+   /* 0x43dc */ "\x00\x00", "\x00\x00", "\x9d\x51", "\x00\x00", "\x00\x00",
+   /* 0x43e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x43e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x43eb */ "\x00\x00", "\x99\x73", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x43eb */ "\x00\x00", "\x99\x73", "\x00\x00", "\x00\x00", "\x87\x40",
+   /* 0x43f0 */ "\x00\x00", "\x9d\x4f", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x43f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x43fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -5963,7 +6063,7 @@ static const char from_ucs4[][2] =
+   /* 0x4481 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4486 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x448b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x99\xad", "\x00\x00",
+-  /* 0x4490 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4491 */ "\xc8\x7e", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4495 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x449a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x6e",
+   /* 0x44a0 */ "\x8f\x70", "\x00\x00", "\xfa\xd0", "\x00\x00", "\x00\x00",
+@@ -5971,15 +6071,15 @@ static const char from_ucs4[][2] =
+   /* 0x44a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x44ae */ "\x00\x00", "\x99\xb3", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x44b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\x53", "\x00\x00",
+-  /* 0x44b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x44b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x5e",
+   /* 0x44bd */ "\x00\x00", "\x00\x00", "\x96\x5c", "\x00\x00", "\x00\x00",
+-  /* 0x44c2 */ "\x00\x00", "\x00\x00", "\xfd\x7a", "\x00\x00", "\x00\x00",
++  /* 0x44c3 */ "\x8c\xe0", "\x00\x00", "\xfd\x7a", "\x00\x00", "\x00\x00",
+   /* 0x44c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x44cc */ "\x00\x00", "\x97\xfe", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x44d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x44d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x44db */ "\x00\x00", "\x92\xbd", "\x00\x00", "\x97\xfd", "\x00\x00",
+-  /* 0x44e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\x64", "\x00\x00",
++  /* 0x44db */ "\x00\x00", "\x92\xbd", "\x8d\x5d", "\x97\xfd", "\x00\x00",
++  /* 0x44e1 */ "\x87\xdb", "\x00\x00", "\x00\x00", "\x8f\x64", "\x00\x00",
+   /* 0x44e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xf7", "\x95\x62",
+   /* 0x44eb */ "\x97\xcd", "\x9e\x64", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x44ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x4c",
+@@ -5990,26 +6090,26 @@ static const char from_ucs4[][2] =
+   /* 0x4509 */ "\x9d\xa5", "\x00\x00", "\x8f\x54", "\x00\x00", "\x00\x00",
+   /* 0x450d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4512 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\x7c", "\x00\x00",
+-  /* 0x4517 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4517 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x55", "\x00\x00",
+   /* 0x451d */ "\x8e\xa2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4521 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4527 */ "\x8f\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x452b */ "\x00\x00", "\x00\x00", "\x97\xae", "\x00\x00", "\x00\x00",
+   /* 0x4530 */ "\x00\x00", "\x00\x00", "\x96\xc8", "\x00\x00", "\x00\x00",
+-  /* 0x4535 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4536 */ "\x8c\xe4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x453b */ "\x99\xc3", "\x00\x00", "\x90\xd6", "\x00\x00", "\x9c\xbe",
+   /* 0x453f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\x76", "\x00\x00",
+   /* 0x4544 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4549 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x454e */ "\x00\x00", "\x00\x00", "\x94\x70", "\xfb\x4b", "\x00\x00",
+-  /* 0x4553 */ "\x00\x00", "\xfd\xca", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4553 */ "\x00\x00", "\xfd\xca", "\x00\x00", "\x00\x00", "\x8c\xef",
+   /* 0x4558 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xc7", "\x00\x00",
+-  /* 0x455d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xf9",
++  /* 0x455d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x54", "\xa0\xf9",
+   /* 0x4562 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4567 */ "\x00\x00", "\x00\x00", "\x8f\xa9", "\x00\x00", "\x00\x00",
+-  /* 0x456c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x456d */ "\x8d\x51", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4571 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4577 */ "\x99\xc7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4577 */ "\x99\xc7", "\x87\x44", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x457b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4580 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xd7",
+   /* 0x4585 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6018,26 +6118,26 @@ static const char from_ucs4[][2] =
+   /* 0x4594 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4599 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x459e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x45a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x45a3 */ "\x00\x00", "\x00\x00", "\x87\x43", "\x00\x00", "\x00\x00",
+   /* 0x45a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x45b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x45b3 */ "\x87\x47", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x45d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x45d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x58",
+   /* 0x45da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xdf",
+-  /* 0x45e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x45ea */ "\x8d\x59", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x45fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4602 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x99\xce", "\x00\x00",
++  /* 0x4603 */ "\x87\x42", "\x00\x00", "\x00\x00", "\x99\xce", "\x00\x00",
+   /* 0x4607 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x460c */ "\x00\x00", "\x00\x00", "\x8f\xba", "\x00\x00", "\x00\x00",
+   /* 0x4611 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xeb", "\x00\x00",
+@@ -6068,12 +6168,12 @@ static const char from_ucs4[][2] =
+   /* 0x468e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4693 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4698 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x469d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x469d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x5d", "\x00\x00",
+   /* 0x46a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x46ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x46ac */ "\x00\x00", "\x87\xcc", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x46b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x46b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x45",
+   /* 0x46bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6085,7 +6185,7 @@ static const char from_ucs4[][2] =
+   /* 0x46e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x46f2 */ "\x00\x00", "\x00\x00", "\x95\xb2", "\x00\x00", "\x00\x00",
++  /* 0x46f2 */ "\x00\x00", "\x00\x00", "\x95\xb2", "\x00\x00", "\x8d\x4c",
+   /* 0x46f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x46fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4701 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6098,12 +6198,12 @@ static const char from_ucs4[][2] =
+   /* 0x4724 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4729 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x472e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4733 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4733 */ "\x00\x00", "\x00\x00", "\x87\x4c", "\x00\x00", "\x00\x00",
+   /* 0x4738 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x473d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4742 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4742 */ "\x00\x00", "\x87\x4d", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4747 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x474c */ "\x00\x00", "\x9e\x7a", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x474c */ "\x00\x00", "\x9e\x7a", "\x87\x57", "\x00\x00", "\x00\x00",
+   /* 0x4751 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4756 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x475b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6124,7 +6224,7 @@ static const char from_ucs4[][2] =
+   /* 0x47a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x47ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x47b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x47b6 */ "\x9e\xe5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x47b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x47ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x47bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x47c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6199,7 +6299,7 @@ static const char from_ucs4[][2] =
+   /* 0x491e */ "\x99\xf8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4922 */ "\x00\x00", "\x00\x00", "\x96\x64", "\x00\x00", "\x00\x00",
+   /* 0x4927 */ "\x00\x00", "\x00\x00", "\x90\x55", "\x00\x00", "\x00\x00",
+-  /* 0x492d */ "\x96\xd4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x492d */ "\x96\xd4", "\x00\x00", "\x87\xc4", "\x87\xae", "\x00\x00",
+   /* 0x4931 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x7c", "\x00\x00",
+   /* 0x4936 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x493c */ "\x96\x4d", "\x00\x00", "\x97\xe1", "\x00\x00", "\x00\x00",
+@@ -6274,7 +6374,7 @@ static const char from_ucs4[][2] =
+   /* 0x4a94 */ "\x00\x00", "\x97\xc2", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4a99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4a9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4aa3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4aa4 */ "\x87\x5c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4aa8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4aad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4ab2 */ "\x00\x00", "\x8a\xbb", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6295,10 +6395,10 @@ static const char from_ucs4[][2] =
+   /* 0x4afd */ "\x00\x00", "\x91\x45", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4b02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4b07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4b0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4b0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x58", "\x00\x00",
+   /* 0x4b11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4b16 */ "\x00\x00", "\x00\x00", "\x9a\x63", "\x00\x00", "\x00\x00",
+-  /* 0x4b1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4b1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x49",
+   /* 0x4b20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4b25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4b2a */ "\x00\x00", "\x8b\xb6", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6353,24 +6453,24 @@ static const char from_ucs4[][2] =
+   /* 0x4c1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4c2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4c2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x41", "\x00\x00",
+   /* 0x4c33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c38 */ "\x00\x00", "\x00\x00", "\x9f\xa5", "\x00\x00", "\x00\x00",
+-  /* 0x4c3e */ "\x89\xba", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4c42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4c3e */ "\x89\xba", "\x00\x00", "\x87\x4f", "\x00\x00", "\x00\x00",
++  /* 0x4c42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x4e",
+   /* 0x4c47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4c56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xcd",
++  /* 0x4c57 */ "\x87\x55", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xcd",
+   /* 0x4c5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c6a */ "\x00\x00", "\x00\x00", "\x9a\x79", "\x00\x00", "\x00\x00",
+   /* 0x4c6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4c74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4c79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xce", "\x00\x00",
+-  /* 0x4c7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4c83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4c74 */ "\x00\x00", "\x00\x00", "\x8c\xf2", "\x00\x00", "\x00\x00",
++  /* 0x4c79 */ "\x00\x00", "\x8d\x57", "\x00\x00", "\x9d\xce", "\x00\x00",
++  /* 0x4c7e */ "\x00\x00", "\x00\x00", "\x8c\xd2", "\x00\x00", "\x00\x00",
++  /* 0x4c83 */ "\x00\x00", "\x87\x59", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4c92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6388,7 +6488,7 @@ static const char from_ucs4[][2] =
+   /* 0x4cce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4cd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4cd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4cdd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xee", "\x00\x00",
++  /* 0x4cdd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xee", "\x87\x49",
+   /* 0x4ce2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4ce7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4ced */ "\xfb\x43", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6396,7 +6496,7 @@ static const char from_ucs4[][2] =
+   /* 0x4cf6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4cfb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4d05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xc9", "\x00\x00",
++  /* 0x4d05 */ "\x00\x00", "\x87\x5b", "\x00\x00", "\x9e\xc9", "\x00\x00",
+   /* 0x4d0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d10 */ "\xfb\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6418,11 +6518,11 @@ static const char from_ucs4[][2] =
+   /* 0x4d64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4d73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4d73 */ "\x00\x00", "\x00\x00", "\x8d\x58", "\x87\x46", "\x00\x00",
+   /* 0x4d78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x4d87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x4d87 */ "\x00\x00", "\x8d\x56", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x78",
+   /* 0x4d91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4d96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6455,7 +6555,7 @@ static const char from_ucs4[][2] =
+   /* 0x4e1e */ "\xa5\xe0", "\xa5\xe1", "\x00\x00", "\x99\x4f", "\x00\x00",
+   /* 0x4e22 */ "\x00\x00", "\x89\xce", "\x00\x00", "\xa8\xc3", "\x00\x00",
+   /* 0x4e28 */ "\x8b\xc0", "\x00\x00", "\x9f\xc4", "\xa4\x58", "\x8b\xd4",
+-  /* 0x4e2d */ "\xa4\xa4", "\xc9\x50", "\x00\x00", "\xa4\xa5", "\xc9\x63",
++  /* 0x4e2d */ "\xa4\xa4", "\xc9\x50", "\x8c\x72", "\xa4\xa5", "\xc9\x63",
+   /* 0x4e32 */ "\xa6\xea", "\xcb\xb1", "\x00\x00", "\x00\x00", "\xc6\xbf",
+   /* 0x4e37 */ "\x8b\xf9", "\xa4\x59", "\xa4\xa6", "\x00\x00", "\xa5\x44",
+   /* 0x4e3c */ "\xc9\x64", "\x89\x46", "\x00\x00", "\xc6\xc0", "\x00\x00",
+@@ -6478,7 +6578,7 @@ static const char from_ucs4[][2] =
+   /* 0x4e91 */ "\xa4\xaa", "\xa4\xac", "\xc9\x51", "\xa4\xad", "\xa4\xab",
+   /* 0x4e95 */ "\x00\x00", "\x00\x00", "\x92\x7e", "\xa5\xe5", "\x9d\xba",
+   /* 0x4e9b */ "\xa8\xc7", "\x00\x00", "\x00\x00", "\xa8\xc8", "\xab\x45",
+-  /* 0x4ea0 */ "\xc6\xc2", "\xa4\x60", "\xa4\xae", "\x00\x00", "\xa5\xe6",
++  /* 0x4ea0 */ "\xc6\xc2", "\xa4\x60", "\xa4\xae", "\x8c\x6f", "\xa5\xe6",
+   /* 0x4ea5 */ "\xa5\xe8", "\xa5\xe7", "\x00\x00", "\xa6\xeb", "\x00\x00",
+   /* 0x4ea9 */ "\x00\x00", "\xa8\xc9", "\xa8\xca", "\xab\x46", "\xab\x47",
+   /* 0x4eae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xad\xbd",
+@@ -6501,7 +6601,7 @@ static const char from_ucs4[][2] =
+   /* 0x4f04 */ "\xc9\xb9", "\xc9\xb6", "\x00\x00", "\x00\x00", "\xc9\xb3",
+   /* 0x4f09 */ "\xa5\xea", "\xa5\xec", "\xa5\xf9", "\x00\x00", "\xa5\xee",
+   /* 0x4f0e */ "\xc9\xab", "\xa5\xf1", "\xa5\xef", "\xa5\xf0", "\xc9\xbb",
+-  /* 0x4f13 */ "\xc9\xb8", "\xc9\xaf", "\xa5\xed", "\x00\x00", "\x00\x00",
++  /* 0x4f13 */ "\xc9\xb8", "\xc9\xaf", "\xa5\xed", "\x00\x00", "\x8c\x73",
+   /* 0x4f18 */ "\xc9\xac", "\xa5\xeb", "\x89\x4e", "\x00\x00", "\x00\x00",
+   /* 0x4f1d */ "\xc9\xb4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4f22 */ "\xc9\xb7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6533,7 +6633,7 @@ static const char from_ucs4[][2] =
+   /* 0x4fa3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x89\x50",
+   /* 0x4fa8 */ "\x00\x00", "\x00\x00", "\xfa\x57", "\x00\x00", "\x00\x00",
+   /* 0x4fae */ "\xab\x56", "\xab\x4a", "\x98\x66", "\x00\x00", "\xcd\xe0",
+-  /* 0x4fb3 */ "\xcd\xe8", "\x00\x00", "\xab\x49", "\xab\x51", "\xab\x5d",
++  /* 0x4fb3 */ "\xcd\xe8", "\x8c\xf8", "\xab\x49", "\xab\x51", "\xab\x5d",
+   /* 0x4fb7 */ "\x00\x00", "\xcd\xee", "\xcd\xec", "\xcd\xe7", "\x00\x00",
+   /* 0x4fbd */ "\x89\xd6", "\x00\x00", "\xab\x4b", "\xcd\xed", "\xcd\xe3",
+   /* 0x4fc2 */ "\xab\x59", "\xab\x50", "\xab\x58", "\xcd\xde", "\x00\x00",
+@@ -6545,7 +6645,7 @@ static const char from_ucs4[][2] =
+   /* 0x4fe0 */ "\xab\x4c", "\xab\x48", "\x00\x00", "\x00\x00", "\x96\xde",
+   /* 0x4fe5 */ "\x92\xac", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x4fe9 */ "\x00\x00", "\x00\x00", "\xcd\xef", "\x00\x00", "\xad\xd7",
+-  /* 0x4fef */ "\xad\xc1", "\x00\x00", "\xad\xd1", "\x9f\x6e", "\xad\xd6",
++  /* 0x4fef */ "\xad\xc1", "\x8c\x70", "\xad\xd1", "\x9f\x6e", "\xad\xd6",
+   /* 0x4ff4 */ "\xd0\xd0", "\xd0\xcf", "\xd0\xd4", "\xd0\xd5", "\xad\xc4",
+   /* 0x4ff9 */ "\x8e\xf2", "\xad\xcd", "\x00\x00", "\x00\x00", "\x9f\x6c",
+   /* 0x4ffe */ "\xad\xda", "\x00\x00", "\xad\xce", "\x00\x00", "\x00\x00",
+@@ -6560,7 +6660,7 @@ static const char from_ucs4[][2] =
+   /* 0x502b */ "\xad\xdb", "\xd0\xd3", "\xad\xd8", "\x92\xa8", "\xd0\xdb",
+   /* 0x5030 */ "\xd0\xcd", "\xd0\xdc", "\x00\x00", "\xd0\xd1", "\x91\x63",
+   /* 0x5035 */ "\xd0\xda", "\x00\x00", "\xd0\xd2", "\x00\x00", "\x00\x00",
+-  /* 0x5039 */ "\x00\x00", "\x00\x00", "\xad\xc8", "\x00\x00", "\x00\x00",
++  /* 0x5039 */ "\x00\x00", "\x8c\x40", "\xad\xc8", "\x00\x00", "\x00\x00",
+   /* 0x503e */ "\x00\x00", "\xd4\x63", "\xd4\x57", "\x00\x00", "\xb0\xb3",
+   /* 0x5043 */ "\x00\x00", "\xd4\x5c", "\xd4\x62", "\xb0\xb2", "\xd4\x55",
+   /* 0x5049 */ "\xb0\xb6", "\xd4\x59", "\xd4\x52", "\xb0\xb4", "\xd4\x56",
+@@ -6586,7 +6686,7 @@ static const char from_ucs4[][2] =
+   /* 0x50ad */ "\xb6\xc4", "\xdc\xb7", "\xb6\xcd", "\xdc\xbd", "\xdc\xc0",
+   /* 0x50b2 */ "\xb6\xc6", "\xb6\xc7", "\xdc\xba", "\xb6\xc5", "\xdc\xc3",
+   /* 0x50b7 */ "\xb6\xcb", "\xdc\xc4", "\x00\x00", "\xdc\xbf", "\xb6\xcc",
+-  /* 0x50bb */ "\x00\x00", "\xdc\xb4", "\xb6\xc9", "\xdc\xb5", "\x00\x00",
++  /* 0x50bc */ "\x8c\x71", "\xdc\xb4", "\xb6\xc9", "\xdc\xb5", "\x00\x00",
+   /* 0x50c1 */ "\xdc\xbe", "\xdc\xbc", "\x00\x00", "\xdc\xb8", "\xb6\xc8",
+   /* 0x50c6 */ "\xdc\xb6", "\xb6\xce", "\xdc\xbb", "\xdc\xc2", "\xdc\xb9",
+   /* 0x50cb */ "\xdc\xc1", "\x00\x00", "\x92\xa1", "\xb9\xb6", "\xb9\xb3",
+@@ -6634,7 +6734,7 @@ static const char from_ucs4[][2] =
+   /* 0x519c */ "\x00\x00", "\xcb\xcd", "\x00\x00", "\xab\x61", "\x00\x00",
+   /* 0x51a2 */ "\xad\xe0", "\x00\x00", "\xad\xde", "\xad\xdf", "\x00\x00",
+   /* 0x51a7 */ "\x9e\x55", "\x92\xba", "\x00\x00", "\xbe\xad", "\xc6\xc5",
+-  /* 0x51ac */ "\xa5\x56", "\x00\x00", "\x00\x00", "\x00\x00", "\xa6\x42",
++  /* 0x51ac */ "\xa5\x56", "\x00\x00", "\x8c\x5b", "\x00\x00", "\xa6\x42",
+   /* 0x51b1 */ "\xc9\xbc", "\xfa\x7d", "\xfa\xa8", "\x9a\x68", "\xfa\x47",
+   /* 0x51b6 */ "\xa7\x4d", "\xa7\x4e", "\xfa\x7e", "\xca\x6b", "\x00\x00",
+   /* 0x51ba */ "\x00\x00", "\xcb\xce", "\xa8\xe6", "\xcb\xcf", "\x00\x00",
+@@ -6666,7 +6766,7 @@ static const char from_ucs4[][2] =
+   /* 0x523c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa8\xef",
+   /* 0x5241 */ "\x00\x00", "\xab\x63", "\xcd\xf0", "\x00\x00", "\xcb\xd3",
+   /* 0x5247 */ "\xab\x68", "\x00\x00", "\xcd\xf1", "\xab\x64", "\xab\x67",
+-  /* 0x524c */ "\xab\x66", "\xab\x65", "\xab\x62", "\x00\x00", "\x00\x00",
++  /* 0x524c */ "\xab\x66", "\xab\x65", "\xab\x62", "\x87\xbc", "\x00\x00",
+   /* 0x5250 */ "\x00\x00", "\xd0\xe8", "\x00\x00", "\xad\xe7", "\xd0\xeb",
+   /* 0x5256 */ "\xad\xe5", "\xfa\xb4", "\x00\x00", "\x92\xc4", "\xd0\xe7",
+   /* 0x525b */ "\xad\xe8", "\xad\xe6", "\xad\xe9", "\xd0\xe9", "\xd0\xea",
+@@ -6709,7 +6809,7 @@ static const char from_ucs4[][2] =
+   /* 0x5313 */ "\x00\x00", "\xa4\x50", "\xa4\xc6", "\xa5\x5f", "\x00\x00",
+   /* 0x5319 */ "\xb0\xcd", "\xc9\x43", "\x00\x00", "\xc9\x6c", "\xa5\x60",
+   /* 0x531d */ "\x00\x00", "\xc9\xc2", "\xa6\x4b", "\xa6\x4a", "\xc9\xc1",
+-  /* 0x5323 */ "\xa7\x58", "\x00\x00", "\x00\x00", "\x00\x00", "\x89\xe5",
++  /* 0x5323 */ "\xa7\x58", "\x8c\x68", "\x00\x00", "\x00\x00", "\x89\xe5",
+   /* 0x5327 */ "\x00\x00", "\x00\x00", "\xad\xea", "\x00\x00", "\x9f\x7d",
+   /* 0x532d */ "\xd4\x6f", "\x00\x00", "\xb6\xd7", "\xe1\x45", "\xb9\xbc",
+   /* 0x5332 */ "\xa0\xa9", "\xfa\xc4", "\xe8\xfa", "\x00\x00", "\x00\x00",
+@@ -6763,12 +6863,12 @@ static const char from_ucs4[][2] =
+   /* 0x5421 */ "\x00\x00", "\x89\xec", "\xca\xa5", "\xca\x7d", "\xa7\x5f",
+   /* 0x5427 */ "\xa7\x61", "\xca\xa4", "\xa7\x68", "\xca\x78", "\xa7\x74",
+   /* 0x542c */ "\xa7\x76", "\xa7\x5c", "\xa7\x6d", "\xfb\x44", "\xca\x76",
+-  /* 0x5431 */ "\xa7\x73", "\x9d\xe2", "\xa7\x64", "\x00\x00", "\xa7\x6e",
++  /* 0x5431 */ "\xa7\x73", "\x9d\xe2", "\xa7\x64", "\x8c\x75", "\xa7\x6e",
+   /* 0x5436 */ "\xa7\x6f", "\xca\x77", "\xa7\x6c", "\xa7\x6a", "\x00\x00",
+   /* 0x543b */ "\xa7\x6b", "\xa7\x71", "\xca\xa1", "\xa7\x5e", "\x00\x00",
+   /* 0x5440 */ "\xa7\x72", "\xca\xa3", "\xa7\x66", "\xa7\x63", "\x00\x00",
+   /* 0x5445 */ "\xca\x7a", "\xa7\x62", "\xca\xa6", "\xa7\x65", "\x00\x00",
+-  /* 0x544a */ "\xa7\x69", "\x9e\xc0", "\x00\x00", "\x9e\x56", "\xa7\x60",
++  /* 0x544a */ "\xa7\x69", "\x9e\xc0", "\x87\xc5", "\x9e\x56", "\xa7\x60",
+   /* 0x544f */ "\xca\xa2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x5454 */ "\xca\x79", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x5458 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -6905,7 +7005,7 @@ static const char from_ucs4[][2] =
+   /* 0x56e7 */ "\x00\x00", "\x00\x00", "\xa7\x77", "\xa7\x7a", "\x00\x00",
+   /* 0x56ed */ "\xfb\x5c", "\xca\xa7", "\xfb\x5b", "\xa7\x78", "\xfb\x57",
+   /* 0x56f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x56f7 */ "\xcb\xf0", "\x00\x00", "\xcb\xf1", "\xa9\x54", "\x00\x00",
++  /* 0x56f7 */ "\xcb\xf0", "\x00\x00", "\xcb\xf1", "\xa9\x54", "\x87\x65",
+   /* 0x56fb */ "\x00\x00", "\x98\xc7", "\x00\x00", "\xab\xaa", "\xfb\x5a",
+   /* 0x5701 */ "\xd1\x48", "\xd1\x49", "\xae\x45", "\xae\x46", "\x00\x00",
+   /* 0x5705 */ "\x00\x00", "\xd4\xac", "\xb0\xe9", "\xb0\xeb", "\xd4\xab",
+@@ -6919,7 +7019,7 @@ static const char from_ucs4[][2] =
+   /* 0x572e */ "\xc9\xc8", "\xa6\x65", "\xa6\x61", "\x00\x00", "\x94\xa7",
+   /* 0x5733 */ "\xa6\x60", "\xc9\xca", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x5737 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa7\xa6", "\x00\x00",
+-  /* 0x573c */ "\x00\x00", "\xa7\xa3", "\x9b\xd4", "\xa7\x7d", "\xca\xaa",
++  /* 0x573d */ "\x8c\xcc", "\xa7\xa3", "\x9b\xd4", "\xa7\x7d", "\xca\xaa",
+   /* 0x5742 */ "\xfb\x64", "\xfb\x76", "\x00\x00", "\xca\xab", "\xfb\x60",
+   /* 0x5747 */ "\xa7\xa1", "\x00\x00", "\xca\xad", "\xa7\x7b", "\xca\xae",
+   /* 0x574c */ "\xca\xac", "\xa7\x7e", "\xa7\xa2", "\xa7\xa5", "\xa7\xa4",
+@@ -6942,7 +7042,7 @@ static const char from_ucs4[][2] =
+   /* 0x57a1 */ "\x9b\xf4", "\xab\xaf", "\xab\xae", "\xce\x53", "\xce\x5c",
+   /* 0x57a5 */ "\x00\x00", "\x9e\xf7", "\x00\x00", "\x00\x00", "\x9e\xc1",
+   /* 0x57aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\xab\xb1", "\x00\x00",
+-  /* 0x57af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x99\x6f",
++  /* 0x57af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xc3", "\x99\x6f",
+   /* 0x57b5 */ "\xce\x50", "\xd1\x53", "\x00\x00", "\xd1\x52", "\xd1\x57",
+   /* 0x57ba */ "\xd1\x4e", "\x96\xf1", "\xd1\x51", "\xd1\x50", "\x8e\x41",
+   /* 0x57bf */ "\xd1\x54", "\x00\x00", "\xd1\x58", "\xae\x47", "\xae\x4a",
+@@ -6962,7 +7062,7 @@ static const char from_ucs4[][2] =
+   /* 0x5805 */ "\xb0\xed", "\xb0\xef", "\xd4\xbb", "\xd4\xb6", "\xae\x4b",
+   /* 0x580a */ "\xb0\xee", "\xd4\xb8", "\xd4\xc7", "\xd4\xcb", "\xd4\xc2",
+   /* 0x580e */ "\x00\x00", "\xd4\xc4", "\x00\x00", "\x97\xe5", "\x00\x00",
+-  /* 0x5814 */ "\xd4\xae", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x5814 */ "\xd4\xae", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xc8",
+   /* 0x5819 */ "\xd8\xa1", "\x00\x00", "\xd8\xaa", "\xd8\xa9", "\xb3\xfa",
+   /* 0x581e */ "\xd8\xa2", "\x00\x00", "\xb3\xfb", "\xb3\xf9", "\x96\x7d",
+   /* 0x5823 */ "\xd8\xa4", "\xb3\xf6", "\xd8\xa8", "\xfb\x6c", "\xd8\xa3",
+@@ -6987,8 +7087,8 @@ static const char from_ucs4[][2] =
+   /* 0x5882 */ "\xe1\x64", "\xb9\xd2", "\x00\x00", "\xb9\xd6", "\xe1\x5a",
+   /* 0x5887 */ "\xe1\x60", "\xe1\x65", "\xe1\x56", "\xb9\xd4", "\xe1\x5e",
+   /* 0x588b */ "\x00\x00", "\x00\x00", "\xe1\x62", "\xe1\x68", "\xe1\x58",
+-  /* 0x5891 */ "\xe1\x61", "\x00\x00", "\xb9\xd3", "\xe1\x67", "\x00\x00",
+-  /* 0x5895 */ "\x00\x00", "\x00\x00", "\xe1\x59", "\x8b\xaf", "\x9e\xbd",
++  /* 0x5891 */ "\xe1\x61", "\x8c\x77", "\xb9\xd3", "\xe1\x67", "\x00\x00",
++  /* 0x5896 */ "\x87\xb0", "\x00\x00", "\xe1\x59", "\x8b\xaf", "\x9e\xbd",
+   /* 0x589a */ "\x00\x00", "\xbc\x59", "\xe5\x4b", "\xbc\x57", "\xbc\x56",
+   /* 0x58a0 */ "\xe5\x4d", "\xe5\x52", "\x00\x00", "\xe5\x4e", "\x00\x00",
+   /* 0x58a5 */ "\xe5\x51", "\xbc\x5c", "\x9e\xe6", "\xbe\xa5", "\xbc\x5b",
+@@ -6999,7 +7099,7 @@ static const char from_ucs4[][2] =
+   /* 0x58be */ "\xbe\xc1", "\xe9\x4c", "\x00\x00", "\xbe\xc0", "\xe9\x4e",
+   /* 0x58c2 */ "\x00\x00", "\x00\x00", "\xbe\xc3", "\xe9\x50", "\xbe\xc2",
+   /* 0x58c8 */ "\xe9\x49", "\xe9\x4b", "\x00\x00", "\x92\xea", "\x00\x00",
+-  /* 0x58cc */ "\x00\x00", "\xc0\xa5", "\xec\xcc", "\x00\x00", "\xc0\xa4",
++  /* 0x58cc */ "\x00\x00", "\xc0\xa5", "\xec\xcc", "\x8c\x78", "\xc0\xa4",
+   /* 0x58d2 */ "\xec\xcd", "\xc0\xa3", "\xec\xcb", "\xc0\xa2", "\xec\xca",
+   /* 0x58d6 */ "\x00\x00", "\xc2\x53", "\xc2\x52", "\xf1\xf6", "\xf1\xf8",
+   /* 0x58dc */ "\xfb\x72", "\xf1\xf7", "\xc3\x61", "\xc3\x62", "\xfb\x71",
+@@ -7015,7 +7115,7 @@ static const char from_ucs4[][2] =
+   /* 0x590e */ "\xd1\x59", "\xae\x4c", "\x00\x00", "\xfe\x42", "\xf1\xf9",
+   /* 0x5912 */ "\x00\x00", "\xc4\xdc", "\xa4\x69", "\xa5\x7e", "\xc9\x70",
+   /* 0x5917 */ "\x00\x00", "\xa6\x67", "\xa6\x68", "\x00\x00", "\xa9\x5d",
+-  /* 0x591c */ "\x00\x00", "\x00\x00", "\xfb\x7b", "\xb0\xf7", "\x00\x00",
++  /* 0x591d */ "\x87\x68", "\x00\x00", "\xfb\x7b", "\xb0\xf7", "\x00\x00",
+   /* 0x5922 */ "\xb9\xda", "\x00\x00", "\xb9\xdb", "\xb9\xd9", "\x00\x00",
+   /* 0x5927 */ "\xa4\x6a", "\x00\x00", "\xa4\xd1", "\xa4\xd3", "\xa4\xd2",
+   /* 0x592c */ "\xc9\x5b", "\xa4\xd4", "\xa5\xa1", "\xc9\x71", "\x00\x00",
+@@ -7047,7 +7147,7 @@ static const char from_ucs4[][2] =
+   /* 0x59ae */ "\xa9\x67", "\xa9\x6f", "\x97\xb3", "\xcc\x4f", "\xcc\x48",
+   /* 0x59b3 */ "\xa9\x70", "\xcc\x53", "\xcc\x44", "\xcc\x4b", "\x9f\x74",
+   /* 0x59b8 */ "\x92\xf1", "\xa9\x66", "\xcc\x45", "\xa9\x64", "\xcc\x4c",
+-  /* 0x59bd */ "\xcc\x50", "\xa9\x63", "\x00\x00", "\xcc\x51", "\xcc\x4a",
++  /* 0x59bd */ "\xcc\x50", "\xa9\x63", "\x8c\xfa", "\xcc\x51", "\xcc\x4a",
+   /* 0x59c1 */ "\x00\x00", "\xcc\x4d", "\x97\xdf", "\xa9\x72", "\xa9\x69",
+   /* 0x59c7 */ "\xcc\x54", "\xcc\x52", "\xfb\xa6", "\xa9\x6e", "\xa9\x6c",
+   /* 0x59cc */ "\xcc\x49", "\xa9\x6b", "\xcc\x47", "\xcc\x46", "\xa9\x6a",
+@@ -7065,7 +7165,7 @@ static const char from_ucs4[][2] =
+   /* 0x5a07 */ "\x00\x00", "\xae\x5c", "\xd1\x62", "\x97\x42", "\xae\x5b",
+   /* 0x5a0d */ "\x94\xe6", "\x00\x00", "\xd1\x60", "\x00\x00", "\xae\x50",
+   /* 0x5a12 */ "\x92\xf5", "\xae\x55", "\x00\x00", "\xd1\x5f", "\xd1\x5c",
+-  /* 0x5a17 */ "\xd1\x61", "\xae\x51", "\xd1\x5b", "\x00\x00", "\xae\x54",
++  /* 0x5a17 */ "\xd1\x61", "\xae\x51", "\xd1\x5b", "\x8c\xc5", "\xae\x54",
+   /* 0x5a1c */ "\xae\x52", "\x00\x00", "\xd1\x63", "\xae\x53", "\xae\x57",
+   /* 0x5a21 */ "\x92\xfd", "\x00\x00", "\xae\x58", "\xfb\xa2", "\xae\x5a",
+   /* 0x5a25 */ "\x00\x00", "\x9c\x51", "\x00\x00", "\xae\x59", "\x94\xe9",
+@@ -7093,7 +7193,7 @@ static const char from_ucs4[][2] =
+   /* 0x5a94 */ "\xd8\xb6", "\xd8\xc0", "\xfb\xba", "\xd8\xc5", "\x00\x00",
+   /* 0x5a99 */ "\x92\xeb", "\xb4\x41", "\xb4\x44", "\xd8\xcc", "\xd8\xcf",
+   /* 0x5a9e */ "\xd8\xba", "\xd8\xb7", "\xfc\x73", "\x97\xb7", "\xd8\xb9",
+-  /* 0x5aa2 */ "\x00\x00", "\x00\x00", "\xd8\xbe", "\xd8\xbc", "\xb4\x45",
++  /* 0x5aa2 */ "\x00\x00", "\x87\x6f", "\xd8\xbe", "\xd8\xbc", "\xb4\x45",
+   /* 0x5aa7 */ "\x00\x00", "\xd8\xc8", "\x00\x00", "\xfb\xb4", "\xd8\xbf",
+   /* 0x5aac */ "\x00\x00", "\xd8\xc1", "\xd8\xb5", "\xdc\xfa", "\xdc\xf8",
+   /* 0x5ab2 */ "\xb7\x42", "\xb7\x40", "\xdd\x43", "\xdc\xf9", "\xdd\x44",
+@@ -7102,7 +7202,7 @@ static const char from_ucs4[][2] =
+   /* 0x5ac1 */ "\xb6\xf9", "\xb7\x41", "\x90\xa7", "\xdc\xf4", "\x00\x00",
+   /* 0x5ac6 */ "\xdc\xfe", "\xdc\xf3", "\xdc\xfc", "\xb6\xfa", "\xdd\x42",
+   /* 0x5acb */ "\xdc\xf5", "\xb6\xfb", "\xdd\x45", "\x97\x41", "\x92\xf4",
+-  /* 0x5acf */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xbc", "\x00\x00",
++  /* 0x5acf */ "\x00\x00", "\x87\x72", "\x00\x00", "\xfb\xbc", "\x00\x00",
+   /* 0x5ad5 */ "\xe1\x6e", "\xb9\xe2", "\xb9\xe1", "\xb9\xe3", "\xe1\x7a",
+   /* 0x5ada */ "\xe1\x70", "\xe1\x76", "\xe1\x6b", "\xe1\x79", "\xe1\x78",
+   /* 0x5adf */ "\xe1\x7c", "\xe1\x75", "\xb9\xde", "\xe1\x74", "\xb9\xe4",
+@@ -7115,7 +7215,7 @@ static const char from_ucs4[][2] =
+   /* 0x5b02 */ "\xe5\x5b", "\xe5\x59", "\x00\x00", "\xe5\x5f", "\x00\x00",
+   /* 0x5b07 */ "\xe5\x5e", "\xbc\x63", "\xbc\x5e", "\x00\x00", "\xbc\x60",
+   /* 0x5b0c */ "\xbc\x62", "\x9e\xb5", "\x00\x00", "\xe5\x60", "\xe9\x57",
+-  /* 0x5b11 */ "\x96\x4b", "\x00\x00", "\xe9\x56", "\xe9\x55", "\x00\x00",
++  /* 0x5b11 */ "\x96\x4b", "\x00\x00", "\xe9\x56", "\xe9\x55", "\x8c\xac",
+   /* 0x5b16 */ "\xe9\x58", "\xe9\x51", "\x00\x00", "\xe9\x52", "\xe9\x5a",
+   /* 0x5b1b */ "\xe9\x53", "\x00\x00", "\xbe\xc5", "\xe9\x5c", "\xa0\xfa",
+   /* 0x5b20 */ "\xe9\x5b", "\xe9\x54", "\x00\x00", "\xec\xd1", "\xc0\xa8",
+@@ -7141,21 +7241,21 @@ static const char from_ucs4[][2] =
+   /* 0x5b84 */ "\xc9\x73", "\xa6\x76", "\x00\x00", "\xa6\x74", "\xa6\x75",
+   /* 0x5b89 */ "\xa6\x77", "\x00\x00", "\xa7\xba", "\xa7\xb9", "\x00\x00",
+   /* 0x5b8e */ "\xca\xbc", "\xa7\xbb", "\x9e\x67", "\x00\x00", "\xca\xbd",
+-  /* 0x5b93 */ "\xcc\x57", "\x00\x00", "\xcc\x58", "\x00\x00", "\xa9\x76",
++  /* 0x5b93 */ "\xcc\x57", "\x00\x00", "\xcc\x58", "\x8c\xd9", "\xa9\x76",
+   /* 0x5b98 */ "\xa9\x78", "\xa9\x7a", "\xa9\x77", "\xa9\x7b", "\xa9\x79",
+   /* 0x5b9d */ "\xfb\xd2", "\x89\x62", "\x89\x63", "\x00\x00", "\x00\x00",
+   /* 0x5ba2 */ "\xab\xc8", "\xab\xc5", "\xab\xc7", "\xab\xc9", "\xab\xc6",
+   /* 0x5ba7 */ "\xd1\x66", "\xce\x77", "\x00\x00", "\xfc\x7d", "\x00\x00",
+   /* 0x5bac */ "\xd1\x68", "\xd1\x67", "\xae\x63", "\x00\x00", "\xae\x5f",
+   /* 0x5bb0 */ "\x00\x00", "\x00\x00", "\xae\x60", "\xae\x62", "\xae\x64",
+-  /* 0x5bb6 */ "\xae\x61", "\x00\x00", "\xae\x66", "\xae\x65", "\x00\x00",
++  /* 0x5bb6 */ "\xae\x61", "\x87\x73", "\xae\x66", "\xae\x65", "\x00\x00",
+   /* 0x5bba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xb1\x4a",
+   /* 0x5bc0 */ "\xd4\xf2", "\xd4\xf1", "\xb1\x49", "\x9f\x6b", "\xb1\x48",
+   /* 0x5bc5 */ "\xb1\x47", "\xb1\x4b", "\xb1\x46", "\x00\x00", "\x00\x00",
+   /* 0x5bca */ "\xd8\xd5", "\xd8\xd2", "\xb4\x49", "\xd8\xd1", "\xd8\xd6",
+   /* 0x5bce */ "\x00\x00", "\xb4\x4b", "\xd8\xd4", "\xb4\x48", "\xb4\x4a",
+   /* 0x5bd4 */ "\xd8\xd3", "\xfb\xcc", "\xdd\x48", "\xfe\xae", "\xdd\x49",
+-  /* 0x5bd9 */ "\xdd\x4a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x5bd9 */ "\xdd\x4a", "\x00\x00", "\x87\x6d", "\x00\x00", "\x00\x00",
+   /* 0x5bde */ "\xb9\xe6", "\xb9\xee", "\xe1\x7e", "\xb9\xe8", "\xb9\xec",
+   /* 0x5be3 */ "\xe1\xa1", "\xb9\xed", "\xb9\xe9", "\xb9\xea", "\xb9\xe7",
+   /* 0x5be8 */ "\xb9\xeb", "\xbc\x66", "\xd8\xd0", "\xbc\x67", "\xbc\x65",
+@@ -7186,7 +7286,7 @@ static const char from_ucs4[][2] =
+   /* 0x5c65 */ "\xbc\x69", "\x00\x00", "\xe5\x61", "\xc0\xab", "\xef\xc2",
+   /* 0x5c6a */ "\xef\xc3", "\x00\x00", "\xc4\xdd", "\xf8\xa8", "\xc9\x4b",
+   /* 0x5c6f */ "\xa4\xd9", "\x00\x00", "\xa4\x73", "\x00\x00", "\xc9\x77",
+-  /* 0x5c74 */ "\xc9\x76", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x5c74 */ "\xc9\x76", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xe9",
+   /* 0x5c79 */ "\xa6\x7a", "\xc9\xd7", "\xc9\xd8", "\xc9\xd6", "\x00\x00",
+   /* 0x5c7e */ "\xc9\xd9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x5c82 */ "\x00\x00", "\x00\x00", "\xfb\xdd", "\xca\xc7", "\x00\x00",
+@@ -7205,15 +7305,15 @@ static const char from_ucs4[][2] =
+   /* 0x5cc3 */ "\x00\x00", "\x00\x00", "\xce\xab", "\xce\xa4", "\xce\xaa",
+   /* 0x5cc9 */ "\xce\xa3", "\xce\xa5", "\xce\x7d", "\xce\x7b", "\x00\x00",
+   /* 0x5cce */ "\xce\xac", "\xce\xa9", "\xce\x79", "\x9f\x58", "\xab\xd0",
+-  /* 0x5cd3 */ "\xce\xa7", "\xce\xa8", "\x00\x00", "\xce\xa6", "\xce\x7c",
++  /* 0x5cd3 */ "\xce\xa7", "\xce\xa8", "\x8c\xe6", "\xce\xa6", "\xce\x7c",
+   /* 0x5cd8 */ "\xce\x7a", "\xab\xcf", "\xce\xa2", "\xce\x7e", "\x00\x00",
+   /* 0x5cdc */ "\x00\x00", "\xce\xa1", "\xce\xad", "\x00\x00", "\x00\x00",
+   /* 0x5ce1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x73", "\x00\x00",
+   /* 0x5ce6 */ "\x00\x00", "\xae\x6f", "\xfb\xde", "\xae\x6e", "\x00\x00",
+   /* 0x5cec */ "\xd1\x6c", "\xae\x6b", "\xd1\x6e", "\xfb\xdf", "\xae\x70",
+-  /* 0x5cf1 */ "\xd1\x6f", "\x00\x00", "\x00\x00", "\xae\x73", "\x00\x00",
++  /* 0x5cf1 */ "\xd1\x6f", "\x00\x00", "\x00\x00", "\xae\x73", "\x8c\x48",
+   /* 0x5cf6 */ "\xae\x71", "\xd1\x70", "\xce\xae", "\xd1\x72", "\x00\x00",
+-  /* 0x5cfb */ "\xae\x6d", "\x00\x00", "\xae\x6c", "\x00\x00", "\xd1\x6d",
++  /* 0x5cfb */ "\xae\x6d", "\x87\x74", "\xae\x6c", "\x00\x00", "\xd1\x6d",
+   /* 0x5d00 */ "\xd1\x71", "\xae\x72", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x5d04 */ "\x00\x00", "\xb1\x53", "\xb1\x52", "\x00\x00", "\x00\x00",
+   /* 0x5d09 */ "\x00\x00", "\xd4\xf5", "\xd4\xf9", "\xd4\xfb", "\xb1\x54",
+@@ -7238,7 +7338,7 @@ static const char from_ucs4[][2] =
+   /* 0x5d69 */ "\xb7\x43", "\x00\x00", "\xd8\xdb", "\xdd\x52", "\x00\x00",
+   /* 0x5d6d */ "\x00\x00", "\xb7\x44", "\x98\xad", "\xdd\x4d", "\xdd\x51",
+   /* 0x5d72 */ "\x00\x00", "\x9e\xea", "\x00\x00", "\x00\x00", "\xe1\xa9",
+-  /* 0x5d77 */ "\x00\x00", "\xe1\xb0", "\xe1\xa7", "\x00\x00", "\xe1\xae",
++  /* 0x5d78 */ "\x8c\xec", "\xe1\xb0", "\xe1\xa7", "\x8c\xd4", "\xe1\xae",
+   /* 0x5d7d */ "\xe1\xa5", "\xe1\xad", "\xe1\xb1", "\xe1\xa4", "\xe1\xa8",
+   /* 0x5d82 */ "\xe1\xa3", "\x00\x00", "\xb9\xf1", "\x9c\xeb", "\xe1\xa6",
+   /* 0x5d87 */ "\xb9\xf2", "\xe1\xac", "\xe1\xab", "\xe1\xaa", "\xfb\xe0",
+@@ -7294,8 +7394,8 @@ static const char from_ucs4[][2] =
+   /* 0x5e80 */ "\x00\x00", "\xc9\x7a", "\xfb\xc3", "\xc9\xdc", "\x00\x00",
+   /* 0x5e86 */ "\x89\x65", "\xa7\xc8", "\xca\xd0", "\xca\xce", "\xa7\xc9",
+   /* 0x5e8b */ "\xca\xcd", "\xca\xcf", "\xca\xd1", "\x00\x00", "\xa7\xc7",
+-  /* 0x5e8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x5e95 */ "\xa9\xb3", "\xa9\xb4", "\xa9\xb1", "\x00\x00", "\x00\x00",
++  /* 0x5e8f */ "\x00\x00", "\x00\x00", "\x8c\x7a", "\x00\x00", "\x00\x00",
++  /* 0x5e95 */ "\xa9\xb3", "\xa9\xb4", "\xa9\xb1", "\x00\x00", "\x8c\x7b",
+   /* 0x5e9a */ "\xa9\xb0", "\xce\xb8", "\xa9\xb2", "\x00\x00", "\x00\x00",
+   /* 0x5e9e */ "\x00\x00", "\xab\xd6", "\x00\x00", "\xce\xb7", "\xce\xb9",
+   /* 0x5ea4 */ "\xce\xb6", "\xce\xba", "\xab\xd7", "\xae\x79", "\xd1\x75",
+@@ -7328,7 +7428,7 @@ static const char from_ucs4[][2] =
+   /* 0x5f2a */ "\x00\x00", "\x00\x00", "\xab\xda", "\xce\xbc", "\x00\x00",
+   /* 0x5f30 */ "\xd1\x7a", "\xae\x7a", "\x00\x00", "\xd1\x79", "\x00\x00",
+   /* 0x5f35 */ "\xb1\x69", "\xd5\x4c", "\xb1\x6a", "\xd5\x4d", "\x00\x00",
+-  /* 0x5f3a */ "\xfc\x4c", "\x00\x00", "\xb4\x5d", "\x00\x00", "\x00\x00",
++  /* 0x5f3a */ "\xfc\x4c", "\x8c\xfe", "\xb4\x5d", "\x00\x00", "\x00\x00",
+   /* 0x5f3e */ "\x00\x00", "\xdd\x62", "\x00\x00", "\x00\x00", "\xe1\xbf",
+   /* 0x5f44 */ "\xe1\xbe", "\x00\x00", "\xb9\xfb", "\x00\x00", "\xbc\x75",
+   /* 0x5f49 */ "\xe5\x76", "\xbe\xca", "\xe9\x74", "\xc0\xb1", "\x95\xb8",
+@@ -7355,7 +7455,7 @@ static const char from_ucs4[][2] =
+   /* 0x5fb2 */ "\xe5\x77", "\x00\x00", "\x00\x00", "\xbc\x78", "\xe1\xc1",
+   /* 0x5fb7 */ "\xbc\x77", "\x00\x00", "\xb9\xfd", "\xa0\x51", "\xec\xde",
+   /* 0x5fbc */ "\xe9\x75", "\xc0\xb2", "\xec\xdd", "\xf2\x40", "\xf4\x48",
+-  /* 0x5fc1 */ "\xf4\x49", "\x00\x00", "\xa4\xdf", "\x8b\xcb", "\xa5\xb2",
++  /* 0x5fc1 */ "\xf4\x49", "\x8c\x7c", "\xa4\xdf", "\x8b\xcb", "\xa5\xb2",
+   /* 0x5fc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xc9\x7b", "\x00\x00",
+   /* 0x5fca */ "\x00\x00", "\xa7\xd2", "\xa7\xd4", "\x00\x00", "\xc9\xe2",
+   /* 0x5fd0 */ "\xca\xd8", "\xca\xd7", "\xca\xd6", "\x00\x00", "\xc9\xe1",
+@@ -7425,7 +7525,7 @@ static const char from_ucs4[][2] =
+   /* 0x6110 */ "\xd9\x4d", "\x00\x00", "\xb4\x74", "\xd9\x45", "\xd8\xfe",
+   /* 0x6115 */ "\xb4\x6a", "\xd9\x42", "\x00\x00", "\xd9\x4b", "\x9e\xf1",
+   /* 0x611a */ "\xb7\x4d", "\xb7\x52", "\xb4\x67", "\xd9\x4c", "\x00\x00",
+-  /* 0x611f */ "\xb7\x50", "\x00\x00", "\x00\x00", "\x00\x00", "\xb4\x68",
++  /* 0x611f */ "\xb7\x50", "\x00\x00", "\x00\x00", "\x8c\x4d", "\xb4\x68",
+   /* 0x6123 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xb7\x5c", "\xe1\xc3",
+   /* 0x6129 */ "\xdd\x70", "\x00\x00", "\xdd\x68", "\xe1\xc2", "\x00\x00",
+   /* 0x612e */ "\xdd\x6c", "\xdd\x6e", "\x9f\x7e", "\x00\x00", "\xdd\x6b",
+@@ -7508,7 +7608,7 @@ static const char from_ucs4[][2] =
+   /* 0x62af */ "\xcc\xbc", "\xcc\xbf", "\xa9\xea", "\x00\x00", "\xcc\xbb",
+   /* 0x62b4 */ "\xcc\xb4", "\xa9\xe8", "\xcc\xb8", "\x00\x00", "\xcc\xc0",
+   /* 0x62b9 */ "\xa9\xd9", "\x00\x00", "\xcc\xbd", "\xa9\xe3", "\xa9\xe2",
+-  /* 0x62be */ "\xcc\xb6", "\xa9\xd7", "\x00\x00", "\x00\x00", "\xa9\xd8",
++  /* 0x62be */ "\xcc\xb6", "\xa9\xd7", "\x00\x00", "\x87\xdd", "\xa9\xd8",
+   /* 0x62c3 */ "\x9b\x46", "\xa9\xd6", "\xfc\xae", "\xa9\xee", "\xa9\xe6",
+   /* 0x62c8 */ "\xa9\xe0", "\xa9\xd4", "\xcc\xb9", "\xa9\xdf", "\xa9\xd5",
+   /* 0x62cd */ "\xa9\xe7", "\xa9\xf0", "\xce\xd4", "\xa9\xe4", "\xcc\xb5",
+@@ -7651,7 +7751,7 @@ static const char from_ucs4[][2] =
+   /* 0x657a */ "\xe5\xbe", "\xe5\xc0", "\xe9\xb1", "\x00\x00", "\x00\x00",
+   /* 0x657f */ "\xe9\xb0", "\xec\xef", "\xec\xee", "\xc0\xc4", "\xc0\xc5",
+   /* 0x6584 */ "\xf2\x48", "\xfc\xc9", "\x8d\xac", "\xa4\xe5", "\xfb\xc6",
+-  /* 0x6589 */ "\x89\x67", "\x00\x00", "\x00\x00", "\xd9\x79", "\x00\x00",
++  /* 0x6589 */ "\x89\x67", "\x00\x00", "\x8c\x7e", "\xd9\x79", "\x00\x00",
+   /* 0x658d */ "\x00\x00", "\x00\x00", "\xb4\xb4", "\xb4\xb3", "\xdd\xbd",
+   /* 0x6592 */ "\x00\x00", "\xef\xd8", "\xc4\xe3", "\xf7\xde", "\xa4\xe6",
+   /* 0x6597 */ "\x00\x00", "\xae\xc6", "\x00\x00", "\xb1\xd8", "\xb1\xd7",
+@@ -7690,11 +7790,11 @@ static const char from_ucs4[][2] =
+   /* 0x663c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xae\xd0",
+   /* 0x6642 */ "\xae\xc9", "\xae\xcc", "\xfc\xda", "\xae\xcf", "\x00\x00",
+   /* 0x6647 */ "\xd1\xd5", "\x9b\x71", "\xae\xca", "\xd1\xd3", "\xfc\xdd",
+-  /* 0x664c */ "\xae\xce", "\x00\x00", "\x00\x00", "\xae\xcb", "\x00\x00",
++  /* 0x664c */ "\xae\xce", "\x87\x64", "\x00\x00", "\xae\xcb", "\x00\x00",
+   /* 0x6651 */ "\xd1\xd6", "\xae\xcd", "\x8d\xaf", "\x00\x00", "\x00\x00",
+   /* 0x6655 */ "\x00\x00", "\xfa\xf2", "\x00\x00", "\xd5\xac", "\xb1\xdf",
+   /* 0x665b */ "\xd5\xab", "\xd5\xad", "\xb1\xde", "\xb1\xe3", "\xd1\xd4",
+-  /* 0x665f */ "\x00\x00", "\xd5\xaa", "\xd5\xae", "\x93\xd8", "\xb1\xe0",
++  /* 0x6660 */ "\x87\xb5", "\xd5\xaa", "\xd5\xae", "\x93\xd8", "\xb1\xe0",
+   /* 0x6665 */ "\xd5\xa9", "\xb1\xe2", "\xfc\xdf", "\xb1\xe1", "\x00\x00",
+   /* 0x666a */ "\xd9\xa7", "\x93\xd3", "\xd9\xa2", "\x00\x00", "\xb4\xb6",
+   /* 0x666f */ "\xb4\xba", "\xb4\xb7", "\xd9\xa5", "\xd9\xa8", "\xfc\xe1",
+@@ -7721,7 +7821,7 @@ static const char from_ucs4[][2] =
+   /* 0x66d8 */ "\xef\xdc", "\xc0\xc6", "\xef\xda", "\xef\xdb", "\xc2\x60",
+   /* 0x66dd */ "\xc3\x6e", "\xf2\x4b", "\x00\x00", "\xc3\x6d", "\x00\x00",
+   /* 0x66e1 */ "\x00\x00", "\xf4\x51", "\xf4\x52", "\x00\x00", "\xc4\x66",
+-  /* 0x66e6 */ "\x00\x00", "\xf4\x50", "\xc4\xe4", "\x00\x00", "\xf7\xdf",
++  /* 0x66e7 */ "\x8c\xdb", "\xf4\x50", "\xc4\xe4", "\x00\x00", "\xf7\xdf",
+   /* 0x66ec */ "\xc5\xce", "\xf8\xaa", "\xf8\xab", "\x00\x00", "\xa4\xea",
+   /* 0x66f1 */ "\x9d\xf1", "\xa6\xb1", "\xa6\xb2", "\xa7\xf3", "\x00\x00",
+   /* 0x66f6 */ "\xcc\xd1", "\xac\x54", "\xae\xd1", "\xb1\xe4", "\x00\x00",
+@@ -7731,7 +7831,7 @@ static const char from_ucs4[][2] =
+   /* 0x670a */ "\xcc\xd2", "\xaa\x42", "\xa0\xbb", "\xaa\x41", "\x9b\x7e",
+   /* 0x670f */ "\xce\xf9", "\xce\xfa", "\x00\x00", "\xd1\xd7", "\xd1\xd8",
+   /* 0x6714 */ "\xae\xd2", "\xae\xd3", "\x8d\xb3", "\xae\xd4", "\xd5\xaf",
+-  /* 0x6718 */ "\x00\x00", "\x00\x00", "\xb1\xe6", "\x00\x00", "\xb4\xc2",
++  /* 0x6719 */ "\x8c\x52", "\x00\x00", "\xb1\xe6", "\x00\x00", "\xb4\xc2",
+   /* 0x671e */ "\x9a\xe8", "\xb4\xc1", "\xdd\xc8", "\xdf\x7a", "\xe1\xfb",
+   /* 0x6723 */ "\xe9\xbd", "\x00\x00", "\x8e\xdc", "\xc2\x61", "\xc4\x67",
+   /* 0x6728 */ "\xa4\xec", "\x00\x00", "\xa5\xbc", "\xa5\xbd", "\xa5\xbb",
+@@ -7747,12 +7847,12 @@ static const char from_ucs4[][2] =
+   /* 0x675a */ "\xcb\x46", "\x00\x00", "\xa7\xf9", "\xcb\x44", "\xa7\xfb",
+   /* 0x675f */ "\xa7\xf4", "\xa7\xfe", "\x98\xe7", "\xfc\xf3", "\x00\x00",
+   /* 0x6763 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xf2", "\x00\x00",
+-  /* 0x6768 */ "\x00\x00", "\xaa\x57", "\x00\x00", "\xcc\xd4", "\xaa\x43",
+-  /* 0x676d */ "\x00\x00", "\xaa\x4d", "\xaa\x4e", "\xaa\x46", "\xaa\x58",
++  /* 0x6768 */ "\x00\x00", "\xaa\x57", "\x8c\xca", "\xcc\xd4", "\xaa\x43",
++  /* 0x676e */ "\x87\x75", "\xaa\x4d", "\xaa\x4e", "\xaa\x46", "\xaa\x58",
+   /* 0x6773 */ "\xaa\x48", "\xcc\xdc", "\xaa\x53", "\xcc\xd7", "\xaa\x49",
+   /* 0x6778 */ "\xcc\xe6", "\xcc\xe7", "\xcc\xdf", "\xcc\xd8", "\xaa\x56",
+   /* 0x677d */ "\xcc\xe4", "\xaa\x51", "\xaa\x4f", "\x00\x00", "\xcc\xe5",
+-  /* 0x6781 */ "\x00\x00", "\xcc\xe3", "\xcc\xdb", "\xcc\xd3", "\xcc\xda",
++  /* 0x6782 */ "\x87\xba", "\xcc\xe3", "\xcc\xdb", "\xcc\xd3", "\xcc\xda",
+   /* 0x6787 */ "\xaa\x4a", "\x00\x00", "\xaa\x50", "\x00\x00", "\xaa\x44",
+   /* 0x678c */ "\xcc\xde", "\xcc\xdd", "\xcc\xd5", "\x93\xe5", "\xaa\x52",
+   /* 0x6791 */ "\xcc\xe1", "\xcc\xd6", "\xaa\x55", "\xcc\xe8", "\xaa\x45",
+@@ -7833,7 +7933,7 @@ static const char from_ucs4[][2] =
+   /* 0x6908 */ "\xd9\xbe", "\x8d\xbd", "\xd9\xcb", "\xd9\xca", "\xd9\xaa",
+   /* 0x690d */ "\xb4\xd3", "\xb4\xd5", "\xd9\xb2", "\xd9\xb9", "\xd9\xc1",
+   /* 0x6912 */ "\xb4\xd4", "\xd9\xb8", "\xd9\xc4", "\xd9\xd7", "\x00\x00",
+-  /* 0x6917 */ "\xd9\xcc", "\x9b\xa1", "\x00\x00", "\x9a\xb7", "\x8e\xfc",
++  /* 0x6917 */ "\xd9\xcc", "\x9b\xa1", "\x8c\xa2", "\x9a\xb7", "\x8e\xfc",
+   /* 0x691b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x6920 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xd9\xd8",
+   /* 0x6925 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xd9\xae",
+@@ -7887,19 +7987,19 @@ static const char from_ucs4[][2] =
+   /* 0x6a16 */ "\xe5\xef", "\xe5\xcc", "\xe5\xe8", "\xbc\xd0", "\x97\xf9",
+   /* 0x6a1b */ "\xe5\xd6", "\x95\x58", "\xe5\xd7", "\xbc\xcf", "\xbc\xcc",
+   /* 0x6a20 */ "\xe5\xd2", "\xbc\xd2", "\x00\x00", "\xbc\xcb", "\x00\x00",
+-  /* 0x6a25 */ "\xe5\xe9", "\xe5\xec", "\xe5\xd9", "\xe9\xca", "\x00\x00",
++  /* 0x6a25 */ "\xe5\xe9", "\xe5\xec", "\xe5\xd9", "\xe9\xca", "\x87\xb6",
+   /* 0x6a29 */ "\x00\x00", "\x98\x5e", "\xfe\x7b", "\x94\xcd", "\x00\x00",
+   /* 0x6a2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\xe9\xc2", "\x93\xee",
+   /* 0x6a34 */ "\xe9\xbe", "\xbe\xf6", "\x00\x00", "\x00\x00", "\xbe\xeb",
+   /* 0x6a39 */ "\xbe\xf0", "\xbe\xec", "\xe9\xcc", "\xe9\xd7", "\xbe\xea",
+   /* 0x6a3e */ "\xe9\xc4", "\xe9\xcd", "\xe5\xdf", "\xe9\xce", "\x00\x00",
+-  /* 0x6a42 */ "\x00\x00", "\xbe\xf1", "\xfd\x5a", "\xe9\xdd", "\xbe\xf5",
++  /* 0x6a43 */ "\x8c\xa3", "\xbe\xf1", "\xfd\x5a", "\xe9\xdd", "\xbe\xf5",
+   /* 0x6a48 */ "\xbe\xf8", "\xe9\xc0", "\x00\x00", "\xbe\xf4", "\x93\xf5",
+   /* 0x6a4d */ "\xe9\xdb", "\xe9\xdc", "\xe9\xd2", "\xe9\xd1", "\xe9\xc9",
+   /* 0x6a52 */ "\x93\xef", "\x8e\xea", "\xe9\xd3", "\xe9\xda", "\xe9\xd9",
+   /* 0x6a57 */ "\x8f\x5b", "\xbe\xef", "\xbe\xed", "\xe9\xcb", "\xe9\xc8",
+   /* 0x6a5b */ "\x00\x00", "\xe9\xc5", "\xe9\xd8", "\xbe\xf7", "\xe9\xd6",
+-  /* 0x6a61 */ "\xbe\xf3", "\xbe\xf2", "\x00\x00", "\xe9\xd0", "\x8d\xc6",
++  /* 0x6a61 */ "\xbe\xf3", "\xbe\xf2", "\x8c\x5e", "\xe9\xd0", "\x8d\xc6",
+   /* 0x6a66 */ "\xe9\xbf", "\xe9\xc1", "\xe9\xc3", "\xe9\xd5", "\xe9\xcf",
+   /* 0x6a6b */ "\xbe\xee", "\x00\x00", "\xe9\xc6", "\x00\x00", "\xe9\xd4",
+   /* 0x6a6f */ "\x00\x00", "\x8d\xc8", "\x00\x00", "\x00\x00", "\x8d\xc7",
+@@ -8033,7 +8133,7 @@ static const char from_ucs4[][2] =
+   /* 0x6cf0 */ "\xae\xf5", "\xaa\x74", "\xcc\xfe", "\xaa\x61", "\x00\x00",
+   /* 0x6cf5 */ "\xac\xa6", "\x00\x00", "\x00\x00", "\x00\x00", "\xcd\x4c",
+   /* 0x6cf9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x6cfe */ "\x00\x00", "\xcf\x7c", "\xcf\xa1", "\x8d\xd7", "\xcf\xa4",
++  /* 0x6cff */ "\x8c\xa5", "\xcf\x7c", "\xcf\xa1", "\x8d\xd7", "\xcf\xa4",
+   /* 0x6d04 */ "\xcf\x77", "\x92\xfb", "\x8d\xd8", "\xcf\xa7", "\xcf\xaa",
+   /* 0x6d09 */ "\xcf\xac", "\xcf\x74", "\xac\x76", "\xac\x7b", "\xd2\x49",
+   /* 0x6d0e */ "\xac\xad", "\xcf\xa5", "\xcf\xad", "\xcf\x7b", "\xcf\x73",
+@@ -8084,7 +8184,7 @@ static const char from_ucs4[][2] =
+   /* 0x6def */ "\xd2\x52", "\xd5\xf9", "\xb2\x60", "\xd6\x41", "\xb2\x45",
+   /* 0x6df4 */ "\xd5\xf5", "\xb2\x57", "\xd5\xe9", "\xb2\x56", "\x00\x00",
+   /* 0x6df9 */ "\xb2\x54", "\xb2\x4c", "\xb2\x4b", "\xd9\xe7", "\xd6\x43",
+-  /* 0x6dfd */ "\x00\x00", "\x00\x00", "\xd5\xeb", "\x00\x00", "\x97\xd5",
++  /* 0x6dfe */ "\x8c\x41", "\x00\x00", "\xd5\xeb", "\x00\x00", "\x97\xd5",
+   /* 0x6e03 */ "\xd9\xfc", "\x94\x4a", "\xb2\x4d", "\x00\x00", "\x00\x00",
+   /* 0x6e07 */ "\x00\x00", "\x00\x00", "\x94\x4d", "\x00\x00", "\x00\x00",
+   /* 0x6e0c */ "\x00\x00", "\x00\x00", "\x97\xcb", "\x00\x00", "\x00\x00",
+@@ -8101,7 +8201,7 @@ static const char from_ucs4[][2] =
+   /* 0x6e44 */ "\xb5\x44", "\xd9\xef", "\xd9\xe8", "\xd9\xe9", "\x00\x00",
+   /* 0x6e49 */ "\xd9\xeb", "\xb4\xea", "\xd9\xf8", "\x00\x00", "\xb4\xf8",
+   /* 0x6e4e */ "\xb5\x42", "\xfd\xc0", "\xfc\xf9", "\xd9\xfa", "\xda\x53",
+-  /* 0x6e53 */ "\xda\x4b", "\xb4\xe6", "\xda\x51", "\xb4\xf2", "\x00\x00",
++  /* 0x6e53 */ "\xda\x4b", "\xb4\xe6", "\xda\x51", "\xb4\xf2", "\x8c\xdd",
+   /* 0x6e58 */ "\xb4\xf0", "\xfb\x7e", "\xda\x57", "\xb4\xef", "\xda\x41",
+   /* 0x6e5d */ "\xd9\xf4", "\xd9\xfe", "\xb5\x47", "\xda\x45", "\xda\x42",
+   /* 0x6e62 */ "\xd9\xf0", "\xb5\x43", "\xda\x4f", "\xda\x4c", "\xda\x54",
+@@ -8202,15 +8302,15 @@ static const char from_ucs4[][2] =
+   /* 0x703c */ "\x00\x00", "\xc4\x69", "\xf4\x63", "\xf4\x66", "\xf4\x69",
+   /* 0x7042 */ "\xf4\x61", "\xf5\xd3", "\xf5\xd4", "\xf5\xd8", "\xf5\xd9",
+   /* 0x7046 */ "\x00\x00", "\xf5\xd6", "\xf5\xd7", "\xf5\xd5", "\xfd\xe0",
+-  /* 0x704c */ "\xc4\xe9", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\xf6",
++  /* 0x704c */ "\xc4\xe9", "\x8c\x67", "\x00\x00", "\x00\x00", "\x8d\xf6",
+   /* 0x7051 */ "\xc5\x78", "\xf6\xeb", "\x00\x00", "\x8d\xf7", "\xf6\xe8",
+   /* 0x7056 */ "\xf6\xe9", "\xf6\xea", "\xc5\x79", "\x00\x00", "\xf7\xe5",
+   /* 0x705b */ "\xf7\xe4", "\x8f\xfa", "\xf8\xaf", "\xc5\xf4", "\xf8\xad",
+   /* 0x7060 */ "\xf8\xb0", "\xf8\xae", "\xf8\xf5", "\xc6\x57", "\xc6\x65",
+   /* 0x7065 */ "\xf9\xa3", "\xf9\x6c", "\x97\xd0", "\xf9\xa2", "\xf9\xd0",
+-  /* 0x706a */ "\xf9\xd1", "\xa4\xf5", "\x8b\xd2", "\x00\x00", "\x00\x00",
++  /* 0x706a */ "\xf9\xd1", "\xa4\xf5", "\x8b\xd2", "\x00\x00", "\x87\xde",
+   /* 0x706f */ "\x8d\xf8", "\xa6\xc7", "\xca\x41", "\x00\x00", "\x00\x00",
+-  /* 0x7074 */ "\xcb\x5e", "\x90\xd9", "\xa8\x5f", "\x00\x00", "\xa8\x62",
++  /* 0x7074 */ "\xcb\x5e", "\x90\xd9", "\xa8\x5f", "\x8c\x47", "\xa8\x62",
+   /* 0x7079 */ "\xfa\xf0", "\xcb\x5f", "\x00\x00", "\xa8\x60", "\xa8\x61",
+   /* 0x707e */ "\xfd\xe1", "\x8d\xf9", "\x00\x00", "\xfd\xe3", "\xcd\x58",
+   /* 0x7083 */ "\xcd\x5a", "\xcd\x55", "\xcd\x52", "\xcd\x54", "\x00\x00",
+@@ -8255,7 +8355,7 @@ static const char from_ucs4[][2] =
+   /* 0x7146 */ "\xb7\xda", "\xde\x6b", "\x00\x00", "\xb7\xd2", "\xfd\xf0",
+   /* 0x714b */ "\xde\x7a", "\xb7\xd7", "\xde\xa2", "\xb7\xce", "\xfd\xf4",
+   /* 0x7150 */ "\xde\x7d", "\x9b\xf5", "\xde\x6d", "\xde\x7e", "\xde\x6c",
+-  /* 0x7154 */ "\x00\x00", "\xb7\xdc", "\x00\x00", "\xde\x78", "\xb7\xcf",
++  /* 0x7154 */ "\x00\x00", "\xb7\xdc", "\x8c\xee", "\xde\x78", "\xb7\xcf",
+   /* 0x715a */ "\xde\xa3", "\x00\x00", "\xb7\xd4", "\xde\x71", "\xb7\xd9",
+   /* 0x715f */ "\xde\x7c", "\xde\x6f", "\xde\x76", "\xde\x72", "\xde\x6e",
+   /* 0x7164 */ "\xb7\xd1", "\xb7\xd8", "\xb7\xd6", "\xb7\xd3", "\xb7\xdb",
+@@ -8267,7 +8367,7 @@ static const char from_ucs4[][2] =
+   /* 0x7182 */ "\xe2\xbf", "\x00\x00", "\xba\xb6", "\xe2\xbe", "\xe2\xc2",
+   /* 0x7187 */ "\xe2\xba", "\x98\xe0", "\xe2\xbc", "\xba\xb5", "\x00\x00",
+   /* 0x718c */ "\x92\xca", "\x00\x00", "\x98\x57", "\xe2\xc0", "\xe2\xbb",
+-  /* 0x7190 */ "\x00\x00", "\xba\xb7", "\x00\x00", "\xba\xb2", "\x00\x00",
++  /* 0x7191 */ "\x8c\x51", "\xba\xb7", "\x00\x00", "\xba\xb2", "\x00\x00",
+   /* 0x7196 */ "\xfd\xeb", "\xe2\xc4", "\x9b\x49", "\xba\xb3", "\xe6\x67",
+   /* 0x719b */ "\xe6\x64", "\xe6\x70", "\xe6\x6a", "\xe6\x6c", "\xbc\xf4",
+   /* 0x71a0 */ "\xe6\x66", "\xe6\x6e", "\x9d\x76", "\x9e\xaf", "\xe6\x6d",
+@@ -8289,14 +8389,14 @@ static const char from_ucs4[][2] =
+   /* 0x71f0 */ "\xed\x61", "\xed\x5d", "\xed\x5f", "\x00\x00", "\xc0\xed",
+   /* 0x71f5 */ "\x98\xbf", "\x9e\x49", "\x00\x00", "\xc2\x77", "\xef\xfb",
+   /* 0x71f9 */ "\x00\x00", "\xc2\x74", "\xc2\x75", "\xef\xfd", "\xc2\x76",
+-  /* 0x71ff */ "\xef\xfa", "\x00\x00", "\xef\xf9", "\xf2\x6c", "\xef\xfc",
++  /* 0x71ff */ "\xef\xfa", "\x8c\xa7", "\xef\xf9", "\xf2\x6c", "\xef\xfc",
+   /* 0x7203 */ "\x00\x00", "\xf2\x6d", "\xc3\x7a", "\xf2\x6b", "\x00\x00",
+   /* 0x7209 */ "\x9b\xca", "\xf2\x6a", "\x00\x00", "\xf2\x69", "\xc3\x7b",
+   /* 0x720e */ "\xfd\xfe", "\x92\xdc", "\xc4\x6c", "\x00\x00", "\x00\x00",
+   /* 0x7213 */ "\xf4\x6a", "\xf4\x6b", "\xfe\x41", "\x91\xcc", "\x91\xe2",
+   /* 0x7217 */ "\x00\x00", "\xf5\xdc", "\xf5\xdb", "\xc4\xea", "\x00\x00",
+   /* 0x721d */ "\xf5\xda", "\xf6\xec", "\xf6\xed", "\x00\x00", "\x00\x00",
+-  /* 0x7222 */ "\xf7\xe6", "\xf8\xb1", "\xfe\x44", "\x00\x00", "\xf8\xf6",
++  /* 0x7222 */ "\xf7\xe6", "\xf8\xb1", "\xfe\x44", "\x87\x5f", "\xf8\xf6",
+   /* 0x7227 */ "\xf9\xbc", "\xc6\x79", "\xf9\xc6", "\xa4\xf6", "\x8b\xd3",
+   /* 0x722c */ "\xaa\xa6", "\xaa\xa7", "\xfe\x47", "\x00\x00", "\xac\xb8",
+   /* 0x7230 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xc0\xef",
+@@ -8368,7 +8468,7 @@ static const char from_ucs4[][2] =
+   /* 0x737b */ "\xc4\x6d", "\xf4\x6e", "\xf4\x6d", "\xf5\xdd", "\xf6\xef",
+   /* 0x7380 */ "\xc5\x7a", "\xf7\xe8", "\xf7\xe7", "\xf7\xe9", "\xa5\xc8",
+   /* 0x7385 */ "\xcf\xc6", "\xaf\x59", "\xb2\x76", "\xd6\x6a", "\xa5\xc9",
+-  /* 0x738a */ "\xc9\xa7", "\xa4\xfd", "\x00\x00", "\x00\x00", "\xca\x45",
++  /* 0x738a */ "\xc9\xa7", "\xa4\xfd", "\x8c\xa9", "\x00\x00", "\xca\x45",
+   /* 0x738f */ "\x98\xae", "\x00\x00", "\x00\x00", "\xcb\x6c", "\xcb\x6a",
+   /* 0x7394 */ "\xcb\x6b", "\xcb\x68", "\xa8\x68", "\xcb\x69", "\x92\xd6",
+   /* 0x7398 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\xe1", "\xcd\x6d",
+@@ -8377,9 +8477,9 @@ static const char from_ucs4[][2] =
+   /* 0x73a8 */ "\xaa\xb2", "\xaa\xb1", "\xfe\x5b", "\xaa\xb4", "\xcd\x6c",
+   /* 0x73ad */ "\xcd\x68", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x73b2 */ "\xac\xc2", "\xac\xc5", "\xcf\xce", "\xcf\xcd", "\xcf\xcc",
+-  /* 0x73b7 */ "\xac\xbf", "\xcf\xd5", "\xcf\xcb", "\x00\x00", "\xac\xc1",
++  /* 0x73b7 */ "\xac\xbf", "\xcf\xd5", "\xcf\xcb", "\x8c\x53", "\xac\xc1",
+   /* 0x73bc */ "\xd2\xaf", "\x00\x00", "\xcf\xd2", "\xcf\xd0", "\xac\xc4",
+-  /* 0x73c0 */ "\x00\x00", "\xcf\xc8", "\xcf\xd3", "\x00\x00", "\xcf\xca",
++  /* 0x73c0 */ "\x00\x00", "\xcf\xc8", "\xcf\xd3", "\x87\xbf", "\xcf\xca",
+   /* 0x73c6 */ "\xcf\xd4", "\xcf\xd1", "\xcf\xc9", "\xfe\x5e", "\xac\xc0",
+   /* 0x73cb */ "\xcf\xd6", "\xcf\xc7", "\xac\xc3", "\xfb\xd7", "\xfe\x5a",
+   /* 0x73d0 */ "\x94\xc5", "\x00\x00", "\xd2\xb4", "\xd2\xab", "\xd2\xb6",
+@@ -8392,7 +8492,7 @@ static const char from_ucs4[][2] =
+   /* 0x73f3 */ "\x97\x64", "\xd6\x78", "\xd6\x6d", "\xd6\x6b", "\xfe\x68",
+   /* 0x73f8 */ "\xd6\x6c", "\x96\x4e", "\xd6\x73", "\x97\x65", "\xd6\x74",
+   /* 0x73fd */ "\xd6\x70", "\xb2\x7b", "\xd6\x75", "\xd6\x72", "\xd6\x6f",
+-  /* 0x7401 */ "\x00\x00", "\xb2\x79", "\xd6\x6e", "\xb2\x77", "\xb2\x7a",
++  /* 0x7402 */ "\x8c\x5a", "\xb2\x79", "\xd6\x6e", "\xb2\x77", "\xb2\x7a",
+   /* 0x7407 */ "\xd6\x71", "\xd6\x79", "\xaf\x5b", "\xb2\x78", "\xd6\x77",
+   /* 0x740c */ "\xd6\x76", "\xb2\x7c", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x7411 */ "\x89\xa1", "\x95\xfa", "\x00\x00", "\x92\xd4", "\xfe\x69",
+@@ -8406,12 +8506,12 @@ static const char from_ucs4[][2] =
+   /* 0x7439 */ "\xfe\x6c", "\xb5\x57", "\x00\x00", "\x94\x6b", "\x00\x00",
+   /* 0x743d */ "\x00\x00", "\xb7\xe9", "\xde\xb7", "\xb7\xe8", "\xde\xbb",
+   /* 0x7443 */ "\x92\xfc", "\xde\xb1", "\x95\xeb", "\xde\xbc", "\xfe\x73",
+-  /* 0x7448 */ "\x97\x6e", "\xfe\x5f", "\xde\xb2", "\xde\xb3", "\x00\x00",
++  /* 0x7448 */ "\x97\x6e", "\xfe\x5f", "\xde\xb2", "\xde\xb3", "\x87\xb8",
+   /* 0x744d */ "\xde\xbd", "\xde\xba", "\xde\xb8", "\xde\xb9", "\xde\xb5",
+   /* 0x7452 */ "\xde\xb4", "\xfd\xbd", "\xde\xbe", "\xb7\xe5", "\x92\xd5",
+   /* 0x7457 */ "\xde\xb6", "\x00\x00", "\xb7\xea", "\xb7\xe4", "\xb7\xeb",
+   /* 0x745c */ "\xb7\xec", "\xfe\xb9", "\xb7\xe7", "\xb7\xe6", "\xfe\x71",
+-  /* 0x7460 */ "\x00\x00", "\xe2\xce", "\xba\xbe", "\xba\xbd", "\xfb\xbb",
++  /* 0x7461 */ "\x87\x78", "\xe2\xce", "\xba\xbe", "\xba\xbd", "\xfb\xbb",
+   /* 0x7465 */ "\x00\x00", "\xe2\xd3", "\x94\x7a", "\xbc\xfc", "\xba\xbf",
+   /* 0x746b */ "\x95\xfb", "\xfe\x77", "\xba\xc1", "\xe2\xd4", "\xb7\xe3",
+   /* 0x7470 */ "\xba\xc0", "\xe2\xd0", "\xe2\xd2", "\xe2\xcf", "\xfe\x79",
+@@ -8423,15 +8523,15 @@ static const char from_ucs4[][2] =
+   /* 0x748d */ "\x00\x00", "\x00\x00", "\xed\x69", "\x00\x00", "\xea\x66",
+   /* 0x7492 */ "\x00\x00", "\xea\x65", "\xea\x67", "\x00\x00", "\xed\x66",
+   /* 0x7498 */ "\xbf\x5a", "\x92\xd3", "\xea\x63", "\x94\xb8", "\xbf\x58",
+-  /* 0x749c */ "\x00\x00", "\xbf\x5c", "\xbf\x5b", "\xea\x64", "\xea\x68",
++  /* 0x749d */ "\x87\x79", "\xbf\x5c", "\xbf\x5b", "\xea\x64", "\xea\x68",
+   /* 0x74a1 */ "\x00\x00", "\xbf\x59", "\xfc\x71", "\xed\x6d", "\xc0\xf5",
+   /* 0x74a7 */ "\xc2\x7a", "\xc0\xf6", "\xc0\xf3", "\xed\x6a", "\xed\x68",
+   /* 0x74ab */ "\x00\x00", "\xed\x6b", "\x00\x00", "\xed\x6e", "\xc0\xf4",
+   /* 0x74b1 */ "\xed\x6c", "\xed\x67", "\x00\x00", "\x97\x5e", "\xf0\x42",
+-  /* 0x74b6 */ "\xf0\x45", "\xf2\x75", "\xf0\x40", "\x00\x00", "\xf4\x6f",
++  /* 0x74b6 */ "\xf0\x45", "\xf2\x75", "\xf0\x40", "\x8c\xad", "\xf4\x6f",
+   /* 0x74bb */ "\xf0\x46", "\x00\x00", "\xc3\xa2", "\xf0\x44", "\xc2\x7b",
+   /* 0x74c0 */ "\xf0\x41", "\xf0\x43", "\xf0\x47", "\xf2\x76", "\x00\x00",
+-  /* 0x74c5 */ "\xf2\x74", "\x00\x00", "\x00\x00", "\xfe\xa7", "\x00\x00",
++  /* 0x74c5 */ "\xf2\x74", "\x87\xc1", "\x00\x00", "\xfe\xa7", "\x00\x00",
+   /* 0x74ca */ "\xc3\xa3", "\xf2\x73", "\x94\x6a", "\x00\x00", "\x00\x00",
+   /* 0x74cf */ "\xc4\x6e", "\x93\xe3", "\x00\x00", "\x00\x00", "\x98\xcf",
+   /* 0x74d4 */ "\xc4\xed", "\xf6\xf1", "\xc4\xec", "\xf6\xf3", "\xf6\xf0",
+@@ -8537,7 +8637,7 @@ static const char from_ucs4[][2] =
+   /* 0x76c8 */ "\xac\xd5", "\xd2\xcc", "\xaf\x71", "\x00\x00", "\xfe\xcb",
+   /* 0x76cd */ "\xaf\x72", "\xaf\x73", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x76d2 */ "\xb2\xb0", "\xd6\xa7", "\xb2\xaf", "\x00\x00", "\x9f\xc2",
+-  /* 0x76d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xda\xb9", "\xb2\xb1",
++  /* 0x76d6 */ "\x00\x00", "\x00\x00", "\x8c\x6b", "\xda\xb9", "\xb2\xb1",
+   /* 0x76dc */ "\xb5\x73", "\xde\xd7", "\xb7\xf8", "\xb7\xf9", "\x00\x00",
+   /* 0x76e1 */ "\xba\xc9", "\x00\x00", "\xba\xca", "\xbd\x4c", "\xbf\x64",
+   /* 0x76e6 */ "\xea\x75", "\xbf\x63", "\x00\x00", "\xed\x79", "\xc0\xfa",
+@@ -8589,7 +8689,7 @@ static const char from_ucs4[][2] =
+   /* 0x77cc */ "\xf4\x74", "\xf4\x77", "\xf4\x75", "\xf4\x76", "\xf5\xe0",
+   /* 0x77d0 */ "\x00\x00", "\x00\x00", "\xc4\xef", "\xf7\xeb", "\xf8\xb4",
+   /* 0x77d5 */ "\x00\x00", "\xc5\xf7", "\xf8\xf8", "\xf8\xf9", "\xc6\x66",
+-  /* 0x77db */ "\xa5\xd9", "\xac\xe1", "\x00\x00", "\xda\xc3", "\x00\x00",
++  /* 0x77db */ "\xa5\xd9", "\xac\xe1", "\x8c\x6e", "\xda\xc3", "\x00\x00",
+   /* 0x77e0 */ "\xde\xe3", "\x00\x00", "\xa5\xda", "\xa8\x6f", "\x00\x00",
+   /* 0x77e5 */ "\xaa\xbe", "\xfa\xd8", "\xcf\xe8", "\xcf\xe9", "\xaf\x78",
+   /* 0x77e9 */ "\x00\x00", "\x00\x00", "\xda\xc4", "\xb5\x75", "\xb8\x47",
+@@ -8642,7 +8742,7 @@ static const char from_ucs4[][2] =
+   /* 0x78d5 */ "\xbd\x57", "\x00\x00", "\xfe\xe7", "\x9f\xfb", "\x00\x00",
+   /* 0x78da */ "\xbf\x6a", "\xea\xa8", "\x00\x00", "\xea\xa2", "\xea\xa6",
+   /* 0x78df */ "\xea\xac", "\xea\xad", "\xea\xa9", "\xea\xaa", "\xea\xa7",
+-  /* 0x78e3 */ "\x00\x00", "\xea\xa4", "\x00\x00", "\xbf\x6c", "\xbf\x69",
++  /* 0x78e4 */ "\x8c\x59", "\xea\xa4", "\x00\x00", "\xbf\x6c", "\xbf\x69",
+   /* 0x78e9 */ "\xea\xa3", "\xea\xa5", "\x00\x00", "\xbf\x6b", "\xea\xab",
+   /* 0x78ee */ "\x93\xc9", "\xc1\x46", "\x94\xe8", "\xfb\x56", "\xed\xaa",
+   /* 0x78f3 */ "\xed\xa5", "\xc1\x45", "\x90\xc5", "\x00\x00", "\xc1\x43",
+@@ -8688,8 +8788,8 @@ static const char from_ucs4[][2] =
+   /* 0x79bb */ "\xd6\xc3", "\x00\x00", "\xb8\x56", "\xa5\xdd", "\xa8\x72",
+   /* 0x79c0 */ "\xa8\x71", "\xa8\x70", "\x00\x00", "\x00\x00", "\x97\xa8",
+   /* 0x79c5 */ "\xcd\xa4", "\xfe\xfc", "\x00\x00", "\xaa\xc4", "\xaa\xc3",
+-  /* 0x79c9 */ "\x00\x00", "\xac\xee", "\xfd\xbf", "\xcf\xfa", "\xcf\xfd",
+-  /* 0x79cf */ "\xcf\xfb", "\x00\x00", "\xac\xec", "\xac\xed", "\x00\x00",
++  /* 0x79ca */ "\x8c\xde", "\xac\xee", "\xfd\xbf", "\xcf\xfa", "\xcf\xfd",
++  /* 0x79cf */ "\xcf\xfb", "\x87\xb3", "\xac\xec", "\xac\xed", "\x00\x00",
+   /* 0x79d4 */ "\xfe\xfe", "\xcf\xf9", "\xcf\xfc", "\x00\x00", "\xaf\xb5",
+   /* 0x79d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xd2\xf3", "\xd2\xf5",
+   /* 0x79de */ "\xd2\xf4", "\xaf\xb2", "\xd2\xef", "\x00\x00", "\x96\xd1",
+@@ -8707,8 +8807,8 @@ static const char from_ucs4[][2] =
+   /* 0x7a1a */ "\xb8\x58", "\xdf\x40", "\xb8\x57", "\x00\x00", "\xb8\x5c",
+   /* 0x7a1f */ "\xb8\x5b", "\xb8\x59", "\x00\x00", "\xde\xfd", "\x00\x00",
+   /* 0x7a23 */ "\x00\x00", "\x00\x00", "\xe3\x49", "\x00\x00", "\xe3\x48",
+-  /* 0x7a28 */ "\x00\x00", "\x00\x00", "\xe3\x44", "\x00\x00", "\xa0\xb3",
+-  /* 0x7a2e */ "\xba\xd8", "\xe3\x47", "\xe3\x46", "\xba\xd9", "\x00\x00",
++  /* 0x7a28 */ "\x00\x00", "\x8c\x63", "\xe3\x44", "\x87\xbb", "\xa0\xb3",
++  /* 0x7a2e */ "\xba\xd8", "\xe3\x47", "\xe3\x46", "\xba\xd9", "\x87\xb4",
+   /* 0x7a32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xbd\x5e",
+   /* 0x7a37 */ "\x00\x00", "\xe6\xd2", "\x94\xcf", "\xbd\x5f", "\xbd\x5b",
+   /* 0x7a3d */ "\xbd\x5d", "\x9f\xfa", "\xbd\x5a", "\xbd\x5c", "\x00\x00",
+@@ -8721,14 +8821,14 @@ static const char from_ucs4[][2] =
+   /* 0x7a60 */ "\xc2\xaa", "\xc2\xa8", "\xc2\xa9", "\x00\x00", "\x00\x00",
+   /* 0x7a65 */ "\x8e\x4c", "\x00\x00", "\xf2\xa6", "\xf2\xa7", "\xc3\xad",
+   /* 0x7a69 */ "\x00\x00", "\xc3\xac", "\xf4\xa3", "\xf4\xa4", "\xf4\xa2",
+-  /* 0x7a6e */ "\x00\x00", "\xf6\xf8", "\xf6\xf9", "\x00\x00", "\x00\x00",
++  /* 0x7a6e */ "\x00\x00", "\xf6\xf8", "\xf6\xf9", "\x87\xc9", "\x00\x00",
+   /* 0x7a74 */ "\xa5\xde", "\xca\x48", "\xa8\x73", "\x00\x00", "\xcd\xa5",
+   /* 0x7a79 */ "\xaa\xc6", "\xaa\xc5", "\xcd\xa6", "\x00\x00", "\x8e\x4d",
+   /* 0x7a7e */ "\xd0\x40", "\xac\xef", "\xcf\xfe", "\xac\xf0", "\x00\x00",
+   /* 0x7a83 */ "\x9a\x73", "\xaf\xb6", "\xd2\xf8", "\xd2\xf6", "\xd2\xfc",
+   /* 0x7a88 */ "\xaf\xb7", "\xd2\xf7", "\xd2\xfb", "\xd2\xf9", "\xd2\xfa",
+   /* 0x7a8c */ "\x00\x00", "\x00\x00", "\xd6\xc8", "\xd6\xca", "\x99\x47",
+-  /* 0x7a92 */ "\xb2\xbf", "\x00\x00", "\xd6\xc9", "\xb2\xc0", "\xb5\xa2",
++  /* 0x7a92 */ "\xb2\xbf", "\x8c\xb1", "\xd6\xc9", "\xb2\xc0", "\xb5\xa2",
+   /* 0x7a97 */ "\xb5\xa1", "\xb5\x7e", "\xda\xdb", "\x00\x00", "\x00\x00",
+   /* 0x7a9b */ "\x00\x00", "\x00\x00", "\xdf\x44", "\xb8\x5d", "\xb8\x5e",
+   /* 0x7aa0 */ "\x00\x00", "\xdf\x43", "\xdf\x42", "\x00\x00", "\x00\x00",
+@@ -8749,7 +8849,7 @@ static const char from_ucs4[][2] =
+   /* 0x7aeb */ "\x00\x00", "\xba\xdc", "\xe3\x4d", "\xba\xdd", "\x00\x00",
+   /* 0x7af0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x7af6 */ "\xc4\x76", "\xf4\xa5", "\x00\x00", "\xa6\xcb", "\xaa\xc7",
+-  /* 0x7afb */ "\xcd\xa7", "\x00\x00", "\xac\xf2", "\x94\xeb", "\xac\xf1",
++  /* 0x7afb */ "\xcd\xa7", "\x87\xa3", "\xac\xf2", "\x94\xeb", "\xac\xf1",
+   /* 0x7b00 */ "\xd0\x42", "\xd0\x43", "\x00\x00", "\x00\x00", "\xd3\x40",
+   /* 0x7b05 */ "\xd3\x42", "\xaf\xb9", "\x00\x00", "\xd3\x44", "\xd3\x47",
+   /* 0x7b0a */ "\xd3\x45", "\x8e\x5c", "\x95\x53", "\x00\x00", "\xd3\x46",
+@@ -8784,12 +8884,12 @@ static const char from_ucs4[][2] =
+   /* 0x7b9b */ "\xe3\x56", "\xe3\x4f", "\xba\xe3", "\x00\x00", "\x00\x00",
+   /* 0x7ba0 */ "\xbd\x69", "\xba\xde", "\x8e\x61", "\x9f\x59", "\xe3\x5c",
+   /* 0x7ba4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x7ba9 */ "\x00\x00", "\x00\x00", "\xe6\xd9", "\xbd\x62", "\x00\x00",
++  /* 0x7ba9 */ "\x00\x00", "\x00\x00", "\xe6\xd9", "\xbd\x62", "\x87\xd0",
+   /* 0x7baf */ "\xe6\xdb", "\x00\x00", "\xbd\x63", "\x8b\xb3", "\x00\x00",
+   /* 0x7bb4 */ "\xbd\x65", "\xe6\xde", "\x00\x00", "\xe6\xd6", "\xba\xe6",
+   /* 0x7bb9 */ "\xe6\xdc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x7bbe */ "\xe6\xd8", "\x00\x00", "\xb8\x60", "\xbd\x68", "\x00\x00",
+-  /* 0x7bc2 */ "\x00\x00", "\xbd\x64", "\x00\x00", "\xbd\x66", "\xbd\x67",
++  /* 0x7bc2 */ "\x00\x00", "\xbd\x64", "\x87\xb9", "\xbd\x66", "\xbd\x67",
+   /* 0x7bc7 */ "\x00\x00", "\xbf\x76", "\xe6\xdd", "\xe6\xd7", "\xbd\x6a",
+   /* 0x7bcc */ "\x00\x00", "\xe6\xda", "\x9f\x5d", "\x8e\x66", "\x00\x00",
+   /* 0x7bd1 */ "\x00\x00", "\x00\x00", "\xea\xc0", "\xea\xbb", "\x00\x00",
+@@ -8797,7 +8897,7 @@ static const char from_ucs4[][2] =
+   /* 0x7bdc */ "\xea\xc3", "\xea\xba", "\xea\xb7", "\xea\xc6", "\xc1\x51",
+   /* 0x7be1 */ "\xbf\x79", "\xea\xc2", "\xea\xb8", "\xbf\x77", "\xea\xbc",
+   /* 0x7be6 */ "\xbf\x7b", "\xea\xb9", "\xea\xbe", "\xbf\x7a", "\xea\xc1",
+-  /* 0x7beb */ "\xea\xc4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x7beb */ "\xea\xc4", "\x8c\xb2", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x7bf0 */ "\xed\xcb", "\xed\xcc", "\xed\xbc", "\xed\xc3", "\xed\xc1",
+   /* 0x7bf4 */ "\x00\x00", "\x00\x00", "\xc1\x4f", "\xed\xc8", "\xea\xbf",
+   /* 0x7bfa */ "\x8e\x6e", "\xed\xbf", "\x9f\x64", "\xed\xc9", "\xc1\x4e",
+@@ -8840,7 +8940,7 @@ static const char from_ucs4[][2] =
+   /* 0x7cb3 */ "\xb8\x65", "\xdf\x55", "\xb8\x66", "\x00\x00", "\x00\x00",
+   /* 0x7cb8 */ "\x99\x5a", "\xba\xe9", "\xe3\x61", "\xe3\x5e", "\xe3\x60",
+   /* 0x7cbd */ "\xba\xea", "\xba\xeb", "\xe3\x5f", "\x00\x00", "\x00\x00",
+-  /* 0x7cc2 */ "\xa0\xb0", "\x00\x00", "\x00\x00", "\xe6\xdf", "\x00\x00",
++  /* 0x7cc2 */ "\xa0\xb0", "\x8c\xb3", "\x00\x00", "\xe6\xdf", "\x00\x00",
+   /* 0x7cc7 */ "\x8e\x79", "\xe6\xe0", "\x8e\x78", "\xbd\x6b", "\xe6\xe2",
+   /* 0x7ccc */ "\xe6\xe1", "\x94\xf3", "\xa2\x61", "\x00\x00", "\xea\xca",
+   /* 0x7cd1 */ "\xea\xcb", "\xea\xc7", "\x98\xaf", "\xea\xc8", "\xbf\x7c",
+@@ -8880,9 +8980,9 @@ static const char from_ucs4[][2] =
+   /* 0x7d7b */ "\xdf\x5f", "\xdf\x61", "\xdf\x65", "\x00\x00", "\xdf\x5b",
+   /* 0x7d80 */ "\xdf\x59", "\xb8\x6a", "\x00\x00", "\xdf\x60", "\xdf\x64",
+   /* 0x7d85 */ "\xdf\x5c", "\xdf\x58", "\x00\x00", "\xdf\x57", "\x8e\xa7",
+-  /* 0x7d89 */ "\x00\x00", "\x00\x00", "\xdf\x62", "\xdf\x5a", "\xdf\x5e",
++  /* 0x7d89 */ "\x00\x00", "\x8c\x76", "\xdf\x62", "\xdf\x5a", "\xdf\x5e",
+   /* 0x7d8f */ "\xb8\x6b", "\x00\x00", "\xb8\x69", "\xdf\x66", "\xb8\x67",
+-  /* 0x7d94 */ "\xdf\x63", "\x00\x00", "\xe3\x72", "\x95\x42", "\x00\x00",
++  /* 0x7d94 */ "\xdf\x63", "\x87\x67", "\xe3\x72", "\x95\x42", "\x00\x00",
+   /* 0x7d98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xba\xee", "\xe3\x6a",
+   /* 0x7d9e */ "\xbd\x78", "\xe3\x74", "\xba\xf1", "\xe3\x78", "\xba\xf7",
+   /* 0x7da3 */ "\xe3\x65", "\x98\x7d", "\x00\x00", "\xe3\x75", "\xe3\x62",
+@@ -8921,11 +9021,11 @@ static const char from_ucs4[][2] =
+   /* 0x7e48 */ "\xc1\x66", "\xed\xd7", "\x00\x00", "\x00\x00", "\xed\xdb",
+   /* 0x7e4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\xf0\x6e", "\xf0\x74",
+   /* 0x7e52 */ "\xc2\xb9", "\xf0\x77", "\xc2\xb4", "\xc2\xb5", "\xf0\x6f",
+-  /* 0x7e57 */ "\xf0\x76", "\xf0\x71", "\xc2\xba", "\xc2\xb7", "\x00\x00",
++  /* 0x7e57 */ "\xf0\x76", "\xf0\x71", "\xc2\xba", "\xc2\xb7", "\x8c\xdc",
+   /* 0x7e5c */ "\xf0\x6d", "\x00\x00", "\xc2\xb6", "\xf0\x73", "\xf0\x75",
+   /* 0x7e61 */ "\xc2\xb8", "\xf0\x72", "\xf0\x70", "\x00\x00", "\x98\x76",
+   /* 0x7e65 */ "\x00\x00", "\x8e\xa1", "\xf2\xb8", "\xc3\xb7", "\xc3\xb8",
+-  /* 0x7e6b */ "\xc3\xb4", "\x00\x00", "\xc3\xb5", "\x8e\xb7", "\xf2\xb4",
++  /* 0x7e6b */ "\xc3\xb4", "\x8c\xb4", "\xc3\xb5", "\x8e\xb7", "\xf2\xb4",
+   /* 0x7e70 */ "\xf2\xb2", "\x00\x00", "\xf2\xb6", "\xc3\xba", "\xf2\xb7",
+   /* 0x7e75 */ "\xf2\xb0", "\xf2\xaf", "\xf2\xb3", "\xf2\xb1", "\xc3\xb6",
+   /* 0x7e7a */ "\xf2\xb5", "\xf4\xac", "\xc4\x7e", "\xc4\x7d", "\xf4\xad",
+@@ -9078,7 +9178,7 @@ static const char from_ucs4[][2] =
+   /* 0x8159 */ "\x99\x7d", "\x99\x7e", "\xdf\x77", "\xdf\x75", "\x00\x00",
+   /* 0x815e */ "\xdf\x7b", "\x00\x00", "\xdf\x73", "\xdf\xa2", "\xdf\x78",
+   /* 0x8162 */ "\x00\x00", "\xdf\x72", "\xb8\x7b", "\xb8\xa3", "\xdf\x7d",
+-  /* 0x8167 */ "\x00\x00", "\xdf\x76", "\x00\x00", "\xb8\x7e", "\x00\x00",
++  /* 0x8167 */ "\x00\x00", "\xdf\x76", "\x00\x00", "\xb8\x7e", "\x8c\xfb",
+   /* 0x816d */ "\x8b\x5b", "\xb8\x7c", "\xdf\x7e", "\xb8\x79", "\xb8\x78",
+   /* 0x8172 */ "\xdf\x79", "\xb8\x7d", "\xb5\xcd", "\x00\x00", "\xdf\x7c",
+   /* 0x8177 */ "\xdf\x74", "\xb8\x7a", "\xb8\xa1", "\xb8\xa2", "\x00\x00",
+@@ -9146,7 +9246,7 @@ static const char from_ucs4[][2] =
+   /* 0x82ad */ "\xaa\xdd", "\xcd\xba", "\xaa\xe4", "\xaa\xe7", "\xaa\xe1",
+   /* 0x82b1 */ "\x00\x00", "\xaa\xda", "\xcd\xbe", "\xcd\xb8", "\xcd\xc5",
+   /* 0x82b7 */ "\xaa\xe9", "\xaa\xe5", "\xaa\xe0", "\xcd\xbd", "\xaf\xec",
+-  /* 0x82bc */ "\xcd\xbb", "\xaa\xde", "\xaa\xe8", "\x00\x00", "\xcd\xb3",
++  /* 0x82bc */ "\xcd\xbb", "\xaa\xde", "\xaa\xe8", "\x8c\xd0", "\xcd\xb3",
+   /* 0x82c0 */ "\x00\x00", "\xcd\xc2", "\xcd\xc4", "\x8b\x52", "\x00\x00",
+   /* 0x82c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x99\xb0",
+   /* 0x82ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x89\x77",
+@@ -9158,7 +9258,7 @@ static const char from_ucs4[][2] =
+   /* 0x82e8 */ "\x00\x00", "\xd0\x7e", "\xd0\x73", "\xd0\x76", "\xd0\xa5",
+   /* 0x82ee */ "\xfa\x4d", "\xad\x66", "\xd0\x7d", "\xad\x5e", "\xd0\x78",
+   /* 0x82f3 */ "\xd0\xa4", "\xd0\x75", "\xd0\x79", "\xd0\x7c", "\x9d\xe4",
+-  /* 0x82f7 */ "\x00\x00", "\xd0\x6d", "\xd0\xa3", "\xd0\x7b", "\xfb\xe9",
++  /* 0x82f8 */ "\x8c\xb5", "\xd0\x6d", "\xd0\xa3", "\xd0\x7b", "\xfb\xe9",
+   /* 0x82fd */ "\x9b\x54", "\xd0\x6c", "\x99\xb2", "\xd0\x70", "\xad\x5f",
+   /* 0x8302 */ "\xad\x5a", "\xad\x53", "\xad\x58", "\xad\x54", "\xad\x67",
+   /* 0x8307 */ "\xd0\x6e", "\xd3\xa5", "\xad\x5b", "\x00\x00", "\x9e\x68",
+@@ -9237,7 +9337,7 @@ static const char from_ucs4[][2] =
+   /* 0x8474 */ "\xdf\xba", "\xb8\xaa", "\xdf\xac", "\xb8\xa7", "\xdf\xc4",
+   /* 0x8479 */ "\xdf\xad", "\xdf\xc2", "\x00\x00", "\x00\x00", "\xdf\xb7",
+   /* 0x847e */ "\xdf\xdb", "\x91\xc7", "\x95\x5f", "\x00\x00", "\xb8\xa6",
+-  /* 0x8482 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xdf\xb3", "\x00\x00",
++  /* 0x8482 */ "\x00\x00", "\x87\xab", "\x00\x00", "\xdf\xb3", "\x00\x00",
+   /* 0x8488 */ "\x99\xbb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x848d */ "\xdf\xaf", "\xdf\xd5", "\xdf\xae", "\xbb\x60", "\xe3\xd3",
+   /* 0x8492 */ "\x8e\x6d", "\x8f\x71", "\xe3\xc2", "\x00\x00", "\x94\xcb",
+@@ -9262,7 +9362,7 @@ static const char from_ucs4[][2] =
+   /* 0x84f1 */ "\xdf\xa9", "\xe7\x5f", "\xe7\x63", "\xe7\x5d", "\x00\x00",
+   /* 0x84f6 */ "\xe7\x70", "\xe7\x61", "\x99\xbf", "\xe7\x77", "\xe7\x5a",
+   /* 0x84fb */ "\xe7\x58", "\xe7\x64", "\xe7\x6e", "\xe7\x69", "\xbd\xb6",
+-  /* 0x8500 */ "\xe7\x4f", "\x00\x00", "\xe7\x6d", "\x92\x42", "\x00\x00",
++  /* 0x8500 */ "\xe7\x4f", "\x00\x00", "\xe7\x6d", "\x92\x42", "\x87\xd7",
+   /* 0x8505 */ "\xfb\xa5", "\xbd\xb7", "\xdf\xbd", "\xe7\x5b", "\xe7\x52",
+   /* 0x850a */ "\xe7\x55", "\xe7\x7b", "\xe7\x5c", "\xe7\x53", "\xe7\x51",
+   /* 0x850f */ "\xe7\x4e", "\x99\xc0", "\xbd\xb0", "\xe7\x65", "\xbd\xaf",
+@@ -9281,7 +9381,7 @@ static const char from_ucs4[][2] =
+   /* 0x854f */ "\x00\x00", "\xeb\x46", "\x99\xc2", "\xea\xfc", "\xeb\x55",
+   /* 0x8555 */ "\xeb\x4f", "\xea\xf8", "\xee\x46", "\xea\xfe", "\xbf\xb7",
+   /* 0x855a */ "\x8f\x5c", "\xeb\x4a", "\x00\x00", "\xeb\x54", "\xbf\xbf",
+-  /* 0x855e */ "\x00\x00", "\xeb\x51", "\xea\xfd", "\xeb\x44", "\xeb\x48",
++  /* 0x855f */ "\x8c\xbd", "\xeb\x51", "\xea\xfd", "\xeb\x44", "\xeb\x48",
+   /* 0x8564 */ "\xeb\x42", "\xeb\x56", "\xeb\x53", "\xeb\x50", "\xbf\xb9",
+   /* 0x8569 */ "\xbf\xba", "\xbf\xbe", "\xea\xfa", "\xeb\x57", "\xbf\xbd",
+   /* 0x856e */ "\xeb\x4d", "\x99\xc4", "\x99\xc5", "\xeb\x4b", "\x00\x00",
+@@ -9291,8 +9391,8 @@ static const char from_ucs4[][2] =
+   /* 0x8582 */ "\xee\x4f", "\xed\xf3", "\xc1\xa1", "\xee\x51", "\xee\x49",
+   /* 0x8587 */ "\xc1\xa8", "\xee\x50", "\xee\x42", "\xc1\xaa", "\xed\xf9",
+   /* 0x858c */ "\xeb\x52", "\xee\x4a", "\xee\x47", "\xed\xf5", "\xee\x55",
+-  /* 0x8591 */ "\xc1\xa4", "\x00\x00", "\x00\x00", "\xc1\xa5", "\xed\xf7",
+-  /* 0x8596 */ "\xee\x48", "\x00\x00", "\xee\x54", "\xee\x4b", "\xed\xfd",
++  /* 0x8591 */ "\xc1\xa4", "\x00\x00", "\x87\x76", "\xc1\xa5", "\xed\xf7",
++  /* 0x8596 */ "\xee\x48", "\x8c\xb6", "\xee\x54", "\xee\x4b", "\xed\xfd",
+   /* 0x859b */ "\xc1\xa7", "\xc1\xa3", "\xee\x4c", "\xed\xfe", "\xee\x56",
+   /* 0x85a0 */ "\xed\xf8", "\xee\x43", "\xee\x4e", "\xed\xfa", "\xed\xfc",
+   /* 0x85a4 */ "\x00\x00", "\xc2\xcb", "\xed\xf6", "\xc1\xa9", "\xc2\xc4",
+@@ -9304,7 +9404,7 @@ static const char from_ucs4[][2] =
+   /* 0x85c3 */ "\xf0\xa7", "\xf0\xad", "\xf0\xb2", "\xf0\xa5", "\xf0\xac",
+   /* 0x85c8 */ "\xf0\xb1", "\xc2\xc7", "\x00\x00", "\xf0\xaf", "\x00\x00",
+   /* 0x85cd */ "\xc2\xc5", "\xf0\xb0", "\xc2\xc3", "\xc2\xc6", "\xf2\xd5",
+-  /* 0x85d2 */ "\xf0\xb5", "\x00\x00", "\x00\x00", "\xc3\xc2", "\x00\x00",
++  /* 0x85d2 */ "\xf0\xb5", "\x00\x00", "\x00\x00", "\xc3\xc2", "\x8c\xce",
+   /* 0x85d7 */ "\xf2\xcd", "\xf2\xd1", "\xf2\xc9", "\xf2\xcc", "\x00\x00",
+   /* 0x85dc */ "\xf2\xd4", "\xc3\xc0", "\xf2\xd9", "\xf2\xd2", "\x99\xc6",
+   /* 0x85e1 */ "\xf2\xca", "\xf2\xda", "\xf2\xd3", "\xc3\xc3", "\xc3\xc4",
+@@ -9316,8 +9416,8 @@ static const char from_ucs4[][2] =
+   /* 0x85ff */ "\xf4\xb9", "\xf4\xbd", "\xf4\xba", "\x8f\xa5", "\x00\x00",
+   /* 0x8604 */ "\xf4\xbf", "\xf4\xc1", "\xc4\xaa", "\xc4\xac", "\x00\x00",
+   /* 0x8609 */ "\xf4\xc0", "\xc4\xad", "\xc4\xab", "\xf4\xc2", "\xfa\xbb",
+-  /* 0x860d */ "\x00\x00", "\x00\x00", "\x95\x70", "\xc4\xa8", "\x00\x00",
+-  /* 0x8612 */ "\x00\x00", "\x93\x68", "\x00\x00", "\x8f\x7e", "\xc4\xf4",
++  /* 0x860d */ "\x00\x00", "\x8c\x61", "\x95\x70", "\xc4\xa8", "\x00\x00",
++  /* 0x8613 */ "\x87\xaf", "\x93\x68", "\x00\x00", "\x8f\x7e", "\xc4\xf4",
+   /* 0x8618 */ "\xf5\xf1", "\xf5\xf7", "\xc4\xf6", "\xf4\xbc", "\xf5\xf6",
+   /* 0x861c */ "\x00\x00", "\xf5\xfd", "\xf5\xf4", "\xf5\xfb", "\xf5\xfa",
+   /* 0x8622 */ "\xf4\xb8", "\xf5\xf5", "\xf0\xb6", "\xf5\xfe", "\xf5\xf3",
+@@ -9444,10 +9544,10 @@ static const char from_ucs4[][2] =
+   /* 0x887f */ "\xd3\xd7", "\xd3\xd5", "\xb0\x4b", "\xb0\x4c", "\xd3\xd9",
+   /* 0x8884 */ "\xfe\xec", "\x00\x00", "\x00\x00", "\x95\xa3", "\xb3\x50",
+   /* 0x8889 */ "\xd7\xb2", "\x00\x00", "\xb3\x55", "\xd7\xc2", "\xb3\x54",
+-  /* 0x888e */ "\xd7\xc4", "\x00\x00", "\x00\x00", "\xd7\xb8", "\xb3\x52",
++  /* 0x888e */ "\xd7\xc4", "\x8c\x45", "\x8c\xb8", "\xd7\xb8", "\xb3\x52",
+   /* 0x8893 */ "\xd7\xc3", "\x00\x00", "\xd7\xb3", "\xb3\x53", "\xd7\xbf",
+   /* 0x8898 */ "\xd7\xbb", "\xd7\xbd", "\xd7\xb7", "\xd7\xbe", "\x8f\xc1",
+-  /* 0x889c */ "\x00\x00", "\xb3\x4f", "\xd7\xba", "\xa0\x52", "\xd7\xb9",
++  /* 0x889d */ "\x87\xb7", "\xb3\x4f", "\xd7\xba", "\xa0\x52", "\xd7\xb9",
+   /* 0x88a2 */ "\xd7\xb5", "\x00\x00", "\xd7\xc0", "\x00\x00", "\x00\x00",
+   /* 0x88a7 */ "\xd7\xbc", "\xd7\xb4", "\x00\x00", "\xd7\xb6", "\xb3\x51",
+   /* 0x88ac */ "\xd7\xc1", "\x00\x00", "\x99\xd0", "\x00\x00", "\x00\x00",
+@@ -9558,7 +9658,7 @@ static const char from_ucs4[][2] =
+   /* 0x8ab9 */ "\xbd\xda", "\xe7\xe2", "\xe7\xdb", "\xbd\xcb", "\xe7\xe3",
+   /* 0x8abe */ "\xe7\xdd", "\xbd\xd5", "\xe7\xde", "\x00\x00", "\xbd\xd4",
+   /* 0x8ac3 */ "\xe7\xe1", "\xbd\xce", "\xe7\xdf", "\xe7\xd5", "\xbd\xcd",
+-  /* 0x8ac8 */ "\xeb\xaa", "\xbd\xd3", "\x00\x00", "\xbd\xd0", "\x00\x00",
++  /* 0x8ac8 */ "\xeb\xaa", "\xbd\xd3", "\x00\x00", "\xbd\xd0", "\x8c\xf7",
+   /* 0x8acd */ "\xbd\xd8", "\x00\x00", "\xe7\xd4", "\x00\x00", "\xe7\xd8",
+   /* 0x8ad2 */ "\xbd\xcc", "\xe7\xd7", "\xe7\xd9", "\xe7\xda", "\xbd\xd7",
+   /* 0x8ad7 */ "\xe7\xdc", "\xe7\xe0", "\xe7\xe4", "\x92\x7c", "\xbd\xdb",
+@@ -9567,7 +9667,7 @@ static const char from_ucs4[][2] =
+   /* 0x8ae6 */ "\xbf\xcd", "\xbf\xd3", "\xeb\xad", "\x00\x00", "\x9c\x45",
+   /* 0x8aeb */ "\xbf\xcf", "\x00\x00", "\xbf\xd9", "\xbf\xd4", "\xeb\xaf",
+   /* 0x8af0 */ "\xeb\xa9", "\xbf\xd0", "\xeb\xa2", "\xbf\xda", "\xeb\xa3",
+-  /* 0x8af5 */ "\xeb\xa4", "\xbf\xdb", "\xbf\xd8", "\xbd\xd1", "\x00\x00",
++  /* 0x8af5 */ "\xeb\xa4", "\xbf\xdb", "\xbf\xd8", "\xbd\xd1", "\x8c\xe8",
+   /* 0x8afa */ "\xbf\xce", "\xeb\xb0", "\xbf\xdc", "\x00\x00", "\xbf\xd5",
+   /* 0x8aff */ "\xeb\xae", "\xbf\xd1", "\xbf\xd6", "\xbf\xd7", "\x00\x00",
+   /* 0x8b04 */ "\xc1\xc3", "\xee\xa4", "\xee\xad", "\xee\xaa", "\xee\xac",
+@@ -9595,9 +9695,9 @@ static const char from_ucs4[][2] =
+   /* 0x8b71 */ "\x00\x00", "\x00\x00", "\xc4\xfe", "\x00\x00", "\x00\x00",
+   /* 0x8b77 */ "\xc5\x40", "\xf6\x4e", "\xf6\x4d", "\xf6\x50", "\xf6\x51",
+   /* 0x8b7b */ "\x00\x00", "\xc5\x41", "\xf7\x56", "\xf7\x5b", "\xc5\xaa",
+-  /* 0x8b81 */ "\x9a\xf6", "\xf7\x58", "\x00\x00", "\xf7\x57", "\xf7\x5a",
++  /* 0x8b81 */ "\x9a\xf6", "\xf7\x58", "\x8c\xae", "\xf7\x57", "\xf7\x5a",
+   /* 0x8b86 */ "\xf7\x59", "\x00\x00", "\xf8\x43", "\x00\x00", "\xc5\xdc",
+-  /* 0x8b8b */ "\xf8\x42", "\xf8\x40", "\x00\x00", "\xf8\x41", "\x00\x00",
++  /* 0x8b8b */ "\xf8\x42", "\xf8\x40", "\x00\x00", "\xf8\x41", "\x87\xcb",
+   /* 0x8b90 */ "\x8f\xe7", "\x00\x00", "\xc5\xfe", "\xc5\xfd", "\xf8\xc1",
+   /* 0x8b95 */ "\xf8\xc2", "\xc6\x40", "\x00\x00", "\xf9\x4d", "\xf9\x4e",
+   /* 0x8b9a */ "\xc6\x67", "\x8f\xe8", "\xc6\x6d", "\x00\x00", "\xf9\xa9",
+@@ -9759,7 +9859,7 @@ static const char from_ucs4[][2] =
+   /* 0x8ea6 */ "\xf9\x70", "\x95\xc9", "\xf9\xbe", "\xf9\xab", "\xc6\x6e",
+   /* 0x8eab */ "\xa8\xad", "\xb0\x60", "\x90\x48", "\x00\x00", "\x00\x00",
+   /* 0x8eb0 */ "\x99\xe8", "\x00\x00", "\xb8\xfa", "\x00\x00", "\x00\x00",
+-  /* 0x8eb4 */ "\x00\x00", "\x90\x49", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x8eb4 */ "\x00\x00", "\x90\x49", "\x00\x00", "\x00\x00", "\x8c\xba",
+   /* 0x8eba */ "\xbd\xf6", "\x00\x00", "\x90\xb1", "\xeb\xc8", "\x00\x00",
+   /* 0x8ebe */ "\x00\x00", "\xc2\xdf", "\x00\x00", "\xf3\x55", "\x90\x4a",
+   /* 0x8ec3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -9807,7 +9907,7 @@ static const char from_ucs4[][2] =
+   /* 0x8f95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x8f9b */ "\xa8\xaf", "\xb6\x64", "\x00\x00", "\x00\x00", "\xb9\x40",
+   /* 0x8fa0 */ "\x9b\x5a", "\x00\x00", "\x00\x00", "\xbb\xb6", "\x00\x00",
+-  /* 0x8fa5 */ "\x90\x50", "\xbf\xec", "\x00\x00", "\xbf\xeb", "\x00\x00",
++  /* 0x8fa5 */ "\x90\x50", "\xbf\xec", "\x8c\x4f", "\xbf\xeb", "\x00\x00",
+   /* 0x8fa9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xc3\xe3", "\xc4\x7c",
+   /* 0x8faf */ "\xc5\x47", "\xa8\xb0", "\xb0\x64", "\xb9\x41", "\x90\x54",
+   /* 0x8fb4 */ "\xf3\x5b", "\xc6\xd6", "\x9a\xa8", "\x99\xef", "\xfe\xeb",
+@@ -9815,7 +9915,7 @@ static const char from_ucs4[][2] =
+   /* 0x8fbe */ "\x9d\x7d", "\xcb\xa6", "\x00\x00", "\x99\xf0", "\xa8\xb1",
+   /* 0x8fc2 */ "\x00\x00", "\xa8\xb4", "\xa8\xb3", "\xa8\xb2", "\x00\x00",
+   /* 0x8fc7 */ "\x00\x00", "\xcb\xa5", "\x99\xf1", "\xcd\xcd", "\x99\xf2",
+-  /* 0x8fcd */ "\xcd\xcf", "\xaa\xef", "\x00\x00", "\x9d\x60", "\xaa\xf1",
++  /* 0x8fcd */ "\xcd\xcf", "\xaa\xef", "\x8c\xbc", "\x9d\x60", "\xaa\xf1",
+   /* 0x8fd2 */ "\xcd\xcc", "\xcd\xce", "\xaa\xf0", "\xcd\xd1", "\xcd\xd0",
+   /* 0x8fd7 */ "\xcd\xd2", "\x00\x00", "\x00\x00", "\xa0\xa3", "\x00\x00",
+   /* 0x8fdb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xd0\xb6",
+@@ -9839,7 +9939,7 @@ static const char from_ucs4[][2] =
+   /* 0x9036 */ "\xb6\x6a", "\x90\x62", "\xb6\x68", "\x00\x00", "\x00\x00",
+   /* 0x903a */ "\x00\x00", "\xb9\x47", "\xe0\xa3", "\xb9\x4f", "\xe0\x7e",
+   /* 0x903f */ "\x00\x00", "\xb9\x50", "\xb9\x45", "\x00\x00", "\xe0\xa1",
+-  /* 0x9044 */ "\x00\x00", "\x00\x00", "\xb9\x4a", "\x00\x00", "\xe0\xa2",
++  /* 0x9044 */ "\x00\x00", "\x87\xbd", "\xb9\x4a", "\x00\x00", "\xe0\xa2",
+   /* 0x904a */ "\xb9\x43", "\xb9\x42", "\x9f\x55", "\xb9\x4d", "\xb9\x4c",
+   /* 0x904f */ "\xb9\x4b", "\xb9\x49", "\xb9\x4e", "\xe0\x7d", "\xb9\x44",
+   /* 0x9054 */ "\xb9\x46", "\xb9\x48", "\x9b\xf9", "\x00\x00", "\xbb\xb8",
+@@ -9925,16 +10025,16 @@ static const char from_ucs4[][2] =
+   /* 0x91e4 */ "\xd7\xfc", "\x96\x5b", "\xb3\xa7", "\xb3\xa9", "\xd8\x42",
+   /* 0x91e9 */ "\xb3\xab", "\xd7\xfe", "\xd8\x40", "\xd7\xf7", "\xb3\xaa",
+   /* 0x91ee */ "\xd8\x43", "\x00\x00", "\x00\x00", "\xd7\xf9", "\x00\x00",
+-  /* 0x91f3 */ "\xd7\xfa", "\xd7\xf8", "\xb3\xa6", "\x00\x00", "\xd8\x41",
++  /* 0x91f3 */ "\xd7\xfa", "\xd7\xf8", "\xb3\xa6", "\x8c\x50", "\xd8\x41",
+   /* 0x91f8 */ "\xd7\xfb", "\xd7\xfd", "\x94\xa6", "\x00\x00", "\x00\x00",
+   /* 0x91fd */ "\xdc\x6d", "\x8f\xd5", "\xdc\x6c", "\xdc\x6a", "\xdc\x62",
+   /* 0x9202 */ "\xdc\x71", "\xdc\x65", "\xdc\x6f", "\xdc\x76", "\xdc\x6e",
+   /* 0x9207 */ "\xb6\x79", "\x9e\x73", "\xb6\x75", "\xdc\x63", "\x00\x00",
+   /* 0x920c */ "\xdc\x69", "\xb6\x77", "\x90\x75", "\xdc\x68", "\xb6\x78",
+   /* 0x9211 */ "\xb6\x7a", "\xdc\x6b", "\x99\xf7", "\xb6\x72", "\xb6\x73",
+-  /* 0x9216 */ "\xdc\x77", "\xdc\x75", "\x00\x00", "\xdc\x74", "\xdc\x66",
++  /* 0x9216 */ "\xdc\x77", "\xdc\x75", "\x87\xb2", "\xdc\x74", "\xdc\x66",
+   /* 0x921a */ "\x00\x00", "\xdc\x72", "\x00\x00", "\xb6\x76", "\x00\x00",
+-  /* 0x921f */ "\x00\x00", "\x00\x00", "\x00\x00", "\xb6\x74", "\xdc\x73",
++  /* 0x921f */ "\x00\x00", "\x8c\xbf", "\x00\x00", "\xb6\x74", "\xdc\x73",
+   /* 0x9225 */ "\xdc\x64", "\xdc\x67", "\xdc\x70", "\x99\xf9", "\x00\x00",
+   /* 0x922a */ "\x96\x63", "\x95\xb9", "\x00\x00", "\xe4\xba", "\xe0\xb7",
+   /* 0x922e */ "\x00\x00", "\xe0\xb0", "\xe0\xc3", "\xe0\xcc", "\xe0\xb3",
+@@ -10027,7 +10127,7 @@ static const char from_ucs4[][2] =
+   /* 0x93e2 */ "\xc3\xf0", "\xf3\x6f", "\xc3\xf3", "\x00\x00", "\xf3\x6b",
+   /* 0x93e7 */ "\xf3\x75", "\xc3\xf5", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x93ec */ "\xf3\x67", "\x00\x00", "\xf3\x6e", "\x00\x00", "\xfd\xcb",
+-  /* 0x93f1 */ "\xfe\x7a", "\x00\x00", "\x91\xdb", "\x00\x00", "\xf4\xf3",
++  /* 0x93f1 */ "\xfe\x7a", "\x00\x00", "\x91\xdb", "\x8c\x6a", "\xf4\xf3",
+   /* 0x93f6 */ "\xf5\x42", "\xf4\xf5", "\xf4\xfc", "\xf3\x66", "\xf4\xfa",
+   /* 0x93fb */ "\xf4\xe9", "\xf5\x40", "\xc4\xc3", "\xf4\xed", "\xf4\xfe",
+   /* 0x9400 */ "\xf4\xf4", "\x97\xaf", "\x00\x00", "\xc4\xc2", "\x95\xdd",
+@@ -10039,7 +10139,7 @@ static const char from_ucs4[][2] =
+   /* 0x941d */ "\x00\x00", "\x00\x00", "\xf4\xea", "\x00\x00", "\x00\x00",
+   /* 0x9422 */ "\x00\x00", "\x91\xbc", "\x90\xe2", "\x90\xb4", "\x95\xe1",
+   /* 0x9428 */ "\xf4\xf0", "\xf6\x61", "\xf6\x66", "\xc5\x4f", "\xf6\x68",
+-  /* 0x942d */ "\x9a\x4e", "\xc5\x49", "\x00\x00", "\xf6\x64", "\xf6\x6a",
++  /* 0x942d */ "\x9a\x4e", "\xc5\x49", "\x87\xad", "\xf6\x64", "\xf6\x6a",
+   /* 0x9432 */ "\xc5\x4e", "\xc5\x4a", "\x00\x00", "\xc5\x4b", "\xf6\x60",
+   /* 0x9437 */ "\xf6\x67", "\xc5\x4d", "\xf6\x65", "\xc5\x4c", "\xf6\x5f",
+   /* 0x943c */ "\xf6\x63", "\xf6\x62", "\x9a\x4f", "\xf6\x5e", "\xf6\x69",
+@@ -10194,13 +10294,13 @@ static const char from_ucs4[][2] =
+   /* 0x9725 */ "\xf1\x78", "\xf3\x7e", "\xc3\xfa", "\xf3\x7d", "\xf3\x7a",
+   /* 0x972a */ "\xc3\xf9", "\xf3\x7b", "\xf3\x7c", "\x00\x00", "\xf5\x48",
+   /* 0x972f */ "\xf5\x49", "\xc4\xc5", "\x90\xd2", "\xc5\x53", "\x00\x00",
+-  /* 0x9733 */ "\x00\x00", "\xf6\x6e", "\x90\xd4", "\x00\x00", "\xc5\x51",
++  /* 0x9734 */ "\x87\x6b", "\xf6\x6e", "\x90\xd4", "\x00\x00", "\xc5\x51",
+   /* 0x9739 */ "\xc5\x52", "\xf6\x6f", "\x00\x00", "\x00\x00", "\xc5\xb4",
+   /* 0x973e */ "\xc5\xb5", "\xf7\x71", "\x9a\x5b", "\x95\xfd", "\xc6\x45",
+   /* 0x9743 */ "\xf8\xcf", "\xc6\x47", "\x00\x00", "\xf8\xce", "\xf8\xd0",
+-  /* 0x9748 */ "\xc6\x46", "\xf9\x57", "\x00\x00", "\xf9\xad", "\x00\x00",
++  /* 0x9748 */ "\xc6\x46", "\xf9\x57", "\x87\xb1", "\xf9\xad", "\x00\x00",
+   /* 0x974c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xc4",
+-  /* 0x9752 */ "\xab\x43", "\x00\x00", "\x00\x00", "\x00\x00", "\xb9\x74",
++  /* 0x9752 */ "\xab\x43", "\x00\x00", "\x00\x00", "\x8c\x66", "\xb9\x74",
+   /* 0x9757 */ "\x90\xde", "\xe4\xbe", "\x00\x00", "\xe8\xb0", "\xc0\x51",
+   /* 0x975c */ "\xc0\x52", "\x9c\xe4", "\xab\x44", "\x90\xe1", "\xbe\x61",
+   /* 0x9761 */ "\xc3\xfb", "\xad\xb1", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -10252,10 +10352,10 @@ static const char from_ucs4[][2] =
+   /* 0x9847 */ "\x9b\x5e", "\xed\xd4", "\xef\x48", "\xef\x47", "\x90\xf8",
+   /* 0x984c */ "\xc3\x44", "\xc3\x42", "\xc3\x45", "\xc3\x43", "\xf1\xa8",
+   /* 0x9851 */ "\xf1\xa9", "\xf1\xaa", "\xc3\x46", "\x00\x00", "\x00\x00",
+-  /* 0x9855 */ "\x00\x00", "\xf3\xaa", "\xc4\x40", "\xf3\xa8", "\x00\x00",
++  /* 0x9856 */ "\x8c\xfc", "\xf3\xaa", "\xc4\x40", "\xf3\xa8", "\x00\x00",
+   /* 0x985b */ "\xc4\x41", "\xf3\xa7", "\xf3\xa9", "\xc3\xfe", "\xf5\x51",
+   /* 0x9860 */ "\xf5\x4e", "\x00\x00", "\xf5\x4f", "\xf5\x50", "\xf6\x72",
+-  /* 0x9865 */ "\xc5\x56", "\x90\xf9", "\xc5\x55", "\x00\x00", "\xf7\x74",
++  /* 0x9865 */ "\xc5\x56", "\x90\xf9", "\xc5\x55", "\x8c\xc9", "\xf7\x74",
+   /* 0x986a */ "\xf7\x73", "\xc5\xb8", "\xfa\x6a", "\x00\x00", "\x00\x00",
+   /* 0x986f */ "\xc5\xe3", "\xc6\x49", "\xc6\x60", "\xf9\x58", "\xf9\xae",
+   /* 0x9874 */ "\xf9\xaf", "\x8b\xef", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -10330,7 +10430,7 @@ static const char from_ucs4[][2] =
+   /* 0x99cd */ "\xe8\xc7", "\xe8\xcb", "\xe8\xc8", "\xbe\x6e", "\xbe\x71",
+   /* 0x99d2 */ "\xbe\x73", "\xe8\xc9", "\xe8\xca", "\xbe\x72", "\xe8\xcd",
+   /* 0x99d7 */ "\xe8\xd0", "\xe8\xce", "\xbe\x74", "\x9f\xab", "\xbe\x70",
+-  /* 0x99dc */ "\xe8\xc6", "\xbe\x6d", "\x00\x00", "\xbe\x6f", "\x00\x00",
++  /* 0x99dc */ "\xe8\xc6", "\xbe\x6d", "\x00\x00", "\xbe\x6f", "\x8c\xbe",
+   /* 0x99e1 */ "\x8e\xc1", "\xc0\x63", "\xec\x66", "\xec\x64", "\xec\x63",
+   /* 0x99e6 */ "\x95\x55", "\xec\x69", "\x00\x00", "\xec\x68", "\xec\x67",
+   /* 0x99ea */ "\x00\x00", "\xec\x62", "\xc0\x62", "\xec\x61", "\x00\x00",
+@@ -10623,852 +10723,19 @@ static const char from_ucs4[][2] =
+   /* 0x9f85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x9f8a */ "\x00\x00", "\x00\x00", "\xc0\x73", "\x91\xcb", "\x00\x00",
+   /* 0x9f90 */ "\xc3\x65", "\xf5\xbf", "\xf6\xd5", "\x00\x00", "\xc5\xc7",
+-  /* 0x9f95 */ "\xf7\xce", "\x00\x00", "\x00\x00", "\xf9\xd5", "\x89\xc8",
++  /* 0x9f95 */ "\xf7\xce", "\x87\xac", "\x87\xa4", "\xf9\xd5", "\x89\xc8",
+   /* 0x9f99 */ "\x00\x00", "\x00\x00", "\xc0\x74", "\x00\x00", "\x00\x00",
+   /* 0x9f9f */ "\x8d\xaa", "\xef\xb6", "\x00\x00", "\xf7\xcf", "\x00\x00",
+-  /* 0x9fa4 */ "\xf9\xa1", "\x9f\xdd",
+-
+-  /* 0xe003 */ "\xfa\x43", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe007 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe00c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe011 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe016 */ "\x00\x00", "\xfa\x58", "\x00\x00", "\x00\x00", "\xfa\x5b",
+-  /* 0xe01b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe020 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe025 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe02a */ "\x00\x00", "\x00\x00", "\xfa\x6d", "\x00\x00", "\x00\x00",
+-  /* 0xe02f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe034 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x78", "\x00\x00",
+-  /* 0xe039 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe03e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe043 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe048 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\xae", "\x00\x00",
+-  /* 0xe04d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe052 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe057 */ "\x00\x00", "\x00\x00", "\xfa\xbc", "\x00\x00", "\x00\x00",
+-  /* 0xe05c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe061 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe066 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe06b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe070 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe075 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe07a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe07f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe084 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe089 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe08e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe094 */ "\xfa\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe099 */ "\xfa\xfb", "\xfa\xfc", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe09d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\x68",
+-  /* 0xe0c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0d0 */ "\xfb\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xb7",
+-  /* 0xe0f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0f7 */ "\x00\x00", "\xfb\xbe", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe0fd */ "\xfb\xc2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe101 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xcb",
+-  /* 0xe106 */ "\x00\x00", "\x00\x00", "\xfb\xce", "\xfb\xcf", "\x00\x00",
+-  /* 0xe10b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe110 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe115 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe11a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe11f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe124 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe129 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe12e */ "\x00\x00", "\xfb\xf5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe133 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe138 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe13d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe142 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe147 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe14c */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x56", "\x00\x00",
+-  /* 0xe151 */ "\x00\x00", "\x00\x00", "\xfc\x5a", "\x00\x00", "\x00\x00",
+-  /* 0xe156 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe15b */ "\x00\x00", "\xfc\x63", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe160 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe165 */ "\x00\x00", "\x00\x00", "\xfc\x6e", "\x00\x00", "\xfc\x70",
+-  /* 0xe16a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe16f */ "\x00\x00", "\xfc\x77", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe175 */ "\xfc\x7b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe179 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe17e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe183 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe188 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe18d */ "\x00\x00", "\xfc\xb7", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe192 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe197 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe19c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1bb */ "\xfc\xe3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1c9 */ "\x00\x00", "\x00\x00", "\xfc\xf4", "\xfc\xf5", "\x00\x00",
+-  /* 0xe1ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x40", "\x00\x00",
+-  /* 0xe1d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1ec */ "\x00\x00", "\x00\x00", "\xfd\x58", "\x00\x00", "\x00\x00",
+-  /* 0xe1f2 */ "\xfd\x5b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe1f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x63", "\x00\x00",
+-  /* 0xe1fb */ "\x00\x00", "\x00\x00", "\xfd\x67", "\x00\x00", "\x00\x00",
+-  /* 0xe200 */ "\x00\x00", "\xfd\x6b", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe205 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe20b */ "\xfd\x74", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe20f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe214 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xa4",
+-  /* 0xe219 */ "\x00\x00", "\x00\x00", "\xfd\xa7", "\x00\x00", "\x00\x00",
+-  /* 0xe21e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe223 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xb2", "\x00\x00",
+-  /* 0xe228 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe22d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe232 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe237 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe23c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe241 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xd0", "\x00\x00",
+-  /* 0xe246 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xd5", "\x00\x00",
+-  /* 0xe24b */ "\x00\x00", "\x00\x00", "\xfd\xd9", "\x00\x00", "\x00\x00",
+-  /* 0xe250 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe255 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe25a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe25f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe264 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe269 */ "\x00\x00", "\xfd\xf6", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe26e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe273 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe278 */ "\x00\x00", "\xfe\x46", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe27d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x4e",
+-  /* 0xe282 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe287 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe28c */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x5c", "\x00\x00",
+-  /* 0xe291 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe296 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x67",
+-  /* 0xe29b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2a1 */ "\xfe\x6d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2af */ "\x00\x00", "\x00\x00", "\xfe\x7e", "\x00\x00", "\x00\x00",
+-  /* 0xe2b4 */ "\x00\x00", "\x00\x00", "\xfe\xa5", "\x00\x00", "\x00\x00",
+-  /* 0xe2b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2be */ "\x00\x00", "\x00\x00", "\xfe\xaf", "\x00\x00", "\x00\x00",
+-  /* 0xe2c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2c9 */ "\xfe\xb7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2d2 */ "\x00\x00", "\xfe\xc2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2e2 */ "\xfe\xd0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xd9",
+-  /* 0xe2ec */ "\xfe\xda", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xde",
+-  /* 0xe2f1 */ "\xfe\xdf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe2fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe300 */ "\xfe\xee", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe304 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe309 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe30e */ "\x00\x00", "\x00\x00", "\x8e\x40", "\x00\x00", "\x00\x00",
+-  /* 0xe313 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe318 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe31d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe322 */ "\x00\x00", "\x00\x00", "\x8e\x54", "\x00\x00", "\x00\x00",
+-  /* 0xe327 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe32c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x5f", "\x00\x00",
+-  /* 0xe331 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe336 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe33b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe340 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x74",
+-  /* 0xe345 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe34a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe34f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe354 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe359 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe35e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xb3", "\x00\x00",
+-  /* 0xe363 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe368 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe36d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe372 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe377 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe37c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xd2",
+-  /* 0xe382 */ "\x8e\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xd7",
+-  /* 0xe386 */ "\x00\x00", "\x00\x00", "\x8e\xda", "\x00\x00", "\x00\x00",
+-  /* 0xe38b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe390 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xe5", "\x00\x00",
+-  /* 0xe396 */ "\x8e\xe7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe39a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xef", "\x00\x00",
+-  /* 0xe3a0 */ "\x8e\xf1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3b4 */ "\x8f\x46", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3b8 */ "\x00\x00", "\x00\x00", "\x8f\x4d", "\x00\x00", "\x00\x00",
+-  /* 0xe3bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3cd */ "\x8f\x5f", "\x00\x00", "\x8f\x61", "\x00\x00", "\x00\x00",
+-  /* 0xe3d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\x67", "\x00\x00",
+-  /* 0xe3d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3e1 */ "\x8f\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3e5 */ "\x00\x00", "\x8f\x79", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3f0 */ "\x8f\xa4", "\x00\x00", "\x8f\xa6", "\x00\x00", "\x8f\xa8",
+-  /* 0xe3f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe3fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe403 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe408 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe40d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe412 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe417 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe41c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe421 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xda",
+-  /* 0xe426 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe42b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe430 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe436 */ "\x8f\xea", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe43a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe43f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe444 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xfc", "\x00\x00",
+-  /* 0xe449 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x42", "\x00\x00",
+-  /* 0xe44e */ "\x00\x00", "\x90\x45", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe453 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe458 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe45d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe462 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x5c",
+-  /* 0xe468 */ "\x90\x5d", "\x90\x5e", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe46c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe471 */ "\x00\x00", "\x00\x00", "\x90\x69", "\x00\x00", "\x00\x00",
+-  /* 0xe476 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe47b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe480 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe485 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xa1",
+-  /* 0xe48a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe48f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe494 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe499 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe49e */ "\x00\x00", "\x00\x00", "\x90\xb8", "\x00\x00", "\x00\x00",
+-  /* 0xe4a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xd8",
+-  /* 0xe4c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xdd",
+-  /* 0xe4c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4da */ "\x00\x00", "\x00\x00", "\x90\xf4", "\x00\x00", "\x00\x00",
+-  /* 0xe4df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe4fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe502 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe507 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe50c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe511 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe516 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe51b */ "\x00\x00", "\x00\x00", "\x91\x76", "\x00\x00", "\x00\x00",
+-  /* 0xe520 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x7c", "\x00\x00",
+-  /* 0xe525 */ "\x00\x00", "\x00\x00", "\x91\xa2", "\x00\x00", "\x00\x00",
+-  /* 0xe52a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xa8", "\x91\xa9",
+-  /* 0xe52f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe534 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe539 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe53e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe543 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe548 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe54d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe552 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe557 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe55c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe561 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe566 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe56b */ "\x00\x00", "\x91\xe7", "\x00\x00", "\x00\x00", "\x91\xea",
+-  /* 0xe570 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe575 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xf4",
+-  /* 0xe57a */ "\x00\x00", "\x00\x00", "\x91\xf7", "\x00\x00", "\x00\x00",
+-  /* 0xe57f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xfe",
+-  /* 0xe584 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe589 */ "\x00\x00", "\x92\x46", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe58e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe593 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe598 */ "\x00\x00", "\x92\x55", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe59e */ "\x92\x59", "\x00\x00", "\x92\x5b", "\x00\x00", "\x00\x00",
+-  /* 0xe5a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x61", "\x00\x00",
+-  /* 0xe5a7 */ "\x00\x00", "\x00\x00", "\x92\x65", "\x00\x00", "\x00\x00",
+-  /* 0xe5ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5c0 */ "\x00\x00", "\x92\x7d", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5c5 */ "\x00\x00", "\x00\x00", "\x92\xa5", "\x00\x00", "\x00\x00",
+-  /* 0xe5ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xb5", "\x00\x00",
+-  /* 0xe5d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xce", "\x00\x00",
+-  /* 0xe5f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe5fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe601 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe606 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe60b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe610 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe615 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xf6", "\x00\x00",
+-  /* 0xe61a */ "\x00\x00", "\x92\xf9", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe61f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe624 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe629 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe62e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe633 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe638 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe63d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe642 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x64", "\x00\x00",
+-  /* 0xe647 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe64c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe651 */ "\x00\x00", "\x00\x00", "\x93\x72", "\x00\x00", "\x00\x00",
+-  /* 0xe656 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe65b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x7e",
+-  /* 0xe660 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe665 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xaa",
+-  /* 0xe66a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe66f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe674 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe679 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xbd", "\x00\x00",
+-  /* 0xe67e */ "\x00\x00", "\x93\xc0", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe683 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe688 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe68e */ "\x93\xce", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe692 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xd7",
+-  /* 0xe697 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe69c */ "\x00\x00", "\x93\xde", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6c0 */ "\x94\x41", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6c5 */ "\x94\x46", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6de */ "\x94\x5f", "\x94\x60", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe6fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe701 */ "\x94\xa4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe705 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe70a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe70f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xb6", "\x00\x00",
+-  /* 0xe714 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe719 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe71e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe723 */ "\x00\x00", "\x94\xc8", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe728 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe72d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe732 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe737 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe73d */ "\x94\xe0", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xe4",
+-  /* 0xe741 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe746 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe74b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe750 */ "\x00\x00", "\x94\xf5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe755 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe75a */ "\x00\x00", "\x00\x00", "\x95\x41", "\x00\x00", "\x00\x00",
+-  /* 0xe75f */ "\x00\x00", "\x95\x45", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe764 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x4c", "\x00\x00",
+-  /* 0xe769 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe76e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe773 */ "\x00\x00", "\x95\x59", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe778 */ "\x00\x00", "\x95\x5e", "\x00\x00", "\x00\x00", "\x95\x61",
+-  /* 0xe77d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe782 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe787 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe78c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x74", "\x00\x00",
+-  /* 0xe791 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe797 */ "\x95\x7b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe79b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7a6 */ "\x95\xac", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xba",
+-  /* 0xe7b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7d7 */ "\x00\x00", "\x00\x00", "\x95\xe0", "\x00\x00", "\x00\x00",
+-  /* 0xe7dd */ "\x95\xe3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7e6 */ "\x00\x00", "\x95\xee", "\x95\xef", "\x00\x00", "\x00\x00",
+-  /* 0xe7eb */ "\x00\x00", "\x95\xf3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7f1 */ "\x95\xf7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe7fb */ "\x96\x42", "\x96\x43", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe800 */ "\x96\x47", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe804 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe809 */ "\x00\x00", "\x00\x00", "\x96\x53", "\x00\x00", "\x00\x00",
+-  /* 0xe80e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\x5a",
+-  /* 0xe813 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe818 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe81d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\x68", "\x00\x00",
+-  /* 0xe822 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe828 */ "\x96\x6f", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe82d */ "\x96\x74", "\x00\x00", "\x96\x76", "\x00\x00", "\x00\x00",
+-  /* 0xe831 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe836 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe83b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe840 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe845 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe84a */ "\x00\x00", "\x00\x00", "\x96\xb6", "\x00\x00", "\x00\x00",
+-  /* 0xe84f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe855 */ "\x96\xbe", "\x96\xbf", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe859 */ "\x00\x00", "\x96\xc4", "\x00\x00", "\x96\xc6", "\x00\x00",
+-  /* 0xe85e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe863 */ "\x00\x00", "\x96\xce", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe868 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe86d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe872 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe877 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe87c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe881 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe887 */ "\x96\xf0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe88b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xf8", "\x00\x00",
+-  /* 0xe891 */ "\x96\xfa", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe895 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe89a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe89f */ "\x00\x00", "\x97\x4b", "\x00\x00", "\x00\x00", "\x97\x4e",
+-  /* 0xe8a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x6c",
+-  /* 0xe8c3 */ "\x97\x6d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8cd */ "\x97\x77", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xa1", "\x97\xa2",
+-  /* 0xe8d6 */ "\x00\x00", "\x00\x00", "\x97\xa5", "\x97\xa6", "\x00\x00",
+-  /* 0xe8db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8e1 */ "\x97\xad", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xb1",
+-  /* 0xe8e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe8f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xca",
+-  /* 0xe8fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe903 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe908 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe90d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe912 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xe3",
+-  /* 0xe918 */ "\x97\xe4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe91c */ "\x00\x00", "\x00\x00", "\x97\xeb", "\x00\x00", "\x00\x00",
+-  /* 0xe921 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xf1", "\x00\x00",
+-  /* 0xe926 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xf7",
+-  /* 0xe92b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe930 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x41", "\x00\x00",
+-  /* 0xe935 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe93a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe93f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe944 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe949 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe94e */ "\x00\x00", "\x98\x5d", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe953 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe958 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe95d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe962 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x74",
+-  /* 0xe967 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe96c */ "\x00\x00", "\x98\x7b", "\x98\x7c", "\x00\x00", "\x00\x00",
+-  /* 0xe971 */ "\x00\x00", "\x98\xa2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe977 */ "\x98\xa6", "\x00\x00", "\x00\x00", "\x98\xa9", "\x98\xaa",
+-  /* 0xe97b */ "\x00\x00", "\x98\xac", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe980 */ "\x00\x00", "\x98\xb1", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe985 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe98a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe98f */ "\x00\x00", "\x98\xc0", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe994 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe999 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe99e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xe9c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xfa",
+-
+-  /* 0xeaa9 */ "\x9a\x7c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeaad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeab2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeab7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeabc */ "\x00\x00", "\x00\x00", "\x9a\xb4", "\x9a\xb5", "\x9a\xb6",
+-  /* 0xeac1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xba", "\x00\x00",
+-  /* 0xeac6 */ "\x00\x00", "\x00\x00", "\x9a\xbe", "\x9a\xbf", "\x9a\xc0",
+-  /* 0xeacc */ "\x9a\xc1", "\x00\x00", "\x00\x00", "\x9a\xc4", "\x9a\xc5",
+-  /* 0xead1 */ "\x9a\xc6", "\x00\x00", "\x9a\xc8", "\x9a\xc9", "\x00\x00",
+-  /* 0xead6 */ "\x9a\xcb", "\x9a\xcc", "\x00\x00", "\x9a\xce", "\x9a\xcf",
+-  /* 0xeada */ "\x00\x00", "\x9a\xd1", "\x00\x00", "\x9a\xd3", "\x9a\xd4",
+-  /* 0xeae0 */ "\x9a\xd5", "\x9a\xd6", "\x9a\xd7", "\x9a\xd8", "\x00\x00",
+-  /* 0xeae4 */ "\x00\x00", "\x00\x00", "\x9a\xdc", "\x00\x00", "\x9a\xde",
+-  /* 0xeaea */ "\x9a\xdf", "\x00\x00", "\x9a\xe1", "\x00\x00", "\x9a\xe3",
+-  /* 0xeaee */ "\x00\x00", "\x9a\xe5", "\x9a\xe6", "\x00\x00", "\x00\x00",
+-  /* 0xeaf3 */ "\x00\x00", "\x9a\xea", "\x9a\xeb", "\x00\x00", "\x9a\xed",
+-  /* 0xeaf9 */ "\x9a\xee", "\x9a\xef", "\x9a\xf0", "\x00\x00", "\x00\x00",
+-  /* 0xeafd */ "\x00\x00", "\x9a\xf4", "\x9a\xf5", "\x00\x00", "\x9a\xf7",
+-  /* 0xeb03 */ "\x9a\xf8", "\x9a\xf9", "\x9a\xfa", "\x00\x00", "\x00\x00",
+-  /* 0xeb08 */ "\x9a\xfd", "\x9a\xfe", "\x9b\x40", "\x9b\x41", "\x9b\x42",
+-  /* 0xeb0d */ "\x9b\x43", "\x9b\x44", "\x9b\x45", "\x00\x00", "\x00\x00",
+-  /* 0xeb12 */ "\x9b\x48", "\x00\x00", "\x00\x00", "\x9b\x4b", "\x00\x00",
+-  /* 0xeb16 */ "\x00\x00", "\x00\x00", "\x9b\x4f", "\x9b\x50", "\x9b\x51",
+-  /* 0xeb1c */ "\x9b\x52", "\x9b\x53", "\x00\x00", "\x9b\x55", "\x9b\x56",
+-  /* 0xeb20 */ "\x00\x00", "\x00\x00", "\x9b\x59", "\x00\x00", "\x9b\x5b",
+-  /* 0xeb25 */ "\x00\x00", "\x9b\x5d", "\x00\x00", "\x00\x00", "\x9b\x60",
+-  /* 0xeb2a */ "\x00\x00", "\x9b\x62", "\x9b\x63", "\x9b\x64", "\x00\x00",
+-  /* 0xeb30 */ "\x9b\x66", "\x9b\x67", "\x9b\x68", "\x9b\x69", "\x9b\x6a",
+-  /* 0xeb35 */ "\x9b\x6b", "\x9b\x6c", "\x9b\x6d", "\x9b\x6e", "\x9b\x6f",
+-  /* 0xeb39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x73", "\x9b\x74",
+-  /* 0xeb3f */ "\x9b\x75", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x79",
+-  /* 0xeb44 */ "\x9b\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeb48 */ "\x00\x00", "\x9b\xa2", "\x00\x00", "\x00\x00", "\x9b\xa5",
+-  /* 0xeb4e */ "\x9b\xa6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeb53 */ "\x9b\xab", "\x00\x00", "\x9b\xad", "\x9b\xae", "\x00\x00",
+-  /* 0xeb58 */ "\x9b\xb0", "\x00\x00", "\x9b\xb2", "\x9b\xb3", "\x00\x00",
+-  /* 0xeb5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeb62 */ "\x9b\xba", "\x9b\xbb", "\x00\x00", "\x9b\xbd", "\x00\x00",
+-  /* 0xeb67 */ "\x9b\xbf", "\x9b\xc0", "\x9b\xc1", "\x00\x00", "\x00\x00",
+-  /* 0xeb6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xc7", "\x9b\xc8",
+-  /* 0xeb71 */ "\x9b\xc9", "\x00\x00", "\x9b\xcb", "\x00\x00", "\x00\x00",
+-  /* 0xeb76 */ "\x9b\xce", "\x9b\xcf", "\x00\x00", "\x00\x00", "\x9b\xd2",
+-  /* 0xeb7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xd6", "\x9b\xd7",
+-  /* 0xeb80 */ "\x9b\xd8", "\x00\x00", "\x00\x00", "\x9b\xdb", "\x00\x00",
+-  /* 0xeb84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xe0", "\x00\x00",
+-  /* 0xeb8a */ "\x9b\xe2", "\x00\x00", "\x9b\xe4", "\x00\x00", "\x00\x00",
+-  /* 0xeb8e */ "\x00\x00", "\x9b\xe8", "\x00\x00", "\x00\x00", "\x9b\xeb",
+-  /* 0xeb93 */ "\x00\x00", "\x9b\xed", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeb99 */ "\x9b\xf1", "\x00\x00", "\x9b\xf3", "\x00\x00", "\x00\x00",
+-  /* 0xeb9d */ "\x00\x00", "\x9b\xf7", "\x00\x00", "\x00\x00", "\x9b\xfa",
+-  /* 0xeba2 */ "\x00\x00", "\x00\x00", "\x9b\xfd", "\x9b\xfe", "\x00\x00",
+-  /* 0xeba7 */ "\x00\x00", "\x00\x00", "\x9c\x43", "\x9c\x44", "\x00\x00",
+-  /* 0xebac */ "\x00\x00", "\x9c\x47", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xebb2 */ "\x9c\x4b", "\x9c\x4c", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xebb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xebbb */ "\x00\x00", "\x9c\x56", "\x00\x00", "\x9c\x58", "\x00\x00",
+-  /* 0xebc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x5e",
+-  /* 0xebc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x63",
+-  /* 0xebca */ "\x00\x00", "\x9c\x65", "\x00\x00", "\x9c\x67", "\x00\x00",
+-  /* 0xebd0 */ "\x9c\x69", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xebd5 */ "\x9c\x6e", "\x00\x00", "\x9c\x70", "\x9c\x71", "\x00\x00",
+-  /* 0xebda */ "\x9c\x73", "\x9c\x74", "\x00\x00", "\x9c\x76", "\x00\x00",
+-  /* 0xebdf */ "\x9c\x78", "\x00\x00", "\x9c\x7a", "\x00\x00", "\x00\x00",
+-  /* 0xebe4 */ "\x9c\x7d", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xa3",
+-  /* 0xebe9 */ "\x9c\xa4", "\x00\x00", "\x9c\xa6", "\x9c\xa7", "\x00\x00",
+-  /* 0xebed */ "\x00\x00", "\x9c\xaa", "\x00\x00", "\x00\x00", "\x9c\xad",
+-  /* 0xebf2 */ "\x00\x00", "\x00\x00", "\x9c\xb0", "\x00\x00", "\x00\x00",
+-  /* 0xebf7 */ "\x00\x00", "\x9c\xb4", "\x9c\xb5", "\x00\x00", "\x00\x00",
+-  /* 0xebfc */ "\x00\x00", "\x9c\xb9", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec06 */ "\x00\x00", "\x9c\xc3", "\x9c\xc4", "\x00\x00", "\x00\x00",
+-  /* 0xec0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xca", "\x00\x00",
+-  /* 0xec10 */ "\x00\x00", "\x00\x00", "\x9c\xce", "\x00\x00", "\x00\x00",
+-  /* 0xec15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xd4", "\x9c\xd5",
+-  /* 0xec1b */ "\x9c\xd6", "\x9c\xd7", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xdf",
+-  /* 0xec24 */ "\x00\x00", "\x9c\xe1", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec29 */ "\x00\x00", "\x9c\xe6", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec2f */ "\x9c\xea", "\x00\x00", "\x00\x00", "\x9c\xed", "\x00\x00",
+-  /* 0xec33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec3d */ "\x00\x00", "\x9c\xfa", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec43 */ "\x9c\xfe", "\x9d\x40", "\x9d\x41", "\x9d\x42", "\x9d\x43",
+-  /* 0xec48 */ "\x9d\x44", "\x9d\x45", "\x00\x00", "\x9d\x47", "\x00\x00",
+-  /* 0xec4c */ "\x00\x00", "\x00\x00", "\x9d\x4b", "\x00\x00", "\x00\x00",
+-  /* 0xec52 */ "\x9d\x4e", "\x00\x00", "\x9d\x50", "\x00\x00", "\x9d\x52",
+-  /* 0xec57 */ "\x9d\x53", "\x9d\x54", "\x00\x00", "\x9d\x56", "\x00\x00",
+-  /* 0xec5c */ "\x9d\x58", "\x9d\x59", "\x00\x00", "\x00\x00", "\x9d\x5c",
+-  /* 0xec60 */ "\x00\x00", "\x9d\x5e", "\x9d\x5f", "\x00\x00", "\x00\x00",
+-  /* 0xec65 */ "\x00\x00", "\x9d\x63", "\x00\x00", "\x9d\x65", "\x9d\x66",
+-  /* 0xec6b */ "\x9d\x67", "\x9d\x68", "\x9d\x69", "\x00\x00", "\x9d\x6b",
+-  /* 0xec70 */ "\x9d\x6c", "\x00\x00", "\x9d\x6e", "\x9d\x6f", "\x00\x00",
+-  /* 0xec75 */ "\x9d\x71", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x75",
+-  /* 0xec79 */ "\x00\x00", "\x9d\x77", "\x00\x00", "\x00\x00", "\x9d\x7a",
+-  /* 0xec7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec84 */ "\x9d\xa2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec8e */ "\x9d\xac", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xb0",
+-  /* 0xec92 */ "\x00\x00", "\x00\x00", "\x9d\xb3", "\x00\x00", "\x00\x00",
+-  /* 0xec97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xec9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeca1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeca6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xcd", "\x00\x00",
+-  /* 0xecb0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecb6 */ "\x9d\xd4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecbf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecc4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecc9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeccf */ "\x9d\xed", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xfa", "\x00\x00",
+-  /* 0xecdd */ "\x00\x00", "\x00\x00", "\x9d\xfe", "\x9e\x40", "\x00\x00",
+-  /* 0xece2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xece7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x4f", "\x00\x00",
+-  /* 0xecf2 */ "\x9e\x51", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecf6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xecfc */ "\x9e\x5b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed0f */ "\x00\x00", "\x9e\x70", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x7c", "\x00\x00",
+-  /* 0xed1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed24 */ "\x9e\xa5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed29 */ "\x9e\xaa", "\x00\x00", "\x00\x00", "\x9e\xad", "\x00\x00",
+-  /* 0xed2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xbc", "\x00\x00",
+-  /* 0xed3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xc2",
+-  /* 0xed41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xd0", "\x00\x00",
+-  /* 0xed50 */ "\x00\x00", "\x9e\xd3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xe0",
+-  /* 0xed5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed69 */ "\x00\x00", "\x9e\xec", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xf9",
+-  /* 0xed78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed82 */ "\x00\x00", "\x9f\x46", "\x9f\x47", "\x00\x00", "\x00\x00",
+-  /* 0xed88 */ "\x9f\x4a", "\x00\x00", "\x00\x00", "\x9f\x4d", "\x00\x00",
+-  /* 0xed8c */ "\x00\x00", "\x9f\x50", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xed9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeda0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeda5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedaa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedaf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedb4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedcd */ "\x00\x00", "\x9f\xb3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedd7 */ "\x00\x00", "\x00\x00", "\x9f\xbe", "\x00\x00", "\x00\x00",
+-  /* 0xeddc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xede1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xede6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedeb */ "\x00\x00", "\x9f\xd1", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedf0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedf5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedfa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xedff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xec", "\x00\x00",
+-  /* 0xee09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xa4", "\x00\x00",
+-  /* 0xee5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee68 */ "\x00\x00", "\xa0\xb1", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xee9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeea5 */ "\xa0\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeea9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeeae */ "\x00\x00", "\xa0\xf7", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xeeb4 */ "\xa0\xfb", "\x00\x00", "\x00\x00", "\xa0\xfe",
++  /* 0x9fa4 */ "\xf9\xa1", "\x9f\xdd", "\x8c\x43", "\x8c\x6d", "\x8c\x74",
++  /* 0x9fa9 */ "\x8c\xb7", "\x8c\xb9", "\x8c\xbb", "\x8c\xc0", "\x8c\xd7",
++  /* 0x9fae */ "\x8c\xd8", "\x8c\xda", "\xc8\xa1", "\xc8\xa3", "\x8c\xed",
++  /* 0x9fb3 */ "\x8d\x48", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x9fb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x9fbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x9fc1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x9fc7 */ "\x87\xc2", "\x87\xd2", "\x87\xd6", "\x87\xda", "\x87\xdf",
+ 
+-  /* 0xf303 */ "\x88\x40", "\x88\x41", "\x88\x42", "\x88\x43", "\x88\x44",
+-  /* 0xf308 */ "\x88\x45", "\x88\x46", "\x88\x47", "\x88\x48", "\x88\x49",
+-  /* 0xf30d */ "\x88\x4a", "\x88\x4b", "\x88\x4c", "\x88\x4d", "\x88\x4e",
+-  /* 0xf312 */ "\x88\x4f", "\x88\x50", "\x88\x51", "\x88\x52", "\x88\x53",
+-  /* 0xf317 */ "\x88\x54", "\x88\x55", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf31b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf320 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x88\x62",
+-  /* 0xf325 */ "\x00\x00", "\x88\x64", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf32a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf32f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf334 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf339 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf33e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf344 */ "\x88\xa3", "\x00\x00", "\x88\xa5", "\x00\x00", "\x00\x00",
+-  /* 0xf348 */ "\x00\x00", "\x88\xa9", "\x88\xaa", "\x00\x00", "\x00\x00",
+-  /* 0xf34d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf352 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf357 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf35c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf361 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf366 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf36b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf370 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf375 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf37a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf37f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf384 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf389 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf38e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf393 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf398 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf39d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x89\x41", "\x00\x00",
+-  /* 0xf3a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3ed */ "\x00\x00", "\x00\x00", "\x89\xb2", "\x00\x00", "\x00\x00",
+-  /* 0xf3f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf3f7 */ "\x00\x00", "\x89\xbb", "\x00\x00", "\x00\x00", "\x89\xbe",
+-  /* 0xf3fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf401 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf406 */ "\x00\x00", "\x89\xca", "\x00\x00", "\x00\x00", "\x89\xcd",
+-  /* 0xf40b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf410 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf415 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf41a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf41f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf424 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf429 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf42e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf433 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf438 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x40",
+-  /* 0xf43d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x44", "\x8a\x45",
+-  /* 0xf442 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf447 */ "\x00\x00", "\x8a\x4c", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf44d */ "\x8a\x50", "\x00\x00", "\x00\x00", "\x8a\x53", "\x00\x00",
+-  /* 0xf451 */ "\x00\x00", "\x00\x00", "\x8a\x57", "\x00\x00", "\x00\x00",
+-  /* 0xf456 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x5d", "\x8a\x5e",
+-  /* 0xf45c */ "\x8a\x5f", "\x8a\x60", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf460 */ "\x00\x00", "\x8a\x65", "\x00\x00", "\x00\x00", "\x8a\x68",
+-  /* 0xf466 */ "\x8a\x69", "\x00\x00", "\x00\x00", "\x8a\x6c", "\x00\x00",
+-  /* 0xf46a */ "\x00\x00", "\x00\x00", "\x8a\x70", "\x8a\x71", "\x8a\x72",
+-  /* 0xf46f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf474 */ "\x00\x00", "\x00\x00", "\x8a\x7a", "\x8a\x7b", "\x00\x00",
+-  /* 0xf479 */ "\x00\x00", "\x00\x00", "\x8a\xa1", "\x8a\xa2", "\x8a\xa3",
+-  /* 0xf47e */ "\x00\x00", "\x8a\xa5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf483 */ "\x00\x00", "\x8a\xaa", "\x00\x00", "\x00\x00", "\x8a\xad",
+-  /* 0xf488 */ "\x00\x00", "\x00\x00", "\x8a\xb0", "\x00\x00", "\x8a\xb2",
+-  /* 0xf48d */ "\x00\x00", "\x8a\xb4", "\x8a\xb5", "\x8a\xb6", "\x00\x00",
+-  /* 0xf492 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xbc",
+-  /* 0xf498 */ "\x8a\xbd", "\x00\x00", "\x00\x00", "\x8a\xc0", "\x00\x00",
+-  /* 0xf49c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4a1 */ "\x00\x00", "\x00\x00", "\x8a\xc9", "\x00\x00", "\x00\x00",
+-  /* 0xf4a7 */ "\x8a\xcc", "\x00\x00", "\x00\x00", "\x8a\xcf", "\x00\x00",
+-  /* 0xf4ab */ "\x00\x00", "\x8a\xd2", "\x00\x00", "\x8a\xd4", "\x00\x00",
+-  /* 0xf4b0 */ "\x00\x00", "\x00\x00", "\x8a\xd8", "\x8a\xd9", "\x00\x00",
+-  /* 0xf4b5 */ "\x00\x00", "\x8a\xdc", "\x00\x00", "\x00\x00", "\x8a\xdf",
+-  /* 0xf4bb */ "\x8a\xe0", "\x8a\xe1", "\x8a\xe2", "\x00\x00", "\x00\x00",
+-  /* 0xf4c0 */ "\x8a\xe5", "\x8a\xe6", "\x00\x00", "\x8a\xe8", "\x00\x00",
+-  /* 0xf4c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xed", "\x00\x00",
+-  /* 0xf4c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xf3",
+-  /* 0xf4cf */ "\x8a\xf4", "\x00\x00", "\x00\x00", "\x8a\xf7", "\x00\x00",
+-  /* 0xf4d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x48",
+-  /* 0xf4e2 */ "\x00\x00", "\x00\x00", "\x8b\x4b", "\x00\x00", "\x8b\x4d",
+-  /* 0xf4e8 */ "\x8b\x4e", "\x8b\x4f", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4f1 */ "\x00\x00", "\x8b\x59", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf4fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf500 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf505 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf50a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf50f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf514 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf519 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf51e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xaa", "\x8b\xab",
+-  /* 0xf523 */ "\x00\x00", "\x8b\xad", "\x8b\xae", "\x00\x00", "\x00\x00",
+-  /* 0xf528 */ "\x00\x00", "\x8b\xb2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf52d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf532 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf537 */ "\x00\x00", "\x00\x00", "\x8b\xc2", "\x8b\xc3", "\x00\x00",
+-  /* 0xf53d */ "\x8b\xc5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf541 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf546 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf54b */ "\x00\x00", "\x00\x00", "\x8b\xd6", "\x00\x00", "\x00\x00",
+-  /* 0xf550 */ "\x00\x00", "\x00\x00", "\x8b\xdb", "\x00\x00", "\x00\x00",
+-  /* 0xf556 */ "\x8b\xde", "\x00\x00", "\x00\x00", "\x8b\xe1", "\x8b\xe2",
+-  /* 0xf55a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xe6", "\x00\x00",
+-  /* 0xf55f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf565 */ "\x8b\xed", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf569 */ "\x00\x00", "\x8b\xf3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0xf56e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xfa",
+-
+-  /* 0xf6b0 */ "\x8d\xfe",
+-
+-  /* 0xf7e5 */ "\xc8\x79", "\xc8\x7a", "\x00\x00", "\xc8\x7c", "\x00\x00",
+-  /* 0xf7ea */ "\xc8\x7e", "\xc8\xa1", "\x00\x00", "\xc8\xa3", "\xc8\xa4",
++  /* 0xf907 */ "\x8b\xf8",
+ 
+   /* 0xfa0c */ "\xc9\x4a", "\xdd\xfc",
+ 
+@@ -11534,258 +10801,304 @@ static const char from_ucs4[][2] =
+   /* 0xffe6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0xffeb */ "\x00\x00", "\xf9\xfe",
+ 
+-  /* 0x2003e */ "\x93\x75", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20042 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x76", "\x00\x00",
+-  /* 0x20047 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2004c */ "\x00\x00", "\x95\x48", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20051 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20056 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2005b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20060 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20065 */ "\x00\x00", "\x00\x00", "\x8e\xc6",
+-
++  /* 0x20021 */ "\x9c\x71", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20025 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2002a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2002f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20034 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20039 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x75",
++  /* 0x2003e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20043 */ "\x00\x00", "\x00\x00", "\x93\x76", "\x00\x00", "\x00\x00",
++  /* 0x20048 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2004e */ "\x95\x48", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20052 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20057 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2005c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20061 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20066 */ "\x00\x00", "\x8e\xc6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2006b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20070 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20075 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2007a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2007f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20084 */ "\x00\x00", "\x8b\xc5", "\x8b\xfa", "\x00\x00", "\x00\x00",
++  /* 0x2008a */ "\xc8\x7c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2008e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20094 */ "\x9a\xb4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20098 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2009d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x88\x4e",
++  /* 0x200cb */ "\x88\x4b", "\xc8\x7a", "\x88\x48", "\x00\x00", "\x00\x00",
++  /* 0x200cf */ "\x00\x00", "\x88\x47", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x200e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x200ee */ "\xa0\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x200f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x200f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x200fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20101 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20106 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2010b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2010c */ "\x88\x45", "\x00\x00", "\x88\x53", "\x00\x00", "\x00\x00",
+   /* 0x20110 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20115 */ "\x00\x00", "\x00\x00", "\xfc\xad",
+ 
+-  /* 0x201ab */ "\x92\x72", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201be */ "\x00\x00", "\x00\x00", "\xfc\x47", "\x00\x00", "\x00\x00",
+-  /* 0x201c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201d2 */ "\x00\x00", "\x94\xdf", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x201ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20204 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20209 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2020e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20214 */ "\x98\xa4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20218 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2021d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20222 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20227 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2022c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20231 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20236 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2023b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20240 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20245 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2024a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2024f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20254 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20259 */ "\x00\x00", "\x94\xe7", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2025e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20263 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20268 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2026d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20272 */ "\x00\x00", "\x90\xcb", "\x92\x7b", "\x00\x00", "\x00\x00",
+-  /* 0x20277 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2027c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20281 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20286 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2028b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20290 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20295 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xd8", "\x00\x00",
+-  /* 0x2029a */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x5f", "\x00\x00",
+-  /* 0x202a0 */ "\xfa\x54", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202bd */ "\x00\x00", "\x96\xda", "\x92\x79", "\x00\x00", "\x00\x00",
+-  /* 0x202c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x74",
+-  /* 0x202e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x202fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20303 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20308 */ "\x00\x00", "\x92\x75", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2030d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20312 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20317 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2031c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20321 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\xfb", "\x00\x00",
+-  /* 0x20326 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2032b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20330 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20335 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2033a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2033f */ "\x00\x00", "\x8a\x49", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20345 */ "\x92\xdf", "\x9b\x7c", "\xfa\x63", "\x00\x00", "\x00\x00",
+-  /* 0x20349 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2034e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20353 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20358 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2035d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20362 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20367 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2036c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20371 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20376 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2037b */ "\x00\x00", "\x00\x00", "\xfa\x60", "\x92\x6d", "\xfa\x62",
+-  /* 0x20380 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20385 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2038a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2038f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20394 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20399 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2039e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x6b", "\x00\x00",
+-  /* 0x203a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203b2 */ "\x00\x00", "\x00\x00", "\xfd\x6a", "\x00\x00", "\x00\x00",
+-  /* 0x203b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203c6 */ "\x00\x00", "\x00\x00", "\xfd\x54", "\x00\x00", "\x92\x73",
+-  /* 0x203cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203f3 */ "\x00\x00", "\x97\xd8", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x203f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xbb", "\x00\x00",
+-  /* 0x203fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20402 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20407 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2040c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20411 */ "\x00\x00", "\x93\x42", "\x92\x76", "\x00\x00", "\x00\x00",
+-  /* 0x20416 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2041b */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x65", "\x00\x00",
+-  /* 0x20420 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20425 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2042a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2042f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20434 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20439 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2043e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20443 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20448 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2044d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20452 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20457 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2045c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20461 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x6c", "\x00\x00",
+-  /* 0x20466 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2046b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20470 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20475 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2047a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2047f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20484 */ "\x00\x00", "\x00\x00", "\xfa\x6e", "\x00\x00", "\x00\x00",
+-  /* 0x20489 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2048e */ "\x00\x00", "\x00\x00", "\x92\xc0", "\x92\xbf", "\x00\x00",
+-  /* 0x20493 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20498 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2049d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204a3 */ "\x92\xbe", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x204f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xb3",
+-  /* 0x204fc */ "\x00\x00", "\x97\x75", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20501 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20506 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2050b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20510 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20515 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2051a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2051f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20524 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20529 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2052e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20533 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20538 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2053d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20542 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x40",
+-  /* 0x20547 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2054c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20551 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20556 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2055b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20560 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20565 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2056a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2056f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20574 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20579 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2057e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20583 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20588 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2058e */ "\xfa\x76", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20592 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20597 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2059c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xd0", "\x00\x00",
+-  /* 0x205a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205b0 */ "\x00\x00", "\x00\x00", "\xfa\x7b", "\x00\x00", "\x00\x00",
+-  /* 0x205b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205ce */ "\x00\x00", "\x89\xcc", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205dd */ "\x00\x00", "\xfa\x42", "\x92\xbc", "\x00\x00", "\x00\x00",
+-  /* 0x205e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x5c", "\x00\x00",
+-  /* 0x205ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x205fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20600 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20605 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2060a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2060f */ "\x00\x00", "\x9b\xb5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20614 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xa7",
+-  /* 0x2061a */ "\x97\xa4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2061e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20623 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20628 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2062d */ "\x00\x00", "\x00\x00", "\x90\xfd",
++  /* 0x201a4 */ "\x8c\xf5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201a9 */ "\x8a\xad", "\x00\x00", "\x92\x72", "\x00\x00", "\x00\x00",
++  /* 0x201ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x47",
++  /* 0x201c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xdf", "\x00\x00",
++  /* 0x201d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xd1", "\x00\x00",
++  /* 0x201f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x201fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20202 */ "\x00\x00", "\xfb\xcb", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20207 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x7d",
++  /* 0x2020c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20211 */ "\x00\x00", "\x00\x00", "\x98\xa4", "\x00\x00", "\x00\x00",
++  /* 0x20216 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2021b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20220 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20225 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2022a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2022f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20234 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xf9",
++  /* 0x20239 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2023e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20243 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20248 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2024d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20252 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20257 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xe7", "\x00\x00",
++  /* 0x2025c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20261 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20266 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2026b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20270 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xcb", "\x92\x7b",
++  /* 0x20275 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2027a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2027f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20284 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20289 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2028e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20293 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20299 */ "\x94\xd8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2029e */ "\xfc\x5f", "\x00\x00", "\xfa\x54", "\x00\x00", "\x00\x00",
++  /* 0x202a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202b7 */ "\x9a\xb5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xda", "\x92\x79",
++  /* 0x202c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202e3 */ "\x00\x00", "\xfa\x74", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x202fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20301 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20306 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x75", "\x00\x00",
++  /* 0x2030b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20310 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20315 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2031a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2031f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20325 */ "\x8d\xfb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20329 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2032e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20333 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20338 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2033d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x49", "\x00\x00",
++  /* 0x20342 */ "\x00\x00", "\x00\x00", "\x92\xdf", "\x9b\x7c", "\xfa\x63",
++  /* 0x20347 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2034c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20351 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20356 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2035b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20360 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20365 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2036a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2036f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20374 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20379 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x60",
++  /* 0x2037f */ "\x92\x6d", "\xfa\x62", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20383 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20388 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2038d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20392 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20397 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2039c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xb6", "\x00\x00",
++  /* 0x203a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203a7 */ "\x97\x6b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x6a",
++  /* 0x203b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x54",
++  /* 0x203c9 */ "\x00\x00", "\x92\x73", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xd8", "\x00\x00",
++  /* 0x203f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x203fc */ "\x9f\xbb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20400 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20405 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2040a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2040f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x42", "\x92\x76",
++  /* 0x20414 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20419 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2041f */ "\xfa\x65", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20423 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20428 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2042d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20432 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20437 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2043c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20441 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20446 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2044b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20450 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20455 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2045a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2045f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20465 */ "\x92\x6c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20469 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2046e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20473 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20478 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2047d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20482 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x6e",
++  /* 0x20487 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2048c */ "\x00\x00", "\x9e\xe0", "\x00\x00", "\x00\x00", "\x92\xc0",
++  /* 0x20492 */ "\x92\xbf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20496 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2049b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204a0 */ "\x00\x00", "\x00\x00", "\x92\xbe", "\x00\x00", "\x00\x00",
++  /* 0x204a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xba",
++  /* 0x204d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x204fa */ "\x00\x00", "\x8a\xb3", "\x00\x00", "\x97\x75", "\x00\x00",
++  /* 0x204ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20504 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20509 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2050e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20513 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20518 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2051d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20522 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20527 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2052c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20531 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20536 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2053b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20540 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20545 */ "\x00\x00", "\xfa\x40", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2054a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2054f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20554 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20559 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2055e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20563 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20568 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2056d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20572 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20577 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2057c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20581 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20586 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2058b */ "\x00\x00", "\x00\x00", "\xfa\x76", "\x00\x00", "\x00\x00",
++  /* 0x20590 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20595 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2059a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2059f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205a5 */ "\xfb\xd0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x7b",
++  /* 0x205b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205c3 */ "\xfe\x6d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205c7 */ "\x00\x00", "\x00\x00", "\x9b\xb3", "\x00\x00", "\x00\x00",
++  /* 0x205cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x89\xcc", "\x00\x00",
++  /* 0x205d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xbe", "\x00\x00",
++  /* 0x205d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205db */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x42", "\x92\xbc",
++  /* 0x205e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205eb */ "\x94\x5c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x205fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20603 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20608 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2060d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xb5", "\x00\x00",
++  /* 0x20612 */ "\x00\x00", "\x00\x00", "\x9a\xbf", "\x00\x00", "\x00\x00",
++  /* 0x20617 */ "\x00\x00", "\x98\xa7", "\x97\xa4", "\x00\x00", "\x00\x00",
++  /* 0x2061c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20621 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20626 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2062b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xfd",
++  /* 0x20630 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20635 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2063a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2063f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20644 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20649 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2064e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20653 */ "\x00\x00", "\x00\x00", "\xfc\x7b", "\x00\x00", "\x00\x00",
++  /* 0x20658 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2065d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20662 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20667 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2066c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20671 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xc0",
+ 
+   /* 0x2070e */ "\x92\xc3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20712 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11794,7 +11107,7 @@ static const char from_ucs4[][2] =
+   /* 0x20721 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20726 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2072b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20730 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20731 */ "\x8a\xaa", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20735 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2073a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2073f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11824,29 +11137,89 @@ static const char from_ucs4[][2] =
+   /* 0x20862 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20867 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2086c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20871 */ "\x00\x00", "\x92\xc6",
+-
+-  /* 0x20916 */ "\x95\x46", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2091a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2091f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20924 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20929 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2092e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20933 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20938 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2093d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20942 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20947 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2094c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20951 */ "\x00\x00", "\x00\x00", "\xfa\xc2", "\x00\x00", "\x00\x00",
+-  /* 0x20956 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2095b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20960 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20965 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2096a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2096f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20974 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xc3",
+-
++  /* 0x20871 */ "\x00\x00", "\x92\xc6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20876 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2087b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20880 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20885 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2088a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2088f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20894 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20899 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2089e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xa6",
++  /* 0x208d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x208fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20902 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20907 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2090c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20911 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x46",
++  /* 0x20916 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2091b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20920 */ "\x00\x00", "\x00\x00", "\xfd\x63", "\x00\x00", "\x00\x00",
++  /* 0x20925 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2092a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2092f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20934 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20939 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2093e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20943 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20948 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2094d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20952 */ "\x00\x00", "\xfa\xc2", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20957 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2095c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20961 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20966 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2096b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20970 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20975 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xc3", "\x00\x00",
++  /* 0x2097a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2097f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20984 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20989 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2098e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20993 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20998 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2099d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x89\xb2", "\x00\x00",
++  /* 0x209e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x209fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20a01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20a06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20a0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a11 */ "\x9c\x66", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11865,13 +11238,13 @@ static const char from_ucs4[][2] =
+   /* 0x20a5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20a6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20a6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x62",
+   /* 0x20a6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20a88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20a88 */ "\x00\x00", "\x87\xa8", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20a97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11879,34 +11252,52 @@ static const char from_ucs4[][2] =
+   /* 0x20aa1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20aa6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20aab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20ab0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xc1",
++  /* 0x20ab0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xc1", "\x00\x00",
++  /* 0x20ab5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20aba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20abf */ "\x00\x00", "\x00\x00", "\x9a\xc4", "\x00\x00", "\x00\x00",
++  /* 0x20ac4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ac9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xc5", "\x00\x00",
++  /* 0x20ace */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ad3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ad8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20add */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ae2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ae7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20aec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20af1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20af6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20afb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20b00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20b05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20b0a */ "\x00\x00", "\x00\x00", "\x8e\xef",
+ 
+   /* 0x20b8f */ "\xfa\xe9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20b93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20b98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20b9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20b9d */ "\x00\x00", "\x8d\x40", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ba2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20ba8 */ "\x92\x62", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ba8 */ "\x92\x62", "\x8a\xf7", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20bbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20bbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xc6", "\x00\x00",
+   /* 0x20bc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bc6 */ "\x92\xe1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20bca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20bcb */ "\x9a\xc9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bcf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bde */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\xc6", "\x00\x00",
+   /* 0x20be3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20be8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20be8 */ "\x00\x00", "\x00\x00", "\x97\xa5", "\x00\x00", "\x00\x00",
+   /* 0x20bed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20bf2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20bf7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20bf7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xcb", "\x00\x00",
+   /* 0x20bfc */ "\x00\x00", "\x00\x00", "\xfa\x72", "\x00\x00", "\x00\x00",
+   /* 0x20c01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x5e",
++  /* 0x20c0b */ "\x00\x00", "\x94\xe0", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11914,8 +11305,8 @@ static const char from_ucs4[][2] =
+   /* 0x20c24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c34 */ "\x8a\xe5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c38 */ "\x00\x00", "\xfe\x5c", "\x9a\xcc", "\x00\x00", "\x00\x00",
+   /* 0x20c3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xf9", "\x8a\x43",
+   /* 0x20c43 */ "\x8a\xa6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11923,48 +11314,48 @@ static const char from_ucs4[][2] =
+   /* 0x20c51 */ "\x00\x00", "\x9a\xcd", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xce",
+   /* 0x20c65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c74 */ "\x00\x00", "\x00\x00", "\xfa\xee", "\x9b\xcc", "\x00\x00",
+-  /* 0x20c79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c79 */ "\x00\x00", "\x00\x00", "\x9a\xcf", "\x00\x00", "\x00\x00",
+   /* 0x20c7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20c83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xd1",
+   /* 0x20c8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20c92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20c92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xfa", "\x00\x00",
+   /* 0x20c97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x7c",
+   /* 0x20c9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ca1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ca6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20cab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20cb0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20cb5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20cb0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xd3",
++  /* 0x20cb5 */ "\x00\x00", "\x00\x00", "\x97\xa6", "\x00\x00", "\x00\x00",
+   /* 0x20cba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20cbf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20cc4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20cc9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ccf */ "\x99\x5f", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xf6",
+   /* 0x20cd4 */ "\x9f\xc5", "\x8a\x59", "\x8b\x6b", "\x00\x00", "\x00\x00",
+-  /* 0x20cd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20cd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xd4",
+   /* 0x20cdd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ce2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ce7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20cec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ced */ "\x9a\xd5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20cf1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20cf6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20cfb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20cfb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xa2", "\x00\x00",
+   /* 0x20d00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d15 */ "\x8a\x44", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\x4a",
+   /* 0x20d28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xa1", "\xfd\xa4",
+   /* 0x20d32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -11977,24 +11368,24 @@ static const char from_ucs4[][2] =
+   /* 0x20d5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d6f */ "\x9a\xd6", "\x00\x00", "\x9f\x4d", "\x00\x00", "\x00\x00",
++  /* 0x20d74 */ "\xfa\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x57", "\x00\x00",
+   /* 0x20d7e */ "\x8b\x43", "\x8b\x44", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20d8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xb6",
+   /* 0x20d96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20d9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20d9c */ "\x8a\xc0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20da0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20da5 */ "\x00\x00", "\x9e\x54", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20daa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20daf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20daf */ "\x00\x00", "\x00\x00", "\x9a\xd7", "\x00\x00", "\x00\x00",
+   /* 0x20db4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20db9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20dbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20dc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20dc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xd8",
+   /* 0x20dc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20dcd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20dd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12006,7 +11397,7 @@ static const char from_ucs4[][2] =
+   /* 0x20df0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20df5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20dfa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20dff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20dff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xdc",
+   /* 0x20e04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xca",
+   /* 0x20e0a */ "\x9e\xa8", "\x00\x00", "\x00\x00", "\x92\x63", "\x9a\xdd",
+   /* 0x20e0f */ "\x8b\x65", "\x8b\x6f", "\x8b\x7e", "\x00\x00", "\x00\x00",
+@@ -12021,7 +11412,7 @@ static const char from_ucs4[][2] =
+   /* 0x20e3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20e4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20e4a */ "\x00\x00", "\x8a\xf4", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12029,16 +11420,16 @@ static const char from_ucs4[][2] =
+   /* 0x20e63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xbe",
+   /* 0x20e6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20e72 */ "\x00\x00", "\x00\x00", "\xfc\xde", "\x9d\xfd", "\x8b\x66",
++  /* 0x20e73 */ "\x9a\xe1", "\x00\x00", "\xfc\xde", "\x9d\xfd", "\x8b\x66",
+   /* 0x20e78 */ "\x8b\x70", "\x8b\x75", "\x8a\xe4", "\x8b\xa4", "\x00\x00",
+   /* 0x20e7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20e8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20e8c */ "\x8a\xed", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20e90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20e95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20e9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20e9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20e96 */ "\x8a\x5d", "\x00\x00", "\x8b\x48", "\x00\x00", "\x00\x00",
++  /* 0x20e9a */ "\x00\x00", "\x00\x00", "\x9d\xed", "\x00\x00", "\x00\x00",
++  /* 0x20e9f */ "\x00\x00", "\x00\x00", "\x9e\x40", "\x00\x00", "\x00\x00",
+   /* 0x20ea4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20eaa */ "\x8a\xef", "\x8a\xf6", "\x9e\x76", "\x00\x00", "\x00\x00",
+   /* 0x20eae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12049,8 +11440,8 @@ static const char from_ucs4[][2] =
+   /* 0x20ec7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ecc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ed1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20ed6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20edb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20ed7 */ "\x9a\xde", "\x8d\xfe", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20edb */ "\x00\x00", "\xfa\xfc", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ee0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20ee5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20eea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12063,8 +11454,8 @@ static const char from_ucs4[][2] =
+   /* 0x20f0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20f1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20f21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20f1d */ "\x97\x4b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20f21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\x53",
+   /* 0x20f26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f2b */ "\x00\x00", "\x9a\xe0", "\x8b\x4a", "\x00\x00", "\x8a\xf1",
+   /* 0x20f31 */ "\x8a\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12072,12 +11463,12 @@ static const char from_ucs4[][2] =
+   /* 0x20f3b */ "\xa0\xab", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20f49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20f49 */ "\x00\x00", "\x00\x00", "\x8a\xb5", "\x00\x00", "\x00\x00",
+   /* 0x20f4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20f62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20f62 */ "\x00\x00", "\x8a\x5f", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12086,7 +11477,7 @@ static const char from_ucs4[][2] =
+   /* 0x20f80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f8a */ "\x00\x00", "\x00\x00", "\x8a\xee", "\x00\x00", "\x00\x00",
+-  /* 0x20f8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20f90 */ "\x9a\xdf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20f9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12094,14 +11485,14 @@ static const char from_ucs4[][2] =
+   /* 0x20fa8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xfe",
+   /* 0x20fad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fb2 */ "\x00\x00", "\x8a\x58", "\x8b\xa3", "\x8b\xa7", "\x00\x00",
+-  /* 0x20fb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20fb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xe3",
+   /* 0x20fbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fc1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fc6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fcb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fd0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fd5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x20fda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x20fda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x61",
+   /* 0x20fdf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fe4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x20fea */ "\x9d\xd7", "\x9e\x7d", "\x9e\xa7", "\x9e\xab", "\x00\x00",
+@@ -12112,7 +11503,7 @@ static const char from_ucs4[][2] =
+   /* 0x21002 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21007 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2100c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21011 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21011 */ "\x00\x00", "\x00\x00", "\x90\x42", "\x00\x00", "\x00\x00",
+   /* 0x21016 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2101b */ "\x00\x00", "\x8b\x79", "\x8b\x7a", "\x00\x00", "\x00\x00",
+   /* 0x21020 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12124,9 +11515,9 @@ static const char from_ucs4[][2] =
+   /* 0x2103e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21043 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21048 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2104d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2104d */ "\x00\x00", "\x9a\xe6", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21052 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21057 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21057 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xe5",
+   /* 0x2105c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21061 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21066 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12135,26 +11526,26 @@ static const char from_ucs4[][2] =
+   /* 0x21076 */ "\x9a\xe7", "\x8a\x7c", "\x8b\x71", "\x00\x00", "\x00\x00",
+   /* 0x2107b */ "\x9a\xe9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2107f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21084 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21084 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xea", "\x00\x00",
+   /* 0x21089 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2108e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21093 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21098 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21093 */ "\x00\x00", "\x00\x00", "\x9a\xeb", "\x00\x00", "\x00\x00",
++  /* 0x21098 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xbd",
+   /* 0x2109d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210b1 */ "\x00\x00", "\x00\x00", "\xfb\x4e", "\x00\x00", "\x00\x00",
+   /* 0x210b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x210bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xf9",
++  /* 0x210bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xed", "\x8a\xf9",
+   /* 0x210c1 */ "\x9e\x63", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210c5 */ "\x00\x00", "\x8b\x49", "\x8a\xce", "\x8b\x6e", "\x00\x00",
+-  /* 0x210ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x210cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x210ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xe8",
++  /* 0x210cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xee", "\x00\x00",
+   /* 0x210d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x210e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x210e4 */ "\x92\xce", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x210f2 */ "\x00\x00", "\x8a\x5a", "\x8b\x7b", "\x8b\x7c", "\x00\x00",
+@@ -12169,13 +11560,13 @@ static const char from_ucs4[][2] =
+   /* 0x2111f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21124 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21129 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2112e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2112f */ "\x9a\xef", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21133 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21138 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xfa",
++  /* 0x21138 */ "\x00\x00", "\x00\x00", "\x9a\xf0", "\x00\x00", "\x8a\xfa",
+   /* 0x2113d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21142 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21142 */ "\x00\x00", "\x00\x00", "\x89\x41", "\x00\x00", "\x00\x00",
+   /* 0x21148 */ "\x8b\x72", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2114c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2114c */ "\x00\x00", "\x00\x00", "\x8a\xf3", "\x00\x00", "\x00\x00",
+   /* 0x21151 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21156 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2115b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12222,7 +11613,7 @@ static const char from_ucs4[][2] =
+   /* 0x21228 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2122d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21232 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21237 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21237 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\x73",
+   /* 0x2123c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21241 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21246 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12244,7 +11635,7 @@ static const char from_ucs4[][2] =
+   /* 0x21296 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2129b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x212a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x212a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xf6", "\x00\x00",
++  /* 0x212a5 */ "\x00\x00", "\x00\x00", "\x91\xfe", "\x9e\xf6", "\x00\x00",
+   /* 0x212aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x212b0 */ "\x97\xed", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x212b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12272,7 +11663,7 @@ static const char from_ucs4[][2] =
+   /* 0x21322 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21327 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2132c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21331 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21331 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xf5",
+   /* 0x21336 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x4b", "\x00\x00",
+   /* 0x2133b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21340 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12285,14 +11676,14 @@ static const char from_ucs4[][2] =
+   /* 0x21363 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21368 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2136d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21372 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21372 */ "\x00\x00", "\x00\x00", "\x9a\xf4", "\xfe\xde", "\x00\x00",
+   /* 0x21377 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2137c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21381 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21386 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2138b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2138b */ "\x00\x00", "\x00\x00", "\xfc\xb7", "\x00\x00", "\x00\x00",
+   /* 0x21390 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21395 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21395 */ "\x00\x00", "\x00\x00", "\x97\xf1", "\x00\x00", "\x00\x00",
+   /* 0x2139a */ "\x00\x00", "\x97\xc7", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2139f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x213a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12317,15 +11708,15 @@ static const char from_ucs4[][2] =
+   /* 0x21403 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21408 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2140d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21412 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21413 */ "\x97\x4e", "\x00\x00", "\x00\x00", "\xfb\x68", "\x00\x00",
+   /* 0x21417 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2141c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21421 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21421 */ "\x00\x00", "\x00\x00", "\x97\x6c", "\x00\x00", "\x00\x00",
+   /* 0x21426 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2142b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21430 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21435 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2143a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2143a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xc2",
+   /* 0x2143f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21444 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21449 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12340,7 +11731,7 @@ static const char from_ucs4[][2] =
+   /* 0x21476 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2147b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21480 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21485 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21485 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xe7",
+   /* 0x2148a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2148f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21494 */ "\x00\x00", "\x00\x00", "\xfd\xc8", "\x00\x00", "\x00\x00",
+@@ -12364,259 +11755,363 @@ static const char from_ucs4[][2] =
+   /* 0x214ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x214f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x214f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xf3",
++  /* 0x214fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21502 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21507 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2150c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21511 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21516 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2151b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21520 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21525 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2152a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2152f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21534 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21539 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2153e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21543 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21548 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2154d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21552 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21557 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2155c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21561 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21566 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2156b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21570 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21575 */ "\x00\x00", "\x9a\xf7", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2157a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2157f */ "\x00\x00", "\x00\x00", "\x8f\xa6", "\x00\x00", "\x00\x00",
++  /* 0x21584 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21589 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2158e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21593 */ "\x00\x00", "\x00\x00", "\xfa\xd6", "\x00\x00", "\x00\x00",
++  /* 0x21598 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2159d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x215fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21601 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21606 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xc7", "\x00\x00",
++  /* 0x2160b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21610 */ "\x00\x00", "\x00\x00", "\xfa\xd7", "\x00\x00", "\x00\x00",
++  /* 0x21615 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xf8", "\x00\x00",
++  /* 0x2161a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2161f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21624 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21629 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2162e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21633 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21638 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2163e */ "\xfb\xa1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21642 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21647 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2164c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21651 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21656 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2165b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21661 */ "\x8e\xc5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21665 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2166a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2166f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21674 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21679 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2167e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21683 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21688 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2168d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xa4",
++  /* 0x21692 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21697 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2169c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216b5 */ "\x00\x00", "\x00\x00", "\xfb\xc2", "\x00\x00", "\x9a\xc1",
++  /* 0x216ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216c0 */ "\x91\xfa", "\xfe\xdb", "\x97\xab", "\x00\x00", "\x00\x00",
++  /* 0x216c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x47",
++  /* 0x216d3 */ "\x00\x00", "\xfb\xb1", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216dd */ "\x00\x00", "\x8f\xea", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xd2", "\xfe\x61",
++  /* 0x216e8 */ "\xfa\xce", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x216f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xed", "\x91\xf3",
++  /* 0x216fc */ "\x93\xc6", "\x00\x00", "\x93\x5a", "\x00\x00", "\x00\x00",
++  /* 0x21700 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21705 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2170a */ "\x00\x00", "\x00\x00", "\xfa\xfb", "\x00\x00", "\x00\x00",
++  /* 0x21710 */ "\x92\xef", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21714 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21719 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2171e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21723 */ "\x00\x00", "\x00\x00", "\xfa\xc8", "\x00\x00", "\x00\x00",
++  /* 0x21728 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2172d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21732 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21737 */ "\x00\x00", "\x00\x00", "\x98\x47", "\x93\x66", "\x98\x55",
++  /* 0x2173c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21741 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21746 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2174b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21750 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21755 */ "\x00\x00", "\x96\xe6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2175a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2175f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21764 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21769 */ "\x00\x00", "\x00\x00", "\x9f\x43", "\x9f\xaa", "\x94\xda",
++  /* 0x2176f */ "\x92\xee", "\xfc\xaf", "\xfb\xfb", "\x00\x00", "\x8e\xf9",
++  /* 0x21774 */ "\x91\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21778 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2177d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21782 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21787 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2178c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21791 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21796 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2179b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217ab */ "\x93\x64", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217b0 */ "\x94\xf5", "\x9c\xb6", "\xfb\xad", "\x98\x4e", "\x8f\x44",
++  /* 0x217b5 */ "\x96\xfd", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xf9",
++  /* 0x217c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9a\xfa", "\x00\x00",
++  /* 0x217c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217d7 */ "\x00\x00", "\x97\x69", "\x95\xd4", "\x98\x4b", "\xfb\xaa",
++  /* 0x217dc */ "\x00\x00", "\x00\x00", "\x98\x7c", "\x00\x00", "\x00\x00",
++  /* 0x217e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xea", "\x00\x00",
++  /* 0x217f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xaf",
++  /* 0x217f6 */ "\x9d\xc5", "\x00\x00", "\x91\xf1", "\x8e\xb1", "\x97\xa9",
++  /* 0x217fb */ "\xfb\xac", "\xfc\xb8", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x217ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21804 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21809 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2180e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21813 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21818 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2181d */ "\x00\x00", "\x00\x00", "\x9c\xb9", "\x00\x00", "\x00\x00",
++  /* 0x21822 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21828 */ "\xfb\xb0", "\xfc\xd2", "\x93\xcb", "\x00\x00", "\x00\x00",
++  /* 0x2182d */ "\x9a\xfd", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21831 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21836 */ "\x00\x00", "\x00\x00", "\x91\xf4", "\x8b\xac", "\xa0\x55",
++  /* 0x2183b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x74",
++  /* 0x21840 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xbe",
++  /* 0x21845 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2184a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2184f */ "\x00\x00", "\x00\x00", "\x97\xad", "\x00\x00", "\x00\x00",
++  /* 0x21854 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21859 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xe9",
++  /* 0x2185e */ "\x00\x00", "\x00\x00", "\x92\xf8", "\x97\xbe", "\x91\x6c",
++  /* 0x21864 */ "\x94\xaa", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21868 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2186d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21872 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x63",
++  /* 0x21877 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xc6", "\x00\x00",
++  /* 0x2187c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21881 */ "\x00\x00", "\x97\xb5", "\x92\xb8", "\x91\xef", "\x00\x00",
++  /* 0x21886 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2188b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21890 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21895 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2189a */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xa6", "\x97\x60",
++  /* 0x218a0 */ "\x93\x58", "\x95\x76", "\x8f\xac", "\x00\x00", "\x00\x00",
++  /* 0x218a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218be */ "\x91\xec", "\x97\xb4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xf7",
++  /* 0x218d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x4a",
++  /* 0x218d7 */ "\xfb\x49", "\x95\x78", "\x93\xbc", "\x00\x00", "\x00\x00",
++  /* 0x218db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218fa */ "\x91\xd6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x218fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x55",
++  /* 0x21904 */ "\x93\x56", "\x98\x51", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21908 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2190d */ "\x00\x00", "\x00\x00", "\x8f\xf8", "\xfb\xc0", "\x93\xf2",
++  /* 0x21912 */ "\x00\x00", "\x00\x00", "\x90\xd0", "\x00\x00", "\x00\x00",
++  /* 0x21917 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x44",
++  /* 0x2191c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21922 */ "\x92\x55", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21927 */ "\x93\x63", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2192b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21930 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21935 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2193b */ "\x91\xa5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2193f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xed",
++  /* 0x21944 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21949 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2194e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21953 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x6b",
++  /* 0x21958 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2195d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21962 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21967 */ "\x00\x00", "\x00\x00", "\x9a\xfe", "\x00\x00", "\x00\x00",
++  /* 0x2196c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21971 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21976 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2197c */ "\x93\x51", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x57",
++  /* 0x21980 */ "\x00\x00", "\x00\x00", "\xfa\x78", "\x00\x00", "\x00\x00",
++  /* 0x21985 */ "\x00\x00", "\x00\x00", "\xfe\xa8", "\x00\x00", "\x00\x00",
++  /* 0x2198a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2198f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21994 */ "\x00\x00", "\x93\x50", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21999 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2199e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219db */ "\xfa\x4c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xf7",
++  /* 0x219f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x219fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a2a */ "\x00\x00", "\x00\x00", "\x9b\x40", "\x00\x00", "\x00\x00",
++  /* 0x21a2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xce",
++  /* 0x21a34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a43 */ "\x00\x00", "\x9b\x41", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a48 */ "\x00\x00", "\x00\x00", "\xfe\xad", "\x00\x00", "\x00\x00",
++  /* 0x21a4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21a61 */ "\x00\x00", "\x87\x61",
+ 
+-  /* 0x21596 */ "\xfa\xd6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2159a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2159f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x215fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21603 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21608 */ "\x00\x00", "\x9c\xc7", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2160d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21613 */ "\xfa\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21617 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2161c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21621 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21626 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2162b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21630 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21635 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2163a */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xa1", "\x00\x00",
+-  /* 0x2163f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21644 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21649 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2164e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21653 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21658 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2165d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xc5", "\x00\x00",
+-  /* 0x21662 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21667 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2166c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21671 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21676 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2167b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21680 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21685 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2168a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2168f */ "\x00\x00", "\x00\x00", "\xfb\xa4", "\x00\x00", "\x00\x00",
+-  /* 0x21694 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21699 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2169e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xfa", "\xfe\xdb",
+-  /* 0x216c2 */ "\x97\xab", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216d0 */ "\x00\x00", "\x00\x00", "\x91\x47", "\x00\x00", "\xfb\xb1",
+-  /* 0x216d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216e4 */ "\x00\x00", "\x94\xd2", "\xfe\x61", "\xfa\xce", "\x00\x00",
+-  /* 0x216e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x216f8 */ "\x00\x00", "\x92\xed", "\x91\xf3", "\x93\xc6", "\x00\x00",
+-  /* 0x216fe */ "\x93\x5a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21702 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21707 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2170c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xef", "\x00\x00",
+-  /* 0x21711 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21716 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2171b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21720 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21726 */ "\xfa\xc8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2172a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2172f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21734 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2173a */ "\x98\x47", "\x93\x66", "\x98\x55", "\x00\x00", "\x00\x00",
+-  /* 0x2173e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21743 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21748 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2174d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21752 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xe6",
+-  /* 0x21757 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2175c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21761 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21766 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2176c */ "\x9f\x43", "\x9f\xaa", "\x94\xda", "\x92\xee", "\xfc\xaf",
+-  /* 0x21771 */ "\xfb\xfb", "\x00\x00", "\x8e\xf9", "\x91\xf6", "\x00\x00",
+-  /* 0x21775 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2177a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2177f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21784 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21789 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2178e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21793 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21798 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2179d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xb6",
+-  /* 0x217b2 */ "\xfb\xad", "\x98\x4e", "\x8f\x44", "\x96\xfd", "\x00\x00",
+-  /* 0x217b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x69",
+-  /* 0x217da */ "\x95\xd4", "\x98\x4b", "\xfb\xaa", "\x00\x00", "\x00\x00",
+-  /* 0x217de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x217f2 */ "\x00\x00", "\x00\x00", "\x9d\xaf", "\x9d\xc5", "\x00\x00",
+-  /* 0x217f8 */ "\x91\xf1", "\x8e\xb1", "\x97\xa9", "\xfb\xac", "\xfc\xb8",
+-  /* 0x217fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21801 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21806 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2180b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21810 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21815 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2181a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2181f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21824 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xb0", "\xfc\xd2",
+-  /* 0x2182a */ "\x93\xcb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2182e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21833 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21838 */ "\x00\x00", "\x8b\xac", "\xa0\x55", "\x00\x00", "\x00\x00",
+-  /* 0x2183d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21842 */ "\x00\x00", "\x00\x00", "\x95\xbe", "\x00\x00", "\x00\x00",
+-  /* 0x21847 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2184c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21851 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21856 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2185b */ "\x00\x00", "\x00\x00", "\x8e\xe9", "\x00\x00", "\x00\x00",
+-  /* 0x21861 */ "\x92\xf8", "\x97\xbe", "\x91\x6c", "\x94\xaa", "\x00\x00",
+-  /* 0x21865 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2186a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2186f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21874 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21879 */ "\x00\x00", "\x9d\xc6", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2187e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xb5",
+-  /* 0x21884 */ "\x92\xb8", "\x91\xef", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21888 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2188d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21892 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21897 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2189c */ "\x00\x00", "\xfe\xa6", "\x97\x60", "\x93\x58", "\x95\x76",
+-  /* 0x218a2 */ "\x8f\xac", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xec", "\x97\xb4",
+-  /* 0x218bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218d3 */ "\x00\x00", "\x00\x00", "\x97\x4a", "\xfb\x49", "\x95\x78",
+-  /* 0x218d9 */ "\x93\xbc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x218f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xd6", "\x00\x00",
+-  /* 0x218fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21900 */ "\x00\x00", "\x00\x00", "\x93\x55", "\x93\x56", "\x98\x51",
+-  /* 0x21905 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2190a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21910 */ "\x8f\xf8", "\xfb\xc0", "\x93\xf2", "\x00\x00", "\x00\x00",
+-  /* 0x21915 */ "\x90\xd0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21919 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2191e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21923 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x63", "\x00\x00",
+-  /* 0x21928 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2192d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21932 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21937 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xa5", "\x00\x00",
+-  /* 0x2193c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21941 */ "\x00\x00", "\x00\x00", "\xa0\xed", "\x00\x00", "\x00\x00",
+-  /* 0x21946 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2194b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21950 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21955 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2195a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2195f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21964 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21969 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2196e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21973 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21978 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x51", "\x00\x00",
+-  /* 0x2197d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21982 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21988 */ "\xfe\xa8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2198c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21991 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x50",
+-  /* 0x21996 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2199b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x4c", "\x00\x00",
+-  /* 0x219dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219f0 */ "\x00\x00", "\x00\x00", "\x92\xf7", "\x00\x00", "\x00\x00",
+-  /* 0x219f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x219ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21a4b */ "\xfe\xad",
+-
+-  /* 0x21b44 */ "\xfb\xd5",
+-
+-  /* 0x21ca2 */ "\x9e\x79", "\x00\x00", "\x00\x00", "\xfb\xd9",
++  /* 0x21b44 */ "\xfb\xd5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21b9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ba2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ba7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bc1 */ "\x8b\xc2", "\x9a\x7c", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bcf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bde */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21be3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21be8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bf2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bf7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21bfc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c2a */ "\x9b\x42", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c70 */ "\x9b\x43", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21c9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ca2 */ "\x9e\x79", "\x00\x00", "\x00\x00", "\xfb\xd9", "\x00\x00",
++  /* 0x21ca6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21cac */ "\x9b\x44",
+ 
+   /* 0x21d46 */ "\xa0\xa7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21d4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21d4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x7b", "\x00\x00",
+   /* 0x21d54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21d59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21d59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x6e",
+   /* 0x21d5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12626,7 +12121,7 @@ static const char from_ucs4[][2] =
+   /* 0x21d7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21d8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21d8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xf3",
+   /* 0x21d90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21d9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12634,7 +12129,7 @@ static const char from_ucs4[][2] =
+   /* 0x21da4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21da9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21dae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21db3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21db3 */ "\x00\x00", "\x00\x00", "\x8c\x79", "\x00\x00", "\x00\x00",
+   /* 0x21db8 */ "\x00\x00", "\x93\x5e", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21dbd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21dc2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12645,7 +12140,7 @@ static const char from_ucs4[][2] =
+   /* 0x21ddb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21de0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21de5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21dea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21deb */ "\x93\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21def */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21df4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xe1",
+   /* 0x21df9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12654,14 +12149,14 @@ static const char from_ucs4[][2] =
+   /* 0x21e08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21e17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21e17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xd0",
+   /* 0x21e1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21e21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21e21 */ "\x00\x00", "\x8c\xf1", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e35 */ "\x00\x00", "\xfb\xe2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21e3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21e3a */ "\x00\x00", "\x00\x00", "\xfc\xe3", "\x00\x00", "\x00\x00",
+   /* 0x21e3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21e49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -12689,101 +12184,196 @@ static const char from_ucs4[][2] =
+   /* 0x21eb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21ebc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21ec1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21ec6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ec6 */ "\x00\x00", "\x9b\x45", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21ecb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x21ed0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x47",
+-
+-  /* 0x21f6a */ "\xfc\x5b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21f9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x21fa1 */ "\x9c\xfd",
+-
+-  /* 0x22049 */ "\xfb\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2204d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22052 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22057 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2205c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22061 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22066 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2206b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22070 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22075 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2207a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2207f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22084 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22089 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2208e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22093 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22098 */ "\x00\x00", "\x9b\xa8", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2209d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220c5 */ "\x00\x00", "\x8a\xd5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x220f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x73",
+-  /* 0x220fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22101 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22106 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2210b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22110 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22115 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2211a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2211f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22124 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2212a */ "\xfd\x59", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2212e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22133 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22138 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2213d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22142 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22147 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2214c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22151 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22156 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2215b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22160 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22165 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2216a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2216f */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xed", "\x00\x00",
+-  /* 0x22174 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2217a */ "\x9c\xa9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2217e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22183 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22188 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2218d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22192 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22197 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2219c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xa8",
+-  /* 0x221a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x221a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x221ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x221b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x221b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x221ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x221bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xc3",
+-
+-  /* 0x2227c */ "\x9b\x4e",
++  /* 0x21ed5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21eda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21edf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ee4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ee9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21eee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ef3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ef8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21efd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f0c */ "\x00\x00", "\x00\x00", "\x9f\x50", "\x00\x00", "\x00\x00",
++  /* 0x21f11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x48", "\x00\x00",
++  /* 0x21f16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x5b", "\x00\x00",
++  /* 0x21f6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21f9e */ "\x98\xa9", "\x00\x00", "\x00\x00", "\x9c\xfd", "\x00\x00",
++  /* 0x21fa2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fa7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fcf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fde */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fe3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x88\x4c",
++  /* 0x21fe8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21fed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ff2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ff7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x21ffc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22001 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22006 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2200b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22010 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22015 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2201a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2201f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22024 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22029 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2202e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22033 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22038 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2203d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22042 */ "\x00\x00", "\x00\x00", "\x9b\x4b", "\x00\x00", "\x00\x00",
++  /* 0x22047 */ "\x00\x00", "\xfb\xec", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2204c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22051 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22056 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2205b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22060 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22065 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2206a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2206f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22074 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22079 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x69",
++  /* 0x2207e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22083 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22088 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2208d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22092 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22097 */ "\x00\x00", "\x00\x00", "\x9b\xa8", "\x00\x00", "\x00\x00",
++  /* 0x2209c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220c4 */ "\x00\x00", "\x00\x00", "\x8a\xd5", "\x00\x00", "\x00\x00",
++  /* 0x220c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x220fc */ "\xfa\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22100 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22105 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2210a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2210f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22114 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22119 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2211e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22123 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22128 */ "\x00\x00", "\xfd\x59", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2212d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22132 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22137 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2213c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22141 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22146 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2214b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22150 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22155 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2215b */ "\x91\xa2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2215f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22164 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22169 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2216e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xed",
++  /* 0x22173 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22178 */ "\x00\x00", "\x9c\xa9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2217d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22182 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22187 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2218c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22191 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22196 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2219b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221a1 */ "\x8a\xa8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221be */ "\x00\x00", "\x00\x00", "\x8d\x42", "\x00\x00", "\x9b\xc3",
++  /* 0x221c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x221ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22204 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xe1", "\x00\x00",
++  /* 0x22209 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2220e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22213 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22218 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2221d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22222 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22227 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2222c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22231 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22236 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2223b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22240 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22245 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2224a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2224f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22254 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22259 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2225e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22263 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22268 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2226d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22272 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22277 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x4e",
+ 
+   /* 0x22321 */ "\x95\xd0", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x5f",
+ 
+@@ -12791,257 +12381,336 @@ static const char from_ucs4[][2] =
+   /* 0x223c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x223c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x223cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x4e",
++  /* 0x223d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223d5 */ "\x00\x00", "\x9b\x4f", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223f8 */ "\x00\x00", "\x9b\x50", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x223fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22402 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22407 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2240c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22411 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22416 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2241b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22420 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22425 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2242a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2242f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22434 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22439 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2243e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22443 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22448 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2244d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22452 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22457 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2245c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22461 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xc6", "\x00\x00",
++  /* 0x22466 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2246b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22471 */ "\xfc\x50", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22475 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2247a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2247f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22484 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22489 */ "\x00\x00", "\xfd\x73", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2248e */ "\x00\x00", "\x00\x00", "\xfd\xa7", "\x00\x00", "\x00\x00",
++  /* 0x22493 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22498 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2249d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xa2", "\x00\x00",
++  /* 0x224b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224bc */ "\x87\xd1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224c1 */ "\x87\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xd4", "\x00\x00",
++  /* 0x224ca */ "\x00\x00", "\x87\xd5", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x58",
++  /* 0x224ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x224fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22501 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22506 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2250b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22510 */ "\x00\x00", "\x00\x00", "\xfa\x5e", "\x00\x00", "\x00\x00",
++  /* 0x22515 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2251b */ "\xa0\x59", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2251f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22524 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22529 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2252e */ "\x00\x00", "\xfa\x75", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22533 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22538 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2253d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22542 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22547 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2254c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22551 */ "\x00\x00", "\x00\x00", "\xfb\xbe", "\x00\x00", "\x00\x00",
++  /* 0x22556 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2255b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22560 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22565 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2256a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2256f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22574 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22579 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2257e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22583 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22588 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xa2",
++  /* 0x2258d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22592 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22597 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2259c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x70", "\x00\x00",
++  /* 0x225b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x71", "\x00\x00",
++  /* 0x225bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x225fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22600 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22605 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2260a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2260f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22614 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22619 */ "\x00\x00", "\x93\x77", "\xfe\xef", "\x00\x00", "\x00\x00",
++  /* 0x2261e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22623 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22628 */ "\x00\x00", "\x00\x00", "\x93\x6d", "\x00\x00", "\x00\x00",
++  /* 0x2262d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22632 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22637 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2263c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22641 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22646 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2264b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22650 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22655 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2265a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2265f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22664 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x5d", "\x00\x00",
++  /* 0x22669 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2266e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22673 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22678 */ "\x00\x00", "\x90\xb8", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2267d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22682 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22687 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2268c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22691 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xfc",
++  /* 0x22696 */ "\x00\x00", "\xfb\x41", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2269b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x6b", "\x94\xe3",
++  /* 0x226f6 */ "\x8e\xe2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x226ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22704 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22709 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2270e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x7d", "\x00\x00",
++  /* 0x22714 */ "\x8e\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22718 */ "\x00\x00", "\x00\x00", "\x9c\x4d", "\x00\x00", "\x00\x00",
++  /* 0x2271d */ "\x00\x00", "\x96\xa3", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22722 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22727 */ "\x00\x00", "\x00\x00", "\x9b\x51", "\x00\x00", "\x00\x00",
++  /* 0x2272c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22731 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22736 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2273b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22740 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22745 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2274a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2274f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22754 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22759 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2275e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22763 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22768 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2276d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22772 */ "\x00\x00", "\x00\x00", "\x8a\xc3", "\x00\x00", "\x00\x00",
++  /* 0x22777 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2277c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xaa",
++  /* 0x22781 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22786 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2278b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22790 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22796 */ "\x8c\xe2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2279a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2279f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227b4 */ "\xfc\x68", "\x8b\x6d", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227cd */ "\xfd\x67", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x227fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xe9",
++  /* 0x22803 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22808 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2280d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22812 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22817 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2281c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22821 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22826 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2282b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22830 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22835 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2283a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2283f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22844 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22849 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2284e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22853 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22858 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2285d */ "\x00\x00", "\xfc\xa1", "\x93\x6c", "\x00\x00", "\x00\x00",
++  /* 0x22862 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22867 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2286c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x52",
++  /* 0x22871 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22876 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2287b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22880 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22885 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2288a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2288f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22894 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22899 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2289e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x70",
++  /* 0x228ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xa8",
++  /* 0x228c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xe9", "\x00\x00",
++  /* 0x228f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x228fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22902 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22907 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2290c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22911 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22916 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2291b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22920 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22926 */ "\x9c\xb4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2292a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2292f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22934 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xea",
++  /* 0x22939 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2293e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22943 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22948 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2294d */ "\x00\x00", "\x9b\x53", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22952 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22957 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2295c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22961 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22967 */ "\x9b\x55", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xab",
++  /* 0x2296b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22970 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22975 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2297a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22980 */ "\xfc\xa7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22984 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22989 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2298e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x56",
+ 
+-  /* 0x22465 */ "\x9e\xc6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22469 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2246e */ "\x00\x00", "\x00\x00", "\xfc\x50", "\x00\x00", "\x00\x00",
+-  /* 0x22473 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22478 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2247d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22482 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22487 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x73",
+-
+-  /* 0x22513 */ "\xfa\x5e", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22517 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\x59", "\x00\x00",
+-  /* 0x2251c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22521 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22526 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2252b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x75",
+-  /* 0x22530 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22535 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2253a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2253f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22544 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22549 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2254e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22553 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22558 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2255d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22562 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22567 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2256c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22571 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22576 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2257b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22580 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22585 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2258a */ "\x00\x00", "\x00\x00", "\x9c\xa2", "\x00\x00", "\x00\x00",
+-  /* 0x2258f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22594 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22599 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2259e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225ad */ "\x00\x00", "\x93\x70", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225bc */ "\x00\x00", "\x93\x71", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x225fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22602 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22607 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2260c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22611 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22616 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x77",
+-  /* 0x2261c */ "\xfe\xef", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22620 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22625 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2262b */ "\x93\x6d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2262f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22634 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22639 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2263e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22643 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22648 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2264d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22652 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22657 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2265c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22661 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22666 */ "\x00\x00", "\xfc\x5d", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2266b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22670 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22675 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2267a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2267f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22684 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22689 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2268e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22693 */ "\x00\x00", "\x00\x00", "\x8a\xfc", "\x00\x00", "\xfb\x41",
+-  /* 0x22698 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2269d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226f2 */ "\x00\x00", "\x9e\x6b", "\x94\xe3", "\x8e\xe2", "\x00\x00",
+-  /* 0x226f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x226fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22701 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22706 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2270b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22710 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22715 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2271b */ "\x9c\x4d", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xa3",
+-  /* 0x2271f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22724 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22729 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2272e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22733 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22738 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2273d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22742 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22747 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2274c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22751 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22756 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2275b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22760 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22765 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2276a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2276f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22775 */ "\x8a\xc3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22779 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2277e */ "\x00\x00", "\x00\x00", "\x96\xaa", "\x00\x00", "\x00\x00",
+-  /* 0x22783 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22788 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2278d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22792 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22797 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2279c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x68", "\x8b\x6d",
+-  /* 0x227b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x227fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22800 */ "\x00\x00", "\x00\x00", "\x8a\xe9", "\x00\x00", "\x00\x00",
+-  /* 0x22805 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2280a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2280f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22814 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22819 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2281e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22823 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22828 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2282d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22832 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22837 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2283c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22841 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22846 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2284b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22850 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22855 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2285a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xa1",
+-  /* 0x22860 */ "\x93\x6c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22864 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22869 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2286e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22873 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22878 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2287d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22882 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22887 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2288c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22891 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22896 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2289b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228aa */ "\x00\x00", "\x00\x00", "\xfe\x70", "\x00\x00", "\x00\x00",
+-  /* 0x228af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228be */ "\x00\x00", "\x00\x00", "\xfc\xa8", "\x00\x00", "\x00\x00",
+-  /* 0x228c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228f5 */ "\x00\x00", "\xfc\xe9", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x228ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22904 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22909 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2290e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22913 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22918 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2291d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22922 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22927 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2292c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22931 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22936 */ "\x00\x00", "\x00\x00", "\x8a\xea", "\x00\x00", "\x00\x00",
+-  /* 0x2293b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22940 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22945 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2294a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2294f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22954 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22959 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2295e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22963 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22968 */ "\x00\x00", "\x00\x00", "\x96\xab", "\x00\x00", "\x00\x00",
+-  /* 0x2296d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22972 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22977 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2297c */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xa7",
+-
++  /* 0x22a66 */ "\x8a\xbc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22a9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22aa1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22aa6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22aab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ab0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ab5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22aba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22abf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ac4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ac9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22acf */ "\x8a\xcb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22ad3 */ "\x00\x00", "\x9b\x57", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22ad8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22add */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22ae2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22ae7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ae2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x89\xcd", "\x00\x00",
++  /* 0x22ae8 */ "\x9b\x59", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22aec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22af1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22af6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22afb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22b0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22b0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x5b", "\x00\x00",
+   /* 0x22b0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13051,8 +12720,8 @@ static const char from_ucs4[][2] =
+   /* 0x22b2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22b3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22b41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22b3c */ "\x00\x00", "\x00\x00", "\x9b\x5d", "\x00\x00", "\x00\x00",
++  /* 0x22b41 */ "\x00\x00", "\x9e\x4f", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22b50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13079,7 +12748,7 @@ static const char from_ucs4[][2] =
+   /* 0x22bb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22bbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22bc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22bc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22bc8 */ "\x00\x00", "\x8a\x7b", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22bce */ "\x8b\x42", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22bd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22bd7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13101,15 +12770,15 @@ static const char from_ucs4[][2] =
+   /* 0x22c27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22c36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22c36 */ "\x00\x00", "\x8a\x50", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22c4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22c4a */ "\x00\x00", "\x9b\x60", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c4f */ "\x00\x00", "\x8b\x45", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c55 */ "\x8b\x46", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22c5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22c5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xfe", "\x00\x00",
+   /* 0x22c63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13117,20 +12786,20 @@ static const char from_ucs4[][2] =
+   /* 0x22c77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22c86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22c86 */ "\x00\x00", "\x9b\x62", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c9b */ "\x93\x7b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22c9f */ "\x00\x00", "\x93\xb1", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22ca4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ca4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x60",
+   /* 0x22ca9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22cae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22cb3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22cae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xd8", "\x00\x00",
++  /* 0x22cb3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x63", "\x00\x00",
+   /* 0x22cb8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22cbd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22cbd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x69",
+   /* 0x22cc2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x47", "\x00\x00",
+-  /* 0x22cc7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22cc7 */ "\x00\x00", "\x8a\xcc", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22ccc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22cd1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22cd6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13144,7 +12813,7 @@ static const char from_ucs4[][2] =
+   /* 0x22cfe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x7c", "\x9b\x65",
+   /* 0x22d08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22d0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22d0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x66",
+   /* 0x22d12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13154,9 +12823,9 @@ static const char from_ucs4[][2] =
+   /* 0x22d30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22d3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22d3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x72",
+   /* 0x22d44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22d49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22d49 */ "\x00\x00", "\x00\x00", "\x8a\x7a", "\x00\x00", "\x00\x00",
+   /* 0x22d4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13169,15 +12838,15 @@ static const char from_ucs4[][2] =
+   /* 0x22d7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22d8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22d8a */ "\x00\x00", "\x00\x00", "\x8a\xb0", "\x00\x00", "\x00\x00",
+   /* 0x22d8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22d94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22d95 */ "\x9b\x68", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22d9e */ "\x00\x00", "\x9e\xa3", "\x00\x00", "\x00\x00", "\xfa\xec",
+   /* 0x22da4 */ "\x8b\x77", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22da8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22dad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22db2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22db2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x67",
+   /* 0x22db7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22dbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22dc1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13188,7 +12857,7 @@ static const char from_ucs4[][2] =
+   /* 0x22dda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22ddf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22de4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22de9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22de9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x59",
+   /* 0x22dee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22df3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22df8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13205,7 +12874,7 @@ static const char from_ucs4[][2] =
+   /* 0x22e2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22e34 */ "\x00\x00", "\xfc\xbb", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22e39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22e3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x69", "\x00\x00",
+   /* 0x22e43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22e48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22e4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13216,186 +12885,236 @@ static const char from_ucs4[][2] =
+   /* 0x22e66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22e6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x22e70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22e75 */ "\x00\x00", "\x00\x00", "\x93\xa8",
++  /* 0x22e75 */ "\x00\x00", "\x00\x00", "\x93\xa8", "\x00\x00", "\x00\x00",
++  /* 0x22e7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e89 */ "\x00\x00", "\x8a\xe0", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22e9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ea2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ea7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22eac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22eb1 */ "\x00\x00", "\x9e\x51", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22eb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ebb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ec0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ec5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22eca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ecf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ed4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ed9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ede */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ee3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ee8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22eed */ "\x00\x00", "\x8f\x5f",
+ 
+-  /* 0x22fe3 */ "\x97\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22fe7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22fec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22ff1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22ff6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x22ffb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23000 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23005 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2300a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2300f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23014 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23019 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2301e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23023 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23028 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2302d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23032 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23037 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2303c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23041 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23046 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xc2",
+-  /* 0x2304b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23050 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23055 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2305a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2305f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23064 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23069 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2306e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23073 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23078 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x67",
+-  /* 0x2307e */ "\xfc\xcc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23082 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23087 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2308c */ "\x00\x00", "\x93\xb6", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23091 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23096 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2309b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230b4 */ "\x00\x00", "\x00\x00", "\x90\xe4", "\x00\x00", "\x00\x00",
+-  /* 0x230b9 */ "\x00\x00", "\x00\x00", "\x90\xe5", "\x00\x00", "\x00\x00",
+-  /* 0x230be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230d7 */ "\x00\x00", "\x00\x00", "\x9e\xf2", "\x00\x00", "\x00\x00",
+-  /* 0x230dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x230ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xca", "\x00\x00",
+-  /* 0x23104 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23109 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2310e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23113 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23118 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2311d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23122 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23127 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2312c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23131 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23136 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2313b */ "\x00\x00", "\x8b\xbc", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23140 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23145 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2314a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2314f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23154 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23159 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2315e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23163 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23168 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2316d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23172 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23177 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2317c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23182 */ "\x93\xcf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23186 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2318b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23190 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23195 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2319a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2319f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xdb",
+-  /* 0x231a5 */ "\xfc\xdc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231c8 */ "\xfc\xe6", "\x96\xe7", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231f4 */ "\x00\x00", "\x00\x00", "\xfc\xd8", "\xfc\xd9", "\xfd\xa6",
+-  /* 0x231f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x231fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23203 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23208 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2320d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23212 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23217 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2321c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23221 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xf1", "\x00\x00",
+-  /* 0x23226 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2322b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xe9", "\x00\x00",
+-  /* 0x23231 */ "\xfc\xe4", "\x94\xaf", "\xfa\x77", "\x93\xcc", "\x00\x00",
+-  /* 0x23235 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2323a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2323f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23244 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23249 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2324e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23253 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23258 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2325d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x5a",
+-  /* 0x23262 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23267 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2326c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23271 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23276 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2327b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23280 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23285 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xbf", "\xfb\x51",
+-  /* 0x2328a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2328f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23294 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23299 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2329e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232a8 */ "\x00\x00", "\x00\x00", "\x93\xb9", "\xfe\xd7", "\x93\xb7",
+-  /* 0x232ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232d0 */ "\x00\x00", "\x93\xd9", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232e0 */ "\x93\xbb", "\x93\xda", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x232fd */ "\x00\x00", "\x00\x00", "\x98\xa3", "\x00\x00", "\x00\x00",
+-  /* 0x23302 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23307 */ "\x00\x00", "\x00\x00", "\x90\xd1",
++  /* 0x22f74 */ "\x9b\x6a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22f9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fa0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fa5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22faa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22faf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fb4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x6b", "\x00\x00",
++  /* 0x22fcd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fd7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fdc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fe1 */ "\x00\x00", "\x97\xec", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fe6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22feb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ff0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ff5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22ffa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x22fff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23004 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23009 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2300e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23013 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23018 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2301d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23022 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23027 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2302c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23031 */ "\x00\x00", "\x9b\x6c", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23036 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2303b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23040 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x4e", "\x00\x00",
++  /* 0x23045 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2304b */ "\xfd\xc2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2304f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23054 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23059 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2305e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23063 */ "\x00\x00", "\x00\x00", "\x9b\x6d", "\x00\x00", "\x00\x00",
++  /* 0x23068 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2306d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23072 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23077 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2307d */ "\x91\x67", "\xfc\xcc", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23081 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23086 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2308b */ "\x00\x00", "\x00\x00", "\x93\xb6", "\x00\x00", "\x00\x00",
++  /* 0x23090 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23095 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2309a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2309f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xe4", "\x00\x00",
++  /* 0x230b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xe5", "\x00\x00",
++  /* 0x230bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xf2", "\x00\x00",
++  /* 0x230db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x230fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xca",
++  /* 0x23103 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23108 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2310d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23112 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23117 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2311c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23121 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23126 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2312b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23130 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23135 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2313a */ "\x00\x00", "\x00\x00", "\x8b\xbc", "\x00\x00", "\x00\x00",
++  /* 0x2313f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23144 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23149 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2314e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23153 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23158 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2315d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23162 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23167 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2316c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23171 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23176 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2317b */ "\x00\x00", "\x8f\x46", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23180 */ "\x00\x00", "\x93\xcf", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23185 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2318a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2318f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23194 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23199 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2319e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231a4 */ "\xfc\xdb", "\xfc\xdc", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231b3 */ "\x93\xc0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231c6 */ "\x00\x00", "\xfc\xe6", "\x96\xe7", "\x00\x00", "\x00\x00",
++  /* 0x231cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231ea */ "\x87\xa7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xd8", "\xfc\xd9",
++  /* 0x231f9 */ "\xfd\xa6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x231fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23202 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23207 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2320c */ "\x00\x00", "\x00\x00", "\x93\xce", "\x00\x00", "\x00\x00",
++  /* 0x23211 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23216 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2321b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23220 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xf1",
++  /* 0x23225 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2322a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xe9",
++  /* 0x2322f */ "\x00\x00", "\xfc\xe4", "\x94\xaf", "\xfa\x77", "\x93\xcc",
++  /* 0x23234 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23239 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2323e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23243 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23248 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2324d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23252 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xe1", "\x00\x00",
++  /* 0x23257 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2325c */ "\x00\x00", "\x87\xa9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23262 */ "\x90\x5a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23266 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2326b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23270 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23275 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2327a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2327f */ "\x00\x00", "\x8c\x54", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23284 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xbf",
++  /* 0x2328a */ "\xfb\x51", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2328e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23293 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23298 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2329d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xb9", "\xfe\xd7",
++  /* 0x232ad */ "\x93\xb7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232cf */ "\x00\x00", "\x00\x00", "\x93\xd9", "\x00\x00", "\x00\x00",
++  /* 0x232d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232de */ "\x00\x00", "\x93\xbb", "\x93\xda", "\x00\x00", "\x00\x00",
++  /* 0x232e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x232fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xa3", "\x00\x00",
++  /* 0x23301 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23306 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xd1", "\x00\x00",
++  /* 0x2330b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23310 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23315 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2331a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\x6e",
+ 
+   /* 0x233b4 */ "\xfa\x70", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x233c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x233c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xeb",
+   /* 0x233cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x233db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x233db */ "\x00\x00", "\x00\x00", "\x9b\x6f", "\x00\x00", "\x00\x00",
+   /* 0x233e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233e6 */ "\xfc\xfc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x233ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x40",
+-  /* 0x233f5 */ "\xa0\x7b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x233f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xe2",
++  /* 0x233f5 */ "\xa0\x7b", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xa1",
++  /* 0x233fa */ "\x97\xf7", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xe2",
+   /* 0x233fe */ "\x00\x00", "\xfc\xd6", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23403 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23408 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13408,7 +13127,7 @@ static const char from_ucs4[][2] =
+   /* 0x2342b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23430 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23435 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2343a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2343a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x59",
+   /* 0x2343f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23444 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23449 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13418,7 +13137,7 @@ static const char from_ucs4[][2] =
+   /* 0x2345d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23462 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23467 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2346c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2346c */ "\x00\x00", "\x00\x00", "\xfd\x40", "\x00\x00", "\x00\x00",
+   /* 0x23472 */ "\x93\x5f", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23476 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2347b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13452,7 +13171,7 @@ static const char from_ucs4[][2] =
+   /* 0x23507 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2350c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23511 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23516 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23516 */ "\x00\x00", "\x00\x00", "\x9c\x76", "\x00\x00", "\x00\x00",
+   /* 0x2351b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23520 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23525 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13463,12 +13182,12 @@ static const char from_ucs4[][2] =
+   /* 0x2353e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23543 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23548 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2354d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2354d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xeb", "\x00\x00",
+   /* 0x23552 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23557 */ "\x00\x00", "\x00\x00", "\x8f\x47", "\x00\x00", "\x00\x00",
+   /* 0x2355c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23561 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23566 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23567 */ "\x9b\x74", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2356b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23570 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23575 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13484,7 +13203,7 @@ static const char from_ucs4[][2] =
+   /* 0x235a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x235b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x235b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xd8",
+   /* 0x235bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13496,14 +13215,14 @@ static const char from_ucs4[][2] =
+   /* 0x235e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x235f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x235f3 */ "\x9b\x75", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x235fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x5c", "\x00\x00",
+   /* 0x23601 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23606 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2360b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23610 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23615 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23615 */ "\x00\x00", "\x87\x51", "\x00\x00", "\x00\x00", "\x9b\x79",
+   /* 0x2361a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2361f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23624 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13516,8 +13235,8 @@ static const char from_ucs4[][2] =
+   /* 0x23647 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2364c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23651 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23656 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2365b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23656 */ "\x00\x00", "\x00\x00", "\xfd\x58", "\x00\x00", "\x00\x00",
++  /* 0x2365b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x5f", "\x00\x00",
+   /* 0x23660 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23665 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2366a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13527,10 +13246,10 @@ static const char from_ucs4[][2] =
+   /* 0x2367e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23683 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23688 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2368d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2368e */ "\x87\xc7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23692 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23697 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2369c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2369c */ "\x00\x00", "\x87\x7c", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x236a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x43",
+   /* 0x236a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x236ab */ "\x00\x00", "\x97\xfa", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13550,15 +13269,15 @@ static const char from_ucs4[][2] =
+   /* 0x236f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x236f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x236fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23700 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23700 */ "\x00\x00", "\x00\x00", "\xfd\x5b", "\x00\x00", "\x00\x00",
+   /* 0x23705 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2370a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2370f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23714 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23714 */ "\x00\x00", "\x9b\x7a", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23719 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2371e */ "\x00\x00", "\x9e\xd5", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23723 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23728 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23728 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\xae",
+   /* 0x2372d */ "\x00\x00", "\x9c\xc9", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23732 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x23737 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -13593,667 +13312,837 @@ static const char from_ucs4[][2] =
+   /* 0x237c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x237cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x237d2 */ "\x00\x00", "\x00\x00", "\x93\xec", "\x97\xf6", "\x96\xcf",
++  /* 0x237d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x237ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23804 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23809 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2380e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23813 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23818 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2381d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23822 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23827 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2382c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23831 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23836 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xde",
+ 
+-  /* 0x23adb */ "\xfd\x69", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23adf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ae4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ae9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x52",
+-  /* 0x23aee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23af3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23af8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23afd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23b57 */ "\x00\x00", "\x00\x00", "\xfd\x6e",
+-
+-  /* 0x23c99 */ "\xfa\x7c", "\x93\xfa", "\x90\x7c", "\x00\x00", "\x00\x00",
+-  /* 0x23c9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ca2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ca7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cb7 */ "\x9d\xb7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cc5 */ "\x00\x00", "\xa0\xe9", "\xfa\x4e", "\xfd\xa1", "\x00\x00",
+-  /* 0x23cca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ccf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cde */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ce3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ce8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ced */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cf2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23cf7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x74",
+-  /* 0x23cfd */ "\x9f\xbf", "\x9e\xcb", "\x9b\xb9", "\x00\x00", "\x00\x00",
+-  /* 0x23d01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xb9",
+-  /* 0x23d5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23d9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23da1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23da6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23db0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23db6 */ "\x9e\xd2", "\x97\x53", "\x96\xa4", "\x8f\xbe", "\x94\xd9",
+-  /* 0x23dbb */ "\x90\x58", "\xfd\x79", "\xfd\x7b", "\x00\x00", "\x00\x00",
+-  /* 0x23dbf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dc4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dc9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ddd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23de2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23de7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23df1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23df6 */ "\x00\x00", "\x8e\xfa", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23dfb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xd9", "\x97\xd4",
+-  /* 0x23e2e */ "\x90\xbb", "\xfd\xbc", "\xfd\xc6", "\x92\x48", "\x00\x00",
+-  /* 0x23e32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e88 */ "\x9d\xc1", "\x92\xb9", "\x92\xa6", "\x8f\x4b", "\x00\x00",
+-  /* 0x23e8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23e9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ea0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ea5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23eaa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23eaf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23eb4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23eb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ebf */ "\x92\xb6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ec3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ec8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ecd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ed2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ed7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23edc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ee1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ee6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23eeb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ef0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ef5 */ "\x00\x00", "\x9e\xd8", "\x94\x5e", "\x98\x5f", "\x94\xce",
+-  /* 0x23efb */ "\x92\x4a", "\xfd\x70", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23eff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x67", "\x00\x00",
+-  /* 0x23f36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f41 */ "\x8d\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f7c */ "\x00\x00", "\x00\x00", "\x94\x48", "\xfa\xc1", "\x9c\xf7",
+-  /* 0x23f82 */ "\xfd\xbe", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23f9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fa4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fa9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fb3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x7e", "\x00\x00",
+-  /* 0x23fb8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fbd */ "\x00\x00", "\x00\x00", "\x93\xf9", "\x00\x00", "\x00\x00",
+-  /* 0x23fc2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fc7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fcc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fd1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fd6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fdb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fe0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23fe5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23feb */ "\xfa\xeb", "\xfa\xc3", "\x97\xd3", "\x95\xf9", "\x9c\x48",
+-  /* 0x23ff0 */ "\x8e\x6a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ff4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ff9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x23ffe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24003 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24008 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2400d */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xd8", "\x00\x00",
+-  /* 0x24012 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24017 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2401c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24021 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24026 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2402b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24030 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24035 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xd7", "\xfb\x4a",
+-  /* 0x2403b */ "\x9b\xaf", "\x94\x4b", "\xfd\xc9", "\x00\x00", "\x00\x00",
+-  /* 0x2403f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24044 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24049 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2404e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24053 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xac", "\x00\x00",
+-  /* 0x24058 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2405d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24062 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24067 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2406c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24071 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24076 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2407b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24080 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24085 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2408b */ "\x92\x5a", "\xfc\xbd", "\x92\xd9", "\x00\x00", "\x00\x00",
+-  /* 0x2408f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24094 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24099 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2409e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240c6 */ "\x00\x00", "\x00\x00", "\x92\xdd", "\x00\x00", "\x00\x00",
+-  /* 0x240cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x240fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24102 */ "\x00\x00", "\x96\xba", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24107 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2410c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24111 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24116 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2411b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24120 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24125 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2412a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2412f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24134 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24139 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2413f */ "\xfd\xda", "\xfd\xde", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24144 */ "\xfd\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24148 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2414d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24152 */ "\x00\x00", "\x00\x00", "\xfd\xd6", "\xfd\xdc", "\xfd\xdd",
+-  /* 0x24157 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xfe",
+-  /* 0x2415c */ "\x00\x00", "\x00\x00", "\xfe\xa1", "\x00\x00", "\x00\x00",
+-  /* 0x24161 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24166 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2416b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24170 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24175 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xd8",
+-  /* 0x2417a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2417f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24184 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24189 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2418e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24193 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24198 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2419d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241a3 */ "\x9e\x6d", "\xfd\x7c", "\xfb\x61", "\x00\x00", "\x00\x00",
+-  /* 0x241a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241de */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x60", "\x00\x00",
+-  /* 0x241e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x241f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x52",
+-  /* 0x241fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24201 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24206 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2420b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24210 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24215 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2421b */ "\x96\x4f", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2421f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24224 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24229 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2422e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24233 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24238 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2423d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24242 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24247 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x6e", "\x00\x00",
+-  /* 0x2424c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24251 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x6d",
+-  /* 0x24256 */ "\x00\x00", "\x00\x00", "\x98\x64", "\x00\x00", "\x00\x00",
+-  /* 0x2425b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24260 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24265 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2426a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2426f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24274 */ "\x00\x00", "\x94\x53", "\xfd\xec", "\xfb\x78", "\x00\x00",
+-  /* 0x24279 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2427e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24283 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24288 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2428d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24292 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24297 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2429c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x5a", "\x00\x00",
+-  /* 0x242a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xd0",
+-  /* 0x242ca */ "\x98\x62", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x242f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x4f", "\x00\x00",
+-  /* 0x242fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24300 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24305 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2430a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2430f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24314 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2431a */ "\x94\x52", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2431e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24323 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24328 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2432d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24332 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24337 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2433c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24341 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24346 */ "\x00\x00", "\x91\xd2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2434b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24350 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24355 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2435a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2435f */ "\x00\x00", "\x00\x00", "\x97\xea", "\xfb\x6b", "\x91\xb1",
+-  /* 0x24365 */ "\xfd\xf3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24369 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2436e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24373 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24378 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2437d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24382 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24387 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xcb",
+-  /* 0x2438c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24391 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xb1",
+-  /* 0x24396 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2439c */ "\xfc\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x6b", "\x00\x00",
+-  /* 0x243be */ "\x00\x00", "\x00\x00", "\x97\x51", "\x00\x00", "\x00\x00",
+-  /* 0x243c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243e6 */ "\x00\x00", "\x00\x00", "\x98\x71", "\x00\x00", "\x00\x00",
+-  /* 0x243eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243f0 */ "\x00\x00", "\x9e\xf3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243f5 */ "\x00\x00", "\x00\x00", "\x91\xe8", "\x00\x00", "\x00\x00",
+-  /* 0x243fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x243ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24404 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24409 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2440e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24413 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24418 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2441d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24422 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24427 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2442c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24431 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\x4c", "\x92\x6a",
+-  /* 0x24436 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2443b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24440 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24445 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2444a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2444f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24454 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2445a */ "\xfd\xf8", "\x98\x61", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2445e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24463 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24468 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2446d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24472 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24477 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2447c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24481 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24487 */ "\x93\xed", "\x97\x44", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2448b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24490 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24495 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2449a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2449f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244b9 */ "\x91\xe1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244cc */ "\x00\x00", "\x98\x69", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244d1 */ "\x00\x00", "\x8a\x62", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x244fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24503 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24508 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2450d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24512 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24517 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2451c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x55",
+-  /* 0x24521 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24526 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2452b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24530 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24535 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2453a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2453f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24544 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24549 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2454e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24553 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24558 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2455d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24562 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24567 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2456c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24571 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24576 */ "\x00\x00", "\x8e\x77",
++  /* 0x239c2 */ "\x8a\xcf",
+ 
+-  /* 0x2462a */ "\x93\xe6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2462e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24633 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24638 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2463d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24642 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24647 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2464c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24651 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24656 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2465b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24660 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xa2",
+-  /* 0x24665 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2466a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2466f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24674 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24679 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2467e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24683 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24688 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2468d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24692 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xb3",
+-  /* 0x24697 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2469c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246d4 */ "\x93\x7d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x246fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24700 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24706 */ "\x9e\x66", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2470a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2470f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24714 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24719 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2471e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24723 */ "\x00\x00", "\x94\x59", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24728 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2472d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24732 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24737 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2473c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24741 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24746 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2474b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24750 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24755 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2475a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2475f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24764 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24769 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2476e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24773 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24778 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2477d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24782 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24787 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2478c */ "\x00\x00", "\x00\x00", "\x94\x58",
++  /* 0x23aa7 */ "\x9b\xa2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23aab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ab0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ab5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23aba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23abf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ac4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ac9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ace */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ad3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ad8 */ "\x00\x00", "\x00\x00", "\xfd\x69", "\x00\x00", "\x00\x00",
++  /* 0x23add */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ae2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ae7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23aec */ "\x00\x00", "\x93\x52", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23af1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23af6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xa2", "\x00\x00",
++  /* 0x23afb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b1a */ "\x8c\xe7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23b55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\x6e",
+ 
+-  /* 0x24823 */ "\xfe\x54",
+-
+-  /* 0x248f3 */ "\x94\xa5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x248f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x248fc */ "\x00\x00", "\x00\x00", "\x95\xed", "\xfd\x7e", "\xfb\xeb",
+-  /* 0x24901 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24906 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2490c */ "\xfd\x7d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24910 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24916 */ "\x97\x6f", "\x94\x61", "\x00\x00", "\x9f\xc1", "\x00\x00",
+-  /* 0x2491a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2491f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24924 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24929 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2492f */ "\x95\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x52",
+-  /* 0x24933 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24938 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2493e */ "\x9f\x68", "\x9b\xe7", "\xfc\xce", "\x96\xe8", "\xfa\x49",
+-  /* 0x24942 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24947 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2494c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24951 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24956 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2495b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24960 */ "\x00\x00", "\x95\x4d", "\x9e\xf8", "\x00\x00", "\x00\x00",
+-  /* 0x24965 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2496a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2496f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x49",
+-  /* 0x24975 */ "\x91\xce", "\x97\x71", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24979 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2497f */ "\xfd\xb1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24983 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xf2",
+-  /* 0x24989 */ "\x93\xb8", "\x90\x43", "\x97\x59", "\x94\xd7", "\xfe\x66",
+-  /* 0x2498e */ "\x94\x7d", "\xfc\x6f", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24992 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24997 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2499c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249a7 */ "\x8e\xf7", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x7c",
+-  /* 0x249ac */ "\x92\xcd", "\x97\xb2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249b5 */ "\x00\x00", "\xfe\x65", "\x96\x7e", "\x97\x58", "\x9b\x77",
+-  /* 0x249bb */ "\x91\xcf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249de */ "\x96\xd5", "\xfc\xb3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249e3 */ "\x93\xae", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x249f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x46",
+-  /* 0x249f7 */ "\x95\x5b", "\x91\xd1", "\x94\xf4", "\x00\x00", "\x00\x00",
+-  /* 0x249fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a1e */ "\x00\x00", "\x00\x00", "\xfc\xed", "\xfd\xfa", "\xfc\xc8",
+-  /* 0x24a24 */ "\xfe\x62", "\x91\xfc", "\xfe\x6b", "\xfd\xf9", "\xfc\xc7",
+-  /* 0x24a29 */ "\x91\x4e", "\x9c\xb8", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a3c */ "\x00\x00", "\x97\x67", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a4b */ "\x00\x00", "\x00\x00", "\x94\xa2", "\x98\x75", "\x97\xac",
+-  /* 0x24a51 */ "\x91\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a65 */ "\x8e\xeb", "\x97\x6a", "\x96\x5e", "\x00\x00", "\x00\x00",
+-  /* 0x24a69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xf9", "\x95\xf8",
+-  /* 0x24a79 */ "\xfe\xa2", "\x8f\xe6", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a91 */ "\x00\x00", "\x9d\xa4", "\x97\x68", "\x8e\xec", "\x94\xbd",
+-  /* 0x24a96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24a9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24aa0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x5b", "\x9c\xf6",
+-  /* 0x24aa6 */ "\xfa\xa7", "\x9b\xd9", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24aaa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24aaf */ "\x00\x00", "\xfa\x5d", "\x96\x56", "\x97\x62", "\x00\x00",
+-  /* 0x24ab4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24aba */ "\x94\xba", "\xa0\x4f", "\x92\xd8", "\x00\x00", "\x00\x00",
+-  /* 0x24abe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24ac3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xbb", "\x00\x00",
+-  /* 0x24ac8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24acd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xcf", "\x00\x00",
+-  /* 0x24ad2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24ad7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24adc */ "\x00\x00", "\x00\x00", "\x94\x65", "\x00\x00", "\x00\x00",
+-  /* 0x24ae2 */ "\x9f\x4c",
+-
+-  /* 0x24b6e */ "\x9e\xbe",
++  /* 0x23c63 */ "\x8c\xa4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x7c",
++  /* 0x23c9a */ "\x93\xfa", "\x90\x7c", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23c9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ca3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ca8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cb2 */ "\x00\x00", "\x00\x00", "\x8f\x67", "\x00\x00", "\x9d\xb7",
++  /* 0x23cb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cc1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cc7 */ "\xa0\xe9", "\xfa\x4e", "\xfd\xa1", "\x00\x00", "\x00\x00",
++  /* 0x23ccb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cd0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cd5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cdf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ce4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ce9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cf3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23cf8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x74", "\x9f\xbf",
++  /* 0x23cfe */ "\x9e\xcb", "\x9b\xb9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d3e */ "\x00\x00", "\x9d\xd4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xb9", "\x00\x00",
++  /* 0x23d5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xf1", "\x00\x00",
++  /* 0x23d7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d8f */ "\x95\x7b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23d9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23da2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23da7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23db1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xd2",
++  /* 0x23db7 */ "\x97\x53", "\x96\xa4", "\x8f\xbe", "\x94\xd9", "\x90\x58",
++  /* 0x23dbc */ "\xfd\x79", "\xfd\x7b", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dcf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dde */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xda",
++  /* 0x23de3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23de8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ded */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23df2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23df8 */ "\x8e\xfa", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23dfc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x62",
++  /* 0x23e06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e11 */ "\x9b\xa5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e29 */ "\x00\x00", "\x00\x00", "\x9e\xd9", "\x97\xd4", "\x90\xbb",
++  /* 0x23e2f */ "\xfd\xbc", "\xfd\xc6", "\x92\x48", "\x00\x00", "\x00\x00",
++  /* 0x23e33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e39 */ "\x92\xb5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xc1",
++  /* 0x23e89 */ "\x92\xb9", "\x92\xa6", "\x8f\x4b", "\x00\x00", "\x00\x00",
++  /* 0x23e8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23e9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ea1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ea6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23eab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23eb0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23eb5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xa6", "\x00\x00",
++  /* 0x23eba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xb6",
++  /* 0x23ebf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ec4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ec9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ece */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ed3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x40", "\x00\x00",
++  /* 0x23ed8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23edd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ee2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ee7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23eec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ef1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ef7 */ "\x9e\xd8", "\x94\x5e", "\x98\x5f", "\x94\xce", "\x92\x4a",
++  /* 0x23efc */ "\xfd\x70", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f32 */ "\x00\x00", "\x00\x00", "\x94\x67", "\x00\x00", "\x00\x00",
++  /* 0x23f37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\xec",
++  /* 0x23f41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xd8", "\x00\x00",
++  /* 0x23f4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f5f */ "\x00\x00", "\x87\x63", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f7d */ "\x00\x00", "\x94\x48", "\xfa\xc1", "\x9c\xf7", "\xfd\xbe",
++  /* 0x23f82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f8c */ "\x00\x00", "\x00\x00", "\x8f\xda", "\x00\x00", "\x00\x00",
++  /* 0x23f91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23f9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fa0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fa5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23faa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23faf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xd9",
++  /* 0x23fb4 */ "\x00\x00", "\x00\x00", "\xfc\x7e", "\x00\x00", "\x00\x00",
++  /* 0x23fb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fbe */ "\x00\x00", "\x93\xf9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fc3 */ "\x00\x00", "\xfa\x43", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fcd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fd7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fdc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fe1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fe6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\xeb",
++  /* 0x23fec */ "\xfa\xc3", "\x97\xd3", "\x95\xf9", "\x9c\x48", "\xfd\xd8",
++  /* 0x23ff0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ff5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23ffa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x23fff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24004 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24009 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2400e */ "\x00\x00", "\x00\x00", "\xa0\xd8", "\x00\x00", "\x00\x00",
++  /* 0x24013 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24018 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2401d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24022 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24027 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2402c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24031 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24036 */ "\x00\x00", "\x00\x00", "\xfd\xd7", "\xfb\x4a", "\x9b\xaf",
++  /* 0x2403c */ "\x94\x4b", "\xfd\xc9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24040 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24045 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2404a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2404f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24054 */ "\x00\x00", "\x00\x00", "\x8e\xac", "\x00\x00", "\x00\x00",
++  /* 0x24059 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2405e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24063 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24068 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2406d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24072 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24077 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2407c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24081 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xb2", "\x00\x00",
++  /* 0x24086 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x5a",
++  /* 0x2408c */ "\xfc\xbd", "\x92\xd9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24091 */ "\xfd\xd5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24095 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2409a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2409f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240c7 */ "\x00\x00", "\x92\xdd", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240e1 */ "\x92\x59", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240ea */ "\x00\x00", "\x8c\xf0", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x240fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24104 */ "\x96\xba", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24108 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2410d */ "\x00\x00", "\x92\x5b", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24112 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24117 */ "\x00\x00", "\x9b\xab", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2411c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24121 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24126 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2412b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24130 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24135 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2413a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xda",
++  /* 0x24140 */ "\xfd\xde", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xd3",
++  /* 0x24144 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24149 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x46",
++  /* 0x2414e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24153 */ "\x00\x00", "\xfd\xd6", "\xfd\xdc", "\xfd\xdd", "\x00\x00",
++  /* 0x24158 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xfe", "\x00\x00",
++  /* 0x2415d */ "\x00\x00", "\xfe\xa1", "\x00\x00", "\x87\xa5", "\x00\x00",
++  /* 0x24162 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24167 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2416c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24171 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24177 */ "\x8b\xad", "\x00\x00", "\x00\x00", "\x9c\xd8", "\x00\x00",
++  /* 0x2417b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24180 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24185 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2418a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2418f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24194 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24199 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2419e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x6d",
++  /* 0x241a4 */ "\xfd\x7c", "\xfb\x61", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xf8", "\x00\x00",
++  /* 0x241ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241b2 */ "\x00\x00", "\x00\x00", "\x96\xf0", "\x00\x00", "\x00\x00",
++  /* 0x241b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241cb */ "\x00\x00", "\xfc\xf4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241df */ "\x00\x00", "\x00\x00", "\xfe\x60", "\x00\x00", "\x00\x00",
++  /* 0x241e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x241f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x52", "\x00\x00",
++  /* 0x241fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24202 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24207 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2420c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24211 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24216 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\x4f",
++  /* 0x2421b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24220 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24225 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2422a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2422f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24234 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24239 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2423e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24243 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24248 */ "\x00\x00", "\x00\x00", "\x91\x6e", "\x00\x00", "\x00\x00",
++  /* 0x2424d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24252 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x6d", "\x00\x00",
++  /* 0x24257 */ "\x00\x00", "\x98\x64", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2425c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24261 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24266 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2426b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24270 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24276 */ "\x94\x53", "\xfd\xec", "\xfb\x78", "\x00\x00", "\x00\x00",
++  /* 0x2427a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2427f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xba",
++  /* 0x24284 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24289 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2428e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x5d",
++  /* 0x24293 */ "\x00\x00", "\x92\xf9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24298 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2429d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242a2 */ "\x00\x00", "\x00\x00", "\x98\x5a", "\x00\x00", "\x00\x00",
++  /* 0x242a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x50", "\x00\x00",
++  /* 0x242c1 */ "\xfd\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xd0", "\x98\x62",
++  /* 0x242ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242ee */ "\x9b\xad", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x242f7 */ "\x00\x00", "\x00\x00", "\x97\x4f", "\x00\x00", "\x00\x00",
++  /* 0x242fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24301 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24306 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2430b */ "\x00\x00", "\x9b\xae", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24310 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24315 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x52",
++  /* 0x2431a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2431f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24324 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24329 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2432e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24334 */ "\x9b\xb0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24338 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2433d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24342 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24348 */ "\x91\xd2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2434c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24351 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24356 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2435b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24360 */ "\x00\x00", "\x97\xea", "\xfb\x6b", "\x91\xb1", "\xfd\xf3",
++  /* 0x24365 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2436a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2436f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24374 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24379 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2437e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24383 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24388 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xcb", "\x00\x00",
++  /* 0x2438d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24392 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xb1", "\x00\x00",
++  /* 0x24397 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xec",
++  /* 0x2439c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243ba */ "\x00\x00", "\x00\x00", "\x98\x6b", "\x00\x00", "\x00\x00",
++  /* 0x243bf */ "\x00\x00", "\x97\x51", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243e7 */ "\x00\x00", "\x98\x71", "\x95\xef", "\x00\x00", "\x00\x00",
++  /* 0x243ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243f2 */ "\x9e\xf3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243f6 */ "\x00\x00", "\x91\xe8", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x243fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24400 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xba", "\x00\x00",
++  /* 0x24405 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2440a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2440f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24414 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24419 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2441e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24423 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24428 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2442d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24432 */ "\x00\x00", "\x00\x00", "\xfb\x4c", "\x92\x6a", "\x00\x00",
++  /* 0x24437 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2443c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24441 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24446 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2444b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24450 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24455 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xf8",
++  /* 0x2445b */ "\x98\x61", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2445f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24464 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24469 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2446e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xe7",
++  /* 0x24473 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24478 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2447d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24482 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xed",
++  /* 0x24488 */ "\x97\x44", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2448c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24491 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24496 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2449b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xe1",
++  /* 0x244b9 */ "\x00\x00", "\x00\x00", "\xfb\xf5", "\x00\x00", "\x00\x00",
++  /* 0x244be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244ce */ "\x98\x69", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244d3 */ "\x8a\x62", "\x00\x00", "\x00\x00", "\x9b\xbb", "\x00\x00",
++  /* 0x244d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x244ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24505 */ "\x8c\xa8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24509 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2450e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24513 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24518 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2451d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x55", "\x00\x00",
++  /* 0x24522 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24527 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2452c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24531 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24536 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2453b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24540 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24545 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2454a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2454f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24554 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24559 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2455e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24563 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24568 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2456d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24572 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24578 */ "\x8e\x77", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2457c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24581 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24586 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2458b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24590 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24595 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2459a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2459f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245c8 */ "\x8a\xb2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x245fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24603 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24608 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2460d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24612 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24618 */ "\x9e\xbc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2461c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24621 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24626 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xe6", "\x00\x00",
++  /* 0x2462b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24630 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24635 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2463a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2463f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24644 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24649 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2464e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24653 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24658 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2465d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24662 */ "\x00\x00", "\x00\x00", "\x93\xa2", "\x00\x00", "\x00\x00",
++  /* 0x24667 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2466c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24671 */ "\x00\x00", "\x00\x00", "\x9b\xbd", "\x00\x00", "\x00\x00",
++  /* 0x24676 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2467b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24680 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24685 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2468a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2468f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24694 */ "\x00\x00", "\x00\x00", "\x94\xb3", "\x00\x00", "\x00\x00",
++  /* 0x24699 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2469e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x7d", "\x00\x00",
++  /* 0x246d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x246fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24702 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x66", "\x00\x00",
++  /* 0x24707 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2470c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24711 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24716 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2471b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24720 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x59",
++  /* 0x24725 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2472a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xbf",
++  /* 0x2472f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24734 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24739 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2473e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24743 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24748 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2474d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24752 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24757 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2475c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24761 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24766 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2476b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24770 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24775 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2477a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2477f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24784 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24789 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2478f */ "\x94\x58", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24793 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24798 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2479d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247de */ "\x00\x00", "\x9e\xa5", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x247fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24801 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24806 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2480b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24810 */ "\x00\x00", "\x9b\xc7", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24815 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2481a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2481f */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x54", "\x00\x00",
++  /* 0x24824 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24829 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2482e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24833 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24838 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2483d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24842 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24847 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2484c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24851 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24856 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2485b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24860 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24865 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2486a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2486f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24874 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24879 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2487e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x74", "\x00\x00",
++  /* 0x24883 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24888 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2488d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24892 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24897 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2489c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248e7 */ "\x00\x00", "\x8b\xd6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xb6", "\xfd\x74",
++  /* 0x248f2 */ "\x98\xc0", "\x94\xa5", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x248f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xc8",
++  /* 0x248fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xed", "\xfd\x7e",
++  /* 0x24901 */ "\xfb\xeb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24905 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2490a */ "\x00\x00", "\xfd\x7d", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2490f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24914 */ "\x00\x00", "\x97\x6f", "\x94\x61", "\x00\x00", "\x9f\xc1",
++  /* 0x24919 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2491e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24923 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24928 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2492d */ "\x00\x00", "\x95\xd7", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24933 */ "\xfa\x52", "\x9c\x58", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24937 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2493c */ "\x00\x00", "\x9f\x68", "\x9b\xe7", "\xfc\xce", "\x96\xe8",
++  /* 0x24942 */ "\xfa\x49", "\x97\xa1", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24946 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2494b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24950 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24955 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2495a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2495f */ "\x00\x00", "\x00\x00", "\x95\x4d", "\x9e\xf8", "\x00\x00",
++  /* 0x24964 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24969 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2496e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24974 */ "\xfe\x49", "\x91\xce", "\x97\x71", "\x00\x00", "\x00\x00",
++  /* 0x24978 */ "\x00\x00", "\x00\x00", "\x8c\xcf", "\x00\x00", "\x00\x00",
++  /* 0x2497d */ "\x00\x00", "\xfd\xb1", "\x00\x00", "\x00\x00", "\xfc\x6e",
++  /* 0x24982 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24988 */ "\x9c\xf2", "\x93\xb8", "\x90\x43", "\x97\x59", "\x94\xd7",
++  /* 0x2498d */ "\xfe\x66", "\x94\x7d", "\xfc\x6f", "\x00\x00", "\x00\x00",
++  /* 0x24991 */ "\x00\x00", "\x00\x00", "\x92\x46", "\x00\x00", "\x00\x00",
++  /* 0x24996 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2499b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x6d", "\x00\x00",
++  /* 0x249a5 */ "\x00\x00", "\x8e\xf7", "\x00\x00", "\xfb\xb7", "\x00\x00",
++  /* 0x249ab */ "\x94\x7c", "\x92\xcd", "\x97\xb2", "\x00\x00", "\x00\x00",
++  /* 0x249af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249b4 */ "\x00\x00", "\x00\x00", "\xfe\x65", "\x96\x7e", "\x97\x58",
++  /* 0x249ba */ "\x9b\x77", "\x91\xcf", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249c3 */ "\x00\x00", "\x94\xa4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249cd */ "\x00\x00", "\x00\x00", "\x9c\xad", "\x00\x00", "\x00\x00",
++  /* 0x249d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249d7 */ "\x00\x00", "\x00\x00", "\x8b\xab", "\x00\x00", "\x00\x00",
++  /* 0x249dc */ "\x00\x00", "\x96\xd5", "\xfc\xb3", "\x00\x00", "\x00\x00",
++  /* 0x249e1 */ "\x00\x00", "\x93\xae", "\x00\x00", "\x97\x6d", "\x00\x00",
++  /* 0x249e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249ec */ "\x94\x46", "\x95\xf7", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249f6 */ "\x9c\x46", "\x95\x5b", "\x91\xd1", "\x94\xf4", "\x00\x00",
++  /* 0x249fb */ "\xfe\x67", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x249ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x92\xa5",
++  /* 0x24a0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xdf", "\x8c\xab",
++  /* 0x24a13 */ "\x00\x00", "\x9b\xc9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xed", "\xfd\xfa",
++  /* 0x24a23 */ "\xfc\xc8", "\xfe\x62", "\x91\xfc", "\xfe\x6b", "\xfd\xf9",
++  /* 0x24a28 */ "\xfc\xc7", "\x91\x4e", "\x9c\xb8", "\x00\x00", "\x00\x00",
++  /* 0x24a2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a3b */ "\x00\x00", "\x00\x00", "\x97\x67", "\x00\x00", "\x00\x00",
++  /* 0x24a40 */ "\x00\x00", "\x95\xee", "\x00\x00", "\x00\x00", "\x9b\xb2",
++  /* 0x24a45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x60",
++  /* 0x24a4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xa2", "\x98\x75",
++  /* 0x24a50 */ "\x97\xac", "\x91\xd3", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x7b", "\x00\x00",
++  /* 0x24a5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a63 */ "\x00\x00", "\x8e\xeb", "\x97\x6a", "\x96\x5e", "\x00\x00",
++  /* 0x24a68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xeb", "\x00\x00",
++  /* 0x24a72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xf9",
++  /* 0x24a78 */ "\x95\xf8", "\xfe\xa2", "\x8f\xe6", "\x00\x00", "\x00\x00",
++  /* 0x24a7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a8c */ "\xfe\x7e", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a90 */ "\x00\x00", "\x00\x00", "\x9d\xa4", "\x97\x68", "\x8e\xec",
++  /* 0x24a96 */ "\x94\xbd", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24a9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x5b",
++  /* 0x24aa5 */ "\x9c\xf6", "\xfa\xa7", "\x9b\xd9", "\x00\x00", "\x00\x00",
++  /* 0x24aa9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24aae */ "\x00\x00", "\x00\x00", "\xfa\x5d", "\x96\x56", "\x97\x62",
++  /* 0x24ab3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ab8 */ "\x00\x00", "\x94\xba", "\xa0\x4f", "\x92\xd8", "\x00\x00",
++  /* 0x24abd */ "\x00\x00", "\x00\x00", "\x9b\xcb", "\x00\x00", "\x00\x00",
++  /* 0x24ac2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xbb",
++  /* 0x24ac7 */ "\x00\x00", "\x00\x00", "\x9d\x5f", "\x00\x00", "\x00\x00",
++  /* 0x24acc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xcf",
++  /* 0x24ad1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ad6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24adb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x65", "\x00\x00",
++  /* 0x24ae0 */ "\x00\x00", "\x9f\x4c", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ae5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xd8", "\x00\x00",
++  /* 0x24aea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24aef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24af4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24af9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24afe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b0d */ "\x00\x00", "\x8d\x5b", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24b6c */ "\x00\x00", "\x9e\xbe",
+ 
+   /* 0x24bf5 */ "\xfb\x6d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24bf9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14269,7 +14158,7 @@ static const char from_ucs4[][2] =
+   /* 0x24cb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24cbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24cc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24cc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24cc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xfc", "\x00\x00",
+   /* 0x24cca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24ccf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24cd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x73",
+@@ -14282,6 +14171,9 @@ static const char from_ucs4[][2] =
+   /* 0x24cf7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24cfc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24d01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x74",
++  /* 0x24d06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24d0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24d10 */ "\x00\x00", "\x00\x00", "\xfe\xb7",
+ 
+   /* 0x24db8 */ "\x8a\x4b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24dbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14309,375 +14201,529 @@ static const char from_ucs4[][2] =
+   /* 0x24e2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24e2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24e34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24e39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e39 */ "\x00\x00", "\x8a\xdc", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24e3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24e43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x24e48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24e4d */ "\x00\x00", "\x00\x00", "\x8b\x76",
+-
+-  /* 0x24f0e */ "\xa0\xf8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xdf", "\x00\x00",
+-  /* 0x24f5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f80 */ "\x00\x00", "\xfe\xb5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f94 */ "\x00\x00", "\x00\x00", "\x96\xfb", "\x00\x00", "\x00\x00",
+-  /* 0x24f9a */ "\x9b\xfb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24f9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fa3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fa9 */ "\x9e\xce", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fb2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x24fc2 */ "\x9e\x7b",
+-
+-  /* 0x2509d */ "\xfe\xce",
+-
+-  /* 0x25148 */ "\x9d\xfc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2514c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25151 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25156 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2515b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25160 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25165 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2516a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2516f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25174 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25179 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xcf", "\x8b\xa5",
+-  /* 0x2517e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25183 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25188 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2518d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25192 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25197 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2519c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251e3 */ "\x8a\xec", "\x00\x00", "\x00\x00", "\xfc\xe0", "\x94\xad",
+-  /* 0x251e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x251fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25200 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25205 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2520a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2520f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25214 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25219 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2521e */ "\x00\x00", "\xfe\xd5", "\x94\xac",
++  /* 0x24e4d */ "\x00\x00", "\x00\x00", "\x8b\x76", "\x00\x00", "\x00\x00",
++  /* 0x24e52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24e9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ea2 */ "\x00\x00", "\x00\x00", "\x9b\xce", "\x00\x00", "\x8a\x68",
++  /* 0x24ea7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24eac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24eb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24eb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ebb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ec0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ec5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24eca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ecf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ed4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ed9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ede */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ee3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ee8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24eed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ef2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ef7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24efc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f0b */ "\x00\x00", "\x00\x00", "\xa0\xf8", "\x00\x00", "\x00\x00",
++  /* 0x24f10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f5c */ "\x98\xdf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xb5", "\x00\x00",
++  /* 0x24f83 */ "\x00\x00", "\x00\x00", "\x9b\xcf", "\x00\x00", "\x00\x00",
++  /* 0x24f88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24f92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xfb",
++  /* 0x24f97 */ "\x00\x00", "\x00\x00", "\x9b\xfb", "\x00\x00", "\x00\x00",
++  /* 0x24f9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fa1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fa6 */ "\x00\x00", "\x00\x00", "\x9e\xce", "\x00\x00", "\x00\x00",
++  /* 0x24fab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fb0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fb5 */ "\x00\x00", "\x00\x00", "\x8e\xe5", "\x00\x00", "\x00\x00",
++  /* 0x24fba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fbf */ "\x00\x00", "\x00\x00", "\x9e\x7b", "\x00\x00", "\x00\x00",
++  /* 0x24fc4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fc9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fdd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fe2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fe7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24fec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ff1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ff6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x24ffb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25000 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25005 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2500a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2500f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25014 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25019 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2501e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25023 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25028 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xd2", "\x00\x00",
++  /* 0x2502d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25032 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25037 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2503c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25041 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25046 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2504b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25050 */ "\x00\x00", "\x8a\xa5", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25055 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2505a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2505f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25064 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25069 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2506e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25073 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25078 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2507d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25082 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25087 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2508c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25091 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25096 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2509b */ "\x00\x00", "\xfe\xce",
+ 
+-  /* 0x252c7 */ "\x8a\x6f", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252d5 */ "\x00\x00", "\x00\x00", "\x8b\xa9", "\x00\x00", "\x00\x00",
+-  /* 0x252da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x252fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25302 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25307 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2530c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xcb",
+-  /* 0x25311 */ "\x00\x00", "\xfc\xe7",
++  /* 0x2512b */ "\x8a\x45", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2512f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25134 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25139 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2513e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25143 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xfc",
++  /* 0x25148 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2514d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25152 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25157 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2515c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25161 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25166 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2516b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25170 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25175 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2517a */ "\x00\x00", "\x00\x00", "\xfe\xcf", "\x8b\xa5", "\x00\x00",
++  /* 0x2517f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25184 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25189 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2518e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25193 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25198 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2519d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251ca */ "\x00\x00", "\x00\x00", "\x8c\x4a", "\x00\x00", "\x00\x00",
++  /* 0x251cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xec",
++  /* 0x251e3 */ "\x00\x00", "\x00\x00", "\xfc\xe0", "\x94\xad", "\x00\x00",
++  /* 0x251e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x251fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25201 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25206 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2520b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25210 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25215 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2521a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25220 */ "\xfe\xd5", "\x94\xac", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25224 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25229 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2522e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25233 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25238 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2523d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25242 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25247 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2524c */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x5a", "\x00\x00",
++  /* 0x25251 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25256 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2525b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25260 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25265 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2526a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2526f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25274 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25279 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2527e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25283 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25288 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2528d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25292 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25297 */ "\x00\x00", "\x9b\xd6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2529c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252c4 */ "\x00\x00", "\x00\x00", "\x8a\x6f", "\x00\x00", "\x00\x00",
++  /* 0x252c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xa9",
++  /* 0x252d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x252fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25300 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25305 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2530a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x5f", "\x00\x00",
++  /* 0x2530f */ "\x00\x00", "\x9d\xcb", "\x00\x00", "\xfc\xe7",
+ 
+-  /* 0x25425 */ "\x93\xc8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25429 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2542f */ "\x91\xf0", "\x8f\xe0", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25433 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25438 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2543d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25442 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25447 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2544c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25451 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25456 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2545b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25460 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25465 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2546a */ "\x00\x00", "\x90\xed", "\x00\x00", "\x9b\xdc",
++  /* 0x25419 */ "\x9b\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2541d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25422 */ "\x00\x00", "\x00\x00", "\x93\xc8", "\x00\x00", "\x00\x00",
++  /* 0x25427 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2542c */ "\x00\x00", "\x00\x00", "\x91\xf0", "\x8f\xe0", "\x00\x00",
++  /* 0x25431 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25436 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2543b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25440 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25446 */ "\x9b\xdb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2544a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2544f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25454 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25459 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2545e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25463 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25468 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xed", "\x00\x00",
++  /* 0x2546e */ "\x9b\xdc", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25472 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25477 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2547c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25481 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25486 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2548b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25490 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25495 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x53",
+ 
+-  /* 0x2555b */ "\x93\xc7", "\x92\x49", "\x96\xe1", "\x00\x00", "\x00\x00",
+-  /* 0x2555f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25565 */ "\x8f\xe1", "\x9b\xe5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25569 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2556e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25573 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25578 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2557d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xc0", "\x00\x00",
+-  /* 0x25582 */ "\x00\x00", "\x93\xc3", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25587 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2558c */ "\x00\x00", "\x00\x00", "\x93\xc5", "\x00\x00", "\x00\x00",
+-  /* 0x25591 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25596 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2559b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x79",
+-  /* 0x255b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255d2 */ "\x00\x00", "\x00\x00", "\x97\x7b", "\x00\x00", "\x00\x00",
+-  /* 0x255d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x7e", "\x00\x00",
+-  /* 0x255dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xe6", "\x00\x00",
+-  /* 0x255e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x255ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25604 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25609 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2560e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25613 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25618 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2561d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25622 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25627 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2562c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25631 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xb8", "\x00\x00",
+-  /* 0x25636 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2563b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25640 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25645 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2564a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2564f */ "\x00\x00", "\x92\x70", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25654 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25659 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2565e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25663 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25668 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2566d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25672 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25677 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2567c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25681 */ "\x00\x00", "\x95\xa8", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25686 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2568b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25690 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25695 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2569a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2569f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256f4 */ "\x00\x00", "\x98\xb9", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x256fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25703 */ "\x00\x00", "\x00\x00", "\x91\x40", "\x00\x00", "\x00\x00",
+-  /* 0x25708 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2570d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25712 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25717 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2571d */ "\xfc\xbe", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25721 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x57", "\x00\x00",
+-  /* 0x25726 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2572b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25730 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25735 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2573a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2573f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25744 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25749 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2574e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25753 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25758 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2575d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25762 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25767 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2576c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25772 */ "\xfa\xdf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25776 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2577b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25780 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25785 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2578a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2578f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25794 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25799 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2579e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257c7 */ "\x9b\xe6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257e0 */ "\x8e\x44", "\x9c\x4f", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x257fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25802 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25807 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2580c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25811 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25816 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2581b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25820 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25825 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2582a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2582f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25834 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25839 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2583e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25843 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25848 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2584d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25852 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xf4",
+-  /* 0x25857 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2585c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25861 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25866 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2586b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25870 */ "\x00\x00", "\x93\xdc", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25875 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2587a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2587f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25884 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25889 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2588e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25893 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25898 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2589d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258de */ "\x00\x00", "\x00\x00", "\x8e\x4a", "\x00\x00", "\x00\x00",
+-  /* 0x258e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x258fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25901 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25906 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2590b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25910 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25915 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2591a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2591f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25924 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25929 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2592e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25933 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25938 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2593d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25942 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25947 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2594c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25951 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xb9",
+-  /* 0x25956 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2595b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25960 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25965 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2596a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2596f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25974 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25979 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2597e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25983 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25988 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2598d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25992 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25997 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2599c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x259a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x259a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x259ac */ "\x8e\x4e",
++  /* 0x25531 */ "\xa0\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xfa",
++  /* 0x25535 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2553a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xe0",
++  /* 0x2553f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25544 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25549 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2554e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25553 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25558 */ "\x00\x00", "\x00\x00", "\x93\xc7", "\x92\x49", "\x96\xe1",
++  /* 0x2555e */ "\x9b\xe2", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xe4",
++  /* 0x25562 */ "\x00\x00", "\x00\x00", "\x8f\xe1", "\x9b\xe5", "\x00\x00",
++  /* 0x25567 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2556c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25571 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25576 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2557b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25581 */ "\x94\xc0", "\x00\x00", "\x00\x00", "\x93\xc3", "\x00\x00",
++  /* 0x25585 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2558a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xc5",
++  /* 0x2558f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25594 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25599 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2559e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255b7 */ "\x00\x00", "\x90\x79", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x7b",
++  /* 0x255d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255db */ "\x90\x7e", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255e0 */ "\xfe\xe6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x255fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25602 */ "\x00\x00", "\x00\x00", "\xfe\x46", "\x00\x00", "\x00\x00",
++  /* 0x25607 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2560c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25611 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25616 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2561b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25620 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25625 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2562a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2562f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25635 */ "\x9d\xb8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25639 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2563e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25643 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25648 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2564d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x70", "\x00\x00",
++  /* 0x25652 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25657 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2565c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25661 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25666 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2566b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25670 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25675 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2567a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2567f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xa8", "\x00\x00",
++  /* 0x25684 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25689 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2568e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25693 */ "\x00\x00", "\x8c\xb0", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25698 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2569d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xc8",
++  /* 0x256e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xb9", "\x00\x00",
++  /* 0x256f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x256fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25701 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x40",
++  /* 0x25706 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2570b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25710 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25715 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2571a */ "\x00\x00", "\x00\x00", "\xfc\xbe", "\x00\x00", "\x00\x00",
++  /* 0x2571f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25725 */ "\x91\x57", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25729 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2572e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25733 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25738 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xb2",
++  /* 0x2573d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25742 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25747 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2574c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25751 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25756 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2575b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25760 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25765 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2576a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2576f */ "\x00\x00", "\x00\x00", "\xfa\xdf", "\x00\x00", "\x00\x00",
++  /* 0x25774 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25779 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2577e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25783 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25788 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2578d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25792 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25797 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2579c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257c4 */ "\x00\x00", "\x00\x00", "\x9b\xe6", "\x00\x00", "\x00\x00",
++  /* 0x257c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257dd */ "\x00\x00", "\x96\x43", "\x8e\x44", "\x9c\x4f", "\x00\x00",
++  /* 0x257e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x257fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25800 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25805 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2580a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2580f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25814 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25819 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2581e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25823 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25828 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2582d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25832 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25837 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2583c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25841 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25846 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2584b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25850 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25855 */ "\x00\x00", "\xfe\xf4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2585a */ "\x00\x00", "\x00\x00", "\x9b\xe8", "\x00\x00", "\x00\x00",
++  /* 0x2585f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25864 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25869 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2586e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xdc", "\x00\x00",
++  /* 0x25873 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25878 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2587d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25882 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25887 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2588c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25891 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25896 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2589b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\x6f",
++  /* 0x258c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258dc */ "\x00\x00", "\x87\xa1", "\x00\x00", "\x00\x00", "\x8e\x4a",
++  /* 0x258e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x258ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xed", "\x00\x00",
++  /* 0x25904 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25909 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2590e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25913 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25918 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2591d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25922 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25927 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2592c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25931 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25936 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2593b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25940 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25946 */ "\x92\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2594a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2594f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25954 */ "\x00\x00", "\x9d\xb9", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25959 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2595e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25963 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25968 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2596d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25972 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25977 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2597c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25981 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25986 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2598b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25990 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25995 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2599a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2599f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259a9 */ "\x00\x00", "\x00\x00", "\x8e\x4e", "\x00\x00", "\x00\x00",
++  /* 0x259ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x259c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xcf",
+ 
+-  /* 0x25a9c */ "\x94\xe5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25aa0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25aa5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25aaa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xf0", "\x00\x00",
+-  /* 0x25aaf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ab4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ab9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25abe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ac3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ac8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25acd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ad2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ad7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25adc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ae1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ae6 */ "\x00\x00", "\x00\x00", "\x95\x51",
++  /* 0x25a54 */ "\x87\x60", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a95 */ "\x9e\xc2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25a99 */ "\x00\x00", "\x00\x00", "\x94\xe5", "\x00\x00", "\x00\x00",
++  /* 0x25a9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25aa3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25aa8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25aae */ "\x9b\xf0", "\x94\xe4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ab2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ab7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25abc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ac1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ac6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25acb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ad0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ad5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ada */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25adf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ae4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x51",
+ 
+   /* 0x25b74 */ "\x8b\xbb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25b78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25b7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25b82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25b87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25b87 */ "\x00\x00", "\x9b\xf1", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25b8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25b91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25b96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14695,8 +14741,8 @@ static const char from_ucs4[][2] =
+   /* 0x25bd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25bd7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25bdc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25be1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25be6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25be1 */ "\x00\x00", "\x00\x00", "\x8f\x61", "\x00\x00", "\x00\x00",
++  /* 0x25be6 */ "\x00\x00", "\x9b\x64", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25beb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25bf0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25bf5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14707,7 +14753,7 @@ static const char from_ucs4[][2] =
+   /* 0x25c0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25c1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25c1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xbe", "\x00\x00",
+   /* 0x25c22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14730,10 +14776,10 @@ static const char from_ucs4[][2] =
+   /* 0x25c81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25c90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25c91 */ "\x8f\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25c9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25c9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25c9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xaf",
+   /* 0x25ca4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25ca9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25cae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14758,79 +14804,118 @@ static const char from_ucs4[][2] =
+   /* 0x25d0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25d12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25d17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25d1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xd8", "\x00\x00",
++  /* 0x25d1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x6a", "\x00\x00",
+   /* 0x25d21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25d26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25d2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x4c",
+   /* 0x25d30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25d35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25d3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25d3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x52",
+-
+-  /* 0x25e0e */ "\x95\x54", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e81 */ "\x9d\xbb", "\x95\x43", "\x92\xfe", "\x00\x00", "\x00\x00",
+-  /* 0x25e85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25e9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ea3 */ "\x00\x00", "\x00\x00", "\x94\xf2", "\x00\x00", "\x00\x00",
+-  /* 0x25ea8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ead */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25eb2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25eb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xf1",
+-  /* 0x25ebc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ec1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ec6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ecb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ed0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ed5 */ "\x00\x00", "\xa0\xea", "\x9d\xd2", "\x00\x00", "\x00\x00",
+-  /* 0x25eda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25edf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ee4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ee9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25eee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ef3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25ef8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25efd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x25f48 */ "\x00\x00", "\x00\x00", "\x91\xf8",
++  /* 0x25d3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x52", "\x00\x00",
++  /* 0x25d44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xcf",
++  /* 0x25d99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25d9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25da3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25da8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25db2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25db7 */ "\x00\x00", "\x87\xc0", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dc1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dc6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dcb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dd0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dd5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ddf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25de4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25de9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25df3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25df8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25dfd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e0c */ "\x00\x00", "\x95\x54", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e49 */ "\x8a\xd4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e7f */ "\x00\x00", "\x9d\xbb", "\x95\x43", "\x92\xfe", "\x00\x00",
++  /* 0x25e84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25e9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ea2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xf2", "\x00\x00",
++  /* 0x25ea7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25eac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25eb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25eb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ebc */ "\x94\xf1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ec0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ec5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25eca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ecf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ed4 */ "\x00\x00", "\x00\x00", "\xa0\xea", "\x9d\xd2", "\x00\x00",
++  /* 0x25ed9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ede */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ee3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ee8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25eed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ef2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25ef7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25efc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xb1",
++  /* 0x25f1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x25f47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xf8",
+ 
+   /* 0x25fe1 */ "\x94\x62", "\x9b\xa4", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x25fe5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14844,7 +14929,7 @@ static const char from_ucs4[][2] =
+   /* 0x2600d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26012 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26017 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2601c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2601c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x7d",
+   /* 0x26021 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26026 */ "\x00\x00", "\x00\x00", "\x8e\xad", "\x00\x00", "\x00\x00",
+   /* 0x2602b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14852,7 +14937,7 @@ static const char from_ucs4[][2] =
+   /* 0x26035 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2603a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2603f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26044 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26044 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xad", "\x00\x00",
+   /* 0x26049 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2604e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26053 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14864,11 +14949,11 @@ static const char from_ucs4[][2] =
+   /* 0x26071 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26076 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2607b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26080 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26080 */ "\x00\x00", "\x00\x00", "\xfe\xee", "\x00\x00", "\x00\x00",
+   /* 0x26085 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2608a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2608f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26094 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26094 */ "\x00\x00", "\x00\x00", "\x8a\xb4", "\x00\x00", "\x00\x00",
+   /* 0x26099 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2609e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x260a4 */ "\x97\x57", "\x8a\x77", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14889,7 +14974,7 @@ static const char from_ucs4[][2] =
+   /* 0x260ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x260f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x260f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x260fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x260fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xf7",
+   /* 0x26102 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26107 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2610c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14925,7 +15010,7 @@ static const char from_ucs4[][2] =
+   /* 0x261a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x261a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x261ad */ "\xa0\xf3", "\x94\xbe", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x261b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x261b2 */ "\x9b\xfa", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x261b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x261bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x261c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14961,8 +15046,8 @@ static const char from_ucs4[][2] =
+   /* 0x26256 */ "\x00\x00", "\x9d\xbc", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2625b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26261 */ "\x94\xfe", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26265 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2626a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26265 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xdb",
++  /* 0x2626b */ "\xa0\xfe", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2626f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26274 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26279 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -14982,8 +15067,32 @@ static const char from_ucs4[][2] =
+   /* 0x262bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x262c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x262c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x262ce */ "\x00\x00", "\x8e\xc0",
+-
++  /* 0x262ce */ "\x00\x00", "\x8e\xc0", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x262fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26300 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26305 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2630a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2630f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26314 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26319 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2631e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26323 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26328 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2632d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26332 */ "\x00\x00", "\x00\x00", "\x9f\x47", "\x00\x00", "\x00\x00",
++  /* 0x26337 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2633c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26341 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26346 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xde",
++  /* 0x2634c */ "\xa0\xfb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26351 */ "\x8e\xc3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26355 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2635a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15016,10 +15125,10 @@ static const char from_ucs4[][2] =
+   /* 0x263e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x263e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x263eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x263f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x263f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x263f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xc2",
++  /* 0x263f5 */ "\x00\x00", "\x00\x00", "\x95\x4c", "\x00\x00", "\x00\x00",
+   /* 0x263fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x263ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x263ff */ "\x00\x00", "\x00\x00", "\x9b\xfd", "\x00\x00", "\x00\x00",
+   /* 0x26404 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26409 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2640e */ "\x00\x00", "\x90\xcc", "\x9c\x60", "\x95\x4b", "\x00\x00",
+@@ -15033,21 +15142,21 @@ static const char from_ucs4[][2] =
+   /* 0x26436 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2643b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26440 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26445 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26445 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xfe",
+   /* 0x2644a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2644f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26454 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26459 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2645e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26463 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26468 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26469 */ "\x9c\x70", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2646d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26472 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26477 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2647c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26481 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26486 */ "\x00\x00", "\x00\x00", "\x8e\xcc", "\x00\x00", "\x00\x00",
+-  /* 0x2648b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26481 */ "\x00\x00", "\x00\x00", "\x9c\x43", "\x00\x00", "\x00\x00",
++  /* 0x26486 */ "\x00\x00", "\x9c\x47", "\x8e\xcc", "\x00\x00", "\x00\x00",
++  /* 0x2648b */ "\x00\x00", "\x8e\x54", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26490 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26495 */ "\x00\x00", "\x00\x00", "\x8e\xe4", "\x00\x00", "\x00\x00",
+   /* 0x2649a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15102,13 +15211,13 @@ static const char from_ucs4[][2] =
+   /* 0x2658f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26594 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26599 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2659e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2659e */ "\x00\x00", "\x95\x5e", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x265a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x265a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x5c",
+   /* 0x265ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x265b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x265b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x265bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x265bc */ "\x00\x00", "\x00\x00", "\x9c\x4b", "\x00\x00", "\x00\x00",
+   /* 0x265c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x265c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x265cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15125,33 +15234,33 @@ static const char from_ucs4[][2] =
+   /* 0x26602 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26607 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2660c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26611 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26612 */ "\x8b\xe1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26616 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2661b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26620 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26626 */ "\x8e\xd9",
+ 
+   /* 0x266af */ "\x9d\xb4", "\x00\x00", "\x92\x5f", "\x00\x00", "\x00\x00",
+-  /* 0x266b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x266b3 */ "\x00\x00", "\x9c\x4c", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x266d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x266d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xa1", "\x00\x00",
+   /* 0x266db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266e5 */ "\x00\x00", "\x00\x00", "\x8e\xdb", "\x00\x00", "\x00\x00",
+   /* 0x266ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x266f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x266f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x266f9 */ "\x00\x00", "\x00\x00", "\x9c\x56", "\x00\x00", "\x00\x00",
+   /* 0x266fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26703 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26708 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2670d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26712 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26712 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xa2", "\x00\x00",
+   /* 0x26717 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2671c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26721 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15177,7 +15286,7 @@ static const char from_ucs4[][2] =
+   /* 0x26785 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2678a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2678f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26794 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26794 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x5e",
+   /* 0x26799 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2679e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x267a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15188,87 +15297,144 @@ static const char from_ucs4[][2] =
+   /* 0x267bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x267c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x267c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x267cc */ "\xa0\xc3",
+-
+-  /* 0x2685e */ "\x9c\x61", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26862 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26867 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2686c */ "\x00\x00", "\x9c\x5f", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26871 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26876 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2687b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26880 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26885 */ "\x00\x00", "\x00\x00", "\xfc\x4d", "\x00\x00", "\x00\x00",
+-  /* 0x2688a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2688f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x69", "\x00\x00",
+-  /* 0x26894 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26899 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2689e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x268fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26902 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26907 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2690c */ "\x00\x00", "\xfe\xc7", "\x00\x00", "\x00\x00", "\xfe\xc6",
+-
+-  /* 0x269a8 */ "\x91\x65", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xe7", "\x00\x00",
+-  /* 0x269b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x54",
+-  /* 0x269f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x269f7 */ "\x00\x00", "\x00\x00", "\x9c\x6c", "\x00\x00", "\x00\x00",
+-  /* 0x269fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x5d",
+-  /* 0x26a2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x6a",
+-  /* 0x26a42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26a4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x6d",
+-  /* 0x26a52 */ "\x8e\xf0",
++  /* 0x267cc */ "\xa0\xc3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x267fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26802 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26807 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2680c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26811 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26816 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2681c */ "\x8a\xe6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26820 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26825 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2682a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2682f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26834 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26839 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2683e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26843 */ "\x00\x00", "\x00\x00", "\xa0\xf7", "\x00\x00", "\x00\x00",
++  /* 0x26848 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2684d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26852 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26857 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2685c */ "\x00\x00", "\x9c\x61", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26861 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26866 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2686b */ "\x00\x00", "\x00\x00", "\x9c\x5f", "\x00\x00", "\x00\x00",
++  /* 0x26870 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26875 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2687a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2687f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26884 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x4d", "\x00\x00",
++  /* 0x2688a */ "\x9e\x5b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2688e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x69",
++  /* 0x26893 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26898 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2689d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268c5 */ "\x00\x00", "\x9c\x63", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x268fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26901 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26906 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2690b */ "\x00\x00", "\x00\x00", "\xfe\xc7", "\x00\x00", "\x00\x00",
++  /* 0x26911 */ "\xfe\xc6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26915 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2691a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2691f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26924 */ "\x00\x00", "\x9c\x67", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26929 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2692e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26933 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26939 */ "\x9c\x69", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2693d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26942 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26947 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2694c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xe2",
++  /* 0x26951 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26956 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2695b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26960 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26965 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2696a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2696f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26974 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26979 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2697e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26983 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26988 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2698d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26992 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26997 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2699c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269a6 */ "\x00\x00", "\x91\x65", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xe7",
++  /* 0x269b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269f2 */ "\x8a\x54", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x269f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x6c", "\x00\x00",
++  /* 0x269fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x6e",
++  /* 0x26a2e */ "\xfe\x5d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a32 */ "\x00\x00", "\x9c\x73", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a42 */ "\x95\x6a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26a51 */ "\x95\x6d", "\x8e\xf0",
+ 
++  /* 0x26b05 */ "\x8f\x4d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b0a */ "\x8e\xf6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26b0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\xbc",
++  /* 0x26b13 */ "\x00\x00", "\x8c\xd5", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26b23 */ "\x87\x5e", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b28 */ "\xfb\xda", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15279,27 +15445,27 @@ static const char from_ucs4[][2] =
+   /* 0x26b4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b50 */ "\x8b\x4c", "\xfd\x75", "\x9b\xdd", "\xfa\xf5", "\x00\x00",
+   /* 0x26b54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26b59 */ "\x00\x00", "\x9c\x74", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26b72 */ "\x00\x00", "\x00\x00", "\x95\x45", "\x00\x00", "\x00\x00",
+   /* 0x26b77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26b82 */ "\x96\xc6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26b96 */ "\x8f\x6a", "\x8f\x4e", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26b9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26b9a */ "\x00\x00", "\x00\x00", "\x9c\x78", "\x00\x00", "\x00\x00",
+   /* 0x26b9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26ba4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26ba9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26bae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfa\x55",
+   /* 0x26bb3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26bb8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26bbd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26bbd */ "\x00\x00", "\x00\x00", "\x97\xe4", "\x00\x00", "\x00\x00",
+   /* 0x26bc2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26bc7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26bcc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15325,8 +15491,8 @@ static const char from_ucs4[][2] =
+   /* 0x26c30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26c3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26c44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26c40 */ "\x96\xfa", "\x8c\xf6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26c44 */ "\x00\x00", "\x8d\x4d", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15345,16 +15511,16 @@ static const char from_ucs4[][2] =
+   /* 0x26c94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26c9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26ca3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26ca4 */ "\x9c\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26ca8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cb2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xfb",
+   /* 0x26cb8 */ "\x90\xca", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cbd */ "\x9c\x5b", "\x00\x00", "\x00\x00", "\x97\x4d", "\x00\x00",
+-  /* 0x26cc1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26cc1 */ "\x00\x00", "\x8e\xd3", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cc6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26ccb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26cd0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26cd1 */ "\x95\x61", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cd5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26cdf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15379,14 +15545,14 @@ static const char from_ucs4[][2] =
+   /* 0x26d3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26d4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26d4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\x41", "\x00\x00",
+   /* 0x26d52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d6b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26d70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26d70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xd3", "\x00\x00",
+   /* 0x26d75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26d7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15398,7 +15564,7 @@ static const char from_ucs4[][2] =
+   /* 0x26d9d */ "\x00\x00", "\x00\x00", "\xfc\xfd", "\xfd\xab", "\x91\xbd",
+   /* 0x26da3 */ "\x8f\x4c", "\x96\xc9", "\x8f\x55", "\xfb\xae", "\x95\x6f",
+   /* 0x26da7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26dac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26dac */ "\x00\x00", "\x9c\x7d", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26db1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26db6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26dbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15414,11 +15580,11 @@ static const char from_ucs4[][2] =
+   /* 0x26ded */ "\x00\x00", "\x00\x00", "\x96\xcb", "\x00\x00", "\x00\x00",
+   /* 0x26df2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26df7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26dfc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26dfc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xce", "\x00\x00",
+   /* 0x26e01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\x56", "\x00\x00",
+-  /* 0x26e06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26e07 */ "\x9c\xe1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26e10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26e10 */ "\x00\x00", "\x96\xc4", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15441,11 +15607,11 @@ static const char from_ucs4[][2] =
+   /* 0x26e74 */ "\x00\x00", "\x00\x00", "\x8f\x6b", "\x00\x00", "\x00\x00",
+   /* 0x26e79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26e84 */ "\x96\xca", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26e88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26e84 */ "\x96\xca", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\xcd",
++  /* 0x26e88 */ "\x00\x00", "\x00\x00", "\x87\x53", "\x00\x00", "\x00\x00",
+   /* 0x26e8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26e97 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26e97 */ "\x00\x00", "\x8f\x79", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26e9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26ea1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26ea6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15503,7 +15669,7 @@ static const char from_ucs4[][2] =
+   /* 0x26faa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26faf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26fb4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x26fb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x26fb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xd6",
+   /* 0x26fbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26fc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x26fc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15532,7 +15698,7 @@ static const char from_ucs4[][2] =
+   /* 0x2703b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27040 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27045 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2704a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2704b */ "\x9c\xa3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2704f */ "\x00\x00", "\x00\x00", "\x92\x4b", "\x98\x4a", "\x00\x00",
+   /* 0x27054 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27059 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15544,7 +15710,7 @@ static const char from_ucs4[][2] =
+   /* 0x27077 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2707c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27081 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27086 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27086 */ "\x00\x00", "\x8f\xa4", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2708b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27090 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27095 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15559,7 +15725,7 @@ static const char from_ucs4[][2] =
+   /* 0x270c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x270c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x270cd */ "\x8f\xa7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x270d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x270d2 */ "\x87\x54", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x270d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x270db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x270e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15570,7 +15736,7 @@ static const char from_ucs4[][2] =
+   /* 0x270f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x270fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27103 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27109 */ "\x98\x45", "\x00\x00", "\x00\x00", "\x90\x46", "\x00\x00",
++  /* 0x27109 */ "\x98\x45", "\x00\x00", "\x00\x00", "\x90\x46", "\x8c\xd1",
+   /* 0x2710d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27112 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27117 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15591,209 +15757,509 @@ static const char from_ucs4[][2] =
+   /* 0x27162 */ "\x00\x00", "\x9f\x48", "\x92\x47", "\x00\x00", "\x00\x00",
+   /* 0x27167 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2716c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27171 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xfb",
+-
+-  /* 0x2721b */ "\x95\x71",
+-
+-  /* 0x272e6 */ "\x9c\xac",
++  /* 0x27171 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xfb", "\x00\x00",
++  /* 0x27176 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2717b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27180 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27185 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2718a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2718f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27194 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27199 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2719e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271cb */ "\x00\x00", "\x9c\xa4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x271fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27202 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27207 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2720c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27211 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27216 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x71",
++  /* 0x2721b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27220 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27225 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2722a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2722f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27234 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27239 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2723e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27243 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27248 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2724d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27252 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27257 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2725c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27261 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27267 */ "\x87\x45", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2726b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27270 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27275 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2727a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27280 */ "\x9c\xa6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27285 */ "\x9c\xa7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27289 */ "\x00\x00", "\x9c\xaa", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2728e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27293 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27298 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2729d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272b2 */ "\x9e\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x70",
++  /* 0x272b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272e3 */ "\x00\x00", "\x00\x00", "\x9c\xac", "\x00\x00", "\x00\x00",
++  /* 0x272e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x272fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27301 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27306 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2730b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27310 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27315 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2731a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2731f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27324 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27329 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2732e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27333 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27338 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2733d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27342 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27347 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2734c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27352 */ "\x87\x52", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27356 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2735b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27360 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27365 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2736a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2736f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27374 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27379 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2737e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27383 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27388 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2738d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27392 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27397 */ "\x00\x00", "\x00\x00", "\x8f\xae", "\x00\x00", "\x00\x00",
++  /* 0x2739c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x273fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\x50", "\x00\x00",
++  /* 0x27400 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27405 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2740a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2740f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27414 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27419 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2741e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\x7d", "\x00\x00",
++  /* 0x27423 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27428 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2742d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27432 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27437 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2743c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27441 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27446 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2744b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xb0",
++  /* 0x27450 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27455 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2745a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2745f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27464 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27469 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2746e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27473 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27478 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2747d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27482 */ "\x00\x00", "\x97\xb6", "\x00\x00", "\xa0\xbd",
+ 
+-  /* 0x2739a */ "\x8f\xae",
++  /* 0x27574 */ "\x8a\xdf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27578 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2757d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27582 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27587 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2758c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27591 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27596 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2759b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275a0 */ "\x00\x00", "\x00\x00", "\x9e\xaa", "\x00\x00", "\x00\x00",
++  /* 0x275a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xbd", "\x00\x00",
++  /* 0x275e1 */ "\x00\x00", "\x00\x00", "\x8f\xbf", "\x00\x00", "\x00\x00",
++  /* 0x275e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x275fa */ "\x00\x00", "\x00\x00", "\x93\x69", "\x9b\xa7", "\x00\x00",
++  /* 0x275ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27604 */ "\x00\x00", "\x00\x00", "\xc8\xa4", "\x00\x00", "\x00\x00",
++  /* 0x27609 */ "\x00\x00", "\x00\x00", "\xfe\xea", "\x00\x00", "\x00\x00",
++  /* 0x2760e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27613 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27618 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2761d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27622 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27627 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2762c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27632 */ "\x9b\xe1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27636 */ "\x00\x00", "\x00\x00", "\x8b\x41", "\x00\x00", "\x00\x00",
++  /* 0x2763b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27640 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27645 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2764a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2764f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27655 */ "\x9d\xb6", "\xa0\xeb", "\x9b\xa3", "\x00\x00", "\x00\x00",
++  /* 0x27659 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2765e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27663 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27668 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2766d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27672 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27677 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2767c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27681 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27686 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2768b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27690 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xa1", "\x00\x00",
++  /* 0x27695 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2769a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2769f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x276fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27703 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27708 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2770d */ "\x00\x00", "\x8f\xc8", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27712 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27717 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2771c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27721 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27726 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2772b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27730 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x89\x4c",
++  /* 0x27736 */ "\x98\x60", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2773a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2773f */ "\x00\x00", "\x94\xc7", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27744 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27749 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2774e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27753 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27758 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2775e */ "\x8b\x58", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27762 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27767 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2776c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27771 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27776 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2777b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27780 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xab", "\x95\xaa",
++  /* 0x27785 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2778a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2778f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27794 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27799 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2779e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x277cc */ "\x9c\xc3",
+ 
+-  /* 0x27422 */ "\x95\x7d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27426 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2742b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27430 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27435 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2743a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2743f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27444 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27449 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2744e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27453 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27458 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2745d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27462 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27467 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2746c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27471 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27476 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2747b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27480 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xb6", "\x00\x00",
+-  /* 0x27486 */ "\xa0\xbd",
+-
+-  /* 0x275e0 */ "\x8f\xbd", "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xbf",
+-  /* 0x275e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x275e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x275ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x275f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x275f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\x69",
+-  /* 0x275fe */ "\x9b\xa7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27602 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27607 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xea",
+-  /* 0x2760c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27611 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27616 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2761b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27620 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27625 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2762a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2762f */ "\x00\x00", "\x00\x00", "\x9b\xe1", "\x00\x00", "\x00\x00",
+-  /* 0x27634 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x41",
+-  /* 0x27639 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2763e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27643 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27648 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2764d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27652 */ "\x00\x00", "\x00\x00", "\x9d\xb6", "\xa0\xeb", "\x9b\xa3",
+-  /* 0x27657 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2765c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27661 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27666 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2766b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27670 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27675 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2767a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2767f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27684 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27689 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2768e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27694 */ "\x8b\xa1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27698 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2769d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x276fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27701 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27706 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2770b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xc8", "\x00\x00",
+-  /* 0x27710 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27715 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2771a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2771f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27724 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27729 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2772e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27733 */ "\x00\x00", "\x89\x4c", "\x98\x60", "\x00\x00", "\x00\x00",
+-  /* 0x27738 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2773d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x94\xc7", "\x00\x00",
+-  /* 0x27742 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27747 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2774c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27751 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27756 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2775b */ "\x00\x00", "\x00\x00", "\x8b\x58", "\x00\x00", "\x00\x00",
+-  /* 0x27760 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27765 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2776a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2776f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27774 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27779 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2777e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27784 */ "\x95\xab", "\x95\xaa",
+-
+-  /* 0x27870 */ "\x93\xd6",
+-
+-  /* 0x27924 */ "\x8f\xd1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27928 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2792d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27932 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27937 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2793c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27941 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27946 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2794b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27950 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27955 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2795a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2795f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27964 */ "\x00\x00", "\x00\x00", "\x99\xd5",
+-
+-  /* 0x27a0e */ "\xfb\xc8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a59 */ "\x8f\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a62 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27a9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27aa3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27aa8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27aad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ab2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ab7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27abd */ "\x8f\xd2", "\x90\x64", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ac1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ac6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27acb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ad0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ad5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ada */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27adf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ae4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27ae9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27aee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27af4 */ "\x98\xb6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27af8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27afd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b16 */ "\x00\x00", "\x98\xbd", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27b34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xdc", "\xfe\xf6",
+-  /* 0x27b3a */ "\x8f\xd9",
++  /* 0x27858 */ "\x9c\xc4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2785c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27861 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27866 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2786b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xd6",
++  /* 0x27870 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27875 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2787a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2787f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27884 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27889 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2788e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27893 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27898 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xac",
++  /* 0x2789d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278b2 */ "\x8b\xe6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278c5 */ "\x00\x00", "\x00\x00", "\x8a\x71", "\x00\x00", "\x00\x00",
++  /* 0x278ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x278fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27901 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27906 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2790b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27910 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27915 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2791a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2791f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xd1",
++  /* 0x27924 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27929 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2792e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27933 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27938 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2793d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27942 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27947 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2794c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27951 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27956 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2795b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27960 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27965 */ "\x00\x00", "\x99\xd5", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2796a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2796f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27974 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2797a */ "\x90\xf4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2797e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27983 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27988 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2798d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27992 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27997 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2799c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xa3", "\x00\x00",
++  /* 0x279a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xce",
++  /* 0x279dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x279fb */ "\x00\x00", "\x9c\xd4", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xd5",
++  /* 0x27a0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\xc8", "\x00\x00",
++  /* 0x27a0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a3c */ "\x00\x00", "\x9d\xb3", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a50 */ "\x00\x00", "\x00\x00", "\xfc\x70", "\x00\x00", "\x00\x00",
++  /* 0x27a55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xd7", "\x00\x00",
++  /* 0x27a5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a79 */ "\x9b\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a82 */ "\x00\x00", "\xfa\x5b", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27a9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27aa0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27aa5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27aaa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27aaf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ab4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ab9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xd2", "\x90\x64",
++  /* 0x27abe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ac3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ac8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27acd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ad2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ad7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27adc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ae1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ae6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27aeb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27af0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xb6", "\x00\x00",
++  /* 0x27af5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27afa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27aff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b04 */ "\x00\x00", "\x96\x68", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b09 */ "\x00\x00", "\x9c\xd6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xbd",
++  /* 0x27b18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b36 */ "\x00\x00", "\x8f\xdc", "\xfe\xf6", "\x8f\xd9", "\x00\x00",
++  /* 0x27b3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b45 */ "\x00\x00", "\x00\x00", "\x95\x41", "\x00\x00", "\x00\x00",
++  /* 0x27b4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27b63 */ "\x00\x00", "\x87\xca",
+ 
++  /* 0x27bef */ "\x87\x6c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27bf4 */ "\x97\xf3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27bf8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27bfd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27c02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27c07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27c0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27c12 */ "\x9b\xf8",
+-
++  /* 0x27c12 */ "\x9b\xf8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c1b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c20 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c2a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c2f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c39 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c3e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c43 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c48 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c4d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c52 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c57 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c5c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c61 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c66 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c6c */ "\x87\x5a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c70 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c75 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c7a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c7f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c84 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c89 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c8e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c93 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c98 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27c9d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ca2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ca7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x48",
++  /* 0x27cb1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cb6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x4a",
++  /* 0x27cc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ccf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cde */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ce3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ce8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ced */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cf2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cf7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27cfc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d15 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d24 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d2f */ "\x9e\x6c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d33 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15805,13 +16271,13 @@ static const char from_ucs4[][2] =
+   /* 0x27d56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27d65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d66 */ "\x9c\xd7", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\x6e", "\x00\x00",
+   /* 0x27d74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x27d83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27d84 */ "\x8a\x40", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d8d */ "\x00\x00", "\x8f\xef", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27d92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15853,121 +16319,191 @@ static const char from_ucs4[][2] =
+   /* 0x27e46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x27e4b */ "\x00\x00", "\x98\x6a", "\x00\x00", "\x97\xcf",
+ 
+-  /* 0x28002 */ "\x90\x41", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28006 */ "\x00\x00", "\x00\x00", "\x9c\xdb",
++  /* 0x27f2e */ "\x9e\xe5",
+ 
+-  /* 0x280bd */ "\x8b\x62", "\x8a\x4e", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x66",
+-  /* 0x280e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280f4 */ "\x9c\xfb", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x280fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28102 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28107 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2810c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28111 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28116 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2811b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28120 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28125 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2812a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xfc", "\x00\x00",
+-  /* 0x2812f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28134 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28139 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2813e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28143 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28148 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2814d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28152 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28157 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2815c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28161 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28166 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2816b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xe5",
+-
+-  /* 0x28207 */ "\x8b\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2820b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28210 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28215 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2821a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2821f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28224 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28229 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2822e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28233 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28238 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2823d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28242 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28247 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2824c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28251 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x61",
+-  /* 0x28256 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2825b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28260 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28265 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2826a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2826f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28274 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28279 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2827e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28283 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28288 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2828d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28292 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28297 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2829c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xa2", "\x00\x00",
+-  /* 0x282ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xf2",
+-  /* 0x282e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x282fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28300 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28305 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2830a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2830f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28314 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28319 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2831e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28323 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28328 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2832d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28332 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28337 */ "\x00\x00", "\x00\x00", "\x8e\xca", "\x00\x00", "\x00\x00",
+-  /* 0x2833c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28341 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28346 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2834b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28350 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28355 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2835a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2835f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28365 */ "\x90\x4e", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28369 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2836e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28373 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28378 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9f\xf5",
++  /* 0x27ff9 */ "\x9e\x7c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x27ffd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x41",
++  /* 0x28002 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28007 */ "\x00\x00", "\x9c\xdb", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2800c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28011 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28016 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2801b */ "\x00\x00", "\x00\x00", "\x94\x41", "\x00\x00", "\x00\x00",
++  /* 0x28020 */ "\x00\x00", "\x00\x00", "\x9c\xe6", "\x9d\xb0", "\x00\x00",
++  /* 0x28025 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2802a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2802f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28034 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28039 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2803e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28043 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xea",
++  /* 0x28048 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2804d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28052 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28057 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2805c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28061 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28066 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2806b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28070 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28075 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2807a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2807f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xed", "\x00\x00",
++  /* 0x28084 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28089 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2808e */ "\x00\x00", "\x9c\xfa", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28093 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28098 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2809d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280bb */ "\x00\x00", "\x8b\x62", "\x8a\x4e", "\x00\x00", "\x00\x00",
++  /* 0x280c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xca",
++  /* 0x280e9 */ "\x8a\x66", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280f2 */ "\x00\x00", "\x9c\xfb", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x280fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28101 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28106 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2810b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28110 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28115 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2811a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2811f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28124 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28129 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xfc",
++  /* 0x2812e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28133 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28138 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2813d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28142 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28147 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2814c */ "\x00\x00", "\x00\x00", "\x9c\xfe", "\x00\x00", "\x00\x00",
++  /* 0x28151 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28156 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2815b */ "\x00\x00", "\x8a\x53", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28160 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28165 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2816a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xe5",
++  /* 0x2816f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28174 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28179 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2817e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28183 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28189 */ "\x9d\x40", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2818d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28192 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28197 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2819c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x41", "\x00\x00",
++  /* 0x281b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281ba */ "\x00\x00", "\x90\x45", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x281fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28200 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28205 */ "\x00\x00", "\x8b\x73", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2820a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2820f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28214 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xca", "\x00\x00",
++  /* 0x2821a */ "\x9d\x42", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2821e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28223 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28228 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2822d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28232 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28237 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2823c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28241 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28246 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2824b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28250 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28256 */ "\x8a\x61", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2825a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2825f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28264 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28269 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2826e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28273 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28278 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xae", "\x00\x00",
++  /* 0x2827d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28282 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28287 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2828c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28291 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28296 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xd2",
++  /* 0x2829b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xa2",
++  /* 0x282cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282e2 */ "\x9d\xf2", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x282ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28304 */ "\x00\x00", "\x9d\x43", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28309 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2830e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28313 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xdf",
++  /* 0x28318 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2831d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28322 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28327 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2832c */ "\x00\x00", "\x00\x00", "\x9d\x44", "\x00\x00", "\x00\x00",
++  /* 0x28331 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28336 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xca", "\x00\x00",
++  /* 0x2833b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28340 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28345 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2834a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2834f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28354 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28359 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2835e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28363 */ "\x00\x00", "\x90\x4e", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28368 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xb3",
++  /* 0x2836d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28372 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28377 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2837d */ "\x9f\xf5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28381 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28386 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x45",
+ 
+   /* 0x28412 */ "\x90\x4f", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x28416 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -15986,73 +16522,143 @@ static const char from_ucs4[][2] =
+   /* 0x28457 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2845c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x28461 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28466 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2846b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28470 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28466 */ "\x00\x00", "\x9d\x47", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2846c */ "\x89\xca", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28470 */ "\x00\x00", "\x00\x00", "\x9c\xb5", "\x00\x00", "\x00\x00",
+   /* 0x28475 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2847a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2847f */ "\x00\x00", "\x00\x00", "\xfb\xfe",
+-
+-  /* 0x2853c */ "\x90\x63", "\x90\x57", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28540 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28545 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2854a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2854f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28554 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28559 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2855e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28563 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28568 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x66",
+-
+-  /* 0x285f4 */ "\xfc\xe5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x285f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x285fd */ "\x00\x00", "\x00\x00", "\x91\x62", "\x00\x00", "\x00\x00",
+-  /* 0x28602 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28607 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x67", "\x00\x00",
+-  /* 0x2860c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28611 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28616 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2861b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28620 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xa1",
+-  /* 0x28625 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2862a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2862f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28634 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28639 */ "\x00\x00", "\x8f\xa2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2863e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28643 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28648 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2864d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28652 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28657 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2865c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28661 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28666 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2866b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28670 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28675 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2867a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2867f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28684 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28689 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2868e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28693 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28698 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2869d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286a7 */ "\x00\x00", "\x00\x00", "\x9d\x48", "\xfa\xd3", "\x00\x00",
+-  /* 0x286ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xb9", "\x00\x00",
+-  /* 0x286d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x286e3 */ "\x00\x00", "\x00\x00", "\x90\x6b",
++  /* 0x2847f */ "\x00\x00", "\x00\x00", "\xfb\xfe", "\x00\x00", "\x00\x00",
++  /* 0x28484 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28489 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2848e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28493 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28498 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2849d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x284fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x5e",
++  /* 0x28501 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28506 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2850b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28510 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28515 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2851a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2851f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28524 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28529 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2852e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28533 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28538 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x63", "\x90\x57",
++  /* 0x2853d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28542 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28547 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2854c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28551 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28556 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2855b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28560 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28565 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2856a */ "\x00\x00", "\x90\x66", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2856f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28574 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28579 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2857e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28583 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28588 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2858d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28592 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28597 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2859c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285e8 */ "\x9b\xc0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285f1 */ "\x00\x00", "\x00\x00", "\xfc\xe5", "\x00\x00", "\x00\x00",
++  /* 0x285f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x285fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x62",
++  /* 0x28600 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28605 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2860b */ "\x90\x67", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2860f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28614 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28619 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2861e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28623 */ "\x00\x00", "\x8f\xa1", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28628 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2862d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28632 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28637 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xa2", "\x00\x00",
++  /* 0x2863c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28641 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28646 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2864b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28650 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28655 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2865a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2865f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28664 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28669 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2866e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28673 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28678 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2867d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28682 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28687 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2868c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28691 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28696 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2869b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x48",
++  /* 0x286ab */ "\xfa\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286af */ "\x00\x00", "\x00\x00", "\x8d\x4f", "\x00\x00", "\x00\x00",
++  /* 0x286b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286b9 */ "\x00\x00", "\x00\x00", "\x90\x5d", "\x00\x00", "\x00\x00",
++  /* 0x286be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286d8 */ "\x90\xb9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x6b",
++  /* 0x286e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x286ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28704 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28709 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2870f */ "\x8c\x5c", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x69",
+ 
+   /* 0x28804 */ "\xfe\x57", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x28808 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -16063,574 +16669,941 @@ static const char from_ucs4[][2] =
+   /* 0x28821 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x28826 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x55",
+ 
+-  /* 0x28933 */ "\x90\x73", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28937 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2893c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28941 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28946 */ "\x00\x00", "\x9b\xef", "\x9c\xf0", "\x00\x00", "\x00\x00",
+-  /* 0x2894b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28950 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28955 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2895a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2895f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28964 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28969 */ "\x00\x00", "\x00\x00", "\x91\xe0", "\x00\x00", "\x00\x00",
+-  /* 0x2896e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28973 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28978 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2897e */ "\x91\xd8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28982 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28987 */ "\x00\x00", "\x96\x46", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2898c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28991 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28996 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2899b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289a5 */ "\x00\x00", "\x00\x00", "\x93\x60", "\x00\x00", "\xfa\x53",
+-  /* 0x289ab */ "\x9c\xd3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289b9 */ "\x00\x00", "\x00\x00", "\xfb\x40", "\x00\x00", "\x00\x00",
+-  /* 0x289be */ "\x00\x00", "\x8d\xe2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x94\x42",
+-  /* 0x289dc */ "\x00\x00", "\x90\x56", "\x00\x00", "\x00\x00", "\x98\x65",
+-  /* 0x289e1 */ "\x00\x00", "\x00\x00", "\xfa\x4a", "\x00\x00", "\x00\x00",
+-  /* 0x289e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xaf", "\x97\x5a",
+-  /* 0x289fb */ "\x93\x49", "\x97\x47", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x289ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a0f */ "\xa0\xf4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a13 */ "\x00\x00", "\x00\x00", "\x97\x78", "\x00\x00", "\x00\x00",
+-  /* 0x28a18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a22 */ "\x00\x00", "\x00\x00", "\x8f\xcf", "\x00\x00", "\x00\x00",
+-  /* 0x28a27 */ "\x00\x00", "\xfc\x60", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xdc", "\x96\x61",
+-  /* 0x28a46 */ "\x92\xec", "\x93\x5d", "\x8e\xde", "\x96\xfe", "\xfd\x4f",
+-  /* 0x28a4b */ "\x95\xde", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x98\xb0",
+-  /* 0x28a5a */ "\xa0\x40", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xbd",
+-  /* 0x28a82 */ "\x97\x7d", "\x97\xf5", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xac",
+-  /* 0x28a9b */ "\xfa\xda", "\x92\xc2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28a9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28aa4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28aa9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28aae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ab3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ab8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28abd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ac2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x7b", "\x00\x00",
+-  /* 0x28ac7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xfe", "\x94\x7b",
+-  /* 0x28acc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ad1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ad6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28adb */ "\x00\x00", "\x00\x00", "\xfa\xbe", "\xfd\x43", "\x90\xc6",
+-  /* 0x28ae1 */ "\x90\xa4", "\x90\xa8", "\x94\xa9", "\x00\x00", "\x90\xa9",
+-  /* 0x28ae5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28aea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28aef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28af4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28af9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28afe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x7d", "\x00\x00",
+-  /* 0x28b0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfd\xba",
+-  /* 0x28b22 */ "\x93\xc4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xed",
+-  /* 0x28b2c */ "\x9d\xab", "\xa0\xe3", "\x00\x00", "\x96\x48", "\x00\x00",
+-  /* 0x28b30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b49 */ "\x00\x00", "\x00\x00", "\x8a\xa9", "\x00\x00", "\x9b\xc5",
+-  /* 0x28b4e */ "\x00\x00", "\x96\x5d", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b63 */ "\x97\x5f", "\x96\x5f", "\x96\x6e", "\xfb\x5d", "\x00\x00",
+-  /* 0x28b67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xb1",
+-  /* 0x28b6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xa3",
+-  /* 0x28b8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28b94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\xb2",
+-  /* 0x28b99 */ "\x00\x00", "\x00\x00", "\x95\xae", "\xfc\xa3", "\x00\x00",
+-  /* 0x28b9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ba3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ba8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bb2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bbc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bc2 */ "\xa0\xa2", "\x00\x00", "\x00\x00", "\x96\x55", "\x00\x00",
+-  /* 0x28bc6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bcb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bd0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bd5 */ "\x00\x00", "\x93\x41", "\x00\x00", "\x95\xad", "\x91\xd5",
+-  /* 0x28bda */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bdf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28be4 */ "\x00\x00", "\x00\x00", "\x97\x7a", "\xfd\xfc", "\x8e\x47",
+-  /* 0x28bea */ "\x93\xfd", "\x90\xa5", "\x90\xac", "\x00\x00", "\x00\x00",
+-  /* 0x28bee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bf3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bf8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28bfd */ "\x00\x00", "\x90\xae", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c02 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c07 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c0c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c11 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c16 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c1b */ "\x00\x00", "\x95\xe2", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c20 */ "\x00\x00", "\x00\x00", "\x94\x66", "\x00\x00", "\x00\x00",
+-  /* 0x28c25 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c2b */ "\x91\xb8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c30 */ "\x9c\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28c34 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xad",
++  /* 0x2890d */ "\x87\xa6", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28911 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28916 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2891b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28920 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28925 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2892a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2892f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x73", "\x00\x00",
++  /* 0x28934 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28939 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2893e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28943 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9b\xef",
++  /* 0x28949 */ "\x9c\xf0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2894d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28952 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x4b", "\x00\x00",
++  /* 0x28957 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2895c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28961 */ "\x00\x00", "\x00\x00", "\xfe\xd9", "\x00\x00", "\x00\x00",
++  /* 0x28966 */ "\x00\x00", "\xfe\xda", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2896c */ "\x91\xe0", "\x8d\x43", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28970 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28975 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2897a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xd8", "\x00\x00",
++  /* 0x2897f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28984 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\x46",
++  /* 0x28989 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2898e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28993 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28998 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2899d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289a8 */ "\x93\x60", "\x00\x00", "\xfa\x53", "\x9c\xd3", "\x00\x00",
++  /* 0x289ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289b6 */ "\x00\x00", "\x9d\x4e", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289bc */ "\xfb\x40", "\x00\x00", "\x00\x00", "\x00\x00", "\x8d\xe2",
++  /* 0x289c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289d9 */ "\x00\x00", "\x00\x00", "\x94\x42", "\x00\x00", "\x90\x56",
++  /* 0x289de */ "\x00\x00", "\x00\x00", "\x98\x65", "\x00\x00", "\x8c\x6c",
++  /* 0x289e4 */ "\xfa\x4a", "\x00\x00", "\x00\x00", "\x9d\x50", "\x9d\x52",
++  /* 0x289e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x289f7 */ "\x00\x00", "\x95\xaf", "\x97\x5a", "\x93\x49", "\x97\x47",
++  /* 0x289fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a01 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a06 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a0b */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xf4", "\x00\x00",
++  /* 0x28a10 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a16 */ "\x97\x78", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a1a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a1f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a25 */ "\x8f\xcf", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x60",
++  /* 0x28a29 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a2e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\x4e", "\x00\x00",
++  /* 0x28a33 */ "\x00\x00", "\x00\x00", "\xfc\x56", "\x00\x00", "\x00\x00",
++  /* 0x28a38 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a3d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a42 */ "\x00\x00", "\x91\xdc", "\x96\x61", "\x92\xec", "\x93\x5d",
++  /* 0x28a48 */ "\x8e\xde", "\x96\xfe", "\xfd\x4f", "\x95\xde", "\x00\x00",
++  /* 0x28a4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a56 */ "\x00\x00", "\x00\x00", "\x98\xb0", "\xa0\x40", "\x00\x00",
++  /* 0x28a5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a79 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a7e */ "\x00\x00", "\x00\x00", "\x97\xbd", "\x97\x7d", "\x97\xf5",
++  /* 0x28a83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28a97 */ "\x00\x00", "\x00\x00", "\x9b\xac", "\xfa\xda", "\x92\xc2",
++  /* 0x28a9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28aa1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28aa6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28aab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ab0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ab5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28aba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ac0 */ "\x97\xb1", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ac4 */ "\x00\x00", "\x90\x7b", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ac9 */ "\x00\x00", "\x93\xfe", "\x94\x7b", "\x00\x00", "\x97\x77",
++  /* 0x28ace */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ad3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ad8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ade */ "\xfa\xbe", "\xfd\x43", "\x90\xc6", "\x90\xa4", "\x90\xa8",
++  /* 0x28ae3 */ "\x94\xa9", "\x00\x00", "\x90\xa9", "\x00\x00", "\x00\x00",
++  /* 0x28ae7 */ "\x00\x00", "\x00\x00", "\x8c\x65", "\x00\x00", "\x00\x00",
++  /* 0x28aec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28af1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28af6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28afc */ "\x95\xe0", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b0a */ "\x00\x00", "\x90\x7d", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x92\x65", "\x00\x00",
++  /* 0x28b14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b1e */ "\x00\x00", "\x00\x00", "\xfd\xba", "\x93\xc4", "\x00\x00",
++  /* 0x28b23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b28 */ "\x00\x00", "\x00\x00", "\xfe\xed", "\x9d\xab", "\xa0\xe3",
++  /* 0x28b2d */ "\x00\x00", "\x96\x48", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x53",
++  /* 0x28b46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b4c */ "\x8a\xa9", "\x00\x00", "\x9b\xc5", "\x00\x00", "\x96\x5d",
++  /* 0x28b50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\x5f", "\x96\x5f",
++  /* 0x28b65 */ "\x96\x6e", "\xfb\x5d", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b69 */ "\x00\x00", "\x00\x00", "\x9d\xb1", "\x00\x00", "\x00\x00",
++  /* 0x28b6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b8c */ "\x00\x00", "\x00\x00", "\xfe\xa3", "\x00\x00", "\x00\x00",
++  /* 0x28b91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28b96 */ "\x00\x00", "\x00\x00", "\x9d\xb2", "\x00\x00", "\x00\x00",
++  /* 0x28b9c */ "\x95\xae", "\xfc\xa3", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ba0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ba5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28baa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28baf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bb4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x69",
++  /* 0x28bb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xa2", "\x00\x00",
++  /* 0x28bc3 */ "\x00\x00", "\x96\x55", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bcd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bd2 */ "\x00\x00", "\x9d\x54", "\x00\x00", "\x00\x00", "\x93\x41",
++  /* 0x28bd7 */ "\x00\x00", "\x95\xad", "\x91\xd5", "\x00\x00", "\x00\x00",
++  /* 0x28bdc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28be1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28be7 */ "\x97\x7a", "\xfd\xfc", "\x8e\x47", "\x93\xfd", "\x90\xa5",
++  /* 0x28bec */ "\x90\xac", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bf0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xac",
++  /* 0x28bf5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28bfa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xae",
++  /* 0x28bff */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xa5", "\x00\x00",
++  /* 0x28c04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x56",
++  /* 0x28c09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28c0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28c13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28c18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xe3", "\x95\xe2",
++  /* 0x28c1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28c23 */ "\x94\x66", "\x00\x00", "\x00\x00", "\x96\x47", "\x00\x00",
++  /* 0x28c27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xb8", "\x00\x00",
++  /* 0x28c2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xec", "\x00\x00",
++  /* 0x28c31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28c36 */ "\x00\x00", "\x00\x00", "\x90\xad", "\x00\x00", "\x95\xe3",
+ 
+-  /* 0x28ccd */ "\x8a\xe3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cd1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cd6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cdb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ce0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ce5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cf4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cf9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28cfe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28d30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xea",
++  /* 0x28cca */ "\x8b\x4f", "\x00\x00", "\x00\x00", "\x8a\xe3", "\x00\x00",
++  /* 0x28cce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x4d", "\x00\x00",
++  /* 0x28cd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28cd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28cdd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ce2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ce7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28cec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28cf1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28cf6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28cfb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d05 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d32 */ "\x00\x00", "\x95\xea", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28d96 */ "\x00\x00", "\x00\x00", "\x8b\x4e", "\x00\x00", "\x00\x00",
++  /* 0x28d9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28da0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28da5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28daa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28daf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28db4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xc1",
++  /* 0x28db9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dbe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dc3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dc8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dcd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dd2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dd7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ddc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28de1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28de6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28deb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28df0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28df5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dfa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28dff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e0f */ "\x8b\xed", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e22 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xd9",
++  /* 0x28e36 */ "\x00\x00", "\x00\x00", "\xa0\xa4", "\x00\x00", "\x00\x00",
++  /* 0x28e3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e63 */ "\x00\x00", "\x95\xf5", "\x95\xf4", "\x00\x00", "\x00\x00",
++  /* 0x28e68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e95 */ "\x00\x00", "\x9f\xb3", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28e9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ea4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ea9 */ "\x00\x00", "\x00\x00", "\xfe\xaf", "\x00\x00", "\x00\x00",
++  /* 0x28eae */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x72", "\x92\x7a",
++  /* 0x28eb3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28eb8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ebd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ec2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ec7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ecc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ed1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ed6 */ "\x00\x00", "\x00\x00", "\xfe\xac", "\x00\x00", "\x00\x00",
++  /* 0x28edb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ee0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x28ee5 */ "\x00\x00", "\x95\xf3",
+ 
+-  /* 0x28e36 */ "\x91\xd9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e4e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e53 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e58 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e5d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e62 */ "\x00\x00", "\x00\x00", "\x95\xf5", "\x95\xf4", "\x00\x00",
+-  /* 0x28e67 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e6c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e71 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e76 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e7b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e80 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e85 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e8a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e8f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e94 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e99 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28e9e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ea3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ea8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ead */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\x72",
+-  /* 0x28eb3 */ "\x92\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28eb7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ebc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ec1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ec6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ecb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ed0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x28ed5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xac",
++  /* 0x28fc5 */ "\x9d\x58",
+ 
+-  /* 0x2908b */ "\x91\xc5", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2908f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29094 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29099 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2909e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290ad */ "\x00\x00", "\x90\xcd", "\x95\xfe", "\x91\x59", "\x00\x00",
+-  /* 0x290b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x97\xcc",
+-  /* 0x290e5 */ "\x90\xce", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x290fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29102 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29107 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2910d */ "\xfe\xfd", "\x00\x00", "\x00\x00", "\x9d\x5b",
++  /* 0x29079 */ "\x8d\x46", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2907d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29082 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29088 */ "\x93\x72", "\x00\x00", "\x00\x00", "\x91\xc5", "\x00\x00",
++  /* 0x2908c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29091 */ "\x00\x00", "\x96\x42", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29096 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2909b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xcd",
++  /* 0x290b0 */ "\x95\xfe", "\x91\x59", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290be */ "\x00\x00", "\x9c\x65", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290e1 */ "\x00\x00", "\x00\x00", "\x97\xcc", "\x90\xce", "\x00\x00",
++  /* 0x290e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290ec */ "\x9d\x59", "\xfc\xf5", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x290ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29104 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29109 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfe\xfd", "\x00\x00",
++  /* 0x2910e */ "\x00\x00", "\x9d\x5b", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29113 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29118 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2911d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29122 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29127 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2912c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29131 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29136 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2913c */ "\x9d\x5c", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29140 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29145 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2914a */ "\x00\x00", "\x00\x00", "\x93\x7e", "\x00\x00", "\x00\x00",
++  /* 0x2914f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29154 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29159 */ "\x00\x00", "\x98\xac", "\x00\x00", "\x00\x00", "\x9d\x5e",
++  /* 0x2915e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29163 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29168 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2916d */ "\x00\x00", "\x00\x00", "\xfd\xd0", "\x00\x00", "\x00\x00",
++  /* 0x29172 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29177 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2917c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29181 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29186 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2918b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29190 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29195 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2919a */ "\x00\x00", "\xfd\x60", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2919f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xcf", "\x00\x00",
++  /* 0x291a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xdd", "\x00\x00",
++  /* 0x291d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x291eb */ "\x90\xe0",
+ 
+-  /* 0x2919c */ "\xfd\x60", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291a5 */ "\x00\x00", "\x00\x00", "\x9c\xcf", "\x00\x00", "\x00\x00",
+-  /* 0x291aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x291e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\xe0",
+-
+-  /* 0x2941d */ "\x90\xf3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2941d */ "\x90\xf3", "\x00\x00", "\x00\x00", "\x98\xb1", "\x00\x00",
+   /* 0x29421 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29426 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2942b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29430 */ "\x00\x00", "\x00\x00", "\x90\xf0", "\x00\x00", "\x00\x00",
+   /* 0x29435 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2943a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2943a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xbd",
+   /* 0x2943f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29444 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x95\xb7",
+ 
+-  /* 0x294d9 */ "\x8e\x4b", "\x96\x58",
++  /* 0x294d0 */ "\x9f\x46", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x294d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\x4b",
++  /* 0x294da */ "\x96\x58", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x294de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x294e3 */ "\x00\x00", "\x8a\x4c", "\x00\x00", "\x9d\x63",
+ 
+   /* 0x2959e */ "\x9e\xcf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x295ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x295ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x65", "\x00\x00",
+   /* 0x295b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x295b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x295b6 */ "\x00\x00", "\x9d\x66", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x295d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x295d4 */ "\x00\x00", "\x00\x00", "\x96\x5a", "\x00\x00", "\x00\x00",
+   /* 0x295d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x295e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x295e9 */ "\x9d\x64",
++  /* 0x295e9 */ "\x9d\x64", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x295ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x295f2 */ "\x00\x00", "\x8a\x6c",
++
++  /* 0x29720 */ "\x8a\xd9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29724 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29729 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2972e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x67",
+ 
+-  /* 0x29857 */ "\x91\x50", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2985b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29860 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29865 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2986a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2986f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29874 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29879 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2987e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29883 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29888 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2988d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29892 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29897 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2989c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298a1 */ "\x00\x00", "\x00\x00", "\x9c\xc1", "\x00\x00", "\x00\x00",
+-  /* 0x298a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298e7 */ "\x00\x00", "\x00\x00", "\x93\xa7", "\x00\x00", "\x00\x00",
+-  /* 0x298ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x298fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29900 */ "\x00\x00", "\x00\x00", "\xa0\xef", "\x00\x00", "\x91\x51",
+-  /* 0x29905 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2990a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2990f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29914 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29919 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2991e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29923 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29928 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2992d */ "\x00\x00", "\x96\xc1", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29932 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29937 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2993c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29941 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29946 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2994b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29950 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29955 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2995a */ "\x00\x00", "\x00\x00", "\xfc\xa4", "\x00\x00", "\x00\x00",
+-  /* 0x2995f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29964 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2996a */ "\x9d\x6a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2996e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29973 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29978 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2997d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29982 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29987 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2998c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29991 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29996 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2999b */ "\x00\x00", "\x92\x4e",
++  /* 0x297d4 */ "\x8a\x70", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297ec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297f1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297f6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x297fb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29800 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29805 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2980a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29810 */ "\x8b\xf3", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29814 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29819 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2981e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29823 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29828 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2982d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29832 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29837 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2983c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29841 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29846 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2984b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29850 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29855 */ "\x00\x00", "\x91\x50", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2985a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2985f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29864 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29869 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2986e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29873 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29878 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2987d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29882 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29887 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2988c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29891 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29896 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2989b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xc1", "\x00\x00",
++  /* 0x298a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298aa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298b4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x68", "\x00\x00",
++  /* 0x298d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298dc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xa7", "\x00\x00",
++  /* 0x298eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298f1 */ "\x96\x74", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8c\xfd",
++  /* 0x298fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x298ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\xef", "\x00\x00",
++  /* 0x29905 */ "\x91\x51", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29909 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2990e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29913 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29918 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2991d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29922 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29927 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2992c */ "\x00\x00", "\x00\x00", "\x96\xc1", "\x00\x00", "\x00\x00",
++  /* 0x29931 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29936 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2993b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29940 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x87\x77",
++  /* 0x29945 */ "\x00\x00", "\x8c\x64", "\x96\x76", "\x9d\x69", "\x00\x00",
++  /* 0x2994a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2994f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29954 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29959 */ "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\xa4", "\x00\x00",
++  /* 0x2995e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29963 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29968 */ "\x00\x00", "\x9d\x6a", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2996d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29972 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29977 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2997c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29981 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29986 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2998b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29990 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29995 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2999a */ "\x00\x00", "\x00\x00", "\x92\x4e", "\x00\x00", "\x00\x00",
++  /* 0x2999f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299b3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299b8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299c3 */ "\x9d\x6b", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299c7 */ "\x00\x00", "\x9b\xc1", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x299fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a21 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a26 */ "\x00\x00", "\x9d\x6c", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a30 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a35 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a3a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a3f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a44 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29a49 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\x65",
+ 
+   /* 0x29b05 */ "\x91\x5d", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29b09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x6d",
+ 
+   /* 0x29bd5 */ "\x91\x5a",
+ 
+-  /* 0x29cad */ "\x9c\xc0",
++  /* 0x29c73 */ "\x8c\x42", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29c9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ca4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ca9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xc0",
+ 
+   /* 0x29d3e */ "\x91\x6a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d42 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d47 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d4c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d51 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29d56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29d56 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9d\x6e", "\x00\x00",
+   /* 0x29d5b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d60 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d65 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d6a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d6f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x29d74 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29d79 */ "\x00\x00", "\x00\x00", "\x9e\xa6",
+-
+-  /* 0x29e2d */ "\x96\xb4", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e31 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e36 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e3b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e40 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e45 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e4a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e4f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e54 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e59 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e5e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e63 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x72",
+-  /* 0x29e68 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e6d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e72 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e77 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e7c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e81 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e86 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e8b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e90 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e95 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e9a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29e9f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ea4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ea9 */ "\x00\x00", "\x00\x00", "\x9e\xc8", "\x00\x00", "\x00\x00",
+-  /* 0x29eae */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29eb3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29eb8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ebd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ec3 */ "\x8b\x55", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ec7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ecc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ed1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ed6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29edb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ee0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ee5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29eea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29eef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ef4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29ef9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29efe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f03 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f08 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f0d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f12 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f17 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f1c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f21 */ "\x00\x00", "\x9d\x72", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f26 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x29f2b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xcc",
+-
+-  /* 0x29fb7 */ "\x91\x74",
+-
+-  /* 0x2a0e1 */ "\x91\x77", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a0e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a0ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a0ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xc0", "\x00\x00",
+-  /* 0x2a0f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8f\xb1", "\x00\x00",
+-  /* 0x2a0f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xb7",
+-  /* 0x2a0fe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a103 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a108 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a10d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a112 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a117 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a11c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a121 */ "\x00\x00", "\x91\x78", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a126 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a12b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a130 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a135 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a13a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a13f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a144 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a149 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a14e */ "\x00\x00", "\xfb\x77", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a153 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a158 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a15d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a162 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a167 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a16c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a171 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a176 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a17b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a180 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a185 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a18a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a18f */ "\x00\x00", "\x00\x00", "\x91\x75", "\x91\xa3", "\x00\x00",
+-  /* 0x2a194 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a199 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a19e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1cb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1d0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1d5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1da */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x79",
+-  /* 0x2a1df */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1e4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1e9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1ee */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1f3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1f8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a1fd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a202 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a207 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a20c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a211 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a216 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a21b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xa4",
+-  /* 0x2a220 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a225 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a22a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a22f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xa6", "\x00\x00",
+-  /* 0x2a234 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a239 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a23e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a243 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a248 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a24d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a252 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a257 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a25c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a261 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a266 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a26b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a270 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a275 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a27a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a27f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a284 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a289 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a28e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a293 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a298 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a29d */ "\x00\x00", "\x90\x52", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2b2 */ "\xa0\x45", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2a2df */ "\x9c\xdd",
++  /* 0x29d79 */ "\x00\x00", "\x00\x00", "\x9e\xa6", "\x00\x00", "\x00\x00",
++  /* 0x29d7e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29d83 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29d88 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29d8d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29d92 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29d98 */ "\x9d\xcd", "\x00\x00", "\x00\x00", "\x9d\x6f", "\x00\x00",
++  /* 0x29d9c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29da1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29da6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29db0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29db5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dbf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dc4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dc9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dd3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dd8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ddd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29de2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29de7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dec */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29df1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x89\xbb",
++  /* 0x29df6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29dfb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e00 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e06 */ "\x9e\xf9", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e0a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e0f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e14 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e19 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e1e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e23 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e28 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xb4",
++  /* 0x29e2d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e32 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e37 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e3c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e41 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e46 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e4b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e50 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e55 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e5a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e5f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e64 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x72", "\x00\x00",
++  /* 0x29e69 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e6e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e73 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e78 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e7d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e82 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e87 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e8c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e91 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e96 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29e9b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ea0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ea5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29eaa */ "\x00\x00", "\x9e\xc8", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29eb0 */ "\x87\x71", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29eb4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29eb9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ebe */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x55",
++  /* 0x29ec3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ec8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ecd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ed2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ed7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29edc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ee1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ee6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29eeb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ef0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ef5 */ "\x00\x00", "\x00\x00", "\x9d\x71", "\x00\x00", "\x00\x00",
++  /* 0x29efa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29eff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f04 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f09 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f0e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f13 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f18 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f1d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f23 */ "\x9d\x72", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f27 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29f2c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xcc",
+ 
++  /* 0x29fb7 */ "\x91\x74", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fbb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fc0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fc5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fcf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fd4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fd9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x9e\xd0",
++  /* 0x29fde */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fe3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fe8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29fed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ff2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ff7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x29ffc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a001 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a006 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a00b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a010 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x5c", "\x00\x00",
++  /* 0x2a015 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a01a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a01f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a024 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a029 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a02e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a033 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a038 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a03d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a042 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a047 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a04c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a051 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a056 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a05b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a060 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a065 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a06a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a06f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a074 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a079 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a07e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a083 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8e\xd2", "\x00\x00",
++  /* 0x2a088 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a08d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a092 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a097 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a09c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\xa8", "\x00\x00",
++  /* 0x2a0ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0ce */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0d3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0d8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0dd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x77", "\x00\x00",
++  /* 0x2a0e2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0e7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0ed */ "\x96\xbf", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0f1 */ "\x00\x00", "\x96\xc0", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0f6 */ "\x00\x00", "\x8f\xb1", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a0fb */ "\x00\x00", "\x00\x00", "\x96\xb7", "\x00\x00", "\x00\x00",
++  /* 0x2a100 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a105 */ "\x00\x00", "\x8c\x55", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a10a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a10f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a114 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a119 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a11e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x91\x78",
++  /* 0x2a123 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a128 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a12d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a133 */ "\x89\xbe", "\x91\x7c", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a137 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a13c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a141 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a146 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a14b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfb\x77",
++  /* 0x2a150 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a155 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a15a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a15f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a164 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a169 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a16e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a173 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a178 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a17d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a182 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a187 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a18c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a192 */ "\x91\x75", "\x91\xa3", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a196 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a19b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1a0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1a5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1ab */ "\x91\x76", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1af */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xbe",
++  /* 0x2a1b5 */ "\x8d\x49", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1b9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1be */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1c3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1c8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1cd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1d2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1d7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1dc */ "\x00\x00", "\x00\x00", "\x91\x79", "\x00\x00", "\x00\x00",
++  /* 0x2a1e1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1e6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1eb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1f0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x96\xb6",
++  /* 0x2a1f5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1fa */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a1ff */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a204 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a209 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a20e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a213 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a218 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a21d */ "\x00\x00", "\x00\x00", "\x91\xa4", "\x00\x00", "\x00\x00",
++  /* 0x2a222 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a227 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a22c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a231 */ "\x00\x00", "\x91\xa6", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a236 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a23b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a240 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a245 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a24a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a24f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a254 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a259 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a25e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a263 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a268 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a26d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a272 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a277 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a27c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a281 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a286 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a28b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a290 */ "\x00\x00", "\x00\x00", "\x9d\x75", "\x00\x00", "\x00\x00",
++  /* 0x2a295 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a29a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x90\x52",
++  /* 0x2a29f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2a4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2a9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2ae */ "\x00\x00", "\x00\x00", "\x00\x00", "\xa0\x45", "\x00\x00",
++  /* 0x2a2b4 */ "\x91\xa9", "\x00\x00", "\x98\xaa", "\x00\x00", "\x00\x00",
++  /* 0x2a2b8 */ "\x00\x00", "\x8c\x5f", "\x00\x00", "\x00\x00", "\x8b\xaa",
++  /* 0x2a2bd */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2c2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2c7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2cc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2d1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2d6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2db */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\xdd", "\x00\x00",
++  /* 0x2a2e0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2e5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2ea */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2ef */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2f4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2f9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a2ff */ "\x9d\x77", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a303 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a308 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a30d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a312 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a317 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a31c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a321 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a326 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a32b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a330 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a335 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a33a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a33f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a344 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a349 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a34e */ "\x00\x00", "\x00\x00", "\x87\x56", "\x00\x00", "\x00\x00",
++  /* 0x2a353 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a358 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a35d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a362 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a367 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a36c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a371 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a376 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a37b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a380 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a385 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a38a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a38f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a394 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a399 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a39e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a3a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2a3a9 */ "\x89\x40",
+ 
+-  /* 0x2a5c6 */ "\x94\x78",
++  /* 0x2a434 */ "\x9e\xec", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a438 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a43d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a442 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a447 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a44c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a451 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a456 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x93\xaa",
+ 
+-  /* 0x2a6a9 */ "\x9e\x75",
++  /* 0x2a5c6 */ "\x94\x78", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5cb */ "\x9d\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5cf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5d4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5d9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5de */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5e3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5e8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5ed */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5f2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5f7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a5fc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xc9",
++  /* 0x2a601 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a606 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a60b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a610 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a615 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a61a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a61f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a624 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a629 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a62e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\x4b", "\x00\x00",
++  /* 0x2a633 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a638 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a63d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a642 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a647 */ "\x00\x00", "\x00\x00", "\x9f\xec", "\x00\x00", "\x00\x00",
++  /* 0x2a64c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a651 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a656 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x8a\xe2",
++  /* 0x2a65b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a660 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a665 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a66a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a66f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a674 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a679 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a67e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a683 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a688 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a68d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a692 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a697 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a69c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a6a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2a6a6 */ "\x00\x00", "\x00\x00", "\x9e\x75",
+ 
+-  /* 0x2f840 */ "\xa0\x47", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f844 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f849 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f84e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f853 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f858 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f85d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f862 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f867 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f86c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f871 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f876 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f87b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f880 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f885 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f88a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f88f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x48",
+-  /* 0x2f894 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f899 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f89e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8a3 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8a8 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8ad */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8b2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8b7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8bc */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8c1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8c6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f8cb */ "\x00\x00", "\x9c\x52",
++  /* 0x2adff */ "\x87\xdc",
++
++  /* 0x2f825 */ "\x98\x74", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f829 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f82e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f833 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f838 */ "\x00\x00", "\x00\x00", "\x9a\xc8", "\x00\x00", "\x00\x00",
++  /* 0x2f83d */ "\x00\x00", "\x00\x00", "\xa0\x47", "\x00\x00", "\x00\x00",
++  /* 0x2f842 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f847 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f84c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f851 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f856 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f85b */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f860 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f865 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f86a */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f86f */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f874 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x8b\xc3", "\x00\x00",
++  /* 0x2f879 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f87e */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f883 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f888 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f88d */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f892 */ "\x00\x00", "\xfc\x48", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f897 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f89c */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8a1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\xfc\x77",
++  /* 0x2f8a6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8ab */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8b0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8b5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8ba */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8bf */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8c4 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f8c9 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x9c\x52",
+ 
+   /* 0x2f994 */ "\x8e\xfd", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f998 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -16638,9 +17611,9 @@ static const char from_ucs4[][2] =
+   /* 0x2f9a2 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f9a7 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f9ac */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f9b1 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f9b2 */ "\x8f\xa8", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f9b6 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+-  /* 0x2f9bb */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
++  /* 0x2f9bc */ "\x95\x7a", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f9c0 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f9c5 */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+   /* 0x2f9ca */ "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00", "\x00\x00",
+@@ -16693,105 +17666,70 @@ static struct
+   { 0x1ebe, 0x1ec1,   761 },
+   { 0x2013, 0x203e,   765 },
+   { 0x2103, 0x22bf,   809 },
+-  { 0x2460, 0x247d,  1254 },
+-  { 0x2500, 0x2642,  1284 },
+-  { 0x273d, 0x273d,  1607 },
+-  { 0x2e80, 0x2f33,  1608 },
+-  { 0x3000, 0x3129,  1788 },
+-  { 0x3231, 0x32a3,  2086 },
+-  { 0x338e, 0x9fa5,  2201 },
+-  { 0xe003, 0xe9cb, 29873 },
+-  { 0xeaa9, 0xeeb7, 32378 },
+-  { 0xf303, 0xf572, 33417 },
+-  { 0xf6b0, 0xf6b0, 34041 },
+-  { 0xf7e5, 0xf7ee, 34042 },
+-  { 0xfa0c, 0xfa0d, 34052 },
+-  { 0xfe30, 0xfe6b, 34054 },
+-  { 0xff01, 0xffed, 34114 },
+-  { 0x2003e, 0x20068, 34351 },
+-  { 0x200ee, 0x20118, 34394 },
+-  { 0x201ab, 0x20630, 34437 },
+-  { 0x2070e, 0x20779, 35595 },
+-  { 0x2082c, 0x20873, 35703 },
+-  { 0x20916, 0x20979, 35775 },
+-  { 0x20a11, 0x20ab4, 35875 },
+-  { 0x20b8f, 0x214fd, 36039 },
+-  { 0x21596, 0x21a4b, 38454 },
+-  { 0x21b44, 0x21b44, 39660 },
+-  { 0x21ca2, 0x21ca5, 39661 },
+-  { 0x21d46, 0x21ed5, 39665 },
+-  { 0x21f6a, 0x21fa1, 40065 },
+-  { 0x22049, 0x221c3, 40121 },
+-  { 0x2227c, 0x2227c, 40500 },
+-  { 0x22321, 0x22325, 40501 },
+-  { 0x223bd, 0x223d0, 40506 },
+-  { 0x22465, 0x2248b, 40526 },
+-  { 0x22513, 0x22980, 40565 },
+-  { 0x22acf, 0x22e78, 41699 },
+-  { 0x22fe3, 0x2330a, 42637 },
+-  { 0x233b4, 0x237d7, 43445 },
+-  { 0x23adb, 0x23b5a, 44505 },
+-  { 0x23c99, 0x24578, 44633 },
+-  { 0x2462a, 0x2478f, 46905 },
+-  { 0x24823, 0x24823, 47263 },
+-  { 0x248f3, 0x24ae2, 47264 },
+-  { 0x24b6e, 0x24b6e, 47760 },
+-  { 0x24bf5, 0x24c09, 47761 },
+-  { 0x24c9e, 0x24d06, 47782 },
+-  { 0x24db8, 0x24e50, 47887 },
+-  { 0x24f0e, 0x24fc2, 48040 },
+-  { 0x2509d, 0x2509d, 48221 },
+-  { 0x25148, 0x25221, 48222 },
+-  { 0x252c7, 0x25313, 48440 },
+-  { 0x25425, 0x2546e, 48517 },
+-  { 0x2555b, 0x259ac, 48591 },
+-  { 0x25a9c, 0x25ae9, 49697 },
+-  { 0x25b74, 0x25d43, 49775 },
+-  { 0x25e0e, 0x25f4b, 50239 },
+-  { 0x25fe1, 0x262d0, 50557 },
+-  { 0x26351, 0x26626, 51309 },
+-  { 0x266af, 0x267cc, 52035 },
+-  { 0x2685e, 0x26911, 52321 },
+-  { 0x269a8, 0x26a52, 52501 },
+-  { 0x26b0a, 0x27175, 52672 },
+-  { 0x2721b, 0x2721b, 54316 },
+-  { 0x272e6, 0x272e6, 54317 },
+-  { 0x2739a, 0x2739a, 54318 },
+-  { 0x27422, 0x27486, 54319 },
+-  { 0x275e0, 0x27785, 54420 },
+-  { 0x27870, 0x27870, 54842 },
+-  { 0x27924, 0x27967, 54843 },
+-  { 0x27a0e, 0x27b3a, 54911 },
+-  { 0x27bf4, 0x27c12, 55212 },
+-  { 0x27d2f, 0x27e4f, 55243 },
+-  { 0x28002, 0x28009, 55532 },
+-  { 0x280bd, 0x2816f, 55540 },
+-  { 0x28207, 0x2837d, 55719 },
+-  { 0x28412, 0x28482, 56094 },
+-  { 0x2853c, 0x2856c, 56207 },
+-  { 0x285f4, 0x286e6, 56256 },
+-  { 0x28804, 0x2882b, 56499 },
+-  { 0x28933, 0x28c39, 56539 },
+-  { 0x28ccd, 0x28d34, 57314 },
+-  { 0x28e36, 0x28ed9, 57418 },
+-  { 0x2908b, 0x29110, 57582 },
+-  { 0x2919c, 0x291eb, 57716 },
+-  { 0x2941d, 0x29448, 57796 },
+-  { 0x294d9, 0x294da, 57840 },
+-  { 0x2959e, 0x295e9, 57842 },
+-  { 0x29857, 0x2999d, 57918 },
+-  { 0x29b05, 0x29b0e, 58245 },
+-  { 0x29bd5, 0x29bd5, 58255 },
+-  { 0x29cad, 0x29cad, 58256 },
+-  { 0x29d3e, 0x29d7c, 58257 },
+-  { 0x29e2d, 0x29f30, 58320 },
+-  { 0x29fb7, 0x29fb7, 58580 },
+-  { 0x2a0e1, 0x2a2df, 58581 },
+-  { 0x2a3a9, 0x2a3a9, 59092 },
+-  { 0x2a5c6, 0x2a5c6, 59093 },
+-  { 0x2a6a9, 0x2a6a9, 59094 },
+-  { 0x2f840, 0x2f8cd, 59095 },
+-  { 0x2f994, 0x2f9d4, 59237 }
++  { 0x23da, 0x23db,  1254 },
++  { 0x2460, 0x247d,  1256 },
++  { 0x2500, 0x2642,  1286 },
++  { 0x273d, 0x273d,  1609 },
++  { 0x2e80, 0x2f33,  1610 },
++  { 0x3000, 0x3129,  1790 },
++  { 0x31c0, 0x32a3,  2088 },
++  { 0x338e, 0x9fcb,  2316 },
++  { 0xf907, 0xf907, 30026 },
++  { 0xfa0c, 0xfa0d, 30027 },
++  { 0xfe30, 0xfe6b, 30029 },
++  { 0xff01, 0xffed, 30089 },
++  { 0x20021, 0x20118, 30326 },
++  { 0x201a4, 0x20676, 30574 },
++  { 0x2070e, 0x20779, 31809 },
++  { 0x2082c, 0x20b0d, 31917 },
++  { 0x20b8f, 0x21a63, 32655 },
++  { 0x21b44, 0x21cac, 36452 },
++  { 0x21d46, 0x2227c, 36813 },
++  { 0x22321, 0x22325, 38148 },
++  { 0x223bd, 0x22993, 38153 },
++  { 0x22a66, 0x22eef, 39648 },
++  { 0x22f74, 0x2331f, 40810 },
++  { 0x233b4, 0x2383a, 41750 },
++  { 0x239c2, 0x239c2, 42909 },
++  { 0x23aa7, 0x23b5a, 42910 },
++  { 0x23c63, 0x24b6e, 43090 },
++  { 0x24bf5, 0x24c09, 46942 },
++  { 0x24c9e, 0x24d13, 46963 },
++  { 0x24db8, 0x2509d, 47081 },
++  { 0x2512b, 0x25313, 47823 },
++  { 0x25419, 0x2549a, 48312 },
++  { 0x25531, 0x259cc, 48442 },
++  { 0x25a54, 0x25ae9, 49622 },
++  { 0x25b74, 0x25f4b, 49772 },
++  { 0x25fe1, 0x26626, 50756 },
++  { 0x266af, 0x26a52, 52362 },
++  { 0x26b05, 0x27486, 53294 },
++  { 0x27574, 0x277cc, 55728 },
++  { 0x27858, 0x27b65, 56329 },
++  { 0x27bef, 0x27e4f, 57111 },
++  { 0x27f2e, 0x27f2e, 57720 },
++  { 0x27ff9, 0x2838a, 57721 },
++  { 0x28412, 0x28713, 58635 },
++  { 0x28804, 0x2882b, 59405 },
++  { 0x2890d, 0x28c3b, 59445 },
++  { 0x28cca, 0x28ee7, 60260 },
++  { 0x28fc5, 0x28fc5, 60802 },
++  { 0x29079, 0x291eb, 60803 },
++  { 0x2941d, 0x29448, 61174 },
++  { 0x294d0, 0x294e7, 61218 },
++  { 0x2959e, 0x295f4, 61242 },
++  { 0x29720, 0x29732, 61329 },
++  { 0x297d4, 0x29a4d, 61348 },
++  { 0x29b05, 0x29b0e, 61982 },
++  { 0x29bd5, 0x29bd5, 61992 },
++  { 0x29c73, 0x29cad, 61993 },
++  { 0x29d3e, 0x29f30, 62052 },
++  { 0x29fb7, 0x2a3a9, 62551 },
++  { 0x2a434, 0x2a45b, 63562 },
++  { 0x2a5c6, 0x2a6a9, 63602 },
++  { 0x2adff, 0x2adff, 63830 },
++  { 0x2f825, 0x2f8cd, 63831 },
++  { 0x2f994, 0x2f9d4, 64000 }
+ };
+ 
+ /* Definitions used in the body of the `gconv' function.  */
+@@ -16800,57 +17738,168 @@ static struct
+ #define TO_LOOP			to_big5hkscs
+ #define DEFINE_INIT		1
+ #define DEFINE_FINI		1
+-#define MIN_NEEDED_FROM		1
+-#define MAX_NEEDED_FROM		2
+-#define MIN_NEEDED_TO		4
++#define FROM_LOOP_MIN_NEEDED_FROM	1
++#define FROM_LOOP_MAX_NEEDED_FROM	2
++#define FROM_LOOP_MIN_NEEDED_TO		4
++#define FROM_LOOP_MAX_NEEDED_TO		8
++#define TO_LOOP_MIN_NEEDED_FROM		4
++#define TO_LOOP_MAX_NEEDED_FROM		4
++#define TO_LOOP_MIN_NEEDED_TO		1
++#define TO_LOOP_MAX_NEEDED_TO		2
++#define PREPARE_LOOP \
++  int saved_state;							      \
++  int *statep = &data->__statep->__count;
++#define EXTRA_LOOP_ARGS		, statep
++
++
++/* Since we might have to reset input pointer we must be able to save
++   and restore the state.  */
++#define SAVE_RESET_STATE(Save) \
++  if (Save)								      \
++    saved_state = *statep;						      \
++  else									      \
++    *statep = saved_state
++
++
++/* During BIG5-HKSCS to UCS-4 conversion, the COUNT element of the state
++   contains the last UCS-4 character, shifted by 3 bits.
++   During UCS-4 to BIG5-HKSCS conversion, the COUNT element of the state
++   contains the last two bytes to be output, shifted by 3 bits.  */
++
++/* Since this is a stateful encoding we have to provide code which resets
++   the output state to the initial state.  This has to be done during the
++   flushing.  */
++#define EMIT_SHIFT_TO_INIT \
++  if (data->__statep->__count != 0)					      \
++    {									      \
++      if (FROM_DIRECTION)						      \
++	{								      \
++	  if (__builtin_expect (outbuf + 4 <= outend, 1))		      \
++	    {								      \
++	      /* Write out the last character.  */			      \
++	      *((uint32_t *) outbuf) = data->__statep->__count >> 3;	      \
++	      outbuf += sizeof (uint32_t);				      \
++	      data->__statep->__count = 0;				      \
++	    }								      \
++	  else								      \
++	    /* We don't have enough room in the output buffer.  */	      \
++	    status = __GCONV_FULL_OUTPUT;				      \
++	}								      \
++      else								      \
++	{								      \
++	  if (__builtin_expect (outbuf + 2 <= outend, 1))		      \
++	    {								      \
++	      /* Write out the last character.  */			      \
++	      uint32_t lasttwo = data->__statep->__count >> 3;		      \
++	      *outbuf++ = (lasttwo >> 8) & 0xff;			      \
++	      *outbuf++ = lasttwo & 0xff;				      \
++	      data->__statep->__count = 0;				      \
++	    }								      \
++	  else								      \
++	    /* We don't have enough room in the output buffer.  */	      \
++	    status = __GCONV_FULL_OUTPUT;				      \
++	}								      \
++    }
+ 
+ 
+ /* First define the conversion function from Big5 to UCS4.  */
+-#define MIN_NEEDED_INPUT	MIN_NEEDED_FROM
+-#define MAX_NEEDED_INPUT	MAX_NEEDED_FROM
+-#define MIN_NEEDED_OUTPUT	MIN_NEEDED_TO
++#define MIN_NEEDED_INPUT	FROM_LOOP_MIN_NEEDED_FROM
++#define MAX_NEEDED_INPUT	FROM_LOOP_MAX_NEEDED_FROM
++#define MIN_NEEDED_OUTPUT	FROM_LOOP_MIN_NEEDED_TO
++#define MAX_NEEDED_OUTPUT	FROM_LOOP_MAX_NEEDED_TO
+ #define LOOPFCT			FROM_LOOP
+ #define BODY \
+   {									      \
+-    uint32_t ch = *inptr;						      \
++    uint32_t ch;							      \
+ 									      \
+-    if (ch >= 0x81 && ch <= 0xfe)					      \
++    /* Determine whether there is a buffered character pending.  */	      \
++    ch = *statep >> 3;							      \
++    if (__builtin_expect (ch == 0, 1))					      \
+       {									      \
+-	/* Two-byte character.  First test whether the next byte	      \
+-	   is also available.  */					      \
+-	uint32_t ch2;							      \
+-	int idx;							      \
++	/* No - so look at the next input byte.  */			      \
++	ch = *inptr;							      \
+ 									      \
+-	if (__builtin_expect (inptr + 1 >= inend, 0))			      \
++	if (ch >= 0x81 && ch <= 0xfe)					      \
+ 	  {								      \
+-	    /* The second character is not available.  */		      \
+-	    result = __GCONV_INCOMPLETE_INPUT;				      \
+-	    break;							      \
+-	  }								      \
++	    /* Two-byte character.  First test whether the next byte	      \
++	       is also available.  */					      \
++	    uint32_t ch2;						      \
++	    int idx;							      \
+ 									      \
+-	ch2 = inptr[1];							      \
+-	/* See whether the second byte is in the correct range.  */	      \
+-	if (ch < 0x88 || ch2 < 0x40 || ch2 > 0xfe			      \
+-	    || (idx = (ch - 0x88) * 195 + ch2 - 0x40,			      \
+-		(ch = big5hkscs_to_ucs[idx]) == 0))			      \
++	    if (__builtin_expect (inptr + 1 >= inend, 0))		      \
++	      {								      \
++		/* The second character is not available.  */		      \
++		result = __GCONV_INCOMPLETE_INPUT;			      \
++		break;							      \
++	      }								      \
++									      \
++	    ch2 = inptr[1];						      \
++	    idx = (ch - 0x87) * 195 + ch2 - 0x40;			      \
++	    /* See whether the second byte is in the correct range.  */	      \
++	    if (ch < 0x87 || ch2 < 0x40 || ch2 > 0xfe			      \
++		|| (ch = big5hkscs_to_ucs[idx]) == 0)			      \
++	      {								      \
++		/* Check for special cases: combining characters.  */	      \
++		if (idx == 195 + 0x22 /* 8862 */)			      \
++		  {							      \
++		    ch = 0xca;						      \
++		    ch2 = 0x304;					      \
++		  }							      \
++		else if (idx == 195 + 0x24 /* 8864 */)			      \
++		  {							      \
++		    ch = 0xca;						      \
++		    ch2 = 0x30c;					      \
++		  }							      \
++		else if (idx == 195 + 0x63 /* 88a3 */)			      \
++		  {							      \
++		    ch = 0xea;						      \
++		    ch2 = 0x304;					      \
++		  }							      \
++		else if (idx == 195 + 0x65 /* 88a5 */)			      \
++		  {							      \
++		    ch = 0xea;						      \
++		    ch2 = 0x30c;					      \
++		  }							      \
++		else							      \
++		  /* This is illegal.  */				      \
++		  STANDARD_FROM_LOOP_ERR_HANDLER (1);			      \
++									      \
++		inptr += 2;						      \
++									      \
++		put32 (outptr, ch);					      \
++		outptr += 4;						      \
++									      \
++		/* See whether we have room for two characters.  */	      \
++		if (outptr + 4 <= outend)				      \
++		  {							      \
++		    put32 (outptr, ch2);				      \
++		    outptr += 4;					      \
++		    continue;						      \
++		  }							      \
++									      \
++		/* Otherwise store only the first character now, and	      \
++		   put the second one into the queue.  */		      \
++		*statep = ch2 << 3;					      \
++		/* Tell the caller why we terminate the loop.  */	      \
++		result = __GCONV_FULL_OUTPUT;				      \
++		break;							      \
++	      }								      \
++									      \
++	    inptr += 2;							      \
++	  }								      \
++	else if (__builtin_expect (ch == 0xff, 0))			      \
+ 	  {								      \
+-	    /* This is illegal.  */					      \
+ 	    STANDARD_FROM_LOOP_ERR_HANDLER (1);				      \
+ 	  }								      \
+-									      \
+-	inptr += 2;							      \
+-      }									      \
+-    else if (__builtin_expect (ch == 0xff, 0))				      \
+-      {									      \
+-	STANDARD_FROM_LOOP_ERR_HANDLER (1);				      \
++	else								      \
++	  ++inptr;							      \
+       }									      \
+-    else								      \
+-      ++inptr;								      \
+ 									      \
+     put32 (outptr, ch);							      \
+     outptr += 4;							      \
+   }
+ #define LOOP_NEED_FLAGS
++#define EXTRA_LOOP_DECLS	, int *statep
+ #define ONEBYTE_BODY \
+   {									      \
+     if (c <= 0x80)							      \
+@@ -16862,19 +17911,61 @@ static struct
+ 
+ 
+ /* Next, define the other direction.  */
+-#define MIN_NEEDED_INPUT	MIN_NEEDED_TO
+-#define MIN_NEEDED_OUTPUT	MIN_NEEDED_FROM
+-#define MAX_NEEDED_OUTPUT	MAX_NEEDED_FROM
++#define MIN_NEEDED_INPUT	TO_LOOP_MIN_NEEDED_FROM
++#define MAX_NEEDED_INPUT	TO_LOOP_MAX_NEEDED_FROM
++#define MIN_NEEDED_OUTPUT	TO_LOOP_MIN_NEEDED_TO
++#define MAX_NEEDED_OUTPUT	TO_LOOP_MAX_NEEDED_TO
+ #define LOOPFCT			TO_LOOP
+ #define BODY \
+   {									      \
+     uint32_t ch = get32 (inptr);					      \
+ 									      \
++    if ((*statep >> 3) != 0)						      \
++      {									      \
++	/* Attempt to combine the last character with this one.  */	      \
++	uint16_t lasttwo = *statep >> 3;				      \
++									      \
++	if (ch == 0x304 && lasttwo == 0x8866)				      \
++	  ch = 0x8862;							      \
++	else if (ch == 0x30c && lasttwo == 0x8866)			      \
++	  ch = 0x8864;							      \
++	else if (ch == 0x304 && lasttwo == 0x88a7)			      \
++	  ch = 0x88a3;							      \
++	else if (ch == 0x30c && lasttwo == 0x88a7)			      \
++	  ch = 0x88a5;							      \
++	else								      \
++	  goto not_combining;						      \
++									      \
++	/* Output the combined character.  */				      \
++	if (__builtin_expect (outptr + 1 >= outend, 0))			      \
++	  {								      \
++	    result = __GCONV_FULL_OUTPUT;				      \
++	    break;							      \
++	  }								      \
++	*outptr++ = (ch >> 8) & 0xff;					      \
++	*outptr++ = ch & 0xff;						      \
++	*statep = 0;							      \
++	inptr += 4;							      \
++	continue;							      \
++									      \
++      not_combining:							      \
++	/* Output the buffered character.  */				      \
++	if (__builtin_expect (outptr + 1 >= outend, 0))			      \
++	  {								      \
++	    result = __GCONV_FULL_OUTPUT;				      \
++	    break;							      \
++	  }								      \
++	*outptr++ = (lasttwo >> 8) & 0xff;				      \
++	*outptr++ = lasttwo & 0xff;					      \
++	*statep = 0;							      \
++	continue;							      \
++      }									      \
++									      \
+     if (ch <= 0x0080)							      \
+       *outptr++ = ch;							      \
+     else								      \
+       {									      \
+-	const char *cp = "";						      \
++	const unsigned char *cp = (const unsigned char *) "";		      \
+ 	size_t i;							      \
+     									      \
+ 	for (i = 0;							      \
+@@ -16900,6 +17991,14 @@ static struct
+ 	  }								      \
+ 	else								      \
+ 	  {								      \
++	   /* Check for possible combining character.  */		      \
++	    if (__builtin_expect (ch == 0xca || ch == 0xea, 0))		      \
++	      {								      \
++		*statep = ((cp[0] << 8) | cp[1]) << 3;			      \
++		inptr += 4;						      \
++		continue;						      \
++	      }								      \
++									      \
+ 	    /* See whether there is enough room to write the second byte.  */ \
+ 	    if (__builtin_expect (cp[1] != '\0', 1)			      \
+ 		&& __builtin_expect (outptr + 1 >= outend, 0))		      \
+@@ -16918,6 +18017,7 @@ static struct
+     inptr += 4;								      \
+   }
+ #define LOOP_NEED_FLAGS
++#define EXTRA_LOOP_DECLS	, int *statep
+ #include <iconv/loop.c>
+ 
+ 
+diff --git a/iconvdata/testdata/BIG5HKSCS b/iconvdata/testdata/BIG5HKSCS
+index 827e20b..ac76f6e 100644
+--- a/iconvdata/testdata/BIG5HKSCS
++++ b/iconvdata/testdata/BIG5HKSCS
+@@ -1,1135 +1,1154 @@
+- �@ �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 �{ �| �} �~ ��
+- �� �� �� �� �� �� �� �� �� �@ �A �C �F �G �H �I
+- �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 �{
+- �| �} �~ �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �A �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 �d �e �f �g �h �i
+- �j �k �l �m �n �o �p �q �r �s �t �v �w �x �y �z
+- �{ �| �} �~ �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �@ �A �B �C �D �E
+- �F �G �H �I �J �K �L �M �N �O �P �Q �R �S �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 �{ �| �} �~ �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �` �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 �[ �\ �] �^ �_
+- �` �a �b �c �d �e �f �g �h �j �k �l �m �n �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 �X �Y �Z
+- �[ �\ �] �^ �_ �` �a �b �c �d �e �f �g �h �j �k
+- �l �m �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 �[ �\ �] �^ �_ �` �a �b
+- �c �d �e �f �g �h �i �j �k �l �n �o �p �q �r �s
+- �t �u �v �w �x �y �{ �| �} �~ �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �@ �A �B �C �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 �{ �| �} �~
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �@ �A �B �C �D �E �F �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 �{
+- �| �} �~ �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �@ �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 �{ �| �} �~ ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �@ �A �B �C
+- �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 �{ �| �} �~ �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �@ �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 �{ �|
+- �} �~ �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �@ �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 �{ �| �} �~ ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �@ �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 �[ �\ �] �^ �_ �` �b �c �d �e �f
+- �g �h �i �j �k �l �m �n �o �p �q �r �s �t �u �w
+- �y �z �| �} �~ �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
+- �A �C �D �E �F �G �H �I �J �K �L �M �N �O �P �Q
+- �R �T �U �V �W �X �Y �Z �[ �\ �] �^ �_ �` �a �c
+- �d �e �f �g �i �j �l �m �n �o �p �q �r �s �t �u
+- �v �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 �X �Y �[ �\ �] �^
+- �_ �` �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 �[ �\ �] �^ �_ �` �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 �O �P �Q �R �S �T �U �V �W �X �Y �Z �[ �\
+- �] �^ �_ �a �b �c �d �e �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 �U �V �X �Y �[ �\ �] �^
+- �_ �` �a �d �e �f �g �h �i �j �k �l �m �n �o �p
+- �q �s �t �u �v �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 �[ �\ �] �^
+- �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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
+- �[ �\ �] �^ �_ �` �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 �[ �\ �]
+- �^ �_ �` �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 �[ �\ �] �^ �_ �`
+- �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\
+- �] �^ �_ �` �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 �[ �\ �] �^ �_
+- �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[
+- �\ �] �^ �_ �` �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 �[ �\ �] �^
+- �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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
+- �[ �\ �] �^ �_ �` �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 �[ �\ �]
+- �^ �_ �` �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 �[ �\ �] �^ �_ �`
+- �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\
+- �] �^ �_ �` �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 �[ �\ �] �^ �_
+- �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[
+- �\ �] �^ �_ �` �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 �[ �\ �] �^
+- �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �{ �| �} �~ ġ Ģ ģ Ĥ ĥ Ħ
+- ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ ij Ĵ ĵ Ķ
+- ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ š Ţ ţ Ť ť Ŧ ŧ Ũ ũ
+- Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ Ź
+- ź Ż ż Ž ž ſ �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �@ �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
+- �{ �| �} �~ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ Ʃ ƪ ƫ Ƭ
+- ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ ƹ ƺ ƻ Ƽ
+- ƽ ƾ ƿ �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ǡ Ǣ ǣ Ǥ ǥ
+- Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ Dz dz Ǵ ǵ
+- Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ȡ Ȣ ȣ Ȥ �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ɡ ɢ ɣ ɤ ɥ ɦ
+- ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ ɳ ɴ ɵ ɶ
+- ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ʡ ʢ ʣ ʤ ʥ ʦ ʧ ʨ ʩ
+- ʪ ʫ ʬ ʭ ʮ ʯ ʰ ʱ ʲ ʳ ʴ ʵ ʶ ʷ ʸ ʹ
+- ʺ ʻ ʼ ʽ ʾ ʿ �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �@ �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
+- �{ �| �} �~ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨ ˩ ˪ ˫ ˬ
+- ˭ ˮ ˯ ˰ ˱ ˲ ˳ ˴ ˵ ˶ ˷ ˸ ˹ ˺ ˻ ˼
+- ˽ ˾ ˿ �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �@ �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 �{ �| �}
+- �~ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫ ̬ ̭ ̮ ̯
+- ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻ ̼ ̽ ̾ ̿
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
+- �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 �{ �| �} �~ ͡ ͢
+- ͣ ͤ ͥ ͦ ͧ ͨ ͩ ͪ ͫ ͬ ͭ ͮ ͯ Ͱ ͱ Ͳ
+- ͳ ʹ ͵ Ͷ ͷ ͸ ͹ ͺ ͻ ͼ ͽ ; Ϳ �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ Ρ ΢ Σ Τ Υ
+- Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α β γ δ ε
+- ζ η θ ι κ λ μ ν ξ ο �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ϡ Ϣ ϣ Ϥ ϥ Ϧ ϧ Ϩ
+- ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ ϴ ϵ ϶ Ϸ ϸ
+- Ϲ Ϻ ϻ ϼ Ͻ Ͼ Ͽ �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �@ �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 �{ �| �} �~ С Т У Ф Х Ц Ч Ш Щ Ъ Ы
+- Ь Э Ю Я а б в г д е ж з и й к л
+- м н о п �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �@ �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 �{ �|
+- �} �~ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ ѫ Ѭ ѭ Ѯ
+- ѯ Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ Ѹ ѹ Ѻ ѻ Ѽ ѽ Ѿ
+- ѿ �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �@ �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 �{ �| �} �~ ҡ
+- Ң ң Ҥ ҥ Ҧ ҧ Ҩ ҩ Ҫ ҫ Ҭ ҭ Ү ү Ұ ұ
+- Ҳ ҳ Ҵ ҵ Ҷ ҷ Ҹ ҹ Һ һ Ҽ ҽ Ҿ ҿ �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ӡ Ӣ ӣ Ӥ
+- ӥ Ӧ ӧ Ө ө Ӫ ӫ Ӭ ӭ Ӯ ӯ Ӱ ӱ Ӳ ӳ Ӵ
+- ӵ Ӷ ӷ Ӹ ӹ Ӻ ӻ Ӽ ӽ Ӿ ӿ �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ԡ Ԣ ԣ Ԥ ԥ Ԧ ԧ
+- Ԩ ԩ Ԫ ԫ Ԭ ԭ Ԯ ԯ ԰ Ա Բ Գ Դ Ե Զ Է
+- Ը Թ Ժ Ի Լ Խ Ծ Կ �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ա բ գ դ ե զ է ը թ ժ
+- ի լ խ ծ կ հ ձ ղ ճ մ յ ն շ ո չ պ
+- ջ ռ ս վ տ �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �@ �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 �{
+- �| �} �~ ֡ ֢ ֣ ֤ ֥ ֦ ֧ ֨ ֩ ֪ ֫ ֬ ֭
+- ֮ ֯ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ ֺ ֻ ּ ֽ
+- ־ ֿ �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �@ �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 �{ �| �} �~
+- ס ע ף פ ץ צ ק ר ש ת ׫ ׬ ׭ ׮ ׯ װ
+- ױ ײ ׳ ״ ׵ ׶ ׷ ׸ ׹ ׺ ׻ ׼ ׽ ׾ ׿ ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ء آ أ
+- ؤ إ ئ ا ب ة ت ث ج ح خ د ذ ر ز س
+- ش ص ض ط ظ ع غ ػ ؼ ؽ ؾ ؿ �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ١ ٢ ٣ ٤ ٥ ٦
+- ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٮ ٯ ٰ ٱ ٲ ٳ ٴ ٵ ٶ
+- ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ڡ ڢ ڣ ڤ ڥ ڦ ڧ ڨ ک
+- ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ڲ ڳ ڴ ڵ ڶ ڷ ڸ ڹ
+- ں ڻ ڼ ڽ ھ ڿ �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �@ �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
+- �{ �| �} �~ ۡ ۢ ۣ ۤ ۥ ۦ ۧ ۨ ۩ ۪ ۫ ۬
+- ۭ ۮ ۯ ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۺ ۻ ۼ
+- ۽ ۾ ۿ �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �@ �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 �{ �| �}
+- �~ ܡ ܢ ܣ ܤ ܥ ܦ ܧ ܨ ܩ ܪ ܫ ܬ ܭ ܮ ܯ
+- ܰ ܱ ܲ ܳ ܴ ܵ ܶ ܷ ܸ ܹ ܺ ܻ ܼ ܽ ܾ ܿ
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
+- �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 �{ �| �} �~ ݡ ݢ
+- ݣ ݤ ݥ ݦ ݧ ݨ ݩ ݪ ݫ ݬ ݭ ݮ ݯ ݰ ݱ ݲ
+- ݳ ݴ ݵ ݶ ݷ ݸ ݹ ݺ ݻ ݼ ݽ ݾ ݿ �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ޡ ޢ ޣ ޤ ޥ
+- ަ ާ ި ީ ު ޫ ެ ޭ ޮ ޯ ް ޱ ޲ ޳ ޴ ޵
+- ޶ ޷ ޸ ޹ ޺ ޻ ޼ ޽ ޾ ޿ �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ߡ ߢ ߣ ߤ ߥ ߦ ߧ ߨ
+- ߩ ߪ ߫ ߬ ߭ ߮ ߯ ߰ ߱ ߲ ߳ ߴ ߵ ߶ ߷ ߸
+- ߹ ߺ ߻ ߼ ߽ ߾ ߿ �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �@ �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 �{ �|
+- �} �~ � � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �@ �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 �{ �| �} �~ �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � � �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �@ �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 �{
+- �| �} �~ � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �@ �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 �{ �| �} �~
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � � ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � � � �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �@ �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
+- �{ �| �} �~ � � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �@ �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 �{ �| �}
+- �~ � � � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
+- �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 �{ �| �} �~ �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �@ �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 �{ �|
+- �} �~ � � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � � �
+- � �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �@ �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 �{ �| �} �~ �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � � � � � �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � �
+- � � � � � � � � � � � � � � � �
+- � � � � � � � � � � � �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �@ �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 �{
+- �| �} �~ �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �@ �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 �{ �| �} �~
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �@ �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 �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 �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 �{ �| �} �~ �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
+- �� �� �� �� �� �� �� �� �� �@ �A �B �C �D �E �F
+- �G �H �I �J �K �L �M �N �P �Q �R �S �T �U �V �W
+- �X �Y �Z �[ �\ �] �^ �_ �` �a �b �c �d �e �f �g
+- �h �i �j �k �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 �[ �\ �] �^
+- �_ �` �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 �S �T �U �V
+- �W �X �Y �Z �[ �\ �] �^ �_ �` �a �b �c �d �e �f
+- �g �h �i �j �k �l �m �n �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 �[ �\ �] �^ �_
++ �` �a �b �c �d �e �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 �[ �\ �] �^ �_ �` �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 �C �F �G �H �I �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 �{ �| �} �~
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �@ �A �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 �d �e �f �g �h �i �j �k �l
++ �m �n �o �p �q �r �s �t �v �w �x �y �z �{ �| �}
++ �~ �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �@ �A �B �C �D �E �F �G �H
++ �I �J �K �L �M �N �O �P �Q �R �S �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 �{ �| �} �~ �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �@ �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 �{ �| �} �~
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �@ �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 �j �k �l
++ �m �n �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 �X �Y �Z �[ �\ �] �^ �_ �` �a �b �c �d �e �f
++ �g �h �j �k �l �m �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 �[ �\ �] �^
++ �_ �` �a �b �c �d �e �f �g �h �i �j �k �l �n �o
++ �p �q �r �s �t �u �v �w �x �y �{ �| �} �~ �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �@ �A �B �C �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
++ �{ �| �} �~ �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �@ �A �B �C �D �E �F
++ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �@ �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 �{
++ �| �} �~ �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �@ �A �B �C �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 �{ �| �} �~ �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �@ �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 �{
++ �| �} �~ �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �@ �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 �{ �| �} �~
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �[ �\ �] �^ �_ �` �b
++ �c �d �e �f �g �h �i �j �k �l �m �n �o �p �q �r
++ �s �t �u �w �y �z �| �} �~ �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �@ �A �C �D �E �F �G �H �I �J �K �L �M
++ �N �O �P �Q �R �T �U �V �W �X �Y �Z �[ �\ �] �^
++ �_ �` �a �c �d �e �f �g �i �j �l �m �n �o �p �q
++ �r �s �t �u �v �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 �X �Y
++ �[ �\ �] �^ �_ �` �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 �[ �\ �] �^
++ �_ �` �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 �O �P �Q �R �S �T �U �V �W �X
++ �Y �Z �[ �\ �] �^ �_ �a �b �c �d �e �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 �U �V �X �Y
++ �[ �\ �] �^ �_ �` �a �d �e �f �g �h �i �j �k �l
++ �m �n �o �p �q �s �t �u �v �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
++ �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^
++ �_ �` �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 �[ �\ �] �^ �_ �`
++ �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\
++ �] �^ �_ �` �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 �[ �\ �] �^ �_
++ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[
++ �\ �] �^ �_ �` �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 �[ �\ �] �^
++ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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
++ �[ �\ �] �^ �_ �` �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 �[ �\ �]
++ �^ �_ �` �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 �[ �\ �] �^ �_ �`
++ �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\
++ �] �^ �_ �` �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 �[ �\ �] �^ �_
++ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[
++ �\ �] �^ �_ �` �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 �[ �\ �] �^
++ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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 �[ �\ �] �^ �_ �` �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
++ �[ �\ �] �^ �_ �` �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 �[ �\ �]
++ �^ �_ �` �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 �[ �\ �] �^ �_ �`
++ �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 �{ �| �} �~ ġ Ģ
++ ģ Ĥ ĥ Ħ ħ Ĩ ĩ Ī ī Ĭ ĭ Į į İ ı IJ
++ ij Ĵ ĵ Ķ ķ ĸ Ĺ ĺ Ļ ļ Ľ ľ Ŀ �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ š Ţ ţ Ť ť
++ Ŧ ŧ Ũ ũ Ū ū Ŭ ŭ Ů ů Ű ű Ų ų Ŵ ŵ
++ Ŷ ŷ Ÿ Ź ź Ż ż Ž ž ſ �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ơ Ƣ ƣ Ƥ ƥ Ʀ Ƨ ƨ
++ Ʃ ƪ ƫ Ƭ ƭ Ʈ Ư ư Ʊ Ʋ Ƴ ƴ Ƶ ƶ Ʒ Ƹ
++ ƹ ƺ ƻ Ƽ ƽ ƾ ƿ �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �@ �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 �{ �| �} �~ ǡ
++ Ǣ ǣ Ǥ ǥ Ǧ ǧ Ǩ ǩ Ǫ ǫ Ǭ ǭ Ǯ ǯ ǰ DZ
++ Dz dz Ǵ ǵ Ƕ Ƿ Ǹ ǹ Ǻ ǻ Ǽ ǽ Ǿ ǿ �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ȡ Ȣ ȣ Ȥ
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
++ �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 �{ �| �} �~ ɡ ɢ
++ ɣ ɤ ɥ ɦ ɧ ɨ ɩ ɪ ɫ ɬ ɭ ɮ ɯ ɰ ɱ ɲ
++ ɳ ɴ ɵ ɶ ɷ ɸ ɹ ɺ ɻ ɼ ɽ ɾ ɿ �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ʡ ʢ ʣ ʤ ʥ
++ ʦ ʧ ʨ ʩ ʪ ʫ ʬ ʭ ʮ ʯ ʰ ʱ ʲ ʳ ʴ ʵ
++ ʶ ʷ ʸ ʹ ʺ ʻ ʼ ʽ ʾ ʿ �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ˡ ˢ ˣ ˤ ˥ ˦ ˧ ˨
++ ˩ ˪ ˫ ˬ ˭ ˮ ˯ ˰ ˱ ˲ ˳ ˴ ˵ ˶ ˷ ˸
++ ˹ ˺ ˻ ˼ ˽ ˾ ˿ �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �@ �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 �{ �| �} �~ ̡ ̢ ̣ ̤ ̥ ̦ ̧ ̨ ̩ ̪ ̫
++ ̬ ̭ ̮ ̯ ̰ ̱ ̲ ̳ ̴ ̵ ̶ ̷ ̸ ̹ ̺ ̻
++ ̼ ̽ ̾ ̿ �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �@ �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 �{ �|
++ �} �~ ͡ ͢ ͣ ͤ ͥ ͦ ͧ ͨ ͩ ͪ ͫ ͬ ͭ ͮ
++ ͯ Ͱ ͱ Ͳ ͳ ʹ ͵ Ͷ ͷ ͸ ͹ ͺ ͻ ͼ ͽ ;
++ Ϳ �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �@ �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 �{ �| �} �~ Ρ
++ ΢ Σ Τ Υ Φ Χ Ψ Ω Ϊ Ϋ ά έ ή ί ΰ α
++ β γ δ ε ζ η θ ι κ λ μ ν ξ ο �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ϡ Ϣ ϣ Ϥ
++ ϥ Ϧ ϧ Ϩ ϩ Ϫ ϫ Ϭ ϭ Ϯ ϯ ϰ ϱ ϲ ϳ ϴ
++ ϵ ϶ Ϸ ϸ Ϲ Ϻ ϻ ϼ Ͻ Ͼ Ͽ �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ С Т У Ф Х Ц Ч
++ Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з
++ и й к л м н о п �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ѡ Ѣ ѣ Ѥ ѥ Ѧ ѧ Ѩ ѩ Ѫ
++ ѫ Ѭ ѭ Ѯ ѯ Ѱ ѱ Ѳ ѳ Ѵ ѵ Ѷ ѷ Ѹ ѹ Ѻ
++ ѻ Ѽ ѽ Ѿ ѿ �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �@ �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 �{
++ �| �} �~ ҡ Ң ң Ҥ ҥ Ҧ ҧ Ҩ ҩ Ҫ ҫ Ҭ ҭ
++ Ү ү Ұ ұ Ҳ ҳ Ҵ ҵ Ҷ ҷ Ҹ ҹ Һ һ Ҽ ҽ
++ Ҿ ҿ �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �@ �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 �{ �| �} �~
++ ӡ Ӣ ӣ Ӥ ӥ Ӧ ӧ Ө ө Ӫ ӫ Ӭ ӭ Ӯ ӯ Ӱ
++ ӱ Ӳ ӳ Ӵ ӵ Ӷ ӷ Ӹ ӹ Ӻ ӻ Ӽ ӽ Ӿ ӿ ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ԡ Ԣ ԣ
++ Ԥ ԥ Ԧ ԧ Ԩ ԩ Ԫ ԫ Ԭ ԭ Ԯ ԯ ԰ Ա Բ Գ
++ Դ Ե Զ Է Ը Թ Ժ Ի Լ Խ Ծ Կ �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ա բ գ դ ե զ
++ է ը թ ժ ի լ խ ծ կ հ ձ ղ ճ մ յ ն
++ շ ո չ պ ջ ռ ս վ տ �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ֡ ֢ ֣ ֤ ֥ ֦ ֧ ֨ ֩
++ ֪ ֫ ֬ ֭ ֮ ֯ ְ ֱ ֲ ֳ ִ ֵ ֶ ַ ָ ֹ
++ ֺ ֻ ּ ֽ ־ ֿ �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �@ �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
++ �{ �| �} �~ ס ע ף פ ץ צ ק ר ש ת ׫ ׬
++ ׭ ׮ ׯ װ ױ ײ ׳ ״ ׵ ׶ ׷ ׸ ׹ ׺ ׻ ׼
++ ׽ ׾ ׿ �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �@ �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 �{ �| �}
++ �~ ء آ أ ؤ إ ئ ا ب ة ت ث ج ح خ د
++ ذ ر ز س ش ص ض ط ظ ع غ ػ ؼ ؽ ؾ ؿ
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
++ �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 �{ �| �} �~ ١ ٢
++ ٣ ٤ ٥ ٦ ٧ ٨ ٩ ٪ ٫ ٬ ٭ ٮ ٯ ٰ ٱ ٲ
++ ٳ ٴ ٵ ٶ ٷ ٸ ٹ ٺ ٻ ټ ٽ پ ٿ �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ڡ ڢ ڣ ڤ ڥ
++ ڦ ڧ ڨ ک ڪ ګ ڬ ڭ ڮ گ ڰ ڱ ڲ ڳ ڴ ڵ
++ ڶ ڷ ڸ ڹ ں ڻ ڼ ڽ ھ ڿ �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ۡ ۢ ۣ ۤ ۥ ۦ ۧ ۨ
++ ۩ ۪ ۫ ۬ ۭ ۮ ۯ ۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸
++ ۹ ۺ ۻ ۼ ۽ ۾ ۿ �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �@ �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 �{ �| �} �~ ܡ ܢ ܣ ܤ ܥ ܦ ܧ ܨ ܩ ܪ ܫ
++ ܬ ܭ ܮ ܯ ܰ ܱ ܲ ܳ ܴ ܵ ܶ ܷ ܸ ܹ ܺ ܻ
++ ܼ ܽ ܾ ܿ �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �@ �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 �{ �|
++ �} �~ ݡ ݢ ݣ ݤ ݥ ݦ ݧ ݨ ݩ ݪ ݫ ݬ ݭ ݮ
++ ݯ ݰ ݱ ݲ ݳ ݴ ݵ ݶ ݷ ݸ ݹ ݺ ݻ ݼ ݽ ݾ
++ ݿ �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �@ �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 �{ �| �} �~ ޡ
++ ޢ ޣ ޤ ޥ ަ ާ ި ީ ު ޫ ެ ޭ ޮ ޯ ް ޱ
++ ޲ ޳ ޴ ޵ ޶ ޷ ޸ ޹ ޺ ޻ ޼ ޽ ޾ ޿ �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ ߡ ߢ ߣ ߤ
++ ߥ ߦ ߧ ߨ ߩ ߪ ߫ ߬ ߭ ߮ ߯ ߰ ߱ ߲ ߳ ߴ
++ ߵ ߶ ߷ ߸ ߹ ߺ ߻ ߼ ߽ ߾ ߿ �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �@ �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 �{
++ �| �} �~ � � � � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �@ �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 �{ �| �} �~
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � � � � � � ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � � � �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �@ �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
++ �{ �| �} �~ � � � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �@ �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 �{ �| �}
++ �~ � � � � � � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
++ �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 �{ �| �} �~ � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � � � � �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �@ �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 �{ �|
++ �} �~ �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �@ �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 �{ �| �} �~ �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � � � � � �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � � �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � � � � �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �@ �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 �{
++ �| �} �~ � � � � � � � � � � � � �
++ � � � � � � � � � � � � � � � �
++ � � �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �@ �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 �{ �| �} �~
++ � � � � � � � � � � � � � � � �
++ � � � � � � � � � � � � � � � ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �@ �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 �{ �| �} �~ �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �@ �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
++ �{ �| �} �~ �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �@ �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 �{ �| �}
++ �~ �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� �@
++ �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 �{ �| �} �~ �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �@ �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 �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 �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 �{ �|
++ �} �~ �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �@ �A �B
++ �C �D �E �F �G �H �I �J �K �L �M �N �P �Q �R �S
++ �T �U �V �W �X �Y �Z �[ �\ �] �^ �_ �` �a �b �c
++ �d �e �f �g �h �i �j �k �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
++ �[ �\ �] �^ �_ �` �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
++ �S �T �U �V �W �X �Y �Z �[ �\ �] �^ �_ �` �a �b
++ �c �d �e �f �g �h �i �j �k �l �m �n �p �q �r �s
++ �t �u �v �w �x �y �z �{ �| �} �~ �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� �� �� �� �� �� �� �� �� �� ��
++ �� �� �� �� �� �� ��
+diff --git a/iconvdata/testdata/BIG5HKSCS..UTF8 b/iconvdata/testdata/BIG5HKSCS..UTF8
+index a3b5254..5fbde06 100644
+--- a/iconvdata/testdata/BIG5HKSCS..UTF8
++++ b/iconvdata/testdata/BIG5HKSCS..UTF8
+@@ -1,1135 +1,1154 @@
+-                
+-       Ā Á Ǎ À Ē É Ě È Ō Ó
+- Ǒ Ò  Ế  Ề Ê ā á ǎ à ɑ ē é ě è
+- ī í ǐ ì ō ó ǒ ò ū ú ǔ ù ǖ ǘ ǚ ǜ
+- ü  ế  ề ê ɡ   𪎩  攊 丽 滝 鵎 釟
+- 𧜵 撑 会 伨 侨 兖 兴 农 凤 务 动 医 华 发 变 团
+- 声 处 备 夲 头 学 实 実 岚 庆 总 斉 柾 栄 桥 济
+- 炼 电 纤 纬 纺 织 经 统 缆 缷 艺 苏 药 视 设 询
+- 车 轧 轮 琑 糼 緍 楆 竉 刧 醌 碸 酞 肼 贋 胶 
+- 肟 黇 䳍 鷉 鸌 䰾  𧀎 鸊  㗁 溚 舾 甙 䤑 马
+- 骏 龙 禇  𡷊 𠗐  两 亁 亀 亇 亿 仫 伷 㑌 侽
+- 㹈 倃 傈 㑽 㒓 㒥 円 夅 凛 凼 刅 争 剹 劐 匧 㗇
+- 厩 㕑 厰 㕓 参 吣 㕭 㕲 㚁 咓 咣 咴 咹 哐 哯 唘
+- 唣 唨 㖘 唿 㖥 㖿 嗗 㗅  唥 𠱂   喐 𢳆 㧬
+- 𠍁 蹆 𤶸  䁓 𨂾 睺  㨴 䟕  𦧲 𤷪 擝  𠾴
+- 𠳕 𡃴 撍 蹾     𨉖 𤓓 𠵆  𨃩 䟴  
+- 骲 㩧  㿭 㔆 𥋇    鵮 頕 䏙 𦂥 撴 哣 
+-  𡁷 㧻 𡁯    擪  𠱃 蹨 𢆡 𨭌  䠋 
+- 㿺 塳   𠓼    啹 䂻 䎺 䪴   膪 飵
+-  捹 㧾 𢝵 跀 嚡 摼 㹃  𠸉 𢫏  𡃈  㦒 㨆
+-  㕸  𢃇 噒 𠼱   㒼 氽      𨳍
+- 𠹺   羓  𢠃 𢤹 㗻 𥇣  𠾍 𠺪 㾓 𠼰 𠵇 
+-  𠺫  𠵈 𡃀 𡄽 㿹 𢚖 搲 𠾭 𣏴 𧘹 𢯎 𠵾 𠵿 𢱑
+- 𢱕 㨘  𡃇 𠼮  𦭐    閪 哌 苄 喹 𩻃 鰦
+- 骶 𧝞  煀 腭 胬 尜 𦕲 脴 㞗 卟 𨂽 醶 𠻺 𠸏 𠹷
+- 𠻻 㗝 𤷫 㘉 𠳖 嚯 𢞵 𡃉 𠸐 𠹸 𡁸 𡅈 𨈇 𡑕 𠹹 𤹐
+- 𢶤 婔 𡀝 𡀞 𡃵 𡃶 垜 𠸑 𧚔 𨋍 𠾵 𠹻 𥅾 㜃 𠾶 𡆀
+- 𥋘   𡠺   墙 剨 㘚  箲 孨 䠀 䬬 鼧 䧧
+- 鰟 鮍 𥭴 𣄽 嗻 㗲 嚉 丨 夂   靑  乛 亻 㔾
+- 尣 彑 忄 㣺 扌 攵 歺 氵 氺 灬 爫 丬 犭  罒 礻
+- 糹 罓  㓁  耂 肀   卝 衤 见  讠 贝 钅
+- 镸 长 门  韦 页 风 飞 饣  鱼 鸟 黄 歯 丷 
+- 阝 户 钢 崾 嵈 嵖 㷼 㠏 嶤 嶹 㠠 㠸 幂 庽 弥 徃
+- 㤈 㤔 㤿 㥍 惗 愽 峥 㦉 憷 憹 懏 㦸 戬 抐 拥 挘
+- 㧸 嚱 㨃 揢 揻 搇 摚 㩋 擀 崕 嘡 龟 㪗 斆 㪽 旿
+- 晓 㫲 暒 㬢 朖 㭂 枤 栀 㭘 桊 梄 㭲 㭱 㭻 椉 楃
+- 牜 楤 榟 榅 㮼 槖 㯝 橥 橴 橱 檂 㯬 檙 㯲 檫 檵
+- 櫔 櫶 殁 毁 毪 汵 沪 㳋 洂 洆 洦 涁 㳯 涤 涱 渕
+- 渘 温 溆 𨧀 溻 滢 滚 齿 滨 滩 漤 漴 㵆 𣽁 澁 澾
+- 㵪 㵵 熷 岙 㶊 瀬 㶑 灐 灔 灯 灿 炉 𠌥 䏁 㗱 
+-  垾 𦻓 焾 𥟠 㙎 榢 𨯩 孴 穉 𥣡 𩓙 穥 穽 𥦬 窻
+- 窰 竂 竃 燑  䇊 竚 竝 竪 䇯 咲 𥰁 笋 筕 笩 
+- 𥳾 箢 筯 莜 𥮴 𦱿 篐 萡 箒 𣿰 㶭 𥱥 蒒 篺 簵 𥳁
+- 籄 粃  粦 晽 𤕸 糉 糇 糦 籴 糳 糵 繧 䔝 𦹄 絝
+- 𦻖 璍 綉 綫 焵 綳 𤁗 𦀩 緤 㴓 緵 𡟹 緥  𦄡 𦅚
+- 繮 纒 䌫 鑬 縧 罀 罁 罇 礶 𦋐 駡 羗 𦍑 羣 𡙡 𠁨
+- 䕜 𣝦 䔃 𨌺 翺 𦒉 耈 耝 耯   耻 耼 聡  䦉
+- 𦘦  𦛨 朥 肧 𨩈 脇 脚 墰 𢛶 汿 𦒘  擧  舘
+- 𡡞 橓 𤩥 𤪕 䑺 舩  𦩒  俹 𡓽 蓢 荢 𦬊 𤦧 𣔰
+- 𡝳 𣷸 芪 椛 芳 䇛 蕋 苐 茚 𠸖 𡞴 㛁  𣕚 艻 苢
+- 茘 𣺋 𦶣  𦮗 𣗎 㶿 茝 嗬 莅 䔋 𦶥 莬 菓 㑾 𦻔
+- 橗 蕚 㒖 𦹂  葘  葱 㷓 䓤 檧 葊  祘 𦮖 𦹷
+- 𦹃 蓞 莑 䒠 蒓 蓤  䉀 𥳀 䕃 蔴 嫲  䔧 蕳 䔖
+- 枿 蘖 𨘥 𨘻 藁  蘂  𧃍  䕪 蘨 㙈 𡢢 号 𧎚
+- 虾 蝱 𪃸 蟮 𢰧 螱 蟚 蠏 噡 虬 桖 䘏 衅 衆 𧗠 𣶹
+- 𧗤 衞 袜 䙛 袴 袵 揁 装 睷 𧜏 覇 覊 覧 覼 𨨥 觧
+- 𧤤 𧪽 誜 瞓 釾 誐 𧩙 竩 𧬺  䜓 𧬸 煼 謌 謟 𥐰
+- 𥕥 謿 譌 譍 誩 𤩺 讐 讛 誯  䘕 衏 貛 𧵔 𧶏 貫
+- 㜥 𧵓 賖 𧶘 𧶽 贒 贃 𡤐 賛 灜 贑  㻐 趩 𨀂 
+- 𤦊 㭼  𧄌 竧 躭 躶 軃 鋔 輙 輭 𨍥 𨐒 辥 錃 𪊟
+- 𠩐 辳 䤪 𨧞 𨔽 𣶻 廸 𣉢 迹    𢌥 㦀 𦻗 逷
+- 𨔼 𧪾 遡 𨕬 𨘋 邨  郄 𨛦 邮 酧 㫰 醩 釄 粬 𨤳
+- 𡺉 鈎 沟 鉁 鉢 𥖹 𨫆 𣲛 𨬌 𥗛  錬 鍫 𨫡 𨯫 炏
+- 嫃 𨫢 𨫥 䥥 鉄 𨯬 𨰹 𨯿 鍳 鑛 躼 閅 閦 鐦 閠 濶
+- 䊹  𨛘 𡉼 𣸮 䧟 氜 陻 隖 䅬 隣 𦻕 懚 隶 磵 𨫠
+- 隽 双 䦡 𦲸 𠉴 𦐐 𩂯 𩃥 𤫑 𡤕 𣌊 霱 虂 霶 䨏 䔽
+- 䖅  灵 孁 霛  靗 孊 𩇫 靟 鐥 僐 𣂷 𣂼 鞉 鞟
+- 鞱 鞾 韀 韒 韠 𥑬 韮 琜 𩐳 韵 𩐝  䫑 頴 頳 顋
+- 顦 㬎 𧅵 㵑 𠘰 𤅜 𥜆 飊 颷 飈 飇 䫿 𦴧 𡛓 喰 飡
+- 飦 飬 鍸 餹 𤨩 䭲 𩡗 𩤅 駵 騌 騻 騐 驘 𥜥 㛄 𩂱
+- 𩯕 髠 髢 𩬅 髴 䰎 鬔 鬭 𨘀 倴 鬴 𦦨 㣃 𣁽 魐 魀
+- 𩴾 婅 𡡣 鮎 𤉋 鰂 鯿 鰌 𩹨 鷔 𩾷 𪆒  𪃡 𪄣 𪇟
+- 鵾 鶃  鸎 梈 鷄  𪆓 𪈠 𡤻 𪈳 鴹   麐 麕
+- 麞 麢 䴴 麪 麯 𤍤 黁 㭠 㧥 㴝 伲 㞾 𨰫 鼂 鼈 䮖
+- 鐤 𦶢 鼗 鼹 嚟 嚊 齅 馸 𩂋 韲 葿 齢 齩 竜 龎 爖
+- 䮾 𤥵 𤦻 煷 𤧸 𤍈 𤩑 玞 𨯚 𡣺 禟 𨥾 𨸶 鍩 鏳 𨩄
+- 鋬 鎁 鏋 𨥬 𤒹 爗 㻫 睲 穃 烐  𤏸 煾  炣 𡢾
+- 𣖙 㻇 𡢅 𥐯 𡟸 㜢 𡛻  㛡 𡝴  𥽋 㜣 𡛀 坛 𤨥
+- 𡏾  𡏆 𡒶 蔃 𣚦 葕  𧅥 𣸱 𥕜 𣻻 𧁒 䓴 𣛮 𩦝
+- 𦼦 柹 㜳 㰕 㷧 塬  栐 䁗 𣜿  𤂋  𦰡 哋 嚞
+- 𦚱 嚒  𠮨 𠸍 鏆  鎜 仸 儫 㠙 𤐶 亼 𠑥 𠍿 佋
+- 侊 𥙑 婨 𠆫 𠏋 㦙 𠌊 𠐔 㐵 伩 𠋀 𨺳 𠉵 諚  亘
+- 働 儍 侢 伃  𣺊 佂 倮 偬 傁 俌 俥 偘 僼 湶 𣖕
+-  𣺿 浲 𡢄 𣺉 冨 凃 𠗠 䓝 𠒣 𠒒 𠒑 赺 𨪜 𠜎 剙
+- 劤 𠡳 勡 䙺 熌 𤎌 𠰠 𤦬  槑 𠸝 㻞 璙 琔 瑖 玘
+- 䮎 𤪼 𤂍 叐 㖄 爏 𤃉 喴 𠍅 响 𠯆 圝 鉝 雴 鍦 埝
+- 垍 坿 㘾 壋 媙 𨩆 𡛺 𡝯 𡜐 娬 妸 銏 婾 嫏 娒 
+- 𡧳 𡡡  㛵 洅 瑃 娡 𥺃 媁 𨯗 𠐓 鏠 璌 𡌃 焅 䥲
+- 鐈 𨧻 鎽 㞠 尞 岞 幞 幈 𡦖 𡥼 𣫮 廍 孏 𡤃 𡤄 㜁
+- 𡢠 㛝 𡛾 㛓 脪 𨩇 𡶺 𣑲 𨦨 弌 弎 𡤧  婫 𡜻 孄
+- 蘔 𧗽 衠 恾 𢡠 𢘫 忛 㺸 𢖯 𢖾  𦽳 懀 𠀾 𠁆 𢘛
+- 憙 憘 恵 𢲛 𢴇 𤛔  摱 𤙥 𢭪 㨩 𢬢 𣑐 𩣪 𢹸 挷
+-  撶 挱 揑 𤧣 𢵧 护 𢲡 搻 敫 楲 㯴 𣂎 𣊭 𤦉 𣊫
+- 唍 𣋠 𡣙  曎 𣊉  㫠 䆐 𥖄 𨬢 𥖏 𡛼 𥕛 𥐥 磮
+- 𣄃 𡠪 𣈴 㑤  𣆂 𤋉 暎 𦴤 晫 䮓 昰 𧡰  晣 𣋒
+- 𣋡 昞 𥡲 㣑  𣞼 㮙 𣞢 𣏾 瓐 㮖 枏 𤘪 梶 栞 㯄
+- 檾 㡣 𣟕 𤒇 樳 橒 櫉 欅 𡤒 攑 梘 橌 㯗 橺 歗 𣿀
+- 𣲚 鎠 鋲 𨯪 𨫋 銉  𨧜 鑧 涥 漋  𣽿 㶏 渄 𤀼
+- 娽 渊 塇 洤 硂 焻 𤌚 𤉶 烱 牐 犇 犔 𤞏 𤜥 兹 𤪤
+- 𠗫 瑺 𣻸   𤤗 𥿡 㼆 㺱 𤫟 𨰣 𣼵 悧 㻳 瓌 琼
+- 鎇 琷 䒟 𦷪 䕑 疃 㽣 𤳙 𤴆 㽘 畕 癳 𪗆 㬙 瑨 𨫌
+- 𤦫 𤦎 㫻 㷍 𤩎 㻿  𤣳 釺 圲 鍂 𨫣 𡡤 僟 𥈡 𥇧
+- 睸 𣈲 眎 眏 睻 𤚗 𣞁 㩞  琸 璛 㺿 𤪺 𤫇 䃈 𤪖
+- 𦆮 錇 𥖁 砞 碍 碈 磒 珐 祙 𧝁  䄎 蒖 禥 樭 𣻺
+- 稺 秴 䅮 𡛦 䄲 鈵 秱 𠵌 𤦌 𠊙 𣶺 𡝮 㖗 啫 㕰 㚪
+- 𠇔  竢 婙 𢛵  𥪜 娍 𠉛 磰 娪 𥯆 竾 䇹 籝 籭
+- 䈑 𥮳 𥺼 𥺦 糍 𤧹  粎 籼 粮 檲 緜 縇 緓 罎 𦉡
+- 𦅜  綗 𥺂 䉪  𠤖 柖 𠁎 𣗏 埄 𦐒  𤥢 翝 笧
+- 𠠬 𥫩 𥵃 笌 𥸎 駦 虅 驣 樜  㧢 𤧷 𦖭 騟  蒀
+- 𧄧  䓪 脷 䐂 胆 脉 腂 𦞴 飃 𦩂 艢 艥 𦩑 葓 𦶧
+- 蘐 𧈛 媆 䅿  嬫 𡢡 嫤 𡣘 蚠  蠭 𧐢 娂 衮
+- 佅 袇 袿 裦 襥 襍 𥚃 襔 𧞅 𧞄  𨯙 𨮜 𨧹 㺭 蒣
+- 䛵 䛏 㟲 訽 訜 𩑈 彍 鈫  旔 焩 烄 𡡅 鵭 貟 賩
+- 𧷜 妚 矃 姰 䍮 㛔 踪 躧 𤰉 輰 轊 䋴 汘 澻 𢌡 䢛
+- 潹 溋 𡟚 鯩 㚵 𤤯 邻 啱 䤆 醻 鐄 𨩋 䁢  鐧 𨰝
+-  蓥 訫 閙 閧 閗 閖 𨴴 瑅 㻂 𤣿   㻧 𣈥 随
+-  𨹦 𨹥 㻌  𤩸 𣿮 琒 瑫 㻼 靁 𩂰 桇 䨝  
+- 鍨 𨦉  𨬯 𦎾 銺 嬑 譩 䤼 珹 𤈛 鞛 靱 餸  巁
+- 𨯅 𤪲 頟 𩓚 鋶  釥 䓀 𨭐 𤩧 𨭤 飜 𨩅 㼀 鈪 䤥
+- 萔 餻 饍  㷽 馛 䭯 馪 驜 𨭥  檏 騡 嫾 騯 
+- 䮐  馼 䮽 䮗 鍽 塲 𡌂 堢 𤦸 𡓨 硄 𢜟 𣶸 棅 㵽
+- 鑘 㤧 慐 𢞁 𢥫 愇 鱏 鱓 鱻 鰵 鰐 魿 鯏 𩸭 鮟 
+- 𪃾 鴡 䲮 𤄄 鸘 䲰 鴌   𪃳 𩤯 鶥 蒽  𦿟 
+- 藼 䔳 𦶤 𦺄 𦷰 萠 藮  𣟗 𦁤 秢 𣖜 𣙀 䤭 𤧞 㵢
+- 鏛 銾 鍈 𠊿 碹 鉷 鑍 俤 㑀 遤 𥕝 砽 硔 碶 硋 𡝗
+- 𣇉 𤥁 㚚 佲 濚 濙 瀞 吔  垻 壳 垊 鴖 埗 焴 㒯
+-  燫  𤾗 𡞵 𨩉 愌 嫎 娋 䊼 𤒈 㜬 䭻 𨧼 鎻 鎸
+- 𡣖  葲 𦳀  𤋺 𢰦 𤏁 妔 𣶷 𦝁 綨 𦅛 𦂤 𤦹 𤦋
+- 𨧺 鋥 珢 㻩 璴 𨭣 𡢟 㻡 𤪳 櫘 珳 珻 㻖 𤨾 𤪔 𡟙
+- 𤩦 𠎧   瑈 𤤖 炥 𤥶 銄 珦 鍟 𠓾 錱  𨨖 鎆
+- 𨯧 𥗕 䤵 𨪂 煫   嚤 𠘚   唂 秄 𡟺 緾 𡛂
+- 𤩐  䔮 鐁 㜊  𤦭 妰 𡢿 𡢃 𧒄 媡 㛢 𣵛 㚰 鉟
+- 婹 𨪁 𡡢 鍴 㳍 𠪴 䪖 㦊 僴 㵩 㵌 𡎜 煵 䋻  渏
+- 𩃤 䓫 浗 𧹏 灧 沯 㳖 𣿭 𣸭 渂 漌 㵯 𠏵 畑 㚼 㓈
+- 䚀 㻚 䡱 姄 鉮 䤾 轁   堒 埈 㛖 𡑒 烾 𤍢 
+- 𢿣 𡊰 𢎽 梹 楧  𣓥 𧯴 𣛟 𨪃 𣟖  𤲟 樚 𣚭 𦲷
+- 萾 䓟 䓎 𦴦  𦲂 𦿞 漗 𧄉 茽 𡜺 菭 𦲀 𧁓 𡟛 妉
+- 媂 𡞳 婡 婱 𡤅 𤇼 㜭 姯 𡜼 㛇 熎 鎐 暚 𤊥 婮 娫
+-  樫 𣻹 𧜶 𤑛 𤋊 焝 𤉙 𨧡 侰 𦴨 峂 𤓎 𧹍 𤎽 樌
+- 𤉖 𡌄 炦 焳 𤏩 㶥 泟  𤩏 繥 姫 崯 㷳 彜  
+- 綤 萦 咅  𣌀 𠈔 坾  𠘙 㿥   瀃  嵰 玏
+- 糓 𨩙  俈 翧 狍 猐 𧫴 猸 猹 𥛶 獁 獈 㺩 𧬘 遬
+- 燵  珡 臶 㻊 県 㻑 沢 国 琙 琞 琟 㻢 㻰 㻴 㻺
+- 瓓 㼎 㽓 畂 畭 畲 疍 㽼 痈 痜 㿀 癍 㿗 癴 㿜 発
+- 𤽜 熈 嘣 覀 塩 䀝 睃 䀹 条 䁅 㗛 瞘 䁪 䁯 属 瞾
+- 矋 売 砘 点 砜 䂨 砹 硇 硑 硦 葈  礳 栃 礲 䄃
+- 䄉 禑 禙 辻 稆 込 䅧 窑 䆲 窼 艹 䇄 竏 竛 䇏 両
+- 筢 筬 筻 簒 簛 䉠 䉺 类 粜 䊌 粸 䊔 糭 输 烀 𠳏
+- 総 緔 緐 緽 羮 羴 犟 䎗 耠 耥 笹 耮 耱 联 㷌 垴
+- 炠 肷 胩 䏭 脌 猪 脎 脒 畠 脔 䐁 㬹 腖 腙 腚 䐓
+- 堺 腼 膄 䐥 膓 䐭 膥 埯 臁 臤 艔 䒏 芦 艶 苊 苘
+- 苿 䒰 荗 险 榊 萅 烵 葤 惣 蒈 䔄 蒾 蓡 蓸 蔐 蔸
+- 蕒 䔻 蕯 蕰 藠 䕷 虲 蚒 蚲 蛯 际 螋 䘆 䘗 袮 裿
+- 褤 襇 覑 𧥧 訩 訸 誔 誴 豑 賔 賲 贜 䞘 塟 跃 䟭
+- 仮 踺 嗘 坔 蹱 嗵 躰 䠷 軎 転 軤 軭 軲 辷 迁 迊
+- 迌 逳 駄 䢭 飠 鈓 䤞 鈨 鉘 鉫 銱 銮 銿 鋣 鋫 鋳
+- 鋴 鋽 鍃 鎄 鎭 䥅 䥑 麿 鐗 匁 鐝 鐭 鐾 䥪 鑔 鑹
+- 锭 関 䦧 间 阳 䧥 枠 䨤 靀 䨵 鞲 韂 噔 䫤 惨 颹
+- 䬙 飱 塄 餎 餙 冴 餜 餷 饂 饝 饢 䭰 駅 䮝 騼 鬏
+- 窃 魩 鮁 鯝 鯱 鯴 䱭 鰠 㝯  鵉 鰺 黾 噐 鶓 鶽
+- 鷀 鷼 银 辶 鹻 麬 麱 麽 黆 铜 黢 黱 黸 竈 齄 
+-   椚 铃 妬  塀 铁 㞹     块 煳 
+-   呪   咞   𠱓   惧  噺  
+-     楕 鰯 螥  𠸎   𠼭  尠  帋
+-   𡁶 朞 𡁻   㙇     卤 蒭 𡋣 
+-  讁     乸 炻        
+- 拃 𡻕  熘 桕  槩 㛈 𢉼      苽 
+-  𢫕 覥  辠  鞸  顇 骽     𢴈 
+-          徱 晈 暿    𤦺
+-   𠍆 墵 朎 椘  𧙗 𥿢   𧗾 𢂚 䣐 䪸 
+- 𨪚   𤀻  𤎖   凒 𠘑 妟 𡺨 㮾 𣳿  
+- 垈  㦛    㝢 𢇃 譞 𨭎    爉  𠱸
+- 奥   𠝹 軚  劏 圿 煱    𤪧 喼  𥑮
+- 𦭒 㑳  𧘲  䜘  𥕦 𥟇 𤤿  偦 㓻   䝼
+- 𨥈 𥪮  𥰆  垡 煑  𧰒 遖  𤾚 譢   嵛
+- 𦯷   諪 𤧶  𣿯 𦔒 䯀   𢜛 鑥 𥟡 憕 娧
+- 晉 嚹 𤔡  乪  陖 涏 𦲽 㘘 襷  𦡮 𦐑 𦡞 
+- 筂  𠨑   穅 𦧺 騦  㙟   禃   崬
+-   䛐  画 补  墶 㜜 𢖍   㱔   銁
+- 𢅺  錰 𧋦  氹 钟  𠻸 蠧 裵   𡞱 溸 𤨪
+-  㦤 㚹 䔿 暶 𩲭 𩢤 襃   囖 䃟 𡘊 㦡 𣜯 
+- 𡏅 熭 荦  𩆨 䲷 𧂯 𨦫     𤅺 筃 祾 𨀉
+- 澵 𪋟 樃  厢  鎿 栶 靝 𨅯  𦦵 𡏭 𣈯  嶅
+- 𨰰  圕 頣 𨥉 嶫 𤦈 斾 槕 叒 𤪥 𣾁 㰑 朶  𨃴
+- 𨄮 𡾡        㗊  𨚪 䣺 揦  砈
+- 鉕  䏲  䏟    姸    𩄐  㷷 
+-  运 犏 嚋  𩗩      𩥪   𩬎 
+-  纟  𩼣 䲤 镇  熢  䶑 递  䶜 𠲜 达 嗁
+- 辺  边 𤪓 䔉 繿 潖 檱 仪 㓤 𨬬  㜺 躀 𡟵 
+- 𨭬 𨮙  𦚯 㷫 𧙕 𣲷 𥘵 𥥖 亚 𥺁 𦉘 嚿 𠹭 踎 孭
+- 𣺈 𤲞 揞 𡟶 𡡻 攰 嘭 𥱊 吚 𥌑 㷆  䱽 嘢 嘞 罉
+- 𥻘 奵  蝰 东 𠿪 𠵉 𣚺 脗 鵞 贘 瘻 鱅 癎 瞹 鍅
+- 吲 腈 苷 嘥 脲 萘 肽 嗪 祢 噃 吖  㗎 嘅 嗱 曱
+- 𨋢 㘭 甴 嗰 喺 咗 啲 𠱁  廐 𥅈 𠹶   麫 絚
+- 嗞 𡁵 抝 靭 咔 賍 燶 酶 揼 掹 揾 啩  鱲  冚
+- 㓟 𠶧 冧 呍 唞 唓 癦 踭  疱 肶 蠄 螆 裇 膶 萜
+- 𡃁 䓬 猄 𤜆 宐 茋 𦢓 噻 𢛴 𧴯 𤆣 𧵳 𦻐  酰 𡇙
+- 鈈 𣳼 𪚩 𠺬 𠻹 牦 𡲢 䝎 𤿂  𠿫 䃺 鱝 攟 𢶠 䣳
+-  𩵼 𠿬 𠸊  𠿭  𡆇 熣 纎 鵐 业 丄 㕷 嬍 沲
+- 卧 㚬 㧜 卽 㚥  墚 𤭮 舭 呋 垪  𠥹 㩒 𢑥 獴
+- 𩺬 䴉 鯭 𣳾 𩼰 䱛 𤾩 𩖞  葜 𣶶  𦞳 𣜠 挮 紥
+- 𣻷 𣸬 㨪 逈 勌 㹴 㙺 䗩  癀 嫰 𠺶 硺 䞶 墧 䂿
+- 噼 鮋 嵴 癔  麅 䳡 㟻 愙 𣃚 𤏲 噝 𡊩 垧 𤥣 
+- 刴 𧂮 㖭 鵼 籖 鬹 埞 𡝬 屓 擓   𧅤 蚭  𦴢
+- 𤫢  凾  嶎 霃 𡷑 麁 遌 笟 鬂 峑 箣 扨 挵 髿
+- 篏 鬪 籾 籂 粆 鰕 篼 鬉 鰛 𤤾 齚 啳 寃 俽 麘 俲
+- 剠 㸆 勑 坧 偖 妷 帒 韈 鶫 轜 呩 鞴 饀 鞺 匬 愰
+- 椬 叚 鰊 鴂 䰻 陁 榀 傦 畆 𡝭 駚 剳 酙 隁 酜 酑
+-  捿 𦴣 櫊 嘑 醎 畺 抅 𠏼 獏 籰  𣳽 𤤙 盖 鮝
+- 个 𠳔 莾 衂 届 槀 坺 刟 巵 从 氱  伹 咜 哚 劚
+- 趂 㗾 㗳 歒 酼 龥 鮗 頮 颴 骺 麨 麄 煺 笔 毺 蠘
+- 罸 嘠  蹷 齓 跔 蹏 鸜 踁 抂 𨍽 踨 蹵 竓 𤩷 稾
+- 磘 泪 詧 瘇 𨩚 鼦 泎 蟖 痃 𪊲 硓 咢 贌 狢 獱 謭
+- 猂 瓱 賫 𤪻 蘯 徺 袠 䒷 𡠻 𦸅 詾 𢔛 惽 癧 髗 鵄
+- 鍮 鮏 蟵 賷 猬 霡 鮰 㗖 犲 䰇 籑 饊 𦅙 慙 䰄 麖
+- 慽 坟 慯 抦 戹 㩜 懢 厪 𣏵 捤 栂 㗒 嵗 𨯂 迚 
+- 僙 𡵆 礆 匲 阸 𠼻 䁥 矾 糂  糚 稭 聦 聣 絍 甅
+- 瓲 覔 舚 朌 聢 𧒆 聛 瓰 脃 眤 覉 𦟌 畓 𦻑 螩 蟎
+- 臈 螌 詉 貭 譃 眫 瓸 蓚 㘵 榲 趦 覩 涹 蟁 𤀑 瓧
+- 㷛 煶 悤 憜 㳑 恷 罱 𨬭 惩 䭾 删 㰘 𣳇 𥻗 𧙖 
+- 𡥄 𡋾 𩤃 𦷜 𧂭 峁 𦆭 𨨏 𣙷 𠃮  𤼎 䕢 嬟  齐
+- 麦    , 、 。 . • ; : ? ! ︰ … ‥ ﹐
+- 、 ﹒ · ﹔ ﹕ ﹖ ﹗ | – ︱ — ︳ ︴ ﹏ ( )
+- ︵ ︶ { } ︷ ︸ 〔 〕 ︹ ︺ 【 】 ︻ ︼ 《 》
+- ︽ ︾ 〈 〉 ︿ ﹀ 「 」 ﹁ ﹂ 『 』 ﹃ ﹄ ﹙ ﹚
+- ﹛ ﹜ ﹝ ﹞ ‘ ’ “ ” 〝 〞 ‵ ′ # & * ※
+- § 〃 ○ ● △ ▲ ◎ ☆ ★ ◇ ◆ □ ■ ▽ ▼ ㊣
+- ℅ ‾ _ ﹉ ﹊ ﹍ ﹎ ﹋ ﹌ ﹟ ﹠ ﹡ + - × ÷
+- ± √ < > = ≦ ≧ ≠ ∞ ≒ ≡ ﹢ ﹣ ﹤ ﹥ ﹦
+- ∼ ∩ ∪ ⊥ ∠ ∟ ⊿ ㏒ ㏑ ∫ ∮ ∵ ∴ ♀ ♂ ♁
+- ☉ ↑ ↓ ← → ↖ ↗ ↙ ↘ ∥ ∣ / \ $ ¥ 〒
+- ¢ £ % @ ℃ ℉ ﹩ ﹪ ﹫ ㏕ ㎜ ㎝ ㎞ ㏎ ㎡ ㎎
+- ㎏ ㏄ ° 兙 兛 兞 兝 兡 兣 嗧 瓩 糎 ▁ ▂ ▃ ▄
+- ▅ ▆ ▇ █ ▏ ▎ ▍ ▌ ▋ ▊ ▉ ┼ ┴ ┬ ┤ ├
+- ▔ ─ │ ▕ ┌ ┐ └ ┘ ◢ ◣ ◥ ◤ ╱ ╲ ╳ 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 Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο
+- Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η
+- θ ι κ λ μ ν ξ ο π ρ σ τ υ φ χ ψ
+- ω ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ
+- ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ
+- ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ˙ ˉ ˊ ˇ ˋ 一 乙 丁 七 乃
+- 九 了 二 人 儿 入 八 几 刀 刁 力 匕 十 卜 又 三
+- 下 丈 上 丫 丸 凡 久 么 也 乞 于 亡 兀 刃 勺 千
+- 叉 口 土 士 夕 大 女 子 孑 孓 寸 小 尢 尸 山 川
+- 工 己 已 巳 巾 干 廾 弋 弓 才 丑 丐 不 中 丰 丹
+- 之 尹 予 云 井 互 五 亢 仁 什 仃 仆 仇 仍 今 介
+- 仄 元 允 內 六 兮 公 冗 凶 分 切 刈 勻 勾 勿 化
+- 匹 午 升 卅 卞 厄 友 及 反 壬 天 夫 太 夭 孔 少
+- 尤 尺 屯 巴 幻 廿 弔 引 心 戈 戶 手 扎 支 文 斗
+- 斤 方 日 曰 月 木 欠 止 歹 毋 比 毛 氏 水 火 爪
+- 父 爻 片 牙 牛 犬 王 丙 世 丕 且 丘 主 乍 乏 乎
+- 以 付 仔 仕 他 仗 代 令 仙 仞 充 兄 冉 冊 冬 凹
+- 出 凸 刊 加 功 包 匆 北 匝 仟 半 卉 卡 占 卯 卮
+- 去 可 古 右 召 叮 叩 叨 叼 司 叵 叫 另 只 史 叱
+- 台 句 叭 叻 四 囚 外 央 失 奴 奶 孕 它 尼 巨 巧
+- 左 市 布 平 幼 弁 弘 弗 必 戊 打 扔 扒 扑 斥 旦
+- 朮 本 未 末 札 正 母 民 氐 永 汁 汀 氾 犯 玄 玉
+- 瓜 瓦 甘 生 用 甩 田 由 甲 申 疋 白 皮 皿 目 矛
+- 矢 石 示 禾 穴 立 丞 丟 乒 乓 乩 亙 交 亦 亥 仿
+- 伉 伙 伊 伕 伍 伐 休 伏 仲 件 任 仰 仳 份 企 伋
+- 光 兇 兆 先 全 共 再 冰 列 刑 划 刎 刖 劣 匈 匡
+- 匠 印 危 吉 吏 同 吊 吐 吁 吋 各 向 名 合 吃 后
+- 吆 吒 因 回 囝 圳 地 在 圭 圬 圯 圩 夙 多 夷 夸
+- 妄 奸 妃 好 她 如 妁 字 存 宇 守 宅 安 寺 尖 屹
+- 州 帆 并 年 式 弛 忙 忖 戎 戌 戍 成 扣 扛 托 收
+- 早 旨 旬 旭 曲 曳 有 朽 朴 朱 朵 次 此 死 氖 汝
+- 汗 汙 江 池 汐 汕 污 汛 汍 汎 灰 牟 牝 百 竹 米
+- 糸 缶 羊 羽 老 考 而 耒 耳 聿 肉 肋 肌 臣 自 至
+- 臼 舌 舛 舟 艮 色 艾 虫 血 行 衣 西 阡 串 亨 位
+- 住 佇 佗 佞 伴 佛 何 估 佐 佑 伽 伺 伸 佃 佔 似
+- 但 佣 作 你 伯 低 伶 余 佝 佈 佚 兌 克 免 兵 冶
+- 冷 別 判 利 刪 刨 劫 助 努 劬 匣 即 卵 吝 吭 吞
+- 吾 否 呎 吧 呆 呃 吳 呈 呂 君 吩 告 吹 吻 吸 吮
+- 吵 吶 吠 吼 呀 吱 含 吟 听 囪 困 囤 囫 坊 坑 址
+- 坍 均 坎 圾 坐 坏 圻 壯 夾 妝 妒 妨 妞 妣 妙 妖
+- 妍 妤 妓 妊 妥 孝 孜 孚 孛 完 宋 宏 尬 局 屁 尿
+- 尾 岐 岑 岔 岌 巫 希 序 庇 床 廷 弄 弟 彤 形 彷
+- 役 忘 忌 志 忍 忱 快 忸 忪 戒 我 抄 抗 抖 技 扶
+- 抉 扭 把 扼 找 批 扳 抒 扯 折 扮 投 抓 抑 抆 改
+- 攻 攸 旱 更 束 李 杏 材 村 杜 杖 杞 杉 杆 杠 杓
+- 杗 步 每 求 汞 沙 沁 沈 沉 沅 沛 汪 決 沐 汰 沌
+- 汨 沖 沒 汽 沃 汲 汾 汴 沆 汶 沍 沔 沘 沂 灶 灼
+- 災 灸 牢 牡 牠 狄 狂 玖 甬 甫 男 甸 皂 盯 矣 私
+- 秀 禿 究 系 罕 肖 肓 肝 肘 肛 肚 育 良 芒 芋 芍
+- 見 角 言 谷 豆 豕 貝 赤 走 足 身 車 辛 辰 迂 迆
+- 迅 迄 巡 邑 邢 邪 邦 那 酉 釆 里 防 阮 阱 阪 阬
+- 並 乖 乳 事 些 亞 享 京 佯 依 侍 佳 使 佬 供 例
+- 來 侃 佰 併 侈 佩 佻 侖 佾 侏 侑 佺 兔 兒 兕 兩
+- 具 其 典 冽 函 刻 券 刷 刺 到 刮 制 剁 劾 劻 卒
+- 協 卓 卑 卦 卷 卸 卹 取 叔 受 味 呵 咖 呸 咕 咀
+- 呻 呷 咄 咒 咆 呼 咐 呱 呶 和 咚 呢 周 咋 命 咎
+- 固 垃 坷 坪 坩 坡 坦 坤 坼 夜 奉 奇 奈 奄 奔 妾
+- 妻 委 妹 妮 姑 姆 姐 姍 始 姓 姊 妯 妳 姒 姅 孟
+- 孤 季 宗 定 官 宜 宙 宛 尚 屈 居 屆 岷 岡 岸 岩
+- 岫 岱 岳 帘 帚 帖 帕 帛 帑 幸 庚 店 府 底 庖 延
+- 弦 弧 弩 往 征 彿 彼 忝 忠 忽 念 忿 怏 怔 怯 怵
+- 怖 怪 怕 怡 性 怩 怫 怛 或 戕 房 戾 所 承 拉 拌
+- 拄 抿 拂 抹 拒 招 披 拓 拔 拋 拈 抨 抽 押 拐 拙
+- 拇 拍 抵 拚 抱 拘 拖 拗 拆 抬 拎 放 斧 於 旺 昔
+- 易 昌 昆 昂 明 昀 昏 昕 昊 昇 服 朋 杭 枋 枕 東
+- 果 杳 杷 枇 枝 林 杯 杰 板 枉 松 析 杵 枚 枓 杼
+- 杪 杲 欣 武 歧 歿 氓 氛 泣 注 泳 沱 泌 泥 河 沽
+- 沾 沼 波 沫 法 泓 沸 泄 油 況 沮 泗 泅 泱 沿 治
+- 泡 泛 泊 沬 泯 泜 泖 泠 炕 炎 炒 炊 炙 爬 爭 爸
+- 版 牧 物 狀 狎 狙 狗 狐 玩 玨 玟 玫 玥 甽 疝 疙
+- 疚 的 盂 盲 直 知 矽 社 祀 祁 秉 秈 空 穹 竺 糾
+- 罔 羌 羋 者 肺 肥 肢 肱 股 肫 肩 肴 肪 肯 臥 臾
+- 舍 芳 芝 芙 芭 芽 芟 芹 花 芬 芥 芯 芸 芣 芰 芾
+- 芷 虎 虱 初 表 軋 迎 返 近 邵 邸 邱 邶 采 金 長
+- 門 阜 陀 阿 阻 附 陂 隹 雨 青 非 亟 亭 亮 信 侵
+- 侯 便 俠 俑 俏 保 促 侶 俘 俟 俊 俗 侮 俐 俄 係
+- 俚 俎 俞 侷 兗 冒 冑 冠 剎 剃 削 前 剌 剋 則 勇
+- 勉 勃 勁 匍 南 卻 厚 叛 咬 哀 咨 哎 哉 咸 咦 咳
+- 哇 哂 咽 咪 品 哄 哈 咯 咫 咱 咻 咩 咧 咿 囿 垂
+- 型 垠 垣 垢 城 垮 垓 奕 契 奏 奎 奐 姜 姘 姿 姣
+- 姨 娃 姥 姪 姚 姦 威 姻 孩 宣 宦 室 客 宥 封 屎
+- 屏 屍 屋 峙 峒 巷 帝 帥 帟 幽 庠 度 建 弈 弭 彥
+- 很 待 徊 律 徇 後 徉 怒 思 怠 急 怎 怨 恍 恰 恨
+- 恢 恆 恃 恬 恫 恪 恤 扁 拜 挖 按 拼 拭 持 拮 拽
+- 指 拱 拷 拯 括 拾 拴 挑 挂 政 故 斫 施 既 春 昭
+- 映 昧 是 星 昨 昱 昤 曷 柿 染 柱 柔 某 柬 架 枯
+- 柵 柩 柯 柄 柑 枴 柚 查 枸 柏 柞 柳 枰 柙 柢 柝
+- 柒 歪 殃 殆 段 毒 毗 氟 泉 洋 洲 洪 流 津 洌 洱
+- 洞 洗 活 洽 派 洶 洛 泵 洹 洧 洸 洩 洮 洵 洎 洫
+- 炫 為 炳 炬 炯 炭 炸 炮 炤 爰 牲 牯 牴 狩 狠 狡
+- 玷 珊 玻 玲 珍 珀 玳 甚 甭 畏 界 畎 畋 疫 疤 疥
+- 疢 疣 癸 皆 皇 皈 盈 盆 盃 盅 省 盹 相 眉 看 盾
+- 盼 眇 矜 砂 研 砌 砍 祆 祉 祈 祇 禹 禺 科 秒 秋
+- 穿 突 竿 竽 籽 紂 紅 紀 紉 紇 約 紆 缸 美 羿 耄
+- 耐 耍 耑 耶 胖 胥 胚 胃 胄 背 胡 胛 胎 胞 胤 胝
+- 致 舢 苧 范 茅 苣 苛 苦 茄 若 茂 茉 苒 苗 英 茁
+- 苜 苔 苑 苞 苓 苟 苯 茆 虐 虹 虻 虺 衍 衫 要 觔
+- 計 訂 訃 貞 負 赴 赳 趴 軍 軌 述 迦 迢 迪 迥 迭
+- 迫 迤 迨 郊 郎 郁 郃 酋 酊 重 閂 限 陋 陌 降 面
+- 革 韋 韭 音 頁 風 飛 食 首 香 乘 亳 倌 倍 倣 俯
+- 倦 倥 俸 倩 倖 倆 值 借 倚 倒 們 俺 倀 倔 倨 俱
+- 倡 個 候 倘 俳 修 倭 倪 俾 倫 倉 兼 冤 冥 冢 凍
+- 凌 准 凋 剖 剜 剔 剛 剝 匪 卿 原 厝 叟 哨 唐 唁
+- 唷 哼 哥 哲 唆 哺 唔 哩 哭 員 唉 哮 哪 哦 唧 唇
+- 哽 唏 圃 圄 埂 埔 埋 埃 堉 夏 套 奘 奚 娑 娘 娜
+- 娟 娛 娓 姬 娠 娣 娩 娥 娌 娉 孫 屘 宰 害 家 宴
+- 宮 宵 容 宸 射 屑 展 屐 峭 峽 峻 峪 峨 峰 島 崁
+- 峴 差 席 師 庫 庭 座 弱 徒 徑 徐 恙 恣 恥 恐 恕
+- 恭 恩 息 悄 悟 悚 悍 悔 悌 悅 悖 扇 拳 挈 拿 捎
+- 挾 振 捕 捂 捆 捏 捉 挺 捐 挽 挪 挫 挨 捍 捌 效
+- 敉 料 旁 旅 時 晉 晏 晃 晒 晌 晅 晁 書 朔 朕 朗
+- 校 核 案 框 桓 根 桂 桔 栩 梳 栗 桌 桑 栽 柴 桐
+- 桀 格 桃 株 桅 栓 栘 桁 殊 殉 殷 氣 氧 氨 氦 氤
+- 泰 浪 涕 消 涇 浦 浸 海 浙 涓 浬 涉 浮 浚 浴 浩
+- 涌 涊 浹 涅 浥 涔 烊 烘 烤 烙 烈 烏 爹 特 狼 狹
+- 狽 狸 狷 玆 班 琉 珮 珠 珪 珞 畔 畝 畜 畚 留 疾
+- 病 症 疲 疳 疽 疼 疹 痂 疸 皋 皰 益 盍 盎 眩 真
+- 眠 眨 矩 砰 砧 砸 砝 破 砷 砥 砭 砠 砟 砲 祕 祐
+- 祠 祟 祖 神 祝 祗 祚 秤 秣 秧 租 秦 秩 秘 窄 窈
+- 站 笆 笑 粉 紡 紗 紋 紊 素 索 純 紐 紕 級 紜 納
+- 紙 紛 缺 罟 羔 翅 翁 耆 耘 耕 耙 耗 耽 耿 胱 脂
+- 胰 脅 胭 胴 脆 胸 胳 脈 能 脊 胼 胯 臭 臬 舀 舐
+- 航 舫 舨 般 芻 茫 荒 荔 荊 茸 荐 草 茵 茴 荏 茲
+- 茹 茶 茗 荀 茱 茨 荃 虔 蚊 蚪 蚓 蚤 蚩 蚌 蚣 蚜
+- 衰 衷 袁 袂 衽 衹 記 訐 討 訌 訕 訊 託 訓 訖 訏
+- 訑 豈 豺 豹 財 貢 起 躬 軒 軔 軏 辱 送 逆 迷 退
+- 迺 迴 逃 追 逅 迸 邕 郡 郝 郢 酒 配 酌 釘 針 釗
+- 釜 釙 閃 院 陣 陡 陛 陝 除 陘 陞 隻 飢 馬 骨 高
+- 鬥 鬲 鬼 乾 偺 偽 停 假 偃 偌 做 偉 健 偶 偎 偕
+- 偵 側 偷 偏 倏 偯 偭 兜 冕 凰 剪 副 勒 務 勘 動
+- 匐 匏 匙 匿 區 匾 參 曼 商 啪 啦 啄 啞 啡 啃 啊
+- 唱 啖 問 啕 唯 啤 唸 售 啜 唬 啣 唳 啁 啗 圈 國
+- 圉 域 堅 堊 堆 埠 埤 基 堂 堵 執 培 夠 奢 娶 婁
+- 婉 婦 婪 婀 娼 婢 婚 婆 婊 孰 寇 寅 寄 寂 宿 密
+- 尉 專 將 屠 屜 屝 崇 崆 崎 崛 崖 崢 崑 崩 崔 崙
+- 崤 崧 崗 巢 常 帶 帳 帷 康 庸 庶 庵 庾 張 強 彗
+- 彬 彩 彫 得 徙 從 徘 御 徠 徜 恿 患 悉 悠 您 惋
+- 悴 惦 悽 情 悻 悵 惜 悼 惘 惕 惆 惟 悸 惚 惇 戚
+- 戛 扈 掠 控 捲 掖 探 接 捷 捧 掘 措 捱 掩 掉 掃
+- 掛 捫 推 掄 授 掙 採 掬 排 掏 掀 捻 捩 捨 捺 敝
+- 敖 救 教 敗 啟 敏 敘 敕 敔 斜 斛 斬 族 旋 旌 旎
+- 晝 晚 晤 晨 晦 晞 曹 勗 望 梁 梯 梢 梓 梵 桿 桶
+- 梱 梧 梗 械 梃 棄 梭 梆 梅 梔 條 梨 梟 梡 梂 欲
+- 殺 毫 毬 氫 涎 涼 淳 淙 液 淡 淌 淤 添 淺 清 淇
+- 淋 涯 淑 涮 淞 淹 涸 混 淵 淅 淒 渚 涵 淚 淫 淘
+- 淪 深 淮 淨 淆 淄 涪 淬 涿 淦 烹 焉 焊 烽 烯 爽
+- 牽 犁 猜 猛 猖 猓 猙 率 琅 琊 球 理 現 琍 瓠 瓶
+- 瓷 甜 產 略 畦 畢 異 疏 痔 痕 疵 痊 痍 皎 盔 盒
+- 盛 眷 眾 眼 眶 眸 眺 硫 硃 硎 祥 票 祭 移 窒 窕
+- 笠 笨 笛 第 符 笙 笞 笮 粒 粗 粕 絆 絃 統 紮 紹
+- 紼 絀 細 紳 組 累 終 紲 紱 缽 羞 羚 翌 翎 習 耜
+- 聊 聆 脯 脖 脣 脫 脩 脰 脤 舂 舵 舷 舶 船 莎 莞
+- 莘 荸 莢 莖 莽 莫 莒 莊 莓 莉 莠 荷 荻 荼 莆 莧
+- 處 彪 蛇 蛀 蚶 蛄 蚵 蛆 蛋 蚱 蚯 蛉 術 袞 袈 被
+- 袒 袖 袍 袋 覓 規 訪 訝 訣 訥 許 設 訟 訛 訢 豉
+- 豚 販 責 貫 貨 貪 貧 赧 赦 趾 趺 軛 軟 這 逍 通
+- 逗 連 速 逝 逐 逕 逞 造 透 逢 逖 逛 途 部 郭 都
+- 酗 野 釵 釦 釣 釧 釭 釩 閉 陪 陵 陳 陸 陰 陴 陶
+- 陷 陬 雀 雪 雩 章 竟 頂 頃 魚 鳥 鹵 鹿 麥 麻 傢
+- 傍 傅 備 傑 傀 傖 傘 傚 最 凱 割 剴 創 剩 勞 勝
+- 勛 博 厥 啻 喀 喧 啼 喊 喝 喘 喂 喜 喪 喔 喇 喋
+- 喃 喳 單 喟 唾 喲 喚 喻 喬 喱 啾 喉 喫 喙 圍 堯
+- 堪 場 堤 堰 報 堡 堝 堠 壹 壺 奠 婷 媚 婿 媒 媛
+- 媧 孳 孱 寒 富 寓 寐 尊 尋 就 嵌 嵐 崴 嵇 巽 幅
+- 帽 幀 幃 幾 廊 廁 廂 廄 弼 彭 復 循 徨 惑 惡 悲
+- 悶 惠 愜 愣 惺 愕 惰 惻 惴 慨 惱 愎 惶 愉 愀 愒
+- 戟 扉 掣 掌 描 揀 揩 揉 揆 揍 插 揣 提 握 揖 揭
+- 揮 捶 援 揪 換 摒 揚 揹 敞 敦 敢 散 斑 斐 斯 普
+- 晰 晴 晶 景 暑 智 晾 晷 曾 替 期 朝 棺 棕 棠 棘
+- 棗 椅 棟 棵 森 棧 棹 棒 棲 棣 棋 棍 植 椒 椎 棉
+- 棚 楮 棻 款 欺 欽 殘 殖 殼 毯 氮 氯 氬 港 游 湔
+- 渡 渲 湧 湊 渠 渥 渣 減 湛 湘 渤 湖 湮 渭 渦 湯
+- 渴 湍 渺 測 湃 渝 渾 滋 溉 渙 湎 湣 湄 湲 湩 湟
+- 焙 焚 焦 焰 無 然 煮 焜 牌 犄 犀 猶 猥 猴 猩 琺
+- 琪 琳 琢 琥 琵 琶 琴 琯 琛 琦 琨 甥 甦 畫 番 痢
+- 痛 痣 痙 痘 痞 痠 登 發 皖 皓 皴 盜 睏 短 硝 硬
+- 硯 稍 稈 程 稅 稀 窘 窗 窖 童 竣 等 策 筆 筐 筒
+- 答 筍 筋 筏 筑 粟 粥 絞 結 絨 絕 紫 絮 絲 絡 給
+- 絢 絰 絳 善 翔 翕 耋 聒 肅 腕 腔 腋 腑 腎 脹 腆
+- 脾 腌 腓 腴 舒 舜 菩 萃 菸 萍 菠 菅 萋 菁 華 菱
+- 菴 著 萊 菰 萌 菌 菽 菲 菊 萸 萎 萄 菜 萇 菔 菟
+- 虛 蛟 蛙 蛭 蛔 蛛 蛤 蛐 蛞 街 裁 裂 袱 覃 視 註
+- 詠 評 詞 証 詁 詔 詛 詐 詆 訴 診 訶 詖 象 貂 貯
+- 貼 貳 貽 賁 費 賀 貴 買 貶 貿 貸 越 超 趁 跎 距
+- 跋 跚 跑 跌 跛 跆 軻 軸 軼 辜 逮 逵 週 逸 進 逶
+- 鄂 郵 鄉 郾 酣 酥 量 鈔 鈕 鈣 鈉 鈞 鈍 鈐 鈇 鈑
+- 閔 閏 開 閑 間 閒 閎 隊 階 隋 陽 隅 隆 隍 陲 隄
+- 雁 雅 雄 集 雇 雯 雲 韌 項 順 須 飧 飪 飯 飩 飲
+- 飭 馮 馭 黃 黍 黑 亂 傭 債 傲 傳 僅 傾 催 傷 傻
+- 傯 僇 剿 剷 剽 募 勦 勤 勢 勣 匯 嗟 嗨 嗓 嗦 嗎
+- 嗜 嗇 嗑 嗣 嗤 嗯 嗚 嗡 嗅 嗆 嗥 嗉 園 圓 塞 塑
+- 塘 塗 塚 塔 填 塌 塭 塊 塢 塒 塋 奧 嫁 嫉 嫌 媾
+- 媽 媼 媳 嫂 媲 嵩 嵯 幌 幹 廉 廈 弒 彙 徬 微 愚
+- 意 慈 感 想 愛 惹 愁 愈 慎 慌 慄 慍 愾 愴 愧 愍
+- 愆 愷 戡 戢 搓 搾 搞 搪 搭 搽 搬 搏 搜 搔 損 搶
+- 搖 搗 搆 敬 斟 新 暗 暉 暇 暈 暖 暄 暘 暍 會 榔
+- 業 楚 楷 楠 楔 極 椰 概 楊 楨 楫 楞 楓 楹 榆 楝
+- 楣 楛 歇 歲 毀 殿 毓 毽 溢 溯 滓 溶 滂 源 溝 滇
+- 滅 溥 溘 溼 溺 溫 滑 準 溜 滄 滔 溪 溧 溴 煎 煙
+- 煩 煤 煉 照 煜 煬 煦 煌 煥 煞 煆 煨 煖 爺 牒 猷
+- 獅 猿 猾 瑯 瑚 瑕 瑟 瑞 瑁 琿 瑙 瑛 瑜 當 畸 瘀
+- 痰 瘁 痲 痱 痺 痿 痴 痳 盞 盟 睛 睫 睦 睞 督 睹
+- 睪 睬 睜 睥 睨 睢 矮 碎 碰 碗 碘 碌 碉 硼 碑 碓
+- 硿 祺 祿 禁 萬 禽 稜 稚 稠 稔 稟 稞 窟 窠 筷 節
+- 筠 筮 筧 粱 粳 粵 經 絹 綑 綁 綏 絛 置 罩 罪 署
+- 義 羨 群 聖 聘 肆 肄 腱 腰 腸 腥 腮 腳 腫 腹 腺
+- 腦 舅 艇 蒂 葷 落 萱 葵 葦 葫 葉 葬 葛 萼 萵 葡
+- 董 葩 葭 葆 虞 虜 號 蛹 蜓 蜈 蜇 蜀 蛾 蛻 蜂 蜃
+- 蜆 蜊 衙 裟 裔 裙 補 裘 裝 裡 裊 裕 裒 覜 解 詫
+- 該 詳 試 詩 詰 誇 詼 詣 誠 話 誅 詭 詢 詮 詬 詹
+- 詻 訾 詨 豢 貊 貉 賊 資 賈 賄 貲 賃 賂 賅 跡 跟
+- 跨 路 跳 跺 跪 跤 跦 躲 較 載 軾 輊 辟 農 運 遊
+- 道 遂 達 逼 違 遐 遇 遏 過 遍 遑 逾 遁 鄒 鄗 酬
+- 酪 酩 釉 鈷 鉗 鈸 鈽 鉀 鈾 鉛 鉋 鉤 鉑 鈴 鉉 鉍
+- 鉅 鈹 鈿 鉚 閘 隘 隔 隕 雍 雋 雉 雊 雷 電 雹 零
+- 靖 靴 靶 預 頑 頓 頊 頒 頌 飼 飴 飽 飾 馳 馱 馴
+- 髡 鳩 麂 鼎 鼓 鼠 僧 僮 僥 僖 僭 僚 僕 像 僑 僱
+- 僎 僩 兢 凳 劃 劂 匱 厭 嗾 嘀 嘛 嘗 嗽 嘔 嘆 嘉
+- 嘍 嘎 嗷 嘖 嘟 嘈 嘐 嗶 團 圖 塵 塾 境 墓 墊 塹
+- 墅 塽 壽 夥 夢 夤 奪 奩 嫡 嫦 嫩 嫗 嫖 嫘 嫣 孵
+- 寞 寧 寡 寥 實 寨 寢 寤 察 對 屢 嶄 嶇 幛 幣 幕
+- 幗 幔 廓 廖 弊 彆 彰 徹 慇 愿 態 慷 慢 慣 慟 慚
+- 慘 慵 截 撇 摘 摔 撤 摸 摟 摺 摑 摧 搴 摭 摻 敲
+- 斡 旗 旖 暢 暨 暝 榜 榨 榕 槁 榮 槓 構 榛 榷 榻
+- 榫 榴 槐 槍 榭 槌 榦 槃 榣 歉 歌 氳 漳 演 滾 漓
+- 滴 漩 漾 漠 漬 漏 漂 漢 滿 滯 漆 漱 漸 漲 漣 漕
+- 漫 漯 澈 漪 滬 漁 滲 滌 滷 熔 熙 煽 熊 熄 熒 爾
+- 犒 犖 獄 獐 瑤 瑣 瑪 瑰 瑭 甄 疑 瘧 瘍 瘋 瘉 瘓
+- 盡 監 瞄 睽 睿 睡 磁 碟 碧 碳 碩 碣 禎 福 禍 種
+- 稱 窪 窩 竭 端 管 箕 箋 筵 算 箝 箔 箏 箸 箇 箄
+- 粹 粽 精 綻 綰 綜 綽 綾 綠 緊 綴 網 綱 綺 綢 綿
+- 綵 綸 維 緒 緇 綬 罰 翠 翡 翟 聞 聚 肇 腐 膀 膏
+- 膈 膊 腿 膂 臧 臺 與 舔 舞 艋 蓉 蒿 蓆 蓄 蒙 蒞
+- 蒲 蒜 蓋 蒸 蓀 蓓 蒐 蒼 蓑 蓊 蜿 蜜 蜻 蜢 蜥 蜴
+- 蜘 蝕 蜷 蜩 裳 褂 裴 裹 裸 製 裨 褚 裯 誦 誌 語
+- 誣 認 誡 誓 誤 說 誥 誨 誘 誑 誚 誧 豪 貍 貌 賓
+- 賑 賒 赫 趙 趕 跼 輔 輒 輕 輓 辣 遠 遘 遜 遣 遙
+- 遞 遢 遝 遛 鄙 鄘 鄞 酵 酸 酷 酴 鉸 銀 銅 銘 銖
+- 鉻 銓 銜 銨 鉼 銑 閡 閨 閩 閣 閥 閤 隙 障 際 雌
+- 雒 需 靼 鞅 韶 頗 領 颯 颱 餃 餅 餌 餉 駁 骯 骰
+- 髦 魁 魂 鳴 鳶 鳳 麼 鼻 齊 億 儀 僻 僵 價 儂 儈
+- 儉 儅 凜 劇 劈 劉 劍 劊 勰 厲 嘮 嘻 嘹 嘲 嘿 嘴
+- 嘩 噓 噎 噗 噴 嘶 嘯 嘰 墀 墟 增 墳 墜 墮 墩 墦
+- 奭 嬉 嫻 嬋 嫵 嬌 嬈 寮 寬 審 寫 層 履 嶝 嶔 幢
+- 幟 幡 廢 廚 廟 廝 廣 廠 彈 影 德 徵 慶 慧 慮 慝
+- 慕 憂 慼 慰 慫 慾 憧 憐 憫 憎 憬 憚 憤 憔 憮 戮
+- 摩 摯 摹 撞 撲 撈 撐 撰 撥 撓 撕 撩 撒 撮 播 撫
+- 撚 撬 撙 撢 撳 敵 敷 數 暮 暫 暴 暱 樣 樟 槨 樁
+- 樞 標 槽 模 樓 樊 槳 樂 樅 槭 樑 歐 歎 殤 毅 毆
+- 漿 潼 澄 潑 潦 潔 澆 潭 潛 潸 潮 澎 潺 潰 潤 澗
+- 潘 滕 潯 潠 潟 熟 熬 熱 熨 牖 犛 獎 獗 瑩 璋 璃
+- 瑾 璀 畿 瘠 瘩 瘟 瘤 瘦 瘡 瘢 皚 皺 盤 瞎 瞇 瞌
+- 瞑 瞋 磋 磅 確 磊 碾 磕 碼 磐 稿 稼 穀 稽 稷 稻
+- 窯 窮 箭 箱 範 箴 篆 篇 篁 箠 篌 糊 締 練 緯 緻
+- 緘 緬 緝 編 緣 線 緞 緩 綞 緙 緲 緹 罵 罷 羯 翩
+- 耦 膛 膜 膝 膠 膚 膘 蔗 蔽 蔚 蓮 蔬 蔭 蔓 蔑 蔣
+- 蔡 蔔 蓬 蔥 蓿 蔆 螂 蝴 蝶 蝠 蝦 蝸 蝨 蝙 蝗 蝌
+- 蝓 衛 衝 褐 複 褒 褓 褕 褊 誼 諒 談 諄 誕 請 諸
+- 課 諉 諂 調 誰 論 諍 誶 誹 諛 豌 豎 豬 賠 賞 賦
+- 賤 賬 賭 賢 賣 賜 質 賡 赭 趟 趣 踫 踐 踝 踢 踏
+- 踩 踟 踡 踞 躺 輝 輛 輟 輩 輦 輪 輜 輞 輥 適 遮
+- 遨 遭 遷 鄰 鄭 鄧 鄱 醇 醉 醋 醃 鋅 銻 銷 鋪 銬
+- 鋤 鋁 銳 銼 鋒 鋇 鋰 銲 閭 閱 霄 霆 震 霉 靠 鞍
+- 鞋 鞏 頡 頫 頜 颳 養 餓 餒 餘 駝 駐 駟 駛 駑 駕
+- 駒 駙 骷 髮 髯 鬧 魅 魄 魷 魯 鴆 鴉 鴃 麩 麾 黎
+- 墨 齒 儒 儘 儔 儐 儕 冀 冪 凝 劑 劓 勳 噙 噫 噹
+- 噩 噤 噸 噪 器 噥 噱 噯 噬 噢 噶 壁 墾 壇 壅 奮
+- 嬝 嬴 學 寰 導 彊 憲 憑 憩 憊 懍 憶 憾 懊 懈 戰
+- 擅 擁 擋 撻 撼 據 擄 擇 擂 操 撿 擒 擔 撾 整 曆
+- 曉 暹 曄 曇 暸 樽 樸 樺 橙 橫 橘 樹 橄 橢 橡 橋
+- 橇 樵 機 橈 歙 歷 氅 濂 澱 澡 濃 澤 濁 澧 澳 激
+- 澹 澶 澦 澠 澴 熾 燉 燐 燒 燈 燕 熹 燎 燙 燜 燃
+- 燄 獨 璜 璣 璘 璟 璞 瓢 甌 甍 瘴 瘸 瘺 盧 盥 瞠
+- 瞞 瞟 瞥 磨 磚 磬 磧 禦 積 穎 穆 穌 穋 窺 篙 簑
+- 築 篤 篛 篡 篩 篦 糕 糖 縊 縑 縈 縛 縣 縞 縝 縉
+- 縐 罹 羲 翰 翱 翮 耨 膳 膩 膨 臻 興 艘 艙 蕊 蕙
+- 蕈 蕨 蕩 蕃 蕉 蕭 蕪 蕞 螃 螟 螞 螢 融 衡 褪 褲
+- 褥 褫 褡 親 覦 諦 諺 諫 諱 謀 諜 諧 諮 諾 謁 謂
+- 諷 諭 諳 諶 諼 豫 豭 貓 賴 蹄 踱 踴 蹂 踹 踵 輻
+- 輯 輸 輳 辨 辦 遵 遴 選 遲 遼 遺 鄴 醒 錠 錶 鋸
+- 錳 錯 錢 鋼 錫 錄 錚 錐 錦 錡 錕 錮 錙 閻 隧 隨
+- 險 雕 霎 霑 霖 霍 霓 霏 靛 靜 靦 鞘 頰 頸 頻 頷
+- 頭 頹 頤 餐 館 餞 餛 餡 餚 駭 駢 駱 骸 骼 髻 髭
+- 鬨 鮑 鴕 鴣 鴦 鴨 鴒 鴛 默 黔 龍 龜 優 償 儡 儲
+- 勵 嚎 嚀 嚐 嚅 嚇 嚏 壕 壓 壑 壎 嬰 嬪 嬤 孺 尷
+- 屨 嶼 嶺 嶽 嶸 幫 彌 徽 應 懂 懇 懦 懋 戲 戴 擎
+- 擊 擘 擠 擰 擦 擬 擱 擢 擭 斂 斃 曙 曖 檀 檔 檄
+- 檢 檜 櫛 檣 橾 檗 檐 檠 歜 殮 毚 氈 濘 濱 濟 濠
+- 濛 濤 濫 濯 澀 濬 濡 濩 濕 濮 濰 燧 營 燮 燦 燥
+- 燭 燬 燴 燠 爵 牆 獰 獲 璩 環 璦 璨 癆 療 癌 盪
+- 瞳 瞪 瞰 瞬 瞧 瞭 矯 磷 磺 磴 磯 礁 禧 禪 穗 窿
+- 簇 簍 篾 篷 簌 篠 糠 糜 糞 糢 糟 糙 糝 縮 績 繆
+- 縷 縲 繃 縫 總 縱 繅 繁 縴 縹 繈 縵 縿 縯 罄 翳
+- 翼 聱 聲 聰 聯 聳 臆 臃 膺 臂 臀 膿 膽 臉 膾 臨
+- 舉 艱 薪 薄 蕾 薜 薑 薔 薯 薛 薇 薨 薊 虧 蟀 蟑
+- 螳 蟒 蟆 螫 螻 螺 蟈 蟋 褻 褶 襄 褸 褽 覬 謎 謗
+- 謙 講 謊 謠 謝 謄 謐 豁 谿 豳 賺 賽 購 賸 賻 趨
+- 蹉 蹋 蹈 蹊 轄 輾 轂 轅 輿 避 遽 還 邁 邂 邀 鄹
+- 醣 醞 醜 鍍 鎂 錨 鍵 鍊 鍥 鍋 錘 鍾 鍬 鍛 鍰 鍚
+- 鍔 闊 闋 闌 闈 闆 隱 隸 雖 霜 霞 鞠 韓 顆 颶 餵
+- 騁 駿 鮮 鮫 鮪 鮭 鴻 鴿 麋 黏 點 黜 黝 黛 鼾 齋
+- 叢 嚕 嚮 壙 壘 嬸 彝 懣 戳 擴 擲 擾 攆 擺 擻 擷
+- 斷 曜 朦 檳 檬 櫃 檻 檸 櫂 檮 檯 歟 歸 殯 瀉 瀋
+- 濾 瀆 濺 瀑 瀏 燻 燼 燾 燸 獷 獵 璧 璿 甕 癖 癘
+- 癒 瞽 瞿 瞻 瞼 礎 禮 穡 穢 穠 竄 竅 簫 簧 簪 簞
+- 簣 簡 糧 織 繕 繞 繚 繡 繒 繙 罈 翹 翻 職 聶 臍
+- 臏 舊 藏 薩 藍 藐 藉 薰 薺 薹 薦 蟯 蟬 蟲 蟠 覆
+- 覲 觴 謨 謹 謬 謫 豐 贅 蹙 蹣 蹦 蹤 蹟 蹕 軀 轉
+- 轍 邇 邃 邈 醫 醬 釐 鎔 鎊 鎖 鎢 鎳 鎮 鎬 鎰 鎘
+- 鎚 鎗 闔 闖 闐 闕 離 雜 雙 雛 雞 霤 鞣 鞦 鞭 韹
+- 額 顏 題 顎 顓 颺 餾 餿 餽 餮 馥 騎 髁 鬃 鬆 魏
+- 魎 魍 鯊 鯉 鯽 鯈 鯀 鵑 鵝 鵠 黠 鼕 鼬 儳 嚥 壞
+- 壟 壢 寵 龐 廬 懲 懷 懶 懵 攀 攏 曠 曝 櫥 櫝 櫚
+- 櫓 瀛 瀟 瀨 瀚 瀝 瀕 瀘 爆 爍 牘 犢 獸 獺 璽 瓊
+- 瓣 疇 疆 癟 癡 矇 礙 禱 穫 穩 簾 簿 簸 簽 簷 籀
+- 繫 繭 繹 繩 繪 羅 繳 羶 羹 羸 臘 藩 藝 藪 藕 藤
+- 藥 藷 蟻 蠅 蠍 蟹 蟾 襠 襟 襖 襞 譁 譜 識 證 譚
+- 譎 譏 譆 譙 贈 贊 蹼 蹲 躇 蹶 蹬 蹺 蹴 轔 轎 辭
+- 邊 邋 醱 醮 鏡 鏑 鏟 鏃 鏈 鏜 鏝 鏖 鏢 鏍 鏘 鏤
+- 鏗 鏨 關 隴 難 霪 霧 靡 韜 韻 類 願 顛 颼 饅 饉
+- 騖 騙 鬍 鯨 鯧 鯖 鯛 鶉 鵡 鵲 鵪 鵬 麒 麗 麓 麴
+- 勸 嚨 嚷 嚶 嚴 嚼 壤 孀 孃 孽 寶 巉 懸 懺 攘 攔
+- 攙 曦 朧 櫬 瀾 瀰 瀲 爐 獻 瓏 癢 癥 礦 礪 礬 礫
+- 竇 競 籌 籃 籍 糯 糰 辮 繽 繼 纂 罌 耀 臚 艦 藻
+- 藹 蘑 藺 蘆 蘋 蘇 蘊 蠔 蠕 襤 覺 觸 議 譬 警 譯
+- 譟 譫 贏 贍 躉 躁 躅 躂 醴 釋 鐘 鐃 鏽 闡 霰 飄
+- 饒 饑 馨 騫 騰 騷 騵 鰓 鰍 鹹 麵 黨 鼯 齟 齣 齡
+- 儷 儸 囁 囀 囂 夔 屬 巍 懼 懾 攝 攜 斕 曩 櫻 欄
+- 櫺 殲 灌 爛 犧 瓖 瓔 癩 矓 籐 纏 續 羼 蘗 蘭 蘚
+- 蠣 蠢 蠡 蠟 襪 襬 覽 譴 護 譽 贓 躊 躍 躋 轟 辯
+- 醺 鐮 鐳 鐵 鐺 鐸 鐲 鐫 闢 霸 霹 露 響 顧 顥 饗
+- 驅 驃 驀 騾 髏 魔 魑 鰭 鰥 鶯 鶴 鷂 鶸 麝 黯 鼙
+- 齜 齦 齧 儼 儻 囈 囊 囉 孿 巔 巒 彎 懿 攤 權 歡
+- 灑 灘 玀 瓤 疊 癮 癬 禳 籠 籟 聾 聽 臟 襲 襯 觼
+- 讀 贖 贗 躑 躓 轡 酈 鑄 鑑 鑒 霽 霾 韃 韁 顫 饕
+- 驕 驍 髒 鬚 鱉 鰱 鰾 鰻 鷓 鷗 鼴 齬 齪 龔 囌 巖
+- 戀 攣 攫 攪 曬 欐 瓚 竊 籤 籣 籥 纓 纖 纔 臢 蘸
+- 蘿 蠱 變 邐 邏 鑣 鑠 鑤 靨 顯 饜 驚 驛 驗 髓 體
+- 髑 鱔 鱗 鱖 鷥 麟 黴 囑 壩 攬 灞 癱 癲 矗 罐 羈
+- 蠶 蠹 衢 讓 讒 讖 艷 贛 釀 鑪 靂 靈 靄 韆 顰 驟
+- 鬢 魘 鱟 鷹 鷺 鹼 鹽 鼇 齷 齲 廳 欖 灣 籬 籮 蠻
+- 觀 躡 釁 鑲 鑰 顱 饞 髖 鬣 黌 灤 矚 讚 鑷 韉 驢
+- 驥 纜 讜 躪 釅 鑽 鑾 鑼 鱷 鱸 黷 豔 鑿 鸚 爨 驪
+- 鬱 鸛 鸞 籲 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑴ ⑵
+- ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⅰ ⅱ ⅲ ⅳ ⅴ ⅵ ⅶ ⅷ
+- ⅸ ⅹ 丶 丿 亅 亠 冂 冖 冫 勹 匸 卩 厶 夊 宀 巛
+- ⼳ 广 彐 彡 攴 疒 辵 ¨ ˆ ヽ ヾ ゝ ゞ 々 〆 〇
+- ー [ ] ✽ ぁ あ ぃ い ぅ う ぇ え ぉ お か が
+- き ぎ く ぐ け げ こ ご さ ざ し じ す ず せ ぜ
+- そ ぞ た だ ち ぢ っ つ づ て で と ど な に ぬ
+- ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ べ ぺ ほ ぼ
+- ぽ ま み む め も ゃ や ゅ ゆ ょ よ ら り る れ
+- ろ ゎ わ ゐ ゑ を ん ァ ア ィ イ ゥ ウ ェ エ ォ
+- オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ ザ シ ジ ス
+- ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ テ デ ト ド
+- ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ ブ プ ヘ ベ
+- ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ ユ ョ ヨ ラ
+- リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ ヶ А Б В
+- Г Д Е Ё Ж З И Й К Л М Н О П Р С
+- Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б
+- в г д е ё ж з и й к л м н о п р
+- с т у ф х ц ч ш щ ъ ы ь э ю я ⇧
+- ↸ ↹   乚  刂   冈   ¬ ¦ ' "
+- ㈱ № ℡ ゛ ゜ ⺀ ⺄ ⺆ ⺇ ⺈ ⺊ ⺌ ⺍ ⺕ ⺜ ⺝
+- ⺥ ⺧ ⺪ ⺬ ⺮ ⺶ ⺼ ⺾ ⻆ ⻊ ⻌ ⻍ ⻏ ⻖ ⻗ ⻞
+- ⻣ ʃ ɐ ɛ ɔ ɵ œ ø ŋ ʊ ɪ 乂 乜 凵 匚 厂
+- 万 丌 乇 亍 囗 兀 屮 彳 丏 冇 与 丮 亓 仂 仉 仈
+- 冘 勼 卬 厹 圠 夃 夬 尐 巿 旡 殳 毌 气 爿 丱 丼
+- 仨 仜 仩 仡 仝 仚 刌 匜 卌 圢 圣 夗 夯 宁 宄 尒
+- 尻 屴 屳 帄 庀 庂 忉 戉 扐 氕 氶 汃 氿 氻 犮 犰
+- 玊 禸 肊 阞 伎 优 伬 仵 伔 仱 伀 价 伈 伝 伂 伅
+- 伢 伓 伄 仴 伒 冱 刓 刉 刐 劦 匢 匟 卍 厊 吇 囡
+- 囟 圮 圪 圴 夼 妀 奼 妅 奻 奾 奷 奿 孖 尕 尥 屼
+- 屺 屻 屾 巟 幵 庄 异 弚 彴 忕 忔 忏 扜 扞 扤 扡
+- 扦 扢 扙 扠 扚 扥 旯 旮 朾 朹 朸 朻 机 朿 朼 朳
+- 氘 汆 汒 汜 汏 汊 汔 汋 汌 灱 牞 犴 犵 玎 甪 癿
+- 穵 网 艸 艼 芀 艽 艿 虍 襾 邙 邗 邘 邛 邔 阢 阤
+- 阠 阣 佖 伻 佢 佉 体 佤 伾 佧 佒 佟 佁 佘 伭 伳
+- 伿 佡 冏 冹 刜 刞 刡 劭 劮 匉 卣 卲 厎 厏 吰 吷
+- 吪 呔 呅 吙 吜 吥 吘 吽 呏 呁 吨 吤 呇 囮 囧 囥
+- 坁 坅 坌 坉 坋 坒 夆 奀 妦 妘 妠 妗 妎 妢 妐 妏
+- 妧 妡 宎 宒 尨 尪 岍 岏 岈 岋 岉 岒 岊 岆 岓 岕
+- 巠 帊 帎 庋 庉 庌 庈 庍 弅 弝 彸 彶 忒 忑 忐 忭
+- 忨 忮 忳 忡 忤 忣 忺 忯 忷 忻 怀 忴 戺 抃 抌 抎
+- 抏 抔 抇 扱 扻 扺 扰 抁 抈 扷 扽 扲 扴 攷 旰 旴
+- 旳 旲 旵 杅 杇 杙 杕 杌 杈 杝 杍 杚 杋 毐 氙 氚
+- 汸 汧 汫 沄 沋 沏 汱 汯 汩 沚 汭 沇 沕 沜 汦 汳
+- 汥 汻 沎 灴 灺 牣 犿 犽 狃 狆 狁 犺 狅 玕 玗 玓
+- 玔 玒 町 甹 疔 疕 皁 礽 耴 肕 肙 肐 肒 肜 芐 芏
+- 芅 芎 芑 芓 芊 芃 芄 豸 迉 辿 邟 邡 邥 邞 邧 邠
+- 阰 阨 阯 阭 丳 侘 佼 侅 佽 侀 侇 佶 佴 侉 侄 佷
+- 佌 侗 佪 侚 佹 侁 佸 侐 侜 侔 侞 侒 侂 侕 佫 佮
+- 冞 冼 冾 刵 刲 刳 剆 刱 劼 匊 匋 匼 厒 厔 咇 呿
+- 咁 咑 咂 咈 呫 呺 呾 呥 呬 呴 呦 咍 呯 呡 呠 咘
+- 呣 呧 呤 囷 囹 坯 坲 坭 坫 坱 坰 坶 垀 坵 坻 坳
+- 坴 坢 坨 坽 夌 奅 妵 妺 姏 姎 妲 姌 姁 妶 妼 姃
+- 姖 妱 妽 姀 姈 妴 姇 孢 孥 宓 宕 屄 屇 岮 岤 岠
+- 岵 岯 岨 岬 岟 岣 岭 岢 岪 岧 岝 岥 岶 岰 岦 帗
+- 帔 帙 弨 弢 弣 弤 彔 徂 彾 彽 忞 忥 怭 怦 怙 怲
+- 怋 怴 怊 怗 怳 怚 怞 怬 怢 怍 怐 怮 怓 怑 怌 怉
+- 怜 戔 戽 抭 抴 拑 抾 抪 抶 拊 抮 抳 抯 抻 抩 抰
+- 抸 攽 斨 斻 昉 旼 昄 昒 昈 旻 昃 昋 昍 昅 旽 昑
+- 昐 曶 朊 枅 杬 枎 枒 杶 杻 枘 枆 构 杴 枍 枌 杺
+- 枟 枑 枙 枃 杽 极 杸 杹 枔 欥 殀 歾 毞 氝 沓 泬
+- 泫 泮 泙 沶 泔 沭 泧 沷 泐 泂 沺 泃 泆 泭 泲 泒
+- 泝 沴 沊 沝 沀 泞 泀 洰 泍 泇 沰 泹 泏 泩 泑 炔
+- 炘 炅 炓 炆 炄 炑 炖 炂 炚 炃 牪 狖 狋 狘 狉 狜
+- 狒 狔 狚 狌 狑 玤 玡 玭 玦 玢 玠 玬 玝 瓝 瓨 甿
+- 畀 甾 疌 疘 皯 盳 盱 盰 盵 矸 矼 矹 矻 矺 矷 祂
+- 礿 秅 穸 穻 竻 籵 糽 耵 肏 肮 肣 肸 肵 肭 舠 芠
+- 苀 芫 芚 芘 芛 芵 芧 芮 芼 芞 芺 芴 芨 芡 芩 苂
+- 芤 苃 芶 芢 虰 虯 虭 虮 豖 迒 迋 迓 迍 迖 迕 迗
+- 邲 邴 邯 邳 邰 阹 阽 阼 阺 陃 俍 俅 俓 侲 俉 俋
+- 俁 俔 俜 俙 侻 侳 俛 俇 俖 侺 俀 侹 俬 剄 剉 勀
+- 勂 匽 卼 厗 厖 厙 厘 咺 咡 咭 咥 哏 哃 茍 咷 咮
+- 哖 咶 哅 哆 咠 呰 咼 咢 咾 呲 哞 咰 垵 垞 垟 垤
+- 垌 垗 垝 垛 垔 垘 垏 垙 垥 垚 垕 壴 复 奓 姡 姞
+- 姮 娀 姱 姝 姺 姽 姼 姶 姤 姲 姷 姛 姩 姳 姵 姠
+- 姾 姴 姭 宨 屌 峐 峘 峌 峗 峋 峛 峞 峚 峉 峇 峊
+- 峖 峓 峔 峏 峈 峆 峎 峟 峸 巹 帡 帢 帣 帠 帤 庰
+- 庤 庢 庛 庣 庥 弇 弮 彖 徆 怷 怹 恔 恲 恞 恅 恓
+- 恇 恉 恛 恌 恀 恂 恟 怤 恄 恘 恦 恮 扂 扃 拏 挍
+- 挋 拵 挎 挃 拫 拹 挏 挌 拸 拶 挀 挓 挔 拺 挕 拻
+- 拰 敁 敃 斪 斿 昶 昡 昲 昵 昜 昦 昢 昳 昫 昺 昝
+- 昴 昹 昮 朏 朐 柁 柲 柈 枺 柜 枻 柸 柘 柀 枷 柅
+- 柫 柤 柟 枵 柍 枳 柷 柶 柮 柣 柂 枹 柎 柧 柰 枲
+- 柼 柆 柭 柌 枮 柦 柛 柺 柉 柊 柃 柪 柋 欨 殂 殄
+- 殶 毖 毘 毠 氠 氡 洨 洴 洭 洟 洼 洿 洒 洊 泚 洳
+- 洄 洙 洺 洚 洑 洀 洝 浂 洁 洘 洷 洃 洏 浀 洇 洠
+- 洬 洈 洢 洉 洐 炷 炟 炾 炱 炰 炡 炴 炵 炩 牁 牉
+- 牊 牬 牰 牳 牮 狊 狤 狨 狫 狟 狪 狦 狣 玅 珌 珂
+- 珈 珅 玹 玶 玵 玴 珫 玿 珇 玾 珃 珆 玸 珋 瓬 瓮
+- 甮 畇 畈 疧 疪 癹 盄 眈 眃 眄 眅 眊 盷 盻 盺 矧
+- 矨 砆 砑 砒 砅 砐 砏 砎 砉 砃 砓 祊 祌 祋 祅 祄
+- 秕 种 秏 秖 秎 窀 穾 竑 笀 笁 籺 籸 籹 籿 粀 粁
+- 紃 紈 紁 罘 羑 羍 羾 耇 耎 耏 耔 耷 胘 胇 胠 胑
+- 胈 胂 胐 胅 胣 胙 胜 胊 胕 胉 胏 胗 胦 胍 臿 舡
+- 芔 苙 苾 苹 茇 苨 茀 苕 茺 苫 苖 苴 苬 苡 苲 苵
+- 茌 苻 苶 苰 苪 苤 苠 苺 苳 苭 虷 虴 虼 虳 衁 衎
+- 衧 衪 衩 觓 訄 訇 赲 迣 迡 迮 迠 郱 邽 邿 郕 郅
+- 邾 郇 郋 郈 釔 釓 陔 陏 陑 陓 陊 陎 倞 倅 倇 倓
+- 倢 倰 倛 俵 俴 倳 倷 倬 俶 俷 倗 倜 倠 倧 倵 倯
+- 倱 倎 党 冔 冓 凊 凄 凅 凈 凎 剡 剚 剒 剞 剟 剕
+- 剢 勍 匎 厞 唦 哢 唗 唒 哧 哳 哤 唚 哿 唄 唈 哫
+- 唑 唅 哱 唊 哻 哷 哸 哠 唎 唃 唋 圁 圂 埌 堲 埕
+- 埒 垺 埆 垽 垼 垸 垶 垿 埇 埐 垹 埁 夎 奊 娙 娖
+- 娭 娮 娕 娏 娗 娊 娞 娳 孬 宧 宭 宬 尃 屖 屔 峬
+- 峿 峮 峱 峷 崀 峹 帩 帨 庨 庮 庪 庬 弳 弰 彧 恝
+- 恚 恧 恁 悢 悈 悀 悒 悁 悝 悃 悕 悛 悗 悇 悜 悎
+- 戙 扆 拲 挐 捖 挬 捄 捅 挶 捃 揤 挹 捋 捊 挼 挩
+- 捁 挴 捘 捔 捙 挭 捇 挳 捚 捑 挸 捗 捀 捈 敊 敆
+- 旆 旃 旄 旂 晊 晟 晇 晑 朒 朓 栟 栚 桉 栲 栳 栻
+- 桋 桏 栖 栱 栜 栵 栫 栭 栯 桎 桄 栴 栝 栒 栔 栦
+- 栨 栮 桍 栺 栥 栠 欬 欯 欭 欱 欴 歭 肂 殈 毦 毤
+- 毨 毣 毢 毧 氥 浺 浣 浤 浶 洍 浡 涒 浘 浢 浭 浯
+- 涑 涍 淯 浿 涆 浞 浧 浠 涗 浰 浼 浟 涂 涘 洯 浨
+- 涋 浾 涀 涄 洖 涃 浻 浽 浵 涐 烜 烓 烑 烝 烋 缹
+- 烢 烗 烒 烞 烠 烔 烍 烅 烆 烇 烚 烎 烡 牂 牸 牷
+- 牶 猀 狺 狴 狾 狶 狳 狻 猁 珓 珙 珥 珖 玼 珧 珣
+- 珩 珜 珒 珛 珔 珝 珚 珗 珘 珨 瓞 瓟 瓴 瓵 甡 畛
+- 畟 疰 痁 疻 痄 痀 疿 疶 疺 皊 盉 眝 眛 眐 眓 眒
+- 眣 眑 眕 眙 眚 眢 眧 砣 砬 砢 砵 砯 砨 砮 砫 砡
+- 砩 砳 砪 砱 祔 祛 祏 祜 祓 祒 祑 秫 秬 秠 秮 秭
+- 秪 秜 秞 秝 窆 窉 窅 窋 窌 窊 窇 竘 笐 笄 笓 笅
+- 笏 笈 笊 笎 笉 笒 粄 粑 粊 粌 粈 粍 粅 紞 紝 紑
+- 紎 紘 紖 紓 紟 紒 紏 紌 罜 罡 罞 罠 罝 罛 羖 羒
+- 翃 翂 翀 耖 耾 耹 胺 胲 胹 胵 脁 胻 脀 舁 舯 舥
+- 茳 茭 荄 茙 荑 茥 荖 茿 荁 茦 茜 茢 荂 荎 茛 茪
+- 茈 茼 荍 茖 茤 茠 茷 茯 茩 荇 荅 荌 荓 茞 茬 荋
+- 茧 荈 虓 虒 蚢 蚨 蚖 蚍 蚑 蚞 蚇 蚗 蚆 蚋 蚚 蚅
+- 蚥 蚙 蚡 蚧 蚕 蚘 蚎 蚝 蚐 蚔 衃 衄 衭 衵 衶 衲
+- 袀 衱 衿 衯 袃 衾 衴 衼 訒 豇 豗 豻 貤 貣 赶 赸
+- 趵 趷 趶 軑 軓 迾 迵 适 迿 迻 逄 迼 迶 郖 郠 郙
+- 郚 郣 郟 郥 郘 郛 郗 郜 郤 酐 酎 酏 釕 釢 釚 陜
+- 陟 隼 飣 髟 鬯 乿 偰 偪 偡 偞 偠 偓 偋 偝 偲 偈
+- 偍 偁 偛 偊 偢 倕 偅 偟 偩 偫 偣 偤 偆 偀 偮 偳
+- 偗 偑 凐 剫 剭 剬 剮 勖 勓 匭 厜 啵 啶 唼 啍 啐
+- 唴 唪 啑 啢 唶 唵 唰 啒 啅 唌 唲 啥 啎 唹 啈 唭
+- 唻 啀 啋 圊 圇 埻 堔 埢 埶 埜 埴 堀 埭 埽 堈 埸
+- 堋 埳 埏 堇 埮 埣 埲 埥 埬 埡 堎 埼 堐 埧 堁 堌
+- 埱 埩 埰 堍 堄 奜 婠 婘 婕 婧 婞 娸 娵 婭 婐 婟
+- 婥 婬 婓 婤 婗 婃 婝 婒 婄 婛 婈 媎 娾 婍 娹 婌
+- 婰 婩 婇 婑 婖 婂 婜 孲 孮 寁 寀 屙 崞 崋 崝 崚
+- 崠 崌 崨 崍 崦 崥 崏 崰 崒 崣 崟 崮 帾 帴 庱 庴
+- 庹 庲 庳 弶 弸 徛 徖 徟 悊 悐 悆 悾 悰 悺 惓 惔
+- 惏 惤 惙 惝 惈 悱 惛 悷 惊 悿 惃 惍 惀 挲 捥 掊
+- 掂 捽 掽 掞 掭 掝 掗 掫 掎 捯 掇 掐 据 掯 捵 掜
+- 捭 掮 捼 掤 挻 掟 捸 掅 掁 掑 掍 捰 敓 旍 晥 晡
+- 晛 晙 晜 晢 朘 桹 梇 梐 梜 桭 桮 梮 梫 楖 桯 梣
+- 梬 梩 桵 桴 梲 梏 桷 梒 桼 桫 桲 梪 梀 桱 桾 梛
+- 梖 梋 梠 梉 梤 桸 桻 梑 梌 梊 桽 欶 欳 欷 欸 殑
+- 殏 殍 殎 殌 氪 淀 涫 涴 涳 湴 涬 淩 淢 涷 淶 淔
+- 渀 淈 淠 淟 淖 涾 淥 淜 淝 淛 淴 淊 涽 淭 淰 涺
+- 淕 淂 淏 淉 淐 淲 淓 淽 淗 淍 淣 涻 烺 焍 烷 焗
+- 烴 焌 烰 焄 烳 焐 烼 烿 焆 焓 焀 烸 烶 焋 焂 焎
+- 牾 牻 牼 牿 猝 猗 猇 猑 猘 猊 猈 狿 猏 猞 玈 珶
+- 珸 珵 琄 琁 珽 琇 琀 珺 珼 珿 琌 琋 珴 琈 畤 畣
+- 痎 痒 痏 痋 痌 痑 痐 皏 皉 盓 眹 眯 眭 眱 眲 眴
+- 眳 眽 眥 眻 眵 硈 硒 硉 硍 硊 硌 砦 硅 硐 祤 祧
+- 祩 祪 祣 祫 祡 离 秺 秸 秶 秷 窏 窔 窐 笵 筇 笴
+- 笥 笰 笢 笤 笳 笘 笪 笝 笱 笫 笭 笯 笲 笸 笚 笣
+- 粔 粘 粖 粣 紵 紽 紸 紶 紺 絅 紬 紩 絁 絇 紾 紿
+- 絊 紻 紨 罣 羕 羜 羝 羛 翊 翋 翍 翐 翑 翇 翏 翉
+- 耟 耞 耛 聇 聃 聈 脘 脥 脙 脛 脭 脟 脬 脞 脡 脕
+- 脧 脝 脢 舑 舸 舳 舺 舴 舲 艴 莐 莣 莨 莍 荺 荳
+- 莤 荴 莏 莁 莕 莙 荵 莔 莩 荽 莃 莌 莝 莛 莪 莋
+- 荾 莥 莯 莈 莗 莰 荿 莦 莇 莮 荶 莚 虙 虖 蚿 蚷
+- 蛂 蛁 蛅 蚺 蚰 蛈 蚹 蚳 蚸 蛌 蚴 蚻 蚼 蛃 蚽 蚾
+- 衒 袉 袕 袨 袢 袪 袚 袑 袡 袟 袘 袧 袙 袛 袗 袤
+- 袬 袌 袓 袎 覂 觖 觙 觕 訰 訧 訬 訞 谹 谻 豜 豝
+- 豽 貥 赽 赻 赹 趼 跂 趹 趿 跁 軘 軞 軝 軜 軗 軠
+- 軡 逤 逋 逑 逜 逌 逡 郯 郪 郰 郴 郲 郳 郔 郫 郬
+- 郩 酖 酘 酚 酓 酕 釬 釴 釱 釳 釸 釤 釹 釪 釫 釷
+- 釨 釮 镺 閆 閈 陼 陭 陫 陱 陯 隿 靪 頄 飥 馗 傛
+- 傕 傔 傞 傋 傣 傃 傌 傎 傝 偨 傜 傒 傂 傇 兟 凔
+- 匒 匑 厤 厧 喑 喨 喥 喭 啷 噅 喢 喓 喈 喏 喵 喁
+- 喣 喒 喤 啽 喌 喦 啿 喕 喡 喎 圌 堩 堷 堙 堞 堧
+- 堣 堨 埵 塈 堥 堜 堛 堳 堿 堶 堮 堹 堸 堭 堬 堻
+- 奡 媯 媔 媟 婺 媢 媞 婸 媦 婼 媥 媬 媕 媮 娷 媄
+- 媊 媗 媃 媋 媩 婻 婽 媌 媜 媏 媓 媝 寪 寍 寋 寔
+- 寑 寊 寎 尌 尰 崷 嵃 嵫 嵁 嵋 崿 崵 嵑 嵎 嵕 崳
+- 崺 嵒 崽 崱 嵙 嵂 崹 嵉 崸 崼 崲 崶 嵀 嵅 幄 幁
+- 彘 徦 徥 徫 惉 悹 惌 惢 惎 惄 愔 惲 愊 愖 愅 惵
+- 愓 惸 惼 惾 惁 愃 愘 愝 愐 惿 愄 愋 扊 掔 掱 掰
+- 揎 揥 揨 揯 揃 撝 揳 揊 揠 揶 揕 揲 揵 摡 揟 掾
+- 揝 揜 揄 揘 揓 揂 揇 揌 揋 揈 揰 揗 揙 攲 敧 敪
+- 敤 敜 敨 敥 斌 斝 斞 斮 旐 旒 晼 晬 晻 暀 晱 晹
+- 晪 晲 朁 椌 棓 椄 棜 椪 棬 棪 棱 椏 棖 棷 棫 棤
+- 棶 椓 椐 棳 棡 椇 棌 椈 楰 梴 椑 棯 棆 椔 棸 棐
+- 棽 棼 棨 椋 椊 椗 棎 棈 棝 棞 棦 棴 棑 椆 棔 棩
+- 椕 椥 棇 欹 欻 欿 欼 殔 殗 殙 殕 殽 毰 毲 毳 氰
+- 淼 湆 湇 渟 湉 溈 渼 渽 湅 湢 渫 渿 湁 湝 湳 渜
+- 渳 湋 湀 湑 渻 渃 渮 湞 湨 湜 湡 渱 渨 湠 湱 湫
+- 渹 渢 渰 湓 湥 渧 湸 湤 湷 湕 湹 湒 湦 渵 渶 湚
+- 焠 焞 焯 烻 焮 焱 焣 焥 焢 焲 焟 焨 焺 焛 牋 牚
+- 犈 犉 犆 犅 犋 猒 猋 猰 猢 猱 猳 猧 猲 猭 猦 猣
+- 猵 猌 琮 琬 琰 琫 琖 琚 琡 琭 琱 琤 琣 琝 琩 琠
+- 琲 瓻 甯 畯 畬 痧 痚 痡 痦 痝 痟 痤 痗 皕 皒 盚
+- 睆 睇 睄 睍 睅 睊 睎 睋 睌 矞 矬 硠 硤 硥 硜 硭
+- 硱 硪 确 硰 硩 硨 硞 硢 祴 祳 祲 祰 稂 稊 稃 稌
+- 稄 窙 竦 竤 筊 笻 筄 筈 筌 筎 筀 筘 筅 粢 粞 粨
+- 粡 絘 絯 絣 絓 絖 絧 絪 絏 絭 絜 絫 絒 絔 絩 絑
+- 絟 絎 缾 缿 罥 罦 羢 羠 羡 翗 聑 聏 聐 胾 胔 腃
+- 腊 腒 腏 腇 脽 腍 脺 臦 臮 臷 臸 臹 舄 舼 舽 舿
+- 艵 茻 菏 菹 萣 菀 菨 萒 菧 菤 菼 菶 萐 菆 菈 菫
+- 菣 莿 萁 菝 菥 菘 菿 菡 菋 菎 菖 菵 菉 萉 萏 菞
+- 萑 萆 菂 菳 菕 菺 菇 菑 菪 萓 菃 菬 菮 菄 菻 菗
+- 菢 萛 菛 菾 蛘 蛢 蛦 蛓 蛣 蛚 蛪 蛝 蛫 蛜 蛬 蛩
+- 蛗 蛨 蛑 衈 衖 衕 袺 裗 袹 袸 裀 袾 袶 袼 袷 袽
+- 袲 褁 裉 覕 覘 覗 觝 觚 觛 詎 詍 訹 詙 詀 詗 詘
+- 詄 詅 詒 詈 詑 詊 詌 詏 豟 貁 貀 貺 貾 貰 貹 貵
+- 趄 趀 趉 跘 跓 跍 跇 跖 跜 跏 跕 跙 跈 跗 跅 軯
+- 軷 軺 軹 軦 軮 軥 軵 軧 軨 軶 軫 軱 軬 軴 軩 逭
+- 逴 逯 鄆 鄬 鄄 郿 郼 鄈 郹 郻 鄁 鄀 鄇 鄅 鄃 酡
+- 酤 酟 酢 酠 鈁 鈊 鈥 鈃 鈚 鈦 鈏 鈌 鈀 鈒 釿 釽
+- 鈆 鈄 鈧 鈂 鈜 鈤 鈙 鈗 鈅 鈖 镻 閍 閌 閐 隇 陾
+- 隈 隉 隃 隀 雂 雈 雃 雱 雰 靬 靰 靮 頇 颩 飫 鳦
+- 黹 亃 亄 亶 傽 傿 僆 傮 僄 僊 傴 僈 僂 傰 僁 傺
+- 傱 僋 僉 傶 傸 凗 剺 剸 剻 剼 嗃 嗛 嗌 嗐 嗋 嗊
+- 嗝 嗀 嗔 嗄 嗩 喿 嗒 喍 嗏 嗕 嗢 嗖 嗈 嗲 嗍 嗙
+- 嗂 圔 塓 塨 塤 塏 塍 塉 塯 塕 塎 塝 塙 塥 塛 堽
+- 塣 塱 壼 嫇 嫄 嫋 媺 媸 媱 媵 媰 媿 嫈 媻 嫆 媷
+- 嫀 嫊 媴 媶 嫍 媹 媐 寖 寘 寙 尟 尳 嵱 嵣 嵊 嵥
+- 嵲 嵬 嵞 嵨 嵧 嵢 巰 幏 幎 幊 幍 幋 廅 廌 廆 廋
+- 廇 彀 徯 徭 惷 慉 慊 愫 慅 愶 愲 愮 慆 愯 慏 愩
+- 慀 戠 酨 戣 戥 戤 揅 揱 揫 搐 搒 搉 搠 搤 搳 摃
+- 搟 搕 搘 搹 搷 搢 搣 搌 搦 搰 搨 摁 搵 搯 搊 搚
+- 摀 搥 搧 搋 揧 搛 搮 搡 搎 敯 斒 旓 暆 暌 暕 暐
+- 暋 暊 暙 暔 晸 朠 楦 楟 椸 楎 楢 楱 椿 楅 楪 椹
+- 楂 楗 楙 楺 楈 楉 椵 楬 椳 椽 楥 棰 楸 椴 楩 楀
+- 楯 楄 楶 楘 楁 楴 楌 椻 楋 椷 楜 楏 楑 椲 楒 椯
+- 楻 椼 歆 歅 歃 歂 歈 歁 殛 嗀 毻 毼 毹 毷 毸 溛
+- 滖 滈 溏 滀 溟 溓 溔 溠 溱 溹 滆 滒 溽 滁 溞 滉
+- 溷 溰 滍 溦 滏 溲 溾 滃 滜 滘 溙 溒 溎 溍 溤 溡
+- 溿 溳 滐 滊 溗 溮 溣 煇 煔 煒 煣 煠 煁 煝 煢 煲
+- 煸 煪 煡 煂 煘 煃 煋 煰 煟 煐 煓 煄 煍 煚 牏 犍
+- 犌 犑 犐 犎 猼 獂 猻 猺 獀 獊 獉 瑄 瑊 瑋 瑒 瑑
+- 瑗 瑀 瑏 瑐 瑎 瑂 瑆 瑍 瑔 瓡 瓿 瓾 瓽 甝 畹 畷
+- 榃 痯 瘏 瘃 痷 痾 痼 痹 痸 瘐 痻 痶 痭 痵 痽 皙
+- 皵 盝 睕 睟 睠 睒 睖 睚 睩 睧 睔 睙 睭 矠 碇 碚
+- 碔 碏 碄 碕 碅 碆 碡 碃 硹 碙 碀 碖 硻 祼 禂 祽
+- 祹 稑 稘 稙 稒 稗 稕 稢 稓 稛 稐 窣 窢 窞 竫 筦
+- 筤 筭 筴 筩 筲 筥 筳 筱 筰 筡 筸 筶 筣 粲 粴 粯
+- 綈 綆 綀 綍 絿 綅 絺 綎 絻 綃 絼 綌 綔 綄 絽 綒
+- 罭 罫 罧 罨 罬 羦 羥 羧 翛 翜 耡 腤 腠 腷 腜 腩
+- 腛 腢 腲 朡 腞 腶 腧 腯 腄 腡 舝 艉 艄 艀 艂 艅
+- 蓱 萿 葖 葶 葹 蒏 蒍 葥 葑 葀 蒆 葧 萰 葍 葽 葚
+- 葙 葴 葳 葝 蔇 葞 萷 萺 萴 葺 葃 葸 萲 葅 萩 菙
+- 葋 萯 葂 萭 葟 葰 萹 葎 葌 葒 葯 蓅 蒎 萻 葇 萶
+- 萳 葨 葾 葄 萫 葠 葔 葮 葐 蜋 蜄 蛷 蜌 蛺 蛖 蛵
+- 蝍 蛸 蜎 蜉 蜁 蛶 蜍 蜅 裖 裋 裍 裎 裞 裛 裚 裌
+- 裐 覅 覛 觟 觥 觤 觡 觠 觢 觜 触 詶 誆 詿 詡 訿
+- 詷 誂 誄 詵 誃 誁 詴 詺 谼 豋 豊 豥 豤 豦 貆 貄
+- 貅 賌 赨 赩 趑 趌 趎 趏 趍 趓 趔 趐 趒 跰 跠 跬
+- 跱 跮 跐 跩 跣 跢 跧 跲 跫 跴 輆 軿 輁 輀 輅 輇
+- 輈 輂 輋 遒 逿 遄 遉 逽 鄐 鄍 鄏 鄑 鄖 鄔 鄋 鄎
+- 酮 酯 鉈 鉒 鈰 鈺 鉦 鈳 鉥 鉞 銃 鈮 鉊 鉆 鉭 鉬
+- 鉏 鉠 鉧 鉯 鈶 鉡 鉰 鈱 鉔 鉣 鉐 鉲 鉎 鉓 鉌 鉖
+- 鈲 閟 閜 閞 閛 隒 隓 隑 隗 雎 雺 雽 雸 雵 靳 靷
+- 靸 靲 頏 頍 頎 颬 飶 飹 馯 馲 馰 馵 骭 骫 魛 鳪
+- 鳭 鳧 麀 黽 僦 僔 僗 僨 僳 僛 僪 僝 僤 僓 僬 僰
+- 僯 僣 僠 凘 劀 劁 勩 勫 匰 厬 嘧 嘕 嘌 嘒 嗼 嘏
+- 嘜 嘁 嘓 嘂 嗺 嘝 嘄 嗿 嗹 墉 塼 墐 墘 墆 墁 塿
+- 塴 墋 塺 墇 墑 墎 塶 墂 墈 塻 墔 墏 壾 奫 嫜 嫮
+- 嫥 嫕 嫪 嫚 嫭 嫫 嫳 嫢 嫠 嫛 嫬 嫞 嫝 嫙 嫨 嫟
+- 孷 寠 寣 屣 嶂 嶀 嵽 嶆 嵺 嶁 嵷 嶊 嶉 嶈 嵾 嵼
+- 嶍 嵹 嵿 幘 幙 幓 廘 廑 廗 廎 廜 廕 廙 廒 廔 彄
+- 彃 彯 徶 愬 愨 慁 慞 慱 慳 慒 慓 慲 慬 憀 慴 慔
+- 慺 慛 慥 愻 慪 慡 慖 戩 戧 戫 搫 摍 摛 摝 摴 摶
+- 摲 摳 摽 摵 摦 撦 摎 撂 摞 摜 摋 摓 摠 摐 摿 搿
+- 摬 摫 摙 摥 摷 敳 斠 暡 暠 暟 朅 朄 朢 榱 榶 槉
+- 榠 槎 榖 榰 榬 榼 榑 榙 榎 榧 榍 榩 榾 榯 榿 槄
+- 榽 榤 槔 榹 槊 榚 槏 榳 榓 榪 榡 榞 槙 榗 榐 槂
+- 榵 榥 槆 歊 歍 歋 殞 殟 殠 毃 毄 毾 滎 滵 滱 漃
+- 漥 滸 漷 滻 漮 漉 潎 漙 漚 漧 漘 漻 漒 滭 漊 漶
+- 潳 滹 滮 漭 潀 漰 漼 漵 滫 漇 漎 潃 漅 滽 滶 漹
+- 漜 滼 漺 漟 漍 漞 漈 漡 熇 熐 熉 熀 熅 熂 熏 煻
+- 熆 熁 熗 牄 牓 犗 犕 犓 獃 獍 獑 獌 瑢 瑳 瑱 瑵
+- 瑲 瑧 瑮 甀 甂 甃 畽 疐 瘖 瘈 瘌 瘕 瘑 瘊 瘔 皸
+- 瞁 睼 瞅 瞂 睮 瞀 睯 睾 瞃 碲 碪 碴 碭 碨 硾 碫
+- 碞 碥 碠 碬 碢 碤 禘 禊 禋 禖 禕 禔 禓 禗 禈 禒
+- 禐 稫 穊 稰 稯 稨 稦 窨 窫 窬 竮 箈 箜 箊 箑 箐
+- 箖 箍 箌 箛 箎 箅 箘 劄 箙 箤 箂 粻 粿 粼 粺 綧
+- 綷 緂 綣 綪 緁 緀 緅 綝 緎 緄 緆 緋 緌 綯 綹 綖
+- 綼 綟 綦 綮 綩 綡 緉 罳 翢 翣 翥 翞 耤 聝 聜 膉
+- 膆 膃 膇 膍 膌 膋 舕 蒗 蒤 蒡 蒟 蒺 蓎 蓂 蒬 蒮
+- 蒫 蒹 蒴 蓁 蓍 蒪 蒚 蒱 蓐 蒝 蒧 蒻 蒢 蒔 蓇 蓌
+- 蒛 蒩 蒯 蒨 蓖 蒘 蒶 蓏 蒠 蓗 蓔 蓒 蓛 蒰 蒑 虡
+- 蜳 蜣 蜨 蝫 蝀 蜮 蜞 蜡 蜙 蜛 蝃 蜬 蝁 蜾 蝆 蜠
+- 蜲 蜪 蜭 蜼 蜒 蜺 蜱 蜵 蝂 蜦 蜧 蜸 蜤 蜚 蜰 蜑
+- 裷 裧 裱 裲 裺 裾 裮 裼 裶 裻 裰 裬 裫 覝 覡 覟
+- 覞 觩 觫 觨 誫 誙 誋 誒 誏 誖 谽 豨 豩 賕 賏 賗
+- 趖 踉 踂 跿 踍 跽 踊 踃 踇 踆 踅 跾 踀 踄 輐 輑
+- 輎 輍 鄣 鄜 鄠 鄢 鄟 鄝 鄚 鄤 鄡 鄛 酺 酲 酹 酳
+- 銥 銤 鉶 銛 鉺 銠 銔 銪 銍 銦 銚 銫 鉹 銗 鉿 銣
+- 鋮 銎 銂 銕 銢 鉽 銈 銡 銊 銆 銌 銙 銧 鉾 銇 銩
+- 銝 銋 鈭 隞 隡 雿 靘 靽 靺 靾 鞃 鞀 鞂 靻 鞄 鞁
+- 靿 韎 韍 頖 颭 颮 餂 餀 餇 馝 馜 駃 馹 馻 馺 駂
+- 馽 駇 骱 髣 髧 鬾 鬿 魠 魡 魟 鳱 鳲 鳵 麧 僿 儃
+- 儰 僸 儆 儇 僶 僾 儋 儌 僽 儊 劋 劌 勱 勯 噈 噂
+- 噌 嘵 噁 噊 噉 噆 噘 噚 噀 嘳 嘽 嘬 嘾 嘸 嘪 嘺
+- 圚 墫 墝 墱 墠 墣 墯 墬 墥 墡 壿 嫿 嫴 嫽 嫷 嫶
+- 嬃 嫸 嬂 嫹 嬁 嬇 嬅 嬏 屧 嶙 嶗 嶟 嶒 嶢 嶓 嶕
+- 嶠 嶜 嶡 嶚 嶞 幩 幝 幠 幜 緳 廛 廞 廡 彉 徲 憋
+- 憃 慹 憱 憰 憢 憉 憛 憓 憯 憭 憟 憒 憪 憡 憍 慦
+- 憳 戭 摮 摰 撖 撠 撅 撗 撜 撏 撋 撊 撌 撣 撟 摨
+- 撱 撘 敶 敺 敹 敻 斲 斳 暵 暰 暩 暲 暷 暪 暯 樀
+- 樆 樗 槥 槸 樕 槱 槤 樠 槿 槬 槢 樛 樝 槾 樧 槲
+- 槮 樔 槷 槧 橀 樈 槦 槻 樍 槼 槫 樉 樄 樘 樥 樏
+- 槶 樦 樇 槴 樖 歑 殥 殣 殢 殦 氁 氀 毿 氂 潁 漦
+- 潾 澇 濆 澒 澍 澉 澌 潢 潏 澅 潚 澖 潶 潬 澂 潕
+- 潲 潒 潐 潗 澔 澓 潝 漀 潡 潫 潽 潧 澐 潓 澋 潩
+- 潿 澕 潣 潷 潪 潻 熲 熯 熛 熰 熠 熚 熩 熵 熝 熥
+- 熞 熤 熡 熪 熜 熧 熳 犘 犚 獘 獒 獞 獟 獠 獝 獛
+- 獡 獚 獙 獢 璇 璉 璊 璆 璁 瑽 璅 璈 瑼 瑹 甈 甇
+- 畾 瘥 瘞 瘙 瘝 瘜 瘣 瘚 瘨 瘛 皜 皝 皞 皛 瞍 瞏
+- 瞉 瞈 磍 碻 磏 磌 磑 磎 磔 磈 磃 磄 磉 禚 禡 禠
+- 禜 禢 禛 歶 稹 窲 窴 窳 箷 篋 箾 箬 篎 箯 箹 篊
+- 箵 糅 糈 糌 糋 緷 緛 緪 緧 緗 緡 縃 緺 緦 緶 緱
+- 緰 緮 緟 罶 羬 羰 羭 翭 翫 翪 翬 翦 翨 聤 聧 膣
+- 膟 膞 膕 膢 膙 膗 舖 艏 艓 艒 艐 艎 艑 蔤 蔻 蔏
+- 蔀 蔩 蔎 蔉 蔍 蔟 蔊 蔧 蔜 蓻 蔫 蓺 蔈 蔌 蓴 蔪
+- 蓲 蔕 蓷 蓫 蓳 蓼 蔒 蓪 蓩 蔖 蓾 蔨 蔝 蔮 蔂 蓽
+- 蔞 蓶 蔱 蔦 蓧 蓨 蓰 蓯 蓹 蔘 蔠 蔰 蔋 蔙 蔯 虢
+- 蝖 蝣 蝤 蝷 蟡 蝳 蝘 蝔 蝛 蝒 蝡 蝚 蝑 蝞 蝭 蝪
+- 蝐 蝎 蝟 蝝 蝯 蝬 蝺 蝮 蝜 蝥 蝏 蝻 蝵 蝢 蝧 蝩
+- 衚 褅 褌 褔 褋 褗 褘 褙 褆 褖 褑 褎 褉 覢 覤 覣
+- 觭 觰 觬 諏 諆 誸 諓 諑 諔 諕 誻 諗 誾 諀 諅 諘
+- 諃 誺 誽 諙 谾 豍 貏 賥 賟 賙 賨 賚 賝 賧 趠 趜
+- 趡 趛 踠 踣 踥 踤 踮 踕 踛 踖 踑 踙 踦 踧 踔 踒
+- 踘 踓 踜 踗 踚 輬 輤 輘 輚 輠 輣 輖 輗 遳 遰 遯
+- 遧 遫 鄯 鄫 鄩 鄪 鄲 鄦 鄮 醅 醆 醊 醁 醂 醄 醀
+- 鋐 鋃 鋄 鋀 鋙 銶 鋏 鋱 鋟 鋘 鋩 鋗 鋝 鋌 鋯 鋂
+- 鋨 鋊 鋈 鋎 鋦 鋍 鋕 鋉 鋠 鋞 鋧 鋑 鋓 銵 鋡 鋆
+- 銴 镼 閬 閫 閮 閰 隤 隢 雓 霅 霈 霂 靚 鞊 鞎 鞈
+- 韐 韏 頞 頝 頦 頩 頨 頠 頛 頧 颲 餈 飺 餑 餔 餖
+- 餗 餕 駜 駍 駏 駓 駔 駎 駉 駖 駘 駋 駗 駌 骳 髬
+- 髫 髳 髲 髱 魆 魃 魧 魴 魱 魦 魶 魵 魰 魨 魤 魬
+- 鳼 鳺 鳽 鳿 鳷 鴇 鴀 鳹 鳻 鴈 鴅 鴄 麃 黓 鼏 鼐
+- 儜 儓 儗 儚 儑 凞 匴 叡 噰 噠 噮 噳 噦 噣 噭 噲
+- 噞 噷 圜 圛 壈 墽 壉 墿 墺 壂 墼 壆 嬗 嬙 嬛 嬡
+- 嬔 嬓 嬐 嬖 嬨 嬚 嬠 嬞 寯 嶬 嶱 嶩 嶧 嶵 嶰 嶮
+- 嶪 嶨 嶲 嶭 嶯 嶴 幧 幨 幦 幯 廩 廧 廦 廨 廥 彋
+- 徼 憝 憨 憖 懅 憴 懆 懁 懌 憺 憿 憸 憌 擗 擖 擐
+- 擏 擉 撽 撉 擃 擛 擳 擙 攳 敿 敼 斢 曈 暾 曀 曊
+- 曋 曏 暽 暻 暺 曌 朣 樴 橦 橉 橧 樲 橨 樾 橝 橭
+- 橶 橛 橑 樨 橚 樻 樿 橁 橪 橤 橐 橏 橔 橯 橩 橠
+- 樼 橞 橖 橕 橍 橎 橆 歕 歔 歖 殧 殪 殫 毈 毇 氄
+- 氃 氆 澭 濋 澣 濇 澼 濎 濈 潞 濄 澽 澞 濊 澨 瀄
+- 澥 澮 澺 澬 澪 濏 澿 澸 澢 濉 澫 濍 澯 澲 澰 燅
+- 燂 熿 熸 燖 燀 燁 燋 燔 燊 燇 燏 熽 燘 熼 燆 燚
+- 燛 犝 犞 獩 獦 獧 獬 獥 獫 獪 瑿 璚 璠 璔 璒 璕
+- 璡 甋 疀 瘯 瘭 瘱 瘽 瘳 瘼 瘵 瘲 瘰 皻 盦 瞚 瞝
+- 瞡 瞜 瞛 瞢 瞣 瞕 瞙 瞗 磝 磩 磥 磪 磞 磣 磛 磡
+- 磢 磭 磟 磠 禤 穄 穈 穇 窶 窸 窵 窱 窷 篞 篣 篧
+- 篝 篕 篥 篚 篨 篹 篔 篪 篢 篜 篫 篘 篟 糒 糔 糗
+- 糐 糑 縒 縡 縗 縌 縟 縠 縓 縎 縜 縕 縚 縢 縋 縏
+- 縖 縍 縔 縥 縤 罃 罻 罼 罺 羱 翯 耪 耩 聬 膱 膦
+- 膮 膹 膵 膫 膰 膬 膴 膲 膷 膧 臲 艕 艖 艗 蕖 蕅
+- 蕫 蕍 蕓 蕡 蕘 蕀 蕆 蕤 蕁 蕢 蕄 蕑 蕇 蕣 蔾 蕛
+- 蕱 蕎 蕮 蕵 蕕 蕧 蕠 薌 蕦 蕝 蕔 蕥 蕬 虣 虥 虤
+- 螛 螏 螗 螓 螒 螈 螁 螖 螘 蝹 螇 螣 螅 螐 螑 螝
+- 螄 螔 螜 螚 螉 褞 褦 褰 褭 褮 褧 褱 褢 褩 褣 褯
+- 褬 褟 觱 諠 諢 諲 諴 諵 諝 謔 諤 諟 諰 諈 諞 諡
+- 諨 諿 諯 諻 貑 貒 貐 賵 賮 賱 賰 賳 赬 赮 趥 趧
+- 踳 踾 踸 蹀 蹅 踶 踼 踽 蹁 踰 踿 躽 輶 輮 輵 輲
+- 輹 輷 輴 遶 遹 遻 邆 郺 鄳 鄵 鄶 醓 醐 醑 醍 醏
+- 錧 錞 錈 錟 錆 錏 鍺 錸 錼 錛 錣 錒 錁 鍆 錭 錎
+- 錍 鋋 錝 鋺 錥 錓 鋹 鋷 錴 錂 錤 鋿 錩 錹 錵 錪
+- 錔 錌 錋 鋾 錉 錀 鋻 錖 閼 闍 閾 閹 閺 閶 閿 閵
+- 閽 隩 雔 霋 霒 霐 鞙 鞗 鞔 韰 韸 頵 頯 頲 餤 餟
+- 餧 餩 馞 駮 駬 駥 駤 駰 駣 駪 駩 駧 骹 骿 骴 骻
+- 髶 髺 髹 髷 鬳 鮀 鮅 鮇 魼 魾 魻 鮂 鮓 鮒 鮐 魺
+- 鮕 魽 鮈 鴥 鴗 鴠 鴞 鴔 鴩 鴝 鴘 鴢 鴐 鴙 鴟 麈
+- 麆 麇 麮 麭 黕 黖 黺 鼒 鼽 儦 儥 儢 儤 儠 儩 勴
+- 嚓 嚌 嚍 嚆 嚄 嚃 噾 嚂 噿 嚁 壖 壔 壏 壒 嬭 嬥
+- 嬲 嬣 嬬 嬧 嬦 嬯 嬮 孻 寱 寲 嶷 幬 幪 徾 徻 懃
+- 憵 憼 懧 懠 懥 懤 懨 懞 擯 擩 擣 擫 擤 擨 斁 斀
+- 斶 旚 曒 檍 檖 檁 檥 檉 檟 檛 檡 檞 檇 檓 檎 檕
+- 檃 檨 檤 檑 橿 檦 檚 檅 檌 檒 歛 殭 氉 濌 澩 濴
+- 濔 濣 濜 濭 濧 濦 濞 濲 濝 濢 濨 燡 燱 燨 燲 燤
+- 燰 燢 獳 獮 獯 璗 璲 璫 璐 璪 璭 璱 璥 璯 甐 甑
+- 甒 甏 疄 癃 癈 癉 癇 皤 盩 瞵 瞫 瞲 瞷 瞶 瞴 瞱
+- 瞨 矰 磳 磽 礂 磻 磼 磲 礅 磹 磾 礄 禫 禨 穜 穛
+- 穖 穘 穔 穚 窾 竀 竁 簅 簏 篲 簀 篿 篻 簎 篴 簋
+- 篳 簂 簉 簃 簁 篸 篽 簆 篰 篱 簐 簊 糨 縭 縼 繂
+- 縳 顈 縸 縪 繉 繀 繇 縩 繌 縰 縻 縶 繄 縺 罅 罿
+- 罾 罽 翴 翲 耬 膻 臄 臌 臊 臅 臇 膼 臩 艛 艚 艜
+- 薃 薀 薏 薧 薕 薠 薋 薣 蕻 薤 薚 薞 蕷 蕼 薉 薡
+- 蕺 蕸 蕗 薎 薖 薆 薍 薙 薝 薁 薢 薂 薈 薅 蕹 蕶
+- 薘 薐 薟 虨 螾 螪 螭 蟅 螰 螬 螹 螵 螼 螮 蟉 蟃
+- 蟂 蟌 螷 螯 蟄 蟊 螴 螶 螿 螸 螽 蟞 螲 褵 褳 褼
+- 褾 襁 襒 褷 襂 覭 覯 覮 觲 觳 謞 謘 謖 謑 謅 謋
+- 謢 謏 謒 謕 謇 謍 謈 謆 謜 謓 謚 豏 豰 豲 豱 豯
+- 貕 貔 賹 赯 蹎 蹍 蹓 蹐 蹌 蹇 轃 轀 邅 遾 鄸 醚
+- 醢 醛 醙 醟 醡 醝 醠 鎡 鎃 鎯 鍤 鍖 鍇 鍼 鍘 鍜
+- 鍶 鍉 鍐 鍑 鍠 鍭 鎏 鍌 鍪 鍹 鍗 鍕 鍒 鍏 鍱 鍷
+- 鍻 鍡 鍞 鍣 鍧 鎀 鍎 鍙 闇 闀 闉 闃 闅 閷 隮 隰
+- 隬 霠 霟 霘 霝 霙 鞚 鞡 鞜 鞞 鞝 韕 韔 韱 顁 顄
+- 顊 顉 顅 顃 餥 餫 餬 餪 餳 餲 餯 餭 餱 餰 馘 馣
+- 馡 騂 駺 駴 駷 駹 駸 駶 駻 駽 駾 駼 騃 骾 髾 髽
+- 鬁 髼 魈 鮚 鮨 鮞 鮛 鮦 鮡 鮥 鮤 鮆 鮢 鮠 鮯 鴳
+- 鵁 鵧 鴶 鴮 鴯 鴱 鴸 鴰 鵅 鵂 鵃 鴾 鴷 鵀 鴽 翵
+- 鴭 麊 麉 麍 麰 黈 黚 黻 黿 鼤 鼣 鼢 齔 龠 儱 儭
+- 儮 嚘 嚜 嚗 嚚 嚝 嚙 奰 嬼 屩 屪 巀 幭 幮 懘 懟
+- 懭 懮 懱 懪 懰 懫 懖 懩 擿 攄 擽 擸 攁 攃 擼 斔
+- 旛 曚 曛 曘 櫅 檹 檽 櫡 櫆 檺 檶 檷 櫇 檴 檭 歞
+- 毉 氋 瀇 瀌 瀍 瀁 瀅 瀔 瀎 濿 瀀 濻 瀦 濼 濷 瀊
+- 爁 燿 燹 爃 燽 獶 璸 瓀 璵 瓁 璾 璶 璻 瓂 甔 甓
+- 癜 癤 癙 癐 癓 癗 癚 皦 皽 盬 矂 瞺 磿 礌 礓 礔
+- 礉 礐 礒 礑 禭 禬 穟 簜 簩 簙 簠 簟 簭 簝 簦 簨
+- 簢 簥 簰 繜 繐 繖 繣 繘 繢 繟 繑 繠 繗 繓 羵 羳
+- 翷 翸 聵 臑 臒 臐 艟 艞 薴 藆 藀 藃 藂 薳 薵 薽
+- 藇 藄 薿 藋 藎 藈 藅 薱 薶 藒 蘤 薸 薷 薾 虩 蟧
+- 蟦 蟢 蟛 蟫 蟪 蟥 蟟 蟳 蟤 蟔 蟜 蟓 蟭 蟘 蟣 螤
+- 蟗 蟙 蠁 蟴 蟨 蟝 襓 襋 襏 襌 襆 襐 襑 襉 謪 謧
+- 謣 謳 謰 謵 譇 謯 謼 謾 謱 謥 謷 謦 謶 謮 謤 謻
+- 謽 謺 豂 豵 貙 貘 貗 賾 贄 贂 贀 蹜 蹢 蹠 蹗 蹖
+- 蹞 蹥 蹧 蹛 蹚 蹡 蹝 蹩 蹔 轆 轇 轈 轋 鄨 鄺 鄻
+- 鄾 醨 醥 醧 醯 醪 鎵 鎌 鎒 鎷 鎛 鎝 鎉 鎧 鎎 鎪
+- 鎞 鎦 鎕 鎈 鎙 鎟 鎍 鎱 鎑 鎲 鎤 鎨 鎴 鎣 鎥 闒
+- 闓 闑 隳 雗 雚 巂 雟 雘 雝 霣 霢 霥 鞬 鞮 鞨 鞫
+- 鞤 鞪 鞢 鞥 韗 韙 韖 韘 韺 顐 顑 顒 颸 饁 餼 餺
+- 騏 騋 騉 騍 騄 騑 騊 騅 騇 騆 髀 髜 鬈 鬄 鬅 鬩
+- 鬵 魊 魌 魋 鯇 鯆 鯃 鮿 鯁 鮵 鮸 鯓 鮶 鯄 鮹 鮽
+- 鵜 鵓 鵏 鵊 鵛 鵋 鵙 鵖 鵌 鵗 鵒 鵔 鵟 鵘 鵚 麎
+- 麌 黟 鼁 鼀 鼖 鼥 鼫 鼪 鼩 鼨 齌 齕 儴 儵 劖 勷
+- 厴 嚫 嚭 嚦 嚧 嚪 嚬 壚 壝 壛 夒 嬽 嬾 嬿 巃 幰
+- 徿 懻 攇 攐 攍 攉 攌 攎 斄 旞 旝 曞 櫧 櫠 櫌 櫑
+- 櫙 櫋 櫟 櫜 櫐 櫫 櫏 櫍 櫞 歠 殰 氌 瀙 瀧 瀠 瀖
+- 瀫 瀡 瀢 瀣 瀩 瀗 瀤 瀜 瀪 爌 爊 爇 爂 爅 犥 犦
+- 犤 犣 犡 瓋 瓅 璷 瓃 甖 癠 矉 矊 矄 矱 礝 礛 礡
+- 礜 礗 礞 禰 穧 穨 簳 簼 簹 簬 簻 糬 糪 繶 繵 繸
+- 繰 繷 繯 繺 繲 繴 繨 罋 罊 羃 羆 羷 翽 翾 聸 臗
+- 臕 艤 艡 艣 藫 藱 藭 藙 藡 藨 藚 藗 藬 藲 藸 藘
+- 藟 藣 藜 藑 藰 藦 藯 藞 藢 蠀 蟺 蠃 蟶 蟷 蠉 蠌
+- 蠋 蠆 蟼 蠈 蟿 蠊 蠂 襢 襚 襛 襗 襡 襜 襘 襝 襙
+- 覈 覷 覶 觶 譐 譈 譊 譀 譓 譖 譔 譋 譕 譑 譂 譒
+- 譗 豃 豷 豶 貚 贆 贇 贉 趬 趪 趭 趫 蹭 蹸 蹳 蹪
+- 蹯 蹻 軂 轒 轑 轏 轐 轓 辴 酀 鄿 醰 醭 鏞 鏇 鏏
+- 鏂 鏚 鏐 鏹 鏬 鏌 鏙 鎩 鏦 鏊 鏔 鏮 鏣 鏕 鏄 鏎
+- 鏀 鏒 鏧 镽 闚 闛 雡 霩 霫 霬 霨 霦 鞳 鞷 鞶 韝
+- 韞 韟 顜 顙 顝 顗 颿 颽 颻 颾 饈 饇 饃 馦 馧 騚
+- 騕 騥 騝 騤 騛 騢 騠 騧 騣 騞 騜 騔 髂 鬋 鬊 鬎
+- 鬌 鬷 鯪 鯫 鯠 鯞 鯤 鯦 鯢 鯰 鯔 鯗 鯬 鯜 鯙 鯥
+- 鯕 鯡 鯚 鵷 鶁 鶊 鶄 鶈 鵱 鶀 鵸 鶆 鶋 鶌 鵽 鵫
+- 鵴 鵵 鵰 鵩 鶅 鵳 鵻 鶂 鵯 鵹 鵿 鶇 鵨 麔 麑 黀
+- 黼 鼭 齀 齁 齍 齖 齗 齘 匷 嚲 嚵 嚳 壣 孅 巆 巇
+- 廮 廯 忀 忁 懹 攗 攖 攕 攓 旟 曨 曣 曤 櫳 櫰 櫪
+- 櫨 櫹 櫱 櫮 櫯 瀼 瀵 瀯 瀷 瀴 瀱 灂 瀸 瀿 瀺 瀹
+- 灀 瀻 瀳 灁 爓 爔 犨 獽 獼 璺 皫 皪 皾 盭 矌 矎
+- 矏 矍 矲 礥 礣 礧 礨 礤 礩 禲 穮 穬 穭 竷 籉 籈
+- 籊 籇 籅 糮 繻 繾 纁 纀 羺 翿 聹 臛 臙 舋 艨 艩
+- 蘢 藿 蘁 藾 蘛 蘀 藶 蘄 蘉 蘅 蘌 藽 蠙 蠐 蠑 蠗
+- 蠓 蠖 襣 襦 覹 觷 譠 譪 譝 譨 譣 譥 譧 譭 趮 躆
+- 躈 躄 轙 轖 轗 轕 轘 轚 邍 酃 酁 醷 醵 醲 醳 鐋
+- 鐓 鏻 鐠 鐏 鐔 鏾 鐕 鐐 鐨 鐙 鐍 鏵 鐀 鏷 鐇 鐎
+- 鐖 鐒 鏺 鐉 鏸 鐊 鏿 鏼 鐌 鏶 鐑 鐆 闞 闠 闟 霮
+- 霯 鞹 鞻 韽 韾 顠 顢 顣 顟 飁 飂 饐 饎 饙 饌 饋
+- 饓 騲 騴 騱 騬 騪 騶 騩 騮 騸 騭 髇 髊 髆 鬐 鬒
+- 鬑 鰋 鰈 鯷 鰅 鰒 鯸 鱀 鰇 鰎 鰆 鰗 鰔 鰉 鶟 鶙
+- 鶤 鶝 鶒 鶘 鶐 鶛 鶠 鶔 鶜 鶪 鶗 鶡 鶚 鶢 鶨 鶞
+- 鶣 鶿 鶩 鶖 鶦 鶧 麙 麛 麚 黥 黤 黧 黦 鼰 鼮 齛
+- 齠 齞 齝 齙 龑 儺 儹 劘 劗 囃 嚽 嚾 孈 孇 巋 巏
+- 廱 懽 攛 欂 櫼 欃 櫸 欀 灃 灄 灊 灈 灉 灅 灆 爝
+- 爚 爙 獾 甗 癪 矐 礭 礱 礯 籔 籓 糲 纊 纇 纈 纋
+- 纆 纍 罍 羻 耰 臝 蘘 蘪 蘦 蘟 蘣 蘜 蘙 蘧 蘮 蘡
+- 蘠 蘩 蘞 蘥 蠩 蠝 蠛 蠠 蠤 蠜 蠫 衊 襭 襩 襮 襫
+- 觺 譹 譸 譅 譺 譻 贐 贔 趯 躎 躌 轞 轛 轝 酆 酄
+- 酅 醹 鐿 鐻 鐶 鐩 鐽 鐼 鐰 鐹 鐪 鐷 鐬 鑀 鐱 闥
+- 闤 闣 霵 霺 鞿 韡 顤 飉 飆 飀 饘 饖 騹 騽 驆 驄
+- 驂 驁 騺 騿 髍 鬕 鬗 鬘 鬖 鬺 魒 鰫 鰝 鰜 鰬 鰣
+- 鰨 鰩 鰤 鰡 鶷 鶶 鶼 鷁 鷇 鷊 鷏 鶾 鷅 鷃 鶻 鶵
+- 鷎 鶹 鶺 鶬 鷈 鶱 鶭 鷌 鶳 鷍 鶲 鹺 麜 黫 黮 黭
+- 鼛 鼘 鼚 鼱 齎 齥 齤 龒 亹 囆 囅 囋 奱 孋 孌 巕
+- 巑 廲 攡 攠 攦 攢 欋 欈 欉 氍 灕 灖 灗 灒 爞 爟
+- 犩 獿 瓘 瓕 瓙 瓗 癭 皭 礵 禴 穰 穱 籗 籜 籙 籛
+- 籚 糴 糱 纑 罏 羇 臞 艫 蘴 蘵 蘳 蘬 蘲 蘶 蠬 蠨
+- 蠦 蠪 蠥 襱 覿 覾 觻 譾 讄 讂 讆 讅 譿 贕 躕 躔
+- 躚 躒 躐 躖 躗 轠 轢 酇 鑌 鑐 鑊 鑋 鑏 鑇 鑅 鑈
+- 鑉 鑆 霿 韣 顪 顩 飋 饔 饛 驎 驓 驔 驌 驏 驈 驊
+- 驉 驒 驐 髐 鬙 鬫 鬻 魖 魕 鱆 鱈 鰿 鱄 鰹 鰳 鱁
+- 鰼 鰷 鰴 鰲 鰽 鰶 鷛 鷒 鷞 鷚 鷋 鷐 鷜 鷑 鷟 鷩
+- 鷙 鷘 鷖 鷵 鷕 鷝 麶 黰 鼵 鼳 鼲 齂 齫 龕 龢 儽
+- 劙 壨 壧 奲 孍 巘 蠯 彏 戁 戃 戄 攩 攥 斖 曫 欑
+- 欒 欏 毊 灛 灚 爢 玂 玁 玃 癰 矔 籧 籦 纕 艬 蘺
+- 虀 蘹 蘼 蘱 蘻 蘾 蠰 蠲 蠮 蠳 襶 襴 襳 觾 讌 讎
+- 讋 讈 豅 贙 躘 轤 轣 醼 鑢 鑕 鑝 鑗 鑞 韄 韅 頀
+- 驖 驙 鬞 鬟 鬠 鱒 鱘 鱐 鱊 鱍 鱋 鱕 鱙 鱌 鱎 鷻
+- 鷷 鷯 鷣 鷫 鷸 鷤 鷶 鷡 鷮 鷦 鷲 鷰 鷢 鷬 鷴 鷳
+- 鷨 鷭 黂 黐 黲 黳 鼆 鼜 鼸 鼷 鼶 齃 齏 齱 齰 齮
+- 齯 囓 囍 孎 屭 攭 曭 曮 欓 灟 灡 灝 灠 爣 瓛 瓥
+- 矕 礸 禷 禶 籪 纗 羉 艭 虃 蠸 蠷 蠵 衋 讔 讕 躞
+- 躟 躠 躝 醾 醽 釂 鑫 鑨 鑩 雥 靆 靃 靇 韇 韥 驞
+- 髕 魙 鱣 鱧 鱦 鱢 鱞 鱠 鸂 鷾 鸇 鸃 鸆 鸅 鸀 鸁
+- 鸉 鷿 鷽 鸄 麠 鼞 齆 齴 齵 齶 囔 攮 斸 欘 欙 欗
+- 欚 灢 爦 犪 矘 矙 礹 籩 籫 糶 纚 纘 纛 纙 臠 臡
+- 虆 虇 虈 襹 襺 襼 襻 觿 讘 讙 躥 躤 躣 鑮 鑭 鑯
+- 鑱 鑳 靉 顲 饟 鱨 鱮 鱭 鸋 鸍 鸐 鸏 鸒 鸑 麡 黵
+- 鼉 齇 齸 齻 齺 齹 圞 灦 籯 蠼 趲 躦 釃 鑴 鑸 鑶
+- 鑵 驠 鱴 鱳 鱱 鱵 鸔 鸓 黶 鼊 龤 灨 灥 糷 虪 蠾
+- 蠽 蠿 讞 貜 躩 軉 靋 顳 顴 飌 饡 馫 驤 驦 驧 鬤
+- 鸕 鸗 齈 戇 欞 爧 虌 躨 钂 钀 钁 驩 驨 鬮 鸙 爩
+- 虋 讟 钃 鱹 麷 癵 驫 鱺 鸝 灩 灪 麤 齾 齉 龘 碁
+- 銹 裏 墻 恒 粧 嫺 ╔ ╦ ╗ ╠ ╬ ╣ ╚ ╩ ╝ ╒
+- ╤ ╕ ╞ ╪ ╡ ╘ ╧ ╛ ╓ ╥ ╖ ╟ ╫ ╢ ╙ ╨
+- ╜ ║ ═ ╭ ╮ ╰ ╯ ■ 𠕇 鋛 𠗟  蕌 䊵 珯 况
+- 㙉 𤥂 𨧤 鍄 𡧛 苮 𣳈 砼 杄 拟 𤤳 𨦪 𠊠 𦮳 𡌅 侫
+-  倈 𦴩  𣘀 𤪱 𢔓 𠍾 徤 𠎀 𠍇 滛 𠐟 儁 㑺 儎
+- 顬 㝃 萖  𠒇 兠 𣎴 兪 𠯿 𢃼 𠋥 𢔰 𠖎 𣈳  宂
+- 蝽 𠖳 𣲙 冲 冸 鴴 凉 减 凑 㳜 凓 𤪦 决 凢 卂 凭
+- 菍 椾  彻 刋 刦 刼 劵 剗 劔 効 勅 簕 蕂 勠 蘍
+-  𨫞 啉 滙 𣾀 𠥔 𣿬 匳 𠯢 泋 𡜦 栛 珕 恊 㺪 㣌
+- 𡛨 燝 䒢 卭 却 𨚫 卾 𡖖 𡘓 矦 厓 𨪛 厠 厫 厮 玧
+- 𥝲 㽙 玜 叁 叅 汉 义 埾 叙 㪫 𠮏 叠 𣿫 𢶣 叶 𠱷
+- 吓 灹 唫 晗 浛 呭 𦭓  啝 咏 咤 䞦   㶴 𠵍
+- 𨦼 𢚘 啇 䳭 启 琗 喆 喩 𡣗 𤀺 䕒 𤐵 暳 𡂴 嘷 曍
+- 𣊊 暤 暭 噍 噏 磱 囱 鞇 叾 圀 囯 园 𨭦 㘣 𡉏 坆
+- 𤆥 汮 炋 坂 㚱 𦱾 埦  堃 𡑔 𤍣 堦 𤯵 塜 墪 㕡
+- 壠 壜  壻 寿 坃 𪅐 𤉸 鏓 㖡 够 梦 㛃 湙 𡘾 娤
+- 啓 𡚒 蔅 姉 𠵎 𦲁 𦴪 𡟜 姙 𡟻 𡞲 𦶦 浱 𡠨 𡛕 姹
+- 𦹅 媫 婣 㛦  㜈 媖 瑥 嫓 𦾡  㶅 𡤑 㜲  広
+- 勐 孶 斈 孼 𧨎 䀄 䡝  寕 慠   𠖥 寳 宝 䴐
+- 尅 𡭄 尓 珎 尔 𡲥 𦬨 屉 䣝 岅 峩 峯 嶋 𡷹 𡸷 崐
+- 崘 嵆 𡺤 岺 巗 苼 㠭 𤤁 𢁉 𢅳 芇 㠶 㯂 帮 檊 幺
+-  𠳓 厦 亷 厨 𡝱 帉 廴 𨒂 廹 廻 㢠 廼 栾 鐛 弍
+- 𠇁 弢 㫞 䢮 𡌺 强 𦢈 𢏐 𢑱 彣 鞽 𦹮 彲 鍀  徧
+- 嶶 㵟  𡽪 𧃸 𢙨 釖 𠊞 𨨩 怱 暅  㥣 㷇 㘹 垐
+- 𢞴 祱 㹀 悞 悳  𤦏  璤 僡 媠 慤 萤 慂  𦻒
+- 憁 凴  憇 宪 𣾷 𢡟 懓 𨮝 𩥝 懐 㤲 𢦀 𢣁 怣 慜
+- 攞 掋 𠄘 担 𡝰 拕 𢸍 捬 𤧟 㨗 搸 揸  𡟼 澊 𢸶
+- 頔 𤂌 𥜝 擡 擥 鑻 㩦 携 㩗 敍 漖 𤨨 𤨣 斅 敭 敟
+- 𣁾 斵 𤥀 䬷 旑 䃘 𡠩 无 旣 忟 𣐀 昘 𣇷 𣇸 晄 𣆤
+- 𣆥 晋 𠹵 晧 𥇦 晳  𣈱 𨗴 𣇈 𥌓 矅 𢣷 馤 朂 𤎜
+- 𤨡 㬫 槺 𣟂 杧 杢   柗 䓩 栢 湐 鈼 栁 𣏦 𦶠
+- 桝  槡 樋 𨫟 楳 棃 𣗍 椁 椀 㴲 㨁 𣘼 㮀 枬 楡
+- 𨩊 䋼 椶 榘 㮡 𠏉 荣 傐 槹  𢄪 橅  檝 㯳 枱
+- 櫈 𩆜 㰍 欝  惞 欵 歴  溵 𣫛 𠎵  㝀 吡 𣭚
+- 毡 𣻼 毜 氷 𢒋  𦭑 汚 舦 汹 𣶼 䓅 𣶽 𤆤 𤤌 𤤀
+- 𣳉 㛥 㳫  鮃 𣇹  羏 样 𦴥 𦶡 𦷫 涖 浜 湼 漄
+- 𤥿  𦹲 蔳 𦽴 凇 萮 𨬡 𣸯 瑓 𣾂 秌 湏 媑 𣁋 濸
+- 㜍 澝 𣸰 滺 𡒗 𤀽 䕕 鏰 潄 潜 㵎 潴  㴻 澟 𤅄
+- 濓  𤅕 𤀹 𥴠  𤄿 凟 𤅖 𤅗 𤅀 𦇝 灋 灾 炧 炁
+- 烌 烕 烖 烟 䄄 㷨 熴 熖 𤉷 焫 煅 媈 煊 岜 𤍥 煏
+- 鍢  焬 𤑚 𤨧 𤨢 熺 𨯨 炽 爎 鑂 爕 夑 鑃 爤 鍁
+-  爮 牀 𤥴 梽 牕 牗 㹕  栍 漽 犂 猫 𤠣 𨠫 䣭
+- 𨠄 猨 献 珏 玪  𦨮 珉 瑉 𤇢 𡛧 𤨤 昣 㛅 𤦷 𤦍
+-  珷 琕 椃 𤨦 琹  㻗 𢢭 瑠 𨺲 瑇 珤 瑶 莹 瑬
+- 㜰 瑴 鏱 樬 璂 䥓  𤅟 𤩹 𨮏 孆  𡢞 瓈 𡦈 甎
+- 甞 𨻙 𡩋 寗  鎅 畍 畊 畧 畮 𤾂 㼄  疎 瑝 疞
+- 疴 瘂 瘬 癑 癏 癯 癶  皐 臯 㟸 𦤑 𦤎 皡 皥 皷
+- 盌 𦾟 葢 𥂝 𥅽  眞 眦 着 撯 𥈠 睘 𣊬 瞯  
+- 𡛁 矴   棊 碯 磇 磓 隥 礮 𥗠 磗 礴 碱 𧘌 辸
+- 袄 𨬫  𢘜 禆 褀 椂 禀 𥡗 禝 𧬹 礼 禩 渪 𧄦 㺨
+- 秆 𩄍 秔
++ 䏰 䰲 䘃 䖦 䕸 𧉧 䵷 䖳 𧲱 䳢 𧳅 㮕 䜶 䝄 䱇 䱀
++ 𤊿 𣘗 𧍒 𦺋 𧃒 䱗 𪍑 䝏 䗚 䲅 𧱬 䴇 䪤 䚡 𦬣 爥
++ 𥩔 𡩣 𣸆 𣽡 晍 囻 綕 夝 𨮹 㷴 霴 𧯯 寛 𡵞 媤 㘥
++ 𩺰 嫑 宷 峼 杮 薓 𩥅 瑡 璝 㡵 𡵓 𣚞 𦀡 㻬 𥣞 㫵
++ 竼 龗 𤅡 𨤍 𣇪 𠪊 𣉞 䌊 蒄 龖 鐯 䤰 蘓 墖 靊 鈘
++ 秐 稲 晠 権 袝 瑌 篅 枂 稬 剏 遆 㓦 珄 𥶹 瓆 鿇
++ 垳 䤯 呌 䄱 𣚎 堘 穲 𧭥 讏 䚮 𦺈 䆁 𥶙 箮 𢒼 鿈
++ 𢓁 𢓉 𢓌 鿉 蔄 𣖻 䂴 鿊 䓡 𪷿 拁 灮 鿋 ㇀ ㇁ ㇂
++ ㇃ ㇄ 𠄌 ㇅ 𠃑 𠃍 ㇆ ㇇ 𠃋 𡿨 ㇈ 𠃊 ㇉ ㇊ ㇋ ㇌
++ 𠄎 ㇍ ㇎ Ā Á Ǎ À Ē É Ě È Ō Ó Ǒ Ò Ê̄
++ Ế Ê̌ Ề Ê ā á ǎ à ɑ ē é ě è ī í ǐ
++ ì ō ó ǒ ò ū ú ǔ ù ǖ ǘ ǚ ǜ ü ê̄ ế
++ ê̌ ề ê ɡ ⏚ ⏛ 𪎩 𡅅 攊 丽 滝 鵎 釟 𧜵 撑 会
++ 伨 侨 兖 兴 农 凤 务 动 医 华 发 变 团 声 处 备
++ 夲 头 学 实 実 岚 庆 总 斉 柾 栄 桥 济 炼 电 纤
++ 纬 纺 织 经 统 缆 缷 艺 苏 药 视 设 询 车 轧 轮
++ 琑 糼 緍 楆 竉 刧 醌 碸 酞 肼 贋 胶 𠧧 肟 黇 䳍
++ 鷉 鸌 䰾 𩷶 𧀎 鸊 𪄳 㗁 溚 舾 甙 䤑 马 骏 龙 禇
++ 𨑬 𡷊 𠗐 𢫦 两 亁 亀 亇 亿 仫 伷 㑌 侽 㹈 倃 傈
++ 㑽 㒓 㒥 円 夅 凛 凼 刅 争 剹 劐 匧 㗇 厩 㕑 厰
++ 㕓 参 吣 㕭 㕲 㚁 咓 咣 咴 咹 哐 哯 唘 唣 唨 㖘
++ 唿 㖥 㖿 嗗 㗅 𧶄 唥 𠱂 𠴕 𥄫 喐 𢳆 㧬 𠍁 蹆 𤶸
++ 𩓥 䁓 𨂾 睺 𢰸 㨴 䟕 𨅝 𦧲 𤷪 擝 𠵼 𠾴 𠳕 𡃴 撍
++ 蹾 𠺖 𠰋 𠽤 𢲩 𨉖 𤓓 𠵆 𩩍 𨃩 䟴 𤺧 𢳂 骲 㩧 𩗴
++ 㿭 㔆 𥋇 𩟔 𧣈 𢵄 鵮 頕 䏙 𦂥 撴 哣 𢵌 𢯊 𡁷 㧻
++ 𡁯 𦛚 𦜖 𧦠 擪 𥁒 𠱃 蹨 𢆡 𨭌 𠜱 䠋 𠆩 㿺 塳 𢶍
++ 𤗈 𠓼 𦂗 𠽌 𠶖 啹 䂻 䎺 䪴 𢩦 𡂝 膪 飵 𠶜 捹 㧾
++ 𢝵 跀 嚡 摼 㹃 𪘁 𠸉 𢫏 𢳉 𡃈 𣧂 㦒 㨆 𨊛 㕸 𥹉
++ 𢃇 噒 𠼱 𢲲 𩜠 㒼 氽 𤸻 𧕴 𢺋 𢈈 𪙛 𨳍 𠹺 𠰴 𦠜
++ 羓 𡃏 𢠃 𢤹 㗻 𥇣 𠺌 𠾍 𠺪 㾓 𠼰 𠵇 𡅏 𠹌 𠺫 𠮩
++ 𠵈 𡃀 𡄽 㿹 𢚖 搲 𠾭 𣏴 𧘹 𢯎 𠵾 𠵿 𢱑 𢱕 㨘 𠺘
++ 𡃇 𠼮 𪘲 𦭐 𨳒 𨶙 𨳊 閪 哌 苄 喹 𩻃 鰦 骶 𧝞 𢷮
++ 煀 腭 胬 尜 𦕲 脴 㞗 卟 𨂽 醶 𠻺 𠸏 𠹷 𠻻 㗝 𤷫
++ 㘉 𠳖 嚯 𢞵 𡃉 𠸐 𠹸 𡁸 𡅈 𨈇 𡑕 𠹹 𤹐 𢶤 婔 𡀝
++ 𡀞 𡃵 𡃶 垜 𠸑 𧚔 𨋍 𠾵 𠹻 𥅾 㜃 𠾶 𡆀 𥋘 𪊽 𤧚
++ 𡠺 𤅷 𨉼 墙 剨 㘚 𥜽 箲 孨 䠀 䬬 鼧 䧧 鰟 鮍 𥭴
++ 𣄽 嗻 㗲 嚉 丨 夂 𡯁 屮 靑 𠂆 乛 亻 㔾 尣 彑 忄
++ 㣺 扌 攵 歺 氵 氺 灬 爫 丬 犭 𤣩 罒 礻 糹 罓 𦉪
++ 㓁 𦍋 耂 肀 𦘒 𦥑 卝 衤 见 𧢲 讠 贝 钅 镸 长 门
++ 𨸏 韦 页 风 飞 饣 𩠐 鱼 鸟 黄 歯 龜 丷 𠂇 阝 户
++ 钢 倻 淾 𩱳 龦 㷉 袏 𤅎 灷 峵 䬠 𥇍 㕙 𥴰 愢 𨨲
++ 辧 釶 熑 朙 玺 𣊁 𪄇 㲋 𡦀 䬐 磤 琂 冮 𨜏 䀉 橣
++ 𪊺 䈣 蘏 𠩯 稪 𩥇 𨫪 靕 灍 匤 𢁾 鏴 盙 𨧣 龧 矝
++ 亣 俰 傼 丯 众 龨 吴 綋 墒 壐 𡶶 庒 庙 忂 𢜒 斋
++ 𣏹 椙 橃 𣱣 泿 爀 𤔅 玌 㻛 𤨓 嬕 璹 讃 𥲤 𥚕 窓
++ 篬 糃 繬 苸 薗 龩 袐 龪 躹 龫 迏 蕟 駠 鈡 龬 𨶹
++ 𡐿 䁱 䊢 娚 顨 杫 䉶 圽 藖 𤥻 芿 𧄍 䲁 𦵴 嵻 𦬕
++ 𦾾 龭 龮 宖 龯 曧 繛 湗 秊 㶈 䓃 𣉖 𢞖 䎚 䔶 峕
++ 𣬚 諹 屸 㴒 𣕑 嵸 龲 煗 䕘 𤃬 𡸣 䱷 㥸 㑊 𠆤 𦱁
++ 諌 侴 𠈹 妿 腬 顖 𩣺 弻 𠮟 𢇁 𨥭 䄂 䚻 𩁹 㼇 龳
++ 𪆵 䃸 㟖 䛷 𦱆 䅼 𨚲 𧏿 䕭 㣔 𥒚 䕡 䔛 䶉 䱻 䵶
++ 䗪 㿈 𤬏 㙡 䓞 䒽 䇭 崾 嵈 嵖 㷼 㠏 嶤 嶹 㠠 㠸
++ 幂 庽 弥 徃 㤈 㤔 㤿 㥍 惗 愽 峥 㦉 憷 憹 懏 㦸
++ 戬 抐 拥 挘 㧸 嚱 㨃 揢 揻 搇 摚 㩋 擀 崕 嘡 龟
++ 㪗 斆 㪽 旿 晓 㫲 暒 㬢 朖 㭂 枤 栀 㭘 桊 梄 㭲
++ 㭱 㭻 椉 楃 牜 楤 榟 榅 㮼 槖 㯝 橥 橴 橱 檂 㯬
++ 檙 㯲 檫 檵 櫔 櫶 殁 毁 毪 汵 沪 㳋 洂 洆 洦 涁
++ 㳯 涤 涱 渕 渘 温 溆 𨧀 溻 滢 滚 齿 滨 滩 漤 漴
++ 㵆 𣽁 澁 澾 㵪 㵵 熷 岙 㶊 瀬 㶑 灐 灔 灯 灿 炉
++ 𠌥 䏁 㗱 𠻘 𣻗 垾 𦻓 焾 𥟠 㙎 榢 𨯩 孴 穉 𥣡 𩓙
++ 穥 穽 𥦬 窻 窰 竂 竃 燑 𦒍 䇊 竚 竝 竪 䇯 咲 𥰁
++ 笋 筕 笩 𥌎 𥳾 箢 筯 莜 𥮴 𦱿 篐 萡 箒 𥴠 㶭 𥱥
++ 蒒 篺 簵 𥳁 籄 粃 𤢂 粦 晽 𤕸 糉 糇 糦 籴 糳 糵
++ 繧 䔝 𦹄 絝 𦻖 璍 綉 綫 焵 綳 𤁗 𦀩 緤 㴓 緵 𡟹
++ 緥 𨍭 𦄡 𦅚 繮 纒 䌫 鑬 縧 罀 罁 罇 礶 𦋐 駡 羗
++ 𦍑 羣 𡙡 𠁨 䕜 𣝦 䔃 𨌺 翺 𦒉 耈 耝 耯 𪂇 𦳃 耻
++ 耼 聡 𢜔 䦉 𦘦 𣷣 𦛨 朥 肧 𨩈 脇 脚 墰 𢛶 汿 𦒘
++ 𤾸 擧 𡒊 舘 𡡞 橓 𤩥 𤪕 䑺 舩 𠬍 𦩒 𣵾 俹 𡓽 蓢
++ 荢 𦬊 𤦧 𣔰 𡝳 𣷸 芪 椛 芳 䇛 蕋 苐 茚 𠸖 𡞴 㛁
++ 𣅽 𣕚 艻 苢 茘 𣺋 𦶣 𦬅 𦮗 𣗎 㶿 茝 嗬 莅 䔋 𦶥
++ 莬 菓 㑾 𦻔 橗 蕚 㒖 𦹂 𢻯 葘 𥯤 葱 㷓 䓤 檧 葊
++ 𣲵 祘 𦮖 𦹷 𦹃 蓞 莑 䒠 蒓 蓤 𥲑 䉀 𥳀 䕃 蔴 嫲
++ 𦺙 䔧 蕳 䔖 枿 蘖 𨘥 𨘻 藁 𧂈 蘂 𡖂 𧃍 䕫 䕪 蘨
++ 㙈 𡢢 号 𧎚 虾 蝱 𪃸 蟮 𢰧 螱 蟚 蠏 噡 虬 桖 䘏
++ 衅 衆 𧗠 𣶹 𧗤 衞 袜 䙛 袴 袵 揁 装 睷 𧜏 覇 覊
++ 覧 覼 𨨥 觧 𧤤 𧪽 誜 瞓 釾 誐 𧩙 竩 𧬺 𣾏 䜓 𧬸
++ 煼 謌 謟 𥐰 𥕥 謿 譌 譍 誩 𤩺 讐 讛 誯 𡛟 䘕 衏
++ 貛 𧵔 𧶏 貫 㜥 𧵓 賖 𧶘 𧶽 贒 贃 𡤐 賛 灜 贑 𤳉
++ 㻐 趩 𨀂 𡀔 𤦊 㭼 𨆼 𧄌 竧 躭 躶 軃 鋔 輙 輭 𨍥
++ 𨐒 辥 錃 𪊟 𠩐 辳 䤪 𨧞 𨔽 𣶻 廸 𣉢 迹 𪀔 𨚼 𨔁
++ 𢌥 㦀 𦻗 逷 𨔼 𧪾 遡 𨕬 𨘋 邨 𨜓 郄 𨛦 邮 酧 㫰
++ 醩 釄 粬 𨤳 𡺉 鈎 沟 鉁 鉢 𥖹 𨫆 𣲛 𨬌 𥗛 𠴱 錬
++ 鍫 𨫡 𨯫 炏 嫃 𨫢 𨫥 䥥 鉄 𨯬 𨰹 𨯿 鍳 鑛 躼 閅
++ 閦 鐦 閠 濶 䊹 𢙺 𨛘 𡉼 𣸮 䧟 氜 陻 隖 䅬 隣 𦻕
++ 懚 隶 磵 𨫠 隽 双 䦡 𦲸 𠉴 𦐐 𩂯 𩃥 𤫑 𡤕 𣌊 霱
++ 虂 霶 䨏 䔽 䖅 𤫩 灵 孁 霛 𩇕 靗 孊 𩇫 靟 鐥 僐
++ 𣂷 𣂼 鞉 鞟 鞱 鞾 韀 韒 韠 𥑬 韮 琜 𩐳 韵 𩐝 𧥺
++ 䫑 頴 頳 顋 顦 㬎 𧅵 㵑 𠘰 𤅜 𥜆 飊 颷 飈 飇 䫿
++ 𦴧 𡛓 喰 飡 飦 飬 鍸 餹 𤨩 䭲 𩡗 𩤅 駵 騌 騻 騐
++ 驘 𥜥 㛄 𩂱 𩯕 髠 髢 𩬅 髴 䰎 鬔 鬭 𨘀 倴 鬴 𦦨
++ 㣃 𣁽 魐 魀 𩴾 婅 𡡣 鮎 𤉋 鰂 鯿 鰌 𩹨 鷔 𩾷 𪆒
++ 𪆫 𪃡 𪄣 𪇟 鵾 鶃 𪄴 鸎 梈 鷄 𢅛 𪆓 𪈠 𡤻 𪈳 鴹
++ 𪂹 𪊴 麐 麕 麞 麢 䴴 麪 麯 𤍤 黁 㭠 㧥 㴝 伲 㞾
++ 𨰫 鼂 鼈 䮖 鐤 𦶢 鼗 鼹 嚟 嚊 齅 馸 𩂋 韲 葿 齢
++ 齩 竜 龎 爖 䮾 𤥵 𤦻 煷 𤧸 𤍈 𤩑 玞 𨯚 𡣺 禟 𨥾
++ 𨸶 鍩 鏳 𨩄 鋬 鎁 鏋 𨥬 𤒹 爗 㻫 睲 穃 烐 𤑳 𤏸
++ 煾 𡟯 炣 𡢾 𣖙 㻇 𡢅 𥐯 𡟸 㜢 𡛻 𡠹 㛡 𡝴 𡣑 𥽋
++ 㜣 𡛀 坛 𤨥 𡏾 𡊨 𡏆 𡒶 蔃 𣚦 葕 𤦔 𧅥 𣸱 𥕜 𣻻
++ 𧁒 䓴 𣛮 𩦝 𦼦 柹 㜳 㰕 㷧 塬 𡤢 栐 䁗 𣜿 𤃡 𤂋
++ 𤄏 𦰡 哋 嚞 𦚱 嚒 𠿟 𠮨 𠸍 鏆 𨬓 鎜 仸 儫 㠙 𤐶
++ 亼 𠑥 𠍿 佋 侊 𥙑 婨 𠆫 𠏋 㦙 𠌊 𠐔 㐵 伩 𠋀 𨺳
++ 𠉵 諚 𠈌 亘 働 儍 侢 伃 𤨎 𣺊 佂 倮 偬 傁 俌 俥
++ 偘 僼 湶 𣖕 𣸹 𣺿 浲 𡢄 𣺉 冨 凃 𠗠 䓝 𠒣 𠒒 𠒑
++ 赺 𨪜 𠜎 剙 劤 𠡳 勡 䙺 熌 𤎌 𠰠 𤦬 𡃤 槑 𠸝 㻞
++ 璙 琔 瑖 玘 䮎 𤪼 𤂍 叐 㖄 爏 𤃉 喴 𠍅 响 𠯆 圝
++ 鉝 雴 鍦 埝 垍 坿 㘾 壋 媙 𨩆 𡛺 𡝯 𡜐 娬 妸 銏
++ 婾 嫏 娒 𥥆 𡧳 𡡡 𤊕 㛵 洅 瑃 娡 𥺃 媁 𨯗 𠐓 鏠
++ 璌 𡌃 焅 䥲 鐈 𨧻 鎽 㞠 尞 岞 幞 幈 𡦖 𡥼 𣫮 廍
++ 孏 𡤃 𡤄 㜁 𡢠 㛝 𡛾 㛓 脪 𨩇 𡶺 𣑲 𨦨 弌 弎 𡤧
++ 𡞫 婫 𡜻 孄 蘔 𧗽 衠 恾 𢡠 𢘫 忛 㺸 𢖯 𢖾 𩂈 𦽳
++ 懀 𠀾 𠁆 𢘛 憙 憘 恵 𢲛 𢴇 𤛔 𩅍 摱 𤙥 𢭪 㨩 𢬢
++ 𣑐 𩣪 𢹸 挷 𪑛 撶 挱 揑 𤧣 𢵧 护 𢲡 搻 敫 楲 㯴
++ 𣂎 𣊭 𤦉 𣊫 唍 𣋠 𡣙 𩐿 曎 𣊉 𣆳 㫠 䆐 𥖄 𨬢 𥖏
++ 𡛼 𥕛 𥐥 磮 𣄃 𡠪 𣈴 㑤 𣈏 𣆂 𤋉 暎 𦴤 晫 䮓 昰
++ 𧡰 𡷫 晣 𣋒 𣋡 昞 𥡲 㣑 𣠺 𣞼 㮙 𣞢 𣏾 瓐 㮖 枏
++ 𤘪 梶 栞 㯄 檾 㡣 𣟕 𤒇 樳 橒 櫉 欅 𡤒 攑 梘 橌
++ 㯗 橺 歗 𣿀 𣲚 鎠 鋲 𨯪 𨫋 銉 𨀞 𨧜 鑧 涥 漋 𤧬
++ 𣽿 㶏 渄 𤀼 娽 渊 塇 洤 硂 焻 𤌚 𤉶 烱 牐 犇 犔
++ 𤞏 𤜥 兹 𤪤 𠗫 瑺 𣻸 𣙟 𤩊 𤤗 𥿡 㼆 㺱 𤫟 𨰣 𣼵
++ 悧 㻳 瓌 琼 鎇 琷 䒟 𦷪 䕑 疃 㽣 𤳙 𤴆 㽘 畕 癳
++ 𪗆 㬙 瑨 𨫌 𤦫 𤦎 㫻 㷍 𤩎 㻿 𤧅 𤣳 釺 圲 鍂 𨫣
++ 𡡤 僟 𥈡 𥇧 睸 𣈲 眎 眏 睻 𤚗 𣞁 㩞 𤣰 琸 璛 㺿
++ 𤪺 𤫇 䃈 𤪖 𦆮 錇 𥖁 砞 碍 碈 磒 珐 祙 𧝁 𥛣 䄎
++ 蒖 禥 樭 𣻺 稺 秴 䅮 𡛦 䄲 鈵 秱 𠵌 𤦌 𠊙 𣶺 𡝮
++ 㖗 啫 㕰 㚪 𠇔 𠰍 竢 婙 𢛵 𥪯 𥪜 娍 𠉛 磰 娪 𥯆
++ 竾 䇹 籝 籭 䈑 𥮳 𥺼 𥺦 糍 𤧹 𡞰 粎 籼 粮 檲 緜
++ 縇 緓 罎 𦉡 𦅜 𧭈 綗 𥺂 䉪 𦭵 𠤖 柖 𠁎 𣗏 埄 𦐒
++ 𦏸 𤥢 翝 笧 𠠬 𥫩 𥵃 笌 𥸎 駦 虅 驣 樜 𣐿 㧢 𤧷
++ 𦖭 騟 𦖠 蒀 𧄧 𦳑 䓪 脷 䐂 胆 脉 腂 𦞴 飃 𦩂 艢
++ 艥 𦩑 葓 𦶧 蘐 𧈛 媆 䅿 𡡀 嬫 𡢡 嫤 𡣘 蚠 蜨 𣶏
++ 蠭 𧐢 娂 衮 佅 袇 袿 裦 襥 襍 𥚃 襔 𧞅 𧞄 𨯵 𨯙
++ 𨮜 𨧹 㺭 蒣 䛵 䛏 㟲 訽 訜 𩑈 彍 鈫 𤊄 旔 焩 烄
++ 𡡅 鵭 貟 賩 𧷜 妚 矃 姰 䍮 㛔 踪 躧 𤰉 輰 轊 䋴
++ 汘 澻 𢌡 䢛 潹 溋 𡟚 鯩 㚵 𤤯 邻 啱 䤆 醻 鐄 𨩋
++ 䁢 𨫼 鐧 𨰝 𨰻 蓥 訫 閙 閧 閗 閖 𨴴 瑅 㻂 𤣿 𤩂
++ 𤏪 㻧 𣈥 随 𨻧 𨹦 𨹥 㻌 𤧭 𤩸 𣿮 琒 瑫 㻼 靁 𩂰
++ 桇 䨝 𩂓 𥟟 鍨 𨦉 𨰦 𨬯 𦎾 銺 嬑 譩 䤼 珹 𤈛 鞛
++ 靱 餸 𠼦 巁 𨯅 𤪲 頟 𩓚 鋶 𩗗 釥 䓀 𨭐 𤩧 𨭤 飜
++ 𨩅 㼀 鈪 䤥 萔 餻 饍 𧬆 㷽 馛 䭯 馪 驜 𨭥 𥣈 檏
++ 騡 嫾 騯 𩣱 䮐 𩥈 馼 䮽 䮗 鍽 塲 𡌂 堢 𤦸 𡓨 硄
++ 𢜟 𣶸 棅 㵽 鑘 㤧 慐 𢞁 𢥫 愇 鱏 鱓 鱻 鰵 鰐 魿
++ 鯏 𩸭 鮟 𪇵 𪃾 鴡 䲮 𤄄 鸘 䲰 鴌 𪆴 𪃭 𪃳 𩤯 鶥
++ 蒽 𦸒 𦿟 𦮂 藼 䔳 𦶤 𦺄 𦷰 萠 藮 𦸀 𣟗 𦁤 秢 𣖜
++ 𣙀 䤭 𤧞 㵢 鏛 銾 鍈 𠊿 碹 鉷 鑍 俤 㑀 遤 𥕝 砽
++ 硔 碶 硋 𡝗 𣇉 𤥁 㚚 佲 濚 濙 瀞 吔 𤆵 垻 壳 垊
++ 鴖 埗 焴 㒯 𤆬 燫 𦱀 𤾗 𡞵 𨩉 愌 嫎 娋 䊼 𤒈 㜬
++ 䭻 𨧼 鎻 鎸 𡣖 𠼝 葲 𦳀 𡐓 𤋺 𢰦 𤏁 妔 𣶷 𦝁 綨
++ 𦅛 𦂤 𤦹 𤦋 𨧺 鋥 珢 㻩 璴 𨭣 𡢟 㻡 𤪳 櫘 珳 珻
++ 㻖 𤨾 𤪔 𡟙 𤩦 𠎧 𡐤 𤧥 瑈 𤤖 炥 𤥶 銄 珦 鍟 𠓾
++ 錱 𨫎 𨨖 鎆 𨯧 𥗕 䤵 𨪂 煫 𤥃 𠳿 嚤 𠘚 𠯫 𠲸 唂
++ 秄 𡟺 緾 𡛂 𤩐 𡡒 䔮 鐁 㜊 𨫀 𤦭 妰 𡢿 𡢃 𧒄 媡
++ 㛢 𣵛 㚰 鉟 婹 𨪁 𡡢 鍴 㳍 𠪴 䪖 㦊 僴 㵩 㵌 𡎜
++ 煵 䋻 𨈘 渏 𩃤 䓫 浗 𧹏 灧 沯 㳖 𣿭 𣸭 渂 漌 㵯
++ 𠏵 畑 㚼 㓈 䚀 㻚 䡱 姄 鉮 䤾 轁 𨰜 𦯀 堒 埈 㛖
++ 𡑒 烾 𤍢 𤩱 𢿣 𡊰 𢎽 梹 楧 𡎘 𣓥 𧯴 𣛟 𨪃 𣟖 𣏺
++ 𤲟 樚 𣚭 𦲷 萾 䓟 䓎 𦴦 𦵑 𦲂 𦿞 漗 𧄉 茽 𡜺 菭
++ 𦲀 𧁓 𡟛 妉 媂 𡞳 婡 婱 𡤅 𤇼 㜭 姯 𡜼 㛇 熎 鎐
++ 暚 𤊥 婮 娫 𤊓 樫 𣻹 𧜶 𤑛 𤋊 焝 𤉙 𨧡 侰 𦴨 峂
++ 𤓎 𧹍 𤎽 樌 𤉖 𡌄 炦 焳 𤏩 㶥 泟 勇 𤩏 繥 姫 崯
++ 㷳 彜 𤩝 𡟟 綤 萦 咅 𣫺 𣌀 𠈔 坾 𠣕 𠘙 㿥 𡾞 𪊶
++ 瀃 𩅛 嵰 玏 糓 𨩙 𩐠 俈 翧 狍 猐 𧫴 猸 猹 𥛶 獁
++ 獈 㺩 𧬘 遬 燵 𤣲 珡 臶 㻊 県 㻑 沢 国 琙 琞 琟
++ 㻢 㻰 㻴 㻺 瓓 㼎 㽓 畂 畭 畲 疍 㽼 痈 痜 㿀 癍
++ 㿗 癴 㿜 発 𤽜 熈 嘣 覀 塩 䀝 睃 䀹 条 䁅 㗛 瞘
++ 䁪 䁯 属 瞾 矋 売 砘 点 砜 䂨 砹 硇 硑 硦 葈 𥔵
++ 礳 栃 礲 䄃 䄉 禑 禙 辻 稆 込 䅧 窑 䆲 窼 艹 䇄
++ 竏 竛 䇏 両 筢 筬 筻 簒 簛 䉠 䉺 类 粜 䊌 粸 䊔
++ 糭 输 烀 𠳏 総 緔 緐 緽 羮 羴 犟 䎗 耠 耥 笹 耮
++ 耱 联 㷌 垴 炠 肷 胩 䏭 脌 猪 脎 脒 畠 脔 䐁 㬹
++ 腖 腙 腚 䐓 堺 腼 膄 䐥 膓 䐭 膥 埯 臁 臤 艔 䒏
++ 芦 艶 苊 苘 苿 䒰 荗 险 榊 萅 烵 葤 惣 蒈 䔄 蒾
++ 蓡 蓸 蔐 蔸 蕒 䔻 蕯 蕰 藠 䕷 虲 蚒 蚲 蛯 际 螋
++ 䘆 䘗 袮 裿 褤 襇 覑 𧥧 訩 訸 誔 誴 豑 賔 賲 贜
++ 䞘 塟 跃 䟭 仮 踺 嗘 坔 蹱 嗵 躰 䠷 軎 転 軤 軭
++ 軲 辷 迁 迊 迌 逳 駄 䢭 飠 鈓 䤞 鈨 鉘 鉫 銱 銮
++ 銿 鋣 鋫 鋳 鋴 鋽 鍃 鎄 鎭 䥅 䥑 麿 鐗 匁 鐝 鐭
++ 鐾 䥪 鑔 鑹 锭 関 䦧 间 阳 䧥 枠 䨤 靀 䨵 鞲 韂
++ 噔 䫤 惨 颹 䬙 飱 塄 餎 餙 冴 餜 餷 饂 饝 饢 䭰
++ 駅 䮝 騼 鬏 窃 魩 鮁 鯝 鯱 鯴 䱭 鰠 㝯 𡯂 鵉 鰺
++ 黾 噐 鶓 鶽 鷀 鷼 银 辶 鹻 麬 麱 麽 黆 铜 黢 黱
++ 黸 竈 齄 𠂔 𠊷 𠎠 椚 铃 妬 𠓗 塀 铁 㞹 𠗕 𠘕 𠙶
++ 𡚺 块 煳 𠫂 𠫍 𠮿 呪 吆 𠯋 咞 𠯻 𠰻 𠱓 𠱥 𠱼 惧
++ 𠲍 噺 𠲵 𠳝 𠳭 𠵯 𠶲 𠷈 楕 鰯 螥 𠸄 𠸎 𠻗 𠾐 𠼭
++ 𠹳 尠 𠾼 帋 𡁜 𡁏 𡁶 朞 𡁻 𡂈 𡂖 㙇 𡂿 𡃓 𡄯 𡄻
++ 卤 蒭 𡋣 𡍵 𡌶 讁 𡕷 𡘙 𡟃 𡟇 乸 炻 𡠭 𡥪 𡨭 𡩅
++ 𡰪 𡱰 𡲬 𡻈 拃 𡻕 𡼕 熘 桕 𢁅 槩 㛈 𢉼 𢏗 𢏺 𢜪
++ 𢡱 𢥏 苽 𢥧 𢦓 𢫕 覥 𢫨 辠 𢬎 鞸 𢬿 顇 骽 𢱌 𢲈
++ 𢲷 𥯨 𢴈 𢴒 𢶷 𢶕 𢹂 𢽴 𢿌 𣀳 𣁦 𣌟 𣏞 徱 晈 暿
++ 𧩹 𣕧 𣗳 𤦺 𣘚 𣜖 𠍆 墵 朎 椘 𣪧 𧙗 𥿢 𣸑 𣺹 𧗾
++ 𢂚 䣐 䪸 𤄙 𨪚 𤋮 𤌍 𤀻 𤌴 𤎖 𤩅 𠗊 凒 𠘑 妟 𡺨
++ 㮾 𣳿 𤐄 𤓖 垈 𤙴 㦛 𤜯 𨗨 𩧉 㝢 𢇃 譞 𨭎 𤠒 𤣻
++ 𤨕 爉 𤫀 𠱸 奥 𤺥 𤾆 𠝹 軚 𥀬 劏 圿 煱 𥊙 𥐙 𣽊
++ 𤪧 喼 𥑆 𥑮 𦭒 㑳 𥔿 𧘲 𥕞 䜘 𥕢 𥕦 𥟇 𤤿 𥡝 偦
++ 㓻 𣏌 𥤃 䝼 𨥈 𥪮 𥮉 𥰆 𡶐 垡 煑 𦄂 𧰒 遖 𦆲 𤾚
++ 譢 𦐂 𦑊 嵛 𦯷 𦒄 𡤜 諪 𤧶 𦒈 𣿯 𦔒 䯀 𦖿 𦚵 𢜛
++ 鑥 𥟡 憕 娧 晉 嚹 𤔡 𦛼 乪 𤤴 陖 涏 𦲽 㘘 襷 𦞙
++ 𦡮 𦐑 𦡞 𦣇 筂 𩃀 𠨑 𦤦 𦤹 穅 𦧺 騦 𦨭 㙟 𦑩 𠀡
++ 禃 𦨴 𦭛 崬 𣔙 𦮝 䛐 𦲤 画 补 𦶮 墶 㜜 𢖍 𧁋 𧇍
++ 㱔 𧊀 𧊅 銁 𢅺 𧊋 錰 𧋦 𤧐 氹 钟 𧑐 𠻸 蠧 裵 𢤦
++ 𨑳 𡞱 溸 𤨪 𡠠 㦤 㚹 䔿 暶 𩲭 𩢤 襃 𧟌 𧡘 囖 䃟
++ 𡘊 㦡 𣜯 𨃨 𡏅 熭 荦 𧧝 𩆨 䲷 𧂯 𨦫 𧧽 𧨊 𧬋 𧵦
++ 𤅺 筃 祾 𨀉 澵 𪋟 樃 𨌘 厢 𦸇 鎿 栶 靝 𨅯 𨀣 𦦵
++ 𡏭 𣈯 𨁈 嶅 𨰰 𨂃 圕 頣 𨥉 嶫 𤦈 斾 槕 叒 𤪥 𣾁
++ 㰑 朶 𨂐 𨃴 𨄮 𡾡 𨅏 𨆉 𨆯 𨈚 𨌆 𨌯 𨎊 㗊 𨑨 𨚪
++ 䣺 揦 𨥖 砈 鉕 𨦸 䏲 𨧧 䏟 𨧨 𨭆 𨯔 姸 𨰉 𨿅 𩃬
++ 𩄐 𩄼 㷷 𩅞 𤫊 运 犏 嚋 𩓧 𩗩 𩖰 𩖸 𩜲 𩣑 𩥉 𩥪
++ 𩧃 𩨨 𩬎 𩵚 𩶛 纟 𩻸 𩼣 䲤 镇 𪊓 熢 𪋿 䶑 递 𪗋
++ 䶜 𠲜 达 嗁 辺 𢒰 边 𤪓 䔉 繿 潖 檱 仪 㓤 𨬬 𧢝
++ 㜺 躀 𡟵 𨀤 𨭬 𨮙 𧨾 𦚯 㷫 𧙕 𣲷 𥘵 𥥖 亚 𥺁 𦉘
++ 嚿 𠹭 踎 孭 𣺈 𤲞 揞 𡟶 𡡻 攰 嘭 𥱊 吚 𥌑 㷆 𩶘
++ 䱽 嘢 嘞 罉 𥻘 奵 𣵀 蝰 东 𠿪 𠵉 𣚺 脗 鵞 贘 瘻
++ 鱅 癎 瞹 鍅 吲 腈 苷 嘥 脲 萘 肽 嗪 祢 噃 吖 𠺝
++ 㗎 嘅 嗱 曱 𨋢 㘭 甴 嗰 喺 咗 啲 𠱁 𠲖 廐 𥅈 𠹶
++ 𢱢 𠺢 麫 絚 嗞 𡁵 抝 靭 咔 賍 燶 酶 揼 掹 揾 啩
++ 𢭃 鱲 𢺳 冚 㓟 𠶧 冧 呍 唞 唓 癦 踭 𦢊 疱 肶 蠄
++ 螆 裇 膶 萜 𡃁 䓬 猄 𤜆 宐 茋 𦢓 噻 𢛴 𧴯 𤆣 𧵳
++ 𦻐 𧊶 酰 𡇙 鈈 𣳼 𪚩 𠺬 𠻹 牦 𡲢 䝎 𤿂 𧿹 𠿫 䃺
++ 鱝 攟 𢶠 䣳 𤟠 𩵼 𠿬 𠸊 𧖣 𠿭 𦁈 𡆇 熣 纎 鵐 业
++ 丄 㕷 嬍 沲 卧 㚬 㧜 卽 㚥 𤘘 墚 𤭮 舭 呋 垪 𥪕
++ 𠥹 㩒 𢑥 獴 𩺬 䴉 鯭 𣳾 𩼰 䱛 𤾩 𩖞 𩿞 葜 𣶶 𧊲
++ 𦞳 𣜠 挮 紥 𣻷 𣸬 㨪 逈 勌 㹴 㙺 䗩 𠒎 癀 嫰 𠺶
++ 硺 𧼮 墧 䂿 噼 鮋 嵴 癔 𪐴 麅 䳡 㟻 愙 𣃚 𤏲 噝
++ 𡊩 垧 𤥣 𩸆 刴 𧂮 㖭 鵼 籖 鬹 埞 𡝬 屓 擓 𩓐 𦌵
++ 𧅤 蚭 𠴨 𦴢 𤫢 𠵱 凾 𡼏 嶎 霃 𡷑 麁 遌 笟 鬂 峑
++ 箣 扨 挵 髿 篏 鬪 籾 籂 粆 鰕 篼 鬉 鰛 𤤾 齚 啳
++ 寃 俽 麘 俲 剠 㸆 勑 坧 偖 妷 帒 韈 鶫 轜 呩 鞴
++ 饀 鞺 匬 愰 椬 叚 鰊 鴂 䰻 陁 榀 傦 畆 𡝭 駚 剳
++ 酙 隁 酜 酑 𨺗 捿 𦴣 櫊 嘑 醎 畺 抅 𠏼 獏 籰 𥰡
++ 𣳽 𤤙 盖 鮝 个 𠳔 莾 衂 届 槀 坺 刟 巵 从 氱 𠇲
++ 伹 咜 哚 劚 趂 㗾 㗳 歒 酼 龥 鮗 頮 颴 骺 麨 麄
++ 煺 笔 毺 蠘 罸 嘠 𪙊 蹷 齓 跔 蹏 鸜 踁 抂 𨍽 踨
++ 蹵 竓 𤩷 稾 磘 泪 詧 瘇 𨩚 鼦 泎 蟖 痃 𪊲 硓 咢
++ 贌 狢 獱 謭 猂 瓱 賫 𤪻 蘯 徺 袠 䒷 𡠻 𦸅 詾 𢔛
++ 惽 癧 髗 鵄 鍮 鮏 蟵 賷 猬 霡 鮰 㗖 犲 䰇 籑 饊
++ 𦅙 慙 䰄 麖 慽 坟 慯 抦 戹 㩜 懢 厪 𣏵 捤 栂 㗒
++ 嵗 𨯂 迚 𨸹 僙 𡵆 礆 匲 阸 𠼻 䁥 矾 糂 𥼚 糚 稭
++ 聦 聣 絍 甅 瓲 覔 舚 朌 聢 𧒆 聛 瓰 脃 眤 覉 𦟌
++ 畓 𦻑 螩 蟎 臈 螌 詉 貭 譃 眫 瓸 蓚 㘵 榲 趦 覩
++ 涹 蟁 𤀑 瓧 㷛 煶 悤 憜 㳑 恷 罱 𨬭 惩 䭾 删 㰘
++ 𣳇 𥻗 𧙖 𥔱 𡥄 𡋾 𩤃 𦷜 𧂭 峁 𦆭 𨨏 𣙷 𠃮 𦡆 𤼎
++ 䕢 嬟 𦍌 齐 麦 𦉫   , 、 。 . • ; : ? !
++ ︰ … ‥ ﹐ 、 ﹒ · ﹔ ﹕ ﹖ ﹗ | – ︱ — ︳
++ ︴ ﹏ ( ) ︵ ︶ { } ︷ ︸ 〔 〕 ︹ ︺ 【 】
++ ︻ ︼ 《 》 ︽ ︾ 〈 〉 ︿ ﹀ 「 」 ﹁ ﹂ 『 』
++ ﹃ ﹄ ﹙ ﹚ ﹛ ﹜ ﹝ ﹞ ‘ ’ “ ” 〝 〞 ‵ ′
++ # & * ※ § 〃 ○ ● △ ▲ ◎ ☆ ★ ◇ ◆ □
++ ■ ▽ ▼ ㊣ ℅ ‾ _ ﹉ ﹊ ﹍ ﹎ ﹋ ﹌ ﹟ ﹠ ﹡
++ + - × ÷ ± √ < > = ≦ ≧ ≠ ∞ ≒ ≡ ﹢
++ ﹣ ﹤ ﹥ ﹦ ∼ ∩ ∪ ⊥ ∠ ∟ ⊿ ㏒ ㏑ ∫ ∮ ∵
++ ∴ ♀ ♂ ♁ ☉ ↑ ↓ ← → ↖ ↗ ↙ ↘ ∥ ∣ /
++ \ $ ¥ 〒 ¢ £ % @ ℃ ℉ ﹩ ﹪ ﹫ ㏕ ㎜ ㎝
++ ㎞ ㏎ ㎡ ㎎ ㎏ ㏄ ° 兙 兛 兞 兝 兡 兣 嗧 瓩 糎
++ ▁ ▂ ▃ ▄ ▅ ▆ ▇ █ ▏ ▎ ▍ ▌ ▋ ▊ ▉ ┼
++ ┴ ┬ ┤ ├ ▔ ─ │ ▕ ┌ ┐ └ ┘ ◢ ◣ ◥ ◤
++ ╱ ╲ ╳ 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 Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ
++ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ
++ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ τ
++ υ φ χ ψ ω ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ
++ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ
++ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ ˙ ˉ ˊ ˇ ˋ 一
++ 乙 丁 七 乃 九 了 二 人 儿 入 八 几 刀 刁 力 匕
++ 十 卜 又 三 下 丈 上 丫 丸 凡 久 么 也 乞 于 亡
++ 兀 刃 勺 千 叉 口 土 士 夕 大 女 子 孑 孓 寸 小
++ 尢 尸 山 川 工 己 已 巳 巾 干 廾 弋 弓 才 丑 丐
++ 不 中 丰 丹 之 尹 予 云 井 互 五 亢 仁 什 仃 仆
++ 仇 仍 今 介 仄 元 允 內 六 兮 公 冗 凶 分 切 刈
++ 勻 勾 勿 化 匹 午 升 卅 卞 厄 友 及 反 壬 天 夫
++ 太 夭 孔 少 尤 尺 屯 巴 幻 廿 弔 引 心 戈 戶 手
++ 扎 支 文 斗 斤 方 日 曰 月 木 欠 止 歹 毋 比 毛
++ 氏 水 火 爪 父 爻 片 牙 牛 犬 王 丙 世 丕 且 丘
++ 主 乍 乏 乎 以 付 仔 仕 他 仗 代 令 仙 仞 充 兄
++ 冉 冊 冬 凹 出 凸 刊 加 功 包 匆 北 匝 仟 半 卉
++ 卡 占 卯 卮 去 可 古 右 召 叮 叩 叨 叼 司 叵 叫
++ 另 只 史 叱 台 句 叭 叻 四 囚 外 央 失 奴 奶 孕
++ 它 尼 巨 巧 左 市 布 平 幼 弁 弘 弗 必 戊 打 扔
++ 扒 扑 斥 旦 朮 本 未 末 札 正 母 民 氐 永 汁 汀
++ 氾 犯 玄 玉 瓜 瓦 甘 生 用 甩 田 由 甲 申 疋 白
++ 皮 皿 目 矛 矢 石 示 禾 穴 立 丞 丟 乒 乓 乩 亙
++ 交 亦 亥 仿 伉 伙 伊 伕 伍 伐 休 伏 仲 件 任 仰
++ 仳 份 企 伋 光 兇 兆 先 全 共 再 冰 列 刑 划 刎
++ 刖 劣 匈 匡 匠 印 危 吉 吏 同 吊 吐 吁 吋 各 向
++ 名 合 吃 后 吆 吒 因 回 囝 圳 地 在 圭 圬 圯 圩
++ 夙 多 夷 夸 妄 奸 妃 好 她 如 妁 字 存 宇 守 宅
++ 安 寺 尖 屹 州 帆 并 年 式 弛 忙 忖 戎 戌 戍 成
++ 扣 扛 托 收 早 旨 旬 旭 曲 曳 有 朽 朴 朱 朵 次
++ 此 死 氖 汝 汗 汙 江 池 汐 汕 污 汛 汍 汎 灰 牟
++ 牝 百 竹 米 糸 缶 羊 羽 老 考 而 耒 耳 聿 肉 肋
++ 肌 臣 自 至 臼 舌 舛 舟 艮 色 艾 虫 血 行 衣 西
++ 阡 串 亨 位 住 佇 佗 佞 伴 佛 何 估 佐 佑 伽 伺
++ 伸 佃 佔 似 但 佣 作 你 伯 低 伶 余 佝 佈 佚 兌
++ 克 免 兵 冶 冷 別 判 利 刪 刨 劫 助 努 劬 匣 即
++ 卵 吝 吭 吞 吾 否 呎 吧 呆 呃 吳 呈 呂 君 吩 告
++ 吹 吻 吸 吮 吵 吶 吠 吼 呀 吱 含 吟 听 囪 困 囤
++ 囫 坊 坑 址 坍 均 坎 圾 坐 坏 圻 壯 夾 妝 妒 妨
++ 妞 妣 妙 妖 妍 妤 妓 妊 妥 孝 孜 孚 孛 完 宋 宏
++ 尬 局 屁 尿 尾 岐 岑 岔 岌 巫 希 序 庇 床 廷 弄
++ 弟 彤 形 彷 役 忘 忌 志 忍 忱 快 忸 忪 戒 我 抄
++ 抗 抖 技 扶 抉 扭 把 扼 找 批 扳 抒 扯 折 扮 投
++ 抓 抑 抆 改 攻 攸 旱 更 束 李 杏 材 村 杜 杖 杞
++ 杉 杆 杠 杓 杗 步 每 求 汞 沙 沁 沈 沉 沅 沛 汪
++ 決 沐 汰 沌 汨 沖 沒 汽 沃 汲 汾 汴 沆 汶 沍 沔
++ 沘 沂 灶 灼 災 灸 牢 牡 牠 狄 狂 玖 甬 甫 男 甸
++ 皂 盯 矣 私 秀 禿 究 系 罕 肖 肓 肝 肘 肛 肚 育
++ 良 芒 芋 芍 見 角 言 谷 豆 豕 貝 赤 走 足 身 車
++ 辛 辰 迂 迆 迅 迄 巡 邑 邢 邪 邦 那 酉 釆 里 防
++ 阮 阱 阪 阬 並 乖 乳 事 些 亞 享 京 佯 依 侍 佳
++ 使 佬 供 例 來 侃 佰 併 侈 佩 佻 侖 佾 侏 侑 佺
++ 兔 兒 兕 兩 具 其 典 冽 函 刻 券 刷 刺 到 刮 制
++ 剁 劾 劻 卒 協 卓 卑 卦 卷 卸 卹 取 叔 受 味 呵
++ 咖 呸 咕 咀 呻 呷 咄 咒 咆 呼 咐 呱 呶 和 咚 呢
++ 周 咋 命 咎 固 垃 坷 坪 坩 坡 坦 坤 坼 夜 奉 奇
++ 奈 奄 奔 妾 妻 委 妹 妮 姑 姆 姐 姍 始 姓 姊 妯
++ 妳 姒 姅 孟 孤 季 宗 定 官 宜 宙 宛 尚 屈 居 屆
++ 岷 岡 岸 岩 岫 岱 岳 帘 帚 帖 帕 帛 帑 幸 庚 店
++ 府 底 庖 延 弦 弧 弩 往 征 彿 彼 忝 忠 忽 念 忿
++ 怏 怔 怯 怵 怖 怪 怕 怡 性 怩 怫 怛 或 戕 房 戾
++ 所 承 拉 拌 拄 抿 拂 抹 拒 招 披 拓 拔 拋 拈 抨
++ 抽 押 拐 拙 拇 拍 抵 拚 抱 拘 拖 拗 拆 抬 拎 放
++ 斧 於 旺 昔 易 昌 昆 昂 明 昀 昏 昕 昊 昇 服 朋
++ 杭 枋 枕 東 果 杳 杷 枇 枝 林 杯 杰 板 枉 松 析
++ 杵 枚 枓 杼 杪 杲 欣 武 歧 歿 氓 氛 泣 注 泳 沱
++ 泌 泥 河 沽 沾 沼 波 沫 法 泓 沸 泄 油 況 沮 泗
++ 泅 泱 沿 治 泡 泛 泊 沬 泯 泜 泖 泠 炕 炎 炒 炊
++ 炙 爬 爭 爸 版 牧 物 狀 狎 狙 狗 狐 玩 玨 玟 玫
++ 玥 甽 疝 疙 疚 的 盂 盲 直 知 矽 社 祀 祁 秉 秈
++ 空 穹 竺 糾 罔 羌 羋 者 肺 肥 肢 肱 股 肫 肩 肴
++ 肪 肯 臥 臾 舍 芳 芝 芙 芭 芽 芟 芹 花 芬 芥 芯
++ 芸 芣 芰 芾 芷 虎 虱 初 表 軋 迎 返 近 邵 邸 邱
++ 邶 采 金 長 門 阜 陀 阿 阻 附 陂 隹 雨 青 非 亟
++ 亭 亮 信 侵 侯 便 俠 俑 俏 保 促 侶 俘 俟 俊 俗
++ 侮 俐 俄 係 俚 俎 俞 侷 兗 冒 冑 冠 剎 剃 削 前
++ 剌 剋 則 勇 勉 勃 勁 匍 南 卻 厚 叛 咬 哀 咨 哎
++ 哉 咸 咦 咳 哇 哂 咽 咪 品 哄 哈 咯 咫 咱 咻 咩
++ 咧 咿 囿 垂 型 垠 垣 垢 城 垮 垓 奕 契 奏 奎 奐
++ 姜 姘 姿 姣 姨 娃 姥 姪 姚 姦 威 姻 孩 宣 宦 室
++ 客 宥 封 屎 屏 屍 屋 峙 峒 巷 帝 帥 帟 幽 庠 度
++ 建 弈 弭 彥 很 待 徊 律 徇 後 徉 怒 思 怠 急 怎
++ 怨 恍 恰 恨 恢 恆 恃 恬 恫 恪 恤 扁 拜 挖 按 拼
++ 拭 持 拮 拽 指 拱 拷 拯 括 拾 拴 挑 挂 政 故 斫
++ 施 既 春 昭 映 昧 是 星 昨 昱 昤 曷 柿 染 柱 柔
++ 某 柬 架 枯 柵 柩 柯 柄 柑 枴 柚 查 枸 柏 柞 柳
++ 枰 柙 柢 柝 柒 歪 殃 殆 段 毒 毗 氟 泉 洋 洲 洪
++ 流 津 洌 洱 洞 洗 活 洽 派 洶 洛 泵 洹 洧 洸 洩
++ 洮 洵 洎 洫 炫 為 炳 炬 炯 炭 炸 炮 炤 爰 牲 牯
++ 牴 狩 狠 狡 玷 珊 玻 玲 珍 珀 玳 甚 甭 畏 界 畎
++ 畋 疫 疤 疥 疢 疣 癸 皆 皇 皈 盈 盆 盃 盅 省 盹
++ 相 眉 看 盾 盼 眇 矜 砂 研 砌 砍 祆 祉 祈 祇 禹
++ 禺 科 秒 秋 穿 突 竿 竽 籽 紂 紅 紀 紉 紇 約 紆
++ 缸 美 羿 耄 耐 耍 耑 耶 胖 胥 胚 胃 胄 背 胡 胛
++ 胎 胞 胤 胝 致 舢 苧 范 茅 苣 苛 苦 茄 若 茂 茉
++ 苒 苗 英 茁 苜 苔 苑 苞 苓 苟 苯 茆 虐 虹 虻 虺
++ 衍 衫 要 觔 計 訂 訃 貞 負 赴 赳 趴 軍 軌 述 迦
++ 迢 迪 迥 迭 迫 迤 迨 郊 郎 郁 郃 酋 酊 重 閂 限
++ 陋 陌 降 面 革 韋 韭 音 頁 風 飛 食 首 香 乘 亳
++ 倌 倍 倣 俯 倦 倥 俸 倩 倖 倆 值 借 倚 倒 們 俺
++ 倀 倔 倨 俱 倡 個 候 倘 俳 修 倭 倪 俾 倫 倉 兼
++ 冤 冥 冢 凍 凌 准 凋 剖 剜 剔 剛 剝 匪 卿 原 厝
++ 叟 哨 唐 唁 唷 哼 哥 哲 唆 哺 唔 哩 哭 員 唉 哮
++ 哪 哦 唧 唇 哽 唏 圃 圄 埂 埔 埋 埃 堉 夏 套 奘
++ 奚 娑 娘 娜 娟 娛 娓 姬 娠 娣 娩 娥 娌 娉 孫 屘
++ 宰 害 家 宴 宮 宵 容 宸 射 屑 展 屐 峭 峽 峻 峪
++ 峨 峰 島 崁 峴 差 席 師 庫 庭 座 弱 徒 徑 徐 恙
++ 恣 恥 恐 恕 恭 恩 息 悄 悟 悚 悍 悔 悌 悅 悖 扇
++ 拳 挈 拿 捎 挾 振 捕 捂 捆 捏 捉 挺 捐 挽 挪 挫
++ 挨 捍 捌 效 敉 料 旁 旅 時 晉 晏 晃 晒 晌 晅 晁
++ 書 朔 朕 朗 校 核 案 框 桓 根 桂 桔 栩 梳 栗 桌
++ 桑 栽 柴 桐 桀 格 桃 株 桅 栓 栘 桁 殊 殉 殷 氣
++ 氧 氨 氦 氤 泰 浪 涕 消 涇 浦 浸 海 浙 涓 浬 涉
++ 浮 浚 浴 浩 涌 涊 浹 涅 浥 涔 烊 烘 烤 烙 烈 烏
++ 爹 特 狼 狹 狽 狸 狷 玆 班 琉 珮 珠 珪 珞 畔 畝
++ 畜 畚 留 疾 病 症 疲 疳 疽 疼 疹 痂 疸 皋 皰 益
++ 盍 盎 眩 真 眠 眨 矩 砰 砧 砸 砝 破 砷 砥 砭 砠
++ 砟 砲 祕 祐 祠 祟 祖 神 祝 祗 祚 秤 秣 秧 租 秦
++ 秩 秘 窄 窈 站 笆 笑 粉 紡 紗 紋 紊 素 索 純 紐
++ 紕 級 紜 納 紙 紛 缺 罟 羔 翅 翁 耆 耘 耕 耙 耗
++ 耽 耿 胱 脂 胰 脅 胭 胴 脆 胸 胳 脈 能 脊 胼 胯
++ 臭 臬 舀 舐 航 舫 舨 般 芻 茫 荒 荔 荊 茸 荐 草
++ 茵 茴 荏 茲 茹 茶 茗 荀 茱 茨 荃 虔 蚊 蚪 蚓 蚤
++ 蚩 蚌 蚣 蚜 衰 衷 袁 袂 衽 衹 記 訐 討 訌 訕 訊
++ 託 訓 訖 訏 訑 豈 豺 豹 財 貢 起 躬 軒 軔 軏 辱
++ 送 逆 迷 退 迺 迴 逃 追 逅 迸 邕 郡 郝 郢 酒 配
++ 酌 釘 針 釗 釜 釙 閃 院 陣 陡 陛 陝 除 陘 陞 隻
++ 飢 馬 骨 高 鬥 鬲 鬼 乾 偺 偽 停 假 偃 偌 做 偉
++ 健 偶 偎 偕 偵 側 偷 偏 倏 偯 偭 兜 冕 凰 剪 副
++ 勒 務 勘 動 匐 匏 匙 匿 區 匾 參 曼 商 啪 啦 啄
++ 啞 啡 啃 啊 唱 啖 問 啕 唯 啤 唸 售 啜 唬 啣 唳
++ 啁 啗 圈 國 圉 域 堅 堊 堆 埠 埤 基 堂 堵 執 培
++ 夠 奢 娶 婁 婉 婦 婪 婀 娼 婢 婚 婆 婊 孰 寇 寅
++ 寄 寂 宿 密 尉 專 將 屠 屜 屝 崇 崆 崎 崛 崖 崢
++ 崑 崩 崔 崙 崤 崧 崗 巢 常 帶 帳 帷 康 庸 庶 庵
++ 庾 張 強 彗 彬 彩 彫 得 徙 從 徘 御 徠 徜 恿 患
++ 悉 悠 您 惋 悴 惦 悽 情 悻 悵 惜 悼 惘 惕 惆 惟
++ 悸 惚 惇 戚 戛 扈 掠 控 捲 掖 探 接 捷 捧 掘 措
++ 捱 掩 掉 掃 掛 捫 推 掄 授 掙 採 掬 排 掏 掀 捻
++ 捩 捨 捺 敝 敖 救 教 敗 啟 敏 敘 敕 敔 斜 斛 斬
++ 族 旋 旌 旎 晝 晚 晤 晨 晦 晞 曹 勗 望 梁 梯 梢
++ 梓 梵 桿 桶 梱 梧 梗 械 梃 棄 梭 梆 梅 梔 條 梨
++ 梟 梡 梂 欲 殺 毫 毬 氫 涎 涼 淳 淙 液 淡 淌 淤
++ 添 淺 清 淇 淋 涯 淑 涮 淞 淹 涸 混 淵 淅 淒 渚
++ 涵 淚 淫 淘 淪 深 淮 淨 淆 淄 涪 淬 涿 淦 烹 焉
++ 焊 烽 烯 爽 牽 犁 猜 猛 猖 猓 猙 率 琅 琊 球 理
++ 現 琍 瓠 瓶 瓷 甜 產 略 畦 畢 異 疏 痔 痕 疵 痊
++ 痍 皎 盔 盒 盛 眷 眾 眼 眶 眸 眺 硫 硃 硎 祥 票
++ 祭 移 窒 窕 笠 笨 笛 第 符 笙 笞 笮 粒 粗 粕 絆
++ 絃 統 紮 紹 紼 絀 細 紳 組 累 終 紲 紱 缽 羞 羚
++ 翌 翎 習 耜 聊 聆 脯 脖 脣 脫 脩 脰 脤 舂 舵 舷
++ 舶 船 莎 莞 莘 荸 莢 莖 莽 莫 莒 莊 莓 莉 莠 荷
++ 荻 荼 莆 莧 處 彪 蛇 蛀 蚶 蛄 蚵 蛆 蛋 蚱 蚯 蛉
++ 術 袞 袈 被 袒 袖 袍 袋 覓 規 訪 訝 訣 訥 許 設
++ 訟 訛 訢 豉 豚 販 責 貫 貨 貪 貧 赧 赦 趾 趺 軛
++ 軟 這 逍 通 逗 連 速 逝 逐 逕 逞 造 透 逢 逖 逛
++ 途 部 郭 都 酗 野 釵 釦 釣 釧 釭 釩 閉 陪 陵 陳
++ 陸 陰 陴 陶 陷 陬 雀 雪 雩 章 竟 頂 頃 魚 鳥 鹵
++ 鹿 麥 麻 傢 傍 傅 備 傑 傀 傖 傘 傚 最 凱 割 剴
++ 創 剩 勞 勝 勛 博 厥 啻 喀 喧 啼 喊 喝 喘 喂 喜
++ 喪 喔 喇 喋 喃 喳 單 喟 唾 喲 喚 喻 喬 喱 啾 喉
++ 喫 喙 圍 堯 堪 場 堤 堰 報 堡 堝 堠 壹 壺 奠 婷
++ 媚 婿 媒 媛 媧 孳 孱 寒 富 寓 寐 尊 尋 就 嵌 嵐
++ 崴 嵇 巽 幅 帽 幀 幃 幾 廊 廁 廂 廄 弼 彭 復 循
++ 徨 惑 惡 悲 悶 惠 愜 愣 惺 愕 惰 惻 惴 慨 惱 愎
++ 惶 愉 愀 愒 戟 扉 掣 掌 描 揀 揩 揉 揆 揍 插 揣
++ 提 握 揖 揭 揮 捶 援 揪 換 摒 揚 揹 敞 敦 敢 散
++ 斑 斐 斯 普 晰 晴 晶 景 暑 智 晾 晷 曾 替 期 朝
++ 棺 棕 棠 棘 棗 椅 棟 棵 森 棧 棹 棒 棲 棣 棋 棍
++ 植 椒 椎 棉 棚 楮 棻 款 欺 欽 殘 殖 殼 毯 氮 氯
++ 氬 港 游 湔 渡 渲 湧 湊 渠 渥 渣 減 湛 湘 渤 湖
++ 湮 渭 渦 湯 渴 湍 渺 測 湃 渝 渾 滋 溉 渙 湎 湣
++ 湄 湲 湩 湟 焙 焚 焦 焰 無 然 煮 焜 牌 犄 犀 猶
++ 猥 猴 猩 琺 琪 琳 琢 琥 琵 琶 琴 琯 琛 琦 琨 甥
++ 甦 畫 番 痢 痛 痣 痙 痘 痞 痠 登 發 皖 皓 皴 盜
++ 睏 短 硝 硬 硯 稍 稈 程 稅 稀 窘 窗 窖 童 竣 等
++ 策 筆 筐 筒 答 筍 筋 筏 筑 粟 粥 絞 結 絨 絕 紫
++ 絮 絲 絡 給 絢 絰 絳 善 翔 翕 耋 聒 肅 腕 腔 腋
++ 腑 腎 脹 腆 脾 腌 腓 腴 舒 舜 菩 萃 菸 萍 菠 菅
++ 萋 菁 華 菱 菴 著 萊 菰 萌 菌 菽 菲 菊 萸 萎 萄
++ 菜 萇 菔 菟 虛 蛟 蛙 蛭 蛔 蛛 蛤 蛐 蛞 街 裁 裂
++ 袱 覃 視 註 詠 評 詞 証 詁 詔 詛 詐 詆 訴 診 訶
++ 詖 象 貂 貯 貼 貳 貽 賁 費 賀 貴 買 貶 貿 貸 越
++ 超 趁 跎 距 跋 跚 跑 跌 跛 跆 軻 軸 軼 辜 逮 逵
++ 週 逸 進 逶 鄂 郵 鄉 郾 酣 酥 量 鈔 鈕 鈣 鈉 鈞
++ 鈍 鈐 鈇 鈑 閔 閏 開 閑 間 閒 閎 隊 階 隋 陽 隅
++ 隆 隍 陲 隄 雁 雅 雄 集 雇 雯 雲 韌 項 順 須 飧
++ 飪 飯 飩 飲 飭 馮 馭 黃 黍 黑 亂 傭 債 傲 傳 僅
++ 傾 催 傷 傻 傯 僇 剿 剷 剽 募 勦 勤 勢 勣 匯 嗟
++ 嗨 嗓 嗦 嗎 嗜 嗇 嗑 嗣 嗤 嗯 嗚 嗡 嗅 嗆 嗥 嗉
++ 園 圓 塞 塑 塘 塗 塚 塔 填 塌 塭 塊 塢 塒 塋 奧
++ 嫁 嫉 嫌 媾 媽 媼 媳 嫂 媲 嵩 嵯 幌 幹 廉 廈 弒
++ 彙 徬 微 愚 意 慈 感 想 愛 惹 愁 愈 慎 慌 慄 慍
++ 愾 愴 愧 愍 愆 愷 戡 戢 搓 搾 搞 搪 搭 搽 搬 搏
++ 搜 搔 損 搶 搖 搗 搆 敬 斟 新 暗 暉 暇 暈 暖 暄
++ 暘 暍 會 榔 業 楚 楷 楠 楔 極 椰 概 楊 楨 楫 楞
++ 楓 楹 榆 楝 楣 楛 歇 歲 毀 殿 毓 毽 溢 溯 滓 溶
++ 滂 源 溝 滇 滅 溥 溘 溼 溺 溫 滑 準 溜 滄 滔 溪
++ 溧 溴 煎 煙 煩 煤 煉 照 煜 煬 煦 煌 煥 煞 煆 煨
++ 煖 爺 牒 猷 獅 猿 猾 瑯 瑚 瑕 瑟 瑞 瑁 琿 瑙 瑛
++ 瑜 當 畸 瘀 痰 瘁 痲 痱 痺 痿 痴 痳 盞 盟 睛 睫
++ 睦 睞 督 睹 睪 睬 睜 睥 睨 睢 矮 碎 碰 碗 碘 碌
++ 碉 硼 碑 碓 硿 祺 祿 禁 萬 禽 稜 稚 稠 稔 稟 稞
++ 窟 窠 筷 節 筠 筮 筧 粱 粳 粵 經 絹 綑 綁 綏 絛
++ 置 罩 罪 署 義 羨 群 聖 聘 肆 肄 腱 腰 腸 腥 腮
++ 腳 腫 腹 腺 腦 舅 艇 蒂 葷 落 萱 葵 葦 葫 葉 葬
++ 葛 萼 萵 葡 董 葩 葭 葆 虞 虜 號 蛹 蜓 蜈 蜇 蜀
++ 蛾 蛻 蜂 蜃 蜆 蜊 衙 裟 裔 裙 補 裘 裝 裡 裊 裕
++ 裒 覜 解 詫 該 詳 試 詩 詰 誇 詼 詣 誠 話 誅 詭
++ 詢 詮 詬 詹 詻 訾 詨 豢 貊 貉 賊 資 賈 賄 貲 賃
++ 賂 賅 跡 跟 跨 路 跳 跺 跪 跤 跦 躲 較 載 軾 輊
++ 辟 農 運 遊 道 遂 達 逼 違 遐 遇 遏 過 遍 遑 逾
++ 遁 鄒 鄗 酬 酪 酩 釉 鈷 鉗 鈸 鈽 鉀 鈾 鉛 鉋 鉤
++ 鉑 鈴 鉉 鉍 鉅 鈹 鈿 鉚 閘 隘 隔 隕 雍 雋 雉 雊
++ 雷 電 雹 零 靖 靴 靶 預 頑 頓 頊 頒 頌 飼 飴 飽
++ 飾 馳 馱 馴 髡 鳩 麂 鼎 鼓 鼠 僧 僮 僥 僖 僭 僚
++ 僕 像 僑 僱 僎 僩 兢 凳 劃 劂 匱 厭 嗾 嘀 嘛 嘗
++ 嗽 嘔 嘆 嘉 嘍 嘎 嗷 嘖 嘟 嘈 嘐 嗶 團 圖 塵 塾
++ 境 墓 墊 塹 墅 塽 壽 夥 夢 夤 奪 奩 嫡 嫦 嫩 嫗
++ 嫖 嫘 嫣 孵 寞 寧 寡 寥 實 寨 寢 寤 察 對 屢 嶄
++ 嶇 幛 幣 幕 幗 幔 廓 廖 弊 彆 彰 徹 慇 愿 態 慷
++ 慢 慣 慟 慚 慘 慵 截 撇 摘 摔 撤 摸 摟 摺 摑 摧
++ 搴 摭 摻 敲 斡 旗 旖 暢 暨 暝 榜 榨 榕 槁 榮 槓
++ 構 榛 榷 榻 榫 榴 槐 槍 榭 槌 榦 槃 榣 歉 歌 氳
++ 漳 演 滾 漓 滴 漩 漾 漠 漬 漏 漂 漢 滿 滯 漆 漱
++ 漸 漲 漣 漕 漫 漯 澈 漪 滬 漁 滲 滌 滷 熔 熙 煽
++ 熊 熄 熒 爾 犒 犖 獄 獐 瑤 瑣 瑪 瑰 瑭 甄 疑 瘧
++ 瘍 瘋 瘉 瘓 盡 監 瞄 睽 睿 睡 磁 碟 碧 碳 碩 碣
++ 禎 福 禍 種 稱 窪 窩 竭 端 管 箕 箋 筵 算 箝 箔
++ 箏 箸 箇 箄 粹 粽 精 綻 綰 綜 綽 綾 綠 緊 綴 網
++ 綱 綺 綢 綿 綵 綸 維 緒 緇 綬 罰 翠 翡 翟 聞 聚
++ 肇 腐 膀 膏 膈 膊 腿 膂 臧 臺 與 舔 舞 艋 蓉 蒿
++ 蓆 蓄 蒙 蒞 蒲 蒜 蓋 蒸 蓀 蓓 蒐 蒼 蓑 蓊 蜿 蜜
++ 蜻 蜢 蜥 蜴 蜘 蝕 蜷 蜩 裳 褂 裴 裹 裸 製 裨 褚
++ 裯 誦 誌 語 誣 認 誡 誓 誤 說 誥 誨 誘 誑 誚 誧
++ 豪 貍 貌 賓 賑 賒 赫 趙 趕 跼 輔 輒 輕 輓 辣 遠
++ 遘 遜 遣 遙 遞 遢 遝 遛 鄙 鄘 鄞 酵 酸 酷 酴 鉸
++ 銀 銅 銘 銖 鉻 銓 銜 銨 鉼 銑 閡 閨 閩 閣 閥 閤
++ 隙 障 際 雌 雒 需 靼 鞅 韶 頗 領 颯 颱 餃 餅 餌
++ 餉 駁 骯 骰 髦 魁 魂 鳴 鳶 鳳 麼 鼻 齊 億 儀 僻
++ 僵 價 儂 儈 儉 儅 凜 劇 劈 劉 劍 劊 勰 厲 嘮 嘻
++ 嘹 嘲 嘿 嘴 嘩 噓 噎 噗 噴 嘶 嘯 嘰 墀 墟 增 墳
++ 墜 墮 墩 墦 奭 嬉 嫻 嬋 嫵 嬌 嬈 寮 寬 審 寫 層
++ 履 嶝 嶔 幢 幟 幡 廢 廚 廟 廝 廣 廠 彈 影 德 徵
++ 慶 慧 慮 慝 慕 憂 慼 慰 慫 慾 憧 憐 憫 憎 憬 憚
++ 憤 憔 憮 戮 摩 摯 摹 撞 撲 撈 撐 撰 撥 撓 撕 撩
++ 撒 撮 播 撫 撚 撬 撙 撢 撳 敵 敷 數 暮 暫 暴 暱
++ 樣 樟 槨 樁 樞 標 槽 模 樓 樊 槳 樂 樅 槭 樑 歐
++ 歎 殤 毅 毆 漿 潼 澄 潑 潦 潔 澆 潭 潛 潸 潮 澎
++ 潺 潰 潤 澗 潘 滕 潯 潠 潟 熟 熬 熱 熨 牖 犛 獎
++ 獗 瑩 璋 璃 瑾 璀 畿 瘠 瘩 瘟 瘤 瘦 瘡 瘢 皚 皺
++ 盤 瞎 瞇 瞌 瞑 瞋 磋 磅 確 磊 碾 磕 碼 磐 稿 稼
++ 穀 稽 稷 稻 窯 窮 箭 箱 範 箴 篆 篇 篁 箠 篌 糊
++ 締 練 緯 緻 緘 緬 緝 編 緣 線 緞 緩 綞 緙 緲 緹
++ 罵 罷 羯 翩 耦 膛 膜 膝 膠 膚 膘 蔗 蔽 蔚 蓮 蔬
++ 蔭 蔓 蔑 蔣 蔡 蔔 蓬 蔥 蓿 蔆 螂 蝴 蝶 蝠 蝦 蝸
++ 蝨 蝙 蝗 蝌 蝓 衛 衝 褐 複 褒 褓 褕 褊 誼 諒 談
++ 諄 誕 請 諸 課 諉 諂 調 誰 論 諍 誶 誹 諛 豌 豎
++ 豬 賠 賞 賦 賤 賬 賭 賢 賣 賜 質 賡 赭 趟 趣 踫
++ 踐 踝 踢 踏 踩 踟 踡 踞 躺 輝 輛 輟 輩 輦 輪 輜
++ 輞 輥 適 遮 遨 遭 遷 鄰 鄭 鄧 鄱 醇 醉 醋 醃 鋅
++ 銻 銷 鋪 銬 鋤 鋁 銳 銼 鋒 鋇 鋰 銲 閭 閱 霄 霆
++ 震 霉 靠 鞍 鞋 鞏 頡 頫 頜 颳 養 餓 餒 餘 駝 駐
++ 駟 駛 駑 駕 駒 駙 骷 髮 髯 鬧 魅 魄 魷 魯 鴆 鴉
++ 鴃 麩 麾 黎 墨 齒 儒 儘 儔 儐 儕 冀 冪 凝 劑 劓
++ 勳 噙 噫 噹 噩 噤 噸 噪 器 噥 噱 噯 噬 噢 噶 壁
++ 墾 壇 壅 奮 嬝 嬴 學 寰 導 彊 憲 憑 憩 憊 懍 憶
++ 憾 懊 懈 戰 擅 擁 擋 撻 撼 據 擄 擇 擂 操 撿 擒
++ 擔 撾 整 曆 曉 暹 曄 曇 暸 樽 樸 樺 橙 橫 橘 樹
++ 橄 橢 橡 橋 橇 樵 機 橈 歙 歷 氅 濂 澱 澡 濃 澤
++ 濁 澧 澳 激 澹 澶 澦 澠 澴 熾 燉 燐 燒 燈 燕 熹
++ 燎 燙 燜 燃 燄 獨 璜 璣 璘 璟 璞 瓢 甌 甍 瘴 瘸
++ 瘺 盧 盥 瞠 瞞 瞟 瞥 磨 磚 磬 磧 禦 積 穎 穆 穌
++ 穋 窺 篙 簑 築 篤 篛 篡 篩 篦 糕 糖 縊 縑 縈 縛
++ 縣 縞 縝 縉 縐 罹 羲 翰 翱 翮 耨 膳 膩 膨 臻 興
++ 艘 艙 蕊 蕙 蕈 蕨 蕩 蕃 蕉 蕭 蕪 蕞 螃 螟 螞 螢
++ 融 衡 褪 褲 褥 褫 褡 親 覦 諦 諺 諫 諱 謀 諜 諧
++ 諮 諾 謁 謂 諷 諭 諳 諶 諼 豫 豭 貓 賴 蹄 踱 踴
++ 蹂 踹 踵 輻 輯 輸 輳 辨 辦 遵 遴 選 遲 遼 遺 鄴
++ 醒 錠 錶 鋸 錳 錯 錢 鋼 錫 錄 錚 錐 錦 錡 錕 錮
++ 錙 閻 隧 隨 險 雕 霎 霑 霖 霍 霓 霏 靛 靜 靦 鞘
++ 頰 頸 頻 頷 頭 頹 頤 餐 館 餞 餛 餡 餚 駭 駢 駱
++ 骸 骼 髻 髭 鬨 鮑 鴕 鴣 鴦 鴨 鴒 鴛 默 黔 龍 龜
++ 優 償 儡 儲 勵 嚎 嚀 嚐 嚅 嚇 嚏 壕 壓 壑 壎 嬰
++ 嬪 嬤 孺 尷 屨 嶼 嶺 嶽 嶸 幫 彌 徽 應 懂 懇 懦
++ 懋 戲 戴 擎 擊 擘 擠 擰 擦 擬 擱 擢 擭 斂 斃 曙
++ 曖 檀 檔 檄 檢 檜 櫛 檣 橾 檗 檐 檠 歜 殮 毚 氈
++ 濘 濱 濟 濠 濛 濤 濫 濯 澀 濬 濡 濩 濕 濮 濰 燧
++ 營 燮 燦 燥 燭 燬 燴 燠 爵 牆 獰 獲 璩 環 璦 璨
++ 癆 療 癌 盪 瞳 瞪 瞰 瞬 瞧 瞭 矯 磷 磺 磴 磯 礁
++ 禧 禪 穗 窿 簇 簍 篾 篷 簌 篠 糠 糜 糞 糢 糟 糙
++ 糝 縮 績 繆 縷 縲 繃 縫 總 縱 繅 繁 縴 縹 繈 縵
++ 縿 縯 罄 翳 翼 聱 聲 聰 聯 聳 臆 臃 膺 臂 臀 膿
++ 膽 臉 膾 臨 舉 艱 薪 薄 蕾 薜 薑 薔 薯 薛 薇 薨
++ 薊 虧 蟀 蟑 螳 蟒 蟆 螫 螻 螺 蟈 蟋 褻 褶 襄 褸
++ 褽 覬 謎 謗 謙 講 謊 謠 謝 謄 謐 豁 谿 豳 賺 賽
++ 購 賸 賻 趨 蹉 蹋 蹈 蹊 轄 輾 轂 轅 輿 避 遽 還
++ 邁 邂 邀 鄹 醣 醞 醜 鍍 鎂 錨 鍵 鍊 鍥 鍋 錘 鍾
++ 鍬 鍛 鍰 鍚 鍔 闊 闋 闌 闈 闆 隱 隸 雖 霜 霞 鞠
++ 韓 顆 颶 餵 騁 駿 鮮 鮫 鮪 鮭 鴻 鴿 麋 黏 點 黜
++ 黝 黛 鼾 齋 叢 嚕 嚮 壙 壘 嬸 彝 懣 戳 擴 擲 擾
++ 攆 擺 擻 擷 斷 曜 朦 檳 檬 櫃 檻 檸 櫂 檮 檯 歟
++ 歸 殯 瀉 瀋 濾 瀆 濺 瀑 瀏 燻 燼 燾 燸 獷 獵 璧
++ 璿 甕 癖 癘 癒 瞽 瞿 瞻 瞼 礎 禮 穡 穢 穠 竄 竅
++ 簫 簧 簪 簞 簣 簡 糧 織 繕 繞 繚 繡 繒 繙 罈 翹
++ 翻 職 聶 臍 臏 舊 藏 薩 藍 藐 藉 薰 薺 薹 薦 蟯
++ 蟬 蟲 蟠 覆 覲 觴 謨 謹 謬 謫 豐 贅 蹙 蹣 蹦 蹤
++ 蹟 蹕 軀 轉 轍 邇 邃 邈 醫 醬 釐 鎔 鎊 鎖 鎢 鎳
++ 鎮 鎬 鎰 鎘 鎚 鎗 闔 闖 闐 闕 離 雜 雙 雛 雞 霤
++ 鞣 鞦 鞭 韹 額 顏 題 顎 顓 颺 餾 餿 餽 餮 馥 騎
++ 髁 鬃 鬆 魏 魎 魍 鯊 鯉 鯽 鯈 鯀 鵑 鵝 鵠 黠 鼕
++ 鼬 儳 嚥 壞 壟 壢 寵 龐 廬 懲 懷 懶 懵 攀 攏 曠
++ 曝 櫥 櫝 櫚 櫓 瀛 瀟 瀨 瀚 瀝 瀕 瀘 爆 爍 牘 犢
++ 獸 獺 璽 瓊 瓣 疇 疆 癟 癡 矇 礙 禱 穫 穩 簾 簿
++ 簸 簽 簷 籀 繫 繭 繹 繩 繪 羅 繳 羶 羹 羸 臘 藩
++ 藝 藪 藕 藤 藥 藷 蟻 蠅 蠍 蟹 蟾 襠 襟 襖 襞 譁
++ 譜 識 證 譚 譎 譏 譆 譙 贈 贊 蹼 蹲 躇 蹶 蹬 蹺
++ 蹴 轔 轎 辭 邊 邋 醱 醮 鏡 鏑 鏟 鏃 鏈 鏜 鏝 鏖
++ 鏢 鏍 鏘 鏤 鏗 鏨 關 隴 難 霪 霧 靡 韜 韻 類 願
++ 顛 颼 饅 饉 騖 騙 鬍 鯨 鯧 鯖 鯛 鶉 鵡 鵲 鵪 鵬
++ 麒 麗 麓 麴 勸 嚨 嚷 嚶 嚴 嚼 壤 孀 孃 孽 寶 巉
++ 懸 懺 攘 攔 攙 曦 朧 櫬 瀾 瀰 瀲 爐 獻 瓏 癢 癥
++ 礦 礪 礬 礫 竇 競 籌 籃 籍 糯 糰 辮 繽 繼 纂 罌
++ 耀 臚 艦 藻 藹 蘑 藺 蘆 蘋 蘇 蘊 蠔 蠕 襤 覺 觸
++ 議 譬 警 譯 譟 譫 贏 贍 躉 躁 躅 躂 醴 釋 鐘 鐃
++ 鏽 闡 霰 飄 饒 饑 馨 騫 騰 騷 騵 鰓 鰍 鹹 麵 黨
++ 鼯 齟 齣 齡 儷 儸 囁 囀 囂 夔 屬 巍 懼 懾 攝 攜
++ 斕 曩 櫻 欄 櫺 殲 灌 爛 犧 瓖 瓔 癩 矓 籐 纏 續
++ 羼 蘗 蘭 蘚 蠣 蠢 蠡 蠟 襪 襬 覽 譴 護 譽 贓 躊
++ 躍 躋 轟 辯 醺 鐮 鐳 鐵 鐺 鐸 鐲 鐫 闢 霸 霹 露
++ 響 顧 顥 饗 驅 驃 驀 騾 髏 魔 魑 鰭 鰥 鶯 鶴 鷂
++ 鶸 麝 黯 鼙 齜 齦 齧 儼 儻 囈 囊 囉 孿 巔 巒 彎
++ 懿 攤 權 歡 灑 灘 玀 瓤 疊 癮 癬 禳 籠 籟 聾 聽
++ 臟 襲 襯 觼 讀 贖 贗 躑 躓 轡 酈 鑄 鑑 鑒 霽 霾
++ 韃 韁 顫 饕 驕 驍 髒 鬚 鱉 鰱 鰾 鰻 鷓 鷗 鼴 齬
++ 齪 龔 囌 巖 戀 攣 攫 攪 曬 欐 瓚 竊 籤 籣 籥 纓
++ 纖 纔 臢 蘸 蘿 蠱 變 邐 邏 鑣 鑠 鑤 靨 顯 饜 驚
++ 驛 驗 髓 體 髑 鱔 鱗 鱖 鷥 麟 黴 囑 壩 攬 灞 癱
++ 癲 矗 罐 羈 蠶 蠹 衢 讓 讒 讖 艷 贛 釀 鑪 靂 靈
++ 靄 韆 顰 驟 鬢 魘 鱟 鷹 鷺 鹼 鹽 鼇 齷 齲 廳 欖
++ 灣 籬 籮 蠻 觀 躡 釁 鑲 鑰 顱 饞 髖 鬣 黌 灤 矚
++ 讚 鑷 韉 驢 驥 纜 讜 躪 釅 鑽 鑾 鑼 鱷 鱸 黷 豔
++ 鑿 鸚 爨 驪 鬱 鸛 鸞 籲 ① ② ③ ④ ⑤ ⑥ ⑦ ⑧
++ ⑨ ⑩ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⅰ ⅱ ⅲ ⅳ
++ ⅴ ⅵ ⅶ ⅷ ⅸ ⅹ 丶 丿 亅 亠 冂 冖 冫 勹 匸 卩
++ 厶 夊 宀 巛 ⼳ 广 彐 彡 攴 疒 辵 ¨ ˆ ヽ ヾ ゝ
++ ゞ 々 〆 〇 ー [ ] ✽ ぁ あ ぃ い ぅ う ぇ え
++ ぉ お か が き ぎ く ぐ け げ こ ご さ ざ し じ
++ す ず せ ぜ そ ぞ た だ ち ぢ っ つ づ て で と
++ ど な に ぬ ね の は ば ぱ ひ び ぴ ふ ぶ ぷ へ
++ べ ぺ ほ ぼ ぽ ま み む め も ゃ や ゅ ゆ ょ よ
++ ら り る れ ろ ゎ わ ゐ ゑ を ん ァ ア ィ イ ゥ
++ ウ ェ エ ォ オ カ ガ キ ギ ク グ ケ ゲ コ ゴ サ
++ ザ シ ジ ス ズ セ ゼ ソ ゾ タ ダ チ ヂ ッ ツ ヅ
++ テ デ ト ド ナ ニ ヌ ネ ノ ハ バ パ ヒ ビ ピ フ
++ ブ プ ヘ ベ ペ ホ ボ ポ マ ミ ム メ モ ャ ヤ ュ
++ ユ ョ ヨ ラ リ ル レ ロ ヮ ワ ヰ ヱ ヲ ン ヴ ヵ
++ ヶ А Б В Г Д Е Ё Ж З И Й К Л М Н
++ О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э
++ Ю Я а б в г д е ё ж з и й к л м
++ н о п р с т у ф х ц ч ш щ ъ ы ь
++ э ю я ⇧ ↸ ↹ ㇏ 𠃌 乚 𠂊 刂 䒑 龰 冈 龱 𧘇
++ ¬ ¦ ' " ㈱ № ℡ ゛ ゜ ⺀ ⺄ ⺆ ⺇ ⺈ ⺊ ⺌
++ ⺍ ⺕ ⺜ ⺝ ⺥ ⺧ ⺪ ⺬ ⺮ ⺶ ⺼ ⺾ ⻆ ⻊ ⻌ ⻍
++ ⻏ ⻖ ⻗ ⻞ ⻣ ʃ ɐ ɛ ɔ ɵ œ ø ŋ ʊ ɪ 乂
++ 乜 凵 匚 厂 万 丌 乇 亍 囗 兀 屮 彳 丏 冇 与 丮
++ 亓 仂 仉 仈 冘 勼 卬 厹 圠 夃 夬 尐 巿 旡 殳 毌
++ 气 爿 丱 丼 仨 仜 仩 仡 仝 仚 刌 匜 卌 圢 圣 夗
++ 夯 宁 宄 尒 尻 屴 屳 帄 庀 庂 忉 戉 扐 氕 氶 汃
++ 氿 氻 犮 犰 玊 禸 肊 阞 伎 优 伬 仵 伔 仱 伀 价
++ 伈 伝 伂 伅 伢 伓 伄 仴 伒 冱 刓 刉 刐 劦 匢 匟
++ 卍 厊 吇 囡 囟 圮 圪 圴 夼 妀 奼 妅 奻 奾 奷 奿
++ 孖 尕 尥 屼 屺 屻 屾 巟 幵 庄 异 弚 彴 忕 忔 忏
++ 扜 扞 扤 扡 扦 扢 扙 扠 扚 扥 旯 旮 朾 朹 朸 朻
++ 机 朿 朼 朳 氘 汆 汒 汜 汏 汊 汔 汋 汌 灱 牞 犴
++ 犵 玎 甪 癿 穵 网 艸 艼 芀 艽 艿 虍 襾 邙 邗 邘
++ 邛 邔 阢 阤 阠 阣 佖 伻 佢 佉 体 佤 伾 佧 佒 佟
++ 佁 佘 伭 伳 伿 佡 冏 冹 刜 刞 刡 劭 劮 匉 卣 卲
++ 厎 厏 吰 吷 吪 呔 呅 吙 吜 吥 吘 吽 呏 呁 吨 吤
++ 呇 囮 囧 囥 坁 坅 坌 坉 坋 坒 夆 奀 妦 妘 妠 妗
++ 妎 妢 妐 妏 妧 妡 宎 宒 尨 尪 岍 岏 岈 岋 岉 岒
++ 岊 岆 岓 岕 巠 帊 帎 庋 庉 庌 庈 庍 弅 弝 彸 彶
++ 忒 忑 忐 忭 忨 忮 忳 忡 忤 忣 忺 忯 忷 忻 怀 忴
++ 戺 抃 抌 抎 抏 抔 抇 扱 扻 扺 扰 抁 抈 扷 扽 扲
++ 扴 攷 旰 旴 旳 旲 旵 杅 杇 杙 杕 杌 杈 杝 杍 杚
++ 杋 毐 氙 氚 汸 汧 汫 沄 沋 沏 汱 汯 汩 沚 汭 沇
++ 沕 沜 汦 汳 汥 汻 沎 灴 灺 牣 犿 犽 狃 狆 狁 犺
++ 狅 玕 玗 玓 玔 玒 町 甹 疔 疕 皁 礽 耴 肕 肙 肐
++ 肒 肜 芐 芏 芅 芎 芑 芓 芊 芃 芄 豸 迉 辿 邟 邡
++ 邥 邞 邧 邠 阰 阨 阯 阭 丳 侘 佼 侅 佽 侀 侇 佶
++ 佴 侉 侄 佷 佌 侗 佪 侚 佹 侁 佸 侐 侜 侔 侞 侒
++ 侂 侕 佫 佮 冞 冼 冾 刵 刲 刳 剆 刱 劼 匊 匋 匼
++ 厒 厔 咇 呿 咁 咑 咂 咈 呫 呺 呾 呥 呬 呴 呦 咍
++ 呯 呡 呠 咘 呣 呧 呤 囷 囹 坯 坲 坭 坫 坱 坰 坶
++ 垀 坵 坻 坳 坴 坢 坨 坽 夌 奅 妵 妺 姏 姎 妲 姌
++ 姁 妶 妼 姃 姖 妱 妽 姀 姈 妴 姇 孢 孥 宓 宕 屄
++ 屇 岮 岤 岠 岵 岯 岨 岬 岟 岣 岭 岢 岪 岧 岝 岥
++ 岶 岰 岦 帗 帔 帙 弨 弢 弣 弤 彔 徂 彾 彽 忞 忥
++ 怭 怦 怙 怲 怋 怴 怊 怗 怳 怚 怞 怬 怢 怍 怐 怮
++ 怓 怑 怌 怉 怜 戔 戽 抭 抴 拑 抾 抪 抶 拊 抮 抳
++ 抯 抻 抩 抰 抸 攽 斨 斻 昉 旼 昄 昒 昈 旻 昃 昋
++ 昍 昅 旽 昑 昐 曶 朊 枅 杬 枎 枒 杶 杻 枘 枆 构
++ 杴 枍 枌 杺 枟 枑 枙 枃 杽 极 杸 杹 枔 欥 殀 歾
++ 毞 氝 沓 泬 泫 泮 泙 沶 泔 沭 泧 沷 泐 泂 沺 泃
++ 泆 泭 泲 泒 泝 沴 沊 沝 沀 泞 泀 洰 泍 泇 沰 泹
++ 泏 泩 泑 炔 炘 炅 炓 炆 炄 炑 炖 炂 炚 炃 牪 狖
++ 狋 狘 狉 狜 狒 狔 狚 狌 狑 玤 玡 玭 玦 玢 玠 玬
++ 玝 瓝 瓨 甿 畀 甾 疌 疘 皯 盳 盱 盰 盵 矸 矼 矹
++ 矻 矺 矷 祂 礿 秅 穸 穻 竻 籵 糽 耵 肏 肮 肣 肸
++ 肵 肭 舠 芠 苀 芫 芚 芘 芛 芵 芧 芮 芼 芞 芺 芴
++ 芨 芡 芩 苂 芤 苃 芶 芢 虰 虯 虭 虮 豖 迒 迋 迓
++ 迍 迖 迕 迗 邲 邴 邯 邳 邰 阹 阽 阼 阺 陃 俍 俅
++ 俓 侲 俉 俋 俁 俔 俜 俙 侻 侳 俛 俇 俖 侺 俀 侹
++ 俬 剄 剉 勀 勂 匽 卼 厗 厖 厙 厘 咺 咡 咭 咥 哏
++ 哃 茍 咷 咮 哖 咶 哅 哆 咠 呰 咼 咢 咾 呲 哞 咰
++ 垵 垞 垟 垤 垌 垗 垝 垛 垔 垘 垏 垙 垥 垚 垕 壴
++ 复 奓 姡 姞 姮 娀 姱 姝 姺 姽 姼 姶 姤 姲 姷 姛
++ 姩 姳 姵 姠 姾 姴 姭 宨 屌 峐 峘 峌 峗 峋 峛 峞
++ 峚 峉 峇 峊 峖 峓 峔 峏 峈 峆 峎 峟 峸 巹 帡 帢
++ 帣 帠 帤 庰 庤 庢 庛 庣 庥 弇 弮 彖 徆 怷 怹 恔
++ 恲 恞 恅 恓 恇 恉 恛 恌 恀 恂 恟 怤 恄 恘 恦 恮
++ 扂 扃 拏 挍 挋 拵 挎 挃 拫 拹 挏 挌 拸 拶 挀 挓
++ 挔 拺 挕 拻 拰 敁 敃 斪 斿 昶 昡 昲 昵 昜 昦 昢
++ 昳 昫 昺 昝 昴 昹 昮 朏 朐 柁 柲 柈 枺 柜 枻 柸
++ 柘 柀 枷 柅 柫 柤 柟 枵 柍 枳 柷 柶 柮 柣 柂 枹
++ 柎 柧 柰 枲 柼 柆 柭 柌 枮 柦 柛 柺 柉 柊 柃 柪
++ 柋 欨 殂 殄 殶 毖 毘 毠 氠 氡 洨 洴 洭 洟 洼 洿
++ 洒 洊 泚 洳 洄 洙 洺 洚 洑 洀 洝 浂 洁 洘 洷 洃
++ 洏 浀 洇 洠 洬 洈 洢 洉 洐 炷 炟 炾 炱 炰 炡 炴
++ 炵 炩 牁 牉 牊 牬 牰 牳 牮 狊 狤 狨 狫 狟 狪 狦
++ 狣 玅 珌 珂 珈 珅 玹 玶 玵 玴 珫 玿 珇 玾 珃 珆
++ 玸 珋 瓬 瓮 甮 畇 畈 疧 疪 癹 盄 眈 眃 眄 眅 眊
++ 盷 盻 盺 矧 矨 砆 砑 砒 砅 砐 砏 砎 砉 砃 砓 祊
++ 祌 祋 祅 祄 秕 种 秏 秖 秎 窀 穾 竑 笀 笁 籺 籸
++ 籹 籿 粀 粁 紃 紈 紁 罘 羑 羍 羾 耇 耎 耏 耔 耷
++ 胘 胇 胠 胑 胈 胂 胐 胅 胣 胙 胜 胊 胕 胉 胏 胗
++ 胦 胍 臿 舡 芔 苙 苾 苹 茇 苨 茀 苕 茺 苫 苖 苴
++ 苬 苡 苲 苵 茌 苻 苶 苰 苪 苤 苠 苺 苳 苭 虷 虴
++ 虼 虳 衁 衎 衧 衪 衩 觓 訄 訇 赲 迣 迡 迮 迠 郱
++ 邽 邿 郕 郅 邾 郇 郋 郈 釔 釓 陔 陏 陑 陓 陊 陎
++ 倞 倅 倇 倓 倢 倰 倛 俵 俴 倳 倷 倬 俶 俷 倗 倜
++ 倠 倧 倵 倯 倱 倎 党 冔 冓 凊 凄 凅 凈 凎 剡 剚
++ 剒 剞 剟 剕 剢 勍 匎 厞 唦 哢 唗 唒 哧 哳 哤 唚
++ 哿 唄 唈 哫 唑 唅 哱 唊 哻 哷 哸 哠 唎 唃 唋 圁
++ 圂 埌 堲 埕 埒 垺 埆 垽 垼 垸 垶 垿 埇 埐 垹 埁
++ 夎 奊 娙 娖 娭 娮 娕 娏 娗 娊 娞 娳 孬 宧 宭 宬
++ 尃 屖 屔 峬 峿 峮 峱 峷 崀 峹 帩 帨 庨 庮 庪 庬
++ 弳 弰 彧 恝 恚 恧 恁 悢 悈 悀 悒 悁 悝 悃 悕 悛
++ 悗 悇 悜 悎 戙 扆 拲 挐 捖 挬 捄 捅 挶 捃 揤 挹
++ 捋 捊 挼 挩 捁 挴 捘 捔 捙 挭 捇 挳 捚 捑 挸 捗
++ 捀 捈 敊 敆 旆 旃 旄 旂 晊 晟 晇 晑 朒 朓 栟 栚
++ 桉 栲 栳 栻 桋 桏 栖 栱 栜 栵 栫 栭 栯 桎 桄 栴
++ 栝 栒 栔 栦 栨 栮 桍 栺 栥 栠 欬 欯 欭 欱 欴 歭
++ 肂 殈 毦 毤 毨 毣 毢 毧 氥 浺 浣 浤 浶 洍 浡 涒
++ 浘 浢 浭 浯 涑 涍 淯 浿 涆 浞 浧 浠 涗 浰 浼 浟
++ 涂 涘 洯 浨 涋 浾 涀 涄 洖 涃 浻 浽 浵 涐 烜 烓
++ 烑 烝 烋 缹 烢 烗 烒 烞 烠 烔 烍 烅 烆 烇 烚 烎
++ 烡 牂 牸 牷 牶 猀 狺 狴 狾 狶 狳 狻 猁 珓 珙 珥
++ 珖 玼 珧 珣 珩 珜 珒 珛 珔 珝 珚 珗 珘 珨 瓞 瓟
++ 瓴 瓵 甡 畛 畟 疰 痁 疻 痄 痀 疿 疶 疺 皊 盉 眝
++ 眛 眐 眓 眒 眣 眑 眕 眙 眚 眢 眧 砣 砬 砢 砵 砯
++ 砨 砮 砫 砡 砩 砳 砪 砱 祔 祛 祏 祜 祓 祒 祑 秫
++ 秬 秠 秮 秭 秪 秜 秞 秝 窆 窉 窅 窋 窌 窊 窇 竘
++ 笐 笄 笓 笅 笏 笈 笊 笎 笉 笒 粄 粑 粊 粌 粈 粍
++ 粅 紞 紝 紑 紎 紘 紖 紓 紟 紒 紏 紌 罜 罡 罞 罠
++ 罝 罛 羖 羒 翃 翂 翀 耖 耾 耹 胺 胲 胹 胵 脁 胻
++ 脀 舁 舯 舥 茳 茭 荄 茙 荑 茥 荖 茿 荁 茦 茜 茢
++ 荂 荎 茛 茪 茈 茼 荍 茖 茤 茠 茷 茯 茩 荇 荅 荌
++ 荓 茞 茬 荋 茧 荈 虓 虒 蚢 蚨 蚖 蚍 蚑 蚞 蚇 蚗
++ 蚆 蚋 蚚 蚅 蚥 蚙 蚡 蚧 蚕 蚘 蚎 蚝 蚐 蚔 衃 衄
++ 衭 衵 衶 衲 袀 衱 衿 衯 袃 衾 衴 衼 訒 豇 豗 豻
++ 貤 貣 赶 赸 趵 趷 趶 軑 軓 迾 迵 适 迿 迻 逄 迼
++ 迶 郖 郠 郙 郚 郣 郟 郥 郘 郛 郗 郜 郤 酐 酎 酏
++ 釕 釢 釚 陜 陟 隼 飣 髟 鬯 乿 偰 偪 偡 偞 偠 偓
++ 偋 偝 偲 偈 偍 偁 偛 偊 偢 倕 偅 偟 偩 偫 偣 偤
++ 偆 偀 偮 偳 偗 偑 凐 剫 剭 剬 剮 勖 勓 匭 厜 啵
++ 啶 唼 啍 啐 唴 唪 啑 啢 唶 唵 唰 啒 啅 唌 唲 啥
++ 啎 唹 啈 唭 唻 啀 啋 圊 圇 埻 堔 埢 埶 埜 埴 堀
++ 埭 埽 堈 埸 堋 埳 埏 堇 埮 埣 埲 埥 埬 埡 堎 埼
++ 堐 埧 堁 堌 埱 埩 埰 堍 堄 奜 婠 婘 婕 婧 婞 娸
++ 娵 婭 婐 婟 婥 婬 婓 婤 婗 婃 婝 婒 婄 婛 婈 媎
++ 娾 婍 娹 婌 婰 婩 婇 婑 婖 婂 婜 孲 孮 寁 寀 屙
++ 崞 崋 崝 崚 崠 崌 崨 崍 崦 崥 崏 崰 崒 崣 崟 崮
++ 帾 帴 庱 庴 庹 庲 庳 弶 弸 徛 徖 徟 悊 悐 悆 悾
++ 悰 悺 惓 惔 惏 惤 惙 惝 惈 悱 惛 悷 惊 悿 惃 惍
++ 惀 挲 捥 掊 掂 捽 掽 掞 掭 掝 掗 掫 掎 捯 掇 掐
++ 据 掯 捵 掜 捭 掮 捼 掤 挻 掟 捸 掅 掁 掑 掍 捰
++ 敓 旍 晥 晡 晛 晙 晜 晢 朘 桹 梇 梐 梜 桭 桮 梮
++ 梫 楖 桯 梣 梬 梩 桵 桴 梲 梏 桷 梒 桼 桫 桲 梪
++ 梀 桱 桾 梛 梖 梋 梠 梉 梤 桸 桻 梑 梌 梊 桽 欶
++ 欳 欷 欸 殑 殏 殍 殎 殌 氪 淀 涫 涴 涳 湴 涬 淩
++ 淢 涷 淶 淔 渀 淈 淠 淟 淖 涾 淥 淜 淝 淛 淴 淊
++ 涽 淭 淰 涺 淕 淂 淏 淉 淐 淲 淓 淽 淗 淍 淣 涻
++ 烺 焍 烷 焗 烴 焌 烰 焄 烳 焐 烼 烿 焆 焓 焀 烸
++ 烶 焋 焂 焎 牾 牻 牼 牿 猝 猗 猇 猑 猘 猊 猈 狿
++ 猏 猞 玈 珶 珸 珵 琄 琁 珽 琇 琀 珺 珼 珿 琌 琋
++ 珴 琈 畤 畣 痎 痒 痏 痋 痌 痑 痐 皏 皉 盓 眹 眯
++ 眭 眱 眲 眴 眳 眽 眥 眻 眵 硈 硒 硉 硍 硊 硌 砦
++ 硅 硐 祤 祧 祩 祪 祣 祫 祡 离 秺 秸 秶 秷 窏 窔
++ 窐 笵 筇 笴 笥 笰 笢 笤 笳 笘 笪 笝 笱 笫 笭 笯
++ 笲 笸 笚 笣 粔 粘 粖 粣 紵 紽 紸 紶 紺 絅 紬 紩
++ 絁 絇 紾 紿 絊 紻 紨 罣 羕 羜 羝 羛 翊 翋 翍 翐
++ 翑 翇 翏 翉 耟 耞 耛 聇 聃 聈 脘 脥 脙 脛 脭 脟
++ 脬 脞 脡 脕 脧 脝 脢 舑 舸 舳 舺 舴 舲 艴 莐 莣
++ 莨 莍 荺 荳 莤 荴 莏 莁 莕 莙 荵 莔 莩 荽 莃 莌
++ 莝 莛 莪 莋 荾 莥 莯 莈 莗 莰 荿 莦 莇 莮 荶 莚
++ 虙 虖 蚿 蚷 蛂 蛁 蛅 蚺 蚰 蛈 蚹 蚳 蚸 蛌 蚴 蚻
++ 蚼 蛃 蚽 蚾 衒 袉 袕 袨 袢 袪 袚 袑 袡 袟 袘 袧
++ 袙 袛 袗 袤 袬 袌 袓 袎 覂 觖 觙 觕 訰 訧 訬 訞
++ 谹 谻 豜 豝 豽 貥 赽 赻 赹 趼 跂 趹 趿 跁 軘 軞
++ 軝 軜 軗 軠 軡 逤 逋 逑 逜 逌 逡 郯 郪 郰 郴 郲
++ 郳 郔 郫 郬 郩 酖 酘 酚 酓 酕 釬 釴 釱 釳 釸 釤
++ 釹 釪 釫 釷 釨 釮 镺 閆 閈 陼 陭 陫 陱 陯 隿 靪
++ 頄 飥 馗 傛 傕 傔 傞 傋 傣 傃 傌 傎 傝 偨 傜 傒
++ 傂 傇 兟 凔 匒 匑 厤 厧 喑 喨 喥 喭 啷 噅 喢 喓
++ 喈 喏 喵 喁 喣 喒 喤 啽 喌 喦 啿 喕 喡 喎 圌 堩
++ 堷 堙 堞 堧 堣 堨 埵 塈 堥 堜 堛 堳 堿 堶 堮 堹
++ 堸 堭 堬 堻 奡 媯 媔 媟 婺 媢 媞 婸 媦 婼 媥 媬
++ 媕 媮 娷 媄 媊 媗 媃 媋 媩 婻 婽 媌 媜 媏 媓 媝
++ 寪 寍 寋 寔 寑 寊 寎 尌 尰 崷 嵃 嵫 嵁 嵋 崿 崵
++ 嵑 嵎 嵕 崳 崺 嵒 崽 崱 嵙 嵂 崹 嵉 崸 崼 崲 崶
++ 嵀 嵅 幄 幁 彘 徦 徥 徫 惉 悹 惌 惢 惎 惄 愔 惲
++ 愊 愖 愅 惵 愓 惸 惼 惾 惁 愃 愘 愝 愐 惿 愄 愋
++ 扊 掔 掱 掰 揎 揥 揨 揯 揃 撝 揳 揊 揠 揶 揕 揲
++ 揵 摡 揟 掾 揝 揜 揄 揘 揓 揂 揇 揌 揋 揈 揰 揗
++ 揙 攲 敧 敪 敤 敜 敨 敥 斌 斝 斞 斮 旐 旒 晼 晬
++ 晻 暀 晱 晹 晪 晲 朁 椌 棓 椄 棜 椪 棬 棪 棱 椏
++ 棖 棷 棫 棤 棶 椓 椐 棳 棡 椇 棌 椈 楰 梴 椑 棯
++ 棆 椔 棸 棐 棽 棼 棨 椋 椊 椗 棎 棈 棝 棞 棦 棴
++ 棑 椆 棔 棩 椕 椥 棇 欹 欻 欿 欼 殔 殗 殙 殕 殽
++ 毰 毲 毳 氰 淼 湆 湇 渟 湉 溈 渼 渽 湅 湢 渫 渿
++ 湁 湝 湳 渜 渳 湋 湀 湑 渻 渃 渮 湞 湨 湜 湡 渱
++ 渨 湠 湱 湫 渹 渢 渰 湓 湥 渧 湸 湤 湷 湕 湹 湒
++ 湦 渵 渶 湚 焠 焞 焯 烻 焮 焱 焣 焥 焢 焲 焟 焨
++ 焺 焛 牋 牚 犈 犉 犆 犅 犋 猒 猋 猰 猢 猱 猳 猧
++ 猲 猭 猦 猣 猵 猌 琮 琬 琰 琫 琖 琚 琡 琭 琱 琤
++ 琣 琝 琩 琠 琲 瓻 甯 畯 畬 痧 痚 痡 痦 痝 痟 痤
++ 痗 皕 皒 盚 睆 睇 睄 睍 睅 睊 睎 睋 睌 矞 矬 硠
++ 硤 硥 硜 硭 硱 硪 确 硰 硩 硨 硞 硢 祴 祳 祲 祰
++ 稂 稊 稃 稌 稄 窙 竦 竤 筊 笻 筄 筈 筌 筎 筀 筘
++ 筅 粢 粞 粨 粡 絘 絯 絣 絓 絖 絧 絪 絏 絭 絜 絫
++ 絒 絔 絩 絑 絟 絎 缾 缿 罥 罦 羢 羠 羡 翗 聑 聏
++ 聐 胾 胔 腃 腊 腒 腏 腇 脽 腍 脺 臦 臮 臷 臸 臹
++ 舄 舼 舽 舿 艵 茻 菏 菹 萣 菀 菨 萒 菧 菤 菼 菶
++ 萐 菆 菈 菫 菣 莿 萁 菝 菥 菘 菿 菡 菋 菎 菖 菵
++ 菉 萉 萏 菞 萑 萆 菂 菳 菕 菺 菇 菑 菪 萓 菃 菬
++ 菮 菄 菻 菗 菢 萛 菛 菾 蛘 蛢 蛦 蛓 蛣 蛚 蛪 蛝
++ 蛫 蛜 蛬 蛩 蛗 蛨 蛑 衈 衖 衕 袺 裗 袹 袸 裀 袾
++ 袶 袼 袷 袽 袲 褁 裉 覕 覘 覗 觝 觚 觛 詎 詍 訹
++ 詙 詀 詗 詘 詄 詅 詒 詈 詑 詊 詌 詏 豟 貁 貀 貺
++ 貾 貰 貹 貵 趄 趀 趉 跘 跓 跍 跇 跖 跜 跏 跕 跙
++ 跈 跗 跅 軯 軷 軺 軹 軦 軮 軥 軵 軧 軨 軶 軫 軱
++ 軬 軴 軩 逭 逴 逯 鄆 鄬 鄄 郿 郼 鄈 郹 郻 鄁 鄀
++ 鄇 鄅 鄃 酡 酤 酟 酢 酠 鈁 鈊 鈥 鈃 鈚 鈦 鈏 鈌
++ 鈀 鈒 釿 釽 鈆 鈄 鈧 鈂 鈜 鈤 鈙 鈗 鈅 鈖 镻 閍
++ 閌 閐 隇 陾 隈 隉 隃 隀 雂 雈 雃 雱 雰 靬 靰 靮
++ 頇 颩 飫 鳦 黹 亃 亄 亶 傽 傿 僆 傮 僄 僊 傴 僈
++ 僂 傰 僁 傺 傱 僋 僉 傶 傸 凗 剺 剸 剻 剼 嗃 嗛
++ 嗌 嗐 嗋 嗊 嗝 嗀 嗔 嗄 嗩 喿 嗒 喍 嗏 嗕 嗢 嗖
++ 嗈 嗲 嗍 嗙 嗂 圔 塓 塨 塤 塏 塍 塉 塯 塕 塎 塝
++ 塙 塥 塛 堽 塣 塱 壼 嫇 嫄 嫋 媺 媸 媱 媵 媰 媿
++ 嫈 媻 嫆 媷 嫀 嫊 媴 媶 嫍 媹 媐 寖 寘 寙 尟 尳
++ 嵱 嵣 嵊 嵥 嵲 嵬 嵞 嵨 嵧 嵢 巰 幏 幎 幊 幍 幋
++ 廅 廌 廆 廋 廇 彀 徯 徭 惷 慉 慊 愫 慅 愶 愲 愮
++ 慆 愯 慏 愩 慀 戠 酨 戣 戥 戤 揅 揱 揫 搐 搒 搉
++ 搠 搤 搳 摃 搟 搕 搘 搹 搷 搢 搣 搌 搦 搰 搨 摁
++ 搵 搯 搊 搚 摀 搥 搧 搋 揧 搛 搮 搡 搎 敯 斒 旓
++ 暆 暌 暕 暐 暋 暊 暙 暔 晸 朠 楦 楟 椸 楎 楢 楱
++ 椿 楅 楪 椹 楂 楗 楙 楺 楈 楉 椵 楬 椳 椽 楥 棰
++ 楸 椴 楩 楀 楯 楄 楶 楘 楁 楴 楌 椻 楋 椷 楜 楏
++ 楑 椲 楒 椯 楻 椼 歆 歅 歃 歂 歈 歁 殛 嗀 毻 毼
++ 毹 毷 毸 溛 滖 滈 溏 滀 溟 溓 溔 溠 溱 溹 滆 滒
++ 溽 滁 溞 滉 溷 溰 滍 溦 滏 溲 溾 滃 滜 滘 溙 溒
++ 溎 溍 溤 溡 溿 溳 滐 滊 溗 溮 溣 煇 煔 煒 煣 煠
++ 煁 煝 煢 煲 煸 煪 煡 煂 煘 煃 煋 煰 煟 煐 煓 煄
++ 煍 煚 牏 犍 犌 犑 犐 犎 猼 獂 猻 猺 獀 獊 獉 瑄
++ 瑊 瑋 瑒 瑑 瑗 瑀 瑏 瑐 瑎 瑂 瑆 瑍 瑔 瓡 瓿 瓾
++ 瓽 甝 畹 畷 榃 痯 瘏 瘃 痷 痾 痼 痹 痸 瘐 痻 痶
++ 痭 痵 痽 皙 皵 盝 睕 睟 睠 睒 睖 睚 睩 睧 睔 睙
++ 睭 矠 碇 碚 碔 碏 碄 碕 碅 碆 碡 碃 硹 碙 碀 碖
++ 硻 祼 禂 祽 祹 稑 稘 稙 稒 稗 稕 稢 稓 稛 稐 窣
++ 窢 窞 竫 筦 筤 筭 筴 筩 筲 筥 筳 筱 筰 筡 筸 筶
++ 筣 粲 粴 粯 綈 綆 綀 綍 絿 綅 絺 綎 絻 綃 絼 綌
++ 綔 綄 絽 綒 罭 罫 罧 罨 罬 羦 羥 羧 翛 翜 耡 腤
++ 腠 腷 腜 腩 腛 腢 腲 朡 腞 腶 腧 腯 腄 腡 舝 艉
++ 艄 艀 艂 艅 蓱 萿 葖 葶 葹 蒏 蒍 葥 葑 葀 蒆 葧
++ 萰 葍 葽 葚 葙 葴 葳 葝 蔇 葞 萷 萺 萴 葺 葃 葸
++ 萲 葅 萩 菙 葋 萯 葂 萭 葟 葰 萹 葎 葌 葒 葯 蓅
++ 蒎 萻 葇 萶 萳 葨 葾 葄 萫 葠 葔 葮 葐 蜋 蜄 蛷
++ 蜌 蛺 蛖 蛵 蝍 蛸 蜎 蜉 蜁 蛶 蜍 蜅 裖 裋 裍 裎
++ 裞 裛 裚 裌 裐 覅 覛 觟 觥 觤 觡 觠 觢 觜 触 詶
++ 誆 詿 詡 訿 詷 誂 誄 詵 誃 誁 詴 詺 谼 豋 豊 豥
++ 豤 豦 貆 貄 貅 賌 赨 赩 趑 趌 趎 趏 趍 趓 趔 趐
++ 趒 跰 跠 跬 跱 跮 跐 跩 跣 跢 跧 跲 跫 跴 輆 軿
++ 輁 輀 輅 輇 輈 輂 輋 遒 逿 遄 遉 逽 鄐 鄍 鄏 鄑
++ 鄖 鄔 鄋 鄎 酮 酯 鉈 鉒 鈰 鈺 鉦 鈳 鉥 鉞 銃 鈮
++ 鉊 鉆 鉭 鉬 鉏 鉠 鉧 鉯 鈶 鉡 鉰 鈱 鉔 鉣 鉐 鉲
++ 鉎 鉓 鉌 鉖 鈲 閟 閜 閞 閛 隒 隓 隑 隗 雎 雺 雽
++ 雸 雵 靳 靷 靸 靲 頏 頍 頎 颬 飶 飹 馯 馲 馰 馵
++ 骭 骫 魛 鳪 鳭 鳧 麀 黽 僦 僔 僗 僨 僳 僛 僪 僝
++ 僤 僓 僬 僰 僯 僣 僠 凘 劀 劁 勩 勫 匰 厬 嘧 嘕
++ 嘌 嘒 嗼 嘏 嘜 嘁 嘓 嘂 嗺 嘝 嘄 嗿 嗹 墉 塼 墐
++ 墘 墆 墁 塿 塴 墋 塺 墇 墑 墎 塶 墂 墈 塻 墔 墏
++ 壾 奫 嫜 嫮 嫥 嫕 嫪 嫚 嫭 嫫 嫳 嫢 嫠 嫛 嫬 嫞
++ 嫝 嫙 嫨 嫟 孷 寠 寣 屣 嶂 嶀 嵽 嶆 嵺 嶁 嵷 嶊
++ 嶉 嶈 嵾 嵼 嶍 嵹 嵿 幘 幙 幓 廘 廑 廗 廎 廜 廕
++ 廙 廒 廔 彄 彃 彯 徶 愬 愨 慁 慞 慱 慳 慒 慓 慲
++ 慬 憀 慴 慔 慺 慛 慥 愻 慪 慡 慖 戩 戧 戫 搫 摍
++ 摛 摝 摴 摶 摲 摳 摽 摵 摦 撦 摎 撂 摞 摜 摋 摓
++ 摠 摐 摿 搿 摬 摫 摙 摥 摷 敳 斠 暡 暠 暟 朅 朄
++ 朢 榱 榶 槉 榠 槎 榖 榰 榬 榼 榑 榙 榎 榧 榍 榩
++ 榾 榯 榿 槄 榽 榤 槔 榹 槊 榚 槏 榳 榓 榪 榡 榞
++ 槙 榗 榐 槂 榵 榥 槆 歊 歍 歋 殞 殟 殠 毃 毄 毾
++ 滎 滵 滱 漃 漥 滸 漷 滻 漮 漉 潎 漙 漚 漧 漘 漻
++ 漒 滭 漊 漶 潳 滹 滮 漭 潀 漰 漼 漵 滫 漇 漎 潃
++ 漅 滽 滶 漹 漜 滼 漺 漟 漍 漞 漈 漡 熇 熐 熉 熀
++ 熅 熂 熏 煻 熆 熁 熗 牄 牓 犗 犕 犓 獃 獍 獑 獌
++ 瑢 瑳 瑱 瑵 瑲 瑧 瑮 甀 甂 甃 畽 疐 瘖 瘈 瘌 瘕
++ 瘑 瘊 瘔 皸 瞁 睼 瞅 瞂 睮 瞀 睯 睾 瞃 碲 碪 碴
++ 碭 碨 硾 碫 碞 碥 碠 碬 碢 碤 禘 禊 禋 禖 禕 禔
++ 禓 禗 禈 禒 禐 稫 穊 稰 稯 稨 稦 窨 窫 窬 竮 箈
++ 箜 箊 箑 箐 箖 箍 箌 箛 箎 箅 箘 劄 箙 箤 箂 粻
++ 粿 粼 粺 綧 綷 緂 綣 綪 緁 緀 緅 綝 緎 緄 緆 緋
++ 緌 綯 綹 綖 綼 綟 綦 綮 綩 綡 緉 罳 翢 翣 翥 翞
++ 耤 聝 聜 膉 膆 膃 膇 膍 膌 膋 舕 蒗 蒤 蒡 蒟 蒺
++ 蓎 蓂 蒬 蒮 蒫 蒹 蒴 蓁 蓍 蒪 蒚 蒱 蓐 蒝 蒧 蒻
++ 蒢 蒔 蓇 蓌 蒛 蒩 蒯 蒨 蓖 蒘 蒶 蓏 蒠 蓗 蓔 蓒
++ 蓛 蒰 蒑 虡 蜳 蜣 蜨 蝫 蝀 蜮 蜞 蜡 蜙 蜛 蝃 蜬
++ 蝁 蜾 蝆 蜠 蜲 蜪 蜭 蜼 蜒 蜺 蜱 蜵 蝂 蜦 蜧 蜸
++ 蜤 蜚 蜰 蜑 裷 裧 裱 裲 裺 裾 裮 裼 裶 裻 裰 裬
++ 裫 覝 覡 覟 覞 觩 觫 觨 誫 誙 誋 誒 誏 誖 谽 豨
++ 豩 賕 賏 賗 趖 踉 踂 跿 踍 跽 踊 踃 踇 踆 踅 跾
++ 踀 踄 輐 輑 輎 輍 鄣 鄜 鄠 鄢 鄟 鄝 鄚 鄤 鄡 鄛
++ 酺 酲 酹 酳 銥 銤 鉶 銛 鉺 銠 銔 銪 銍 銦 銚 銫
++ 鉹 銗 鉿 銣 鋮 銎 銂 銕 銢 鉽 銈 銡 銊 銆 銌 銙
++ 銧 鉾 銇 銩 銝 銋 鈭 隞 隡 雿 靘 靽 靺 靾 鞃 鞀
++ 鞂 靻 鞄 鞁 靿 韎 韍 頖 颭 颮 餂 餀 餇 馝 馜 駃
++ 馹 馻 馺 駂 馽 駇 骱 髣 髧 鬾 鬿 魠 魡 魟 鳱 鳲
++ 鳵 麧 僿 儃 儰 僸 儆 儇 僶 僾 儋 儌 僽 儊 劋 劌
++ 勱 勯 噈 噂 噌 嘵 噁 噊 噉 噆 噘 噚 噀 嘳 嘽 嘬
++ 嘾 嘸 嘪 嘺 圚 墫 墝 墱 墠 墣 墯 墬 墥 墡 壿 嫿
++ 嫴 嫽 嫷 嫶 嬃 嫸 嬂 嫹 嬁 嬇 嬅 嬏 屧 嶙 嶗 嶟
++ 嶒 嶢 嶓 嶕 嶠 嶜 嶡 嶚 嶞 幩 幝 幠 幜 緳 廛 廞
++ 廡 彉 徲 憋 憃 慹 憱 憰 憢 憉 憛 憓 憯 憭 憟 憒
++ 憪 憡 憍 慦 憳 戭 摮 摰 撖 撠 撅 撗 撜 撏 撋 撊
++ 撌 撣 撟 摨 撱 撘 敶 敺 敹 敻 斲 斳 暵 暰 暩 暲
++ 暷 暪 暯 樀 樆 樗 槥 槸 樕 槱 槤 樠 槿 槬 槢 樛
++ 樝 槾 樧 槲 槮 樔 槷 槧 橀 樈 槦 槻 樍 槼 槫 樉
++ 樄 樘 樥 樏 槶 樦 樇 槴 樖 歑 殥 殣 殢 殦 氁 氀
++ 毿 氂 潁 漦 潾 澇 濆 澒 澍 澉 澌 潢 潏 澅 潚 澖
++ 潶 潬 澂 潕 潲 潒 潐 潗 澔 澓 潝 漀 潡 潫 潽 潧
++ 澐 潓 澋 潩 潿 澕 潣 潷 潪 潻 熲 熯 熛 熰 熠 熚
++ 熩 熵 熝 熥 熞 熤 熡 熪 熜 熧 熳 犘 犚 獘 獒 獞
++ 獟 獠 獝 獛 獡 獚 獙 獢 璇 璉 璊 璆 璁 瑽 璅 璈
++ 瑼 瑹 甈 甇 畾 瘥 瘞 瘙 瘝 瘜 瘣 瘚 瘨 瘛 皜 皝
++ 皞 皛 瞍 瞏 瞉 瞈 磍 碻 磏 磌 磑 磎 磔 磈 磃 磄
++ 磉 禚 禡 禠 禜 禢 禛 歶 稹 窲 窴 窳 箷 篋 箾 箬
++ 篎 箯 箹 篊 箵 糅 糈 糌 糋 緷 緛 緪 緧 緗 緡 縃
++ 緺 緦 緶 緱 緰 緮 緟 罶 羬 羰 羭 翭 翫 翪 翬 翦
++ 翨 聤 聧 膣 膟 膞 膕 膢 膙 膗 舖 艏 艓 艒 艐 艎
++ 艑 蔤 蔻 蔏 蔀 蔩 蔎 蔉 蔍 蔟 蔊 蔧 蔜 蓻 蔫 蓺
++ 蔈 蔌 蓴 蔪 蓲 蔕 蓷 蓫 蓳 蓼 蔒 蓪 蓩 蔖 蓾 蔨
++ 蔝 蔮 蔂 蓽 蔞 蓶 蔱 蔦 蓧 蓨 蓰 蓯 蓹 蔘 蔠 蔰
++ 蔋 蔙 蔯 虢 蝖 蝣 蝤 蝷 蟡 蝳 蝘 蝔 蝛 蝒 蝡 蝚
++ 蝑 蝞 蝭 蝪 蝐 蝎 蝟 蝝 蝯 蝬 蝺 蝮 蝜 蝥 蝏 蝻
++ 蝵 蝢 蝧 蝩 衚 褅 褌 褔 褋 褗 褘 褙 褆 褖 褑 褎
++ 褉 覢 覤 覣 觭 觰 觬 諏 諆 誸 諓 諑 諔 諕 誻 諗
++ 誾 諀 諅 諘 諃 誺 誽 諙 谾 豍 貏 賥 賟 賙 賨 賚
++ 賝 賧 趠 趜 趡 趛 踠 踣 踥 踤 踮 踕 踛 踖 踑 踙
++ 踦 踧 踔 踒 踘 踓 踜 踗 踚 輬 輤 輘 輚 輠 輣 輖
++ 輗 遳 遰 遯 遧 遫 鄯 鄫 鄩 鄪 鄲 鄦 鄮 醅 醆 醊
++ 醁 醂 醄 醀 鋐 鋃 鋄 鋀 鋙 銶 鋏 鋱 鋟 鋘 鋩 鋗
++ 鋝 鋌 鋯 鋂 鋨 鋊 鋈 鋎 鋦 鋍 鋕 鋉 鋠 鋞 鋧 鋑
++ 鋓 銵 鋡 鋆 銴 镼 閬 閫 閮 閰 隤 隢 雓 霅 霈 霂
++ 靚 鞊 鞎 鞈 韐 韏 頞 頝 頦 頩 頨 頠 頛 頧 颲 餈
++ 飺 餑 餔 餖 餗 餕 駜 駍 駏 駓 駔 駎 駉 駖 駘 駋
++ 駗 駌 骳 髬 髫 髳 髲 髱 魆 魃 魧 魴 魱 魦 魶 魵
++ 魰 魨 魤 魬 鳼 鳺 鳽 鳿 鳷 鴇 鴀 鳹 鳻 鴈 鴅 鴄
++ 麃 黓 鼏 鼐 儜 儓 儗 儚 儑 凞 匴 叡 噰 噠 噮 噳
++ 噦 噣 噭 噲 噞 噷 圜 圛 壈 墽 壉 墿 墺 壂 墼 壆
++ 嬗 嬙 嬛 嬡 嬔 嬓 嬐 嬖 嬨 嬚 嬠 嬞 寯 嶬 嶱 嶩
++ 嶧 嶵 嶰 嶮 嶪 嶨 嶲 嶭 嶯 嶴 幧 幨 幦 幯 廩 廧
++ 廦 廨 廥 彋 徼 憝 憨 憖 懅 憴 懆 懁 懌 憺 憿 憸
++ 憌 擗 擖 擐 擏 擉 撽 撉 擃 擛 擳 擙 攳 敿 敼 斢
++ 曈 暾 曀 曊 曋 曏 暽 暻 暺 曌 朣 樴 橦 橉 橧 樲
++ 橨 樾 橝 橭 橶 橛 橑 樨 橚 樻 樿 橁 橪 橤 橐 橏
++ 橔 橯 橩 橠 樼 橞 橖 橕 橍 橎 橆 歕 歔 歖 殧 殪
++ 殫 毈 毇 氄 氃 氆 澭 濋 澣 濇 澼 濎 濈 潞 濄 澽
++ 澞 濊 澨 瀄 澥 澮 澺 澬 澪 濏 澿 澸 澢 濉 澫 濍
++ 澯 澲 澰 燅 燂 熿 熸 燖 燀 燁 燋 燔 燊 燇 燏 熽
++ 燘 熼 燆 燚 燛 犝 犞 獩 獦 獧 獬 獥 獫 獪 瑿 璚
++ 璠 璔 璒 璕 璡 甋 疀 瘯 瘭 瘱 瘽 瘳 瘼 瘵 瘲 瘰
++ 皻 盦 瞚 瞝 瞡 瞜 瞛 瞢 瞣 瞕 瞙 瞗 磝 磩 磥 磪
++ 磞 磣 磛 磡 磢 磭 磟 磠 禤 穄 穈 穇 窶 窸 窵 窱
++ 窷 篞 篣 篧 篝 篕 篥 篚 篨 篹 篔 篪 篢 篜 篫 篘
++ 篟 糒 糔 糗 糐 糑 縒 縡 縗 縌 縟 縠 縓 縎 縜 縕
++ 縚 縢 縋 縏 縖 縍 縔 縥 縤 罃 罻 罼 罺 羱 翯 耪
++ 耩 聬 膱 膦 膮 膹 膵 膫 膰 膬 膴 膲 膷 膧 臲 艕
++ 艖 艗 蕖 蕅 蕫 蕍 蕓 蕡 蕘 蕀 蕆 蕤 蕁 蕢 蕄 蕑
++ 蕇 蕣 蔾 蕛 蕱 蕎 蕮 蕵 蕕 蕧 蕠 薌 蕦 蕝 蕔 蕥
++ 蕬 虣 虥 虤 螛 螏 螗 螓 螒 螈 螁 螖 螘 蝹 螇 螣
++ 螅 螐 螑 螝 螄 螔 螜 螚 螉 褞 褦 褰 褭 褮 褧 褱
++ 褢 褩 褣 褯 褬 褟 觱 諠 諢 諲 諴 諵 諝 謔 諤 諟
++ 諰 諈 諞 諡 諨 諿 諯 諻 貑 貒 貐 賵 賮 賱 賰 賳
++ 赬 赮 趥 趧 踳 踾 踸 蹀 蹅 踶 踼 踽 蹁 踰 踿 躽
++ 輶 輮 輵 輲 輹 輷 輴 遶 遹 遻 邆 郺 鄳 鄵 鄶 醓
++ 醐 醑 醍 醏 錧 錞 錈 錟 錆 錏 鍺 錸 錼 錛 錣 錒
++ 錁 鍆 錭 錎 錍 鋋 錝 鋺 錥 錓 鋹 鋷 錴 錂 錤 鋿
++ 錩 錹 錵 錪 錔 錌 錋 鋾 錉 錀 鋻 錖 閼 闍 閾 閹
++ 閺 閶 閿 閵 閽 隩 雔 霋 霒 霐 鞙 鞗 鞔 韰 韸 頵
++ 頯 頲 餤 餟 餧 餩 馞 駮 駬 駥 駤 駰 駣 駪 駩 駧
++ 骹 骿 骴 骻 髶 髺 髹 髷 鬳 鮀 鮅 鮇 魼 魾 魻 鮂
++ 鮓 鮒 鮐 魺 鮕 魽 鮈 鴥 鴗 鴠 鴞 鴔 鴩 鴝 鴘 鴢
++ 鴐 鴙 鴟 麈 麆 麇 麮 麭 黕 黖 黺 鼒 鼽 儦 儥 儢
++ 儤 儠 儩 勴 嚓 嚌 嚍 嚆 嚄 嚃 噾 嚂 噿 嚁 壖 壔
++ 壏 壒 嬭 嬥 嬲 嬣 嬬 嬧 嬦 嬯 嬮 孻 寱 寲 嶷 幬
++ 幪 徾 徻 懃 憵 憼 懧 懠 懥 懤 懨 懞 擯 擩 擣 擫
++ 擤 擨 斁 斀 斶 旚 曒 檍 檖 檁 檥 檉 檟 檛 檡 檞
++ 檇 檓 檎 檕 檃 檨 檤 檑 橿 檦 檚 檅 檌 檒 歛 殭
++ 氉 濌 澩 濴 濔 濣 濜 濭 濧 濦 濞 濲 濝 濢 濨 燡
++ 燱 燨 燲 燤 燰 燢 獳 獮 獯 璗 璲 璫 璐 璪 璭 璱
++ 璥 璯 甐 甑 甒 甏 疄 癃 癈 癉 癇 皤 盩 瞵 瞫 瞲
++ 瞷 瞶 瞴 瞱 瞨 矰 磳 磽 礂 磻 磼 磲 礅 磹 磾 礄
++ 禫 禨 穜 穛 穖 穘 穔 穚 窾 竀 竁 簅 簏 篲 簀 篿
++ 篻 簎 篴 簋 篳 簂 簉 簃 簁 篸 篽 簆 篰 篱 簐 簊
++ 糨 縭 縼 繂 縳 顈 縸 縪 繉 繀 繇 縩 繌 縰 縻 縶
++ 繄 縺 罅 罿 罾 罽 翴 翲 耬 膻 臄 臌 臊 臅 臇 膼
++ 臩 艛 艚 艜 薃 薀 薏 薧 薕 薠 薋 薣 蕻 薤 薚 薞
++ 蕷 蕼 薉 薡 蕺 蕸 蕗 薎 薖 薆 薍 薙 薝 薁 薢 薂
++ 薈 薅 蕹 蕶 薘 薐 薟 虨 螾 螪 螭 蟅 螰 螬 螹 螵
++ 螼 螮 蟉 蟃 蟂 蟌 螷 螯 蟄 蟊 螴 螶 螿 螸 螽 蟞
++ 螲 褵 褳 褼 褾 襁 襒 褷 襂 覭 覯 覮 觲 觳 謞 謘
++ 謖 謑 謅 謋 謢 謏 謒 謕 謇 謍 謈 謆 謜 謓 謚 豏
++ 豰 豲 豱 豯 貕 貔 賹 赯 蹎 蹍 蹓 蹐 蹌 蹇 轃 轀
++ 邅 遾 鄸 醚 醢 醛 醙 醟 醡 醝 醠 鎡 鎃 鎯 鍤 鍖
++ 鍇 鍼 鍘 鍜 鍶 鍉 鍐 鍑 鍠 鍭 鎏 鍌 鍪 鍹 鍗 鍕
++ 鍒 鍏 鍱 鍷 鍻 鍡 鍞 鍣 鍧 鎀 鍎 鍙 闇 闀 闉 闃
++ 闅 閷 隮 隰 隬 霠 霟 霘 霝 霙 鞚 鞡 鞜 鞞 鞝 韕
++ 韔 韱 顁 顄 顊 顉 顅 顃 餥 餫 餬 餪 餳 餲 餯 餭
++ 餱 餰 馘 馣 馡 騂 駺 駴 駷 駹 駸 駶 駻 駽 駾 駼
++ 騃 骾 髾 髽 鬁 髼 魈 鮚 鮨 鮞 鮛 鮦 鮡 鮥 鮤 鮆
++ 鮢 鮠 鮯 鴳 鵁 鵧 鴶 鴮 鴯 鴱 鴸 鴰 鵅 鵂 鵃 鴾
++ 鴷 鵀 鴽 翵 鴭 麊 麉 麍 麰 黈 黚 黻 黿 鼤 鼣 鼢
++ 齔 龠 儱 儭 儮 嚘 嚜 嚗 嚚 嚝 嚙 奰 嬼 屩 屪 巀
++ 幭 幮 懘 懟 懭 懮 懱 懪 懰 懫 懖 懩 擿 攄 擽 擸
++ 攁 攃 擼 斔 旛 曚 曛 曘 櫅 檹 檽 櫡 櫆 檺 檶 檷
++ 櫇 檴 檭 歞 毉 氋 瀇 瀌 瀍 瀁 瀅 瀔 瀎 濿 瀀 濻
++ 瀦 濼 濷 瀊 爁 燿 燹 爃 燽 獶 璸 瓀 璵 瓁 璾 璶
++ 璻 瓂 甔 甓 癜 癤 癙 癐 癓 癗 癚 皦 皽 盬 矂 瞺
++ 磿 礌 礓 礔 礉 礐 礒 礑 禭 禬 穟 簜 簩 簙 簠 簟
++ 簭 簝 簦 簨 簢 簥 簰 繜 繐 繖 繣 繘 繢 繟 繑 繠
++ 繗 繓 羵 羳 翷 翸 聵 臑 臒 臐 艟 艞 薴 藆 藀 藃
++ 藂 薳 薵 薽 藇 藄 薿 藋 藎 藈 藅 薱 薶 藒 蘤 薸
++ 薷 薾 虩 蟧 蟦 蟢 蟛 蟫 蟪 蟥 蟟 蟳 蟤 蟔 蟜 蟓
++ 蟭 蟘 蟣 螤 蟗 蟙 蠁 蟴 蟨 蟝 襓 襋 襏 襌 襆 襐
++ 襑 襉 謪 謧 謣 謳 謰 謵 譇 謯 謼 謾 謱 謥 謷 謦
++ 謶 謮 謤 謻 謽 謺 豂 豵 貙 貘 貗 賾 贄 贂 贀 蹜
++ 蹢 蹠 蹗 蹖 蹞 蹥 蹧 蹛 蹚 蹡 蹝 蹩 蹔 轆 轇 轈
++ 轋 鄨 鄺 鄻 鄾 醨 醥 醧 醯 醪 鎵 鎌 鎒 鎷 鎛 鎝
++ 鎉 鎧 鎎 鎪 鎞 鎦 鎕 鎈 鎙 鎟 鎍 鎱 鎑 鎲 鎤 鎨
++ 鎴 鎣 鎥 闒 闓 闑 隳 雗 雚 巂 雟 雘 雝 霣 霢 霥
++ 鞬 鞮 鞨 鞫 鞤 鞪 鞢 鞥 韗 韙 韖 韘 韺 顐 顑 顒
++ 颸 饁 餼 餺 騏 騋 騉 騍 騄 騑 騊 騅 騇 騆 髀 髜
++ 鬈 鬄 鬅 鬩 鬵 魊 魌 魋 鯇 鯆 鯃 鮿 鯁 鮵 鮸 鯓
++ 鮶 鯄 鮹 鮽 鵜 鵓 鵏 鵊 鵛 鵋 鵙 鵖 鵌 鵗 鵒 鵔
++ 鵟 鵘 鵚 麎 麌 黟 鼁 鼀 鼖 鼥 鼫 鼪 鼩 鼨 齌 齕
++ 儴 儵 劖 勷 厴 嚫 嚭 嚦 嚧 嚪 嚬 壚 壝 壛 夒 嬽
++ 嬾 嬿 巃 幰 徿 懻 攇 攐 攍 攉 攌 攎 斄 旞 旝 曞
++ 櫧 櫠 櫌 櫑 櫙 櫋 櫟 櫜 櫐 櫫 櫏 櫍 櫞 歠 殰 氌
++ 瀙 瀧 瀠 瀖 瀫 瀡 瀢 瀣 瀩 瀗 瀤 瀜 瀪 爌 爊 爇
++ 爂 爅 犥 犦 犤 犣 犡 瓋 瓅 璷 瓃 甖 癠 矉 矊 矄
++ 矱 礝 礛 礡 礜 礗 礞 禰 穧 穨 簳 簼 簹 簬 簻 糬
++ 糪 繶 繵 繸 繰 繷 繯 繺 繲 繴 繨 罋 罊 羃 羆 羷
++ 翽 翾 聸 臗 臕 艤 艡 艣 藫 藱 藭 藙 藡 藨 藚 藗
++ 藬 藲 藸 藘 藟 藣 藜 藑 藰 藦 藯 藞 藢 蠀 蟺 蠃
++ 蟶 蟷 蠉 蠌 蠋 蠆 蟼 蠈 蟿 蠊 蠂 襢 襚 襛 襗 襡
++ 襜 襘 襝 襙 覈 覷 覶 觶 譐 譈 譊 譀 譓 譖 譔 譋
++ 譕 譑 譂 譒 譗 豃 豷 豶 貚 贆 贇 贉 趬 趪 趭 趫
++ 蹭 蹸 蹳 蹪 蹯 蹻 軂 轒 轑 轏 轐 轓 辴 酀 鄿 醰
++ 醭 鏞 鏇 鏏 鏂 鏚 鏐 鏹 鏬 鏌 鏙 鎩 鏦 鏊 鏔 鏮
++ 鏣 鏕 鏄 鏎 鏀 鏒 鏧 镽 闚 闛 雡 霩 霫 霬 霨 霦
++ 鞳 鞷 鞶 韝 韞 韟 顜 顙 顝 顗 颿 颽 颻 颾 饈 饇
++ 饃 馦 馧 騚 騕 騥 騝 騤 騛 騢 騠 騧 騣 騞 騜 騔
++ 髂 鬋 鬊 鬎 鬌 鬷 鯪 鯫 鯠 鯞 鯤 鯦 鯢 鯰 鯔 鯗
++ 鯬 鯜 鯙 鯥 鯕 鯡 鯚 鵷 鶁 鶊 鶄 鶈 鵱 鶀 鵸 鶆
++ 鶋 鶌 鵽 鵫 鵴 鵵 鵰 鵩 鶅 鵳 鵻 鶂 鵯 鵹 鵿 鶇
++ 鵨 麔 麑 黀 黼 鼭 齀 齁 齍 齖 齗 齘 匷 嚲 嚵 嚳
++ 壣 孅 巆 巇 廮 廯 忀 忁 懹 攗 攖 攕 攓 旟 曨 曣
++ 曤 櫳 櫰 櫪 櫨 櫹 櫱 櫮 櫯 瀼 瀵 瀯 瀷 瀴 瀱 灂
++ 瀸 瀿 瀺 瀹 灀 瀻 瀳 灁 爓 爔 犨 獽 獼 璺 皫 皪
++ 皾 盭 矌 矎 矏 矍 矲 礥 礣 礧 礨 礤 礩 禲 穮 穬
++ 穭 竷 籉 籈 籊 籇 籅 糮 繻 繾 纁 纀 羺 翿 聹 臛
++ 臙 舋 艨 艩 蘢 藿 蘁 藾 蘛 蘀 藶 蘄 蘉 蘅 蘌 藽
++ 蠙 蠐 蠑 蠗 蠓 蠖 襣 襦 覹 觷 譠 譪 譝 譨 譣 譥
++ 譧 譭 趮 躆 躈 躄 轙 轖 轗 轕 轘 轚 邍 酃 酁 醷
++ 醵 醲 醳 鐋 鐓 鏻 鐠 鐏 鐔 鏾 鐕 鐐 鐨 鐙 鐍 鏵
++ 鐀 鏷 鐇 鐎 鐖 鐒 鏺 鐉 鏸 鐊 鏿 鏼 鐌 鏶 鐑 鐆
++ 闞 闠 闟 霮 霯 鞹 鞻 韽 韾 顠 顢 顣 顟 飁 飂 饐
++ 饎 饙 饌 饋 饓 騲 騴 騱 騬 騪 騶 騩 騮 騸 騭 髇
++ 髊 髆 鬐 鬒 鬑 鰋 鰈 鯷 鰅 鰒 鯸 鱀 鰇 鰎 鰆 鰗
++ 鰔 鰉 鶟 鶙 鶤 鶝 鶒 鶘 鶐 鶛 鶠 鶔 鶜 鶪 鶗 鶡
++ 鶚 鶢 鶨 鶞 鶣 鶿 鶩 鶖 鶦 鶧 麙 麛 麚 黥 黤 黧
++ 黦 鼰 鼮 齛 齠 齞 齝 齙 龑 儺 儹 劘 劗 囃 嚽 嚾
++ 孈 孇 巋 巏 廱 懽 攛 欂 櫼 欃 櫸 欀 灃 灄 灊 灈
++ 灉 灅 灆 爝 爚 爙 獾 甗 癪 矐 礭 礱 礯 籔 籓 糲
++ 纊 纇 纈 纋 纆 纍 罍 羻 耰 臝 蘘 蘪 蘦 蘟 蘣 蘜
++ 蘙 蘧 蘮 蘡 蘠 蘩 蘞 蘥 蠩 蠝 蠛 蠠 蠤 蠜 蠫 衊
++ 襭 襩 襮 襫 觺 譹 譸 譅 譺 譻 贐 贔 趯 躎 躌 轞
++ 轛 轝 酆 酄 酅 醹 鐿 鐻 鐶 鐩 鐽 鐼 鐰 鐹 鐪 鐷
++ 鐬 鑀 鐱 闥 闤 闣 霵 霺 鞿 韡 顤 飉 飆 飀 饘 饖
++ 騹 騽 驆 驄 驂 驁 騺 騿 髍 鬕 鬗 鬘 鬖 鬺 魒 鰫
++ 鰝 鰜 鰬 鰣 鰨 鰩 鰤 鰡 鶷 鶶 鶼 鷁 鷇 鷊 鷏 鶾
++ 鷅 鷃 鶻 鶵 鷎 鶹 鶺 鶬 鷈 鶱 鶭 鷌 鶳 鷍 鶲 鹺
++ 麜 黫 黮 黭 鼛 鼘 鼚 鼱 齎 齥 齤 龒 亹 囆 囅 囋
++ 奱 孋 孌 巕 巑 廲 攡 攠 攦 攢 欋 欈 欉 氍 灕 灖
++ 灗 灒 爞 爟 犩 獿 瓘 瓕 瓙 瓗 癭 皭 礵 禴 穰 穱
++ 籗 籜 籙 籛 籚 糴 糱 纑 罏 羇 臞 艫 蘴 蘵 蘳 蘬
++ 蘲 蘶 蠬 蠨 蠦 蠪 蠥 襱 覿 覾 觻 譾 讄 讂 讆 讅
++ 譿 贕 躕 躔 躚 躒 躐 躖 躗 轠 轢 酇 鑌 鑐 鑊 鑋
++ 鑏 鑇 鑅 鑈 鑉 鑆 霿 韣 顪 顩 飋 饔 饛 驎 驓 驔
++ 驌 驏 驈 驊 驉 驒 驐 髐 鬙 鬫 鬻 魖 魕 鱆 鱈 鰿
++ 鱄 鰹 鰳 鱁 鰼 鰷 鰴 鰲 鰽 鰶 鷛 鷒 鷞 鷚 鷋 鷐
++ 鷜 鷑 鷟 鷩 鷙 鷘 鷖 鷵 鷕 鷝 麶 黰 鼵 鼳 鼲 齂
++ 齫 龕 龢 儽 劙 壨 壧 奲 孍 巘 蠯 彏 戁 戃 戄 攩
++ 攥 斖 曫 欑 欒 欏 毊 灛 灚 爢 玂 玁 玃 癰 矔 籧
++ 籦 纕 艬 蘺 虀 蘹 蘼 蘱 蘻 蘾 蠰 蠲 蠮 蠳 襶 襴
++ 襳 觾 讌 讎 讋 讈 豅 贙 躘 轤 轣 醼 鑢 鑕 鑝 鑗
++ 鑞 韄 韅 頀 驖 驙 鬞 鬟 鬠 鱒 鱘 鱐 鱊 鱍 鱋 鱕
++ 鱙 鱌 鱎 鷻 鷷 鷯 鷣 鷫 鷸 鷤 鷶 鷡 鷮 鷦 鷲 鷰
++ 鷢 鷬 鷴 鷳 鷨 鷭 黂 黐 黲 黳 鼆 鼜 鼸 鼷 鼶 齃
++ 齏 齱 齰 齮 齯 囓 囍 孎 屭 攭 曭 曮 欓 灟 灡 灝
++ 灠 爣 瓛 瓥 矕 礸 禷 禶 籪 纗 羉 艭 虃 蠸 蠷 蠵
++ 衋 讔 讕 躞 躟 躠 躝 醾 醽 釂 鑫 鑨 鑩 雥 靆 靃
++ 靇 韇 韥 驞 髕 魙 鱣 鱧 鱦 鱢 鱞 鱠 鸂 鷾 鸇 鸃
++ 鸆 鸅 鸀 鸁 鸉 鷿 鷽 鸄 麠 鼞 齆 齴 齵 齶 囔 攮
++ 斸 欘 欙 欗 欚 灢 爦 犪 矘 矙 礹 籩 籫 糶 纚 纘
++ 纛 纙 臠 臡 虆 虇 虈 襹 襺 襼 襻 觿 讘 讙 躥 躤
++ 躣 鑮 鑭 鑯 鑱 鑳 靉 顲 饟 鱨 鱮 鱭 鸋 鸍 鸐 鸏
++ 鸒 鸑 麡 黵 鼉 齇 齸 齻 齺 齹 圞 灦 籯 蠼 趲 躦
++ 釃 鑴 鑸 鑶 鑵 驠 鱴 鱳 鱱 鱵 鸔 鸓 黶 鼊 龤 灨
++ 灥 糷 虪 蠾 蠽 蠿 讞 貜 躩 軉 靋 顳 顴 飌 饡 馫
++ 驤 驦 驧 鬤 鸕 鸗 齈 戇 欞 爧 虌 躨 钂 钀 钁 驩
++ 驨 鬮 鸙 爩 虋 讟 钃 鱹 麷 癵 驫 鱺 鸝 灩 灪 麤
++ 齾 齉 龘 碁 銹 裏 墻 恒 粧 嫺 ╔ ╦ ╗ ╠ ╬ ╣
++ ╚ ╩ ╝ ╒ ╤ ╕ ╞ ╪ ╡ ╘ ╧ ╛ ╓ ╥ ╖ ╟
++ ╫ ╢ ╙ ╨ ╜ ║ ═ ╭ ╮ ╰ ╯ ■ 𠕇 鋛 𠗟 𣿅
++ 蕌 䊵 珯 况 㙉 𤥂 𨧤 鍄 𡧛 苮 𣳈 砼 杄 拟 𤤳 𨦪
++ 𠊠 𦮳 𡌅 侫 𢓭 倈 𦴩 𧪄 𣘀 𤪱 𢔓 𠍾 徤 𠎀 𠍇 滛
++ 𠐟 儁 㑺 儎 顬 㝃 萖 𤦤 𠒇 兠 𣎴 兪 𠯿 𢃼 𠋥 𢔰
++ 𠖎 𣈳 𡦃 宂 蝽 𠖳 𣲙 冲 冸 鴴 凉 减 凑 㳜 凓 𤪦
++ 决 凢 卂 凭 菍 椾 𣜭 彻 刋 刦 刼 劵 剗 劔 効 勅
++ 簕 蕂 勠 蘍 𦬓 𨫞 啉 滙 𣾀 𠥔 𣿬 匳 𠯢 泋 𡜦 栛
++ 珕 恊 㺪 㣌 𡛨 燝 䒢 卭 却 𨚫 卾 𡖖 𡘓 矦 厓 𨪛
++ 厠 厫 厮 玧 𥝲 㽙 玜 叁 叅 汉 义 埾 叙 㪫 𠮏 叠
++ 𣿫 𢶣 叶 𠱷 吓 灹 唫 晗 浛 呭 𦭓 𠵴 啝 咏 咤 䞦
++ 𡜍 𠻝 㶴 𠵍 𨦼 𢚘 啇 䳭 启 琗 喆 喩 𡣗 𤀺 䕒 𤐵
++ 暳 𡂴 嘷 曍 𣊊 暤 暭 噍 噏 磱 囱 鞇 叾 圀 囯 园
++ 𨭦 㘣 𡉏 坆 𤆥 汮 炋 坂 㚱 𦱾 埦 𡐖 堃 𡑔 𤍣 堦
++ 𤯵 塜 墪 㕡 壠 壜 𡈼 壻 寿 坃 𪅐 𤉸 鏓 㖡 够 梦
++ 㛃 湙 𡘾 娤 啓 𡚒 蔅 姉 𠵎 𦲁 𦴪 𡟜 姙 𡟻 𡞲 𦶦
++ 浱 𡠨 𡛕 姹 𦹅 媫 婣 㛦 𤦩 㜈 媖 瑥 嫓 𦾡 𢕔 㶅
++ 𡤑 㜲 𡚸 広 勐 孶 斈 孼 𧨎 䀄 䡝 𠈄 寕 慠 𡨴 𥧌
++ 𠖥 寳 宝 䴐 尅 𡭄 尓 珎 尔 𡲥 𦬨 屉 䣝 岅 峩 峯
++ 嶋 𡷹 𡸷 崐 崘 嵆 𡺤 岺 巗 苼 㠭 𤤁 𢁉 𢅳 芇 㠶
++ 㯂 帮 檊 幺 𤒼 𠳓 厦 亷 厨 𡝱 帉 廴 𨒂 廹 廻 㢠
++ 廼 栾 鐛 弍 𠇁 弢 㫞 䢮 𡌺 强 𦢈 𢏐 𢑱 彣 鞽 𦹮
++ 彲 鍀 𨨶 徧 嶶 㵟 𥉐 𡽪 𧃸 𢙨 釖 𠊞 𨨩 怱 暅 𡡷
++ 㥣 㷇 㘹 垐 𢞴 祱 㹀 悞 悳 𤦂 𤦏 𧩓 璤 僡 媠 慤
++ 萤 慂 慈 𦻒 憁 凴 𠙖 憇 宪 𣾷 𢡟 懓 𨮝 𩥝 懐 㤲
++ 𢦀 𢣁 怣 慜 攞 掋 𠄘 担 𡝰 拕 𢸍 捬 𤧟 㨗 搸 揸
++ 𡎎 𡟼 澊 𢸶 頔 𤂌 𥜝 擡 擥 鑻 㩦 携 㩗 敍 漖 𤨨
++ 𤨣 斅 敭 敟 𣁾 斵 𤥀 䬷 旑 䃘 𡠩 无 旣 忟 𣐀 昘
++ 𣇷 𣇸 晄 𣆤 𣆥 晋 𠹵 晧 𥇦 晳 𡸽 𣈱 𨗴 𣇈 𥌓 矅
++ 𢣷 馤 朂 𤎜 𤨡 㬫 槺 𣟂 杧 杢 𤇍 𩃭 柗 䓩 栢 湐
++ 鈼 栁 𣏦 𦶠 桝 𣑯 槡 樋 𨫟 楳 棃 𣗍 椁 椀 㴲 㨁
++ 𣘼 㮀 枬 楡 𨩊 䋼 椶 榘 㮡 𠏉 荣 傐 槹 𣙙 𢄪 橅
++ 𣜃 檝 㯳 枱 櫈 𩆜 㰍 欝 𠤣 惞 欵 歴 𢟍 溵 𣫛 𠎵
++ 𡥘 㝀 吡 𣭚 毡 𣻼 毜 氷 𢒋 𤣱 𦭑 汚 舦 汹 𣶼 䓅
++ 𣶽 𤆤 𤤌 𤤀 𣳉 㛥 㳫 𠴲 鮃 𣇹 𢒑 羏 样 𦴥 𦶡 𦷫
++ 涖 浜 湼 漄 𤥿 𤂅 𦹲 蔳 𦽴 凇 萮 𨬡 𣸯 瑓 𣾂 秌
++ 湏 媑 𣁋 濸 㜍 澝 𣸰 滺 𡒗 𤀽 䕕 鏰 潄 潜 㵎 潴
++ 𩅰 㴻 澟 𤅄 濓 𤂑 𤅕 𤀹 𣿰 𣾴 𤄿 凟 𤅖 𤅗 𤅀 𦇝
++ 灋 灾 炧 炁 烌 烕 烖 烟 䄄 㷨 熴 熖 𤉷 焫 煅 媈
++ 煊 岜 𤍥 煏 鍢 𤋁 焬 𤑚 𤨧 𤨢 熺 𨯨 炽 爎 鑂 爕
++ 夑 鑃 爤 鍁 𥘅 爮 牀 𤥴 梽 牕 牗 㹕 𣁄 栍 漽 犂
++ 猫 𤠣 𨠫 䣭 𨠄 猨 献 珏 玪 𠰺 𦨮 珉 瑉 𤇢 𡛧 𤨤
++ 昣 㛅 𤦷 𤦍 𤧻 珷 琕 椃 𤨦 琹 𠗃 㻗 𢢭 瑠 𨺲 瑇
++ 珤 瑶 莹 瑬 㜰 瑴 鏱 樬 璂 䥓 𤪌 𤅟 𤩹 𨮏 孆 𨰃
++ 𡢞 瓈 𡦈 甎 甞 𨻙 𡩋 寗 𨺬 鎅 畍 畊 畧 畮 𤾂 㼄
++ 𤴓 疎 瑝 疞 疴 瘂 瘬 癑 癏 癯 癶 𦏵 皐 臯 㟸 𦤑
++ 𦤎 皡 皥 皷 盌 𦾟 葢 𥂝 𥅽 𡸜 眞 眦 着 撯 𥈠 睘
++ 𣊬 瞯 𨥤 𨥨 𡛁 矴 𡍶 𤨒 棊 碯 磇 磓 隥 礮 𥗠 磗
++ 礴 碱 𧘌 辸 袄 𨬫 𦂃 𢘜 禆 褀 椂 禀 𥡗 禝 𧬹 礼
++ 禩 渪 𧄦 㺨 秆 𩄍 秔
+diff --git a/localedata/charmaps/BIG5-HKSCS b/localedata/charmaps/BIG5-HKSCS
+index b6f55b4..0735efc 100644
+--- a/localedata/charmaps/BIG5-HKSCS
++++ b/localedata/charmaps/BIG5-HKSCS
+@@ -7,7 +7,8 @@
+ % alias BIG5HKSCS
+ 
+ %
+-% Generated from the big5hkscs.c iconv module.
++% Last updated from the HKSCS-2008 standard
++% http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/e_hkscs_2008.pdf
+ %
+ 
+ CHARMAP
+@@ -140,28 +141,153 @@ CHARMAP
+ <U007E>     /x7e         TILDE
+ <U007F>     /x7f         DELETE
+ <U0080>     /x80         PADDING CHARACTER (PAD)
+-<UF303>     /x88/x40     <CJK>
+-<UF304>     /x88/x41     <CJK>
+-<UF305>     /x88/x42     <CJK>
+-<UF306>     /x88/x43     <CJK>
+-<UF307>     /x88/x44     <CJK>
+-<UF308>     /x88/x45     <CJK>
+-<UF309>     /x88/x46     <CJK>
+-<UF30A>     /x88/x47     <CJK>
+-<UF30B>     /x88/x48     <CJK>
+-<UF30C>     /x88/x49     <CJK>
+-<UF30D>     /x88/x4a     <CJK>
+-<UF30E>     /x88/x4b     <CJK>
+-<UF30F>     /x88/x4c     <CJK>
+-<UF310>     /x88/x4d     <CJK>
+-<UF311>     /x88/x4e     <CJK>
+-<UF312>     /x88/x4f     <CJK>
+-<UF313>     /x88/x50     <CJK>
+-<UF314>     /x88/x51     <CJK>
+-<UF315>     /x88/x52     <CJK>
+-<UF316>     /x88/x53     <CJK>
+-<UF317>     /x88/x54     <CJK>
+-<UF318>     /x88/x55     <CJK>
++<U43F0>     /x87/x40     <CJK>
++<U4C32>     /x87/x41     <CJK>
++<U4603>     /x87/x42     <CJK>
++<U45A6>     /x87/x43     <CJK>
++<U4578>     /x87/x44     <CJK>
++<U00027267> /x87/x45     <CJK>
++<U4D77>     /x87/x46     <CJK>
++<U45B3>     /x87/x47     <CJK>
++<U00027CB1> /x87/x48     <CJK>
++<U4CE2>     /x87/x49     <CJK>
++<U00027CC5> /x87/x4a     <CJK>
++<U3B95>     /x87/x4b     <CJK>
++<U4736>     /x87/x4c     <CJK>
++<U4744>     /x87/x4d     <CJK>
++<U4C47>     /x87/x4e     <CJK>
++<U4C40>     /x87/x4f     <CJK>
++<U000242BF> /x87/x50     <CJK>
++<U00023617> /x87/x51     <CJK>
++<U00027352> /x87/x52     <CJK>
++<U00026E8B> /x87/x53     <CJK>
++<U000270D2> /x87/x54     <CJK>
++<U4C57>     /x87/x55     <CJK>
++<U0002A351> /x87/x56     <CJK>
++<U474F>     /x87/x57     <CJK>
++<U45DA>     /x87/x58     <CJK>
++<U4C85>     /x87/x59     <CJK>
++<U00027C6C> /x87/x5a     <CJK>
++<U4D07>     /x87/x5b     <CJK>
++<U4AA4>     /x87/x5c     <CJK>
++<U46A1>     /x87/x5d     <CJK>
++<U00026B23> /x87/x5e     <CJK>
++<U7225>     /x87/x5f     <CJK>
++<U00025A54> /x87/x60     <CJK>
++<U00021A63> /x87/x61     <CJK>
++<U00023E06> /x87/x62     <CJK>
++<U00023F61> /x87/x63     <CJK>
++<U664D>     /x87/x64     <CJK>
++<U56FB>     /x87/x65     <CJK>
++<U7D95>     /x87/x67     <CJK>
++<U591D>     /x87/x68     <CJK>
++<U00028BB9> /x87/x69     <CJK>
++<U3DF4>     /x87/x6a     <CJK>
++<U9734>     /x87/x6b     <CJK>
++<U00027BEF> /x87/x6c     <CJK>
++<U5BDB>     /x87/x6d     <CJK>
++<U00021D5E> /x87/x6e     <CJK>
++<U5AA4>     /x87/x6f     <CJK>
++<U3625>     /x87/x70     <CJK>
++<U00029EB0> /x87/x71     <CJK>
++<U5AD1>     /x87/x72     <CJK>
++<U5BB7>     /x87/x73     <CJK>
++<U5CFC>     /x87/x74     <CJK>
++<U676E>     /x87/x75     <CJK>
++<U8593>     /x87/x76     <CJK>
++<U00029945> /x87/x77     <CJK>
++<U7461>     /x87/x78     <CJK>
++<U749D>     /x87/x79     <CJK>
++<U3875>     /x87/x7a     <CJK>
++<U00021D53> /x87/x7b     <CJK>
++<U0002369E> /x87/x7c     <CJK>
++<U00026021> /x87/x7d     <CJK>
++<U3EEC>     /x87/x7e     <CJK>
++<U000258DE> /x87/xa1     <CJK>
++<U3AF5>     /x87/xa2     <CJK>
++<U7AFC>     /x87/xa3     <CJK>
++<U9F97>     /x87/xa4     <CJK>
++<U00024161> /x87/xa5     <CJK>
++<U0002890D> /x87/xa6     <CJK>
++<U000231EA> /x87/xa7     <CJK>
++<U00020A8A> /x87/xa8     <CJK>
++<U0002325E> /x87/xa9     <CJK>
++<U430A>     /x87/xaa     <CJK>
++<U8484>     /x87/xab     <CJK>
++<U9F96>     /x87/xac     <CJK>
++<U942F>     /x87/xad     <CJK>
++<U4930>     /x87/xae     <CJK>
++<U8613>     /x87/xaf     <CJK>
++<U5896>     /x87/xb0     <CJK>
++<U974A>     /x87/xb1     <CJK>
++<U9218>     /x87/xb2     <CJK>
++<U79D0>     /x87/xb3     <CJK>
++<U7A32>     /x87/xb4     <CJK>
++<U6660>     /x87/xb5     <CJK>
++<U6A29>     /x87/xb6     <CJK>
++<U889D>     /x87/xb7     <CJK>
++<U744C>     /x87/xb8     <CJK>
++<U7BC5>     /x87/xb9     <CJK>
++<U6782>     /x87/xba     <CJK>
++<U7A2C>     /x87/xbb     <CJK>
++<U524F>     /x87/xbc     <CJK>
++<U9046>     /x87/xbd     <CJK>
++<U34E6>     /x87/xbe     <CJK>
++<U73C4>     /x87/xbf     <CJK>
++<U00025DB9> /x87/xc0     <CJK>
++<U74C6>     /x87/xc1     <CJK>
++<U9FC7>     /x87/xc2     <CJK>
++<U57B3>     /x87/xc3     <CJK>
++<U492F>     /x87/xc4     <CJK>
++<U544C>     /x87/xc5     <CJK>
++<U4131>     /x87/xc6     <CJK>
++<U0002368E> /x87/xc7     <CJK>
++<U5818>     /x87/xc8     <CJK>
++<U7A72>     /x87/xc9     <CJK>
++<U00027B65> /x87/xca     <CJK>
++<U8B8F>     /x87/xcb     <CJK>
++<U46AE>     /x87/xcc     <CJK>
++<U00026E88> /x87/xcd     <CJK>
++<U4181>     /x87/xce     <CJK>
++<U00025D99> /x87/xcf     <CJK>
++<U7BAE>     /x87/xd0     <CJK>
++<U000224BC> /x87/xd1     <CJK>
++<U9FC8>     /x87/xd2     <CJK>
++<U000224C1> /x87/xd3     <CJK>
++<U000224C9> /x87/xd4     <CJK>
++<U000224CC> /x87/xd5     <CJK>
++<U9FC9>     /x87/xd6     <CJK>
++<U8504>     /x87/xd7     <CJK>
++<U000235BB> /x87/xd8     <CJK>
++<U40B4>     /x87/xd9     <CJK>
++<U9FCA>     /x87/xda     <CJK>
++<U44E1>     /x87/xdb     <CJK>
++<U0002ADFF> /x87/xdc     <CJK>
++<U62C1>     /x87/xdd     <CJK>
++<U706E>     /x87/xde     <CJK>
++<U9FCB>     /x87/xdf     <CJK>
++<U31C0>     /x88/x40     <CJK>
++<U31C1>     /x88/x41     <CJK>
++<U31C2>     /x88/x42     <CJK>
++<U31C3>     /x88/x43     <CJK>
++<U31C4>     /x88/x44     <CJK>
++<U0002010C> /x88/x45     <CJK>
++<U31C5>     /x88/x46     <CJK>
++<U000200D1> /x88/x47     <CJK>
++<U000200CD> /x88/x48     <CJK>
++<U31C6>     /x88/x49     <CJK>
++<U31C7>     /x88/x4a     <CJK>
++<U000200CB> /x88/x4b     <CJK>
++<U00021FE8> /x88/x4c     <CJK>
++<U31C8>     /x88/x4d     <CJK>
++<U000200CA> /x88/x4e     <CJK>
++<U31C9>     /x88/x4f     <CJK>
++<U31CA>     /x88/x50     <CJK>
++<U31CB>     /x88/x51     <CJK>
++<U31CC>     /x88/x52     <CJK>
++<U0002010E> /x88/x53     <CJK>
++<U31CD>     /x88/x54     <CJK>
++<U31CE>     /x88/x55     <CJK>
+ <U0100>     /x88/x56     LATIN CAPITAL LETTER A WITH MACRON
+ <U00C1>     /x88/x57     LATIN CAPITAL LETTER A WITH ACUTE
+ <U01CD>     /x88/x58     LATIN CAPITAL LETTER A WITH CARON
+@@ -174,9 +300,9 @@ CHARMAP
+ <U00D3>     /x88/x5f     LATIN CAPITAL LETTER O WITH ACUTE
+ <U01D1>     /x88/x60     LATIN CAPITAL LETTER O WITH CARON
+ <U00D2>     /x88/x61     LATIN CAPITAL LETTER O WITH GRAVE
+-<UF325>     /x88/x62     <CJK>
++%<U00CA><U0304>     /x88/x62
+ <U1EBE>     /x88/x63     LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
+-<UF327>     /x88/x64     <CJK>
++%<U00CA><U030C>     /x88/x64
+ <U1EC0>     /x88/x65     LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
+ <U00CA>     /x88/x66     LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+ <U0101>     /x88/x67     LATIN SMALL LETTER A WITH MACRON
+@@ -205,16 +331,16 @@ CHARMAP
+ <U01DA>     /x88/x7e     LATIN SMALL LETTER U WITH DIAERESIS AND CARON
+ <U01DC>     /x88/xa1     LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
+ <U00FC>     /x88/xa2     LATIN SMALL LETTER U WITH DIAERESIS
+-<UF344>     /x88/xa3     <CJK>
++%<U00EA><U0304>     /x88/xa3
+ <U1EBF>     /x88/xa4     LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
+-<UF346>     /x88/xa5     <CJK>
++%<U00EA><U030C>     /x88/xa5
+ <U1EC1>     /x88/xa6     LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
+ <U00EA>     /x88/xa7     LATIN SMALL LETTER E WITH CIRCUMFLEX
+ <U0261>     /x88/xa8     LATIN SMALL LETTER SCRIPT G
+-<UF34A>     /x88/xa9     <CJK>
+-<UF34B>     /x88/xaa     <CJK>
++<U23DA>     /x88/xa9     EARTH GROUND
++<U23DB>     /x88/xaa     FUSE
+ <U0002A3A9> /x89/x40     <CJK>
+-<UF3A1>     /x89/x41     <CJK>
++<U00021145> /x89/x41     <CJK>
+ <U650A>     /x89/x43     <CJK>
+ <U4E3D>     /x89/x46     <CJK>
+ <U6EDD>     /x89/x47     <CJK>
+@@ -283,17 +409,17 @@ CHARMAP
+ <U80BC>     /x89/xae     <CJK>
+ <U8D0B>     /x89/xb0     <CJK>
+ <U80F6>     /x89/xb1     <CJK>
+-<UF3F0>     /x89/xb2     <CJK>
++<U000209E7> /x89/xb2     <CJK>
+ <U809F>     /x89/xb5     <CJK>
+ <U9EC7>     /x89/xb6     <CJK>
+ <U4CCD>     /x89/xb7     <CJK>
+ <U9DC9>     /x89/xb8     <CJK>
+ <U9E0C>     /x89/xb9     <CJK>
+ <U4C3E>     /x89/xba     <CJK>
+-<UF3F9>     /x89/xbb     <CJK>
++<U00029DF6> /x89/xbb     <CJK>
+ <U0002700E> /x89/xbc     <CJK>
+ <U9E0A>     /x89/xbd     <CJK>
+-<UF3FC>     /x89/xbe     <CJK>
++<U0002A133> /x89/xbe     <CJK>
+ <U35C1>     /x89/xbf     <CJK>
+ <U6E9A>     /x89/xc1     <CJK>
+ <U823E>     /x89/xc2     <CJK>
+@@ -303,10 +429,10 @@ CHARMAP
+ <U9A8F>     /x89/xc7     <CJK>
+ <U9F99>     /x89/xc8     <CJK>
+ <U7987>     /x89/xc9     <CJK>
+-<UF408>     /x89/xca     <CJK>
++<U0002846C> /x89/xca     <CJK>
+ <U00021DCA> /x89/xcb     <CJK>
+ <U000205D0> /x89/xcc     <CJK>
+-<UF40B>     /x89/xcd     <CJK>
++<U00022AE6> /x89/xcd     <CJK>
+ <U4E24>     /x89/xce     <CJK>
+ <U4E81>     /x89/xcf     <CJK>
+ <U4E80>     /x89/xd0     <CJK>
+@@ -356,95 +482,95 @@ CHARMAP
+ <U35BF>     /x89/xfc     <CJK>
+ <U55D7>     /x89/xfd     <CJK>
+ <U35C5>     /x89/xfe     <CJK>
+-<UF43D>     /x8a/x40     <CJK>
++<U00027D84> /x8a/x40     <CJK>
+ <U5525>     /x8a/x41     <CJK>
+ <U00020C42> /x8a/x43     <CJK>
+-<UF441>     /x8a/x44     <CJK>
+-<UF442>     /x8a/x45     <CJK>
++<U00020D15> /x8a/x44     <CJK>
++<U0002512B> /x8a/x45     <CJK>
+ <U5590>     /x8a/x46     <CJK>
+ <U00022CC6> /x8a/x47     <CJK>
+ <U39EC>     /x8a/x48     <CJK>
+ <U00020341> /x8a/x49     <CJK>
+ <U8E46>     /x8a/x4a     <CJK>
+ <U00024DB8> /x8a/x4b     <CJK>
+-<UF449>     /x8a/x4c     <CJK>
++<U000294E5> /x8a/x4c     <CJK>
+ <U4053>     /x8a/x4d     <CJK>
+ <U000280BE> /x8a/x4e     <CJK>
+ <U777A>     /x8a/x4f     <CJK>
+-<UF44D>     /x8a/x50     <CJK>
++<U00022C38> /x8a/x50     <CJK>
+ <U3A34>     /x8a/x51     <CJK>
+ <U47D5>     /x8a/x52     <CJK>
+-<UF450>     /x8a/x53     <CJK>
++<U0002815D> /x8a/x53     <CJK>
+ <U000269F2> /x8a/x54     <CJK>
+ <U00024DEA> /x8a/x55     <CJK>
+ <U64DD>     /x8a/x56     <CJK>
+-<UF454>     /x8a/x57     <CJK>
++<U00020D7C> /x8a/x57     <CJK>
+ <U00020FB4> /x8a/x58     <CJK>
+ <U00020CD5> /x8a/x59     <CJK>
+ <U000210F4> /x8a/x5a     <CJK>
+ <U648D>     /x8a/x5b     <CJK>
+ <U8E7E>     /x8a/x5c     <CJK>
+-<UF45A>     /x8a/x5d     <CJK>
+-<UF45B>     /x8a/x5e     <CJK>
+-<UF45C>     /x8a/x5f     <CJK>
+-<UF45D>     /x8a/x60     <CJK>
++<U00020E96> /x8a/x5d     <CJK>
++<U00020C0B> /x8a/x5e     <CJK>
++<U00020F64> /x8a/x5f     <CJK>
++<U00022CA9> /x8a/x60     <CJK>
+ <U00028256> /x8a/x61     <CJK>
+ <U000244D3> /x8a/x62     <CJK>
+ <U00020D46> /x8a/x64     <CJK>
+-<UF462>     /x8a/x65     <CJK>
++<U00029A4D> /x8a/x65     <CJK>
+ <U000280E9> /x8a/x66     <CJK>
+ <U47F4>     /x8a/x67     <CJK>
+-<UF465>     /x8a/x68     <CJK>
+-<UF466>     /x8a/x69     <CJK>
++<U00024EA7> /x8a/x68     <CJK>
++<U00022CC2> /x8a/x69     <CJK>
+ <U9AB2>     /x8a/x6a     <CJK>
+ <U3A67>     /x8a/x6b     <CJK>
+-<UF469>     /x8a/x6c     <CJK>
++<U000295F4> /x8a/x6c     <CJK>
+ <U3FED>     /x8a/x6d     <CJK>
+ <U3506>     /x8a/x6e     <CJK>
+ <U000252C7> /x8a/x6f     <CJK>
+-<UF46D>     /x8a/x70     <CJK>
+-<UF46E>     /x8a/x71     <CJK>
+-<UF46F>     /x8a/x72     <CJK>
++<U000297D4> /x8a/x70     <CJK>
++<U000278C8> /x8a/x71     <CJK>
++<U00022D44> /x8a/x72     <CJK>
+ <U9D6E>     /x8a/x73     <CJK>
+ <U9815>     /x8a/x74     <CJK>
+ <U43D9>     /x8a/x76     <CJK>
+ <U000260A5> /x8a/x77     <CJK>
+ <U64B4>     /x8a/x78     <CJK>
+ <U54E3>     /x8a/x79     <CJK>
+-<UF477>     /x8a/x7a     <CJK>
+-<UF478>     /x8a/x7b     <CJK>
++<U00022D4C> /x8a/x7a     <CJK>
++<U00022BCA> /x8a/x7b     <CJK>
+ <U00021077> /x8a/x7c     <CJK>
+ <U39FB>     /x8a/x7d     <CJK>
+ <U0002106F> /x8a/x7e     <CJK>
+-<UF47C>     /x8a/xa1     <CJK>
+-<UF47D>     /x8a/xa2     <CJK>
+-<UF47E>     /x8a/xa3     <CJK>
++<U000266DA> /x8a/xa1     <CJK>
++<U00026716> /x8a/xa2     <CJK>
++<U000279A0> /x8a/xa3     <CJK>
+ <U64EA>     /x8a/xa4     <CJK>
+-<UF480>     /x8a/xa5     <CJK>
++<U00025052> /x8a/xa5     <CJK>
+ <U00020C43> /x8a/xa6     <CJK>
+ <U8E68>     /x8a/xa7     <CJK>
+ <U000221A1> /x8a/xa8     <CJK>
+ <U00028B4C> /x8a/xa9     <CJK>
+-<UF485>     /x8a/xaa     <CJK>
++<U00020731> /x8a/xaa     <CJK>
+ <U480B>     /x8a/xac     <CJK>
+-<UF488>     /x8a/xad     <CJK>
++<U000201A9> /x8a/xad     <CJK>
+ <U3FFA>     /x8a/xae     <CJK>
+ <U5873>     /x8a/xaf     <CJK>
+-<UF48B>     /x8a/xb0     <CJK>
+-<UF48D>     /x8a/xb2     <CJK>
++<U00022D8D> /x8a/xb0     <CJK>
++<U000245C8> /x8a/xb2     <CJK>
+ <U000204FC> /x8a/xb3     <CJK>
+-<UF48F>     /x8a/xb4     <CJK>
+-<UF490>     /x8a/xb5     <CJK>
+-<UF491>     /x8a/xb6     <CJK>
++<U00026097> /x8a/xb4     <CJK>
++<U00020F4C> /x8a/xb5     <CJK>
++<U00020D96> /x8a/xb6     <CJK>
+ <U5579>     /x8a/xb7     <CJK>
+ <U40BB>     /x8a/xb8     <CJK>
+ <U43BA>     /x8a/xb9     <CJK>
+ <U4AB4>     /x8a/xbb     <CJK>
+-<UF497>     /x8a/xbc     <CJK>
+-<UF498>     /x8a/xbd     <CJK>
++<U00022A66> /x8a/xbc     <CJK>
++<U0002109D> /x8a/xbd     <CJK>
+ <U81AA>     /x8a/xbe     <CJK>
+ <U98F5>     /x8a/xbf     <CJK>
+-<UF49B>     /x8a/xc0     <CJK>
++<U00020D9C> /x8a/xc0     <CJK>
+ <U6379>     /x8a/xc1     <CJK>
+ <U39FE>     /x8a/xc2     <CJK>
+ <U00022775> /x8a/xc3     <CJK>
+@@ -452,49 +578,49 @@ CHARMAP
+ <U56A1>     /x8a/xc5     <CJK>
+ <U647C>     /x8a/xc6     <CJK>
+ <U3E43>     /x8a/xc7     <CJK>
+-<UF4A4>     /x8a/xc9     <CJK>
++<U0002A601> /x8a/xc9     <CJK>
+ <U00020E09> /x8a/xca     <CJK>
+ <U00022ACF> /x8a/xcb     <CJK>
+-<UF4A7>     /x8a/xcc     <CJK>
++<U00022CC9> /x8a/xcc     <CJK>
+ <U000210C8> /x8a/xce     <CJK>
+-<UF4AA>     /x8a/xcf     <CJK>
++<U000239C2> /x8a/xcf     <CJK>
+ <U3992>     /x8a/xd0     <CJK>
+ <U3A06>     /x8a/xd1     <CJK>
+-<UF4AD>     /x8a/xd2     <CJK>
++<U0002829B> /x8a/xd2     <CJK>
+ <U3578>     /x8a/xd3     <CJK>
+-<UF4AF>     /x8a/xd4     <CJK>
++<U00025E49> /x8a/xd4     <CJK>
+ <U000220C7> /x8a/xd5     <CJK>
+ <U5652>     /x8a/xd6     <CJK>
+ <U00020F31> /x8a/xd7     <CJK>
+-<UF4B3>     /x8a/xd8     <CJK>
+-<UF4B4>     /x8a/xd9     <CJK>
++<U00022CB2> /x8a/xd8     <CJK>
++<U00029720> /x8a/xd9     <CJK>
+ <U34BC>     /x8a/xda     <CJK>
+ <U6C3D>     /x8a/xdb     <CJK>
+-<UF4B7>     /x8a/xdc     <CJK>
+-<UF4BA>     /x8a/xdf     <CJK>
+-<UF4BB>     /x8a/xe0     <CJK>
+-<UF4BC>     /x8a/xe1     <CJK>
+-<UF4BD>     /x8a/xe2     <CJK>
++<U00024E3B> /x8a/xdc     <CJK>
++<U00027574> /x8a/xdf     <CJK>
++<U00022E8B> /x8a/xe0     <CJK>
++<U00022208> /x8a/xe1     <CJK>
++<U0002A65B> /x8a/xe2     <CJK>
+ <U00028CCD> /x8a/xe3     <CJK>
+ <U00020E7A> /x8a/xe4     <CJK>
+-<UF4C0>     /x8a/xe5     <CJK>
+-<UF4C1>     /x8a/xe6     <CJK>
++<U00020C34> /x8a/xe5     <CJK>
++<U0002681C> /x8a/xe6     <CJK>
+ <U7F93>     /x8a/xe7     <CJK>
+-<UF4C3>     /x8a/xe8     <CJK>
++<U000210CF> /x8a/xe8     <CJK>
+ <U00022803> /x8a/xe9     <CJK>
+ <U00022939> /x8a/xea     <CJK>
+ <U35FB>     /x8a/xeb     <CJK>
+ <U000251E3> /x8a/xec     <CJK>
+-<UF4C8>     /x8a/xed     <CJK>
++<U00020E8C> /x8a/xed     <CJK>
+ <U00020F8D> /x8a/xee     <CJK>
+ <U00020EAA> /x8a/xef     <CJK>
+ <U3F93>     /x8a/xf0     <CJK>
+ <U00020F30> /x8a/xf1     <CJK>
+ <U00020D47> /x8a/xf2     <CJK>
+-<UF4CE>     /x8a/xf3     <CJK>
+-<UF4CF>     /x8a/xf4     <CJK>
++<U0002114F> /x8a/xf3     <CJK>
++<U00020E4C> /x8a/xf4     <CJK>
+ <U00020EAB> /x8a/xf6     <CJK>
+-<UF4D2>     /x8a/xf7     <CJK>
++<U00020BA9> /x8a/xf7     <CJK>
+ <U00020D48> /x8a/xf8     <CJK>
+ <U000210C0> /x8a/xf9     <CJK>
+ <U0002113D> /x8a/xfa     <CJK>
+@@ -510,14 +636,14 @@ CHARMAP
+ <U00022C51> /x8b/x45     <CJK>
+ <U00022C55> /x8b/x46     <CJK>
+ <U3A18>     /x8b/x47     <CJK>
+-<UF4E2>     /x8b/x48     <CJK>
++<U00020E98> /x8b/x48     <CJK>
+ <U000210C7> /x8b/x49     <CJK>
+ <U00020F2E> /x8b/x4a     <CJK>
+-<UF4E5>     /x8b/x4b     <CJK>
++<U0002A632> /x8b/x4b     <CJK>
+ <U00026B50> /x8b/x4c     <CJK>
+-<UF4E7>     /x8b/x4d     <CJK>
+-<UF4E8>     /x8b/x4e     <CJK>
+-<UF4E9>     /x8b/x4f     <CJK>
++<U00028CD2> /x8b/x4d     <CJK>
++<U00028D99> /x8b/x4e     <CJK>
++<U00028CCA> /x8b/x4f     <CJK>
+ <U95AA>     /x8b/x50     <CJK>
+ <U54CC>     /x8b/x51     <CJK>
+ <U82C4>     /x8b/x52     <CJK>
+@@ -526,7 +652,7 @@ CHARMAP
+ <U9C26>     /x8b/x56     <CJK>
+ <U9AB6>     /x8b/x57     <CJK>
+ <U0002775E> /x8b/x58     <CJK>
+-<UF4F3>     /x8b/x59     <CJK>
++<U00022DEE> /x8b/x59     <CJK>
+ <U7140>     /x8b/x5a     <CJK>
+ <U816D>     /x8b/x5b     <CJK>
+ <U80EC>     /x8b/x5c     <CJK>
+@@ -573,15 +699,15 @@ CHARMAP
+ <U00020FB6> /x8b/xa7     <CJK>
+ <U00021180> /x8b/xa8     <CJK>
+ <U000252D8> /x8b/xa9     <CJK>
+-<UF522>     /x8b/xaa     <CJK>
+-<UF523>     /x8b/xab     <CJK>
++<U0002A2BD> /x8b/xaa     <CJK>
++<U000249DA> /x8b/xab     <CJK>
+ <U0002183A> /x8b/xac     <CJK>
+-<UF525>     /x8b/xad     <CJK>
+-<UF526>     /x8b/xae     <CJK>
++<U00024177> /x8b/xad     <CJK>
++<U0002827C> /x8b/xae     <CJK>
+ <U5899>     /x8b/xaf     <CJK>
+ <U5268>     /x8b/xb0     <CJK>
+ <U361A>     /x8b/xb1     <CJK>
+-<UF52A>     /x8b/xb2     <CJK>
++<U0002573D> /x8b/xb2     <CJK>
+ <U7BB2>     /x8b/xb3     <CJK>
+ <U5B68>     /x8b/xb4     <CJK>
+ <U4800>     /x8b/xb5     <CJK>
+@@ -597,10 +723,10 @@ CHARMAP
+ <U5689>     /x8b/xbf     <CJK>
+ <U4E28>     /x8b/xc0     <CJK>
+ <U5902>     /x8b/xc1     <CJK>
+-<UF53A>     /x8b/xc2     <CJK>
+-<UF53B>     /x8b/xc3     <CJK>
++<U00021BC1> /x8b/xc2     <CJK>
++<U0002F878> /x8b/xc3     <CJK>
+ <U9751>     /x8b/xc4     <CJK>
+-<UF53D>     /x8b/xc5     <CJK>
++<U00020086> /x8b/xc5     <CJK>
+ <U4E5B>     /x8b/xc6     <CJK>
+ <U4EBB>     /x8b/xc7     <CJK>
+ <U353E>     /x8b/xc8     <CJK>
+@@ -617,45 +743,227 @@ CHARMAP
+ <U722B>     /x8b/xd3     <CJK>
+ <U4E2C>     /x8b/xd4     <CJK>
+ <U72AD>     /x8b/xd5     <CJK>
+-<UF54E>     /x8b/xd6     <CJK>
++<U000248E9> /x8b/xd6     <CJK>
+ <U7F52>     /x8b/xd7     <CJK>
+ <U793B>     /x8b/xd8     <CJK>
+ <U7CF9>     /x8b/xd9     <CJK>
+ <U7F53>     /x8b/xda     <CJK>
+-<UF553>     /x8b/xdb     <CJK>
++<U0002626A> /x8b/xdb     <CJK>
+ <U34C1>     /x8b/xdc     <CJK>
+-<UF556>     /x8b/xde     <CJK>
++<U0002634B> /x8b/xde     <CJK>
+ <U8002>     /x8b/xdf     <CJK>
+ <U8080>     /x8b/xe0     <CJK>
+-<UF559>     /x8b/xe1     <CJK>
+-<UF55A>     /x8b/xe2     <CJK>
++<U00026612> /x8b/xe1     <CJK>
++<U00026951> /x8b/xe2     <CJK>
+ <U535D>     /x8b/xe3     <CJK>
+ <U8864>     /x8b/xe4     <CJK>
+ <U89C1>     /x8b/xe5     <CJK>
+-<UF55E>     /x8b/xe6     <CJK>
++<U000278B2> /x8b/xe6     <CJK>
+ <U8BA0>     /x8b/xe7     <CJK>
+ <U8D1D>     /x8b/xe8     <CJK>
+ <U9485>     /x8b/xe9     <CJK>
+ <U9578>     /x8b/xea     <CJK>
+ <U957F>     /x8b/xeb     <CJK>
+ <U95E8>     /x8b/xec     <CJK>
+-<UF565>     /x8b/xed     <CJK>
++<U00028E0F> /x8b/xed     <CJK>
+ <U97E6>     /x8b/xee     <CJK>
+ <U9875>     /x8b/xef     <CJK>
+ <U98CE>     /x8b/xf0     <CJK>
+ <U98DE>     /x8b/xf1     <CJK>
+ <U9963>     /x8b/xf2     <CJK>
+-<UF56B>     /x8b/xf3     <CJK>
++<U00029810> /x8b/xf3     <CJK>
+ <U9C7C>     /x8b/xf4     <CJK>
+ <U9E1F>     /x8b/xf5     <CJK>
+ <U9EC4>     /x8b/xf6     <CJK>
+ <U6B6F>     /x8b/xf7     <CJK>
+-%IRREVERSIBLE%<U9F9C>     /x8b/xf8     <CJK>
++<UF907>     /x8b/xf8     <CJK>
+ <U4E37>     /x8b/xf9     <CJK>
+-<UF572>     /x8b/xfa     <CJK>
++<U00020087> /x8b/xfa     <CJK>
+ <U961D>     /x8b/xfb     <CJK>
+ <U6237>     /x8b/xfc     <CJK>
+ <U94A2>     /x8b/xfd     <CJK>
++<U503B>     /x8c/x40     <CJK>
++<U6DFE>     /x8c/x41     <CJK>
++<U00029C73> /x8c/x42     <CJK>
++<U9FA6>     /x8c/x43     <CJK>
++<U3DC9>     /x8c/x44     <CJK>
++<U888F>     /x8c/x45     <CJK>
++<U0002414E> /x8c/x46     <CJK>
++<U7077>     /x8c/x47     <CJK>
++<U5CF5>     /x8c/x48     <CJK>
++<U4B20>     /x8c/x49     <CJK>
++<U000251CD> /x8c/x4a     <CJK>
++<U3559>     /x8c/x4b     <CJK>
++<U00025D30> /x8c/x4c     <CJK>
++<U6122>     /x8c/x4d     <CJK>
++<U00028A32> /x8c/x4e     <CJK>
++<U8FA7>     /x8c/x4f     <CJK>
++<U91F6>     /x8c/x50     <CJK>
++<U7191>     /x8c/x51     <CJK>
++<U6719>     /x8c/x52     <CJK>
++<U73BA>     /x8c/x53     <CJK>
++<U00023281> /x8c/x54     <CJK>
++<U0002A107> /x8c/x55     <CJK>
++<U3C8B>     /x8c/x56     <CJK>
++<U00021980> /x8c/x57     <CJK>
++<U4B10>     /x8c/x58     <CJK>
++<U78E4>     /x8c/x59     <CJK>
++<U7402>     /x8c/x5a     <CJK>
++<U51AE>     /x8c/x5b     <CJK>
++<U0002870F> /x8c/x5c     <CJK>
++<U4009>     /x8c/x5d     <CJK>
++<U6A63>     /x8c/x5e     <CJK>
++<U0002A2BA> /x8c/x5f     <CJK>
++<U4223>     /x8c/x60     <CJK>
++<U860F>     /x8c/x61     <CJK>
++<U00020A6F> /x8c/x62     <CJK>
++<U7A2A>     /x8c/x63     <CJK>
++<U00029947> /x8c/x64     <CJK>
++<U00028AEA> /x8c/x65     <CJK>
++<U9755>     /x8c/x66     <CJK>
++<U704D>     /x8c/x67     <CJK>
++<U5324>     /x8c/x68     <CJK>
++<U0002207E> /x8c/x69     <CJK>
++<U93F4>     /x8c/x6a     <CJK>
++<U76D9>     /x8c/x6b     <CJK>
++<U000289E3> /x8c/x6c     <CJK>
++<U9FA7>     /x8c/x6d     <CJK>
++<U77DD>     /x8c/x6e     <CJK>
++<U4EA3>     /x8c/x6f     <CJK>
++<U4FF0>     /x8c/x70     <CJK>
++<U50BC>     /x8c/x71     <CJK>
++<U4E2F>     /x8c/x72     <CJK>
++<U4F17>     /x8c/x73     <CJK>
++<U9FA8>     /x8c/x74     <CJK>
++<U5434>     /x8c/x75     <CJK>
++<U7D8B>     /x8c/x76     <CJK>
++<U5892>     /x8c/x77     <CJK>
++<U58D0>     /x8c/x78     <CJK>
++<U00021DB6> /x8c/x79     <CJK>
++<U5E92>     /x8c/x7a     <CJK>
++<U5E99>     /x8c/x7b     <CJK>
++<U5FC2>     /x8c/x7c     <CJK>
++<U00022712> /x8c/x7d     <CJK>
++<U658B>     /x8c/x7e     <CJK>
++<U000233F9> /x8c/xa1     <CJK>
++<U6919>     /x8c/xa2     <CJK>
++<U6A43>     /x8c/xa3     <CJK>
++<U00023C63> /x8c/xa4     <CJK>
++<U6CFF>     /x8c/xa5     <CJK>
++<U7200>     /x8c/xa7     <CJK>
++<U00024505> /x8c/xa8     <CJK>
++<U738C>     /x8c/xa9     <CJK>
++<U3EDB>     /x8c/xaa     <CJK>
++<U00024A13> /x8c/xab     <CJK>
++<U5B15>     /x8c/xac     <CJK>
++<U74B9>     /x8c/xad     <CJK>
++<U8B83>     /x8c/xae     <CJK>
++<U00025CA4> /x8c/xaf     <CJK>
++<U00025695> /x8c/xb0     <CJK>
++<U7A93>     /x8c/xb1     <CJK>
++<U7BEC>     /x8c/xb2     <CJK>
++<U7CC3>     /x8c/xb3     <CJK>
++<U7E6C>     /x8c/xb4     <CJK>
++<U82F8>     /x8c/xb5     <CJK>
++<U8597>     /x8c/xb6     <CJK>
++<U9FA9>     /x8c/xb7     <CJK>
++<U8890>     /x8c/xb8     <CJK>
++<U9FAA>     /x8c/xb9     <CJK>
++<U8EB9>     /x8c/xba     <CJK>
++<U9FAB>     /x8c/xbb     <CJK>
++<U8FCF>     /x8c/xbc     <CJK>
++<U855F>     /x8c/xbd     <CJK>
++<U99E0>     /x8c/xbe     <CJK>
++<U9221>     /x8c/xbf     <CJK>
++<U9FAC>     /x8c/xc0     <CJK>
++<U00028DB9> /x8c/xc1     <CJK>
++<U0002143F> /x8c/xc2     <CJK>
++<U4071>     /x8c/xc3     <CJK>
++<U42A2>     /x8c/xc4     <CJK>
++<U5A1A>     /x8c/xc5     <CJK>
++<U9868>     /x8c/xc9     <CJK>
++<U676B>     /x8c/xca     <CJK>
++<U4276>     /x8c/xcb     <CJK>
++<U573D>     /x8c/xcc     <CJK>
++<U85D6>     /x8c/xce     <CJK>
++<U0002497B> /x8c/xcf     <CJK>
++<U82BF>     /x8c/xd0     <CJK>
++<U0002710D> /x8c/xd1     <CJK>
++<U4C81>     /x8c/xd2     <CJK>
++<U00026D74> /x8c/xd3     <CJK>
++<U5D7B>     /x8c/xd4     <CJK>
++<U00026B15> /x8c/xd5     <CJK>
++<U00026FBE> /x8c/xd6     <CJK>
++<U9FAD>     /x8c/xd7     <CJK>
++<U9FAE>     /x8c/xd8     <CJK>
++<U5B96>     /x8c/xd9     <CJK>
++<U9FAF>     /x8c/xda     <CJK>
++<U66E7>     /x8c/xdb     <CJK>
++<U7E5B>     /x8c/xdc     <CJK>
++<U6E57>     /x8c/xdd     <CJK>
++<U79CA>     /x8c/xde     <CJK>
++<U3D88>     /x8c/xdf     <CJK>
++<U44C3>     /x8c/xe0     <CJK>
++<U00023256> /x8c/xe1     <CJK>
++<U00022796> /x8c/xe2     <CJK>
++<U439A>     /x8c/xe3     <CJK>
++<U4536>     /x8c/xe4     <CJK>
++<U5CD5>     /x8c/xe6     <CJK>
++<U00023B1A> /x8c/xe7     <CJK>
++<U8AF9>     /x8c/xe8     <CJK>
++<U5C78>     /x8c/xe9     <CJK>
++<U3D12>     /x8c/xea     <CJK>
++<U00023551> /x8c/xeb     <CJK>
++<U5D78>     /x8c/xec     <CJK>
++<U9FB2>     /x8c/xed     <CJK>
++<U7157>     /x8c/xee     <CJK>
++<U4558>     /x8c/xef     <CJK>
++<U000240EC> /x8c/xf0     <CJK>
++<U00021E23> /x8c/xf1     <CJK>
++<U4C77>     /x8c/xf2     <CJK>
++<U3978>     /x8c/xf3     <CJK>
++<U344A>     /x8c/xf4     <CJK>
++<U000201A4> /x8c/xf5     <CJK>
++<U00026C41> /x8c/xf6     <CJK>
++<U8ACC>     /x8c/xf7     <CJK>
++<U4FB4>     /x8c/xf8     <CJK>
++<U00020239> /x8c/xf9     <CJK>
++<U59BF>     /x8c/xfa     <CJK>
++<U816C>     /x8c/xfb     <CJK>
++<U9856>     /x8c/xfc     <CJK>
++<U000298FA> /x8c/xfd     <CJK>
++<U5F3B>     /x8c/xfe     <CJK>
++<U00020B9F> /x8d/x40     <CJK>
++<U000221C1> /x8d/x42     <CJK>
++<U0002896D> /x8d/x43     <CJK>
++<U4102>     /x8d/x44     <CJK>
++<U46BB>     /x8d/x45     <CJK>
++<U00029079> /x8d/x46     <CJK>
++<U3F07>     /x8d/x47     <CJK>
++<U9FB3>     /x8d/x48     <CJK>
++<U0002A1B5> /x8d/x49     <CJK>
++<U40F8>     /x8d/x4a     <CJK>
++<U37D6>     /x8d/x4b     <CJK>
++<U46F7>     /x8d/x4c     <CJK>
++<U00026C46> /x8d/x4d     <CJK>
++<U417C>     /x8d/x4e     <CJK>
++<U000286B2> /x8d/x4f     <CJK>
++<U000273FF> /x8d/x50     <CJK>
++<U456D>     /x8d/x51     <CJK>
++<U38D4>     /x8d/x52     <CJK>
++<U0002549A> /x8d/x53     <CJK>
++<U4561>     /x8d/x54     <CJK>
++<U451B>     /x8d/x55     <CJK>
++<U4D89>     /x8d/x56     <CJK>
++<U4C7B>     /x8d/x57     <CJK>
++<U4D76>     /x8d/x58     <CJK>
++<U45EA>     /x8d/x59     <CJK>
++<U3FC8>     /x8d/x5a     <CJK>
++<U00024B0F> /x8d/x5b     <CJK>
++<U3661>     /x8d/x5c     <CJK>
++<U44DE>     /x8d/x5d     <CJK>
++<U44BD>     /x8d/x5e     <CJK>
++<U41ED>     /x8d/x5f     <CJK>
+ <U5D3E>     /x8d/x60     <CJK>
+ <U5D48>     /x8d/x61     <CJK>
+ <U5D56>     /x8d/x62     <CJK>
+@@ -780,8 +1088,8 @@ CHARMAP
+ <U00020325> /x8d/xfb     <CJK>
+ <U43C1>     /x8d/xfc     <CJK>
+ <U35F1>     /x8d/xfd     <CJK>
+-<UF6B0>     /x8d/xfe     <CJK>
+-<UE311>     /x8e/x40     <CJK>
++<U00020ED8> /x8d/xfe     <CJK>
++<U00023ED7> /x8e/x40     <CJK>
+ <U57BE>     /x8e/x41     <CJK>
+ <U00026ED3> /x8e/x42     <CJK>
+ <U713E>     /x8e/x43     <CJK>
+@@ -801,7 +1109,7 @@ CHARMAP
+ <U7AC2>     /x8e/x51     <CJK>
+ <U7AC3>     /x8e/x52     <CJK>
+ <U71D1>     /x8e/x53     <CJK>
+-<UE325>     /x8e/x54     <CJK>
++<U0002648D> /x8e/x54     <CJK>
+ <U41CA>     /x8e/x55     <CJK>
+ <U7ADA>     /x8e/x56     <CJK>
+ <U7ADD>     /x8e/x57     <CJK>
+@@ -812,7 +1120,7 @@ CHARMAP
+ <U7B0B>     /x8e/x5c     <CJK>
+ <U7B55>     /x8e/x5d     <CJK>
+ <U7B29>     /x8e/x5e     <CJK>
+-<UE330>     /x8e/x5f     <CJK>
++<U0002530E> /x8e/x5f     <CJK>
+ <U00025CFE> /x8e/x60     <CJK>
+ <U7BA2>     /x8e/x61     <CJK>
+ <U7B6F>     /x8e/x62     <CJK>
+@@ -822,7 +1130,7 @@ CHARMAP
+ <U7BD0>     /x8e/x66     <CJK>
+ <U8421>     /x8e/x67     <CJK>
+ <U7B92>     /x8e/x68     <CJK>
+-<U00023FF0> /x8e/x6a     <CJK>
++<U00025D20> /x8e/x6a     <CJK>
+ <U3DAD>     /x8e/x6b     <CJK>
+ <U00025C65> /x8e/x6c     <CJK>
+ <U8492>     /x8e/x6d     <CJK>
+@@ -831,7 +1139,7 @@ CHARMAP
+ <U00025CC1> /x8e/x71     <CJK>
+ <U7C44>     /x8e/x72     <CJK>
+ <U7C83>     /x8e/x73     <CJK>
+-<UE345>     /x8e/x74     <CJK>
++<U00024882> /x8e/x74     <CJK>
+ <U7CA6>     /x8e/x75     <CJK>
+ <U667D>     /x8e/x76     <CJK>
+ <U00024578> /x8e/x77     <CJK>
+@@ -858,7 +1166,7 @@ CHARMAP
+ <U7DF5>     /x8e/xb0     <CJK>
+ <U000217F9> /x8e/xb1     <CJK>
+ <U7DE5>     /x8e/xb2     <CJK>
+-<UE362>     /x8e/xb3     <CJK>
++<U0002836D> /x8e/xb3     <CJK>
+ <U00026121> /x8e/xb5     <CJK>
+ <U0002615A> /x8e/xb6     <CJK>
+ <U7E6E>     /x8e/xb7     <CJK>
+@@ -886,15 +1194,15 @@ CHARMAP
+ <U8008>     /x8e/xce     <CJK>
+ <U801D>     /x8e/xcf     <CJK>
+ <U802F>     /x8e/xd1     <CJK>
+-<UE381>     /x8e/xd2     <CJK>
+-<UE382>     /x8e/xd3     <CJK>
++<U0002A087> /x8e/xd2     <CJK>
++<U00026CC3> /x8e/xd3     <CJK>
+ <U803B>     /x8e/xd4     <CJK>
+ <U803C>     /x8e/xd5     <CJK>
+ <U8061>     /x8e/xd6     <CJK>
+-<UE386>     /x8e/xd7     <CJK>
++<U00022714> /x8e/xd7     <CJK>
+ <U4989>     /x8e/xd8     <CJK>
+ <U00026626> /x8e/xd9     <CJK>
+-<UE389>     /x8e/xda     <CJK>
++<U00023DE3> /x8e/xda     <CJK>
+ <U000266E8> /x8e/xdb     <CJK>
+ <U6725>     /x8e/xdc     <CJK>
+ <U80A7>     /x8e/xdd     <CJK>
+@@ -905,9 +1213,9 @@ CHARMAP
+ <U000226F6> /x8e/xe2     <CJK>
+ <U6C7F>     /x8e/xe3     <CJK>
+ <U00026498> /x8e/xe4     <CJK>
+-<UE394>     /x8e/xe5     <CJK>
++<U00024FB8> /x8e/xe5     <CJK>
+ <U64E7>     /x8e/xe6     <CJK>
+-<UE396>     /x8e/xe7     <CJK>
++<U0002148A> /x8e/xe7     <CJK>
+ <U8218>     /x8e/xe8     <CJK>
+ <U0002185E> /x8e/xe9     <CJK>
+ <U6A53>     /x8e/xea     <CJK>
+@@ -915,9 +1223,9 @@ CHARMAP
+ <U00024A95> /x8e/xec     <CJK>
+ <U447A>     /x8e/xed     <CJK>
+ <U8229>     /x8e/xee     <CJK>
+-<UE39E>     /x8e/xef     <CJK>
++<U00020B0D> /x8e/xef     <CJK>
+ <U00026A52> /x8e/xf0     <CJK>
+-<UE3A0>     /x8e/xf1     <CJK>
++<U00023D7E> /x8e/xf1     <CJK>
+ <U4FF9>     /x8e/xf2     <CJK>
+ <U000214FD> /x8e/xf3     <CJK>
+ <U84E2>     /x8e/xf4     <CJK>
+@@ -937,14 +1245,14 @@ CHARMAP
+ <U00020E16> /x8f/x43     <CJK>
+ <U000217B4> /x8f/x44     <CJK>
+ <U36C1>     /x8f/x45     <CJK>
+-<UE3B4>     /x8f/x46     <CJK>
++<U0002317D> /x8f/x46     <CJK>
+ <U0002355A> /x8f/x47     <CJK>
+ <U827B>     /x8f/x48     <CJK>
+ <U82E2>     /x8f/x49     <CJK>
+ <U8318>     /x8f/x4a     <CJK>
+ <U00023E8B> /x8f/x4b     <CJK>
+ <U00026DA3> /x8f/x4c     <CJK>
+-<UE3BB>     /x8f/x4d     <CJK>
++<U00026B05> /x8f/x4d     <CJK>
+ <U00026B97> /x8f/x4e     <CJK>
+ <U000235CE> /x8f/x4f     <CJK>
+ <U3DBF>     /x8f/x50     <CJK>
+@@ -961,15 +1269,15 @@ CHARMAP
+ <U855A>     /x8f/x5c     <CJK>
+ <U3496>     /x8f/x5d     <CJK>
+ <U00026E42> /x8f/x5e     <CJK>
+-<UE3CD>     /x8f/x5f     <CJK>
++<U00022EEF> /x8f/x5f     <CJK>
+ <U8458>     /x8f/x60     <CJK>
+-<UE3CF>     /x8f/x61     <CJK>
++<U00025BE4> /x8f/x61     <CJK>
+ <U8471>     /x8f/x62     <CJK>
+ <U3DD3>     /x8f/x63     <CJK>
+ <U44E4>     /x8f/x64     <CJK>
+ <U6AA7>     /x8f/x65     <CJK>
+ <U844A>     /x8f/x66     <CJK>
+-<UE3D5>     /x8f/x67     <CJK>
++<U00023CB5> /x8f/x67     <CJK>
+ <U7958>     /x8f/x68     <CJK>
+ <U00026B96> /x8f/x6a     <CJK>
+ <U00026E77> /x8f/x6b     <CJK>
+@@ -979,13 +1287,13 @@ CHARMAP
+ <U44A0>     /x8f/x70     <CJK>
+ <U8493>     /x8f/x71     <CJK>
+ <U84E4>     /x8f/x72     <CJK>
+-<UE3E1>     /x8f/x73     <CJK>
++<U00025C91> /x8f/x73     <CJK>
+ <U4240>     /x8f/x74     <CJK>
+ <U00025CC0> /x8f/x75     <CJK>
+ <U4543>     /x8f/x76     <CJK>
+ <U8534>     /x8f/x77     <CJK>
+ <U5AF2>     /x8f/x78     <CJK>
+-<UE3E7>     /x8f/x79     <CJK>
++<U00026E99> /x8f/x79     <CJK>
+ <U4527>     /x8f/x7a     <CJK>
+ <U8573>     /x8f/x7b     <CJK>
+ <U4516>     /x8f/x7c     <CJK>
+@@ -994,11 +1302,11 @@ CHARMAP
+ <U00028625> /x8f/xa1     <CJK>
+ <U0002863B> /x8f/xa2     <CJK>
+ <U85C1>     /x8f/xa3     <CJK>
+-<UE3F0>     /x8f/xa4     <CJK>
++<U00027088> /x8f/xa4     <CJK>
+ <U8602>     /x8f/xa5     <CJK>
+-<UE3F2>     /x8f/xa6     <CJK>
++<U00021582> /x8f/xa6     <CJK>
+ <U000270CD> /x8f/xa7     <CJK>
+-<UE3F4>     /x8f/xa8     <CJK>
++<U0002F9B2> /x8f/xa8     <CJK>
+ <U456A>     /x8f/xa9     <CJK>
+ <U8628>     /x8f/xaa     <CJK>
+ <U3648>     /x8f/xab     <CJK>
+@@ -1046,7 +1354,7 @@ CHARMAP
+ <U00027A59> /x8f/xd7     <CJK>
+ <U7AE9>     /x8f/xd8     <CJK>
+ <U00027B3A> /x8f/xd9     <CJK>
+-<UE426>     /x8f/xda     <CJK>
++<U00023F8F> /x8f/xda     <CJK>
+ <U4713>     /x8f/xdb     <CJK>
+ <U00027B38> /x8f/xdc     <CJK>
+ <U717C>     /x8f/xdd     <CJK>
+@@ -1062,7 +1370,7 @@ CHARMAP
+ <U8B90>     /x8f/xe7     <CJK>
+ <U8B9B>     /x8f/xe8     <CJK>
+ <U8AAF>     /x8f/xe9     <CJK>
+-<UE436>     /x8f/xea     <CJK>
++<U000216DF> /x8f/xea     <CJK>
+ <U4615>     /x8f/xeb     <CJK>
+ <U884F>     /x8f/xec     <CJK>
+ <U8C9B>     /x8f/xed     <CJK>
+@@ -1080,14 +1388,14 @@ CHARMAP
+ <U8CDB>     /x8f/xf9     <CJK>
+ <U705C>     /x8f/xfa     <CJK>
+ <U8D11>     /x8f/xfb     <CJK>
+-<UE448>     /x8f/xfc     <CJK>
++<U00024CC9> /x8f/xfc     <CJK>
+ <U3ED0>     /x8f/xfd     <CJK>
+ <U8DA9>     /x90/x40     <CJK>
+ <U00028002> /x90/x41     <CJK>
+-<UE44D>     /x90/x42     <CJK>
++<U00021014> /x90/x42     <CJK>
+ <U0002498A> /x90/x43     <CJK>
+ <U3B7C>     /x90/x44     <CJK>
+-<UE450>     /x90/x45     <CJK>
++<U000281BC> /x90/x45     <CJK>
+ <U0002710C> /x90/x46     <CJK>
+ <U7AE7>     /x90/x47     <CJK>
+ <U8EAD>     /x90/x48     <CJK>
+@@ -1110,9 +1418,9 @@ CHARMAP
+ <U5EF8>     /x90/x59     <CJK>
+ <U00023262> /x90/x5a     <CJK>
+ <U8FF9>     /x90/x5b     <CJK>
+-<UE467>     /x90/x5c     <CJK>
+-<UE468>     /x90/x5d     <CJK>
+-<UE469>     /x90/x5e     <CJK>
++<U0002A014> /x90/x5c     <CJK>
++<U000286BC> /x90/x5d     <CJK>
++<U00028501> /x90/x5e     <CJK>
+ <U00022325> /x90/x5f     <CJK>
+ <U3980>     /x90/x60     <CJK>
+ <U00026ED7> /x90/x61     <CJK>
+@@ -1123,7 +1431,7 @@ CHARMAP
+ <U0002856C> /x90/x66     <CJK>
+ <U0002860B> /x90/x67     <CJK>
+ <U90A8>     /x90/x68     <CJK>
+-<UE474>     /x90/x69     <CJK>
++<U00028713> /x90/x69     <CJK>
+ <U90C4>     /x90/x6a     <CJK>
+ <U000286E6> /x90/x6b     <CJK>
+ <U90AE>     /x90/x6c     <CJK>
+@@ -1143,7 +1451,7 @@ CHARMAP
+ <U00023C9B> /x90/x7c     <CJK>
+ <U00028B0C> /x90/x7d     <CJK>
+ <U000255DB> /x90/x7e     <CJK>
+-<UE48A>     /x90/xa1     <CJK>
++<U00020D31> /x90/xa1     <CJK>
+ <U932C>     /x90/xa2     <CJK>
+ <U936B>     /x90/xa3     <CJK>
+ <U00028AE1> /x90/xa4     <CJK>
+@@ -1166,7 +1474,7 @@ CHARMAP
+ <U95A0>     /x90/xb5     <CJK>
+ <U6FF6>     /x90/xb6     <CJK>
+ <U42B9>     /x90/xb7     <CJK>
+-<UE4A1>     /x90/xb8     <CJK>
++<U0002267A> /x90/xb8     <CJK>
+ <U000286D8> /x90/xb9     <CJK>
+ <U0002127C> /x90/xba     <CJK>
+ <U00023E2E> /x90/xbb     <CJK>
+@@ -1198,11 +1506,11 @@ CHARMAP
+ <U4A0F>     /x90/xd5     <CJK>
+ <U453D>     /x90/xd6     <CJK>
+ <U4585>     /x90/xd7     <CJK>
+-<UE4C1>     /x90/xd8     <CJK>
++<U00024AE9> /x90/xd8     <CJK>
+ <U7075>     /x90/xd9     <CJK>
+ <U5B41>     /x90/xda     <CJK>
+ <U971B>     /x90/xdb     <CJK>
+-<UE4C6>     /x90/xdd     <CJK>
++<U000291D5> /x90/xdd     <CJK>
+ <U9757>     /x90/xde     <CJK>
+ <U5B4A>     /x90/xdf     <CJK>
+ <U000291EB> /x90/xe0     <CJK>
+@@ -1224,7 +1532,7 @@ CHARMAP
+ <U00029433> /x90/xf0     <CJK>
+ <U97F5>     /x90/xf2     <CJK>
+ <U0002941D> /x90/xf3     <CJK>
+-<UE4DD>     /x90/xf4     <CJK>
++<U0002797A> /x90/xf4     <CJK>
+ <U4AD1>     /x90/xf5     <CJK>
+ <U9834>     /x90/xf6     <CJK>
+ <U9833>     /x90/xf7     <CJK>
+@@ -1289,24 +1597,24 @@ CHARMAP
+ <U9DD4>     /x91/x73     <CJK>
+ <U00029FB7> /x91/x74     <CJK>
+ <U0002A192> /x91/x75     <CJK>
+-<UE51E>     /x91/x76     <CJK>
++<U0002A1AB> /x91/x76     <CJK>
+ <U0002A0E1> /x91/x77     <CJK>
+ <U0002A123> /x91/x78     <CJK>
+ <U0002A1DF> /x91/x79     <CJK>
+ <U9D7E>     /x91/x7a     <CJK>
+ <U9D83>     /x91/x7b     <CJK>
+-<UE524>     /x91/x7c     <CJK>
++<U0002A134> /x91/x7c     <CJK>
+ <U9E0E>     /x91/x7d     <CJK>
+ <U6888>     /x91/x7e     <CJK>
+ <U9DC4>     /x91/xa1     <CJK>
+-<UE528>     /x91/xa2     <CJK>
++<U0002215B> /x91/xa2     <CJK>
+ <U0002A193> /x91/xa3     <CJK>
+ <U0002A220> /x91/xa4     <CJK>
+ <U0002193B> /x91/xa5     <CJK>
+ <U0002A233> /x91/xa6     <CJK>
+ <U9D39>     /x91/xa7     <CJK>
+-<UE52E>     /x91/xa8     <CJK>
+-<UE52F>     /x91/xa9     <CJK>
++<U0002A0B9> /x91/xa8     <CJK>
++<U0002A2B4> /x91/xa9     <CJK>
+ <U9E90>     /x91/xaa     <CJK>
+ <U9E95>     /x91/xab     <CJK>
+ <U9E9E>     /x91/xac     <CJK>
+@@ -1367,10 +1675,10 @@ CHARMAP
+ <U7772>     /x91/xe4     <CJK>
+ <U7A43>     /x91/xe5     <CJK>
+ <U70D0>     /x91/xe6     <CJK>
+-<UE56D>     /x91/xe7     <CJK>
++<U00024473> /x91/xe7     <CJK>
+ <U000243F8> /x91/xe8     <CJK>
+ <U717E>     /x91/xe9     <CJK>
+-<UE570>     /x91/xea     <CJK>
++<U000217EF> /x91/xea     <CJK>
+ <U70A3>     /x91/xeb     <CJK>
+ <U000218BE> /x91/xec     <CJK>
+ <U00023599> /x91/xed     <CJK>
+@@ -1380,23 +1688,23 @@ CHARMAP
+ <U000217F8> /x91/xf1     <CJK>
+ <U3722>     /x91/xf2     <CJK>
+ <U000216FB> /x91/xf3     <CJK>
+-<UE57A>     /x91/xf4     <CJK>
++<U00021839> /x91/xf4     <CJK>
+ <U36E1>     /x91/xf5     <CJK>
+ <U00021774> /x91/xf6     <CJK>
+-<UE57D>     /x91/xf7     <CJK>
++<U000218D1> /x91/xf7     <CJK>
+ <U00025F4B> /x91/xf8     <CJK>
+ <U3723>     /x91/xf9     <CJK>
+ <U000216C0> /x91/xfa     <CJK>
+ <U575B>     /x91/xfb     <CJK>
+ <U00024A25> /x91/xfc     <CJK>
+ <U000213FE> /x91/xfd     <CJK>
+-<UE584>     /x91/xfe     <CJK>
++<U000212A8> /x91/xfe     <CJK>
+ <U000213C6> /x92/x40     <CJK>
+ <U000214B6> /x92/x41     <CJK>
+ <U8503>     /x92/x42     <CJK>
+ <U000236A6> /x92/x43     <CJK>
+ <U8455>     /x92/x45     <CJK>
+-<UE58B>     /x92/x46     <CJK>
++<U00024994> /x92/x46     <CJK>
+ <U00027165> /x92/x47     <CJK>
+ <U00023E31> /x92/x48     <CJK>
+ <U0002555C> /x92/x49     <CJK>
+@@ -1411,23 +1719,23 @@ CHARMAP
+ <U3C15>     /x92/x52     <CJK>
+ <U3DE7>     /x92/x53     <CJK>
+ <U586C>     /x92/x54     <CJK>
+-<UE59A>     /x92/x55     <CJK>
++<U00021922> /x92/x55     <CJK>
+ <U6810>     /x92/x56     <CJK>
+ <U4057>     /x92/x57     <CJK>
+ <U0002373F> /x92/x58     <CJK>
+-<UE59E>     /x92/x59     <CJK>
++<U000240E1> /x92/x59     <CJK>
+ <U0002408B> /x92/x5a     <CJK>
+-<UE5A0>     /x92/x5b     <CJK>
++<U0002410F> /x92/x5b     <CJK>
+ <U00026C21> /x92/x5c     <CJK>
+ <U54CB>     /x92/x5d     <CJK>
+ <U569E>     /x92/x5e     <CJK>
+ <U000266B1> /x92/x5f     <CJK>
+ <U5692>     /x92/x60     <CJK>
+-<UE5A6>     /x92/x61     <CJK>
++<U00020FDF> /x92/x61     <CJK>
+ <U00020BA8> /x92/x62     <CJK>
+ <U00020E0D> /x92/x63     <CJK>
+ <U93C6>     /x92/x64     <CJK>
+-<UE5AA>     /x92/x65     <CJK>
++<U00028B13> /x92/x65     <CJK>
+ <U939C>     /x92/x66     <CJK>
+ <U4EF8>     /x92/x67     <CJK>
+ <U512B>     /x92/x68     <CJK>
+@@ -1451,13 +1759,13 @@ CHARMAP
+ <U00028EB3> /x92/x7a     <CJK>
+ <U00020275> /x92/x7b     <CJK>
+ <U8ADA>     /x92/x7c     <CJK>
+-<UE5C2>     /x92/x7d     <CJK>
++<U0002020C> /x92/x7d     <CJK>
+ <U4E98>     /x92/x7e     <CJK>
+ <U50CD>     /x92/xa1     <CJK>
+ <U510D>     /x92/xa2     <CJK>
+ <U4FA2>     /x92/xa3     <CJK>
+ <U4F03>     /x92/xa4     <CJK>
+-<UE5C8>     /x92/xa5     <CJK>
++<U00024A0E> /x92/xa5     <CJK>
+ <U00023E8A> /x92/xa6     <CJK>
+ <U4F42>     /x92/xa7     <CJK>
+ <U502E>     /x92/xa8     <CJK>
+@@ -1469,7 +1777,7 @@ CHARMAP
+ <U50FC>     /x92/xae     <CJK>
+ <U6E76>     /x92/xb3     <CJK>
+ <U00023595> /x92/xb4     <CJK>
+-<UE5D8>     /x92/xb5     <CJK>
++<U00023E39> /x92/xb5     <CJK>
+ <U00023EBF> /x92/xb6     <CJK>
+ <U6D72>     /x92/xb7     <CJK>
+ <U00021884> /x92/xb8     <CJK>
+@@ -1493,7 +1801,7 @@ CHARMAP
+ <U0002438C> /x92/xcb     <CJK>
+ <U00020C20> /x92/xcc     <CJK>
+ <U000249AC> /x92/xcd     <CJK>
+-<UE5F1>     /x92/xce     <CJK>
++<U000210E4> /x92/xce     <CJK>
+ <U69D1>     /x92/xcf     <CJK>
+ <U00020E1D> /x92/xd0     <CJK>
+ <U3EDE>     /x92/xd2     <CJK>
+@@ -1532,10 +1840,10 @@ CHARMAP
+ <U5A7E>     /x92/xf3     <CJK>
+ <U5ACF>     /x92/xf4     <CJK>
+ <U5A12>     /x92/xf5     <CJK>
+-<UE619>     /x92/xf6     <CJK>
++<U00025946> /x92/xf6     <CJK>
+ <U000219F3> /x92/xf7     <CJK>
+ <U00021861> /x92/xf8     <CJK>
+-<UE61C>     /x92/xf9     <CJK>
++<U00024295> /x92/xf9     <CJK>
+ <U36F5>     /x92/xfa     <CJK>
+ <U6D05>     /x92/xfb     <CJK>
+ <U7443>     /x92/xfc     <CJK>
+@@ -1577,7 +1885,7 @@ CHARMAP
+ <U5F0C>     /x93/x61     <CJK>
+ <U5F0E>     /x93/x62     <CJK>
+ <U00021927> /x93/x63     <CJK>
+-<UE646>     /x93/x64     <CJK>
++<U000217AB> /x93/x64     <CJK>
+ <U5A6B>     /x93/x65     <CJK>
+ <U0002173B> /x93/x66     <CJK>
+ <U5B44>     /x93/x67     <CJK>
+@@ -1591,7 +1899,7 @@ CHARMAP
+ <U3EB8>     /x93/x6f     <CJK>
+ <U000225AF> /x93/x70     <CJK>
+ <U000225BE> /x93/x71     <CJK>
+-<UE654>     /x93/x72     <CJK>
++<U00029088> /x93/x72     <CJK>
+ <U00026F73> /x93/x73     <CJK>
+ <U61C0>     /x93/x74     <CJK>
+ <U0002003E> /x93/x75     <CJK>
+@@ -1603,7 +1911,7 @@ CHARMAP
+ <U00022C9B> /x93/x7b     <CJK>
+ <U00022D07> /x93/x7c     <CJK>
+ <U000246D4> /x93/x7d     <CJK>
+-<UE660>     /x93/x7e     <CJK>
++<U0002914D> /x93/x7e     <CJK>
+ <U6471>     /x93/xa1     <CJK>
+ <U00024665> /x93/xa2     <CJK>
+ <U00022B6A> /x93/xa3     <CJK>
+@@ -1613,7 +1921,7 @@ CHARMAP
+ <U000298EA> /x93/xa7     <CJK>
+ <U00022E78> /x93/xa8     <CJK>
+ <U6337>     /x93/xa9     <CJK>
+-<UE66A>     /x93/xaa     <CJK>
++<U0002A45B> /x93/xaa     <CJK>
+ <U64B6>     /x93/xab     <CJK>
+ <U6331>     /x93/xac     <CJK>
+ <U63D1>     /x93/xad     <CJK>
+@@ -1632,10 +1940,10 @@ CHARMAP
+ <U550D>     /x93/xba     <CJK>
+ <U000232E0> /x93/xbb     <CJK>
+ <U000218D9> /x93/xbc     <CJK>
+-<UE67D>     /x93/xbd     <CJK>
++<U0002943F> /x93/xbd     <CJK>
+ <U66CE>     /x93/xbe     <CJK>
+ <U00023289> /x93/xbf     <CJK>
+-<UE680>     /x93/xc0     <CJK>
++<U000231B3> /x93/xc0     <CJK>
+ <U3AE0>     /x93/xc1     <CJK>
+ <U4190>     /x93/xc2     <CJK>
+ <U00025584> /x93/xc3     <CJK>
+@@ -1649,7 +1957,7 @@ CHARMAP
+ <U0002182A> /x93/xcb     <CJK>
+ <U00023234> /x93/xcc     <CJK>
+ <U3464>     /x93/xcd     <CJK>
+-<UE68E>     /x93/xce     <CJK>
++<U0002320F> /x93/xce     <CJK>
+ <U00023182> /x93/xcf     <CJK>
+ <U000242C9> /x93/xd0     <CJK>
+ <U668E>     /x93/xd1     <CJK>
+@@ -1658,14 +1966,14 @@ CHARMAP
+ <U4B93>     /x93/xd4     <CJK>
+ <U6630>     /x93/xd5     <CJK>
+ <U00027870> /x93/xd6     <CJK>
+-<UE697>     /x93/xd7     <CJK>
++<U00021DEB> /x93/xd7     <CJK>
+ <U6663>     /x93/xd8     <CJK>
+ <U000232D2> /x93/xd9     <CJK>
+ <U000232E1> /x93/xda     <CJK>
+ <U661E>     /x93/xdb     <CJK>
+ <U00025872> /x93/xdc     <CJK>
+ <U38D1>     /x93/xdd     <CJK>
+-<UE69E>     /x93/xde     <CJK>
++<U0002383A> /x93/xde     <CJK>
+ <U000237BC> /x93/xdf     <CJK>
+ <U3B99>     /x93/xe0     <CJK>
+ <U000237A2> /x93/xe1     <CJK>
+@@ -1699,12 +2007,12 @@ CHARMAP
+ <U00028BEA> /x93/xfd     <CJK>
+ <U00028ACB> /x93/xfe     <CJK>
+ <U9289>     /x94/x40     <CJK>
+-<UE6C0>     /x94/x41     <CJK>
++<U0002801E> /x94/x41     <CJK>
+ <U000289DC> /x94/x42     <CJK>
+ <U9467>     /x94/x43     <CJK>
+ <U6DA5>     /x94/x44     <CJK>
+ <U6F0B>     /x94/x45     <CJK>
+-<UE6C5>     /x94/x46     <CJK>
++<U000249EC> /x94/x46     <CJK>
+ <U00023F7F> /x94/x48     <CJK>
+ <U3D8F>     /x94/x49     <CJK>
+ <U6E04>     /x94/x4a     <CJK>
+@@ -1728,8 +2036,8 @@ CHARMAP
+ <U000205EB> /x94/x5c     <CJK>
+ <U747A>     /x94/x5d     <CJK>
+ <U00023EF8> /x94/x5e     <CJK>
+-<UE6DE>     /x94/x5f     <CJK>
+-<UE6DF>     /x94/x60     <CJK>
++<U0002365F> /x94/x5f     <CJK>
++<U00024A4A> /x94/x60     <CJK>
+ <U00024917> /x94/x61     <CJK>
+ <U00025FE1> /x94/x62     <CJK>
+ <U3F06>     /x94/x63     <CJK>
+@@ -1763,7 +2071,7 @@ CHARMAP
+ <U3DCD>     /x94/xa1     <CJK>
+ <U00024A4E> /x94/xa2     <CJK>
+ <U3EFF>     /x94/xa3     <CJK>
+-<UE701>     /x94/xa4     <CJK>
++<U000249C5> /x94/xa4     <CJK>
+ <U000248F3> /x94/xa5     <CJK>
+ <U91FA>     /x94/xa6     <CJK>
+ <U5732>     /x94/xa7     <CJK>
+@@ -1781,7 +2089,7 @@ CHARMAP
+ <U00024697> /x94/xb3     <CJK>
+ <U00023781> /x94/xb4     <CJK>
+ <U3A5E>     /x94/xb5     <CJK>
+-<UE713>     /x94/xb6     <CJK>
++<U000248F0> /x94/xb6     <CJK>
+ <U7438>     /x94/xb7     <CJK>
+ <U749B>     /x94/xb8     <CJK>
+ <U3EBF>     /x94/xb9     <CJK>
+@@ -1799,7 +2107,7 @@ CHARMAP
+ <U73D0>     /x94/xc5     <CJK>
+ <U7959>     /x94/xc6     <CJK>
+ <U00027741> /x94/xc7     <CJK>
+-<UE725>     /x94/xc8     <CJK>
++<U000256E3> /x94/xc8     <CJK>
+ <U410E>     /x94/xc9     <CJK>
+ <U8496>     /x94/xcb     <CJK>
+ <U79A5>     /x94/xcc     <CJK>
+@@ -1822,11 +2130,11 @@ CHARMAP
+ <U3570>     /x94/xdd     <CJK>
+ <U36AA>     /x94/xde     <CJK>
+ <U000201D4> /x94/xdf     <CJK>
+-<UE73D>     /x94/xe0     <CJK>
++<U00020C0D> /x94/xe0     <CJK>
+ <U7AE2>     /x94/xe1     <CJK>
+ <U5A59>     /x94/xe2     <CJK>
+ <U000226F5> /x94/xe3     <CJK>
+-<UE741>     /x94/xe4     <CJK>
++<U00025AAF> /x94/xe4     <CJK>
+ <U00025A9C> /x94/xe5     <CJK>
+ <U5A0D>     /x94/xe6     <CJK>
+ <U0002025B> /x94/xe7     <CJK>
+@@ -1843,7 +2151,7 @@ CHARMAP
+ <U00025EA6> /x94/xf2     <CJK>
+ <U7CCD>     /x94/xf3     <CJK>
+ <U000249F9> /x94/xf4     <CJK>
+-<UE752>     /x94/xf5     <CJK>
++<U000217B0> /x94/xf5     <CJK>
+ <U7C8E>     /x94/xf6     <CJK>
+ <U7C7C>     /x94/xf7     <CJK>
+ <U7CAE>     /x94/xf8     <CJK>
+@@ -1854,18 +2162,18 @@ CHARMAP
+ <U7F4E>     /x94/xfd     <CJK>
+ <U00026261> /x94/xfe     <CJK>
+ <U0002615C> /x95/x40     <CJK>
+-<UE75D>     /x95/x41     <CJK>
++<U00027B48> /x95/x41     <CJK>
+ <U7D97>     /x95/x42     <CJK>
+ <U00025E82> /x95/x43     <CJK>
+ <U426A>     /x95/x44     <CJK>
+-<UE761>     /x95/x45     <CJK>
++<U00026B75> /x95/x45     <CJK>
+ <U00020916> /x95/x46     <CJK>
+ <U67D6>     /x95/x47     <CJK>
+ <U0002004E> /x95/x48     <CJK>
+ <U000235CF> /x95/x49     <CJK>
+ <U57C4>     /x95/x4a     <CJK>
+ <U00026412> /x95/x4b     <CJK>
+-<UE768>     /x95/x4c     <CJK>
++<U000263F8> /x95/x4c     <CJK>
+ <U00024962> /x95/x4d     <CJK>
+ <U7FDD>     /x95/x4e     <CJK>
+ <U7B27>     /x95/x4f     <CJK>
+@@ -1878,15 +2186,15 @@ CHARMAP
+ <U8645>     /x95/x56     <CJK>
+ <U9A63>     /x95/x57     <CJK>
+ <U6A1C>     /x95/x58     <CJK>
+-<UE775>     /x95/x59     <CJK>
++<U0002343F> /x95/x59     <CJK>
+ <U39E2>     /x95/x5a     <CJK>
+ <U000249F7> /x95/x5b     <CJK>
+ <U000265AD> /x95/x5c     <CJK>
+ <U9A1F>     /x95/x5d     <CJK>
+-<UE77A>     /x95/x5e     <CJK>
++<U000265A0> /x95/x5e     <CJK>
+ <U8480>     /x95/x5f     <CJK>
+ <U00027127> /x95/x60     <CJK>
+-<UE77D>     /x95/x61     <CJK>
++<U00026CD1> /x95/x61     <CJK>
+ <U44EA>     /x95/x62     <CJK>
+ <U8137>     /x95/x63     <CJK>
+ <U4402>     /x95/x64     <CJK>
+@@ -1905,14 +2213,14 @@ CHARMAP
+ <U0002721B> /x95/x71     <CJK>
+ <U5A86>     /x95/x72     <CJK>
+ <U417F>     /x95/x73     <CJK>
+-<UE790>     /x95/x74     <CJK>
++<U00021840> /x95/x74     <CJK>
+ <U5B2B>     /x95/x75     <CJK>
+ <U000218A1> /x95/x76     <CJK>
+ <U5AE4>     /x95/x77     <CJK>
+ <U000218D8> /x95/x78     <CJK>
+ <U86A0>     /x95/x79     <CJK>
+-%IRREVERSIBLE%<U8728>     /x95/x7a     <CJK>
+-<UE797>     /x95/x7b     <CJK>
++<U0002F9BC> /x95/x7a     <CJK>
++<U00023D8F> /x95/x7b     <CJK>
+ <U882D>     /x95/x7c     <CJK>
+ <U00027422> /x95/x7d     <CJK>
+ <U5A02>     /x95/x7e     <CJK>
+@@ -1927,7 +2235,7 @@ CHARMAP
+ <U8954>     /x95/xa9     <CJK>
+ <U00027785> /x95/xaa     <CJK>
+ <U00027784> /x95/xab     <CJK>
+-<UE7A6>     /x95/xac     <CJK>
++<U00028BF5> /x95/xac     <CJK>
+ <U00028BD9> /x95/xad     <CJK>
+ <U00028B9C> /x95/xae     <CJK>
+ <U000289F9> /x95/xaf     <CJK>
+@@ -1941,7 +2249,7 @@ CHARMAP
+ <U00029448> /x95/xb7     <CJK>
+ <U5F4D>     /x95/xb8     <CJK>
+ <U922B>     /x95/xb9     <CJK>
+-<UE7B4>     /x95/xba     <CJK>
++<U00024284> /x95/xba     <CJK>
+ <U65D4>     /x95/xbb     <CJK>
+ <U7129>     /x95/xbc     <CJK>
+ <U70C4>     /x95/xbd     <CJK>
+@@ -1978,10 +2286,10 @@ CHARMAP
+ <U9404>     /x95/xdd     <CJK>
+ <U00028A4B> /x95/xde     <CJK>
+ <U4062>     /x95/xdf     <CJK>
+-<UE7DA>     /x95/xe0     <CJK>
++<U00028AFC> /x95/xe0     <CJK>
+ <U9427>     /x95/xe1     <CJK>
+ <U00028C1D> /x95/xe2     <CJK>
+-<UE7DD>     /x95/xe3     <CJK>
++<U00028C3B> /x95/xe3     <CJK>
+ <U84E5>     /x95/xe4     <CJK>
+ <U8A2B>     /x95/xe5     <CJK>
+ <U9599>     /x95/xe6     <CJK>
+@@ -1992,16 +2300,16 @@ CHARMAP
+ <U7445>     /x95/xeb     <CJK>
+ <U3EC2>     /x95/xec     <CJK>
+ <U000248FF> /x95/xed     <CJK>
+-<UE7E8>     /x95/xee     <CJK>
+-<UE7E9>     /x95/xef     <CJK>
++<U00024A42> /x95/xee     <CJK>
++<U000243EA> /x95/xef     <CJK>
+ <U3EE7>     /x95/xf0     <CJK>
+ <U00023225> /x95/xf1     <CJK>
+ <U968F>     /x95/xf2     <CJK>
+-<UE7ED>     /x95/xf3     <CJK>
++<U00028EE7> /x95/xf3     <CJK>
+ <U00028E66> /x95/xf4     <CJK>
+ <U00028E65> /x95/xf5     <CJK>
+ <U3ECC>     /x95/xf6     <CJK>
+-<UE7F1>     /x95/xf7     <CJK>
++<U000249ED> /x95/xf7     <CJK>
+ <U00024A78> /x95/xf8     <CJK>
+ <U00023FEE> /x95/xf9     <CJK>
+ <U7412>     /x95/xfa     <CJK>
+@@ -2011,11 +2319,11 @@ CHARMAP
+ <U000290B0> /x95/xfe     <CJK>
+ <U6847>     /x96/x40     <CJK>
+ <U4A1D>     /x96/x41     <CJK>
+-<UE7FB>     /x96/x42     <CJK>
+-<UE7FC>     /x96/x43     <CJK>
++<U00029093> /x96/x42     <CJK>
++<U000257DF> /x96/x43     <CJK>
+ <U9368>     /x96/x45     <CJK>
+ <U00028989> /x96/x46     <CJK>
+-<UE800>     /x96/x47     <CJK>
++<U00028C26> /x96/x47     <CJK>
+ <U00028B2F> /x96/x48     <CJK>
+ <U000263BE> /x96/x49     <CJK>
+ <U92BA>     /x96/x4a     <CJK>
+@@ -2027,14 +2335,14 @@ CHARMAP
+ <U979B>     /x96/x50     <CJK>
+ <U9771>     /x96/x51     <CJK>
+ <U9938>     /x96/x52     <CJK>
+-<UE80C>     /x96/x53     <CJK>
++<U00020F26> /x96/x53     <CJK>
+ <U5DC1>     /x96/x54     <CJK>
+ <U00028BC5> /x96/x55     <CJK>
+ <U00024AB2> /x96/x56     <CJK>
+ <U981F>     /x96/x57     <CJK>
+ <U000294DA> /x96/x58     <CJK>
+ <U92F6>     /x96/x59     <CJK>
+-<UE813>     /x96/x5a     <CJK>
++<U000295D7> /x96/x5a     <CJK>
+ <U91E5>     /x96/x5b     <CJK>
+ <U44C0>     /x96/x5c     <CJK>
+ <U00028B50> /x96/x5d     <CJK>
+@@ -2048,21 +2356,21 @@ CHARMAP
+ <U8414>     /x96/x65     <CJK>
+ <U993B>     /x96/x66     <CJK>
+ <U994D>     /x96/x67     <CJK>
+-<UE821>     /x96/x68     <CJK>
++<U00027B06> /x96/x68     <CJK>
+ <U3DFD>     /x96/x69     <CJK>
+ <U999B>     /x96/x6a     <CJK>
+ <U4B6F>     /x96/x6b     <CJK>
+ <U99AA>     /x96/x6c     <CJK>
+ <U9A5C>     /x96/x6d     <CJK>
+ <U00028B65> /x96/x6e     <CJK>
+-<UE828>     /x96/x6f     <CJK>
++<U000258C8> /x96/x6f     <CJK>
+ <U6A8F>     /x96/x70     <CJK>
+ <U9A21>     /x96/x71     <CJK>
+ <U5AFE>     /x96/x72     <CJK>
+ <U9A2F>     /x96/x73     <CJK>
+-<UE82D>     /x96/x74     <CJK>
++<U000298F1> /x96/x74     <CJK>
+ <U4B90>     /x96/x75     <CJK>
+-<UE82F>     /x96/x76     <CJK>
++<U00029948> /x96/x76     <CJK>
+ <U99BC>     /x96/x77     <CJK>
+ <U4BBD>     /x96/x78     <CJK>
+ <U4B97>     /x96/x79     <CJK>
+@@ -2092,7 +2400,7 @@ CHARMAP
+ <U9BCF>     /x96/xb3     <CJK>
+ <U00029E2D> /x96/xb4     <CJK>
+ <U9B9F>     /x96/xb5     <CJK>
+-<UE84D>     /x96/xb6     <CJK>
++<U0002A1F5> /x96/xb6     <CJK>
+ <U0002A0FE> /x96/xb7     <CJK>
+ <U9D21>     /x96/xb8     <CJK>
+ <U4CAE>     /x96/xb9     <CJK>
+@@ -2100,15 +2408,15 @@ CHARMAP
+ <U9E18>     /x96/xbb     <CJK>
+ <U4CB0>     /x96/xbc     <CJK>
+ <U9D0C>     /x96/xbd     <CJK>
+-<UE855>     /x96/xbe     <CJK>
+-<UE856>     /x96/xbf     <CJK>
++<U0002A1B4> /x96/xbe     <CJK>
++<U0002A0ED> /x96/xbf     <CJK>
+ <U0002A0F3> /x96/xc0     <CJK>
+ <U0002992F> /x96/xc1     <CJK>
+ <U9DA5>     /x96/xc2     <CJK>
+ <U84BD>     /x96/xc3     <CJK>
+-<UE85B>     /x96/xc4     <CJK>
++<U00026E12> /x96/xc4     <CJK>
+ <U00026FDF> /x96/xc5     <CJK>
+-<UE85D>     /x96/xc6     <CJK>
++<U00026B82> /x96/xc6     <CJK>
+ <U85FC>     /x96/xc7     <CJK>
+ <U4533>     /x96/xc8     <CJK>
+ <U00026DA4> /x96/xc9     <CJK>
+@@ -2116,7 +2424,7 @@ CHARMAP
+ <U00026DF0> /x96/xcb     <CJK>
+ <U8420>     /x96/xcc     <CJK>
+ <U85EE>     /x96/xcd     <CJK>
+-<UE865>     /x96/xce     <CJK>
++<U00026E00> /x96/xce     <CJK>
+ <U000237D7> /x96/xcf     <CJK>
+ <U00026064> /x96/xd0     <CJK>
+ <U79E2>     /x96/xd1     <CJK>
+@@ -2149,7 +2457,7 @@ CHARMAP
+ <U6FD9>     /x96/xec     <CJK>
+ <U701E>     /x96/xee     <CJK>
+ <U5414>     /x96/xef     <CJK>
+-<UE887>     /x96/xf0     <CJK>
++<U000241B5> /x96/xf0     <CJK>
+ <U57BB>     /x96/xf1     <CJK>
+ <U58F3>     /x96/xf2     <CJK>
+ <U578A>     /x96/xf3     <CJK>
+@@ -2157,9 +2465,9 @@ CHARMAP
+ <U57D7>     /x96/xf5     <CJK>
+ <U7134>     /x96/xf6     <CJK>
+ <U34AF>     /x96/xf7     <CJK>
+-<UE88F>     /x96/xf8     <CJK>
++<U000241AC> /x96/xf8     <CJK>
+ <U71EB>     /x96/xf9     <CJK>
+-<UE891>     /x96/xfa     <CJK>
++<U00026C40> /x96/xfa     <CJK>
+ <U00024F97> /x96/xfb     <CJK>
+ <U000217B5> /x96/xfd     <CJK>
+ <U00028A49> /x96/xfe     <CJK>
+@@ -2174,10 +2482,10 @@ CHARMAP
+ <U93BB>     /x97/x48     <CJK>
+ <U93B8>     /x97/x49     <CJK>
+ <U000218D6> /x97/x4a     <CJK>
+-<UE8A1>     /x97/x4b     <CJK>
++<U00020F1D> /x97/x4b     <CJK>
+ <U8472>     /x97/x4c     <CJK>
+ <U00026CC0> /x97/x4d     <CJK>
+-<UE8A4>     /x97/x4e     <CJK>
++<U00021413> /x97/x4e     <CJK>
+ <U000242FA> /x97/x4f     <CJK>
+ <U00022C26> /x97/x50     <CJK>
+ <U000243C1> /x97/x51     <CJK>
+@@ -2207,8 +2515,8 @@ CHARMAP
+ <U000217D9> /x97/x69     <CJK>
+ <U00024A66> /x97/x6a     <CJK>
+ <U000203A7> /x97/x6b     <CJK>
+-<UE8C2>     /x97/x6c     <CJK>
+-<UE8C3>     /x97/x6d     <CJK>
++<U00021424> /x97/x6c     <CJK>
++<U000249E5> /x97/x6d     <CJK>
+ <U7448>     /x97/x6e     <CJK>
+ <U00024916> /x97/x6f     <CJK>
+ <U70A5>     /x97/x70     <CJK>
+@@ -2218,7 +2526,7 @@ CHARMAP
+ <U935F>     /x97/x74     <CJK>
+ <U000204FE> /x97/x75     <CJK>
+ <U9331>     /x97/x76     <CJK>
+-<UE8CD>     /x97/x77     <CJK>
++<U00028ACE> /x97/x77     <CJK>
+ <U00028A16> /x97/x78     <CJK>
+ <U9386>     /x97/x79     <CJK>
+ <U00028BE7> /x97/x7a     <CJK>
+@@ -2226,23 +2534,23 @@ CHARMAP
+ <U4935>     /x97/x7c     <CJK>
+ <U00028A82> /x97/x7d     <CJK>
+ <U716B>     /x97/x7e     <CJK>
+-<UE8D5>     /x97/xa1     <CJK>
+-<UE8D6>     /x97/xa2     <CJK>
++<U00024943> /x97/xa1     <CJK>
++<U00020CFF> /x97/xa2     <CJK>
+ <U56A4>     /x97/xa3     <CJK>
+ <U0002061A> /x97/xa4     <CJK>
+-<UE8D9>     /x97/xa5     <CJK>
+-<UE8DA>     /x97/xa6     <CJK>
++<U00020BEB> /x97/xa5     <CJK>
++<U00020CB8> /x97/xa6     <CJK>
+ <U5502>     /x97/xa7     <CJK>
+ <U79C4>     /x97/xa8     <CJK>
+ <U000217FA> /x97/xa9     <CJK>
+ <U7DFE>     /x97/xaa     <CJK>
+ <U000216C2> /x97/xab     <CJK>
+ <U00024A50> /x97/xac     <CJK>
+-<UE8E1>     /x97/xad     <CJK>
++<U00021852> /x97/xad     <CJK>
+ <U452E>     /x97/xae     <CJK>
+ <U9401>     /x97/xaf     <CJK>
+ <U370A>     /x97/xb0     <CJK>
+-<UE8E5>     /x97/xb1     <CJK>
++<U00028AC0> /x97/xb1     <CJK>
+ <U000249AD> /x97/xb2     <CJK>
+ <U59B0>     /x97/xb3     <CJK>
+ <U000218BF> /x97/xb4     <CJK>
+@@ -2267,7 +2575,7 @@ CHARMAP
+ <U0002139C> /x97/xc7     <CJK>
+ <U7175>     /x97/xc8     <CJK>
+ <U42FB>     /x97/xc9     <CJK>
+-<UE8FE>     /x97/xca     <CJK>
++<U00028218> /x97/xca     <CJK>
+ <U6E0F>     /x97/xcb     <CJK>
+ <U000290E4> /x97/xcc     <CJK>
+ <U44EB>     /x97/xcd     <CJK>
+@@ -2292,27 +2600,27 @@ CHARMAP
+ <U926E>     /x97/xe0     <CJK>
+ <U493E>     /x97/xe1     <CJK>
+ <U8F41>     /x97/xe2     <CJK>
+-<UE917>     /x97/xe3     <CJK>
+-<UE918>     /x97/xe4     <CJK>
++<U00028C1C> /x97/xe3     <CJK>
++<U00026BC0> /x97/xe4     <CJK>
+ <U5812>     /x97/xe5     <CJK>
+ <U57C8>     /x97/xe6     <CJK>
+ <U36D6>     /x97/xe7     <CJK>
+ <U00021452> /x97/xe8     <CJK>
+ <U70FE>     /x97/xe9     <CJK>
+ <U00024362> /x97/xea     <CJK>
+-<UE91F>     /x97/xeb     <CJK>
++<U00024A71> /x97/xeb     <CJK>
+ <U00022FE3> /x97/xec     <CJK>
+ <U000212B0> /x97/xed     <CJK>
+ <U000223BD> /x97/xee     <CJK>
+ <U68B9>     /x97/xef     <CJK>
+ <U6967>     /x97/xf0     <CJK>
+-<UE925>     /x97/xf1     <CJK>
++<U00021398> /x97/xf1     <CJK>
+ <U000234E5> /x97/xf2     <CJK>
+ <U00027BF4> /x97/xf3     <CJK>
+ <U000236DF> /x97/xf4     <CJK>
+ <U00028A83> /x97/xf5     <CJK>
+ <U000237D6> /x97/xf6     <CJK>
+-<UE92B>     /x97/xf7     <CJK>
++<U000233FA> /x97/xf7     <CJK>
+ <U00024C9F> /x97/xf8     <CJK>
+ <U6A1A>     /x97/xf9     <CJK>
+ <U000236AD> /x97/xfa     <CJK>
+@@ -2321,7 +2629,7 @@ CHARMAP
+ <U44DF>     /x97/xfd     <CJK>
+ <U44CE>     /x97/xfe     <CJK>
+ <U00026D26> /x98/x40     <CJK>
+-<UE934>     /x98/x41     <CJK>
++<U00026D51> /x98/x41     <CJK>
+ <U00026C82> /x98/x42     <CJK>
+ <U00026FDE> /x98/x43     <CJK>
+ <U6F17>     /x98/x44     <CJK>
+@@ -2349,7 +2657,7 @@ CHARMAP
+ <U000242A5> /x98/x5a     <CJK>
+ <U5A6E>     /x98/x5b     <CJK>
+ <U5A2B>     /x98/x5c     <CJK>
+-<UE950>     /x98/x5d     <CJK>
++<U00024293> /x98/x5d     <CJK>
+ <U6A2B>     /x98/x5e     <CJK>
+ <U00023EF9> /x98/x5f     <CJK>
+ <U00027736> /x98/x60     <CJK>
+@@ -2372,34 +2680,34 @@ CHARMAP
+ <U000243E9> /x98/x71     <CJK>
+ <U3DA5>     /x98/x72     <CJK>
+ <U6CDF>     /x98/x73     <CJK>
+-<UE967>     /x98/x74     <CJK>
++<U0002F825> /x98/x74     <CJK>
+ <U00024A4F> /x98/x75     <CJK>
+ <U7E65>     /x98/x76     <CJK>
+ <U59EB>     /x98/x77     <CJK>
+ <U5D2F>     /x98/x78     <CJK>
+ <U3DF3>     /x98/x79     <CJK>
+ <U5F5C>     /x98/x7a     <CJK>
+-<UE96E>     /x98/x7b     <CJK>
+-<UE96F>     /x98/x7c     <CJK>
++<U00024A5D> /x98/x7b     <CJK>
++<U000217DF> /x98/x7c     <CJK>
+ <U7DA4>     /x98/x7d     <CJK>
+ <U8426>     /x98/x7e     <CJK>
+ <U5485>     /x98/xa1     <CJK>
+-<UE973>     /x98/xa2     <CJK>
++<U00023AFA> /x98/xa2     <CJK>
+ <U00023300> /x98/xa3     <CJK>
+ <U00020214> /x98/xa4     <CJK>
+ <U577E>     /x98/xa5     <CJK>
+-<UE977>     /x98/xa6     <CJK>
++<U000208D5> /x98/xa6     <CJK>
+ <U00020619> /x98/xa7     <CJK>
+ <U3FE5>     /x98/xa8     <CJK>
+-<UE97A>     /x98/xa9     <CJK>
+-<UE97B>     /x98/xaa     <CJK>
++<U00021F9E> /x98/xa9     <CJK>
++<U0002A2B6> /x98/xaa     <CJK>
+ <U7003>     /x98/xab     <CJK>
+-<UE97D>     /x98/xac     <CJK>
++<U0002915B> /x98/xac     <CJK>
+ <U5D70>     /x98/xad     <CJK>
+ <U738F>     /x98/xae     <CJK>
+ <U7CD3>     /x98/xaf     <CJK>
+ <U00028A59> /x98/xb0     <CJK>
+-<UE982>     /x98/xb1     <CJK>
++<U00029420> /x98/xb1     <CJK>
+ <U4FC8>     /x98/xb2     <CJK>
+ <U7FE7>     /x98/xb3     <CJK>
+ <U72CD>     /x98/xb4     <CJK>
+@@ -2414,7 +2722,7 @@ CHARMAP
+ <U00027B18> /x98/xbd     <CJK>
+ <U906C>     /x98/xbe     <CJK>
+ <U71F5>     /x98/xbf     <CJK>
+-<UE991>     /x98/xc0     <CJK>
++<U000248F2> /x98/xc0     <CJK>
+ <U73E1>     /x98/xc1     <CJK>
+ <U81F6>     /x98/xc2     <CJK>
+ <U3ECA>     /x98/xc3     <CJK>
+@@ -2472,7 +2780,7 @@ CHARMAP
+ <U7851>     /x98/xf7     <CJK>
+ <U7866>     /x98/xf8     <CJK>
+ <U8448>     /x98/xf9     <CJK>
+-<UE9CB>     /x98/xfa     <CJK>
++<U00025535> /x98/xfa     <CJK>
+ <U7933>     /x98/xfb     <CJK>
+ <U6803>     /x98/xfc     <CJK>
+ <U7932>     /x98/xfd     <CJK>
+@@ -2694,7 +3002,7 @@ CHARMAP
+ <U4C6D>     /x9a/x79     <CJK>
+ <U9C20>     /x9a/x7a     <CJK>
+ <U376F>     /x9a/x7b     <CJK>
+-<UEAA9>     /x9a/x7c     <CJK>
++<U00021BC2> /x9a/x7c     <CJK>
+ <U9D49>     /x9a/x7d     <CJK>
+ <U9C3A>     /x9a/x7e     <CJK>
+ <U9EFE>     /x9a/xa1     <CJK>
+@@ -2716,242 +3024,242 @@ CHARMAP
+ <U9EF8>     /x9a/xb1     <CJK>
+ <U7AC8>     /x9a/xb2     <CJK>
+ <U9F44>     /x9a/xb3     <CJK>
+-<UEABF>     /x9a/xb4     <CJK>
+-<UEAC0>     /x9a/xb5     <CJK>
+-<UEAC1>     /x9a/xb6     <CJK>
++<U00020094> /x9a/xb4     <CJK>
++<U000202B7> /x9a/xb5     <CJK>
++<U000203A0> /x9a/xb6     <CJK>
+ <U691A>     /x9a/xb7     <CJK>
+ <U94C3>     /x9a/xb8     <CJK>
+ <U59AC>     /x9a/xb9     <CJK>
+-<UEAC5>     /x9a/xba     <CJK>
++<U000204D7> /x9a/xba     <CJK>
+ <U5840>     /x9a/xbb     <CJK>
+ <U94C1>     /x9a/xbc     <CJK>
+ <U37B9>     /x9a/xbd     <CJK>
+-<UEAC9>     /x9a/xbe     <CJK>
+-<UEACA>     /x9a/xbf     <CJK>
+-<UEACB>     /x9a/xc0     <CJK>
+-<UEACC>     /x9a/xc1     <CJK>
++<U000205D5> /x9a/xbe     <CJK>
++<U00020615> /x9a/xbf     <CJK>
++<U00020676> /x9a/xc0     <CJK>
++<U000216BA> /x9a/xc1     <CJK>
+ <U5757>     /x9a/xc2     <CJK>
+ <U7173>     /x9a/xc3     <CJK>
+-<UEACF>     /x9a/xc4     <CJK>
+-<UEAD0>     /x9a/xc5     <CJK>
+-<UEAD1>     /x9a/xc6     <CJK>
++<U00020AC2> /x9a/xc4     <CJK>
++<U00020ACD> /x9a/xc5     <CJK>
++<U00020BBF> /x9a/xc6     <CJK>
+ <U546A>     /x9a/xc7     <CJK>
+-<UEAD3>     /x9a/xc8     <CJK>
+-<UEAD4>     /x9a/xc9     <CJK>
++<U0002F83B> /x9a/xc8     <CJK>
++<U00020BCB> /x9a/xc9     <CJK>
+ <U549E>     /x9a/xca     <CJK>
+-<UEAD6>     /x9a/xcb     <CJK>
+-<UEAD7>     /x9a/xcc     <CJK>
++<U00020BFB> /x9a/xcb     <CJK>
++<U00020C3B> /x9a/xcc     <CJK>
+ <U00020C53> /x9a/xcd     <CJK>
+-<UEAD9>     /x9a/xce     <CJK>
+-<UEADA>     /x9a/xcf     <CJK>
++<U00020C65> /x9a/xce     <CJK>
++<U00020C7C> /x9a/xcf     <CJK>
+ <U60E7>     /x9a/xd0     <CJK>
+-<UEADC>     /x9a/xd1     <CJK>
++<U00020C8D> /x9a/xd1     <CJK>
+ <U567A>     /x9a/xd2     <CJK>
+-<UEADE>     /x9a/xd3     <CJK>
+-<UEADF>     /x9a/xd4     <CJK>
+-<UEAE0>     /x9a/xd5     <CJK>
+-<UEAE1>     /x9a/xd6     <CJK>
+-<UEAE2>     /x9a/xd7     <CJK>
+-<UEAE3>     /x9a/xd8     <CJK>
++<U00020CB5> /x9a/xd3     <CJK>
++<U00020CDD> /x9a/xd4     <CJK>
++<U00020CED> /x9a/xd5     <CJK>
++<U00020D6F> /x9a/xd6     <CJK>
++<U00020DB2> /x9a/xd7     <CJK>
++<U00020DC8> /x9a/xd8     <CJK>
+ <U6955>     /x9a/xd9     <CJK>
+ <U9C2F>     /x9a/xda     <CJK>
+ <U87A5>     /x9a/xdb     <CJK>
+-<UEAE7>     /x9a/xdc     <CJK>
++<U00020E04> /x9a/xdc     <CJK>
+ <U00020E0E> /x9a/xdd     <CJK>
+-<UEAE9>     /x9a/xde     <CJK>
+-<UEAEA>     /x9a/xdf     <CJK>
++<U00020ED7> /x9a/xde     <CJK>
++<U00020F90> /x9a/xdf     <CJK>
+ <U00020F2D> /x9a/xe0     <CJK>
+-<UEAEC>     /x9a/xe1     <CJK>
++<U00020E73> /x9a/xe1     <CJK>
+ <U5C20>     /x9a/xe2     <CJK>
+-<UEAEE>     /x9a/xe3     <CJK>
++<U00020FBC> /x9a/xe3     <CJK>
+ <U5E0B>     /x9a/xe4     <CJK>
+-<UEAF0>     /x9a/xe5     <CJK>
+-<UEAF1>     /x9a/xe6     <CJK>
++<U0002105C> /x9a/xe5     <CJK>
++<U0002104F> /x9a/xe6     <CJK>
+ <U00021076> /x9a/xe7     <CJK>
+ <U671E>     /x9a/xe8     <CJK>
+ <U0002107B> /x9a/xe9     <CJK>
+-<UEAF5>     /x9a/xea     <CJK>
+-<UEAF6>     /x9a/xeb     <CJK>
++<U00021088> /x9a/xea     <CJK>
++<U00021096> /x9a/xeb     <CJK>
+ <U3647>     /x9a/xec     <CJK>
+-<UEAF8>     /x9a/xed     <CJK>
+-<UEAF9>     /x9a/xee     <CJK>
+-<UEAFA>     /x9a/xef     <CJK>
+-<UEAFB>     /x9a/xf0     <CJK>
++<U000210BF> /x9a/xed     <CJK>
++<U000210D3> /x9a/xee     <CJK>
++<U0002112F> /x9a/xef     <CJK>
++<U0002113B> /x9a/xf0     <CJK>
+ <U5364>     /x9a/xf1     <CJK>
+ <U84AD>     /x9a/xf2     <CJK>
+ <U000212E3> /x9a/xf3     <CJK>
+-<UEAFF>     /x9a/xf4     <CJK>
+-<UEB00>     /x9a/xf5     <CJK>
++<U00021375> /x9a/xf4     <CJK>
++<U00021336> /x9a/xf5     <CJK>
+ <U8B81>     /x9a/xf6     <CJK>
+-<UEB02>     /x9a/xf7     <CJK>
+-<UEB03>     /x9a/xf8     <CJK>
+-<UEB04>     /x9a/xf9     <CJK>
+-<UEB05>     /x9a/xfa     <CJK>
++<U00021577> /x9a/xf7     <CJK>
++<U00021619> /x9a/xf8     <CJK>
++<U000217C3> /x9a/xf9     <CJK>
++<U000217C7> /x9a/xfa     <CJK>
+ <U4E78>     /x9a/xfb     <CJK>
+ <U70BB>     /x9a/xfc     <CJK>
+-<UEB08>     /x9a/xfd     <CJK>
+-<UEB09>     /x9a/xfe     <CJK>
+-<UEB0A>     /x9b/x40     <CJK>
+-<UEB0B>     /x9b/x41     <CJK>
+-<UEB0C>     /x9b/x42     <CJK>
+-<UEB0D>     /x9b/x43     <CJK>
+-<UEB0E>     /x9b/x44     <CJK>
+-<UEB0F>     /x9b/x45     <CJK>
++<U0002182D> /x9a/xfd     <CJK>
++<U0002196A> /x9a/xfe     <CJK>
++<U00021A2D> /x9b/x40     <CJK>
++<U00021A45> /x9b/x41     <CJK>
++<U00021C2A> /x9b/x42     <CJK>
++<U00021C70> /x9b/x43     <CJK>
++<U00021CAC> /x9b/x44     <CJK>
++<U00021EC8> /x9b/x45     <CJK>
+ <U62C3>     /x9b/x46     <CJK>
+ <U00021ED5> /x9b/x47     <CJK>
+-<UEB12>     /x9b/x48     <CJK>
++<U00021F15> /x9b/x48     <CJK>
+ <U7198>     /x9b/x49     <CJK>
+ <U6855>     /x9b/x4a     <CJK>
+-<UEB15>     /x9b/x4b     <CJK>
++<U00022045> /x9b/x4b     <CJK>
+ <U69E9>     /x9b/x4c     <CJK>
+ <U36C8>     /x9b/x4d     <CJK>
+ <U0002227C> /x9b/x4e     <CJK>
+-<UEB19>     /x9b/x4f     <CJK>
+-<UEB1A>     /x9b/x50     <CJK>
+-<UEB1B>     /x9b/x51     <CJK>
+-<UEB1C>     /x9b/x52     <CJK>
+-<UEB1D>     /x9b/x53     <CJK>
++<U000223D7> /x9b/x4f     <CJK>
++<U000223FA> /x9b/x50     <CJK>
++<U0002272A> /x9b/x51     <CJK>
++<U00022871> /x9b/x52     <CJK>
++<U0002294F> /x9b/x53     <CJK>
+ <U82FD>     /x9b/x54     <CJK>
+-<UEB1F>     /x9b/x55     <CJK>
+-<UEB20>     /x9b/x56     <CJK>
++<U00022967> /x9b/x55     <CJK>
++<U00022993> /x9b/x56     <CJK>
+ <U00022AD5> /x9b/x57     <CJK>
+ <U89A5>     /x9b/x58     <CJK>
+-<UEB23>     /x9b/x59     <CJK>
++<U00022AE8> /x9b/x59     <CJK>
+ <U8FA0>     /x9b/x5a     <CJK>
+-<UEB25>     /x9b/x5b     <CJK>
++<U00022B0E> /x9b/x5b     <CJK>
+ <U97B8>     /x9b/x5c     <CJK>
+-<UEB27>     /x9b/x5d     <CJK>
++<U00022B3F> /x9b/x5d     <CJK>
+ <U9847>     /x9b/x5e     <CJK>
+ <U9ABD>     /x9b/x5f     <CJK>
+-<UEB2A>     /x9b/x60     <CJK>
+-<UEB2C>     /x9b/x62     <CJK>
+-<UEB2D>     /x9b/x63     <CJK>
+-<UEB2E>     /x9b/x64     <CJK>
++<U00022C4C> /x9b/x60     <CJK>
++<U00022C88> /x9b/x62     <CJK>
++<U00022CB7> /x9b/x63     <CJK>
++<U00025BE8> /x9b/x64     <CJK>
+ <U00022D08> /x9b/x65     <CJK>
+-<UEB30>     /x9b/x66     <CJK>
+-<UEB31>     /x9b/x67     <CJK>
+-<UEB32>     /x9b/x68     <CJK>
+-<UEB33>     /x9b/x69     <CJK>
+-<UEB34>     /x9b/x6a     <CJK>
+-<UEB35>     /x9b/x6b     <CJK>
+-<UEB36>     /x9b/x6c     <CJK>
+-<UEB37>     /x9b/x6d     <CJK>
+-<UEB38>     /x9b/x6e     <CJK>
+-<UEB39>     /x9b/x6f     <CJK>
++<U00022D12> /x9b/x66     <CJK>
++<U00022DB7> /x9b/x67     <CJK>
++<U00022D95> /x9b/x68     <CJK>
++<U00022E42> /x9b/x69     <CJK>
++<U00022F74> /x9b/x6a     <CJK>
++<U00022FCC> /x9b/x6b     <CJK>
++<U00023033> /x9b/x6c     <CJK>
++<U00023066> /x9b/x6d     <CJK>
++<U0002331F> /x9b/x6e     <CJK>
++<U000233DE> /x9b/x6f     <CJK>
+ <U5FB1>     /x9b/x70     <CJK>
+ <U6648>     /x9b/x71     <CJK>
+ <U66BF>     /x9b/x72     <CJK>
+-<UEB3D>     /x9b/x73     <CJK>
+-<UEB3E>     /x9b/x74     <CJK>
+-<UEB3F>     /x9b/x75     <CJK>
++<U00027A79> /x9b/x73     <CJK>
++<U00023567> /x9b/x74     <CJK>
++<U000235F3> /x9b/x75     <CJK>
+ <U000249BA> /x9b/x77     <CJK>
+-<UEB43>     /x9b/x79     <CJK>
+-<UEB44>     /x9b/x7a     <CJK>
++<U0002361A> /x9b/x79     <CJK>
++<U00023716> /x9b/x7a     <CJK>
+ <U00020346> /x9b/x7c     <CJK>
+ <U58B5>     /x9b/x7d     <CJK>
+ <U670E>     /x9b/x7e     <CJK>
+ <U6918>     /x9b/xa1     <CJK>
+-<UEB4A>     /x9b/xa2     <CJK>
++<U00023AA7> /x9b/xa2     <CJK>
+ <U00027657> /x9b/xa3     <CJK>
+ <U00025FE2> /x9b/xa4     <CJK>
+-<UEB4D>     /x9b/xa5     <CJK>
+-<UEB4E>     /x9b/xa6     <CJK>
++<U00023E11> /x9b/xa5     <CJK>
++<U00023EB9> /x9b/xa6     <CJK>
+ <U000275FE> /x9b/xa7     <CJK>
+ <U0002209A> /x9b/xa8     <CJK>
+ <U48D0>     /x9b/xa9     <CJK>
+ <U4AB8>     /x9b/xaa     <CJK>
+-<UEB53>     /x9b/xab     <CJK>
++<U00024119> /x9b/xab     <CJK>
+ <U00028A9A> /x9b/xac     <CJK>
+-<UEB55>     /x9b/xad     <CJK>
+-<UEB56>     /x9b/xae     <CJK>
++<U000242EE> /x9b/xad     <CJK>
++<U0002430D> /x9b/xae     <CJK>
+ <U0002403B> /x9b/xaf     <CJK>
+-<UEB58>     /x9b/xb0     <CJK>
++<U00024334> /x9b/xb0     <CJK>
+ <U00024396> /x9b/xb1     <CJK>
+-<UEB5A>     /x9b/xb2     <CJK>
+-<UEB5B>     /x9b/xb3     <CJK>
++<U00024A45> /x9b/xb2     <CJK>
++<U000205CA> /x9b/xb3     <CJK>
+ <U51D2>     /x9b/xb4     <CJK>
+ <U00020611> /x9b/xb5     <CJK>
+ <U599F>     /x9b/xb6     <CJK>
+ <U00021EA8> /x9b/xb7     <CJK>
+ <U3BBE>     /x9b/xb8     <CJK>
+ <U00023CFF> /x9b/xb9     <CJK>
+-<UEB62>     /x9b/xba     <CJK>
+-<UEB63>     /x9b/xbb     <CJK>
++<U00024404> /x9b/xba     <CJK>
++<U000244D6> /x9b/xbb     <CJK>
+ <U5788>     /x9b/xbc     <CJK>
+-<UEB65>     /x9b/xbd     <CJK>
++<U00024674> /x9b/xbd     <CJK>
+ <U399B>     /x9b/xbe     <CJK>
+-<UEB67>     /x9b/xbf     <CJK>
+-<UEB68>     /x9b/xc0     <CJK>
+-<UEB69>     /x9b/xc1     <CJK>
++<U0002472F> /x9b/xbf     <CJK>
++<U000285E8> /x9b/xc0     <CJK>
++<U000299C9> /x9b/xc1     <CJK>
+ <U3762>     /x9b/xc2     <CJK>
+ <U000221C3> /x9b/xc3     <CJK>
+ <U8B5E>     /x9b/xc4     <CJK>
+ <U00028B4E> /x9b/xc5     <CJK>
+-<UEB6F>     /x9b/xc7     <CJK>
+-<UEB70>     /x9b/xc8     <CJK>
+-<UEB71>     /x9b/xc9     <CJK>
++<U00024812> /x9b/xc7     <CJK>
++<U000248FB> /x9b/xc8     <CJK>
++<U00024A15> /x9b/xc9     <CJK>
+ <U7209>     /x9b/xca     <CJK>
+-<UEB73>     /x9b/xcb     <CJK>
++<U00024AC0> /x9b/xcb     <CJK>
+ <U00020C78> /x9b/xcc     <CJK>
+ <U5965>     /x9b/xcd     <CJK>
+-<UEB76>     /x9b/xce     <CJK>
+-<UEB77>     /x9b/xcf     <CJK>
++<U00024EA5> /x9b/xce     <CJK>
++<U00024F86> /x9b/xcf     <CJK>
+ <U00020779> /x9b/xd0     <CJK>
+ <U8EDA>     /x9b/xd1     <CJK>
+-<UEB7A>     /x9b/xd2     <CJK>
++<U0002502C> /x9b/xd2     <CJK>
+ <U528F>     /x9b/xd3     <CJK>
+ <U573F>     /x9b/xd4     <CJK>
+ <U7171>     /x9b/xd5     <CJK>
+-<UEB7E>     /x9b/xd6     <CJK>
+-<UEB7F>     /x9b/xd7     <CJK>
+-<UEB80>     /x9b/xd8     <CJK>
++<U00025299> /x9b/xd6     <CJK>
++<U00025419> /x9b/xd7     <CJK>
++<U00023F4A> /x9b/xd8     <CJK>
+ <U00024AA7> /x9b/xd9     <CJK>
+ <U55BC>     /x9b/xda     <CJK>
+-<UEB83>     /x9b/xdb     <CJK>
++<U00025446> /x9b/xdb     <CJK>
+ <U0002546E> /x9b/xdc     <CJK>
+ <U00026B52> /x9b/xdd     <CJK>
+ <U3473>     /x9b/xdf     <CJK>
+-<UEB88>     /x9b/xe0     <CJK>
++<U0002553F> /x9b/xe0     <CJK>
+ <U00027632> /x9b/xe1     <CJK>
+-<UEB8A>     /x9b/xe2     <CJK>
++<U0002555E> /x9b/xe2     <CJK>
+ <U4718>     /x9b/xe3     <CJK>
+-<UEB8C>     /x9b/xe4     <CJK>
++<U00025562> /x9b/xe4     <CJK>
+ <U00025566> /x9b/xe5     <CJK>
+ <U000257C7> /x9b/xe6     <CJK>
+ <U0002493F> /x9b/xe7     <CJK>
+-<UEB90>     /x9b/xe8     <CJK>
++<U0002585D> /x9b/xe8     <CJK>
+ <U5066>     /x9b/xe9     <CJK>
+ <U34FB>     /x9b/xea     <CJK>
+-<UEB93>     /x9b/xeb     <CJK>
+-<UEB95>     /x9b/xed     <CJK>
++<U000233CC> /x9b/xeb     <CJK>
++<U00025903> /x9b/xed     <CJK>
+ <U477C>     /x9b/xee     <CJK>
+ <U00028948> /x9b/xef     <CJK>
+ <U00025AAE> /x9b/xf0     <CJK>
+-<UEB99>     /x9b/xf1     <CJK>
++<U00025B89> /x9b/xf1     <CJK>
+ <U00025C06> /x9b/xf2     <CJK>
+-<UEB9B>     /x9b/xf3     <CJK>
++<U00021D90> /x9b/xf3     <CJK>
+ <U57A1>     /x9b/xf4     <CJK>
+ <U7151>     /x9b/xf5     <CJK>
+-<UEB9F>     /x9b/xf7     <CJK>
++<U00026102> /x9b/xf7     <CJK>
+ <U00027C12> /x9b/xf8     <CJK>
+ <U9056>     /x9b/xf9     <CJK>
+-<UEBA2>     /x9b/xfa     <CJK>
++<U000261B2> /x9b/xfa     <CJK>
+ <U00024F9A> /x9b/xfb     <CJK>
+ <U8B62>     /x9b/xfc     <CJK>
+-<UEBA5>     /x9b/xfd     <CJK>
+-<UEBA6>     /x9b/xfe     <CJK>
++<U00026402> /x9b/xfd     <CJK>
++<U0002644A> /x9b/xfe     <CJK>
+ <U5D5B>     /x9c/x40     <CJK>
+ <U00026BF7> /x9c/x41     <CJK>
+-<UEBAA>     /x9c/x43     <CJK>
+-<UEBAB>     /x9c/x44     <CJK>
++<U00026484> /x9c/x43     <CJK>
++<U0002191C> /x9c/x44     <CJK>
+ <U8AEA>     /x9c/x45     <CJK>
+ <U000249F6> /x9c/x46     <CJK>
+-<UEBAE>     /x9c/x47     <CJK>
++<U00026488> /x9c/x47     <CJK>
+ <U00023FEF> /x9c/x48     <CJK>
+ <U00026512> /x9c/x49     <CJK>
+ <U4BC0>     /x9c/x4a     <CJK>
+-<UEBB2>     /x9c/x4b     <CJK>
+-<UEBB3>     /x9c/x4c     <CJK>
++<U000265BF> /x9c/x4b     <CJK>
++<U000266B5> /x9c/x4c     <CJK>
+ <U0002271B> /x9c/x4d     <CJK>
+ <U9465>     /x9c/x4e     <CJK>
+ <U000257E1> /x9c/x4f     <CJK>
+@@ -2960,68 +3268,68 @@ CHARMAP
+ <U0002F8CD> /x9c/x52     <CJK>
+ <U56B9>     /x9c/x54     <CJK>
+ <U00024521> /x9c/x55     <CJK>
+-<UEBBD>     /x9c/x56     <CJK>
++<U000266FC> /x9c/x56     <CJK>
+ <U4E6A>     /x9c/x57     <CJK>
+-<UEBBF>     /x9c/x58     <CJK>
++<U00024934> /x9c/x58     <CJK>
+ <U9656>     /x9c/x59     <CJK>
+ <U6D8F>     /x9c/x5a     <CJK>
+ <U00026CBD> /x9c/x5b     <CJK>
+ <U3618>     /x9c/x5c     <CJK>
+ <U8977>     /x9c/x5d     <CJK>
+-<UEBC5>     /x9c/x5e     <CJK>
++<U00026799> /x9c/x5e     <CJK>
+ <U0002686E> /x9c/x5f     <CJK>
+ <U00026411> /x9c/x60     <CJK>
+ <U0002685E> /x9c/x61     <CJK>
+-<UEBCA>     /x9c/x63     <CJK>
++<U000268C7> /x9c/x63     <CJK>
+ <U7B42>     /x9c/x64     <CJK>
+-<UEBCC>     /x9c/x65     <CJK>
++<U000290C0> /x9c/x65     <CJK>
+ <U00020A11> /x9c/x66     <CJK>
+-<UEBCE>     /x9c/x67     <CJK>
+-<UEBD0>     /x9c/x69     <CJK>
++<U00026926> /x9c/x67     <CJK>
++<U00026939> /x9c/x69     <CJK>
+ <U7A45>     /x9c/x6a     <CJK>
+ <U000269FA> /x9c/x6c     <CJK>
+ <U9A26>     /x9c/x6d     <CJK>
+-<UEBD5>     /x9c/x6e     <CJK>
++<U00026A2D> /x9c/x6e     <CJK>
+ <U365F>     /x9c/x6f     <CJK>
+-<UEBD7>     /x9c/x70     <CJK>
+-<UEBD8>     /x9c/x71     <CJK>
++<U00026469> /x9c/x70     <CJK>
++<U00020021> /x9c/x71     <CJK>
+ <U7983>     /x9c/x72     <CJK>
+-<UEBDA>     /x9c/x73     <CJK>
+-<UEBDB>     /x9c/x74     <CJK>
++<U00026A34> /x9c/x73     <CJK>
++<U00026B5B> /x9c/x74     <CJK>
+ <U5D2C>     /x9c/x75     <CJK>
+-<UEBDD>     /x9c/x76     <CJK>
+-<UEBDF>     /x9c/x78     <CJK>
++<U00023519> /x9c/x76     <CJK>
++<U00026B9D> /x9c/x78     <CJK>
+ <U46D0>     /x9c/x79     <CJK>
+-<UEBE1>     /x9c/x7a     <CJK>
++<U00026CA4> /x9c/x7a     <CJK>
+ <U753B>     /x9c/x7b     <CJK>
+ <U8865>     /x9c/x7c     <CJK>
+-<UEBE4>     /x9c/x7d     <CJK>
++<U00026DAE> /x9c/x7d     <CJK>
+ <U58B6>     /x9c/x7e     <CJK>
+ <U371C>     /x9c/xa1     <CJK>
+ <U0002258D> /x9c/xa2     <CJK>
+-<UEBE8>     /x9c/xa3     <CJK>
+-<UEBE9>     /x9c/xa4     <CJK>
++<U0002704B> /x9c/xa3     <CJK>
++<U000271CD> /x9c/xa4     <CJK>
+ <U3C54>     /x9c/xa5     <CJK>
+-<UEBEB>     /x9c/xa6     <CJK>
+-<UEBEC>     /x9c/xa7     <CJK>
++<U00027280> /x9c/xa6     <CJK>
++<U00027285> /x9c/xa7     <CJK>
+ <U9281>     /x9c/xa8     <CJK>
+ <U0002217A> /x9c/xa9     <CJK>
+-<UEBEF>     /x9c/xaa     <CJK>
++<U0002728B> /x9c/xaa     <CJK>
+ <U9330>     /x9c/xab     <CJK>
+ <U000272E6> /x9c/xac     <CJK>
+-<UEBF2>     /x9c/xad     <CJK>
++<U000249D0> /x9c/xad     <CJK>
+ <U6C39>     /x9c/xae     <CJK>
+ <U949F>     /x9c/xaf     <CJK>
+-<UEBF5>     /x9c/xb0     <CJK>
++<U00027450> /x9c/xb0     <CJK>
+ <U00020EF8> /x9c/xb1     <CJK>
+ <U8827>     /x9c/xb2     <CJK>
+ <U88F5>     /x9c/xb3     <CJK>
+-<UEBF9>     /x9c/xb4     <CJK>
+-<UEBFA>     /x9c/xb5     <CJK>
++<U00022926> /x9c/xb4     <CJK>
++<U00028473> /x9c/xb5     <CJK>
+ <U000217B1> /x9c/xb6     <CJK>
+ <U6EB8>     /x9c/xb7     <CJK>
+ <U00024A2A> /x9c/xb8     <CJK>
+-<UEBFE>     /x9c/xb9     <CJK>
++<U00021820> /x9c/xb9     <CJK>
+ <U39A4>     /x9c/xba     <CJK>
+ <U36B9>     /x9c/xbb     <CJK>
+ <U453F>     /x9c/xbe     <CJK>
+@@ -3029,26 +3337,26 @@ CHARMAP
+ <U00029CAD> /x9c/xc0     <CJK>
+ <U000298A4> /x9c/xc1     <CJK>
+ <U8943>     /x9c/xc2     <CJK>
+-<UEC08>     /x9c/xc3     <CJK>
+-<UEC09>     /x9c/xc4     <CJK>
++<U000277CC> /x9c/xc3     <CJK>
++<U00027858> /x9c/xc4     <CJK>
+ <U56D6>     /x9c/xc5     <CJK>
+ <U40DF>     /x9c/xc6     <CJK>
+ <U0002160A> /x9c/xc7     <CJK>
+ <U39A1>     /x9c/xc8     <CJK>
+ <U0002372F> /x9c/xc9     <CJK>
+-<UEC0F>     /x9c/xca     <CJK>
++<U000280E8> /x9c/xca     <CJK>
+ <U000213C5> /x9c/xcb     <CJK>
+ <U71AD>     /x9c/xcc     <CJK>
+ <U8366>     /x9c/xcd     <CJK>
+-<UEC13>     /x9c/xce     <CJK>
++<U000279DD> /x9c/xce     <CJK>
+ <U000291A8> /x9c/xcf     <CJK>
+ <U4CB7>     /x9c/xd1     <CJK>
+ <U000270AF> /x9c/xd2     <CJK>
+ <U000289AB> /x9c/xd3     <CJK>
+-<UEC19>     /x9c/xd4     <CJK>
+-<UEC1A>     /x9c/xd5     <CJK>
+-<UEC1B>     /x9c/xd6     <CJK>
+-<UEC1C>     /x9c/xd7     <CJK>
++<U000279FD> /x9c/xd4     <CJK>
++<U00027A0A> /x9c/xd5     <CJK>
++<U00027B0B> /x9c/xd6     <CJK>
++<U00027D66> /x9c/xd7     <CJK>
+ <U0002417A> /x9c/xd8     <CJK>
+ <U7B43>     /x9c/xd9     <CJK>
+ <U797E>     /x9c/xda     <CJK>
+@@ -3056,21 +3364,21 @@ CHARMAP
+ <U6FB5>     /x9c/xdc     <CJK>
+ <U0002A2DF> /x9c/xdd     <CJK>
+ <U6A03>     /x9c/xde     <CJK>
+-<UEC24>     /x9c/xdf     <CJK>
++<U00028318> /x9c/xdf     <CJK>
+ <U53A2>     /x9c/xe0     <CJK>
+-<UEC26>     /x9c/xe1     <CJK>
++<U00026E07> /x9c/xe1     <CJK>
+ <U93BF>     /x9c/xe2     <CJK>
+ <U6836>     /x9c/xe3     <CJK>
+ <U975D>     /x9c/xe4     <CJK>
+ <U0002816F> /x9c/xe5     <CJK>
+-<UEC2B>     /x9c/xe6     <CJK>
++<U00028023> /x9c/xe6     <CJK>
+ <U000269B5> /x9c/xe7     <CJK>
+ <U000213ED> /x9c/xe8     <CJK>
+ <U0002322F> /x9c/xe9     <CJK>
+-<UEC2F>     /x9c/xea     <CJK>
++<U00028048> /x9c/xea     <CJK>
+ <U5D85>     /x9c/xeb     <CJK>
+ <U00028C30> /x9c/xec     <CJK>
+-<UEC32>     /x9c/xed     <CJK>
++<U00028083> /x9c/xed     <CJK>
+ <U5715>     /x9c/xee     <CJK>
+ <U9823>     /x9c/xef     <CJK>
+ <U00028949> /x9c/xf0     <CJK>
+@@ -3083,74 +3391,74 @@ CHARMAP
+ <U00023F81> /x9c/xf7     <CJK>
+ <U3C11>     /x9c/xf8     <CJK>
+ <U6736>     /x9c/xf9     <CJK>
+-<UEC3F>     /x9c/xfa     <CJK>
++<U00028090> /x9c/xfa     <CJK>
+ <U000280F4> /x9c/xfb     <CJK>
+ <U0002812E> /x9c/xfc     <CJK>
+ <U00021FA1> /x9c/xfd     <CJK>
+-<UEC43>     /x9c/xfe     <CJK>
+-<UEC44>     /x9d/x40     <CJK>
+-<UEC45>     /x9d/x41     <CJK>
+-<UEC46>     /x9d/x42     <CJK>
+-<UEC47>     /x9d/x43     <CJK>
+-<UEC48>     /x9d/x44     <CJK>
+-<UEC49>     /x9d/x45     <CJK>
++<U0002814F> /x9c/xfe     <CJK>
++<U00028189> /x9d/x40     <CJK>
++<U000281AF> /x9d/x41     <CJK>
++<U0002821A> /x9d/x42     <CJK>
++<U00028306> /x9d/x43     <CJK>
++<U0002832F> /x9d/x44     <CJK>
++<U0002838A> /x9d/x45     <CJK>
+ <U35CA>     /x9d/x46     <CJK>
+-<UEC4B>     /x9d/x47     <CJK>
++<U00028468> /x9d/x47     <CJK>
+ <U000286AA> /x9d/x48     <CJK>
+ <U48FA>     /x9d/x49     <CJK>
+ <U63E6>     /x9d/x4a     <CJK>
+-<UEC4F>     /x9d/x4b     <CJK>
++<U00028956> /x9d/x4b     <CJK>
+ <U7808>     /x9d/x4c     <CJK>
+ <U9255>     /x9d/x4d     <CJK>
+-<UEC52>     /x9d/x4e     <CJK>
++<U000289B8> /x9d/x4e     <CJK>
+ <U43F2>     /x9d/x4f     <CJK>
+-<UEC54>     /x9d/x50     <CJK>
++<U000289E7> /x9d/x50     <CJK>
+ <U43DF>     /x9d/x51     <CJK>
+-<UEC56>     /x9d/x52     <CJK>
+-<UEC57>     /x9d/x53     <CJK>
+-<UEC58>     /x9d/x54     <CJK>
++<U000289E8> /x9d/x52     <CJK>
++<U00028B46> /x9d/x53     <CJK>
++<U00028BD4> /x9d/x54     <CJK>
+ <U59F8>     /x9d/x55     <CJK>
+-<UEC5A>     /x9d/x56     <CJK>
+-<UEC5C>     /x9d/x58     <CJK>
+-<UEC5D>     /x9d/x59     <CJK>
++<U00028C09> /x9d/x56     <CJK>
++<U00028FC5> /x9d/x58     <CJK>
++<U000290EC> /x9d/x59     <CJK>
+ <U00029110> /x9d/x5b     <CJK>
+-<UEC60>     /x9d/x5c     <CJK>
++<U0002913C> /x9d/x5c     <CJK>
+ <U3DF7>     /x9d/x5d     <CJK>
+-<UEC62>     /x9d/x5e     <CJK>
+-<UEC63>     /x9d/x5f     <CJK>
++<U0002915E> /x9d/x5e     <CJK>
++<U00024ACA> /x9d/x5f     <CJK>
+ <U8FD0>     /x9d/x60     <CJK>
+ <U728F>     /x9d/x61     <CJK>
+ <U568B>     /x9d/x62     <CJK>
+-<UEC67>     /x9d/x63     <CJK>
++<U000294E7> /x9d/x63     <CJK>
+ <U000295E9> /x9d/x64     <CJK>
+-<UEC69>     /x9d/x65     <CJK>
+-<UEC6A>     /x9d/x66     <CJK>
+-<UEC6B>     /x9d/x67     <CJK>
+-<UEC6C>     /x9d/x68     <CJK>
+-<UEC6D>     /x9d/x69     <CJK>
++<U000295B0> /x9d/x65     <CJK>
++<U000295B8> /x9d/x66     <CJK>
++<U00029732> /x9d/x67     <CJK>
++<U000298D1> /x9d/x68     <CJK>
++<U00029949> /x9d/x69     <CJK>
+ <U0002996A> /x9d/x6a     <CJK>
+-<UEC6F>     /x9d/x6b     <CJK>
+-<UEC70>     /x9d/x6c     <CJK>
++<U000299C3> /x9d/x6b     <CJK>
++<U00029A28> /x9d/x6c     <CJK>
+ <U00029B0E> /x9d/x6d     <CJK>
+-<UEC72>     /x9d/x6e     <CJK>
+-<UEC73>     /x9d/x6f     <CJK>
++<U00029D5A> /x9d/x6e     <CJK>
++<U00029D9B> /x9d/x6f     <CJK>
+ <U7E9F>     /x9d/x70     <CJK>
+-<UEC75>     /x9d/x71     <CJK>
++<U00029EF8> /x9d/x71     <CJK>
+ <U00029F23> /x9d/x72     <CJK>
+ <U4CA4>     /x9d/x73     <CJK>
+ <U9547>     /x9d/x74     <CJK>
+-<UEC79>     /x9d/x75     <CJK>
++<U0002A293> /x9d/x75     <CJK>
+ <U71A2>     /x9d/x76     <CJK>
+-<UEC7B>     /x9d/x77     <CJK>
++<U0002A2FF> /x9d/x77     <CJK>
+ <U4D91>     /x9d/x78     <CJK>
+ <U9012>     /x9d/x79     <CJK>
+-<UEC7E>     /x9d/x7a     <CJK>
++<U0002A5CB> /x9d/x7a     <CJK>
+ <U4D9C>     /x9d/x7b     <CJK>
+ <U00020C9C> /x9d/x7c     <CJK>
+ <U8FBE>     /x9d/x7d     <CJK>
+ <U55C1>     /x9d/x7e     <CJK>
+ <U8FBA>     /x9d/xa1     <CJK>
+-<UEC84>     /x9d/xa2     <CJK>
++<U000224B0> /x9d/xa2     <CJK>
+ <U8FB9>     /x9d/xa3     <CJK>
+ <U00024A93> /x9d/xa4     <CJK>
+ <U4509>     /x9d/xa5     <CJK>
+@@ -3160,14 +3468,14 @@ CHARMAP
+ <U4EEA>     /x9d/xa9     <CJK>
+ <U34E4>     /x9d/xaa     <CJK>
+ <U00028B2C> /x9d/xab     <CJK>
+-<UEC8E>     /x9d/xac     <CJK>
++<U0002789D> /x9d/xac     <CJK>
+ <U373A>     /x9d/xad     <CJK>
+ <U8E80>     /x9d/xae     <CJK>
+ <U000217F5> /x9d/xaf     <CJK>
+-<UEC92>     /x9d/xb0     <CJK>
++<U00028024> /x9d/xb0     <CJK>
+ <U00028B6C> /x9d/xb1     <CJK>
+ <U00028B99> /x9d/xb2     <CJK>
+-<UEC95>     /x9d/xb3     <CJK>
++<U00027A3E> /x9d/xb3     <CJK>
+ <U000266AF> /x9d/xb4     <CJK>
+ <U3DEB>     /x9d/xb5     <CJK>
+ <U00027655> /x9d/xb6     <CJK>
+@@ -3192,14 +3500,14 @@ CHARMAP
+ <U541A>     /x9d/xca     <CJK>
+ <U00025311> /x9d/xcb     <CJK>
+ <U3DC6>     /x9d/xcc     <CJK>
+-<UECAF>     /x9d/xcd     <CJK>
++<U00029D98> /x9d/xcd     <CJK>
+ <U4C7D>     /x9d/xce     <CJK>
+ <U5622>     /x9d/xcf     <CJK>
+ <U561E>     /x9d/xd0     <CJK>
+ <U7F49>     /x9d/xd1     <CJK>
+ <U00025ED8> /x9d/xd2     <CJK>
+ <U5975>     /x9d/xd3     <CJK>
+-<UECB6>     /x9d/xd4     <CJK>
++<U00023D40> /x9d/xd4     <CJK>
+ <U8770>     /x9d/xd5     <CJK>
+ <U4E1C>     /x9d/xd6     <CJK>
+ <U00020FEA> /x9d/xd7     <CJK>
+@@ -3224,7 +3532,7 @@ CHARMAP
+ <U7962>     /x9d/xea     <CJK>
+ <U5643>     /x9d/xeb     <CJK>
+ <U5416>     /x9d/xec     <CJK>
+-<UECCF>     /x9d/xed     <CJK>
++<U00020E9D> /x9d/xed     <CJK>
+ <U35CE>     /x9d/xee     <CJK>
+ <U5605>     /x9d/xef     <CJK>
+ <U55F1>     /x9d/xf0     <CJK>
+@@ -3237,12 +3545,12 @@ CHARMAP
+ <U5497>     /x9d/xf7     <CJK>
+ <U5572>     /x9d/xf8     <CJK>
+ <U00020C41> /x9d/xf9     <CJK>
+-<UECDC>     /x9d/xfa     <CJK>
++<U00020C96> /x9d/xfa     <CJK>
+ <U5ED0>     /x9d/xfb     <CJK>
+ <U00025148> /x9d/xfc     <CJK>
+ <U00020E76> /x9d/xfd     <CJK>
+-<UECE0>     /x9d/xfe     <CJK>
+-<UECE1>     /x9e/x40     <CJK>
++<U00022C62> /x9d/xfe     <CJK>
++<U00020EA2> /x9e/x40     <CJK>
+ <U9EAB>     /x9e/x41     <CJK>
+ <U7D5A>     /x9e/x42     <CJK>
+ <U55DE>     /x9e/x43     <CJK>
+@@ -3257,9 +3565,9 @@ CHARMAP
+ <U63B9>     /x9e/x4c     <CJK>
+ <U63FE>     /x9e/x4d     <CJK>
+ <U5569>     /x9e/x4e     <CJK>
+-<UECF0>     /x9e/x4f     <CJK>
++<U00022B43> /x9e/x4f     <CJK>
+ <U9C72>     /x9e/x50     <CJK>
+-<UECF2>     /x9e/x51     <CJK>
++<U00022EB3> /x9e/x51     <CJK>
+ <U519A>     /x9e/x52     <CJK>
+ <U34DF>     /x9e/x53     <CJK>
+ <U00020DA7> /x9e/x54     <CJK>
+@@ -3269,7 +3577,7 @@ CHARMAP
+ <U5513>     /x9e/x58     <CJK>
+ <U7666>     /x9e/x59     <CJK>
+ <U8E2D>     /x9e/x5a     <CJK>
+-<UECFC>     /x9e/x5b     <CJK>
++<U0002688A> /x9e/x5b     <CJK>
+ <U75B1>     /x9e/x5c     <CJK>
+ <U80B6>     /x9e/x5d     <CJK>
+ <U8804>     /x9e/x5e     <CJK>
+@@ -3290,7 +3598,7 @@ CHARMAP
+ <U000241A3> /x9e/x6d     <CJK>
+ <U00027D73> /x9e/x6e     <CJK>
+ <U00026ED0> /x9e/x6f     <CJK>
+-<UED11>     /x9e/x70     <CJK>
++<U000272B6> /x9e/x70     <CJK>
+ <U9170>     /x9e/x71     <CJK>
+ <U000211D9> /x9e/x72     <CJK>
+ <U9208>     /x9e/x73     <CJK>
+@@ -3302,20 +3610,20 @@ CHARMAP
+ <U00021CA2> /x9e/x79     <CJK>
+ <U474E>     /x9e/x7a     <CJK>
+ <U00024FC2> /x9e/x7b     <CJK>
+-<UED1D>     /x9e/x7c     <CJK>
++<U00027FF9> /x9e/x7c     <CJK>
+ <U00020FEB> /x9e/x7d     <CJK>
+ <U40FA>     /x9e/x7e     <CJK>
+ <U9C5D>     /x9e/xa1     <CJK>
+ <U651F>     /x9e/xa2     <CJK>
+ <U00022DA0> /x9e/xa3     <CJK>
+ <U48F3>     /x9e/xa4     <CJK>
+-<UED24>     /x9e/xa5     <CJK>
++<U000247E0> /x9e/xa5     <CJK>
+ <U00029D7C> /x9e/xa6     <CJK>
+ <U00020FEC> /x9e/xa7     <CJK>
+ <U00020E0A> /x9e/xa8     <CJK>
+-<UED29>     /x9e/xaa     <CJK>
++<U000275A3> /x9e/xaa     <CJK>
+ <U00020FED> /x9e/xab     <CJK>
+-<UED2C>     /x9e/xad     <CJK>
++<U00026048> /x9e/xad     <CJK>
+ <U00021187> /x9e/xae     <CJK>
+ <U71A3>     /x9e/xaf     <CJK>
+ <U7E8E>     /x9e/xb0     <CJK>
+@@ -3330,13 +3638,13 @@ CHARMAP
+ <U39DC>     /x9e/xb9     <CJK>
+ <U537D>     /x9e/xba     <CJK>
+ <U36A5>     /x9e/xbb     <CJK>
+-<UED3B>     /x9e/xbc     <CJK>
++<U00024618> /x9e/xbc     <CJK>
+ <U589A>     /x9e/xbd     <CJK>
+ <U00024B6E> /x9e/xbe     <CJK>
+ <U822D>     /x9e/xbf     <CJK>
+ <U544B>     /x9e/xc0     <CJK>
+ <U57AA>     /x9e/xc1     <CJK>
+-<UED41>     /x9e/xc2     <CJK>
++<U00025A95> /x9e/xc2     <CJK>
+ <U00020979> /x9e/xc3     <CJK>
+ <U3A52>     /x9e/xc5     <CJK>
+ <U00022465> /x9e/xc6     <CJK>
+@@ -3349,10 +3657,10 @@ CHARMAP
+ <U4C5B>     /x9e/xcd     <CJK>
+ <U00024FA9> /x9e/xce     <CJK>
+ <U0002959E> /x9e/xcf     <CJK>
+-<UED4F>     /x9e/xd0     <CJK>
++<U00029FDE> /x9e/xd0     <CJK>
+ <U845C>     /x9e/xd1     <CJK>
+ <U00023DB6> /x9e/xd2     <CJK>
+-<UED52>     /x9e/xd3     <CJK>
++<U000272B2> /x9e/xd3     <CJK>
+ <U000267B3> /x9e/xd4     <CJK>
+ <U00023720> /x9e/xd5     <CJK>
+ <U632E>     /x9e/xd6     <CJK>
+@@ -3365,19 +3673,19 @@ CHARMAP
+ <U3E74>     /x9e/xdd     <CJK>
+ <U367A>     /x9e/xde     <CJK>
+ <U45E9>     /x9e/xdf     <CJK>
+-<UED5F>     /x9e/xe0     <CJK>
++<U0002048E> /x9e/xe0     <CJK>
+ <U7640>     /x9e/xe1     <CJK>
+ <U5AF0>     /x9e/xe2     <CJK>
+ <U00020EB6> /x9e/xe3     <CJK>
+ <U787A>     /x9e/xe4     <CJK>
+-<U47B6>     /x9e/xe5     <CJK>
++<U00027F2E> /x9e/xe5     <CJK>
+ <U58A7>     /x9e/xe6     <CJK>
+ <U40BF>     /x9e/xe7     <CJK>
+ <U567C>     /x9e/xe8     <CJK>
+ <U9B8B>     /x9e/xe9     <CJK>
+ <U5D74>     /x9e/xea     <CJK>
+ <U7654>     /x9e/xeb     <CJK>
+-<UED6B>     /x9e/xec     <CJK>
++<U0002A434> /x9e/xec     <CJK>
+ <U9E85>     /x9e/xed     <CJK>
+ <U4CE1>     /x9e/xee     <CJK>
+ <U37FB>     /x9e/xf0     <CJK>
+@@ -3388,7 +3696,7 @@ CHARMAP
+ <U000212A9> /x9e/xf6     <CJK>
+ <U57A7>     /x9e/xf7     <CJK>
+ <U00024963> /x9e/xf8     <CJK>
+-<UED78>     /x9e/xf9     <CJK>
++<U00029E06> /x9e/xf9     <CJK>
+ <U5234>     /x9e/xfa     <CJK>
+ <U000270AE> /x9e/xfb     <CJK>
+ <U35AD>     /x9e/xfc     <CJK>
+@@ -3399,16 +3707,16 @@ CHARMAP
+ <U0002176C> /x9f/x43     <CJK>
+ <U5C53>     /x9f/x44     <CJK>
+ <U64D3>     /x9f/x45     <CJK>
+-<UED84>     /x9f/x46     <CJK>
+-<UED85>     /x9f/x47     <CJK>
++<U000294D0> /x9f/x46     <CJK>
++<U00026335> /x9f/x47     <CJK>
+ <U00027164> /x9f/x48     <CJK>
+ <U86AD>     /x9f/x49     <CJK>
+-<UED88>     /x9f/x4a     <CJK>
++<U00020D28> /x9f/x4a     <CJK>
+ <U00026D22> /x9f/x4b     <CJK>
+ <U00024AE2> /x9f/x4c     <CJK>
+-<UED8B>     /x9f/x4d     <CJK>
++<U00020D71> /x9f/x4d     <CJK>
+ <U51FE>     /x9f/x4f     <CJK>
+-<UED8E>     /x9f/x50     <CJK>
++<U00021F0F> /x9f/x50     <CJK>
+ <U5D8E>     /x9f/x51     <CJK>
+ <U9703>     /x9f/x52     <CJK>
+ <U00021DD1> /x9f/x53     <CJK>
+@@ -3469,7 +3777,7 @@ CHARMAP
+ <U9681>     /x9f/xaf     <CJK>
+ <U915C>     /x9f/xb0     <CJK>
+ <U9151>     /x9f/xb2     <CJK>
+-<UEDCF>     /x9f/xb3     <CJK>
++<U00028E97> /x9f/xb3     <CJK>
+ <U637F>     /x9f/xb4     <CJK>
+ <U00026D23> /x9f/xb5     <CJK>
+ <U6ACA>     /x9f/xb6     <CJK>
+@@ -3480,7 +3788,7 @@ CHARMAP
+ <U000203FC> /x9f/xbb     <CJK>
+ <U734F>     /x9f/xbc     <CJK>
+ <U7C70>     /x9f/xbd     <CJK>
+-<UEDDA>     /x9f/xbe     <CJK>
++<U00025C21> /x9f/xbe     <CJK>
+ <U00023CFD> /x9f/xbf     <CJK>
+ <U00024919> /x9f/xc1     <CJK>
+ <U76D6>     /x9f/xc2     <CJK>
+@@ -3496,7 +3804,7 @@ CHARMAP
+ <U5DF5>     /x9f/xce     <CJK>
+ <U4ECE>     /x9f/xcf     <CJK>
+ <U6C31>     /x9f/xd0     <CJK>
+-<UEDED>     /x9f/xd1     <CJK>
++<U000201F2> /x9f/xd1     <CJK>
+ <U4F39>     /x9f/xd2     <CJK>
+ <U549C>     /x9f/xd3     <CJK>
+ <U54DA>     /x9f/xd4     <CJK>
+@@ -3519,7 +3827,7 @@ CHARMAP
+ <U8818>     /x9f/xe8     <CJK>
+ <U7F78>     /x9f/xe9     <CJK>
+ <U5620>     /x9f/xeb     <CJK>
+-<UEE08>     /x9f/xec     <CJK>
++<U0002A64A> /x9f/xec     <CJK>
+ <U8E77>     /x9f/xed     <CJK>
+ <U9F53>     /x9f/xee     <CJK>
+ <U8DD4>     /x9f/xf0     <CJK>
+@@ -3596,7 +3904,7 @@ CHARMAP
+ <U5D57>     /xa0/xa1     <CJK>
+ <U00028BC2> /xa0/xa2     <CJK>
+ <U8FDA>     /xa0/xa3     <CJK>
+-<UEE5D>     /xa0/xa4     <CJK>
++<U00028E39> /xa0/xa4     <CJK>
+ <U50D9>     /xa0/xa6     <CJK>
+ <U00021D46> /xa0/xa7     <CJK>
+ <U7906>     /xa0/xa8     <CJK>
+@@ -3606,7 +3914,7 @@ CHARMAP
+ <U4065>     /xa0/xac     <CJK>
+ <U77FE>     /xa0/xae     <CJK>
+ <U7CC2>     /xa0/xb0     <CJK>
+-<UEE6A>     /xa0/xb1     <CJK>
++<U00025F1A> /xa0/xb1     <CJK>
+ <U7CDA>     /xa0/xb2     <CJK>
+ <U7A2D>     /xa0/xb3     <CJK>
+ <U8066>     /xa0/xb4     <CJK>
+@@ -3660,7 +3968,7 @@ CHARMAP
+ <U00023CC7> /xa0/xe9     <CJK>
+ <U00025ED7> /xa0/xea     <CJK>
+ <U00027656> /xa0/xeb     <CJK>
+-<UEEA5>     /xa0/xec     <CJK>
++<U00025531> /xa0/xec     <CJK>
+ <U00021944> /xa0/xed     <CJK>
+ <U000212FE> /xa0/xee     <CJK>
+ <U00029903> /xa0/xef     <CJK>
+@@ -3671,14 +3979,14 @@ CHARMAP
+ <U00028A0F> /xa0/xf4     <CJK>
+ <U00023677> /xa0/xf5     <CJK>
+ <U000200EE> /xa0/xf6     <CJK>
+-<UEEB0>     /xa0/xf7     <CJK>
++<U00026846> /xa0/xf7     <CJK>
+ <U00024F0E> /xa0/xf8     <CJK>
+ <U4562>     /xa0/xf9     <CJK>
+ <U5B1F>     /xa0/xfa     <CJK>
+-<UEEB4>     /xa0/xfb     <CJK>
++<U0002634C> /xa0/xfb     <CJK>
+ <U9F50>     /xa0/xfc     <CJK>
+ <U9EA6>     /xa0/xfd     <CJK>
+-<UEEB7>     /xa0/xfe     <CJK>
++<U0002626B> /xa0/xfe     <CJK>
+ <U3000>     /xa1/x40     IDEOGRAPHIC SPACE
+ <UFF0C>     /xa1/x41     FULLWIDTH COMMA
+ <U3001>     /xa1/x42     IDEOGRAPHIC COMMA
+@@ -9783,16 +10091,16 @@ CHARMAP
+ <U21E7>     /xc8/x76     UPWARDS WHITE ARROW
+ <U21B8>     /xc8/x77     NORTH WEST ARROW TO LONG BAR
+ <U21B9>     /xc8/x78     LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR
+-<UF7E5>     /xc8/x79     <CJK>
+-<UF7E6>     /xc8/x7a     <CJK>
++<U31CF>     /xc8/x79     <CJK>
++<U000200CC> /xc8/x7a     <CJK>
+ <U4E5A>     /xc8/x7b     <CJK>
+-<UF7E8>     /xc8/x7c     <CJK>
++<U0002008A> /xc8/x7c     <CJK>
+ <U5202>     /xc8/x7d     <CJK>
+-<UF7EA>     /xc8/x7e     <CJK>
+-<UF7EB>     /xc8/xa1     <CJK>
++<U4491>     /xc8/x7e     <CJK>
++<U9FB0>     /xc8/xa1     <CJK>
+ <U5188>     /xc8/xa2     <CJK>
+-<UF7ED>     /xc8/xa3     <CJK>
+-<UF7EE>     /xc8/xa4     <CJK>
++<U9FB1>     /xc8/xa3     <CJK>
++<U00027607> /xc8/xa4     <CJK>
+ <UFFE2>     /xc8/xcd     FULLWIDTH NOT SIGN
+ <UFFE4>     /xc8/xce     FULLWIDTH BROKEN BAR
+ <UFF07>     /xc8/xcf     FULLWIDTH APOSTROPHE
+@@ -17536,7 +17844,7 @@ CHARMAP
+ <U00020547> /xfa/x40     <CJK>
+ <U92DB>     /xfa/x41     <CJK>
+ <U000205DF> /xfa/x42     <CJK>
+-<UE003>     /xfa/x43     <CJK>
++<U00023FC5> /xfa/x43     <CJK>
+ <U854C>     /xfa/x44     <CJK>
+ <U42B5>     /xfa/x45     <CJK>
+ <U73EF>     /xfa/x46     <CJK>
+@@ -17557,10 +17865,10 @@ CHARMAP
+ <U00026BB3> /xfa/x55     <CJK>
+ <U00021305> /xfa/x56     <CJK>
+ <U4FAB>     /xfa/x57     <CJK>
+-<UE018>     /xfa/x58     <CJK>
++<U000224ED> /xfa/x58     <CJK>
+ <U5008>     /xfa/x59     <CJK>
+ <U00026D29> /xfa/x5a     <CJK>
+-<UE01B>     /xfa/x5b     <CJK>
++<U00027A84> /xfa/x5b     <CJK>
+ <U00023600> /xfa/x5c     <CJK>
+ <U00024AB1> /xfa/x5d     <CJK>
+ <U00022513> /xfa/x5e     <CJK>
+@@ -17576,7 +17884,7 @@ CHARMAP
+ <U986C>     /xfa/x6a     <CJK>
+ <U3743>     /xfa/x6b     <CJK>
+ <U8416>     /xfa/x6c     <CJK>
+-<UE02D>     /xfa/x6d     <CJK>
++<U000249A4> /xfa/x6d     <CJK>
+ <U00020487> /xfa/x6e     <CJK>
+ <U5160>     /xfa/x6f     <CJK>
+ <U000233B4> /xfa/x70     <CJK>
+@@ -17587,7 +17895,7 @@ CHARMAP
+ <U00022530> /xfa/x75     <CJK>
+ <U0002058E> /xfa/x76     <CJK>
+ <U00023233> /xfa/x77     <CJK>
+-<UE038>     /xfa/x78     <CJK>
++<U00021983> /xfa/x78     <CJK>
+ <U5B82>     /xfa/x79     <CJK>
+ <U877D>     /xfa/x7a     <CJK>
+ <U000205B3> /xfa/x7b     <CJK>
+@@ -17607,7 +17915,7 @@ CHARMAP
+ <U51ED>     /xfa/xab     <CJK>
+ <U83CD>     /xfa/xac     <CJK>
+ <U693E>     /xfa/xad     <CJK>
+-<UE04C>     /xfa/xae     <CJK>
++<U0002372D> /xfa/xae     <CJK>
+ <U5F7B>     /xfa/xaf     <CJK>
+ <U520B>     /xfa/xb0     <CJK>
+ <U5226>     /xfa/xb1     <CJK>
+@@ -17621,7 +17929,7 @@ CHARMAP
+ <U8542>     /xfa/xb9     <CJK>
+ <U52E0>     /xfa/xba     <CJK>
+ <U860D>     /xfa/xbb     <CJK>
+-<UE05A>     /xfa/xbc     <CJK>
++<U00026B13> /xfa/xbc     <CJK>
+ <U00028ADE> /xfa/xbe     <CJK>
+ <U5549>     /xfa/xbf     <CJK>
+ <U6ED9>     /xfa/xc0     <CJK>
+@@ -17676,13 +17984,13 @@ CHARMAP
+ <U6D5B>     /xfa/xf3     <CJK>
+ <U546D>     /xfa/xf4     <CJK>
+ <U00026B53> /xfa/xf5     <CJK>
+-<UE094>     /xfa/xf6     <CJK>
++<U00020D74> /xfa/xf6     <CJK>
+ <U555D>     /xfa/xf7     <CJK>
+ <U548F>     /xfa/xf8     <CJK>
+ <U54A4>     /xfa/xf9     <CJK>
+ <U47A6>     /xfa/xfa     <CJK>
+-<UE099>     /xfa/xfb     <CJK>
+-<UE09A>     /xfa/xfc     <CJK>
++<U0002170D> /xfa/xfb     <CJK>
++<U00020EDD> /xfa/xfc     <CJK>
+ <U3DB4>     /xfa/xfd     <CJK>
+ <U00020D4D> /xfa/xfe     <CJK>
+ <U000289BC> /xfb/x40     <CJK>
+@@ -17724,7 +18032,7 @@ CHARMAP
+ <U36B1>     /xfb/x65     <CJK>
+ <U00026C7E> /xfb/x66     <CJK>
+ <U57E6>     /xfb/x67     <CJK>
+-<UE0C5>     /xfb/x68     <CJK>
++<U00021416> /xfb/x68     <CJK>
+ <U5803>     /xfb/x69     <CJK>
+ <U00021454> /xfb/x6a     <CJK>
+ <U00024363> /xfb/x6b     <CJK>
+@@ -17735,7 +18043,7 @@ CHARMAP
+ <U3561>     /xfb/x70     <CJK>
+ <U58E0>     /xfb/x71     <CJK>
+ <U58DC>     /xfb/x72     <CJK>
+-<UE0D0>     /xfb/x73     <CJK>
++<U0002123C> /xfb/x73     <CJK>
+ <U58FB>     /xfb/x74     <CJK>
+ <U5BFF>     /xfb/x75     <CJK>
+ <U5743>     /xfb/x76     <CJK>
+@@ -17769,17 +18077,17 @@ CHARMAP
+ <U5AAB>     /xfb/xb4     <CJK>
+ <U5A63>     /xfb/xb5     <CJK>
+ <U36E6>     /xfb/xb6     <CJK>
+-<UE0F2>     /xfb/xb7     <CJK>
++<U000249A9> /xfb/xb7     <CJK>
+ <U3708>     /xfb/xb9     <CJK>
+ <U5A96>     /xfb/xba     <CJK>
+ <U7465>     /xfb/xbb     <CJK>
+ <U5AD3>     /xfb/xbc     <CJK>
+ <U00026FA1> /xfb/xbd     <CJK>
+-<UE0F9>     /xfb/xbe     <CJK>
++<U00022554> /xfb/xbe     <CJK>
+ <U3D85>     /xfb/xbf     <CJK>
+ <U00021911> /xfb/xc0     <CJK>
+ <U3732>     /xfb/xc1     <CJK>
+-<UE0FD>     /xfb/xc2     <CJK>
++<U000216B8> /xfb/xc2     <CJK>
+ <U5E83>     /xfb/xc3     <CJK>
+ <U52D0>     /xfb/xc4     <CJK>
+ <U5B76>     /xfb/xc5     <CJK>
+@@ -17788,11 +18096,11 @@ CHARMAP
+ <U00027A0E> /xfb/xc8     <CJK>
+ <U4004>     /xfb/xc9     <CJK>
+ <U485D>     /xfb/xca     <CJK>
+-<UE106>     /xfb/xcb     <CJK>
++<U00020204> /xfb/xcb     <CJK>
+ <U5BD5>     /xfb/xcc     <CJK>
+ <U6160>     /xfb/xcd     <CJK>
+-<UE109>     /xfb/xce     <CJK>
+-<UE10A>     /xfb/xcf     <CJK>
++<U00021A34> /xfb/xce     <CJK>
++<U000259CC> /xfb/xcf     <CJK>
+ <U000205A5> /xfb/xd0     <CJK>
+ <U5BF3>     /xfb/xd1     <CJK>
+ <U5B9D>     /xfb/xd2     <CJK>
+@@ -17829,7 +18137,7 @@ CHARMAP
+ <U5E2E>     /xfb/xf1     <CJK>
+ <U6A8A>     /xfb/xf2     <CJK>
+ <U5E7A>     /xfb/xf4     <CJK>
+-<UE130>     /xfb/xf5     <CJK>
++<U000244BC> /xfb/xf5     <CJK>
+ <U00020CD3> /xfb/xf6     <CJK>
+ <U53A6>     /xfb/xf7     <CJK>
+ <U4EB7>     /xfb/xf8     <CJK>
+@@ -17859,11 +18167,11 @@ CHARMAP
+ <U00026E6E> /xfc/x53     <CJK>
+ <U5F72>     /xfc/x54     <CJK>
+ <U9340>     /xfc/x55     <CJK>
+-<UE150>     /xfc/x56     <CJK>
++<U00028A36> /xfc/x56     <CJK>
+ <U5FA7>     /xfc/x57     <CJK>
+ <U5DB6>     /xfc/x58     <CJK>
+ <U3D5F>     /xfc/x59     <CJK>
+-<UE154>     /xfc/x5a     <CJK>
++<U00025250> /xfc/x5a     <CJK>
+ <U00021F6A> /xfc/x5b     <CJK>
+ <U000270F8> /xfc/x5c     <CJK>
+ <U00022668> /xfc/x5d     <CJK>
+@@ -17872,7 +18180,7 @@ CHARMAP
+ <U00028A29> /xfc/x60     <CJK>
+ <U6031>     /xfc/x61     <CJK>
+ <U6685>     /xfc/x62     <CJK>
+-<UE15D>     /xfc/x63     <CJK>
++<U00021877> /xfc/x63     <CJK>
+ <U3963>     /xfc/x64     <CJK>
+ <U3DC7>     /xfc/x65     <CJK>
+ <U3639>     /xfc/x66     <CJK>
+@@ -17882,20 +18190,20 @@ CHARMAP
+ <U3E40>     /xfc/x6a     <CJK>
+ <U609E>     /xfc/x6b     <CJK>
+ <U60B3>     /xfc/x6d     <CJK>
+-<UE168>     /xfc/x6e     <CJK>
++<U00024982> /xfc/x6e     <CJK>
+ <U0002498F> /xfc/x6f     <CJK>
+-<UE16A>     /xfc/x70     <CJK>
++<U00027A53> /xfc/x70     <CJK>
+ <U74A4>     /xfc/x71     <CJK>
+ <U50E1>     /xfc/x72     <CJK>
+ <U5AA0>     /xfc/x73     <CJK>
+ <U6164>     /xfc/x74     <CJK>
+ <U8424>     /xfc/x75     <CJK>
+ <U6142>     /xfc/x76     <CJK>
+-<UE171>     /xfc/x77     <CJK>
++<U0002F8A6> /xfc/x77     <CJK>
+ <U00026ED2> /xfc/x78     <CJK>
+ <U6181>     /xfc/x79     <CJK>
+ <U51F4>     /xfc/x7a     <CJK>
+-<UE175>     /xfc/x7b     <CJK>
++<U00020656> /xfc/x7b     <CJK>
+ <U6187>     /xfc/x7c     <CJK>
+ <U5BAA>     /xfc/x7d     <CJK>
+ <U00023FB7> /xfc/x7e     <CJK>
+@@ -17921,7 +18229,7 @@ CHARMAP
+ <U3A17>     /xfc/xb4     <CJK>
+ <U6438>     /xfc/xb5     <CJK>
+ <U63F8>     /xfc/xb6     <CJK>
+-<UE18F>     /xfc/xb7     <CJK>
++<U0002138E> /xfc/xb7     <CJK>
+ <U000217FC> /xfc/xb8     <CJK>
+ <U6F8A>     /xfc/xba     <CJK>
+ <U00022E36> /xfc/xbb     <CJK>
+@@ -17963,7 +18271,7 @@ CHARMAP
+ <U6667>     /xfc/xdf     <CJK>
+ <U000251E6> /xfc/xe0     <CJK>
+ <U6673>     /xfc/xe1     <CJK>
+-<UE1BB>     /xfc/xe3     <CJK>
++<U00021E3D> /xfc/xe3     <CJK>
+ <U00023231> /xfc/xe4     <CJK>
+ <U000285F4> /xfc/xe5     <CJK>
+ <U000231C8> /xfc/xe6     <CJK>
+@@ -17979,8 +18287,8 @@ CHARMAP
+ <U000237C2> /xfc/xf0     <CJK>
+ <U6767>     /xfc/xf2     <CJK>
+ <U6762>     /xfc/xf3     <CJK>
+-<UE1CC>     /xfc/xf4     <CJK>
+-<UE1CD>     /xfc/xf5     <CJK>
++<U000241CD> /xfc/xf4     <CJK>
++<U000290ED> /xfc/xf5     <CJK>
+ <U67D7>     /xfc/xf6     <CJK>
+ <U44E9>     /xfc/xf7     <CJK>
+ <U6822>     /xfc/xf8     <CJK>
+@@ -17990,7 +18298,7 @@ CHARMAP
+ <U000233E6> /xfc/xfc     <CJK>
+ <U00026DA0> /xfc/xfd     <CJK>
+ <U685D>     /xfc/xfe     <CJK>
+-<UE1D7>     /xfd/x40     <CJK>
++<U0002346F> /xfd/x40     <CJK>
+ <U69E1>     /xfd/x41     <CJK>
+ <U6A0B>     /xfd/x42     <CJK>
+ <U00028ADF> /xfd/x43     <CJK>
+@@ -18014,10 +18322,10 @@ CHARMAP
+ <U8363>     /xfd/x55     <CJK>
+ <U5090>     /xfd/x56     <CJK>
+ <U69F9>     /xfd/x57     <CJK>
+-<UE1EF>     /xfd/x58     <CJK>
++<U00023659> /xfd/x58     <CJK>
+ <U0002212A> /xfd/x59     <CJK>
+ <U6A45>     /xfd/x5a     <CJK>
+-<UE1F2>     /xfd/x5b     <CJK>
++<U00023703> /xfd/x5b     <CJK>
+ <U6A9D>     /xfd/x5c     <CJK>
+ <U3BF3>     /xfd/x5d     <CJK>
+ <U67B1>     /xfd/x5e     <CJK>
+@@ -18025,15 +18333,15 @@ CHARMAP
+ <U0002919C> /xfd/x60     <CJK>
+ <U3C0D>     /xfd/x61     <CJK>
+ <U6B1D>     /xfd/x62     <CJK>
+-<UE1FA>     /xfd/x63     <CJK>
++<U00020923> /xfd/x63     <CJK>
+ <U60DE>     /xfd/x64     <CJK>
+ <U6B35>     /xfd/x65     <CJK>
+ <U6B74>     /xfd/x66     <CJK>
+-<UE1FE>     /xfd/x67     <CJK>
++<U000227CD> /xfd/x67     <CJK>
+ <U6EB5>     /xfd/x68     <CJK>
+ <U00023ADB> /xfd/x69     <CJK>
+ <U000203B5> /xfd/x6a     <CJK>
+-<UE202>     /xfd/x6b     <CJK>
++<U00021958> /xfd/x6b     <CJK>
+ <U3740>     /xfd/x6c     <CJK>
+ <U5421>     /xfd/x6d     <CJK>
+ <U00023B5A> /xfd/x6e     <CJK>
+@@ -18042,7 +18350,7 @@ CHARMAP
+ <U6BDC>     /xfd/x71     <CJK>
+ <U6C37>     /xfd/x72     <CJK>
+ <U0002248B> /xfd/x73     <CJK>
+-<UE20B>     /xfd/x74     <CJK>
++<U000248F1> /xfd/x74     <CJK>
+ <U00026B51> /xfd/x75     <CJK>
+ <U6C5A>     /xfd/x76     <CJK>
+ <U8226>     /xfd/x77     <CJK>
+@@ -18056,10 +18364,10 @@ CHARMAP
+ <U00023CC9> /xfd/xa1     <CJK>
+ <U36E5>     /xfd/xa2     <CJK>
+ <U3CEB>     /xfd/xa3     <CJK>
+-<UE219>     /xfd/xa4     <CJK>
++<U00020D32> /xfd/xa4     <CJK>
+ <U9B83>     /xfd/xa5     <CJK>
+ <U000231F9> /xfd/xa6     <CJK>
+-<UE21C>     /xfd/xa7     <CJK>
++<U00022491> /xfd/xa7     <CJK>
+ <U7F8F>     /xfd/xa8     <CJK>
+ <U6837>     /xfd/xa9     <CJK>
+ <U00026D25> /xfd/xaa     <CJK>
+@@ -18070,7 +18378,7 @@ CHARMAP
+ <U6E7C>     /xfd/xaf     <CJK>
+ <U6F04>     /xfd/xb0     <CJK>
+ <U0002497F> /xfd/xb1     <CJK>
+-<UE227>     /xfd/xb2     <CJK>
++<U00024085> /xfd/xb2     <CJK>
+ <U00026E72> /xfd/xb3     <CJK>
+ <U8533>     /xfd/xb4     <CJK>
+ <U00026F74> /xfd/xb5     <CJK>
+@@ -18097,16 +18405,16 @@ CHARMAP
+ <U6F5C>     /xfd/xcd     <CJK>
+ <U3D4E>     /xfd/xce     <CJK>
+ <U6F74>     /xfd/xcf     <CJK>
+-<UE245>     /xfd/xd0     <CJK>
++<U00029170> /xfd/xd0     <CJK>
+ <U3D3B>     /xfd/xd1     <CJK>
+ <U6F9F>     /xfd/xd2     <CJK>
+ <U00024144> /xfd/xd3     <CJK>
+ <U6FD3>     /xfd/xd4     <CJK>
+-<UE24A>     /xfd/xd5     <CJK>
++<U00024091> /xfd/xd5     <CJK>
+ <U00024155> /xfd/xd6     <CJK>
+ <U00024039> /xfd/xd7     <CJK>
+-<U00025D20> /xfd/xd8     <CJK>
+-<UE24E>     /xfd/xd9     <CJK>
++<U00023FF0> /xfd/xd8     <CJK>
++<U00023FB4> /xfd/xd9     <CJK>
+ <U0002413F> /xfd/xda     <CJK>
+ <U51DF>     /xfd/xdb     <CJK>
+ <U00024156> /xfd/xdc     <CJK>
+@@ -18134,7 +18442,7 @@ CHARMAP
+ <U00024365> /xfd/xf3     <CJK>
+ <U714F>     /xfd/xf4     <CJK>
+ <U9362>     /xfd/xf5     <CJK>
+-<UE26B>     /xfd/xf6     <CJK>
++<U000242C1> /xfd/xf6     <CJK>
+ <U712C>     /xfd/xf7     <CJK>
+ <U0002445A> /xfd/xf8     <CJK>
+ <U00024A27> /xfd/xf9     <CJK>
+@@ -18149,7 +18457,7 @@ CHARMAP
+ <U9443>     /xfe/x43     <CJK>
+ <U7224>     /xfe/x44     <CJK>
+ <U9341>     /xfe/x45     <CJK>
+-<UE27A>     /xfe/x46     <CJK>
++<U00025605> /xfe/x46     <CJK>
+ <U722E>     /xfe/x47     <CJK>
+ <U7240>     /xfe/x48     <CJK>
+ <U00024974> /xfe/x49     <CJK>
+@@ -18157,7 +18465,7 @@ CHARMAP
+ <U7255>     /xfe/x4b     <CJK>
+ <U7257>     /xfe/x4c     <CJK>
+ <U3E55>     /xfe/x4d     <CJK>
+-<UE282>     /xfe/x4e     <CJK>
++<U00023044> /xfe/x4e     <CJK>
+ <U680D>     /xfe/x4f     <CJK>
+ <U6F3D>     /xfe/x50     <CJK>
+ <U7282>     /xfe/x51     <CJK>
+@@ -18170,7 +18478,7 @@ CHARMAP
+ <U732E>     /xfe/x59     <CJK>
+ <U73CF>     /xfe/x5a     <CJK>
+ <U73AA>     /xfe/x5b     <CJK>
+-<UE290>     /xfe/x5c     <CJK>
++<U00020C3A> /xfe/x5c     <CJK>
+ <U00026A2E> /xfe/x5d     <CJK>
+ <U73C9>     /xfe/x5e     <CJK>
+ <U7449>     /xfe/x5f     <CJK>
+@@ -18181,13 +18489,13 @@ CHARMAP
+ <U36C5>     /xfe/x64     <CJK>
+ <U000249B7> /xfe/x65     <CJK>
+ <U0002498D> /xfe/x66     <CJK>
+-<UE29B>     /xfe/x67     <CJK>
++<U000249FB> /xfe/x67     <CJK>
+ <U73F7>     /xfe/x68     <CJK>
+ <U7415>     /xfe/x69     <CJK>
+ <U6903>     /xfe/x6a     <CJK>
+ <U00024A26> /xfe/x6b     <CJK>
+ <U7439>     /xfe/x6c     <CJK>
+-<UE2A1>     /xfe/x6d     <CJK>
++<U000205C3> /xfe/x6d     <CJK>
+ <U3ED7>     /xfe/x6e     <CJK>
+ <U000228AD> /xfe/x70     <CJK>
+ <U7460>     /xfe/x71     <CJK>
+@@ -18203,12 +18511,12 @@ CHARMAP
+ <U6A2C>     /xfe/x7b     <CJK>
+ <U7482>     /xfe/x7c     <CJK>
+ <U4953>     /xfe/x7d     <CJK>
+-<UE2B2>     /xfe/x7e     <CJK>
++<U00024A8C> /xfe/x7e     <CJK>
+ <U0002415F> /xfe/xa1     <CJK>
+ <U00024A79> /xfe/xa2     <CJK>
+ <U00028B8F> /xfe/xa3     <CJK>
+ <U5B46>     /xfe/xa4     <CJK>
+-<UE2B7>     /xfe/xa5     <CJK>
++<U00028C03> /xfe/xa5     <CJK>
+ <U0002189E> /xfe/xa6     <CJK>
+ <U74C8>     /xfe/xa7     <CJK>
+ <U00021988> /xfe/xa8     <CJK>
+@@ -18217,7 +18525,7 @@ CHARMAP
+ <U00028ED9> /xfe/xac     <CJK>
+ <U00021A4B> /xfe/xad     <CJK>
+ <U5BD7>     /xfe/xae     <CJK>
+-<UE2C1>     /xfe/xaf     <CJK>
++<U00028EAC> /xfe/xaf     <CJK>
+ <U9385>     /xfe/xb0     <CJK>
+ <U754D>     /xfe/xb1     <CJK>
+ <U754A>     /xfe/xb2     <CJK>
+@@ -18225,7 +18533,7 @@ CHARMAP
+ <U756E>     /xfe/xb4     <CJK>
+ <U00024F82> /xfe/xb5     <CJK>
+ <U3F04>     /xfe/xb6     <CJK>
+-<UE2C9>     /xfe/xb7     <CJK>
++<U00024D13> /xfe/xb7     <CJK>
+ <U758E>     /xfe/xb8     <CJK>
+ <U745D>     /xfe/xb9     <CJK>
+ <U759E>     /xfe/xba     <CJK>
+@@ -18236,7 +18544,7 @@ CHARMAP
+ <U764F>     /xfe/xbf     <CJK>
+ <U766F>     /xfe/xc0     <CJK>
+ <U7676>     /xfe/xc1     <CJK>
+-<UE2D4>     /xfe/xc2     <CJK>
++<U000263F5> /xfe/xc2     <CJK>
+ <U7690>     /xfe/xc3     <CJK>
+ <U81EF>     /xfe/xc4     <CJK>
+ <U37F8>     /xfe/xc5     <CJK>
+@@ -18250,7 +18558,7 @@ CHARMAP
+ <U8462>     /xfe/xcd     <CJK>
+ <U0002509D> /xfe/xce     <CJK>
+ <U0002517D> /xfe/xcf     <CJK>
+-<UE2E2>     /xfe/xd0     <CJK>
++<U00021E1C> /xfe/xd0     <CJK>
+ <U771E>     /xfe/xd1     <CJK>
+ <U7726>     /xfe/xd2     <CJK>
+ <U7740>     /xfe/xd3     <CJK>
+@@ -18259,12 +18567,12 @@ CHARMAP
+ <U7758>     /xfe/xd6     <CJK>
+ <U000232AC> /xfe/xd7     <CJK>
+ <U77AF>     /xfe/xd8     <CJK>
+-<UE2EB>     /xfe/xd9     <CJK>
+-<UE2EC>     /xfe/xda     <CJK>
++<U00028964> /xfe/xd9     <CJK>
++<U00028968> /xfe/xda     <CJK>
+ <U000216C1> /xfe/xdb     <CJK>
+ <U77F4>     /xfe/xdc     <CJK>
+-<UE2F0>     /xfe/xde     <CJK>
+-<UE2F1>     /xfe/xdf     <CJK>
++<U00021376> /xfe/xde     <CJK>
++<U00024A12> /xfe/xdf     <CJK>
+ <U68CA>     /xfe/xe0     <CJK>
+ <U78AF>     /xfe/xe1     <CJK>
+ <U78C7>     /xfe/xe2     <CJK>
+@@ -18279,7 +18587,7 @@ CHARMAP
+ <U8FB8>     /xfe/xeb     <CJK>
+ <U8884>     /xfe/xec     <CJK>
+ <U00028B2B> /xfe/xed     <CJK>
+-<UE300>     /xfe/xee     <CJK>
++<U00026083> /xfe/xee     <CJK>
+ <U0002261C> /xfe/xef     <CJK>
+ <U7986>     /xfe/xf0     <CJK>
+ <U8900>     /xfe/xf1     <CJK>
+@@ -18299,15 +18607,11 @@ CHARMAP
+ END CHARMAP
+ 
+ WIDTH
+-<UF303>...<UF318> 2
+-<UF325> 2
+-<UF327> 2
+-<UF344> 2
+-<UF346> 2
+-<UF34A>...<UFF5A> 2
++<U43F0>...<U31CE> 2
++<U0002A3A9>...<UFF5A> 2
+ <U4E00>...<U8FB5> 2
+ <U30FD>...<U30F6> 2
+-<UF7E5>...<U2EE3> 2
++<U31CF>...<U2EE3> 2
+ <U7881>...<U256F> 2
+-<UE003>...<U79D4> 2
++<U4E42>...<U79D4> 2
+ END WIDTH
diff --git a/SOURCES/glibc-rh1213603.patch b/SOURCES/glibc-rh1213603.patch
new file mode 100644
index 0000000..3b14dbd
--- /dev/null
+++ b/SOURCES/glibc-rh1213603.patch
@@ -0,0 +1,41 @@
+commit 31d0a4fa646db8b8c97ce24e0ec0a7b73de4fca1
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Sat Jun 11 12:12:56 2016 +0200
+
+    nss_db: Fix initialization of iteration position [BZ #20237]
+    
+    When get*ent is called without a preceding set*ent, we need
+    to set the initial iteration position in get*ent.
+    
+    Reproducer: Add “services: db files” to /etc/nsswitch.conf, then run
+    “perl -e getservent”.  It will segfault before this change, and exit
+    silently after it.
+
+Index: b/nss/nss_db/db-XXX.c
+===================================================================
+--- a/nss/nss_db/db-XXX.c
++++ b/nss/nss_db/db-XXX.c
+@@ -76,7 +76,7 @@ CONCAT(_nss_db_set,ENTNAME) (int stayope
+       keep_db |= stayopen;
+ 
+       /* Reset the sequential index.  */
+-      entidx  = (const char *) state.header + state.header->valstroffset;
++      entidx  = NULL;
+     }
+ 
+   __libc_lock_unlock (lock);
+@@ -249,8 +249,14 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct ST
+ 	  H_ERRNO_SET (NETDB_INTERNAL);
+ 	  goto out;
+ 	}
++      entidx = NULL;
+     }
+ 
++  /* Start from the beginning if freshly initialized or reset
++     requested by set*ent.  */
++  if (entidx == NULL)
++    entidx = (const char *) state.header + state.header->valstroffset;
++
+   status = NSS_STATUS_UNAVAIL;
+   if (state.header != MAP_FAILED)
+     {
diff --git a/SOURCES/glibc-rh1216246.patch b/SOURCES/glibc-rh1216246.patch
new file mode 100644
index 0000000..0dd0bc4
--- /dev/null
+++ b/SOURCES/glibc-rh1216246.patch
@@ -0,0 +1,69 @@
+commit 8b59c73386ddb64331ee03c29925a18dae547733
+Author: Carlos O'Donell <carlos@systemhalted.org>
+Date:   Wed Jul 8 02:42:11 2015 -0400
+
+    Fix ruserok scalability with large ~/.rhosts file.
+    
+    Fixes bug 18557.
+
+diff --git glibc-2.17-c758a686/inet/rcmd.c glibc-2.17-c758a686/inet/rcmd.c
+index 98b3735..91623b0 100644
+--- glibc-2.17-c758a686/inet/rcmd.c
++++ glibc-2.17-c758a686/inet/rcmd.c
+@@ -809,29 +809,38 @@ __validuser2_sa(hostf, ra, ralen, luser, ruser, rhost)
+ 	*p = '\0';              /* <nul> terminate username (+host?) */
+ 
+ 	/* buf -> host(?) ; user -> username(?) */
++	if (*buf == '\0')
++	  break;
++	if (*user == '\0')
++	  user = luser;
++
++	/* First check the user part.  This is an optimization, since
++	   one should always check the host first in order to detect
++	   negative host checks (which we check for later).  */
++	ucheck = __icheckuser (user, ruser);
++
++	/* Either we found the user, or we didn't and this is a
++	   negative host check.  We must do the negative host lookup
++	   in order to preserve the semantics of stopping on this line
++	   before processing others.  */
++	if (ucheck != 0 || *buf == '-') {
++
++	    /* Next check host part */
++	    hcheck = __checkhost_sa (ra, ralen, buf, rhost);
++
++	    /* Negative '-host user(?)' match?  */
++	    if (hcheck < 0)
++		break;
+ 
+-	/* First check host part */
+-	hcheck = __checkhost_sa (ra, ralen, buf, rhost);
+-
+-	if (hcheck < 0)
+-	    break;
+-
+-	if (hcheck) {
+-	    /* Then check user part */
+-	    if (! (*user))
+-		user = luser;
+-
+-	    ucheck = __icheckuser (user, ruser);
+-
+-	    /* Positive 'host user' match? */
+-	    if (ucheck > 0) {
++	    /* Positive 'host user' match?  */
++	    if (hcheck > 0 && ucheck > 0) {
+ 		retval = 0;
+ 		break;
+ 	    }
+ 
+-	    /* Negative 'host -user' match? */
+-	    if (ucheck < 0)
+-		break;
++	    /* Negative 'host -user' match?  */
++	    if (hcheck > 0 && ucheck < 0)
++	      break;
+ 
+ 	    /* Neither, go on looking for match */
+ 	}
diff --git a/SOURCES/glibc-rh1219891.patch b/SOURCES/glibc-rh1219891.patch
new file mode 100644
index 0000000..8e1d986
--- /dev/null
+++ b/SOURCES/glibc-rh1219891.patch
@@ -0,0 +1,117 @@
+commit e83d72988d89378e7c70a1b7ba0b450a699ea70a
+Author: David S. Miller <davem@davemloft.net>
+Date:   Wed Jan 9 23:04:32 2013 -0800
+
+    Sync netinet/tcp.h with upstream Linux kernel.
+    
+    	[BZ# 15003]
+    	* sysdeps/gnu/netinet/tcp.h (TCP_COOKIE_TRANSACTIONS,
+    	TCP_THIN_LINEAR_TIMEOUTS, TCP_THIN_DUPACK, TCP_USER_TIMEOUT,
+    	TCP_REPAIR, TCP_REPAIR_QUEUE, TCP_QUEUE_SEQ, TCP_REPAIR_OPTIONS,
+    	TCP_FASTOPEN): Define.
+    	(tcp_repair_opt): New structure.
+    	(TCP_NO_QUEUE, TCP_RECV_QUEUE, TCP_SEND_QUEUE, TCP_QUEUES_NR): New
+    	enum values.
+    	(TCP_COOKIE_MIN, TCP_COOKIE_MAX, TCP_COOKIE_PAIR_SIZE,
+    	TCP_COOKIE_IN_ALWAYS, TCP_COOKIE_OUT_NEVER, TCP_S_DATA_IN,
+    	TCP_S_DATA_OUT, TCP_MSS_DEFAULT, TCP_MSS_DESIRED): Define.
+    	(tcp_cookie_transactions): New structure.
+
+diff --git glibc-2.17-c758a686/sysdeps/gnu/netinet/tcp.h glibc-2.17-c758a686/sysdeps/gnu/netinet/tcp.h
+index 278fc9d..b62a696 100644
+--- glibc-2.17-c758a686/sysdeps/gnu/netinet/tcp.h
++++ glibc-2.17-c758a686/sysdeps/gnu/netinet/tcp.h
+@@ -37,20 +37,29 @@
+ /*
+  * User-settable options (used with setsockopt).
+  */
+-#define	TCP_NODELAY	 1	/* Don't delay send to coalesce packets  */
+-#define	TCP_MAXSEG	 2	/* Set maximum segment size  */
+-#define TCP_CORK	 3	/* Control sending of partial frames  */
+-#define TCP_KEEPIDLE	 4	/* Start keeplives after this period */
+-#define TCP_KEEPINTVL	 5	/* Interval between keepalives */
+-#define TCP_KEEPCNT	 6	/* Number of keepalives before death */
+-#define TCP_SYNCNT	 7	/* Number of SYN retransmits */
+-#define TCP_LINGER2	 8	/* Life time of orphaned FIN-WAIT-2 state */
+-#define TCP_DEFER_ACCEPT 9	/* Wake up listener only when data arrive */
+-#define TCP_WINDOW_CLAMP 10	/* Bound advertised window */
+-#define TCP_INFO	 11	/* Information about this connection. */
+-#define	TCP_QUICKACK	 12	/* Bock/reenable quick ACKs.  */
+-#define TCP_CONGESTION	 13	/* Congestion control algorithm.  */
+-#define TCP_MD5SIG	 14	/* TCP MD5 Signature (RFC2385) */
++#define	TCP_NODELAY		 1  /* Don't delay send to coalesce packets  */
++#define	TCP_MAXSEG		 2  /* Set maximum segment size  */
++#define TCP_CORK		 3  /* Control sending of partial frames  */
++#define TCP_KEEPIDLE		 4  /* Start keeplives after this period */
++#define TCP_KEEPINTVL		 5  /* Interval between keepalives */
++#define TCP_KEEPCNT		 6  /* Number of keepalives before death */
++#define TCP_SYNCNT		 7  /* Number of SYN retransmits */
++#define TCP_LINGER2		 8  /* Life time of orphaned FIN-WAIT-2 state */
++#define TCP_DEFER_ACCEPT	 9  /* Wake up listener only when data arrive */
++#define TCP_WINDOW_CLAMP	 10 /* Bound advertised window */
++#define TCP_INFO		 11 /* Information about this connection. */
++#define	TCP_QUICKACK		 12 /* Bock/reenable quick ACKs.  */
++#define TCP_CONGESTION		 13 /* Congestion control algorithm.  */
++#define TCP_MD5SIG		 14 /* TCP MD5 Signature (RFC2385) */
++#define TCP_COOKIE_TRANSACTIONS	 15 /* TCP Cookie Transactions */
++#define TCP_THIN_LINEAR_TIMEOUTS 16 /* Use linear timeouts for thin streams*/
++#define TCP_THIN_DUPACK		 17 /* Fast retrans. after 1 dupack */
++#define TCP_USER_TIMEOUT	 18 /* How long for loss retry before timeout */
++#define TCP_REPAIR		 19 /* TCP sock is under repair right now */
++#define TCP_REPAIR_QUEUE	 20 /* Set TCP queue to repair */
++#define TCP_QUEUE_SEQ		 21 /* Set sequence number of repaired queue. */
++#define TCP_REPAIR_OPTIONS	 22 /* Repair TCP connection options */
++#define TCP_FASTOPEN		 23 /* Enable FastOpen on listeners */
+ 
+ #ifdef __USE_MISC
+ # include <sys/types.h>
+@@ -243,6 +252,49 @@ struct tcp_md5sig
+   u_int8_t	tcpm_key[TCP_MD5SIG_MAXKEYLEN];	/* Key (binary).  */
+ };
+ 
++/* For socket repair options.  */
++struct tcp_repair_opt
++{
++  u_int32_t	opt_code;
++  u_int32_t	opt_val;
++};
++
++/* Queue to repair, for TCP_REPAIR_QUEUE.  */
++enum
++{
++  TCP_NO_QUEUE,
++  TCP_RECV_QUEUE,
++  TCP_SEND_QUEUE,
++  TCP_QUEUES_NR,
++};
++
++/* For cookie transactions socket options.  */
++#define TCP_COOKIE_MIN		8		/*  64-bits */
++#define TCP_COOKIE_MAX		16		/* 128-bits */
++#define TCP_COOKIE_PAIR_SIZE	(2*TCP_COOKIE_MAX)
++
++/* Flags for both getsockopt and setsockopt */
++#define TCP_COOKIE_IN_ALWAYS	(1 << 0)	/* Discard SYN without cookie */
++#define TCP_COOKIE_OUT_NEVER	(1 << 1)	/* Prohibit outgoing cookies,
++						 * supercedes everything. */
++
++/* Flags for getsockopt */
++#define TCP_S_DATA_IN		(1 << 2)	/* Was data received? */
++#define TCP_S_DATA_OUT		(1 << 3)	/* Was data sent? */
++
++#define TCP_MSS_DEFAULT		 536U	/* IPv4 (RFC1122, RFC2581) */
++#define TCP_MSS_DESIRED		1220U	/* IPv6 (tunneled), EDNS0 (RFC3226) */
++
++struct tcp_cookie_transactions
++{
++  u_int16_t	tcpct_flags;
++  u_int8_t	__tcpct_pad1;
++  u_int8_t	tcpct_cookie_desired;
++  u_int16_t	tcpct_s_data_desired;
++  u_int16_t	tcpct_used;
++  u_int8_t	tcpct_value[TCP_MSS_DEFAULT];
++};
++
+ #endif /* Misc.  */
+ 
+ #endif /* netinet/tcp.h */
diff --git a/SOURCES/glibc-rh1221046.patch b/SOURCES/glibc-rh1221046.patch
new file mode 100644
index 0000000..38a3d59
--- /dev/null
+++ b/SOURCES/glibc-rh1221046.patch
@@ -0,0 +1,52 @@
+Superseded by this upstream patch:
+
+commit a06b40cdf5ba0d2ab4f9b4c77d21e45ff284fac7
+Author: Szabolcs Nagy <szabolcs.nagy@arm.com>
+Date:   Tue May 26 22:27:23 2015 +0530
+
+    struct stat is not posix conform
+
+Index: glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/generic/bits/stat.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/unix/sysv/linux/generic/bits/stat.h
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/generic/bits/stat.h
+@@ -66,7 +66,7 @@ struct stat
+     __blksize_t st_blksize;	/* Optimal block size for I/O.  */
+     int __pad2;
+     __field64(__blkcnt_t, __blkcnt64_t, st_blocks);  /* 512-byte blocks */
+-#ifdef __USE_MISC
++#if defined __USE_MISC || defined __USE_XOPEN2K8
+     /* Nanosecond resolution timestamps are stored in a format
+        equivalent to 'struct timespec'.  This is the type used
+        whenever possible but the Unix namespace rules do not allow the
+@@ -107,7 +107,7 @@ struct stat64
+     __blksize_t st_blksize;	/* Optimal block size for I/O.  */
+     int __pad2;
+     __blkcnt64_t st_blocks;	/* Nr. 512-byte blocks allocated.  */
+-#ifdef __USE_MISC
++#if defined __USE_MISC || defined __USE_XOPEN2K8
+     /* Nanosecond resolution timestamps are stored in a format
+        equivalent to 'struct timespec'.  This is the type used
+        whenever possible but the Unix namespace rules do not allow the
+Index: glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/ia64/bits/stat.h
+===================================================================
+--- glibc-2.17-c758a686.orig/ports/sysdeps/unix/sysv/linux/ia64/bits/stat.h
++++ glibc-2.17-c758a686/ports/sysdeps/unix/sysv/linux/ia64/bits/stat.h
+@@ -41,7 +41,7 @@ struct stat
+     int pad0;
+     __dev_t st_rdev;		/* Device number, if device.  */
+     __off_t st_size;		/* Size of file, in bytes.  */
+-#ifdef __USE_MISC
++#if defined __USE_MISC || defined __USE_XOPEN2K8
+     /* Nanosecond resolution timestamps are stored in a format
+        equivalent to 'struct timespec'.  This is the type used
+        whenever possible but the Unix namespace rules do not allow the
+@@ -80,7 +80,7 @@ struct stat64
+     int pad0;
+     __dev_t st_rdev;		/* Device number, if device.  */
+     __off_t st_size;		/* Size of file, in bytes.  */
+-#ifdef __USE_MISC
++#if defined __USE_MISC || defined __USE_XOPEN2K8
+     /* Nanosecond resolution timestamps are stored in a format
+        equivalent to 'struct timespec'.  This is the type used
+        whenever possible but the Unix namespace rules do not allow the
diff --git a/SOURCES/glibc-rh1227699.patch b/SOURCES/glibc-rh1227699.patch
new file mode 100644
index 0000000..1935856
--- /dev/null
+++ b/SOURCES/glibc-rh1227699.patch
@@ -0,0 +1,33 @@
+#
+# This is the original fix for bug 1124987 in Fedora.
+# This patch should never go upstream. We are applying it
+# in rhel-7.2 as a workaround.
+#
+# Upstream commit f8aeae347377f3dfa8cbadde057adf1827fb1d44 fixes
+# this issue correctly, but reveals other bugs, therefore for now
+# this patch is a workaround.
+#
+diff -urN glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h
+--- glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h	2014-08-21 01:00:55.000000000 -0400
++++ glibc-2.17-c758a686/sysdeps/generic/ldsodefs.h	2014-09-04 19:29:42.929692810 -0400
+@@ -388,8 +388,18 @@
+    have to iterate beyond the first element in the slotinfo list.  */
+ #define TLS_SLOTINFO_SURPLUS (62)
+ 
+-/* Number of additional slots in the dtv allocated.  */
+-#define DTV_SURPLUS	(14)
++/* Number of additional allocated dtv slots.  This was initially
++   14, but problems with python, MESA, and X11's uses of static TLS meant
++   that most distributions were very close to this limit when they loaded
++   dynamically interpreted languages that used graphics. The simplest
++   solution was to roughly double the number of slots. The actual static
++   image space usage was relatively small, for example in MESA you
++   had only two dispatch pointers for a total of 16 bytes.  If we hit up
++   against this limit again we should start a campaign with the
++   distributions to coordinate the usage of static TLS.  Any user of this
++   resource is effectively coordinating a global resource since this
++   surplus is allocated for each thread at startup.  */
++#define DTV_SURPLUS	(32)
+ 
+   /* Initial dtv of the main thread, not allocated with normal malloc.  */
+   EXTERN void *_dl_initial_dtv;
diff --git a/SOURCES/glibc-rh1228114-1.patch b/SOURCES/glibc-rh1228114-1.patch
new file mode 100644
index 0000000..65d539d
--- /dev/null
+++ b/SOURCES/glibc-rh1228114-1.patch
@@ -0,0 +1,234 @@
+commit 89fb6835583088059b8d8987c86caac33e37e5ea
+Author: Siddhesh Poyarekar <siddhesh@redhat.com>
+Date:   Tue Jun 11 11:11:11 2013 +0530
+
+    Fix symbol definitions for __clock_* functions
+    
+    __clock_gettime and other __clock_* functions could result in an extra
+    PLT reference within libc.so if it actually gets used.  None of the
+    code currently uses them, which is why this probably went unnoticed.
+
+Index: b/include/time.h
+===================================================================
+--- a/include/time.h
++++ b/include/time.h
+@@ -21,6 +21,7 @@ libc_hidden_proto (strptime)
+ 
+ extern __typeof (clock_getres) __clock_getres;
+ extern __typeof (clock_gettime) __clock_gettime;
++libc_hidden_proto (__clock_gettime)
+ extern __typeof (clock_settime) __clock_settime;
+ extern __typeof (clock_nanosleep) __clock_nanosleep;
+ extern __typeof (clock_getcpuclockid) __clock_getcpuclockid;
+Index: b/rt/clock_getcpuclockid.c
+===================================================================
+--- a/rt/clock_getcpuclockid.c
++++ b/rt/clock_getcpuclockid.c
+@@ -21,7 +21,7 @@
+ #include <unistd.h>
+ 
+ int
+-clock_getcpuclockid (pid_t pid, clockid_t *clock_id)
++__clock_getcpuclockid (pid_t pid, clockid_t *clock_id)
+ {
+   /* We don't allow any process ID but our own.  */
+   if (pid != 0 && pid != getpid ())
+@@ -37,4 +37,4 @@ clock_getcpuclockid (pid_t pid, clockid_
+   return ENOENT;
+ #endif
+ }
+-strong_alias (clock_getcpuclockid, __clock_getcpuclockid)
++weak_alias (__clock_getcpuclockid, clock_getcpuclockid)
+Index: b/rt/clock_getres.c
+===================================================================
+--- a/rt/clock_getres.c
++++ b/rt/clock_getres.c
+@@ -21,10 +21,10 @@
+ 
+ /* Get resolution of clock.  */
+ int
+-clock_getres (clockid_t clock_id, struct timespec *res)
++__clock_getres (clockid_t clock_id, struct timespec *res)
+ {
+   __set_errno (ENOSYS);
+   return -1;
+ }
+-strong_alias (clock_getres, __clock_getres)
++weak_alias (__clock_getres, clock_getres)
+ stub_warning (clock_getres)
+Index: b/rt/clock_gettime.c
+===================================================================
+--- a/rt/clock_gettime.c
++++ b/rt/clock_gettime.c
+@@ -21,10 +21,11 @@
+ 
+ /* Get current value of CLOCK and store it in TP.  */
+ int
+-clock_gettime (clockid_t clock_id, struct timespec *tp)
++__clock_gettime (clockid_t clock_id, struct timespec *tp)
+ {
+   __set_errno (ENOSYS);
+   return -1;
+ }
+-strong_alias (clock_gettime, __clock_gettime)
++weak_alias (__clock_gettime, clock_gettime)
++libc_hidden_def (__clock_gettime)
+ stub_warning (clock_gettime)
+Index: b/rt/clock_nanosleep.c
+===================================================================
+--- a/rt/clock_nanosleep.c
++++ b/rt/clock_nanosleep.c
+@@ -20,8 +20,8 @@
+ #include <time.h>
+ 
+ int
+-clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
+-		 struct timespec *rem)
++__clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
++		   struct timespec *rem)
+ {
+   if (__builtin_expect (req->tv_nsec, 0) < 0
+       || __builtin_expect (req->tv_nsec, 0) >= 1000000000)
+@@ -33,5 +33,5 @@ clock_nanosleep (clockid_t clock_id, int
+   /* Not implemented.  */
+   return ENOSYS;
+ }
+-strong_alias (clock_nanosleep, __clock_nanosleep)
++weak_alias (__clock_nanosleep, clock_nanosleep)
+ stub_warning (clock_nanosleep)
+Index: b/rt/clock_settime.c
+===================================================================
+--- a/rt/clock_settime.c
++++ b/rt/clock_settime.c
+@@ -21,10 +21,10 @@
+ 
+ /* Set CLOCK to value TP.  */
+ int
+-clock_settime (clockid_t clock_id, const struct timespec *tp)
++__clock_settime (clockid_t clock_id, const struct timespec *tp)
+ {
+   __set_errno (ENOSYS);
+   return -1;
+ }
+-strong_alias (clock_settime, __clock_settime)
++weak_alias (__clock_settime, clock_settime)
+ stub_warning (clock_settime)
+Index: b/sysdeps/posix/clock_getres.c
+===================================================================
+--- a/sysdeps/posix/clock_getres.c
++++ b/sysdeps/posix/clock_getres.c
+@@ -76,7 +76,7 @@ realtime_getres (struct timespec *res)
+ 
+ /* Get resolution of clock.  */
+ int
+-clock_getres (clockid_t clock_id, struct timespec *res)
++__clock_getres (clockid_t clock_id, struct timespec *res)
+ {
+   int retval = -1;
+ 
+@@ -115,4 +115,4 @@ clock_getres (clockid_t clock_id, struct
+ 
+   return retval;
+ }
+-strong_alias (clock_getres, __clock_getres)
++weak_alias (__clock_getres, clock_getres)
+Index: b/sysdeps/unix/clock_gettime.c
+===================================================================
+--- a/sysdeps/unix/clock_gettime.c
++++ b/sysdeps/unix/clock_gettime.c
+@@ -89,7 +89,7 @@ realtime_gettime (struct timespec *tp)
+ 
+ /* Get current value of CLOCK and store it in TP.  */
+ int
+-clock_gettime (clockid_t clock_id, struct timespec *tp)
++__clock_gettime (clockid_t clock_id, struct timespec *tp)
+ {
+   int retval = -1;
+ 
+@@ -132,4 +132,5 @@ clock_gettime (clockid_t clock_id, struc
+ 
+   return retval;
+ }
+-strong_alias (clock_gettime, __clock_gettime)
++weak_alias (__clock_gettime, clock_gettime)
++libc_hidden_def (__clock_gettime)
+Index: b/sysdeps/unix/clock_nanosleep.c
+===================================================================
+--- a/sysdeps/unix/clock_nanosleep.c
++++ b/sysdeps/unix/clock_nanosleep.c
+@@ -39,8 +39,8 @@
+ /* This implementation assumes that these is only a `nanosleep' system
+    call.  So we have to remap all other activities.  */
+ int
+-clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
+-		 struct timespec *rem)
++__clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
++		   struct timespec *rem)
+ {
+   struct timespec now;
+ 
+@@ -98,4 +98,4 @@ clock_nanosleep (clockid_t clock_id, int
+ 
+   return __builtin_expect (nanosleep (req, rem), 0) ? errno : 0;
+ }
+-strong_alias (clock_nanosleep, __clock_nanosleep)
++weak_alias (__clock_nanosleep, clock_nanosleep)
+Index: b/sysdeps/unix/clock_settime.c
+===================================================================
+--- a/sysdeps/unix/clock_settime.c
++++ b/sysdeps/unix/clock_settime.c
+@@ -72,7 +72,7 @@ hp_timing_settime (clockid_t clock_id, c
+ 
+ /* Set CLOCK to value TP.  */
+ int
+-clock_settime (clockid_t clock_id, const struct timespec *tp)
++__clock_settime (clockid_t clock_id, const struct timespec *tp)
+ {
+   int retval;
+ 
+@@ -124,4 +124,4 @@ clock_settime (clockid_t clock_id, const
+ 
+   return retval;
+ }
+-strong_alias (clock_settime, __clock_settime)
++weak_alias (__clock_settime, clock_settime)
+Index: b/sysdeps/unix/sysv/linux/clock_getcpuclockid.c
+===================================================================
+--- a/sysdeps/unix/sysv/linux/clock_getcpuclockid.c
++++ b/sysdeps/unix/sysv/linux/clock_getcpuclockid.c
+@@ -23,7 +23,7 @@
+ #include "kernel-posix-cpu-timers.h"
+ 
+ int
+-clock_getcpuclockid (pid_t pid, clockid_t *clock_id)
++__clock_getcpuclockid (pid_t pid, clockid_t *clock_id)
+ {
+   /* The clockid_t value is a simple computation from the PID.
+      But we do a clock_getres call to validate it.  */
+@@ -46,4 +46,4 @@ clock_getcpuclockid (pid_t pid, clockid_
+   else
+     return INTERNAL_SYSCALL_ERRNO (r, err);
+ }
+-strong_alias (clock_getcpuclockid, __clock_getcpuclockid)
++weak_alias (__clock_getcpuclockid, clock_getcpuclockid)
+Index: b/sysdeps/unix/sysv/linux/clock_nanosleep.c
+===================================================================
+--- a/sysdeps/unix/sysv/linux/clock_nanosleep.c
++++ b/sysdeps/unix/sysv/linux/clock_nanosleep.c
+@@ -26,8 +26,8 @@
+ /* We can simply use the syscall.  The CPU clocks are not supported
+    with this function.  */
+ int
+-clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
+-		 struct timespec *rem)
++__clock_nanosleep (clockid_t clock_id, int flags, const struct timespec *req,
++		   struct timespec *rem)
+ {
+   INTERNAL_SYSCALL_DECL (err);
+   int r;
+@@ -52,4 +52,4 @@ clock_nanosleep (clockid_t clock_id, int
+   return (INTERNAL_SYSCALL_ERROR_P (r, err)
+ 	  ? INTERNAL_SYSCALL_ERRNO (r, err) : 0);
+ }
+-strong_alias (clock_nanosleep, __clock_nanosleep)
++weak_alias (__clock_nanosleep, clock_nanosleep)
diff --git a/SOURCES/glibc-rh1228114-2.patch b/SOURCES/glibc-rh1228114-2.patch
new file mode 100644
index 0000000..f9d1876
--- /dev/null
+++ b/SOURCES/glibc-rh1228114-2.patch
@@ -0,0 +1,1552 @@
+commit cf0bd2f73bd65beab613865bba567d7787836888
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Tue Feb 28 15:28:45 2017 +0100
+
+    sunrpc: Improvements for UDP client timeout handling [BZ #20257]
+    
+    This commit fixes various aspects in the UDP client timeout handling.
+    Timeouts are now applied in a more consistent fashion.  Discarded UDP
+    packets no longer prevent the timeout from happening at all.
+
+Index: b/inet/deadline.c
+===================================================================
+--- /dev/null
++++ b/inet/deadline.c
+@@ -0,0 +1,122 @@
++/* Computing deadlines for timeouts.
++   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/>.  */
++
++#include <net-internal.h>
++
++#include <assert.h>
++#include <limits.h>
++#include <stdio.h>
++#include <stdint.h>
++#include <time.h>
++
++struct deadline_current_time internal_function
++__deadline_current_time (void)
++{
++  struct deadline_current_time result;
++  if (__clock_gettime (CLOCK_MONOTONIC, &result.current) != 0)
++    {
++      struct timeval current_tv;
++      if (__gettimeofday (&current_tv, NULL) == 0)
++        __libc_fatal ("Fatal error: gettimeofday system call failed\n");
++      result.current.tv_sec = current_tv.tv_sec;
++      result.current.tv_nsec = current_tv.tv_usec * 1000;
++    }
++  assert (result.current.tv_sec >= 0);
++  return result;
++}
++
++/* A special deadline value for which __deadline_is_infinite is
++   true.  */
++static inline struct deadline
++infinite_deadline (void)
++{
++  return (struct deadline) { { -1, -1 } };
++}
++
++struct deadline internal_function
++__deadline_from_timeval (struct deadline_current_time current,
++                         struct timeval tv)
++{
++  assert (__is_timeval_valid_timeout (tv));
++
++  /* Compute second-based deadline.  Perform the addition in
++     uintmax_t, which is unsigned, to simply overflow detection.  */
++  uintmax_t sec = current.current.tv_sec;
++  sec += tv.tv_sec;
++  if (sec < (uintmax_t) tv.tv_sec)
++    return infinite_deadline ();
++
++  /* Compute nanosecond deadline.  */
++  int nsec = current.current.tv_nsec + tv.tv_usec * 1000;
++  if (nsec >= 1000 * 1000 * 1000)
++    {
++      /* Carry nanosecond overflow to seconds.  */
++      nsec -= 1000 * 1000 * 1000;
++      if (sec + 1 < sec)
++        return infinite_deadline ();
++      ++sec;
++    }
++  /* This uses a GCC extension, otherwise these casts for detecting
++     overflow would not be defined.  */
++  if ((time_t) sec < 0 || sec != (uintmax_t) (time_t) sec)
++    return infinite_deadline ();
++
++  return (struct deadline) { { sec, nsec } };
++}
++
++int internal_function
++__deadline_to_ms (struct deadline_current_time current,
++                  struct deadline deadline)
++{
++  if (__deadline_is_infinite (deadline))
++    return INT_MAX;
++
++  if (current.current.tv_sec > deadline.absolute.tv_sec
++      || (current.current.tv_sec == deadline.absolute.tv_sec
++          && current.current.tv_nsec >= deadline.absolute.tv_nsec))
++    return 0;
++  time_t sec = deadline.absolute.tv_sec - current.current.tv_sec;
++  if (sec >= INT_MAX)
++    /* This value will overflow below.  */
++    return INT_MAX;
++  int nsec = deadline.absolute.tv_nsec - current.current.tv_nsec;
++  if (nsec < 0)
++    {
++      /* Borrow from the seconds field.  */
++      assert (sec > 0);
++      --sec;
++      nsec += 1000 * 1000 * 1000;
++    }
++
++  /* Prepare for rounding up to milliseconds.  */
++  nsec += 999999;
++  if (nsec > 1000 * 1000 * 1000)
++    {
++      assert (sec < INT_MAX);
++      ++sec;
++      nsec -= 1000 * 1000 * 1000;
++    }
++
++  unsigned int msec = nsec / (1000 * 1000);
++  if (sec > INT_MAX / 1000)
++    return INT_MAX;
++  msec += sec * 1000;
++  if (msec > INT_MAX)
++    return INT_MAX;
++  return msec;
++}
+Index: b/inet/tst-deadline.c
+===================================================================
+--- /dev/null
++++ b/inet/tst-deadline.c
+@@ -0,0 +1,188 @@
++/* Tests for computing deadlines for timeouts.
++   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/>.  */
++
++#include <inet/net-internal.h>
++#include <limits.h>
++#include <stdbool.h>
++#include <stdint.h>
++#include <support/check.h>
++
++/* Find the maximum value which can be represented in a time_t.  */
++static time_t
++time_t_max (void)
++{
++  _Static_assert (0 > (time_t) -1, "time_t is signed");
++  uintmax_t current = 1;
++  while (true)
++    {
++      uintmax_t next = current * 2;
++      /* This cannot happen because time_t is signed.  */
++      TEST_VERIFY_EXIT (next > current);
++      ++next;
++      if ((time_t) next < 0 || next != (uintmax_t) (time_t) next)
++        /* Value cannot be represented in time_t.  Return the previous
++           value. */
++        return current;
++      current = next;
++    }
++}
++
++static int
++do_test (void)
++{
++  {
++    struct deadline_current_time current_time = __deadline_current_time ();
++    TEST_VERIFY (current_time.current.tv_sec >= 0);
++    current_time = __deadline_current_time ();
++    /* Due to CLOCK_MONOTONIC, either seconds or nanoseconds are
++       greater than zero.  This is also true for the gettimeofday
++       fallback.  */
++    TEST_VERIFY (current_time.current.tv_sec >= 0);
++    TEST_VERIFY (current_time.current.tv_sec > 0
++                 || current_time.current.tv_nsec > 0);
++  }
++
++  /* Check basic computations of deadlines.  */
++  struct deadline_current_time current_time = { { 1, 123456789 } };
++  struct deadline deadline = __deadline_from_timeval
++    (current_time, (struct timeval) { 0, 1 });
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 123457789);
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1);
++
++  deadline = __deadline_from_timeval
++    (current_time, ((struct timeval) { 0, 2 }));
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 123458789);
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1);
++
++  deadline = __deadline_from_timeval
++    (current_time, ((struct timeval) { 1, 0 }));
++  TEST_VERIFY (deadline.absolute.tv_sec == 2);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 123456789);
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1000);
++
++  /* Check if timeouts are correctly rounded up to the next
++     millisecond.  */
++  for (int i = 0; i < 999999; ++i)
++    {
++      ++current_time.current.tv_nsec;
++      TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1000);
++    }
++
++  /* A full millisecond has elapsed, so the time to the deadline is
++     now less than 1000.  */
++  ++current_time.current.tv_nsec;
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 999);
++
++  /* Check __deadline_to_ms carry-over.  */
++  current_time = (struct deadline_current_time) { { 9, 123456789 } };
++  deadline = (struct deadline) { { 10, 122456789 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 999);
++  deadline = (struct deadline) { { 10, 122456790 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1000);
++  deadline = (struct deadline) { { 10, 123456788 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1000);
++  deadline = (struct deadline) { { 10, 123456789 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 1000);
++
++  /* Check __deadline_to_ms overflow.  */
++  deadline = (struct deadline) { { INT_MAX - 1, 1 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == INT_MAX);
++
++  /* Check __deadline_to_ms for elapsed deadlines.  */
++  current_time = (struct deadline_current_time) { { 9, 123456789 } };
++  deadline.absolute = current_time.current;
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 0);
++  current_time = (struct deadline_current_time) { { 9, 123456790 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 0);
++  current_time = (struct deadline_current_time) { { 10, 0 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 0);
++  current_time = (struct deadline_current_time) { { 10, 123456788 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 0);
++  current_time = (struct deadline_current_time) { { 10, 123456789 } };
++  TEST_VERIFY (__deadline_to_ms (current_time, deadline) == 0);
++
++  /* Check carry-over in __deadline_from_timeval.  */
++  current_time = (struct deadline_current_time) { { 9, 998000001 } };
++  for (int i = 0; i < 2000; ++i)
++    {
++      deadline = __deadline_from_timeval
++        (current_time, (struct timeval) { 1, i });
++      TEST_VERIFY (deadline.absolute.tv_sec == 10);
++      TEST_VERIFY (deadline.absolute.tv_nsec == 998000001 + i * 1000);
++    }
++  for (int i = 2000; i < 3000; ++i)
++    {
++      deadline = __deadline_from_timeval
++        (current_time, (struct timeval) { 2, i });
++      TEST_VERIFY (deadline.absolute.tv_sec == 12);
++      TEST_VERIFY (deadline.absolute.tv_nsec == 1 + (i - 2000) * 1000);
++    }
++
++  /* Check infinite deadlines.  */
++  deadline = __deadline_from_timeval
++    ((struct deadline_current_time) { { 0, 1000 * 1000 * 1000 - 1000 } },
++     (struct timeval) { time_t_max (), 1 });
++  TEST_VERIFY (__deadline_is_infinite (deadline));
++  deadline = __deadline_from_timeval
++    ((struct deadline_current_time) { { 0, 1000 * 1000 * 1000 - 1001 } },
++     (struct timeval) { time_t_max (), 1 });
++  TEST_VERIFY (!__deadline_is_infinite (deadline));
++  deadline = __deadline_from_timeval
++    ((struct deadline_current_time)
++       { { time_t_max (), 1000 * 1000 * 1000 - 1000 } },
++     (struct timeval) { 0, 1 });
++  TEST_VERIFY (__deadline_is_infinite (deadline));
++  deadline = __deadline_from_timeval
++    ((struct deadline_current_time)
++       { { time_t_max () / 2 + 1, 0 } },
++     (struct timeval) { time_t_max () / 2 + 1, 0 });
++  TEST_VERIFY (__deadline_is_infinite (deadline));
++
++  /* Check __deadline_first behavior.  */
++  deadline = __deadline_first
++    ((struct deadline) { { 1, 2 } },
++     (struct deadline) { { 1, 3 } });
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 2);
++  deadline = __deadline_first
++    ((struct deadline) { { 1, 3 } },
++     (struct deadline) { { 1, 2 } });
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 2);
++  deadline = __deadline_first
++    ((struct deadline) { { 1, 2 } },
++     (struct deadline) { { 2, 1 } });
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 2);
++  deadline = __deadline_first
++    ((struct deadline) { { 1, 2 } },
++     (struct deadline) { { 2, 4 } });
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 2);
++  deadline = __deadline_first
++    ((struct deadline) { { 2, 4 } },
++     (struct deadline) { { 1, 2 } });
++  TEST_VERIFY (deadline.absolute.tv_sec == 1);
++  TEST_VERIFY (deadline.absolute.tv_nsec == 2);
++
++  return 0;
++}
++
++#include <support/test-driver.c>
+Index: b/sunrpc/Makefile
+===================================================================
+--- a/sunrpc/Makefile
++++ b/sunrpc/Makefile
+@@ -96,11 +96,13 @@ others += rpcgen
+ 
+ all: # Make this the default target; it will be defined in Rules.
+ 
+-tests = tst-xdrmem tst-xdrmem2
++tests = tst-xdrmem tst-xdrmem2 tst-udp-timeout \
++  tst-udp-nonblocking
+ xtests := tst-getmyaddr
+ 
+ ifeq ($(have-thread-library),yes)
+ xtests += thrsvc
++tests += tst-udp-garbage
+ endif
+ 
+ headers += $(rpcsvc:%.x=rpcsvc/%.h)
+@@ -225,3 +227,8 @@ endif
+ endif
+ 
+ $(objpfx)thrsvc: $(common-objpfx)linkobj/libc.so $(shared-thread-library)
++
++$(objpfx)tst-udp-timeout: $(common-objpfx)linkobj/libc.so
++$(objpfx)tst-udp-nonblocking: $(common-objpfx)linkobj/libc.so
++$(objpfx)tst-udp-garbage: \
++  $(common-objpfx)linkobj/libc.so $(shared-thread-library)
+Index: b/sunrpc/clnt_udp.c
+===================================================================
+--- a/sunrpc/clnt_udp.c
++++ b/sunrpc/clnt_udp.c
+@@ -54,6 +54,7 @@
+ #endif
+ 
+ #include <kernel-features.h>
++#include <inet/net-internal.h>
+ 
+ extern u_long _create_xid (void);
+ 
+@@ -79,7 +80,9 @@ static const struct clnt_ops udp_ops =
+ };
+ 
+ /*
+- * Private data kept per client handle
++ * Private data kept per client handle.  This private struct is
++ * unfortunately part of the ABI; ypbind contains a copy of it and
++ * accesses it through CLIENT::cl_private field.
+  */
+ struct cu_data
+   {
+@@ -309,28 +312,38 @@ clntudp_call (cl, proc, xargs, argsp, xr
+   int inlen;
+   socklen_t fromlen;
+   struct pollfd fd;
+-  int milliseconds = (cu->cu_wait.tv_sec * 1000) +
+-    (cu->cu_wait.tv_usec / 1000);
+   struct sockaddr_in from;
+   struct rpc_msg reply_msg;
+   XDR reply_xdrs;
+-  struct timeval time_waited;
+   bool_t ok;
+   int nrefreshes = 2;		/* number of times to refresh cred */
+-  struct timeval timeout;
+   int anyup;			/* any network interface up */
+ 
+-  if (cu->cu_total.tv_usec == -1)
+-    {
+-      timeout = utimeout;	/* use supplied timeout */
+-    }
+-  else
+-    {
+-      timeout = cu->cu_total;	/* use default timeout */
+-    }
++  struct deadline_current_time current_time = __deadline_current_time ();
++  struct deadline total_deadline; /* Determined once by overall timeout.  */
++  struct deadline response_deadline; /* Determined anew for each query.  */
++
++  /* Choose the timeout value.  For non-sending usage (xargs == NULL),
++     the total deadline does not matter, only cu->cu_wait is used
++     below.  */
++  if (xargs != NULL)
++    {
++      struct timeval tv;
++      if (cu->cu_total.tv_usec == -1)
++	/* Use supplied timeout.  */
++	tv = utimeout;
++      else
++	/* Use default timeout.  */
++	tv = cu->cu_total;
++      if (!__is_timeval_valid_timeout (tv))
++	return (cu->cu_error.re_status = RPC_TIMEDOUT);
++      total_deadline = __deadline_from_timeval (current_time, tv);
++    }
++
++  /* Guard against bad timeout specification.  */
++  if (!__is_timeval_valid_timeout (cu->cu_wait))
++    return (cu->cu_error.re_status = RPC_TIMEDOUT);
+ 
+-  time_waited.tv_sec = 0;
+-  time_waited.tv_usec = 0;
+ call_again:
+   xdrs = &(cu->cu_outxdrs);
+   if (xargs == NULL)
+@@ -356,27 +369,46 @@ send_again:
+       return (cu->cu_error.re_status = RPC_CANTSEND);
+     }
+ 
+-  /*
+-   * Hack to provide rpc-based message passing
+-   */
+-  if (timeout.tv_sec == 0 && timeout.tv_usec == 0)
+-    {
+-      return (cu->cu_error.re_status = RPC_TIMEDOUT);
+-    }
++  /* sendto may have blocked, so recompute the current time.  */
++  current_time = __deadline_current_time ();
+  get_reply:
+-  /*
+-   * sub-optimal code appears here because we have
+-   * some clock time to spare while the packets are in flight.
+-   * (We assume that this is actually only executed once.)
+-   */
++  response_deadline = __deadline_from_timeval (current_time, cu->cu_wait);
++
+   reply_msg.acpted_rply.ar_verf = _null_auth;
+   reply_msg.acpted_rply.ar_results.where = resultsp;
+   reply_msg.acpted_rply.ar_results.proc = xresults;
+   fd.fd = cu->cu_sock;
+   fd.events = POLLIN;
+   anyup = 0;
++
++  /* Per-response retry loop.  current_time must be up-to-date at the
++     top of the loop.  */
+   for (;;)
+     {
++      int milliseconds;
++      if (xargs != NULL)
++	{
++	  if (__deadline_elapsed (current_time, total_deadline))
++	    /* Overall timeout expired.  */
++	    return (cu->cu_error.re_status = RPC_TIMEDOUT);
++	  milliseconds = __deadline_to_ms
++	    (current_time, __deadline_first (total_deadline,
++					     response_deadline));
++	  if (milliseconds == 0)
++	    /* Per-query timeout expired.  */
++	    goto send_again;
++	}
++      else
++	{
++	  /* xatgs == NULL.  Collect a response without sending a
++	     query.  In this mode, we need to ignore the total
++	     deadline.  */
++	  milliseconds = __deadline_to_ms (current_time, response_deadline);
++	  if (milliseconds == 0)
++	    /* Cannot send again, so bail out.  */
++	    return (cu->cu_error.re_status = RPC_CANTSEND);
++	}
++
+       switch (__poll (&fd, 1, milliseconds))
+ 	{
+ 
+@@ -387,27 +419,10 @@ send_again:
+ 	      if (!anyup)
+ 		return (cu->cu_error.re_status = RPC_CANTRECV);
+ 	    }
+-
+-	  time_waited.tv_sec += cu->cu_wait.tv_sec;
+-	  time_waited.tv_usec += cu->cu_wait.tv_usec;
+-	  while (time_waited.tv_usec >= 1000000)
+-	    {
+-	      time_waited.tv_sec++;
+-	      time_waited.tv_usec -= 1000000;
+-	    }
+-	  if ((time_waited.tv_sec < timeout.tv_sec) ||
+-	      ((time_waited.tv_sec == timeout.tv_sec) &&
+-	       (time_waited.tv_usec < timeout.tv_usec)))
+-	    goto send_again;
+-	  return (cu->cu_error.re_status = RPC_TIMEDOUT);
+-
+-	  /*
+-	   * buggy in other cases because time_waited is not being
+-	   * updated.
+-	   */
++	  goto next_response;
+ 	case -1:
+ 	  if (errno == EINTR)
+-	    continue;
++	    goto next_response;
+ 	  cu->cu_error.re_errno = errno;
+ 	  return (cu->cu_error.re_status = RPC_CANTRECV);
+ 	}
+@@ -463,20 +478,22 @@ send_again:
+       if (inlen < 0)
+ 	{
+ 	  if (errno == EWOULDBLOCK)
+-	    continue;
++	    goto next_response;
+ 	  cu->cu_error.re_errno = errno;
+ 	  return (cu->cu_error.re_status = RPC_CANTRECV);
+ 	}
+-      if (inlen < 4)
+-	continue;
++      /* Accept the response if the packet is sufficiently long and
++	 the transaction ID matches the query (if available).  */
++      if (inlen >= 4
++	  && (xargs == NULL
++	      || memcmp (cu->cu_inbuf, cu->cu_outbuf,
++			 sizeof (u_int32_t)) == 0))
++	break;
+ 
+-      /* see if reply transaction id matches sent id.
+-	Don't do this if we only wait for a replay */
+-      if (xargs != NULL
+-	  && memcmp (cu->cu_inbuf, cu->cu_outbuf, sizeof (u_int32_t)) != 0)
+-	continue;
+-      /* we now assume we have the proper reply */
+-      break;
++    next_response:
++      /* Update the current time because poll and recvmsg waited for
++	 an unknown time.  */
++      current_time = __deadline_current_time ();
+     }
+ 
+   /*
+Index: b/sunrpc/tst-udp-garbage.c
+===================================================================
+--- /dev/null
++++ b/sunrpc/tst-udp-garbage.c
+@@ -0,0 +1,104 @@
++/* Test that garbage packets do not affect timeout handling.
++   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/>.  */
++
++#include <netinet/in.h>
++#include <rpc/clnt.h>
++#include <rpc/svc.h>
++#include <stdbool.h>
++#include <support/check.h>
++#include <support/namespace.h>
++#include <support/xsocket.h>
++#include <support/xthread.h>
++#include <sys/socket.h>
++#include <unistd.h>
++
++/* Descriptor for the server UDP socket.  */
++static int server_fd;
++
++static void *
++garbage_sender_thread (void *unused)
++{
++  while (true)
++    {
++      struct sockaddr_storage sa;
++      socklen_t salen = sizeof (sa);
++      char buf[1];
++      if (recvfrom (server_fd, buf, sizeof (buf), 0,
++                    (struct sockaddr *) &sa, &salen) < 0)
++        FAIL_EXIT1 ("recvfrom: %m");
++
++      /* Send garbage packets indefinitely.  */
++      buf[0] = 0;
++      while (true)
++        {
++          /* sendto can fail if the client closed the socket.  */
++          if (sendto (server_fd, buf, sizeof (buf), 0,
++                      (struct sockaddr *) &sa, salen) < 0)
++            break;
++
++          /* Wait a bit, to avoid burning too many CPU cycles in a
++             tight loop.  The wait period must be much shorter than
++             the client timeouts configured below.  */
++          usleep (50 * 1000);
++        }
++    }
++}
++
++static int
++do_test (void)
++{
++  support_become_root ();
++  support_enter_network_namespace ();
++
++  server_fd = xsocket (AF_INET, SOCK_DGRAM | SOCK_CLOEXEC, IPPROTO_UDP);
++  struct sockaddr_in server_address =
++    {
++      .sin_family = AF_INET,
++      .sin_addr.s_addr = htonl (INADDR_LOOPBACK),
++    };
++  xbind (server_fd,
++         (struct sockaddr *) &server_address, sizeof (server_address));
++  {
++    socklen_t sinlen = sizeof (server_address);
++    xgetsockname (server_fd, (struct sockaddr *) &server_address, &sinlen);
++    TEST_VERIFY (sizeof (server_address) == sinlen);
++  }
++
++  /* Garbage packet source.  */
++  xpthread_detach (xpthread_create (NULL, garbage_sender_thread, NULL));
++
++  /* Test client.  Use an arbitrary timeout of one second, which is
++     much longer than the garbage packet interval, but still
++     reasonably short, so that the test completes quickly.  */
++  int client_fd = RPC_ANYSOCK;
++  CLIENT *clnt = clntudp_create (&server_address,
++                                 1, 2, /* Arbitrary RPC endpoint numbers.  */
++                                 (struct timeval) { 1, 0 },
++                                 &client_fd);
++  if (clnt == NULL)
++    FAIL_EXIT1 ("clntudp_create: %m");
++
++  TEST_VERIFY (clnt_call (clnt, 3, /* Arbitrary RPC procedure number.  */
++                          (xdrproc_t) xdr_void, NULL,
++                          (xdrproc_t) xdr_void, NULL,
++                          ((struct timeval) { 1, 0 })));
++
++  return 0;
++}
++
++#include <support/test-driver.c>
+Index: b/sunrpc/tst-udp-nonblocking.c
+===================================================================
+--- /dev/null
++++ b/sunrpc/tst-udp-nonblocking.c
+@@ -0,0 +1,333 @@
++/* Test non-blocking use of the UDP client.
++   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/>.  */
++
++#include <netinet/in.h>
++#include <rpc/clnt.h>
++#include <rpc/svc.h>
++#include <stdbool.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/namespace.h>
++#include <support/test-driver.h>
++#include <support/xsocket.h>
++#include <support/xunistd.h>
++#include <sys/socket.h>
++#include <time.h>
++#include <unistd.h>
++
++/* Test data serialization and deserialization.   */
++
++struct test_query
++{
++  uint32_t a;
++  uint32_t b;
++  uint32_t timeout_ms;
++};
++
++static bool_t
++xdr_test_query (XDR *xdrs, void *data, ...)
++{
++  struct test_query *p = data;
++  return xdr_uint32_t (xdrs, &p->a)
++    && xdr_uint32_t (xdrs, &p->b)
++    && xdr_uint32_t (xdrs, &p->timeout_ms);
++}
++
++struct test_response
++{
++  uint32_t server_id;
++  uint32_t seq;
++  uint32_t sum;
++};
++
++static bool_t
++xdr_test_response (XDR *xdrs, void *data, ...)
++{
++  struct test_response *p = data;
++  return xdr_uint32_t (xdrs, &p->server_id)
++    && xdr_uint32_t (xdrs, &p->seq)
++    && xdr_uint32_t (xdrs, &p->sum);
++}
++
++/* Implementation of the test server.  */
++
++enum
++  {
++    /* Number of test servers to run. */
++    SERVER_COUNT = 3,
++
++    /* RPC parameters, chosen at random.  */
++    PROGNUM = 8242,
++    VERSNUM = 19654,
++
++    /* Main RPC operation.  */
++    PROC_ADD = 1,
++
++    /* Request process termination.  */
++    PROC_EXIT,
++
++    /* Special exit status to mark successful processing.  */
++    EXIT_MARKER = 55,
++  };
++
++/* Set by the parent process to tell test servers apart.  */
++static int server_id;
++
++/* Implementation of the test server.  */
++static void
++server_dispatch (struct svc_req *request, SVCXPRT *transport)
++{
++  /* Query sequence number.  */
++  static uint32_t seq = 0;
++  ++seq;
++  static bool proc_add_seen;
++
++  if (test_verbose)
++    printf ("info: server_dispatch server_id=%d seq=%u rq_proc=%lu\n",
++            server_id, seq, request->rq_proc);
++
++  switch (request->rq_proc)
++    {
++    case PROC_ADD:
++      {
++        struct test_query query;
++        memset (&query, 0xc0, sizeof (query));
++        TEST_VERIFY_EXIT
++          (svc_getargs (transport, xdr_test_query,
++                        (void *) &query));
++
++        if (test_verbose)
++          printf ("  a=%u b=%u timeout_ms=%u\n",
++                  query.a, query.b, query.timeout_ms);
++
++        usleep (query.timeout_ms * 1000);
++
++        struct test_response response =
++          {
++            .server_id = server_id,
++            .seq = seq,
++            .sum = query.a + query.b,
++          };
++        TEST_VERIFY (svc_sendreply (transport, xdr_test_response,
++                                    (void *) &response));
++        if (test_verbose)
++          printf ("  server id %d response seq=%u sent\n", server_id, seq);
++        proc_add_seen = true;
++      }
++      break;
++
++    case PROC_EXIT:
++      TEST_VERIFY (proc_add_seen);
++      TEST_VERIFY (svc_sendreply (transport, (xdrproc_t) xdr_void, NULL));
++      _exit (EXIT_MARKER);
++      break;
++
++    default:
++      FAIL_EXIT1 ("invalid rq_proc value: %lu", request->rq_proc);
++      break;
++    }
++}
++
++/* Return the number seconds since an arbitrary point in time.  */
++static double
++get_ticks (void)
++{
++  {
++    struct timespec ts;
++    if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0)
++      return ts.tv_sec + ts.tv_nsec * 1e-9;
++  }
++  {
++    struct timeval tv;
++    TEST_VERIFY_EXIT (gettimeofday (&tv, NULL) == 0);
++    return tv.tv_sec + tv.tv_usec * 1e-6;
++  }
++}
++
++static int
++do_test (void)
++{
++  support_become_root ();
++  support_enter_network_namespace ();
++
++  /* Information about the test servers.  */
++  struct
++  {
++    SVCXPRT *transport;
++    struct sockaddr_in address;
++    pid_t pid;
++    uint32_t xid;
++  } servers[SERVER_COUNT];
++
++  /* Spawn the test servers.  */
++  for (int i = 0; i < SERVER_COUNT; ++i)
++    {
++      servers[i].transport = svcudp_create (RPC_ANYSOCK);
++      TEST_VERIFY_EXIT (servers[i].transport != NULL);
++      servers[i].address = (struct sockaddr_in)
++        {
++          .sin_family = AF_INET,
++          .sin_addr.s_addr = htonl (INADDR_LOOPBACK),
++          .sin_port = htons (servers[i].transport->xp_port),
++        };
++      servers[i].xid = 0xabcd0101 + i;
++      if (test_verbose)
++        printf ("info: setting up server %d xid=%x on port %d\n",
++                i, servers[i].xid, servers[i].transport->xp_port);
++
++      server_id = i;
++      servers[i].pid = xfork ();
++      if (servers[i].pid == 0)
++        {
++          TEST_VERIFY (svc_register (servers[i].transport,
++                                     PROGNUM, VERSNUM, server_dispatch, 0));
++          svc_run ();
++          FAIL_EXIT1 ("supposed to be unreachable");
++        }
++      /* We need to close the socket so that we do not accidentally
++         consume the request.  */
++      TEST_VERIFY (close (servers[i].transport->xp_sock) == 0);
++    }
++
++
++  /* The following code mirrors what ypbind does.  */
++
++  /* Copied from clnt_udp.c (like ypbind).  */
++  struct cu_data
++  {
++    int cu_sock;
++    bool_t cu_closeit;
++    struct sockaddr_in cu_raddr;
++    int cu_rlen;
++    struct timeval cu_wait;
++    struct timeval cu_total;
++    struct rpc_err cu_error;
++    XDR cu_outxdrs;
++    u_int cu_xdrpos;
++    u_int cu_sendsz;
++    char *cu_outbuf;
++    u_int cu_recvsz;
++    char cu_inbuf[1];
++  };
++
++  int client_socket = xsocket (AF_INET, SOCK_DGRAM | SOCK_NONBLOCK, 0);
++  CLIENT *clnt = clntudp_create (&servers[0].address, PROGNUM, VERSNUM,
++                                 /* 5 seconds per-response timeout.  */
++                                 ((struct timeval) { 5, 0 }),
++                                 &client_socket);
++  TEST_VERIFY (clnt != NULL);
++  clnt->cl_auth = authunix_create_default ();
++  {
++    struct timeval zero = { 0, 0 };
++    TEST_VERIFY (clnt_control (clnt, CLSET_TIMEOUT, (void *) &zero));
++  }
++
++  /* Poke at internal data structures (like ypbind).  */
++  struct cu_data *cu = (struct cu_data *) clnt->cl_private;
++
++  /* Send a ping to each server.  */
++  double before_pings = get_ticks ();
++  for (int i = 0; i < SERVER_COUNT; ++i)
++    {
++      if (test_verbose)
++        printf ("info: sending server %d ping\n", i);
++      /* Reset the xid because it is changed by each invocation of
++         clnt_call.  Subtract one to compensate for the xid update
++         during the call.  */
++      *((u_int32_t *) (cu->cu_outbuf)) = servers[i].xid - 1;
++      cu->cu_raddr = servers[i].address;
++
++      struct test_query query = { .a = 100, .b = i + 1 };
++      if (i == 1)
++        /* Shorter timeout to prefer this server.  These timeouts must
++           be much shorter than the 5-second per-response timeout
++           configured with clntudp_create.  */
++        query.timeout_ms = 700;
++      else
++        query.timeout_ms = 1400;
++      struct test_response response = { 0 };
++      /* NB: Do not check the return value.  The server reply will
++         prove that the call worked.  */
++      double before_one_ping = get_ticks ();
++      clnt_call (clnt, PROC_ADD,
++                 xdr_test_query, (void *) &query,
++                 xdr_test_response, (void *) &response,
++                 ((struct timeval) { 0, 0 }));
++      double after_one_ping = get_ticks ();
++      if (test_verbose)
++        printf ("info: non-blocking send took %f seconds\n",
++                after_one_ping - before_one_ping);
++      /* clnt_call should return immediately.  Accept some delay in
++         case the process is descheduled.  */
++      TEST_VERIFY (after_one_ping - before_one_ping < 0.3);
++    }
++
++  /* Collect the non-blocking response.  */
++  if (test_verbose)
++    printf ("info: collecting response\n");
++  struct test_response response = { 0 };
++  TEST_VERIFY
++    (clnt_call (clnt, PROC_ADD, NULL, NULL,
++                xdr_test_response, (void *) &response,
++                ((struct timeval) { 0, 0 })) == RPC_SUCCESS);
++  double after_pings = get_ticks ();
++  if (test_verbose)
++    printf ("info: send/receive took %f seconds\n",
++            after_pings - before_pings);
++  /* Expected timeout is 0.7 seconds.  */
++  TEST_VERIFY (0.7 <= after_pings - before_pings);
++  TEST_VERIFY (after_pings - before_pings < 1.2);
++
++  uint32_t xid;
++  memcpy (&xid, &cu->cu_inbuf, sizeof (xid));
++  if (test_verbose)
++    printf ("info: non-blocking response: xid=%x server_id=%u seq=%u sum=%u\n",
++            xid, response.server_id, response.seq, response.sum);
++  /* Check that the reply from the preferred server was used.  */
++  TEST_VERIFY (servers[1].xid == xid);
++  TEST_VERIFY (response.server_id == 1);
++  TEST_VERIFY (response.seq == 1);
++  TEST_VERIFY (response.sum == 102);
++
++  auth_destroy (clnt->cl_auth);
++  clnt_destroy (clnt);
++
++  for (int i = 0; i < SERVER_COUNT; ++i)
++    {
++      if (test_verbose)
++        printf ("info: requesting server %d termination\n", i);
++      client_socket = RPC_ANYSOCK;
++      clnt = clntudp_create (&servers[i].address, PROGNUM, VERSNUM,
++                             ((struct timeval) { 5, 0 }),
++                             &client_socket);
++      TEST_VERIFY_EXIT (clnt != NULL);
++      TEST_VERIFY (clnt_call (clnt, PROC_EXIT,
++                              (xdrproc_t) xdr_void, NULL,
++                              (xdrproc_t) xdr_void, NULL,
++                              ((struct timeval) { 3, 0 })) == RPC_SUCCESS);
++      clnt_destroy (clnt);
++
++      int status;
++      xwaitpid (servers[i].pid, &status, 0);
++      TEST_VERIFY (WIFEXITED (status) && WEXITSTATUS (status) == EXIT_MARKER);
++    }
++
++  return 0;
++}
++
++#include <support/test-driver.c>
+Index: b/sunrpc/tst-udp-timeout.c
+===================================================================
+--- /dev/null
++++ b/sunrpc/tst-udp-timeout.c
+@@ -0,0 +1,402 @@
++/* Test timeout handling in the UDP client.
++   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/>.  */
++
++#include <netinet/in.h>
++#include <rpc/clnt.h>
++#include <rpc/svc.h>
++#include <stdbool.h>
++#include <string.h>
++#include <support/check.h>
++#include <support/namespace.h>
++#include <support/test-driver.h>
++#include <support/xsocket.h>
++#include <support/xunistd.h>
++#include <sys/socket.h>
++#include <time.h>
++#include <unistd.h>
++
++/* Test data serialization and deserialization.   */
++
++struct test_query
++{
++  uint32_t a;
++  uint32_t b;
++  uint32_t timeout_ms;
++  uint32_t wait_for_seq;
++  uint32_t garbage_packets;
++};
++
++static bool_t
++xdr_test_query (XDR *xdrs, void *data, ...)
++{
++  struct test_query *p = data;
++  return xdr_uint32_t (xdrs, &p->a)
++    && xdr_uint32_t (xdrs, &p->b)
++    && xdr_uint32_t (xdrs, &p->timeout_ms)
++    && xdr_uint32_t (xdrs, &p->wait_for_seq)
++    && xdr_uint32_t (xdrs, &p->garbage_packets);
++}
++
++struct test_response
++{
++  uint32_t seq;
++  uint32_t sum;
++};
++
++static bool_t
++xdr_test_response (XDR *xdrs, void *data, ...)
++{
++  struct test_response *p = data;
++  return xdr_uint32_t (xdrs, &p->seq)
++    && xdr_uint32_t (xdrs, &p->sum);
++}
++
++/* Implementation of the test server.  */
++
++enum
++  {
++    /* RPC parameters, chosen at random.  */
++    PROGNUM = 15717,
++    VERSNUM = 13689,
++
++    /* Main RPC operation.  */
++    PROC_ADD = 1,
++
++    /* Reset the sequence number.  */
++    PROC_RESET_SEQ,
++
++    /* Request process termination.  */
++    PROC_EXIT,
++
++    /* Special exit status to mark successful processing.  */
++    EXIT_MARKER = 55,
++  };
++
++static void
++server_dispatch (struct svc_req *request, SVCXPRT *transport)
++{
++  /* Query sequence number.  */
++  static uint32_t seq = 0;
++  ++seq;
++
++  if (test_verbose)
++    printf ("info: server_dispatch seq=%u rq_proc=%lu\n",
++            seq, request->rq_proc);
++
++  switch (request->rq_proc)
++    {
++    case PROC_ADD:
++      {
++        struct test_query query;
++        memset (&query, 0xc0, sizeof (query));
++        TEST_VERIFY_EXIT
++          (svc_getargs (transport, xdr_test_query,
++                        (void *) &query));
++
++        if (test_verbose)
++          printf ("  a=%u b=%u timeout_ms=%u wait_for_seq=%u"
++                  " garbage_packets=%u\n",
++                  query.a, query.b, query.timeout_ms, query.wait_for_seq,
++                  query.garbage_packets);
++
++        if (seq < query.wait_for_seq)
++          {
++            /* No response at this point.  */
++            if (test_verbose)
++              printf ("  skipped response\n");
++            break;
++          }
++
++        if (query.garbage_packets > 0)
++          {
++            int per_packet_timeout;
++            if (query.timeout_ms > 0)
++              per_packet_timeout
++                = query.timeout_ms * 1000 / query.garbage_packets;
++            else
++              per_packet_timeout = 0;
++
++            char buf[20];
++            memset (&buf, 0xc0, sizeof (buf));
++            for (int i = 0; i < query.garbage_packets; ++i)
++              {
++                /* 13 is relatively prime to 20 = sizeof (buf) + 1, so
++                   the len variable will cover the entire interval
++                   [0, 20] if query.garbage_packets is sufficiently
++                   large.  */
++                size_t len = (i * 13 + 1) % (sizeof (buf) + 1);
++                TEST_VERIFY (sendto (transport->xp_sock,
++                                     buf, len, MSG_NOSIGNAL,
++                                     (struct sockaddr *) &transport->xp_raddr,
++                                     transport->xp_addrlen) == len);
++                if (per_packet_timeout > 0)
++                  usleep (per_packet_timeout);
++              }
++          }
++        else if (query.timeout_ms > 0)
++          usleep (query.timeout_ms * 1000);
++
++        struct test_response response =
++          {
++            .seq = seq,
++            .sum = query.a + query.b,
++          };
++        TEST_VERIFY (svc_sendreply (transport, xdr_test_response,
++                                    (void *) &response));
++      }
++      break;
++
++    case PROC_RESET_SEQ:
++      seq = 0;
++      TEST_VERIFY (svc_sendreply (transport, (xdrproc_t) xdr_void, NULL));
++      break;
++
++    case PROC_EXIT:
++      TEST_VERIFY (svc_sendreply (transport, (xdrproc_t) xdr_void, NULL));
++      _exit (EXIT_MARKER);
++      break;
++
++    default:
++      FAIL_EXIT1 ("invalid rq_proc value: %lu", request->rq_proc);
++      break;
++    }
++}
++
++/* Implementation of the test client.  */
++
++static struct test_response
++test_call (CLIENT *clnt, int proc, struct test_query query,
++           struct timeval timeout)
++{
++  if (test_verbose)
++    printf ("info: test_call proc=%d timeout=%lu.%06lu\n",
++            proc, (unsigned long) timeout.tv_sec,
++            (unsigned long) timeout.tv_usec);
++  struct test_response response;
++  TEST_VERIFY_EXIT (clnt_call (clnt, proc,
++                               xdr_test_query, (void *) &query,
++                               xdr_test_response, (void *) &response,
++                               timeout)
++                    == RPC_SUCCESS);
++  return response;
++}
++
++static void
++test_call_timeout (CLIENT *clnt, int proc, struct test_query query,
++                   struct timeval timeout)
++{
++  struct test_response response;
++  TEST_VERIFY (clnt_call (clnt, proc,
++                          xdr_test_query, (void *) &query,
++                          xdr_test_response, (void *) &response,
++                          timeout)
++               == RPC_TIMEDOUT);
++}
++
++/* Complete one regular RPC call to drain the server socket
++   buffer.  Resets the sequence number.  */
++static void
++test_call_flush (CLIENT *clnt)
++{
++  /* This needs a longer timeout to flush out all pending requests.
++     The choice of 5 seconds is larger than the per-response timeouts
++     requested via the timeout_ms field.  */
++  if (test_verbose)
++    printf ("info: flushing pending queries\n");
++  TEST_VERIFY_EXIT (clnt_call (clnt, PROC_RESET_SEQ,
++                               (xdrproc_t) xdr_void, NULL,
++                               (xdrproc_t) xdr_void, NULL,
++                               ((struct timeval) { 5, 0 }))
++                    == RPC_SUCCESS);
++}
++
++/* Return the number seconds since an arbitrary point in time.  */
++static double
++get_ticks (void)
++{
++  {
++    struct timespec ts;
++    if (clock_gettime (CLOCK_MONOTONIC, &ts) == 0)
++      return ts.tv_sec + ts.tv_nsec * 1e-9;
++  }
++  {
++    struct timeval tv;
++    TEST_VERIFY_EXIT (gettimeofday (&tv, NULL) == 0);
++    return tv.tv_sec + tv.tv_usec * 1e-6;
++  }
++}
++
++static void
++test_udp_server (int port)
++{
++  struct sockaddr_in sin =
++    {
++      .sin_family = AF_INET,
++      .sin_addr.s_addr = htonl (INADDR_LOOPBACK),
++      .sin_port = htons (port)
++    };
++  int sock = RPC_ANYSOCK;
++
++  /* The client uses a 1.5 second timeout for retries.  The timeouts
++     are arbitrary, but chosen so that there is a substantial gap
++     between them, but the total time spent waiting is not too
++     large.  */
++  CLIENT *clnt = clntudp_create (&sin, PROGNUM, VERSNUM,
++                                 (struct timeval) { 1, 500 * 1000 },
++                                 &sock);
++  TEST_VERIFY_EXIT (clnt != NULL);
++
++  /* Basic call/response test.  */
++  struct test_response response = test_call
++    (clnt, PROC_ADD,
++     (struct test_query) { .a = 17, .b = 4 },
++     (struct timeval) { 3, 0 });
++  TEST_VERIFY (response.sum == 21);
++  TEST_VERIFY (response.seq == 1);
++
++  /* Check that garbage packets do not interfere with timeout
++     processing.  */
++  double before = get_ticks ();
++  response = test_call
++    (clnt, PROC_ADD,
++     (struct test_query) {
++       .a = 19, .b = 4, .timeout_ms = 500, .garbage_packets = 21,
++     },
++     (struct timeval) { 3, 0 });
++  TEST_VERIFY (response.sum == 23);
++  TEST_VERIFY (response.seq == 2);
++  double after = get_ticks ();
++  if (test_verbose)
++    printf ("info: 21 garbage packets took %f seconds\n", after - before);
++  /* Expected timeout is 0.5 seconds.  Add some slack in case process
++     scheduling delays processing the query or response, but do not
++     accept a retry (which would happen at 1.5 seconds).  */
++  TEST_VERIFY (0.5 <= after - before);
++  TEST_VERIFY (after - before < 1.2);
++  test_call_flush (clnt);
++
++  /* Check that missing a response introduces a 1.5 second timeout, as
++     requested when calling clntudp_create.  */
++  before = get_ticks ();
++  response = test_call
++    (clnt, PROC_ADD,
++     (struct test_query) { .a = 170, .b = 40, .wait_for_seq = 2 },
++     (struct timeval) { 3, 0 });
++  TEST_VERIFY (response.sum == 210);
++  TEST_VERIFY (response.seq == 2);
++  after = get_ticks ();
++  if (test_verbose)
++    printf ("info: skipping one response took %f seconds\n",
++            after - before);
++  /* Expected timeout is 1.5 seconds.  Do not accept a second retry
++     (which would happen at 3 seconds).  */
++  TEST_VERIFY (1.5 <= after - before);
++  TEST_VERIFY (after - before < 2.9);
++  test_call_flush (clnt);
++
++  /* Check that the overall timeout wins against the per-query
++     timeout.  */
++  before = get_ticks ();
++  test_call_timeout
++    (clnt, PROC_ADD,
++     (struct test_query) { .a = 170, .b = 41, .wait_for_seq = 2 },
++     (struct timeval) { 0, 750 * 1000 });
++  after = get_ticks ();
++  if (test_verbose)
++    printf ("info: 0.75 second timeout took %f seconds\n",
++            after - before);
++  TEST_VERIFY (0.75 <= after - before);
++  TEST_VERIFY (after - before < 1.4);
++  test_call_flush (clnt);
++
++  for (int with_garbage = 0; with_garbage < 2; ++with_garbage)
++    {
++      /* Check that no response at all causes the client to bail out.  */
++      before = get_ticks ();
++      test_call_timeout
++        (clnt, PROC_ADD,
++         (struct test_query) {
++           .a = 170, .b = 40, .timeout_ms = 1200,
++           .garbage_packets = with_garbage * 21
++         },
++         (struct timeval) { 0, 750 * 1000 });
++      after = get_ticks ();
++      if (test_verbose)
++        printf ("info: test_udp_server: 0.75 second timeout took %f seconds"
++                " (garbage %d)\n",
++                after - before, with_garbage);
++      TEST_VERIFY (0.75 <= after - before);
++      TEST_VERIFY (after - before < 1.4);
++      test_call_flush (clnt);
++
++      /* As above, but check the total timeout.  */
++      before = get_ticks ();
++      test_call_timeout
++        (clnt, PROC_ADD,
++         (struct test_query) {
++           .a = 170, .b = 40, .timeout_ms = 3000,
++           .garbage_packets = with_garbage * 30
++         },
++         (struct timeval) { 2, 300 * 1000 });
++      after = get_ticks ();
++      if (test_verbose)
++        printf ("info: test_udp_server: 2.3 second timeout took %f seconds"
++                " (garbage %d)\n",
++                after - before, with_garbage);
++      TEST_VERIFY (2.3 <= after - before);
++      TEST_VERIFY (after - before < 3.0);
++      test_call_flush (clnt);
++    }
++
++  TEST_VERIFY_EXIT (clnt_call (clnt, PROC_EXIT,
++                               (xdrproc_t) xdr_void, NULL,
++                               (xdrproc_t) xdr_void, NULL,
++                               ((struct timeval) { 5, 0 }))
++                    == RPC_SUCCESS);
++  clnt_destroy (clnt);
++}
++
++static int
++do_test (void)
++{
++  support_become_root ();
++  support_enter_network_namespace ();
++
++  SVCXPRT *transport = svcudp_create (RPC_ANYSOCK);
++  TEST_VERIFY_EXIT (transport != NULL);
++  TEST_VERIFY (svc_register (transport, PROGNUM, VERSNUM, server_dispatch, 0));
++
++  pid_t pid = xfork ();
++  if (pid == 0)
++    {
++      svc_run ();
++      FAIL_EXIT1 ("supposed to be unreachable");
++    }
++  test_udp_server (transport->xp_port);
++
++  int status;
++  xwaitpid (pid, &status, 0);
++  TEST_VERIFY (WIFEXITED (status) && WEXITSTATUS (status) == EXIT_MARKER);
++
++  SVC_DESTROY (transport);
++  return 0;
++}
++
++/* The minimum run time is around 17 seconds.  */
++#define TIMEOUT 25
++#include <support/test-driver.c>
+Index: b/inet/net-internal.h
+===================================================================
+--- /dev/null
++++ b/inet/net-internal.h
+@@ -0,0 +1,112 @@
++/* Network-related functions for internal library use.
++   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 _NET_INTERNAL_H
++#define _NET_INTERNAL_H 1
++
++#include <stdbool.h>
++#include <stdint.h>
++#include <sys/time.h>
++
++/* Deadline handling for enforcing timeouts.
++
++   Code should call __deadline_current_time to obtain the current time
++   and cache it locally.  The cache needs updating after every
++   long-running or potentially blocking operation.  Deadlines relative
++   to the current time can be computed using __deadline_from_timeval.
++   The deadlines may have to be recomputed in response to certain
++   events (such as an incoming packet), but they are absolute (not
++   relative to the current time).  A timeout suitable for use with the
++   poll function can be computed from such a deadline using
++   __deadline_to_ms.
++
++   The fields in the structs defined belowed should only be used
++   within the implementation.  */
++
++/* Cache of the current time.  Used to compute deadlines from relative
++   timeouts and vice versa.  */
++struct deadline_current_time
++{
++  struct timespec current;
++};
++
++/* Return the current time.  Terminates the process if the current
++   time is not available.  */
++struct deadline_current_time __deadline_current_time (void)
++  internal_function attribute_hidden;
++
++/* Computed absolute deadline.  */
++struct deadline
++{
++  struct timespec absolute;
++};
++
++
++/* For internal use only.  */
++static inline bool
++__deadline_is_infinite (struct deadline deadline)
++{
++  return deadline.absolute.tv_nsec < 0;
++}
++
++/* Return true if the current time is at the deadline or past it.  */
++static inline bool
++__deadline_elapsed (struct deadline_current_time current,
++                    struct deadline deadline)
++{
++  return !__deadline_is_infinite (deadline)
++    && (current.current.tv_sec > deadline.absolute.tv_sec
++        || (current.current.tv_sec == deadline.absolute.tv_sec
++            && current.current.tv_nsec >= deadline.absolute.tv_nsec));
++}
++
++/* Return the deadline which occurs first.  */
++static inline struct deadline
++__deadline_first (struct deadline left, struct deadline right)
++{
++  if (__deadline_is_infinite (right)
++      || left.absolute.tv_sec < right.absolute.tv_sec
++      || (left.absolute.tv_sec == right.absolute.tv_sec
++          && left.absolute.tv_nsec < right.absolute.tv_nsec))
++    return left;
++  else
++    return right;
++}
++
++/* Add TV to the current time and return it.  Returns a special
++   infinite absolute deadline on overflow.  */
++struct deadline __deadline_from_timeval (struct deadline_current_time,
++                                         struct timeval tv)
++  internal_function attribute_hidden;
++
++/* Compute the number of milliseconds until the specified deadline,
++   from the current time in the argument.  The result is mainly for
++   use with poll.  If the deadline has already passed, return 0.  If
++   the result would overflow an int, return INT_MAX.  */
++int __deadline_to_ms (struct deadline_current_time, struct deadline)
++  internal_function attribute_hidden;
++
++/* Return true if TV.tv_sec is non-negative and TV.tv_usec is in the
++   interval [0, 999999].  */
++static inline bool
++__is_timeval_valid_timeout (struct timeval tv)
++{
++  return tv.tv_sec >= 0 && tv.tv_usec >= 0 && tv.tv_usec < 1000 * 1000;
++}
++
++#endif /* _NET_INTERNAL_H */
+Index: b/inet/Makefile
+===================================================================
+--- a/inet/Makefile
++++ b/inet/Makefile
+@@ -44,13 +44,18 @@ routines := htonl htons		\
+ 	    getaliasent_r getaliasent getaliasname getaliasname_r \
+ 	    in6_addr getnameinfo if_index ifaddrs inet6_option \
+ 	    getipv4sourcefilter setipv4sourcefilter \
+-	    getsourcefilter setsourcefilter inet6_opt inet6_rth
++	    getsourcefilter setsourcefilter inet6_opt inet6_rth \
++	    deadline
+ 
+ aux := check_pf check_native ifreq
+ 
+ tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
+ 	 tst-gethnm test-ifaddrs bug-if1 test-inet6_opt tst-ether_line \
+-	 tst-getni1 tst-getni2 tst-inet6_rth tst-checks
++	 tst-getni1 tst-getni2 tst-inet6_rth tst-checks tst-deadline
++
++# tst-deadline must be linked statically so that we can access
++# internal functions.
++tests-static += tst-deadline
+ 
+ include ../Rules
+ 
diff --git a/SOURCES/glibc-rh1234449-1.patch b/SOURCES/glibc-rh1234449-1.patch
new file mode 100644
index 0000000..4b4f9c4
--- /dev/null
+++ b/SOURCES/glibc-rh1234449-1.patch
@@ -0,0 +1,73 @@
+commit 45c30c61c9001867c1891f5862764f084e53f348
+Author: Ondřej Bílka <neleai@seznam.cz>
+Date:   Sun Oct 20 08:25:25 2013 +0200
+
+    Replace alloca in __tzfile_read by malloc. Fixes bug 15670
+
+diff --git a/time/tzfile.c b/time/tzfile.c
+index 9dd5130..3ea3051 100644
+--- a/time/tzfile.c
++++ b/time/tzfile.c
+@@ -114,6 +114,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
+   int was_using_tzfile = __use_tzfile;
+   int trans_width = 4;
+   size_t tzspec_len;
++  char *new = NULL;
+ 
+   if (sizeof (time_t) != 4 && sizeof (time_t) != 8)
+     abort ();
+@@ -145,22 +146,12 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
+   if (*file != '/')
+     {
+       const char *tzdir;
+-      unsigned int len, tzdir_len;
+-      char *new, *tmp;
+ 
+       tzdir = getenv ("TZDIR");
+       if (tzdir == NULL || *tzdir == '\0')
+-	{
+-	  tzdir = default_tzdir;
+-	  tzdir_len = sizeof (default_tzdir) - 1;
+-	}
+-      else
+-	tzdir_len = strlen (tzdir);
+-      len = strlen (file) + 1;
+-      new = (char *) __alloca (tzdir_len + 1 + len);
+-      tmp = __mempcpy (new, tzdir, tzdir_len);
+-      *tmp++ = '/';
+-      memcpy (tmp, file, len);
++	tzdir = default_tzdir;
++      if (__asprintf (&new, "%s/%s", tzdir, file) == -1)
++	goto ret_free_transitions;
+       file = new;
+     }
+ 
+@@ -170,11 +161,7 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
+       && stat64 (file, &st) == 0
+       && tzfile_ino == st.st_ino && tzfile_dev == st.st_dev
+       && tzfile_mtime == st.st_mtime)
+-    {
+-      /* Nothing to do.  */
+-      __use_tzfile = 1;
+-      return;
+-    }
++    goto done;  /* Nothing to do.  */
+ 
+   /* Note the file is opened with cancellation in the I/O functions
+      disabled and if available FD_CLOEXEC set.  */
+@@ -527,12 +514,15 @@ __tzfile_read (const char *file, size_t extra, char **extrap)
+   __daylight = rule_stdoff != rule_dstoff;
+   __timezone = -rule_stdoff;
+ 
++ done:
+   __use_tzfile = 1;
++  free (new);
+   return;
+ 
+  lose:
+   fclose (f);
+  ret_free_transitions:
++  free (new);
+   free ((void *) transitions);
+   transitions = NULL;
+ }
diff --git a/SOURCES/glibc-rh1234449-2.patch b/SOURCES/glibc-rh1234449-2.patch
new file mode 100644
index 0000000..7939344
--- /dev/null
+++ b/SOURCES/glibc-rh1234449-2.patch
@@ -0,0 +1,940 @@
+commit 42261ad731991df345880b0b509d83b0b9a9b9d8
+Author: Florian Weimer <fweimer@redhat.com>
+Date:   Fri Apr 24 17:34:47 2015 +0200
+
+    Make time zone file parser more robust [BZ #17715]
+
+commit 6807b1db8233ed84671f061b5d825622233df303
+Author: Kevin Easton <kevin@guarana.org>
+Date:   Tue Feb 24 23:57:07 2015 -0500
+
+    Reduce lock contention in __tz_convert() [BZ #16145] (partial fix)
+
+commit 9d46370ca338054cb6ea7ebeddcf06c7ac7ad1a9
+Author: Joseph Myers <joseph@codesourcery.com>
+Date:   Fri Oct 16 20:21:49 2015 +0000
+
+    Convert 703 function definitions to prototype style.
+    (A subset of these changes (tzset.c) were applied as part of this patch.)
+
+commit 0748546f660d27a2ad29fa6174d456e2f6490758
+Author: Paul Eggert <eggert@cs.ucla.edu>
+Date:   Wed Sep 18 13:15:12 2013 -0700
+
+    Support TZ transition times < 00:00:00.
+
+    This is needed for version-3 tz-format files; it supports time
+    stamps past 2037 for America/Godthab (the only entry in the tz
+    database for which this change is relevant).
+    * manual/time.texi (TZ Variable): Document transition times
+    from -167:59:59 through -00:00:01.
+    * time/tzset.c (tz_rule): Time of day is now signed.
+    (__tzset_parse_tz): Parse negative time of day.
+    (A subset of these changes were applied as part of this patch.)
+
+commit 3cc652e951c71785032019fec82e3b8543d85305
+Author: Mike Frysinger <vapier@gentoo.org>
+Date:   Fri Sep 18 13:49:08 2015 -0400
+ 
+   timezone: fix parallel check failures
+   
+   The XT testdata install rules expect the testdata dir to already exist in
+   the build tree, but it doesn't actually create it.  Instead, it relies on
+   the build-testdata define happening to be executed before it (which runs
+   zic which creates the dir).  When we run in parallel though, it's easy to
+   hit a failure:
+   $ cd timezone
+   $ rm -rf $objdir/timezone/testdata
+   $ make check -j
+   ...
+   cp testdata/XT1 .../timezone/testdata/XT1
+   cp: cannot create regular file '.../timezone/testdata/XT1': No such file or directory
+   Makefile:116: recipe for target '.../timezone/testdata/XT1' failed
+   make: *** [.../timezone/testdata/XT1] Error 1
+   make: *** Waiting for unfinished jobs....
+
+diff --git a/time/tzfile.c b/time/tzfile.c
+--- a/time/tzfile.c
++++ b/time/tzfile.c
+@@ -213,6 +213,9 @@
+   num_isstd = (size_t) decode (tzhead.tzh_ttisstdcnt);
+   num_isgmt = (size_t) decode (tzhead.tzh_ttisgmtcnt);
+ 
++  if (__glibc_unlikely (num_isstd > num_types || num_isgmt > num_types))
++    goto lose;
++
+   /* For platforms with 64-bit time_t we use the new format if available.  */
+   if (sizeof (time_t) == 8 && trans_width == 4
+       && tzhead.tzh_version[0] != '\0')
+@@ -445,12 +448,20 @@
+ 	goto lose;
+ 
+       tzspec_len = st.st_size - off - 1;
+-      char *tzstr = alloca (tzspec_len);
++      if (tzspec_len == 0)
++        goto lose;
++      char *tzstr = malloc (tzspec_len);
++      if (tzstr == NULL)
++        goto lose;
+       if (getc_unlocked (f) != '\n'
+ 	  || (fread_unlocked (tzstr, 1, tzspec_len - 1, f) != tzspec_len - 1))
+-	goto lose;
++        {
++          free (tzstr);
++          goto lose;
++        }
+       tzstr[tzspec_len - 1] = '\0';
+       tzspec = __tzstring (tzstr);
++      free (tzstr);
+     }
+ 
+   /* Don't use an empty TZ string.  */
+
+diff --git a/time/tzset.c b/time/tzset.c
+--- a/time/tzset.c
++++ b/time/tzset.c
+@@ -1,4 +1,4 @@
+-/* Copyright (C) 1991-2012 Free Software Foundation, Inc.
++/* Copyright (C) 1991-2016 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
+@@ -18,6 +18,7 @@
+ #include <ctype.h>
+ #include <errno.h>
+ #include <bits/libc-lock.h>
++#include <stdbool.h>
+ #include <stddef.h>
+ #include <stdio.h>
+ #include <stdlib.h>
+@@ -54,7 +55,7 @@
+     /* When to change.  */
+     enum { J0, J1, M } type;	/* Interpretation of:  */
+     unsigned short int m, n, d;	/* Month, week, day.  */
+-    unsigned int secs;		/* Time of day.  */
++    int secs;			/* Time of day.  */
+ 
+     long int offset;		/* Seconds east of GMT (west if < 0).  */
+ 
+@@ -82,15 +83,14 @@
+ 
+ static struct tzstring_l *tzstring_list;
+ 
+-/* Allocate a permanent home for S.  It will never be moved or deallocated,
+-   but may share space with other strings.
+-   Don't modify the returned string. */
+-char *
+-__tzstring (const char *s)
++/* Allocate a permanent home for the first LEN characters of S.  It
++   will never be moved or deallocated, but may share space with other
++   strings.  Don't modify the returned string. */
++static char *
++__tzstring_len (const char *s, size_t len)
+ {
+   char *p;
+   struct tzstring_l *t, *u, *new;
+-  size_t len = strlen (s);
+ 
+   /* Walk the list and look for a match.  If this string is the same
+      as the end of an already-allocated string, it can share space. */
+@@ -98,7 +98,7 @@
+     if (len <= t->len)
+       {
+ 	p = &t->data[t->len - len];
+-	if (strcmp (s, p) == 0)
++	if (memcmp (s, p, len) == 0)
+ 	  return p;
+       }
+ 
+@@ -109,7 +109,8 @@
+ 
+   new->next = NULL;
+   new->len = len;
+-  strcpy (new->data, s);
++  memcpy (new->data, s, len);
++  new->data[len] = '\0';
+ 
+   if (u)
+     u->next = new;
+@@ -118,6 +119,15 @@
+ 
+   return new->data;
+ }
++
++/* Allocate a permanent home for S.  It will never be moved or
++   deallocated, but may share space with other strings.  Don't modify
++   the returned string. */
++char *
++__tzstring (const char *s)
++{
++  return __tzstring_len (s, strlen (s));
++}
+ 
+ /* Maximum length of a timezone name.  tzset_internal keeps this up to date
+    (never decreasing it) when ! __use_tzfile.
+@@ -125,7 +135,7 @@
+ size_t __tzname_cur_max;
+ 
+ long int
+-__tzname_max ()
++__tzname_max (void)
+ {
+   __libc_lock_lock (tzset_lock);
+ 
+@@ -164,243 +174,227 @@
+   return min (ss, 59) + min (mm, 59) * 60 + min (hh, 24) * 60 * 60;
+ }
+ 
+-
+-/* Parse the POSIX TZ-style string.  */
+-void
+-__tzset_parse_tz (tz)
+-     const char *tz;
+-{
+-  unsigned short int hh, mm, ss;
+-
+-  /* Clear out old state and reset to unnamed UTC.  */
+-  memset (tz_rules, '\0', sizeof tz_rules);
+-  tz_rules[0].name = tz_rules[1].name = "";
+-
+-  /* Get the standard timezone name.  */
+-  char *tzbuf = strdupa (tz);
+-
+-  int consumed;
+-  if (sscanf (tz, "%[A-Za-z]%n", tzbuf, &consumed) != 1)
+-    {
+-      /* Check for the quoted version.  */
+-      char *wp = tzbuf;
+-      if (__builtin_expect (*tz++ != '<', 0))
+-	goto out;
+-
+-      while (isalnum (*tz) || *tz == '+' || *tz == '-')
+-	*wp++ = *tz++;
+-      if (__builtin_expect (*tz++ != '>' || wp - tzbuf < 3, 0))
+-	goto out;
+-      *wp = '\0';
++/* Parses the time zone name at *TZP, and writes a pointer to an
++   interned string to tz_rules[WHICHRULE].name.  On success, advances
++   *TZP, and returns true.  Returns false otherwise.  */
++static bool
++parse_tzname (const char **tzp, int whichrule)
++{
++  const char *start = *tzp;
++  const char *p = start;
++  while (('a' <= *p && *p <= 'z')
++	 || ('A' <= *p && *p <= 'Z'))
++      ++p;
++  size_t len = p - start;
++  if (len < 3)
++    {
++      p = *tzp;
++      if (__glibc_unlikely (*p++ != '<'))
++	return false;
++      start = p;
++      while (('a' <= *p && *p <= 'z')
++	     || ('A' <= *p && *p <= 'Z')
++	     || ('0' <= *p && *p <= '9')
++	     || *p == '+' || *p == '-')
++	++p;
++      len = p - start;
++      if (*p++ != '>' || len < 3)
++	return false;
+     }
+-  else if (__builtin_expect (consumed < 3, 0))
+-    goto out;
+-  else
+-    tz += consumed;
+ 
+-  tz_rules[0].name = __tzstring (tzbuf);
++  tz_rules[whichrule].name = __tzstring_len (start, len);
++
++  *tzp = p;
++  return true;
++}
+ 
+-  /* Figure out the standard offset from UTC.  */
+-  if (*tz == '\0' || (*tz != '+' && *tz != '-' && !isdigit (*tz)))
+-    goto out;
++/* Parses the time zone offset at *TZP, and writes it to
++   tz_rules[WHICHRULE].offset.  Returns true if the parse was
++   successful.  */
++static bool
++parse_offset (const char **tzp, int whichrule)
++{
++  const char *tz = *tzp;
++  if (whichrule == 0
++      && (*tz == '\0' || (*tz != '+' && *tz != '-' && !isdigit (*tz))))
++    return false;
+ 
++  long sign;
+   if (*tz == '-' || *tz == '+')
+-    tz_rules[0].offset = *tz++ == '-' ? 1L : -1L;
++    sign = *tz++ == '-' ? 1L : -1L;
+   else
+-    tz_rules[0].offset = -1L;
+-  switch (sscanf (tz, "%hu%n:%hu%n:%hu%n",
+-		  &hh, &consumed, &mm, &consumed, &ss, &consumed))
+-    {
+-    default:
+-      tz_rules[0].offset = 0;
+-      goto out;
+-    case 1:
+-      mm = 0;
+-    case 2:
+-      ss = 0;
+-    case 3:
+-      break;
+-    }
+-  tz_rules[0].offset *= compute_offset (ss, mm, hh);
+-  tz += consumed;
+-
+-  /* Get the DST timezone name (if any).  */
+-  if (*tz != '\0')
+-    {
+-      if (sscanf (tz, "%[A-Za-z]%n", tzbuf, &consumed) != 1)
+-	{
+-	  /* Check for the quoted version.  */
+-	  char *wp = tzbuf;
+-	  const char *rp = tz;
+-	  if (__builtin_expect (*rp++ != '<', 0))
+-	    /* Punt on name, set up the offsets.  */
+-	    goto done_names;
+-
+-	  while (isalnum (*rp) || *rp == '+' || *rp == '-')
+-	    *wp++ = *rp++;
+-	  if (__builtin_expect (*rp++ != '>' || wp - tzbuf < 3, 0))
+-	    /* Punt on name, set up the offsets.  */
+-	    goto done_names;
+-	  *wp = '\0';
+-	  tz = rp;
+-	}
+-      else if (__builtin_expect (consumed < 3, 0))
+-	/* Punt on name, set up the offsets.  */
+-	goto done_names;
+-      else
+-	tz += consumed;
++    sign = -1L;
++  *tzp = tz;
+ 
+-      tz_rules[1].name = __tzstring (tzbuf);
+-
+-      /* Figure out the DST offset from GMT.  */
+-      if (*tz == '-' || *tz == '+')
+-	tz_rules[1].offset = *tz++ == '-' ? 1L : -1L;
++  unsigned short int hh;
++  unsigned short mm = 0;
++  unsigned short ss = 0;
++  int consumed = 0;
++  if (sscanf (tz, "%hu%n:%hu%n:%hu%n",
++	      &hh, &consumed, &mm, &consumed, &ss, &consumed) > 0)
++    tz_rules[whichrule].offset = sign * compute_offset (ss, mm, hh);
++  else
++    /* Nothing could be parsed. */
++    if (whichrule == 0)
++      {
++	/* Standard time defaults to offset zero.  */
++	tz_rules[0].offset = 0;
++	return false;
++      }
+       else
+-	tz_rules[1].offset = -1L;
++	/* DST defaults to one hour later than standard time.  */
++	tz_rules[1].offset = tz_rules[0].offset + (60 * 60);
++  *tzp = tz + consumed;
++  return true;
++}
+ 
+-      switch (sscanf (tz, "%hu%n:%hu%n:%hu%n",
+-		      &hh, &consumed, &mm, &consumed, &ss, &consumed))
++/* Parses the standard <-> DST rules at *TZP.  Updates
++   tz_rule[WHICHRULE].  On success, advances *TZP and returns true.
++   Otherwise, returns false.  */
++static bool
++parse_rule (const char **tzp, int whichrule)
++{
++  const char *tz = *tzp;
++  tz_rule *tzr = &tz_rules[whichrule];
++
++  /* Ignore comma to support string following the incorrect
++     specification in early POSIX.1 printings.  */
++  tz += *tz == ',';
++
++  /* Get the date of the change.  */
++  if (*tz == 'J' || isdigit (*tz))
++    {
++      char *end;
++      tzr->type = *tz == 'J' ? J1 : J0;
++      if (tzr->type == J1 && !isdigit (*++tz))
++	return false;
++      unsigned long int d = strtoul (tz, &end, 10);
++      if (end == tz || d > 365)
++	return false;
++      if (tzr->type == J1 && d == 0)
++	return false;
++      tzr->d = d;
++      tz = end;
++    }
++  else if (*tz == 'M')
++    {
++      tzr->type = M;
++      int consumed;
++      if (sscanf (tz, "M%hu.%hu.%hu%n",
++		  &tzr->m, &tzr->n, &tzr->d, &consumed) != 3
++	  || tzr->m < 1 || tzr->m > 12
++	  || tzr->n < 1 || tzr->n > 5 || tzr->d > 6)
++	return false;
++      tz += consumed;
++    }
++  else if (*tz == '\0')
++    {
++      /* Daylight time rules in the U.S. are defined in the U.S. Code,
++	 Title 15, Chapter 6, Subchapter IX - Standard Time.  These
++	 dates were established by Congress in the Energy Policy Act
++	 of 2005 [Pub. L. no. 109-58, 119 Stat 594 (2005)].
++	 Below is the equivalent of "M3.2.0,M11.1.0" [/2 not needed
++	 since 2:00AM is the default].  */
++      tzr->type = M;
++      if (tzr == &tz_rules[0])
+ 	{
+-	default:
+-	  /* Default to one hour later than standard time.  */
+-	  tz_rules[1].offset = tz_rules[0].offset + (60 * 60);
+-	  break;
+-
+-	case 1:
+-	  mm = 0;
+-	case 2:
+-	  ss = 0;
+-	case 3:
+-	  tz_rules[1].offset *= compute_offset (ss, mm, hh);
+-	  tz += consumed;
+-	  break;
++	  tzr->m = 3;
++	  tzr->n = 2;
++	  tzr->d = 0;
+ 	}
+-      if (*tz == '\0' || (tz[0] == ',' && tz[1] == '\0'))
++      else
+ 	{
+-	  /* There is no rule.  See if there is a default rule file.  */
+-	  __tzfile_default (tz_rules[0].name, tz_rules[1].name,
+-			    tz_rules[0].offset, tz_rules[1].offset);
+-	  if (__use_tzfile)
+-	    {
+-	      free (old_tz);
+-	      old_tz = NULL;
+-	      return;
+-	    }
++	  tzr->m = 11;
++	  tzr->n = 1;
++	  tzr->d = 0;
+ 	}
+     }
+   else
+-    {
+-      /* There is no DST.  */
+-      tz_rules[1].name = tz_rules[0].name;
+-      tz_rules[1].offset = tz_rules[0].offset;
+-      goto out;
++    return false;
++
++  if (*tz != '\0' && *tz != '/' && *tz != ',')
++    return false;
++  else if (*tz == '/')
++    {
++      /* Get the time of day of the change.  */
++      int negative;
++      ++tz;
++      if (*tz == '\0')
++	return false;
++      negative = *tz == '-';
++      tz += negative;
++      /* Default to 2:00 AM.  */
++      unsigned short hh = 2;
++      unsigned short mm = 0;
++      unsigned short ss = 0;
++      int consumed = 0;
++      sscanf (tz, "%hu%n:%hu%n:%hu%n",
++	      &hh, &consumed, &mm, &consumed, &ss, &consumed);;
++      tz += consumed;
++      tzr->secs = (negative ? -1 : 1) * ((hh * 60 * 60) + (mm * 60) + ss);
+     }
++  else
++    /* Default to 2:00 AM.  */
++    tzr->secs = 2 * 60 * 60;
+ 
+- done_names:
+-  /* Figure out the standard <-> DST rules.  */
+-  for (unsigned int whichrule = 0; whichrule < 2; ++whichrule)
+-    {
+-      register tz_rule *tzr = &tz_rules[whichrule];
++  tzr->computed_for = -1;
++  *tzp = tz;
++  return true;
++}
+ 
+-      /* Ignore comma to support string following the incorrect
+-	 specification in early POSIX.1 printings.  */
+-      tz += *tz == ',';
++/* Parse the POSIX TZ-style string.  */
++void
++__tzset_parse_tz (const char *tz)
++{
++  /* Clear out old state and reset to unnamed UTC.  */
++  memset (tz_rules, '\0', sizeof tz_rules);
++  tz_rules[0].name = tz_rules[1].name = "";
+ 
+-      /* Get the date of the change.  */
+-      if (*tz == 'J' || isdigit (*tz))
+-	{
+-	  char *end;
+-	  tzr->type = *tz == 'J' ? J1 : J0;
+-	  if (tzr->type == J1 && !isdigit (*++tz))
+-	    goto out;
+-	  unsigned long int d = strtoul (tz, &end, 10);
+-	  if (end == tz || d > 365)
+-	    goto out;
+-	  if (tzr->type == J1 && d == 0)
+-	    goto out;
+-	  tzr->d = d;
+-	  tz = end;
+-	}
+-      else if (*tz == 'M')
+-	{
+-	  tzr->type = M;
+-	  if (sscanf (tz, "M%hu.%hu.%hu%n",
+-		      &tzr->m, &tzr->n, &tzr->d, &consumed) != 3
+-	      || tzr->m < 1 || tzr->m > 12
+-	      || tzr->n < 1 || tzr->n > 5 || tzr->d > 6)
+-	    goto out;
+-	  tz += consumed;
+-	}
+-      else if (*tz == '\0')
++  /* Get the standard timezone name.  */
++  if (parse_tzname (&tz, 0) && parse_offset (&tz, 0))
++    {
++      /* Get the DST timezone name (if any).  */
++      if (*tz != '\0')
+ 	{
+-         /* Daylight time rules in the U.S. are defined in the
+-            U.S. Code, Title 15, Chapter 6, Subchapter IX - Standard
+-            Time.  These dates were established by Congress in the
+-            Energy Policy Act of 2005 [Pub. L. no. 109-58, 119 Stat 594
+-            (2005)].
+-	    Below is the equivalent of "M3.2.0,M11.1.0" [/2 not needed
+-	    since 2:00AM is the default].  */
+-	  tzr->type = M;
+-	  if (tzr == &tz_rules[0])
++	  if (parse_tzname (&tz, 1))
+ 	    {
+-	      tzr->m = 3;
+-	      tzr->n = 2;
+-	      tzr->d = 0;
+-	    }
+-	  else
+-	    {
+-	      tzr->m = 11;
+-	      tzr->n = 1;
+-	      tzr->d = 0;
++	      parse_offset (&tz, 1);
++	      if (*tz == '\0' || (tz[0] == ',' && tz[1] == '\0'))
++		{
++		  /* There is no rule.  See if there is a default rule
++		     file.  */
++		  __tzfile_default (tz_rules[0].name, tz_rules[1].name,
++				    tz_rules[0].offset, tz_rules[1].offset);
++		  if (__use_tzfile)
++		    {
++		      free (old_tz);
++		      old_tz = NULL;
++		      return;
++		    }
++		}
+ 	    }
++	  /* Figure out the standard <-> DST rules.  */
++	  if (parse_rule (&tz, 0))
++	    parse_rule (&tz, 1);
+ 	}
+       else
+-	goto out;
+-
+-      if (*tz != '\0' && *tz != '/' && *tz != ',')
+-	goto out;
+-      else if (*tz == '/')
+ 	{
+-	  /* Get the time of day of the change.  */
+-	  ++tz;
+-	  if (*tz == '\0')
+-	    goto out;
+-	  consumed = 0;
+-	  switch (sscanf (tz, "%hu%n:%hu%n:%hu%n",
+-			  &hh, &consumed, &mm, &consumed, &ss, &consumed))
+-	    {
+-	    default:
+-	      hh = 2;		/* Default to 2:00 AM.  */
+-	    case 1:
+-	      mm = 0;
+-	    case 2:
+-	      ss = 0;
+-	    case 3:
+-	      break;
+-	    }
+-	  tz += consumed;
+-	  tzr->secs = (hh * 60 * 60) + (mm * 60) + ss;
++	  /* There is no DST.  */
++	  tz_rules[1].name = tz_rules[0].name;
++	  tz_rules[1].offset = tz_rules[0].offset;
+ 	}
+-      else
+-	/* Default to 2:00 AM.  */
+-	tzr->secs = 2 * 60 * 60;
+-
+-      tzr->computed_for = -1;
+     }
+ 
+- out:
+   update_vars ();
+ }
+ 
+ /* Interpret the TZ envariable.  */
+ static void
+ internal_function
+-tzset_internal (always, explicit)
+-     int always;
+-     int explicit;
++tzset_internal (int always, int explicit)
+ {
+   static int is_initialized;
+-  register const char *tz;
++  const char *tz;
+ 
+   if (is_initialized && !always)
+     return;
+@@ -467,11 +461,9 @@
+    put it in RULE->change, saving YEAR in RULE->computed_for.  */
+ static void
+ internal_function
+-compute_change (rule, year)
+-     tz_rule *rule;
+-     int year;
++compute_change (tz_rule *rule, int year)
+ {
+-  register time_t t;
++  time_t t;
+ 
+   if (year != -1 && rule->computed_for == year)
+     /* Operations on times in 2 BC will be slower.  Oh well.  */
+@@ -558,10 +550,7 @@
+    `__timezone', and `__daylight' accordingly.  */
+ void
+ internal_function
+-__tz_compute (timer, tm, use_localtime)
+-     time_t timer;
+-     struct tm *tm;
+-     int use_localtime;
++__tz_compute (time_t timer, struct tm *tm, int use_localtime)
+ {
+   compute_change (&tz_rules[0], 1900 + tm->tm_year);
+   compute_change (&tz_rules[1], 1900 + tm->tm_year);
+@@ -641,6 +630,8 @@
+       leap_extra_secs = 0;
+     }
+ 
++  __libc_lock_unlock (tzset_lock);
++
+   if (tp)
+     {
+       if (! use_localtime)
+@@ -656,8 +647,6 @@
+ 	tp = NULL;
+     }
+ 
+-  __libc_lock_unlock (tzset_lock);
+-
+   return tp;
+ }
+ 
+diff --git a/timezone/Makefile b/timezone/Makefile
+index 17424b8..5f18545 100644
+--- a/timezone/Makefile
++++ b/timezone/Makefile
+@@ -23,7 +23,7 @@
+ extra-objs := scheck.o ialloc.o
+ 
+ others	:= zdump zic
+-tests	:= test-tz tst-timezone
++tests	:= test-tz tst-timezone tst-tzset
+ 
+ # pacificnew doesn't compile; if it is to be used, it should be included in
+ # northamerica.
+@@ -87,9 +87,11 @@
+ 				       Australia/Melbourne \
+ 				       America/Sao_Paulo Asia/Tokyo \
+ 				       Europe/London)
++$(objpfx)tst-tzset.out: $(addprefix $(testdata)/XT, 1 2 3 4)
+ 
+ test-tz-ENV = TZDIR=$(testdata)
+ tst-timezone-ENV = TZDIR=$(testdata)
++tst-tzset-ENV = TZDIR=$(testdata)
+ 
+ # Note this must come second in the deps list for $(built-program-cmd) to work.
+ zic-deps = $(objpfx)zic $(leapseconds) yearistype
+@@ -111,6 +113,8 @@
+ $(testdata)/Asia/Tokyo: asia $(zic-deps)
+ 	$(build-testdata)
+ 
++$(testdata)/XT%: testdata/XT%
++	cp $< $@
+ 
+ $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
+ 	sed -e 's|/bin/bash|$(KSH)|g' \
+diff --git a/timezone/README b/timezone/README
+index 7a5e31c..2268f8e 100644
+--- a/timezone/README
++++ b/timezone/README
+@@ -15,3 +15,6 @@ version of the tzcode and tzdata packages.
+ 
+ These packages may be found at ftp://ftp.iana.org/tz/releases/.  Commentary
+ should be addressed to tz@iana.org.
++
++The subdirectory testdata contains manually edited data files for
++regression testing purposes.
+--- /dev/null
++++ b/timezone/tst-tzset.c
+@@ -0,0 +1,200 @@
++/* tzset tests with crafted time zone data.
++   Copyright (C) 2015 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/>.  */
++
++#define _GNU_SOURCE 1
++
++#include <errno.h>
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++#include <sys/resource.h>
++#include <time.h>
++#include <unistd.h>
++
++static int do_test (void);
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
++
++/* Returns the name of a large TZ file.  */
++static char *
++create_tz_file (off64_t size)
++{
++  char *path;
++  int fd = create_temp_file ("tst-tzset-", &path);
++  if (fd < 0)
++    exit (1);
++
++  // Reopen for large-file support.
++  close (fd);
++  fd = open64 (path, O_WRONLY);
++  if (fd < 0)
++    {
++      printf ("open64 (%s) failed: %m\n", path);
++      exit (1);
++    }
++
++  static const char data[] = {
++    0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
++    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
++    0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x58, 0x54, 0x47, 0x00, 0x00, 0x00,
++    0x54, 0x5a, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
++    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
++    0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++    0x00, 0x00, 0x00, 0x58, 0x54, 0x47, 0x00, 0x00,
++    0x00, 0x0a, 0x58, 0x54, 0x47, 0x30, 0x0a
++  };
++  ssize_t ret = write (fd, data, sizeof (data));
++  if (ret < 0)
++    {
++      printf ("write failed: %m\n");
++      exit (1);
++    }
++  if ((size_t) ret != sizeof (data))
++    {
++      printf ("Short write\n");
++      exit (1);
++    }
++  if (lseek64 (fd, size, SEEK_CUR) < 0)
++    {
++      printf ("lseek failed: %m\n");
++      close (fd);
++      return NULL;
++    }
++  if (write (fd, "", 1) != 1)
++    {
++      printf ("Single-byte write failed\n");
++      close (fd);
++      return NULL;
++    }
++  if (close (fd) != 0)
++    {
++      printf ("close failed: %m\n");
++      exit (1);
++    }
++  return path;
++}
++
++static void
++test_tz_file (off64_t size)
++{
++  char *path = create_tz_file (size);
++  if (setenv ("TZ", path, 1) < 0)
++    {
++      printf ("setenv failed: %m\n");
++      exit (1);
++    }
++  tzset ();
++  free (path);
++}
++
++static int
++do_test (void)
++{
++  /* Limit the size of the process.  Otherwise, some of the tests will
++     consume a lot of resources.  */
++  {
++    struct rlimit limit;
++    if (getrlimit (RLIMIT_AS, &limit) != 0)
++      {
++	printf ("getrlimit (RLIMIT_AS) failed: %m\n");
++	return 1;
++      }
++    long target = 512 * 1024 * 1024;
++    if (limit.rlim_cur == RLIM_INFINITY || limit.rlim_cur > target)
++      {
++	limit.rlim_cur = 512 * 1024 * 1024;
++	if (setrlimit (RLIMIT_AS, &limit) != 0)
++	  {
++	    printf ("setrlimit (RLIMIT_AS) failed: %m\n");
++	    return 1;
++	  }
++      }
++  }
++
++  int errors = 0;
++  for (int i = 1; i <= 4; ++i)
++    {
++      char tz[16];
++      snprintf (tz, sizeof (tz), "XT%d", i);
++      if (setenv ("TZ", tz, 1) < 0)
++	{
++	  printf ("setenv failed: %m\n");
++	  return 1;
++	}
++      tzset ();
++      if (strcmp (tzname[0], tz) == 0)
++	{
++	  printf ("Unexpected success for %s\n", tz);
++	  ++errors;
++	}
++    }
++
++  /* Large TZ files.  */
++
++  /* This will succeed on 64-bit architectures, and fail on 32-bit
++     architectures.  It used to crash on 32-bit.  */
++  test_tz_file (64 * 1024 * 1024);
++
++  /* This will fail on 64-bit and 32-bit architectures.  It used to
++     cause a test timeout on 64-bit and crash on 32-bit if the TZ file
++     open succeeded for some reason (it does not use O_LARGEFILE in
++     regular builds).  */
++  test_tz_file (4LL * 1024 * 1024 * 1024 - 6);
++
++  /* Large TZ variables.  */
++  {
++    size_t length = 64 * 1024 * 1024;
++    char *value = malloc (length + 1);
++    if (value == NULL)
++      {
++	puts ("malloc failed: %m");
++	return 1;
++      }
++    value[length] = '\0';
++
++    memset (value, ' ', length);
++    value[0] = 'U';
++    value[1] = 'T';
++    value[2] = 'C';
++    if (setenv ("TZ", value, 1) < 0)
++      {
++	printf ("setenv failed: %m\n");
++	return 1;
++      }
++    tzset ();
++
++    memset (value, '0', length);
++    value[0] = '<';
++    value[length - 1] = '>';
++    if (setenv ("TZ", value, 1) < 0)
++      {
++	printf ("setenv failed: %m\n");
++	return 1;
++      }
++    tzset ();
++  }
++
++  return errors > 0;
++}
+diff --git a/timezone/Makefile b/timezone/Makefile
+index 81d4a3e..bfb3463 100644
+--- a/timezone/Makefile
++++ b/timezone/Makefile
+@@ -113,6 +113,7 @@ $(testdata)/Asia/Tokyo: asia $(zic-deps)
+ 	$(build-testdata)
+ 
+ $(testdata)/XT%: testdata/XT%
++	$(make-target-directory)
+ 	cp $< $@
+ 
+ $(objpfx)tzselect: tzselect.ksh $(common-objpfx)config.make
+diff -Nrup -a a/timezone/testdata/XT1 b/timezone/testdata/XT1
+--- a/timezone/testdata/XT1	1969-12-31 19:00:00.000000000 -0500
++++ b/timezone/testdata/XT1	2017-09-14 10:19:11.382923956 -0400
+@@ -0,0 +1,2 @@
++TZif2