Upgrade arm-optimized-routines to 6b594432c8ac46e71686ea21fad30d1c3f79e65a

Test: None
Change-Id: Ib4c9a5f8b339cf2bdef415c25ac8b840ccb12930
diff --git a/Android.bp b/Android.bp
index f22981c..3f3f563 100755
--- a/Android.bp
+++ b/Android.bp
@@ -12,30 +12,7 @@
         "-ffp-contract=fast",
     ],
     srcs: [
-        "math/cosf.c",
-        "math/exp2.c",
-        "math/exp2f.c",
-        "math/exp2f_data.c",
-        "math/exp.c",
-        "math/exp_data.c",
-        "math/expf.c",
-        "math/log2.c",
-        "math/log2_data.c",
-        "math/log2f.c",
-        "math/log2f_data.c",
-        "math/log.c",
-        "math/log_data.c",
-        "math/logf.c",
-        "math/logf_data.c",
-        "math/math_err.c",
-        "math/math_errf.c",
-        "math/pow.c",
-        "math/pow_log_data.c",
-        "math/powf.c",
-        "math/powf_log2_data.c",
-        "math/sincosf.c",
-        "math/sincosf_data.c",
-        "math/sinf.c",
+        "math/*.c",
     ],
 
     // arch-specific settings
@@ -69,10 +46,9 @@
     host_supported: true,
     cflags: ["-Werror", "-Wno-missing-braces"],
     srcs: [
-      "math/single/e_rem_pio2.c",
-      "test/mathtest.c"
+      "math/test/mathtest.c"
     ],
-    data: ["test/testcases/directed/*.tst"],
+    data: ["math/test/testcases/directed/*.tst"],
     local_include_dirs: ["math/include"],
     target: {
         darwin: {
diff --git a/LICENSE b/LICENSE
index 453ae10..2543b82 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 1999-2018, Arm Limited.
+Copyright (c) 1999-2019, Arm Limited.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/METADATA b/METADATA
index dd1a535..7c706d5 100644
--- a/METADATA
+++ b/METADATA
@@ -9,11 +9,11 @@
     type: GIT
     value: "https://github.com/ARM-software/optimized-routines.git"
   }
-  version: "c7a7debc08741736d4836245b45e555fbf2390ed"
+  version: "6b594432c8ac46e71686ea21fad30d1c3f79e65a"
   license_type: NOTICE
   last_upgrade_date {
     year: 2019
     month: 7
-    day: 10
+    day: 31
   }
 }
diff --git a/Makefile b/Makefile
index f5b5d3b..8305684 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 # Makefile - requires GNU make
 #
-# Copyright (c) 2018, Arm Limited.
+# Copyright (c) 2018-2019, Arm Limited.
 # SPDX-License-Identifier: MIT
 
 srcdir = .
@@ -9,55 +9,38 @@
 libdir = $(prefix)/lib
 includedir = $(prefix)/include
 
-MATH_SRCS = $(wildcard $(srcdir)/math/*.[cS])
-MATH_BASE = $(basename $(MATH_SRCS))
-MATH_OBJS = $(MATH_BASE:$(srcdir)/%=build/%.o)
-RTEST_SRCS = $(wildcard $(srcdir)/test/rtest/*.[cS])
-RTEST_BASE = $(basename $(RTEST_SRCS))
-RTEST_OBJS = $(RTEST_BASE:$(srcdir)/%=build/%.o)
-ALL_OBJS = $(MATH_OBJS) \
-	$(RTEST_OBJS) \
-	build/test/mathtest.o \
-	build/test/mathbench.o \
-
-INCLUDES = $(wildcard $(srcdir)/math/include/*.h)
-ALL_INCLUDES = $(INCLUDES:$(srcdir)/math/%=build/%)
-
-ALL_LIBS = \
-	build/lib/libmathlib.so \
-	build/lib/libmathlib.a \
-
-ALL_TOOLS = \
-	build/bin/mathtest \
-	build/bin/mathbench \
-	build/bin/mathbench_libc \
-
-HOST_TOOLS = \
-	build/bin/rtest \
-
-TESTS = $(wildcard $(srcdir)/test/testcases/directed/*.tst)
-RTESTS = $(wildcard $(srcdir)/test/testcases/random/*.tst)
+# Build targets
+ALL_OBJS = $(math-objs) $(string-objs)
+ALL_INCLUDES = $(math-includes) $(string-includes)
+ALL_LIBS = $(math-libs) $(string-libs)
+ALL_TOOLS = $(math-tools) $(string-tools)
+HOST_TOOLS = $(math-host-tools)
 
 # Configure these in config.mk, do not make changes in this file.
 HOST_CC = cc
 HOST_CFLAGS = -std=c99 -O2
 HOST_LDFLAGS =
-HOST_LDLIBS = -lm -lmpfr -lmpc
+HOST_LDLIBS =
 EMULATOR =
 CFLAGS = -std=c99 -O2
 LDFLAGS =
-LDLIBS = -lm
+LDLIBS =
 CPPFLAGS =
 AR = $(CROSS_COMPILE)ar
 RANLIB = $(CROSS_COMPILE)ranlib
 INSTALL = install
 
-CFLAGS_ALL = -I$(srcdir)/math/include $(CPPFLAGS) $(CFLAGS)
+CFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS)
 LDFLAGS_ALL = $(LDFLAGS)
 
+all:
+
 -include config.mk
 
-all: $(ALL_LIBS) $(ALL_TOOLS) $(ALL_INCLUDES)
+include math/Dir.mk
+include string/Dir.mk
+
+all: all-math all-string
 
 DIRS = $(dir $(ALL_LIBS) $(ALL_TOOLS) $(ALL_OBJS) $(ALL_INCLUDES))
 ALL_DIRS = $(sort $(DIRS:%/=%))
@@ -69,11 +52,6 @@
 
 $(ALL_OBJS:%.o=%.os): CFLAGS_ALL += -fPIC
 
-$(RTEST_OBJS): CC = $(HOST_CC)
-$(RTEST_OBJS): CFLAGS_ALL = $(HOST_CFLAGS)
-
-build/test/mathtest.o: CFLAGS_ALL += -fmath-errno
-
 build/%.o: $(srcdir)/%.S
 	$(CC) $(CFLAGS_ALL) -c -o $@ $<
 
@@ -86,29 +64,6 @@
 build/%.os: $(srcdir)/%.c
 	$(CC) $(CFLAGS_ALL) -c -o $@ $<
 
-build/lib/libmathlib.so: $(MATH_OBJS:%.o=%.os)
-	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -shared -o $@ $^
-
-build/lib/libmathlib.a: $(MATH_OBJS)
-	rm -f $@
-	$(AR) rc $@ $^
-	$(RANLIB) $@
-
-build/bin/rtest: $(RTEST_OBJS)
-	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
-
-build/bin/mathtest: build/test/mathtest.o build/lib/libmathlib.a
-	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
-
-build/bin/mathbench: build/test/mathbench.o build/lib/libmathlib.a
-	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
-
-build/bin/mathbench_libc: build/test/mathbench.o
-	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
-
-build/include/%.h: $(srcdir)/math/include/%.h
-	cp $< $@
-
 clean:
 	rm -rf build
 
@@ -135,12 +90,6 @@
 
 install: install-libs install-headers
 
-check: $(ALL_TOOLS)
-	cat $(TESTS) | $(EMULATOR) build/bin/mathtest
+check: check-math check-string
 
-rcheck: $(HOST_TOOLS) $(ALL_TOOLS)
-	cat $(RTESTS) | build/bin/rtest | $(EMULATOR) build/bin/mathtest
-
-check-all: check rcheck
-
-.PHONY: all clean distclean install install-tools install-libs install-headers check rcheck check-all
+.PHONY: all clean distclean install install-tools install-libs install-headers check
diff --git a/README b/README
index 7c6811b..f0345ba 100644
--- a/README
+++ b/README
@@ -8,16 +8,16 @@
 
 Source code layout:
 
-auxiliary/      - design tools.
 build/          - build directory (created by make).
-math/           - math library source.
+math/           - math subproject sources.
 math/include/   - math library public headers.
-math/single/    - code for cpu with only single precision support.
-test/           - test related source.
-test/rtest/     - test generator (requires mpfr and mpc).
-test/testcases/ - test cases.
+math/test/      - math test and benchmark related sources.
+math/tools/     - tools used for designing the algorithms.
+string/         - string routines subproject sources.
+string/include/ - string library public headers.
+string/test/    - string test and benchmark related sources.
 
-The steps to build the library and run the tests:
+The steps to build the target libraries and run the tests:
 
 cp config.mk.dist config.mk
 # edit config.mk if necessary ...
@@ -38,6 +38,3 @@
 For cross build, CROSS_COMPILE should be set in config.mk and EMULATOR
 should be set for cross testing (e.g. using qemu-user or remote access
 to a target machine), see the examples in config.mk.dist.
-
-The script "remez.jl" was used to generate some of the coefficients
-(see comments in the code).
diff --git a/config.mk.dist b/config.mk.dist
index 7cf7393..36f67d8 100644
--- a/config.mk.dist
+++ b/config.mk.dist
@@ -15,15 +15,15 @@
 HOST_CFLAGS += -g
 CFLAGS += -g
 
-# Use if the target FPU only supports single precision.
-#CFLAGS += WANT_SINGLEPREC
+# Use if mpfr is available on the target for ulp error checking.
+#LDLIBS += -lmpfr -lgmp
+#CFLAGS += -DUSE_MPFR
 
 # Use with gcc.
 CFLAGS += -frounding-math -fexcess-precision=standard -fno-stack-protector
 CFLAGS += -ffp-contract=fast -fno-math-errno
 
 # Use with clang.
-#CFLAGS += -DCLANG_EXCEPTIONS
 #CFLAGS += -ffp-contract=fast
 
 # Use for cross compilation with gcc.
diff --git a/math/Dir.mk b/math/Dir.mk
new file mode 100644
index 0000000..131f82a
--- /dev/null
+++ b/math/Dir.mk
@@ -0,0 +1,97 @@
+# Makefile fragment - requires GNU make
+#
+# Copyright (c) 2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+math-lib-srcs := $(wildcard $(srcdir)/math/*.[cS])
+math-test-srcs := \
+	$(srcdir)/math/test/mathtest.c \
+	$(srcdir)/math/test/mathbench.c \
+	$(srcdir)/math/test/ulp.c \
+
+math-test-host-srcs := $(wildcard $(srcdir)/math/test/rtest/*.[cS])
+math-includes-src := $(wildcard $(srcdir)/math/include/*.h)
+math-includes := $(math-includes-src:$(srcdir)/math/%=build/%)
+
+math-libs := \
+	build/lib/libmathlib.so \
+	build/lib/libmathlib.a \
+
+math-tools := \
+	build/bin/mathtest \
+	build/bin/mathbench \
+	build/bin/mathbench_libc \
+	build/bin/runulp.sh \
+	build/bin/ulp \
+
+math-host-tools := \
+	build/bin/rtest \
+
+math-lib-base := $(basename $(math-lib-srcs))
+math-lib-objs := $(math-lib-base:$(srcdir)/%=build/%.o)
+math-test-base := $(basename $(math-test-srcs))
+math-test-objs := $(math-test-base:$(srcdir)/%=build/%.o)
+math-test-host-base := $(basename $(math-test-host-srcs))
+math-test-host-objs := $(math-test-host-base:$(srcdir)/%=build/%.o)
+
+math-objs := \
+	$(math-lib-objs) \
+	$(math-test-objs) \
+	$(math-test-host-objs) \
+
+all-math: $(math-libs) $(math-tools) $(math-includes)
+
+TESTS = $(wildcard $(srcdir)/math/test/testcases/directed/*.tst)
+RTESTS = $(wildcard $(srcdir)/math/test/testcases/random/*.tst)
+
+$(math-objs) $(math-objs:%.o=%.os): $(math-includes)
+build/math/test/mathtest.o: CFLAGS_ALL += -fmath-errno
+$(math-test-host-objs): CC = $(HOST_CC)
+$(math-test-host-objs): CFLAGS_ALL = $(HOST_CFLAGS)
+
+build/math/test/ulp.o: $(srcdir)/math/test/ulp.h
+
+build/lib/libmathlib.so: $(math-lib-objs:%.o=%.os)
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -shared -o $@ $^
+
+build/lib/libmathlib.a: $(math-lib-objs)
+	rm -f $@
+	$(AR) rc $@ $^
+	$(RANLIB) $@
+
+$(math-host-tools): HOST_LDLIBS += -lm -lmpfr -lmpc
+$(math-tools): LDLIBS += -lm
+
+build/bin/rtest: $(math-test-host-objs)
+	$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
+
+build/bin/mathtest: build/math/test/mathtest.o build/lib/libmathlib.a
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
+
+build/bin/mathbench: build/math/test/mathbench.o build/lib/libmathlib.a
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
+
+build/bin/mathbench_libc: build/math/test/mathbench.o
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
+
+build/bin/ulp: build/math/test/ulp.o build/lib/libmathlib.a
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
+
+build/include/%.h: $(srcdir)/math/include/%.h
+	cp $< $@
+
+build/bin/%.sh: $(srcdir)/math/test/%.sh
+	cp $< $@
+
+check-math-test: $(math-tools)
+	cat $(TESTS) | $(EMULATOR) build/bin/mathtest
+
+check-math-rtest: $(math-host-tools) $(math-tools)
+	cat $(RTESTS) | build/bin/rtest | $(EMULATOR) build/bin/mathtest
+
+check-math-ulp: $(math-tools)
+	build/bin/runulp.sh $(EMULATOR)
+
+check-math: check-math-test check-math-rtest check-math-ulp
+
+.PHONY: all-math check-math-test check-math-rtest check-math-ulp check-math
diff --git a/math/cosf.c b/math/cosf.c
index 84a138f..831b39e 100644
--- a/math/cosf.c
+++ b/math/cosf.c
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if WANT_SINGLEPREC
-#include "single/s_cosf.c"
-#else
-
 #include <stdint.h>
 #include <math.h>
 #include "math_config.h"
@@ -65,5 +61,3 @@
   else
     return __math_invalidf (y);
 }
-
-#endif
diff --git a/math/expf.c b/math/expf.c
index f8238a7..0fe1f7d 100644
--- a/math/expf.c
+++ b/math/expf.c
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if WANT_SINGLEPREC
-#include "single/e_expf.c"
-#else
-
 #include <math.h>
 #include <stdint.h>
 #include "math_config.h"
@@ -93,4 +89,3 @@
 strong_alias (expf, __expf_finite)
 hidden_alias (expf, __ieee754_expf)
 #endif
-#endif
diff --git a/math/funder.c b/math/funder.c
deleted file mode 100644
index 14fdd2e..0000000
--- a/math/funder.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#if WANT_SINGLEPREC
-#include "single/funder.c"
-#endif
diff --git a/math/logf.c b/math/logf.c
index 9c3657b..ee3120a 100644
--- a/math/logf.c
+++ b/math/logf.c
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if WANT_SINGLEPREC
-#include "single/e_logf.c"
-#else
-
 #include <math.h>
 #include <stdint.h>
 #include "math_config.h"
@@ -81,4 +77,3 @@
 strong_alias (logf, __logf_finite)
 hidden_alias (logf, __ieee754_logf)
 #endif
-#endif
diff --git a/math/logf_data.c b/math/logf_data.c
index cee9271..53c5f62 100644
--- a/math/logf_data.c
+++ b/math/logf_data.c
@@ -5,8 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if !WANT_SINGLEPREC
-
 #include "math_config.h"
 
 const struct logf_data __logf_data = {
@@ -33,4 +31,3 @@
   -0x1.00ea348b88334p-2, 0x1.5575b0be00b6ap-2, -0x1.ffffef20a4123p-2,
   }
 };
-#endif
diff --git a/math/powf.c b/math/powf.c
index 1149842..1534a09 100644
--- a/math/powf.c
+++ b/math/powf.c
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if WANT_SINGLEPREC
-#include "single/e_powf.c"
-#else
-
 #include <math.h>
 #include <stdint.h>
 #include "math_config.h"
@@ -223,4 +219,3 @@
 strong_alias (powf, __powf_finite)
 hidden_alias (powf, __ieee754_powf)
 #endif
-#endif
diff --git a/math/powf_log2_data.c b/math/powf_log2_data.c
index 285d1bd..b9fbdc4 100644
--- a/math/powf_log2_data.c
+++ b/math/powf_log2_data.c
@@ -5,8 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if !WANT_SINGLEPREC
-
 #include "math_config.h"
 
 const struct powf_log2_data __powf_log2_data = {
@@ -34,4 +32,3 @@
   0x1.71547652ab82bp0 * POWF_SCALE,
   }
 };
-#endif
diff --git a/math/rem_pio2.c b/math/rem_pio2.c
deleted file mode 100644
index 16edd74..0000000
--- a/math/rem_pio2.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "single/e_rem_pio2.c"
diff --git a/math/rredf.c b/math/rredf.c
deleted file mode 100644
index fde20f0..0000000
--- a/math/rredf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#if WANT_SINGLEPREC
-#include "single/rredf.c"
-#endif
diff --git a/math/sincosf.c b/math/sincosf.c
index fb6a29d..e6cd41e 100644
--- a/math/sincosf.c
+++ b/math/sincosf.c
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if WANT_SINGLEPREC
-#include "single/s_sincosf.c"
-#else
-
 #include <stdint.h>
 #include <math.h>
 #include "math_config.h"
@@ -81,5 +77,3 @@
 #endif
     }
 }
-
-#endif
diff --git a/math/sincosf_data.c b/math/sincosf_data.c
index 2512f37..5d0b58e 100644
--- a/math/sincosf_data.c
+++ b/math/sincosf_data.c
@@ -5,8 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if !WANT_SINGLEPREC
-
 #include <stdint.h>
 #include <math.h>
 #include "math_config.h"
@@ -63,5 +61,3 @@
   0x34ddc0db, 0xddc0db62, 0xc0db6295, 0xdb629599,
   0x6295993c, 0x95993c43, 0x993c4390, 0x3c439041
 };
-
-#endif
diff --git a/math/sinf.c b/math/sinf.c
index f624cde..770b294 100644
--- a/math/sinf.c
+++ b/math/sinf.c
@@ -5,10 +5,6 @@
  * SPDX-License-Identifier: MIT
  */
 
-#if WANT_SINGLEPREC
-#include "single/s_sinf.c"
-#else
-
 #include <math.h>
 #include "math_config.h"
 #include "sincosf.h"
@@ -69,5 +65,3 @@
   else
     return __math_invalidf (y);
 }
-
-#endif
diff --git a/math/single/dunder.c b/math/single/dunder.c
deleted file mode 100644
index faec985..0000000
--- a/math/single/dunder.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * dunder.c - manually provoke FP exceptions for mathlib
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-
-#include "math_private.h"
-#include <fenv.h>
-
-__inline double __mathlib_dbl_infnan(double x)
-{
-  return x+x;
-}
-
-__inline double __mathlib_dbl_infnan2(double x, double y)
-{
-  return x+y;
-}
-
-double __mathlib_dbl_underflow(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_UNDERFLOW);
-#endif
-  return 0x1p-767 * 0x1p-767;
-}
-
-double __mathlib_dbl_overflow(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_OVERFLOW);
-#endif
-  return 0x1p+769 * 0x1p+769;
-}
-
-double __mathlib_dbl_invalid(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_INVALID);
-#endif
-  return 0.0 / 0.0;
-}
-
-double __mathlib_dbl_divzero(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_DIVBYZERO);
-#endif
-  return 1.0 / 0.0;
-}
diff --git a/math/single/e_expf.c b/math/single/e_expf.c
deleted file mode 100644
index 739fe1d..0000000
--- a/math/single/e_expf.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * e_expf.c - single-precision exp function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * Algorithm was once taken from Cody & Waite, but has been munged
- * out of all recognition by SGT.
- */
-
-#include <math.h>
-#include <errno.h>
-#include "math_private.h"
-
-float
-expf(float X)
-{
-  int N; float XN, g, Rg, Result;
-  unsigned ix = fai(X), edgecaseflag = 0;
-
-  /*
-   * Handle infinities, NaNs and big numbers.
-   */
-  if (__builtin_expect((ix << 1) - 0x67000000 > 0x85500000 - 0x67000000, 0)) {
-    if (!(0x7f800000 & ~ix)) {
-      if (ix == 0xff800000)
-        return 0.0f;
-      else
-        return FLOAT_INFNAN(X);/* do the right thing with both kinds of NaN and with +inf */
-    } else if ((ix << 1) < 0x67000000) {
-      return 1.0f;               /* magnitude so small the answer can't be distinguished from 1 */
-    } else if ((ix << 1) > 0x85a00000) {
-      __set_errno(ERANGE);
-      if (ix & 0x80000000) {
-        return FLOAT_UNDERFLOW;
-      } else {
-        return FLOAT_OVERFLOW;
-      }
-    } else {
-      edgecaseflag = 1;
-    }
-  }
-
-  /*
-   * Split the input into an integer multiple of log(2)/4, and a
-   * fractional part.
-   */
-  XN = X * (4.0f*1.4426950408889634074f);
-#ifdef __TARGET_FPU_SOFTVFP
-  XN = _frnd(XN);
-  N = (int)XN;
-#else
-  N = (int)(XN + (ix & 0x80000000 ? -0.5f : 0.5f));
-  XN = N;
-#endif
-  g = (X - XN * 0x1.62ep-3F) - XN * 0x1.0bfbe8p-17F;  /* prec-and-a-half representation of log(2)/4 */
-
-  /*
-   * Now we compute exp(X) in, conceptually, three parts:
-   *  - a pure power of two which we get from N>>2
-   *  - exp(g) for g in [-log(2)/8,+log(2)/8], which we compute
-   *    using a Remez-generated polynomial approximation
-   *  - exp(k*log(2)/4) (aka 2^(k/4)) for k in [0..3], which we
-   *    get from a lookup table in precision-and-a-half and
-   *    multiply by g.
-   *
-   * We gain a bit of extra precision by the fact that actually
-   * our polynomial approximation gives us exp(g)-1, and we add
-   * the 1 back on by tweaking the prec-and-a-half multiplication
-   * step.
-   *
-   * Coefficients generated by the command
-
-./auxiliary/remez.jl --variable=g --suffix=f -- '-log(BigFloat(2))/8' '+log(BigFloat(2))/8' 3 0 '(expm1(x))/x'
-
-  */
-  Rg = g * (
-            9.999999412829185331953781321128516523408059996430919985217971370689774264850229e-01f+g*(4.999999608551332693833317084753864837160947932961832943901913087652889900683833e-01f+g*(1.667292360203016574303631953046104769969440903672618034272397630620346717392378e-01f+g*(4.168230895653321517750133783431970715648192153539929404872173693978116154823859e-02f)))
-            );
-
-  /*
-   * Do the table lookup and combine it with Rg, to get our final
-   * answer apart from the exponent.
-   */
-  {
-    static const float twotokover4top[4] = { 0x1p+0F, 0x1.306p+0F, 0x1.6ap+0F, 0x1.ae8p+0F };
-    static const float twotokover4bot[4] = { 0x0p+0F, 0x1.fc1464p-13F, 0x1.3cccfep-13F, 0x1.3f32b6p-13F };
-    static const float twotokover4all[4] = { 0x1p+0F, 0x1.306fep+0F, 0x1.6a09e6p+0F, 0x1.ae89fap+0F };
-    int index = (N & 3);
-    Rg = twotokover4top[index] + (twotokover4bot[index] + twotokover4all[index]*Rg);
-    N >>= 2;
-  }
-
-  /*
-   * Combine the output exponent and mantissa, and return.
-   */
-  if (__builtin_expect(edgecaseflag, 0)) {
-    Result = fhex(((N/2) << 23) + 0x3f800000);
-    Result *= Rg;
-    Result *= fhex(((N-N/2) << 23) + 0x3f800000);
-    /*
-     * Step not mentioned in C&W: set errno reliably.
-     */
-    if (fai(Result) == 0)
-      return MATHERR_EXPF_UFL(Result);
-    if (fai(Result) == 0x7f800000)
-      return MATHERR_EXPF_OFL(Result);
-    return FLOAT_CHECKDENORM(Result);
-  } else {
-    Result = fhex(N * 8388608.0f + (float)0x3f800000);
-    Result *= Rg;
-  }
-
-  return Result;
-}
diff --git a/math/single/e_logf.c b/math/single/e_logf.c
deleted file mode 100644
index aa29489..0000000
--- a/math/single/e_logf.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * e_logf.c - single precision log function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * Algorithm was once taken from Cody & Waite, but has been munged
- * out of all recognition by SGT.
- */
-
-#include <math.h>
-#include <errno.h>
-#include "math_private.h"
-
-float
-logf(float X)
-{
-    int N = 0;
-    int aindex;
-    float a, x, s;
-    unsigned ix = fai(X);
-
-    if (__builtin_expect((ix - 0x00800000) >= 0x7f800000 - 0x00800000, 0)) {
-        if ((ix << 1) > 0xff000000) /* NaN */
-            return FLOAT_INFNAN(X);
-        if (ix == 0x7f800000)          /* +inf */
-            return X;
-        if (X < 0) {                   /* anything negative */
-            return MATHERR_LOGF_NEG(X);
-        }
-        if (X == 0) {
-            return MATHERR_LOGF_0(X);
-        }
-        /* That leaves denormals. */
-        N = -23;
-        X *= 0x1p+23F;
-        ix = fai(X);
-    }
-
-    /*
-     * Separate X into three parts:
-     *  - 2^N for some integer N
-     *  - a number a of the form (1+k/8) for k=0,...,7
-     *  - a residual which we compute as s = (x-a)/(x+a), for
-     *    x=X/2^N.
-     *
-     * We pick the _nearest_ (N,a) pair, so that (x-a) has magnitude
-     * at most 1/16. Hence, we must round things that are just
-     * _below_ a power of two up to the next power of two, so this
-     * isn't as simple as extracting the raw exponent of the FP
-     * number. Instead we must grab the exponent together with the
-     * top few bits of the mantissa, and round (in integers) there.
-     */
-    {
-        int rounded = ix + 0x00080000;
-        int Nnew = (rounded >> 23) - 127;
-        aindex = (rounded >> 20) & 7;
-        a = fhex(0x3f800000 + (aindex << 20));
-        N += Nnew;
-        x = fhex(ix - (Nnew << 23));
-    }
-
-    if (!N && !aindex) {
-        /*
-         * Use an alternative strategy for very small |x|, which
-         * avoids the 1ULP of relative error introduced in the
-         * computation of s. If our nearest (N,a) pair is N=0,a=1,
-         * that means we have -1/32 < x-a < 1/16, on which interval
-         * the ordinary series for log(1+z) (setting z-x-a) will
-         * converge adequately fast; so we can simply find an
-         * approximation to log(1+z)/z good on that interval and
-         * scale it by z on the way out.
-         *
-         * Coefficients generated by the command
-
-./auxiliary/remez.jl --variable=z --suffix=f -- '-1/BigFloat(32)' '+1/BigFloat(16)' 3 0 '(log1p(x)-x)/x^2'
-
-         */
-        float z = x - 1.0f;
-        float p = z*z * (
-            -4.999999767382730053173434595877399055021398381370452534949864039404089549132551e-01f+z*(3.333416379155995401749506866323446447523793085809161350343357014272193712456391e-01f+z*(-2.501299948811686421962724839011563450757435183422532362736159418564644404218257e-01f+z*(1.903576945606738444146078468935429697455230136403008172485495359631510244557255e-01f)))
-            );
-
-        return z + p;
-    }
-
-    /*
-     * Now we have N, a and x correct, so that |x-a| <= 1/16.
-     * Compute s.
-     *
-     * (Since |x+a| >= 2, this means that |s| will be at most 1/32.)
-     */
-    s = (x - a) / (x + a);
-
-    /*
-     * The point of computing s = (x-a)/(x+a) was that this makes x
-     * equal to a * (1+s)/(1-s). So we can now compute log(x) by
-     * means of computing log((1+s)/(1-s)) (which has a more
-     * efficiently converging series), and adding log(a) which we
-     * obtain from a lookup table.
-     *
-     * So our full answer to log(X) is now formed by adding together
-     * N*log(2) + log(a) + log((1+s)/(1-s)).
-     *
-     * Now log((1+s)/(1-s)) has the exact Taylor series
-     *
-     *   2s + 2s^3/3 + 2s^5/5 + ...
-     *
-     * and what we do is to compute all but the first term of that
-     * as a polynomial approximation in s^2, then add on the first
-     * term - and all the other bits and pieces above - in
-     * precision-and-a-half so as to keep the total error down.
-     */
-    {
-        float s2 = s*s;
-
-        /*
-         * We want a polynomial L(s^2) such that
-         *
-         *    2s + s^3*L(s^2) = log((1+s)/(1-s))
-         *
-         * => L(s^2) = (log((1+s)/(1-s)) - 2s) / s^3
-         *
-         * => L(z) = (log((1+sqrt(z))/(1-sqrt(z))) - 2*sqrt(z)) / sqrt(z)^3
-         *
-         * The required range of the polynomial is only [0,1/32^2].
-         *
-         * Our accuracy requirement for the polynomial approximation
-         * is that we don't want to introduce any error more than
-         * about 2^-23 times the _top_ bit of s. But the value of
-         * the polynomial has magnitude about s^3; and since |s| <
-         * 2^-5, this gives us |s^3/s| < 2^-10. In other words,
-         * our approximation only needs to be accurate to 13 bits or
-         * so before its error is lost in the noise when we add it
-         * to everything else.
-         *
-         * Coefficients generated by the command
-
-./auxiliary/remez.jl --variable=s2 --suffix=f -- '0' '1/BigFloat(32^2)' 1 0 '(abs(x) < 1e-20 ? BigFloat(2)/3 + 2*x/5 + 2*x^2/7 + 2*x^3/9 : (log((1+sqrt(x))/(1-sqrt(x)))-2*sqrt(x))/sqrt(x^3))'
-
-         */
-        float p = s * s2 * (
-            6.666666325680271091157649745099739739798210281016897722498744752867165138320995e-01f+s2*(4.002792299542401431889592846825025487338520940900492146195427243856292349188402e-01f)
-            );
-
-        static const float log2hi = 0x1.62ep-1F, log2lo = 0x1.0bfbe8p-15F;
-        static const float logahi[8] = { 0x0p+0F, 0x1.e26p-4F, 0x1.c8ep-3F, 0x1.46p-2F, 0x1.9f2p-2F, 0x1.f12p-2F, 0x1.1e8p-1F, 0x1.41cp-1F };
-        static const float logalo[8] = { 0x0p+0F, 0x1.076e2ap-16F, 0x1.f7c79ap-15F, 0x1.8bc21cp-14F, 0x1.23eccp-14F, 0x1.1ebf5ep-15F, 0x1.7d79c2p-15F, 0x1.8fe846p-13F };
-        return (N*log2hi + logahi[aindex]) + (2.0f*s + (N*log2lo + logalo[aindex] + p));
-    }
-}
diff --git a/math/single/e_powf.c b/math/single/e_powf.c
deleted file mode 100644
index fa000f6..0000000
--- a/math/single/e_powf.c
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- * e_powf.c - single-precision power function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-#include <math.h>
-#include <errno.h>
-#include "math_private.h"
-
-float
-powf(float x, float y)
-{
-    float logh, logl;
-    float rlogh, rlogl;
-    float sign = 1.0f;
-    int expadjust = 0;
-    unsigned ix, iy;
-
-    ix = fai(x);
-    iy = fai(y);
-
-    if (__builtin_expect((ix - 0x00800000) >= (0x7f800000 - 0x00800000) ||
-                         ((iy << 1) + 0x02000000) < 0x40000000, 0)) {
-        /*
-         * The above test rules out, as quickly as I can see how to,
-         * all possible inputs except for a normalised positive x
-         * being raised to the power of a normalised (and not
-         * excessively small) y. That's the fast-path case: if
-         * that's what the user wants, we can skip all of the
-         * difficult special-case handling.
-         *
-         * Now we must identify, as efficiently as we can, cases
-         * which will return to the fast path with a little tidying
-         * up. These are, in order of likelihood and hence of
-         * processing:
-         *
-         *  - a normalised _negative_ x raised to the power of a
-         *    non-zero finite y. Having identified this case, we
-         *    must categorise y into one of the three categories
-         *    'odd integer', 'even integer' and 'non-integer'; for
-         *    the last of these we return an error, while for the
-         *    other two we rejoin the main code path having rendered
-         *    x positive and stored an appropriate sign to append to
-         *    the eventual result.
-         *
-         *  - a _denormal_ x raised to the power of a non-zero
-         *    finite y, in which case we multiply it up by a power
-         *    of two to renormalise it, store an appropriate
-         *    adjustment for its base-2 logarithm, and depending on
-         *    the sign of y either return straight to the main code
-         *    path or go via the categorisation of y above.
-         *
-         *  - any of the above kinds of x raised to the power of a
-         *    zero, denormal, nearly-denormal or nearly-infinite y,
-         *    in which case we must do the checks on x as above but
-         *    otherwise the algorithm goes through basically
-         *    unchanged. Denormal and very tiny y values get scaled
-         *    up to something not in range of accidental underflow
-         *    when split into prec-and-a-half format; very large y
-         *    values get scaled down by a factor of two to prevent
-         *    CLEARBOTTOMHALF's round-up from overflowing them to
-         *    infinity. (Of course the _output_ will overflow either
-         *    way - the largest y value that can possibly yield a
-         *    finite result is well below this range anyway - so
-         *    this is a safe change.)
-         */
-        if (__builtin_expect(((iy << 1) + 0x02000000) >= 0x40000000, 1)) {   /* normalised and sensible y */
-            y_ok_check_x:
-
-            if (__builtin_expect((ix - 0x80800000) < (0xff800000 - 0x80800000), 1)) {   /* normal but negative x */
-                y_ok_x_negative:
-
-                x = fabsf(x);
-                ix = fai(x);
-
-                /*
-                 * Determine the parity of y, if it's an integer at
-                 * all.
-                 */
-                {
-                    int yexp, yunitsbit;
-
-                    /*
-                     * Find the exponent of y.
-                     */
-                    yexp = (iy >> 23) & 0xFF;
-                    /*
-                     * Numbers with an exponent smaller than 0x7F
-                     * are strictly smaller than 1, and hence must
-                     * be fractional.
-                     */
-                    if (yexp < 0x7F)
-                        return MATHERR_POWF_NEGFRAC(x,y);
-                    /*
-                     * Numbers with an exponent at least 0x97 are by
-                     * definition even integers.
-                     */
-                    if (yexp >= 0x97)
-                        goto mainpath;  /* rejoin main code, giving positive result */
-                    /*
-                     * In between, we must check the mantissa.
-                     *
-                     * Note that this case includes yexp==0x7f,
-                     * which means 1 point something. In this case,
-                     * the 'units bit' we're testing is semantically
-                     * the lowest bit of the exponent field, not the
-                     * leading 1 on the mantissa - but fortunately,
-                     * that bit position will just happen to contain
-                     * the 1 that we would wish it to, because the
-                     * exponent describing that particular case just
-                     * happens to be odd.
-                     */
-                    yunitsbit = 0x96 - yexp;
-                    if (iy & ((1 << yunitsbit)-1))
-                        return MATHERR_POWF_NEGFRAC(x,y);
-                    else if (iy & (1 << yunitsbit))
-                        sign = -1.0f;  /* y is odd; result should be negative */
-                    goto mainpath;     /* now we can rejoin the main code */
-                }
-            } else if (__builtin_expect((ix << 1) != 0 && (ix << 1) < 0x01000000, 0)) {   /* denormal x */
-                /*
-                 * Renormalise x.
-                 */
-                x *= 0x1p+27F;
-                ix = fai(x);
-                /*
-                 * Set expadjust to compensate for that.
-                 */
-                expadjust = -27;
-
-                /* Now we need to handle negative x as above. */
-                if (ix & 0x80000000)
-                    goto y_ok_x_negative;
-                else
-                    goto mainpath;
-            } else if ((ix - 0x00800000) < (0x7f800000 - 0x00800000)) {
-                /* normal positive x, back here from denormal-y case below */
-                goto mainpath;
-            }
-        } else if (((iy << 1) + 0x02000000) >= 0x02000000) { /* denormal, nearly-denormal or zero y */
-            if (y == 0.0F) {
-                 /*
-                 * y == 0. Any finite x returns 1 here. (Quiet NaNs
-                 * do too, but we handle that below since we don't
-                 * mind doing them more slowly.)
-                 */
-                if ((ix << 1) != 0 && (ix << 1) < 0xFF000000)
-                    return 1.0f;
-            } else {
-                /*
-                 * Denormal or very very small y. In this situation
-                 * we have to be a bit careful, because when we
-                 * break up y into precision-and-a-half later on we
-                 * risk working with denormals and triggering
-                 * underflow exceptions within this function that
-                 * aren't related to the smallness of the output. So
-                 * here we convert all such y values into a standard
-                 * small-but-not-too-small value which will give the
-                 * same output.
-                 *
-                 * What value should that be? Well, we work in
-                 * 16*log2(x) below (equivalently, log to the base
-                 * 2^{1/16}). So the maximum magnitude of that for
-                 * any finite x is about 2416 (= 16 * (128+23), for
-                 * log of the smallest denormal x), i.e. certainly
-                 * less than 2^12. If multiplying that by y gives
-                 * anything of magnitude less than 2^-32 (and even
-                 * that's being generous), the final output will be
-                 * indistinguishable from 1. So any value of y with
-                 * magnitude less than 2^-(32+12) = 2^-44 is
-                 * completely indistinguishable from any other such
-                 * value. Hence we got here in the first place by
-                 * checking the exponent of y against 64 (i.e. -63,
-                 * counting the exponent bias), so we might as well
-                 * normalise all tiny y values to the same threshold
-                 * of 2^-64.
-                 */
-                iy = 0x1f800000 | (iy & 0x80000000);   /* keep the sign; that's important */
-                y = fhex(iy);
-            }
-            goto y_ok_check_x;
-        } else if (((iy << 1) + 0x02000000) < 0x01000000) { /* y in top finite exponent bracket */
-            y = fhex(fai(y) - 0x00800000);   /* scale down by a factor of 2 */
-            goto y_ok_check_x;
-        }
-
-        /*
-         * Having dealt with the above cases, we now know that
-         * either x is zero, infinite or NaN, or y is infinite or
-         * NaN, or both. We can deal with all of those cases without
-         * ever rejoining the main code path.
-         */
-        if ((unsigned)(((ix & 0x7FFFFFFF) - 0x7f800001) < 0x7fc00000 - 0x7f800001) ||
-            (unsigned)(((iy & 0x7FFFFFFF) - 0x7f800001) < 0x7fc00000 - 0x7f800001)) {
-            /*
-             * At least one signalling NaN. Do a token arithmetic
-             * operation on the two operands to provoke an exception
-             * and return the appropriate QNaN.
-             */
-            return FLOAT_INFNAN2(x,y);
-        } else if (ix==0x3f800000 || (iy << 1)==0) {
-            /*
-             * C99 says that 1^anything and anything^0 should both
-             * return 1, _even for a NaN_. I modify that slightly to
-             * apply only to QNaNs (which doesn't violate C99, since
-             * C99 doesn't specify anything about SNaNs at all),
-             * because I can't bring myself not to throw an
-             * exception on an SNaN since its _entire purpose_ is to
-             * throw an exception whenever touched.
-             */
-            return 1.0f;
-        } else
-        if (((ix & 0x7FFFFFFF) > 0x7f800000) ||
-            ((iy & 0x7FFFFFFF) > 0x7f800000)) {
-            /*
-             * At least one QNaN. Do a token arithmetic operation on
-             * the two operands to get the right one to propagate to
-             * the output.
-             */
-            return FLOAT_INFNAN2(x,y);
-        } else if (ix == 0x7f800000) {
-            /*
-             * x = +infinity. Return +infinity for positive y, +0
-             * for negative y, and 1 for zero y.
-             */
-            if (!(iy << 1))
-                return MATHERR_POWF_INF0(x,y);
-            else if (iy & 0x80000000)
-                return 0.0f;
-            else
-                return INFINITY;
-        } else {
-            /*
-             * Repeat the parity analysis of y above, returning 1
-             * (odd), 2 (even) or 0 (fraction).
-             */
-            int ypar, yexp, yunitsbit;
-            yexp = (iy >> 23) & 0xFF;
-            if (yexp < 0x7F)
-                ypar = 0;
-            else if (yexp >= 0x97)
-                ypar = 2;
-            else {
-                yunitsbit = 0x96 - yexp;
-                if (iy & ((1 << yunitsbit)-1))
-                    ypar = 0;
-                else if (iy & (1 << yunitsbit))
-                    ypar = 1;
-                else
-                    ypar = 2;
-            }
-
-            if (ix == 0xff800000) {
-                /*
-                 * x = -infinity. We return infinity or zero
-                 * depending on whether y is positive or negative,
-                 * and the sign is negative iff y is an odd integer.
-                 * (SGT: I don't like this, but it's what C99
-                 * mandates.)
-                 */
-                if (!(iy & 0x80000000)) {
-                    if (ypar == 1)
-                        return -INFINITY;
-                    else
-                        return INFINITY;
-                } else {
-                    if (ypar == 1)
-                        return -0.0f;
-                    else
-                        return +0.0f;
-                }
-            } else if (ix == 0) {
-                /*
-                 * x = +0. We return +0 for all positive y including
-                 * infinity; a divide-by-zero-like error for all
-                 * negative y including infinity; and an 0^0 error
-                 * for zero y.
-                 */
-                if ((iy << 1) == 0)
-                    return MATHERR_POWF_00(x,y);
-                else if (iy & 0x80000000)
-                    return MATHERR_POWF_0NEGEVEN(x,y);
-                else
-                    return +0.0f;
-            } else if (ix == 0x80000000) {
-                /*
-                 * x = -0. We return errors in almost all cases (the
-                 * exception being positive integer y, in which case
-                 * we return a zero of the appropriate sign), but
-                 * the errors are almost all different. Gah.
-                 */
-                if ((iy << 1) == 0)
-                    return MATHERR_POWF_00(x,y);
-                else if (iy == 0x7f800000)
-                    return MATHERR_POWF_NEG0FRAC(x,y);
-                else if (iy == 0xff800000)
-                    return MATHERR_POWF_0NEG(x,y);
-                else if (iy & 0x80000000)
-                    return (ypar == 0 ? MATHERR_POWF_0NEG(x,y) :
-                            ypar == 1 ? MATHERR_POWF_0NEGODD(x,y) :
-                            /* ypar == 2 ? */ MATHERR_POWF_0NEGEVEN(x,y));
-                else
-                    return (ypar == 0 ? MATHERR_POWF_NEG0FRAC(x,y) :
-                            ypar == 1 ? -0.0f :
-                            /* ypar == 2 ? */ +0.0f);
-            } else {
-                /*
-                 * Now we know y is an infinity of one sign or the
-                 * other and x is finite and nonzero. If x == -1 (+1
-                 * is already ruled out), we return +1; otherwise
-                 * C99 mandates that we return either +0 or +inf,
-                 * the former iff exactly one of |x| < 1 and y<0 is
-                 * true.
-                 */
-                if (ix == 0xbf800000) {
-                    return +1.0f;
-                } else if (!((ix << 1) < 0x7f000000) ^ !(iy & 0x80000000)) {
-                    return +0.0f;
-                }
-                else {
-                    return INFINITY;
-                }
-            }
-        }
-    }
-
-    mainpath:
-
-#define PHMULTIPLY(rh,rl, xh,xl, yh,yl) do { \
-    float tmph, tmpl; \
-    tmph = (xh) * (yh); \
-    tmpl = (xh) * (yl) + (xl) * ((yh)+(yl)); \
-/* printf("PHMULTIPLY: tmp=%08x+%08x\n", fai(tmph), fai(tmpl)); */ \
-    (rh) = CLEARBOTTOMHALF(tmph + tmpl); \
-    (rl) = tmpl + (tmph - (rh)); \
-} while (0)
-
-/*
- * Same as the PHMULTIPLY macro above, but bounds the absolute value
- * of rh+rl. In multiplications uncontrolled enough that rh can go
- * infinite, we can get an IVO exception from the subtraction tmph -
- * rh, so we should spot that case in advance and avoid it.
- */
-#define PHMULTIPLY_SATURATE(rh,rl, xh,xl, yh,yl, bound) do {            \
-        float tmph, tmpl;                                               \
-        tmph = (xh) * (yh);                                             \
-        if (fabsf(tmph) > (bound)) {                                  \
-            (rh) = copysignf((bound),(tmph));                           \
-            (rl) = 0.0f;                                                \
-        } else {                                                        \
-            tmpl = (xh) * (yl) + (xl) * ((yh)+(yl));                    \
-            (rh) = CLEARBOTTOMHALF(tmph + tmpl);                        \
-            (rl) = tmpl + (tmph - (rh));                                \
-        }                                                               \
-    } while (0)
-
-    /*
-     * Determine log2 of x to relative prec-and-a-half, as logh +
-     * logl.
-     *
-     * Well, we're actually computing 16*log2(x), so that it's the
-     * right size for the subsequently fiddly messing with powers of
-     * 2^(1/16) in the exp step at the end.
-     */
-    if (__builtin_expect((ix - 0x3f7ff000) <= (0x3f801000 - 0x3f7ff000), 0)) {
-        /*
-         * For x this close to 1, we write x = 1 + t and then
-         * compute t - t^2/2 + t^3/3 - t^4/4; and the neat bit is
-         * that t itself, being the bottom half of an input
-         * mantissa, is in half-precision already, so the output is
-         * naturally in canonical prec-and-a-half form.
-         */
-        float t = x - 1.0;
-        float lnh, lnl;
-        /*
-         * Compute natural log of x in prec-and-a-half.
-         */
-        lnh = t;
-        lnl = - (t * t) * ((1.0f/2.0f) - t * ((1.0f/3.0f) - t * (1.0f/4.0f)));
-
-        /*
-         * Now we must scale by 16/log(2), still in prec-and-a-half,
-         * to turn this from natural log(x) into 16*log2(x).
-         */
-        PHMULTIPLY(logh, logl, lnh, lnl, 0x1.716p+4F, -0x1.7135a8p-9F);
-    } else {
-        /*
-         * For all other x, we start by normalising to [1,2), and
-         * then dividing that further into subintervals. For each
-         * subinterval we pick a number a in that interval, compute
-         * s = (x-a)/(x+a) in precision-and-a-half, and then find
-         * the log base 2 of (1+s)/(1-s), still in precision-and-a-
-         * half.
-         *
-         * Why would we do anything so silly? For two main reasons.
-         *
-         * Firstly, if s = (x-a)/(x+a), then a bit of algebra tells
-         * us that x = a * (1+s)/(1-s); so once we've got
-         * log2((1+s)/(1-s)), we need only add on log2(a) and then
-         * we've got log2(x). So this lets us treat all our
-         * subintervals in essentially the same way, rather than
-         * requiring a separate approximation for each one; the only
-         * correction factor we need is to store a table of the
-         * base-2 logs of all our values of a.
-         *
-         * Secondly, log2((1+s)/(1-s)) is a nice thing to compute,
-         * once we've got s. Switching to natural logarithms for the
-         * moment (it's only a scaling factor to sort that out at
-         * the end), we write it as the difference of two logs:
-         *
-         *   log((1+s)/(1-s)) = log(1+s) - log(1-s)
-         *
-         * Now recall that Taylor series expansion gives us
-         *
-         *   log(1+s) = s - s^2/2 + s^3/3 - ...
-         *
-         * and therefore we also have
-         *
-         *   log(1-s) = -s - s^2/2 - s^3/3 - ...
-         *
-         * These series are exactly the same except that the odd
-         * terms (s, s^3 etc) have flipped signs; so subtracting the
-         * latter from the former gives us
-         *
-         *   log(1+s) - log(1-s) = 2s + 2s^3/3 + 2s^5/5 + ...
-         *
-         * which requires only half as many terms to be computed
-         * before the powers of s get too small to see. Then, of
-         * course, we have to scale the result by 1/log(2) to
-         * convert natural logs into logs base 2.
-         *
-         * To compute the above series in precision-and-a-half, we
-         * first extract a factor of 2s (which we can multiply back
-         * in later) so that we're computing 1 + s^2/3 + s^4/5 + ...
-         * and then observe that if s starts off small enough to
-         * make s^2/3 at most 2^-12, we need only compute the first
-         * couple of terms in laborious prec-and-a-half, and can
-         * delegate everything after that to a simple polynomial
-         * approximation whose error will end up at the bottom of
-         * the low word of the result.
-         *
-         * How many subintervals does that mean we need?
-         *
-         * To go back to s = (x-a)/(x+a). Let x = a + e, for some
-         * positive e. Then |s| = |e| / |2a+e| <= |e/2a|. So suppose
-         * we have n subintervals of equal width covering the space
-         * from 1 to 2. If a is at the centre of each interval, then
-         * we have e at most 1/2n and a can equal any of 1, 1+1/n,
-         * 1+2/n, ... 1+(n-1)/n. In that case, clearly the largest
-         * value of |e/2a| is given by the largest e (i.e. 1/2n) and
-         * the smallest a (i.e. 1); so |s| <= 1/4n. Hence, when we
-         * know how big we're prepared to let s be, we simply make
-         * sure 1/4n is at most that.
-         *
-         * And if we want s^2/3 to be at most 2^-12, then that means
-         * s^2 is at most 3*2^-12, so that s is at most sqrt(3)*2^-6
-         * = 0.02706. To get 1/4n smaller than that, we need to have
-         * n>=9.23; so we'll set n=16 (for ease of bit-twiddling),
-         * and then s is at most 1/64.
-         */
-        int n, i;
-        float a, ax, sh, sl, lsh, lsl;
-
-        /*
-         * Let ax be x normalised to a single exponent range.
-         * However, the exponent range in question is not a simple
-         * one like [1,2). What we do is to round up the top four
-         * bits of the mantissa, so that the top 1/32 of each
-         * natural exponent range rounds up to the next one and is
-         * treated as a displacement from the lowest a in that
-         * range.
-         *
-         * So this piece of bit-twiddling gets us our input exponent
-         * and our subinterval index.
-         */
-        n = (ix + 0x00040000) >> 19;
-        i = n & 15;
-        n = ((n >> 4) & 0xFF) - 0x7F;
-        ax = fhex(ix - (n << 23));
-        n += expadjust;
-
-        /*
-         * Compute the subinterval centre a.
-         */
-        a = 1.0f + i * (1.0f/16.0f);
-
-        /*
-         * Compute s = (ax-a)/(ax+a), in precision-and-a-half.
-         */
-        {
-            float u, vh, vl, vapprox, rvapprox;
-
-            u = ax - a;                /* exact numerator */
-            vapprox = ax + a;          /* approximate denominator */
-            vh = CLEARBOTTOMHALF(vapprox);
-            vl = (a - vh) + ax;        /* vh+vl is exact denominator */
-            rvapprox = 1.0f/vapprox;   /* approximate reciprocal of denominator */
-
-            sh = CLEARBOTTOMHALF(u * rvapprox);
-            sl = ((u - sh*vh) - sh*vl) * rvapprox;
-        }
-
-        /*
-         * Now compute log2(1+s) - log2(1-s). We do this in several
-         * steps.
-         *
-         * By polynomial approximation, we compute
-         *
-         *        log(1+s) - log(1-s)
-         *    p = ------------------- - 1
-         *                2s
-         *
-         * in single precision only, using a single-precision
-         * approximation to s. This polynomial has s^2 as its
-         * lowest-order term, so we expect the result to be in
-         * [0,2^-12).
-         *
-         * Then we form a prec-and-a-half number out of 1 and p,
-         * which is therefore equal to (log(1+s) - log(1-s))/(2s).
-         *
-         * Finally, we do two prec-and-a-half multiplications: one
-         * by s itself, and one by the constant 32/log(2).
-         */
-        {
-            float s = sh + sl;
-            float s2 = s*s;
-            /*
-             * p is actually a polynomial in s^2, with the first
-             * term constrained to zero. In other words, treated on
-             * its own terms, we're computing p(s^2) such that p(x)
-             * is an approximation to the sum of the series 1/3 +
-             * x/5 + x^2/7 + ..., valid on the range [0, 1/40^2].
-             */
-            float p = s2 * (0.33333332920177422f + s2 * 0.20008275183621479f);
-            float th, tl;
-
-            PHMULTIPLY(th,tl, 1.0f,p, sh,sl);
-            PHMULTIPLY(lsh,lsl, th,tl, 0x1.716p+5F,-0x1.7135a8p-8F);
-        }
-
-        /*
-         * And our final answer for 16*log2(x) is equal to 16n (from
-         * the exponent), plus lsh+lsl (the result of the above
-         * computation), plus 16*log2(a) which we must look up in a
-         * table.
-         */
-        {
-            struct f2 { float h, l; };
-            static const struct f2 table[16] = {
-                /*
-                 * When constructing this table, we have to be sure
-                 * that we produce the same values of a which will
-                 * be produced by the computation above. Ideally, I
-                 * would tell Perl to actually do its _arithmetic_
-                 * in single precision here; but I don't know a way
-                 * to do that, so instead I just scrupulously
-                 * convert every intermediate value to and from SP.
-                 */
-                // perl -e 'for ($i=0; $i<16; $i++) { $v = unpack "f", pack "f", 1/16.0; $a = unpack "f", pack "f", $i * $v; $a = unpack "f", pack "f", $a+1.0; $l = 16*log($a)/log(2); $top = unpack "f", pack "f", int($l*256.0+0.5)/256.0; $bot = unpack "f", pack "f", $l - $top; printf "{0f_%08X,0f_%08X}, ", unpack "VV", pack "ff", $top, $bot; } print "\n"' | fold -s -w56 | sed 's/^/                /'
-                {0x0p+0F,0x0p+0F}, {0x1.66p+0F,0x1.fb7d64p-11F},
-                {0x1.5cp+1F,0x1.a39fbep-15F}, {0x1.fcp+1F,-0x1.f4a37ep-10F},
-                {0x1.49cp+2F,-0x1.87b432p-10F}, {0x1.91cp+2F,-0x1.15db84p-12F},
-                {0x1.d68p+2F,-0x1.583f9ap-11F}, {0x1.0c2p+3F,-0x1.f5fe54p-10F},
-                {0x1.2b8p+3F,0x1.a39fbep-16F}, {0x1.49ap+3F,0x1.e12f34p-11F},
-                {0x1.66ap+3F,0x1.1c8f12p-18F}, {0x1.828p+3F,0x1.3ab7cep-14F},
-                {0x1.9d6p+3F,-0x1.30158p-12F}, {0x1.b74p+3F,0x1.291eaap-10F},
-                {0x1.d06p+3F,-0x1.8125b4p-10F}, {0x1.e88p+3F,0x1.8d66c4p-10F},
-            };
-            float lah = table[i].h, lal = table[i].l;
-            float fn = 16*n;
-            logh = CLEARBOTTOMHALF(lsl + lal + lsh + lah + fn);
-            logl = lsl - ((((logh - fn) - lah) - lsh) - lal);
-        }
-    }
-
-    /*
-     * Now we have 16*log2(x), multiply it by y in prec-and-a-half.
-     */
-    {
-        float yh, yl;
-        int savedexcepts;
-
-        yh = CLEARBOTTOMHALF(y);
-        yl = y - yh;
-
-        /* This multiplication could become infinite, so to avoid IVO
-         * in PHMULTIPLY we bound the output at 4096, which is big
-         * enough to allow any non-overflowing case through
-         * unmodified. Also, we must mask out the OVF exception, which
-         * we won't want left in the FP status word in the case where
-         * rlogh becomes huge and _negative_ (since that will be an
-         * underflow from the perspective of powf's return value, not
-         * an overflow). */
-        savedexcepts = __ieee_status(0,0) & (FE_IEEE_OVERFLOW | FE_IEEE_UNDERFLOW);
-        PHMULTIPLY_SATURATE(rlogh, rlogl, logh, logl, yh, yl, 4096.0f);
-        __ieee_status(FE_IEEE_OVERFLOW | FE_IEEE_UNDERFLOW, savedexcepts);
-    }
-
-    /*
-     * And raise 2 to the power of whatever that gave. Again, this
-     * is done in three parts: the fractional part of our input is
-     * fed through a polynomial approximation, all but the bottom
-     * four bits of the integer part go straight into the exponent,
-     * and the bottom four bits of the integer part index into a
-     * lookup table of powers of 2^(1/16) in prec-and-a-half.
-     */
-    {
-        float rlog = rlogh + rlogl;
-        int i16 = (rlog + (rlog < 0 ? -0.5f : +0.5f));
-        float rlogi = i16 >> 4;
-
-        float x = rlogl + (rlogh - i16);
-
-        static const float powersof2to1over16top[16] = { 0x1p+0F, 0x1.0b4p+0F, 0x1.172p+0F, 0x1.238p+0F, 0x1.306p+0F, 0x1.3dep+0F, 0x1.4bep+0F, 0x1.5aap+0F, 0x1.6ap+0F, 0x1.7ap+0F, 0x1.8acp+0F, 0x1.9c4p+0F, 0x1.ae8p+0F, 0x1.c18p+0F, 0x1.d58p+0F, 0x1.ea4p+0F };
-        static const float powersof2to1over16bot[16] = { 0x0p+0F, 0x1.586cfap-12F, 0x1.7078fap-13F, 0x1.e9b9d6p-14F, 0x1.fc1464p-13F, 0x1.4c9824p-13F, 0x1.dad536p-12F, 0x1.07dd48p-12F, 0x1.3cccfep-13F, 0x1.1473ecp-12F, 0x1.ca8456p-13F, 0x1.230548p-13F, 0x1.3f32b6p-13F, 0x1.9bdd86p-12F, 0x1.8dcfbap-16F, 0x1.5f454ap-13F };
-        static const float powersof2to1over16all[16] = { 0x1p+0F, 0x1.0b5586p+0F, 0x1.172b84p+0F, 0x1.2387a6p+0F, 0x1.306fep+0F, 0x1.3dea64p+0F, 0x1.4bfdaep+0F, 0x1.5ab07ep+0F, 0x1.6a09e6p+0F, 0x1.7a1148p+0F, 0x1.8ace54p+0F, 0x1.9c4918p+0F, 0x1.ae89fap+0F, 0x1.c199bep+0F, 0x1.d5818ep+0F, 0x1.ea4afap+0F };
-        /*
-         * Coefficients generated using the command
-
-./auxiliary/remez.jl --suffix=f -- '-1/BigFloat(2)' '+1/BigFloat(2)' 2 0 'expm1(x*log(BigFloat(2))/16)/x'
-
-         */
-        float p = x * (
-            4.332169876512769231967668743345473181486157887703125512683507537369503902991722e-02f+x*(9.384123108485637159805511308039285411735300871134684682779057580789341719567367e-04f+x*(1.355120515540562256928614563584948866224035897564701496826514330445829352922309e-05f))
-            );
-        int index = (i16 & 15);
-        p = powersof2to1over16top[index] + (powersof2to1over16bot[index] + powersof2to1over16all[index]*p);
-
-        if (
-            fabsf(rlogi) < 126.0f
-            ) {
-            return sign * p * fhex((unsigned)((127.0f+rlogi) * 8388608.0f));
-        } else if (
-                   fabsf(rlogi) < 192.0f
-                   ) {
-            int i = rlogi;
-            float ret;
-
-            ret = sign * p *
-                fhex((unsigned)((0x7f+i/2) * 8388608)) *
-                fhex((unsigned)((0x7f+i-i/2) * 8388608));
-
-            if ((fai(ret) << 1) == 0xFF000000)
-                return MATHERR_POWF_OFL(x, y, sign);
-            else if ((fai(ret) << 1) == 0)
-                return MATHERR_POWF_UFL(x, y, sign);
-            else
-                return FLOAT_CHECKDENORM(ret);
-        } else {
-            if (rlogi < 0)
-                return MATHERR_POWF_UFL(x, y, sign);
-            else
-                return MATHERR_POWF_OFL(x, y, sign);
-        }
-    }
-}
diff --git a/math/single/e_rem_pio2.c b/math/single/e_rem_pio2.c
deleted file mode 100644
index 0cd3a22..0000000
--- a/math/single/e_rem_pio2.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * e_rem_pio2.c
- *
- * Copyright (c) 1999-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-#include <math.h>
-#include "math_private.h"
-
-int __ieee754_rem_pio2(double x, double *y) {
-    int q;
-
-    y[1] = 0.0;                        /* default */
-
-    /*
-     * Simple cases: all nicked from the fdlibm version for speed.
-     */
-    {
-        static const double invpio2 =  0x1.45f306dc9c883p-1;
-        static const double pio2s[] = {
-            0x1.921fb544p+0, /* 1.57079632673412561417e+00 */
-            0x1.0b4611a626331p-34, /* 6.07710050650619224932e-11 */
-            0x1.0b4611a6p-34, /* 6.07710050630396597660e-11 */
-            0x1.3198a2e037073p-69, /* 2.02226624879595063154e-21 */
-            0x1.3198a2ep-69, /* 2.02226624871116645580e-21 */
-            0x1.b839a252049c1p-104, /* 8.47842766036889956997e-32 */
-        };
-
-        double z,w,t,r,fn;
-        int i,j,idx,n,ix,hx;
-
-        hx = __HI(x);           /* high word of x */
-        ix = hx&0x7fffffff;
-        if(ix<=0x3fe921fb)   /* |x| ~<= pi/4 , no need for reduction */
-            {y[0] = x; y[1] = 0; return 0;}
-        if(ix<0x4002d97c) {  /* |x| < 3pi/4, special case with n=+-1 */
-            if(hx>0) {
-                z = x - pio2s[0];
-                if(ix!=0x3ff921fb) {    /* 33+53 bit pi is good enough */
-                    y[0] = z - pio2s[1];
-#ifdef bottomhalf
-                    y[1] = (z-y[0])-pio2s[1];
-#endif
-                } else {                /* near pi/2, use 33+33+53 bit pi */
-                    z -= pio2s[2];
-                    y[0] = z - pio2s[3];
-#ifdef bottomhalf
-                    y[1] = (z-y[0])-pio2s[3];
-#endif
-                }
-                return 1;
-            } else {    /* negative x */
-                z = x + pio2s[0];
-                if(ix!=0x3ff921fb) {    /* 33+53 bit pi is good enough */
-                    y[0] = z + pio2s[1];
-#ifdef bottomhalf
-                    y[1] = (z-y[0])+pio2s[1];
-#endif
-                } else {                /* near pi/2, use 33+33+53 bit pi */
-                    z += pio2s[2];
-                    y[0] = z + pio2s[3];
-#ifdef bottomhalf
-                    y[1] = (z-y[0])+pio2s[3];
-#endif
-                }
-                return -1;
-            }
-        }
-        if(ix<=0x413921fb) { /* |x| ~<= 2^19*(pi/2), medium size */
-            t  = fabs(x);
-            n  = (int) (t*invpio2+0.5);
-            fn = (double)n;
-            r  = t-fn*pio2s[0];
-            w  = fn*pio2s[1];    /* 1st round good to 85 bit */
-            j  = ix>>20;
-            idx = 1;
-            while (1) {
-                y[0] = r-w;
-                if (idx == 3)
-                    break;
-                i = j-(((__HI(y[0]))>>20)&0x7ff);
-                if(i <= 33*idx-17)
-                    break;
-                t  = r;
-                w  = fn*pio2s[2*idx];
-                r  = t-w;
-                w  = fn*pio2s[2*idx+1]-((t-r)-w);
-                idx++;
-            }
-#ifdef bottomhalf
-            y[1] = (r-y[0])-w;
-#endif
-            if(hx<0) {
-                y[0] = -y[0];
-#ifdef bottomhalf
-                y[1] = -y[1];
-#endif
-                return -n;
-            } else {
-                return n;
-            }
-        }
-    }
-
-    {
-        static const unsigned twooverpi[] = {
-            /* We start with two zero words, because they take up less
-             * space than the array bounds checking and special-case
-             * handling that would have to occur in their absence. */
-            0, 0,
-            /* 2/pi in hex is 0.a2f9836e... */
-            0xa2f9836e, 0x4e441529, 0xfc2757d1, 0xf534ddc0, 0xdb629599,
-            0x3c439041, 0xfe5163ab, 0xdebbc561, 0xb7246e3a, 0x424dd2e0,
-            0x06492eea, 0x09d1921c, 0xfe1deb1c, 0xb129a73e, 0xe88235f5,
-            0x2ebb4484, 0xe99c7026, 0xb45f7e41, 0x3991d639, 0x835339f4,
-            0x9c845f8b, 0xbdf9283b, 0x1ff897ff, 0xde05980f, 0xef2f118b,
-            0x5a0a6d1f, 0x6d367ecf, 0x27cb09b7, 0x4f463f66, 0x9e5fea2d,
-            0x7527bac7, 0xebe5f17b, 0x3d0739f7, 0x8a5292ea, 0x6bfb5fb1,
-            0x1f8d5d08, 0x56033046,
-        };
-
-        /*
-         * Multiprecision multiplication of this nature is more
-         * readily done in integers than in VFP, since we can use
-         * UMULL (on CPUs that support it) to multiply 32 by 32 bits
-         * at a time whereas the VFP would only be able to do 12x12
-         * without losing accuracy.
-         *
-         * So extract the mantissa of the input number as two 32-bit
-         * integers.
-         */
-        unsigned mant1 = 0x00100000 | (__HI(x) & 0xFFFFF);
-        unsigned mant2 = __LO(x);
-        /*
-         * Now work out which part of our stored value of 2/pi we're
-         * supposed to be multiplying by.
-         *
-         * Let the IEEE exponent field of x be e. With its bias
-         * removed, (e-1023) is the index of the set bit in bit 20
-         * of 'mant1' (i.e. that set bit has real place value
-         * 2^(e-1023)). So the lowest set bit in 'mant1', 52 bits
-         * further down, must have place value 2^(e-1075).
-         *
-         * We begin taking an interest in the value of 2/pi at the
-         * bit which multiplies by _that_ to give something with
-         * place value at most 2. In other words, the highest bit of
-         * 2/pi we're interested in is the one with place value
-         * 2/(2^(e-1075)) = 2^(1076-e).
-         *
-         * The bit at the top of the first zero word of the above
-         * array has place value 2^63. Hence, the bit we want to put
-         * at the top of the first word we extract from that array
-         * is the one at bit index n, where 63-n = 1076-e and hence
-         * n=e-1013.
-         */
-        int topbitindex = ((__HI(x) >> 20) & 0x7FF) - 1013;
-        int wordindex = topbitindex >> 5;
-        int shiftup = topbitindex & 31;
-        int shiftdown = 32 - shiftup;
-        unsigned scaled[8];
-        int i;
-
-        scaled[7] = scaled[6] = 0;
-
-        for (i = 6; i-- > 0 ;) {
-            /*
-             * Extract a word from our representation of 2/pi.
-             */
-            unsigned word;
-            if (shiftup)
-                word = (twooverpi[wordindex + i] << shiftup) | (twooverpi[wordindex + i + 1] >> shiftdown);
-            else
-                word = twooverpi[wordindex + i];
-            /*
-             * Multiply it by both words of our mantissa. (Should
-             * generate UMULLs where available.)
-             */
-            unsigned long long mult1 = (unsigned long long)word * mant1;
-            unsigned long long mult2 = (unsigned long long)word * mant2;
-            /*
-             * Split those up into 32-bit chunks.
-             */
-            unsigned bottom1 = (unsigned)mult1, top1 = (unsigned)(mult1 >> 32);
-            unsigned bottom2 = (unsigned)mult2, top2 = (unsigned)(mult2 >> 32);
-            /*
-             * Add those two chunks together.
-             */
-            unsigned out1, out2, out3;
-
-            out3 = bottom2;
-            out2 = top2 + bottom1;
-            out1 = top1 + (out2 < top2);
-            /*
-             * And finally add them to our 'scaled' array.
-             */
-            unsigned s3 = scaled[i+2], s2 = scaled[i+1], s1;
-            unsigned carry;
-            s3 = out3 + s3; carry = (s3 < out3);
-            s2 = out2 + s2 + carry; carry = carry ? (s2 <= out2) : (s2 < out2);
-            s1 = out1 + carry;
-
-            scaled[i+2] = s3;
-            scaled[i+1] = s2;
-            scaled[i] = s1;
-        }
-
-
-        /*
-         * The topmost set bit in mant1 is bit 20, and that has
-         * place value 2^(e-1023). The topmost bit (bit 31) of the
-         * most significant word we extracted from our twooverpi
-         * array had place value 2^(1076-e). So the product of those
-         * two bits must have place value 2^53; and that bit will
-         * have ended up as bit 19 of scaled[0]. Hence, the integer
-         * quadrant value we want to output, consisting of the bits
-         * with place values 2^1 and 2^0, must be 52 and 53 bits
-         * below that, i.e. precisely the topmost two bits of
-         * scaled[2].
-         *
-         * Or, at least, it will be once we add 1/2, to round to the
-         * _nearest_ multiple of pi/2 rather than the next one down.
-         */
-        q = (scaled[2] + (1<<29)) >> 30;
-
-        /*
-         * Now we construct the output fraction, which is most
-         * simply done in the VFP. We just extract four consecutive
-         * bit strings from our chunk of binary data, convert them
-         * to doubles, equip each with an appropriate FP exponent,
-         * add them together, and (don't forget) multiply back up by
-         * pi/2. That way we don't have to work out ourselves where
-         * the highest fraction bit ended up.
-         *
-         * Since our displacement from the nearest multiple of pi/2
-         * can be positive or negative, the topmost of these four
-         * values must be arranged with its 2^-1 bit at the very top
-         * of the word, and then treated as a _signed_ integer.
-         */
-        int i1 = (scaled[2] << 2);
-        unsigned i2 = scaled[3];
-        unsigned i3 = scaled[4];
-        unsigned i4 = scaled[5];
-        double f1 = i1, f2 = i2 * (0x1.0p-30), f3 = i3 * (0x1.0p-62), f4 = i4 * (0x1.0p-94);
-
-        /*
-         * Now f1+f2+f3+f4 is a representation, potentially to
-         * twice double precision, of 2^32 times ((2/pi)*x minus
-         * some integer). So our remaining job is to multiply
-         * back down by (pi/2)*2^-32, and convert back to one
-         * single-precision output number.
-         */
-        double ftop = f1 + (f2 + (f3 + f4));
-        ftop = __SET_LO(ftop, 0);
-        double fbot = f4 - (((ftop-f1)-f2)-f3);
-
-        /* ... and multiply by a prec-and-a-half value of (pi/2)*2^-32. */
-        double ret = (ftop * 0x1.921fb54p-32) + (ftop * 0x1.10b4611a62633p-62 + fbot * 0x1.921fb54442d18p-32);
-
-        /* Just before we return, take the input sign into account. */
-        if (__HI(x) & 0x80000000) {
-            q = -q;
-            ret = -ret;
-        }
-        y[0] = ret;
-        return q;
-    }
-}
diff --git a/math/single/funder.c b/math/single/funder.c
deleted file mode 100644
index ef16f68..0000000
--- a/math/single/funder.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * funder.c - manually provoke SP exceptions for mathlib
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-#include <fenv.h>
-#include "math_private.h"
-
-__inline float __mathlib_flt_infnan2(float x, float y)
-{
-  return x+y;
-}
-
-__inline float __mathlib_flt_infnan(float x)
-{
-  return x+x;
-}
-
-float __mathlib_flt_underflow(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_UNDERFLOW);
-#endif
-  return 0x1p-95F * 0x1p-95F;
-}
-
-float __mathlib_flt_overflow(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_OVERFLOW);
-#endif
-  return 0x1p+97F * 0x1p+97F;
-}
-
-float __mathlib_flt_invalid(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_INVALID);
-#endif
-  return 0.0f / 0.0f;
-}
-
-float __mathlib_flt_divzero(void)
-{
-#ifdef CLANG_EXCEPTIONS
-  feraiseexcept(FE_DIVBYZERO);
-#endif
-  return 1.0f / 0.0f;
-}
diff --git a/math/single/ieee_status.c b/math/single/ieee_status.c
deleted file mode 100644
index ef846f4..0000000
--- a/math/single/ieee_status.c
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * ieee_status.c
- *
- * Copyright (c) 2015-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-#include "math_private.h"
-
-__inline unsigned __ieee_status(unsigned bicmask, unsigned xormask)
-{
-#if defined __aarch64__ && defined __FP_FENV_EXCEPTIONS
-  unsigned status_word;
-  unsigned ret;
-
-#ifdef __FP_FENV_ROUNDING
-# define MASK (1<<27)|FE_IEEE_FLUSHZERO|FE_IEEE_MASK_ALL_EXCEPT|FE_IEEE_ALL_EXCEPT|FE_IEEE_ROUND_MASK
-#else
-# define MASK (1<<27)|FE_IEEE_FLUSHZERO|FE_IEEE_MASK_ALL_EXCEPT|FE_IEEE_ALL_EXCEPT
-#endif
-
-  /* mask out read-only bits */
-  bicmask &= MASK;
-  xormask &= MASK;
-
-  /* modify the status word */
-  __asm__ __volatile__ ("mrs %0, fpsr" : "=r" (status_word));
-  ret = status_word;
-  status_word &= ~bicmask;
-  status_word ^= xormask;
-  __asm__ __volatile__ ("msr fpsr, %0" : : "r" (status_word));
-
-  /* and return what it used to be */
-  return ret;
-#else
-  return 0;
-#endif
-}
diff --git a/math/single/math_private.h b/math/single/math_private.h
deleted file mode 100644
index eef997d..0000000
--- a/math/single/math_private.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * math_private.h
- *
- * Copyright (c) 2015-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * Header file containing some definitions and other small reusable pieces of
- * code that we need in the libraries.
- */
-
-#ifndef __MATH_PRIVATE_H
-#define __MATH_PRIVATE_H
-
-#include <errno.h>
-#include <stdint.h>
-
-extern int    __ieee754_rem_pio2(double, double *);
-extern double __kernel_poly(const double *, int, double);
-
-#define __FP_IEEE
-#define __FP_FENV_EXCEPTIONS
-#define __FP_FENV_ROUNDING
-#define __FP_INEXACT_EXCEPTION
-
-#define __set_errno(val) (errno = (val))
-
-static __inline uint32_t __LO(double x)
-{
-  union {double f; uint64_t i;} u = {x};
-  return (uint32_t)u.i;
-}
-
-static __inline uint32_t __HI(double x)
-{
-  union {double f; uint64_t i;} u = {x};
-  return u.i >> 32;
-}
-
-static __inline double __SET_LO(double x, uint32_t lo)
-{
-  union {double f; uint64_t i;} u = {x};
-  u.i = (u.i >> 32) << 32 | lo;
-  return u.f;
-}
-
-static __inline unsigned int fai(float f)
-{
-  union {float f; uint32_t i;} u = {f};
-  return u.i;
-}
-
-static __inline float fhex(unsigned int n)
-{
-  union {uint32_t i; float f;} u = {n};
-  return u.f;
-}
-
-#define CLEARBOTTOMHALF(x) fhex((fai(x) + 0x00000800) & 0xFFFFF000)
-
-#define FE_IEEE_OVERFLOW           (0x00000004)
-#define FE_IEEE_UNDERFLOW          (0x00000008)
-#define FE_IEEE_FLUSHZERO          (0x01000000)
-#define FE_IEEE_ROUND_TONEAREST    (0x00000000)
-#define FE_IEEE_ROUND_UPWARD       (0x00400000)
-#define FE_IEEE_ROUND_DOWNWARD     (0x00800000)
-#define FE_IEEE_ROUND_TOWARDZERO   (0x00C00000)
-#define FE_IEEE_ROUND_MASK         (0x00C00000)
-#define FE_IEEE_MASK_INVALID       (0x00000100)
-#define FE_IEEE_MASK_DIVBYZERO     (0x00000200)
-#define FE_IEEE_MASK_OVERFLOW      (0x00000400)
-#define FE_IEEE_MASK_UNDERFLOW     (0x00000800)
-#define FE_IEEE_MASK_INEXACT       (0x00001000)
-#define FE_IEEE_MASK_INPUTDENORMAL (0x00008000)
-#define FE_IEEE_MASK_ALL_EXCEPT    (0x00009F00)
-#define FE_IEEE_INVALID            (0x00000001)
-#define FE_IEEE_DIVBYZERO          (0x00000002)
-#define FE_IEEE_INEXACT            (0x00000010)
-#define FE_IEEE_INPUTDENORMAL      (0x00000080)
-#define FE_IEEE_ALL_EXCEPT         (0x0000009F)
-
-extern double __mathlib_dbl_overflow(void);
-extern float __mathlib_flt_overflow(void);
-extern double __mathlib_dbl_underflow(void);
-extern float __mathlib_flt_underflow(void);
-extern double __mathlib_dbl_invalid(void);
-extern float __mathlib_flt_invalid(void);
-extern double __mathlib_dbl_divzero(void);
-extern float __mathlib_flt_divzero(void);
-#define DOUBLE_OVERFLOW ( __mathlib_dbl_overflow() )
-#define FLOAT_OVERFLOW ( __mathlib_flt_overflow() )
-#define DOUBLE_UNDERFLOW ( __mathlib_dbl_underflow() )
-#define FLOAT_UNDERFLOW ( __mathlib_flt_underflow() )
-#define DOUBLE_INVALID ( __mathlib_dbl_invalid() )
-#define FLOAT_INVALID  ( __mathlib_flt_invalid() )
-#define DOUBLE_DIVZERO ( __mathlib_dbl_divzero() )
-#define FLOAT_DIVZERO  ( __mathlib_flt_divzero() )
-
-extern float  __mathlib_flt_infnan(float);
-extern float  __mathlib_flt_infnan2(float, float);
-extern double __mathlib_dbl_infnan(double);
-extern double __mathlib_dbl_infnan2(double, double);
-extern unsigned __ieee_status(unsigned, unsigned);
-
-#define FLOAT_INFNAN(x) __mathlib_flt_infnan(x)
-#define FLOAT_INFNAN2(x,y) __mathlib_flt_infnan2(x,y)
-#define DOUBLE_INFNAN(x) __mathlib_dbl_infnan(x)
-#define DOUBLE_INFNAN2(x,y) __mathlib_dbl_infnan2(x,y)
-
-#define MATHERR_POWF_00(x,y) (__set_errno(EDOM), 1.0f)
-#define MATHERR_POWF_INF0(x,y) (__set_errno(EDOM), 1.0f)
-#define MATHERR_POWF_0NEG(x,y) (__set_errno(ERANGE), FLOAT_DIVZERO)
-#define MATHERR_POWF_NEG0FRAC(x,y) (0.0f)
-#define MATHERR_POWF_0NEGODD(x,y) (__set_errno(ERANGE), -FLOAT_DIVZERO)
-#define MATHERR_POWF_0NEGEVEN(x,y) (__set_errno(ERANGE), FLOAT_DIVZERO)
-#define MATHERR_POWF_NEGFRAC(x,y) (__set_errno(EDOM), FLOAT_INVALID)
-#define MATHERR_POWF_ONEINF(x,y) (1.0f)
-#define MATHERR_POWF_OFL(x,y,z) (__set_errno(ERANGE), copysignf(FLOAT_OVERFLOW,z))
-#define MATHERR_POWF_UFL(x,y,z) (__set_errno(ERANGE), copysignf(FLOAT_UNDERFLOW,z))
-
-#define MATHERR_LOGF_0(x) (__set_errno(ERANGE), -FLOAT_DIVZERO)
-#define MATHERR_LOGF_NEG(x) (__set_errno(EDOM), FLOAT_INVALID)
-
-#define MATHERR_SIN_INF(x) (__set_errno(EDOM), DOUBLE_INVALID)
-#define MATHERR_SINF_INF(x) (__set_errno(EDOM), FLOAT_INVALID)
-#define MATHERR_COS_INF(x) (__set_errno(EDOM), DOUBLE_INVALID)
-#define MATHERR_COSF_INF(x) (__set_errno(EDOM), FLOAT_INVALID)
-#define MATHERR_TAN_INF(x) (__set_errno(EDOM), DOUBLE_INVALID)
-#define MATHERR_TANF_INF(x) (__set_errno(EDOM), FLOAT_INVALID)
-
-#define MATHERR_EXPF_UFL(x) (__set_errno(ERANGE), FLOAT_UNDERFLOW)
-#define MATHERR_EXPF_OFL(x) (__set_errno(ERANGE), FLOAT_OVERFLOW)
-
-#define FLOAT_CHECKDENORM(x) ( (fpclassify(x) == FP_SUBNORMAL ? FLOAT_UNDERFLOW : 0), x )
-#define DOUBLE_CHECKDENORM(x) ( (fpclassify(x) == FP_SUBNORMAL ? DOUBLE_UNDERFLOW : 0), x )
-
-#endif /* __MATH_PRIVATE_H */
diff --git a/math/single/poly.c b/math/single/poly.c
deleted file mode 100644
index 4eaf7ff..0000000
--- a/math/single/poly.c
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * poly.c
- *
- * Copyright (c) 1998-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-double __kernel_poly(const double *coeffs, int n, double x)
-{
-  double result = coeffs[--n];
-
-  while ((n & ~0x6) != 0)         /* Loop until n even and < 8 */
-    result = (result * x) + coeffs[--n];
-
-  switch (n)
-    {
-    case 6: result = (result * x) + coeffs[5];
-      result = (result * x) + coeffs[4];
-    case 4: result = (result * x) + coeffs[3];
-      result = (result * x) + coeffs[2];
-    case 2: result = (result * x) + coeffs[1];
-      result = (result * x) + coeffs[0];
-    }
-  return result;
-}
diff --git a/math/single/rredf.c b/math/single/rredf.c
deleted file mode 100644
index a5c3122..0000000
--- a/math/single/rredf.c
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * rredf.c - trigonometric range reduction function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * This code is intended to be used as the second half of a range
- * reducer whose first half is an inline function defined in
- * rredf.h. Each trig function performs range reduction by invoking
- * that, which handles the quickest and most common cases inline
- * before handing off to this function for everything else. Thus a
- * reasonable compromise is struck between speed and space. (I
- * hope.) In particular, this approach avoids a function call
- * overhead in the common case.
- */
-
-#include "math_private.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/*
- * Input values to this function:
- *  - x is the original user input value, unchanged by the
- *    first-tier reducer in the case where it hands over to us.
- *  - q is still the place where the caller expects us to leave the
- *    quadrant code.
- *  - k is the IEEE bit pattern of x (which it would seem a shame to
- *    recompute given that the first-tier reducer already went to
- *    the effort of extracting it from the VFP). FIXME: in softfp,
- *    on the other hand, it's unconscionably wasteful to replicate
- *    this value into a second register and we should change the
- *    prototype!
- */
-float __mathlib_rredf2(float x, int *q, unsigned k)
-{
-    /*
-     * First, weed out infinities and NaNs, and deal with them by
-     * returning a negative q.
-     */
-    if ((k << 1) >= 0xFF000000) {
-        *q = -1;
-        return x;
-    }
-    /*
-     * We do general range reduction by multiplying by 2/pi, and
-     * retaining the bottom two bits of the integer part and an
-     * initial chunk of the fraction below that. The integer bits
-     * are directly output as *q; the fraction is then multiplied
-     * back up by pi/2 before returning it.
-     *
-     * To get this right, we don't have to multiply by the _whole_
-     * of 2/pi right from the most significant bit downwards:
-     * instead we can discard any bit of 2/pi with a place value
-     * high enough that multiplying it by the LSB of x will yield a
-     * place value higher than 2. Thus we can bound the required
-     * work by a reasonably small constant regardless of the size of
-     * x (unlike, for instance, the IEEE remainder operation).
-     *
-     * At the other end, however, we must take more care: it isn't
-     * adequate just to acquire two integer bits and 24 fraction
-     * bits of (2/pi)x, because if a lot of those fraction bits are
-     * zero then we will suffer significance loss. So we must keep
-     * computing fraction bits as far down as 23 bits below the
-     * _highest set fraction bit_.
-     *
-     * The immediate question, therefore, is what the bound on this
-     * end of the job will be. In other words: what is the smallest
-     * difference between an integer multiple of pi/2 and a
-     * representable IEEE single precision number larger than the
-     * maximum size handled by rredf.h?
-     *
-     * The most difficult cases for each exponent can readily be
-     * found by Tim Peters's modular minimisation algorithm, and are
-     * tabulated in mathlib/tests/directed/rredf.tst. The single
-     * worst case is the IEEE single-precision number 0x6F79BE45,
-     * whose numerical value is in the region of 7.7*10^28; when
-     * reduced mod pi/2, it attains the value 0x30DDEEA9, or about
-     * 0.00000000161. The highest set bit of this value is the one
-     * with place value 2^-30; so its lowest is 2^-53. Hence, to be
-     * sure of having enough fraction bits to output at full single
-     * precision, we must be prepared to collect up to 53 bits of
-     * fraction in addition to our two bits of integer part.
-     *
-     * To begin with, this means we must store the value of 2/pi to
-     * a precision of 128+53 = 181 bits. That's six 32-bit words.
-     * (Hardly a chore, unlike the equivalent problem in double
-     * precision!)
-     */
-    {
-        static const unsigned twooverpi[] = {
-            /* We start with a zero word, because that takes up less
-             * space than the array bounds checking and special-case
-             * handling that would have to occur in its absence. */
-            0,
-            /* 2/pi in hex is 0.a2f9836e... */
-            0xa2f9836e, 0x4e441529, 0xfc2757d1,
-            0xf534ddc0, 0xdb629599, 0x3c439041,
-            /* Again, to avoid array bounds overrun, we store a spare
-             * word at the end. And it would be a shame to fill it
-             * with zeroes when we could use more bits of 2/pi... */
-            0xfe5163ab
-        };
-
-        /*
-         * Multiprecision multiplication of this nature is more
-         * readily done in integers than in VFP, since we can use
-         * UMULL (on CPUs that support it) to multiply 32 by 32 bits
-         * at a time whereas the VFP would only be able to do 12x12
-         * without losing accuracy.
-         *
-         * So extract the mantissa of the input number as a 32-bit
-         * integer.
-         */
-        unsigned mantissa = 0x80000000 | (k << 8);
-
-        /*
-         * Now work out which part of our stored value of 2/pi we're
-         * supposed to be multiplying by.
-         *
-         * Let the IEEE exponent field of x be e. With its bias
-         * removed, (e-127) is the index of the set bit at the top
-         * of 'mantissa' (i.e. that set bit has real place value
-         * 2^(e-127)). So the lowest set bit in 'mantissa', 23 bits
-         * further down, must have place value 2^(e-150).
-         *
-         * We begin taking an interest in the value of 2/pi at the
-         * bit which multiplies by _that_ to give something with
-         * place value at most 2. In other words, the highest bit of
-         * 2/pi we're interested in is the one with place value
-         * 2/(2^(e-150)) = 2^(151-e).
-         *
-         * The bit at the top of the first (zero) word of the above
-         * array has place value 2^31. Hence, the bit we want to put
-         * at the top of the first word we extract from that array
-         * is the one at bit index n, where 31-n = 151-e and hence
-         * n=e-120.
-         */
-        int topbitindex = ((k >> 23) & 0xFF) - 120;
-        int wordindex = topbitindex >> 5;
-        int shiftup = topbitindex & 31;
-        int shiftdown = 32 - shiftup;
-        unsigned word1, word2, word3;
-        if (shiftup) {
-            word1 = (twooverpi[wordindex] << shiftup) | (twooverpi[wordindex+1] >> shiftdown);
-            word2 = (twooverpi[wordindex+1] << shiftup) | (twooverpi[wordindex+2] >> shiftdown);
-            word3 = (twooverpi[wordindex+2] << shiftup) | (twooverpi[wordindex+3] >> shiftdown);
-        } else {
-            word1 = twooverpi[wordindex];
-            word2 = twooverpi[wordindex+1];
-            word3 = twooverpi[wordindex+2];
-        }
-
-        /*
-         * Do the multiplications, and add them together.
-         */
-        unsigned long long mult1 = (unsigned long long)word1 * mantissa;
-        unsigned long long mult2 = (unsigned long long)word2 * mantissa;
-        unsigned long long mult3 = (unsigned long long)word3 * mantissa;
-
-        unsigned /* bottom3 = (unsigned)mult3, */ top3 = (unsigned)(mult3 >> 32);
-        unsigned bottom2 = (unsigned)mult2, top2 = (unsigned)(mult2 >> 32);
-        unsigned bottom1 = (unsigned)mult1, top1 = (unsigned)(mult1 >> 32);
-
-        unsigned out3, out2, out1, carry;
-
-        out3 = top3 + bottom2; carry = (out3 < top3);
-        out2 = top2 + bottom1 + carry; carry = carry ? (out2 <= top2) : (out2 < top2);
-        out1 = top1 + carry;
-
-        /*
-         * The two words we multiplied to get mult1 had their top
-         * bits at (respectively) place values 2^(151-e) and
-         * 2^(e-127). The value of those two bits multiplied
-         * together will have ended up in bit 62 (the
-         * topmost-but-one bit) of mult1, i.e. bit 30 of out1.
-         * Hence, that bit has place value 2^(151-e+e-127) = 2^24.
-         * So the integer value that we want to output as q,
-         * consisting of the bits with place values 2^1 and 2^0,
-         * must be 23 and 24 bits below that, i.e. in bits 7 and 6
-         * of out1.
-         *
-         * Or, at least, it will be once we add 1/2, to round to the
-         * _nearest_ multiple of pi/2 rather than the next one down.
-         */
-        *q = (out1 + (1<<5)) >> 6;
-
-        /*
-         * Now we construct the output fraction, which is most
-         * simply done in the VFP. We just extract three consecutive
-         * bit strings from our chunk of binary data, convert them
-         * to integers, equip each with an appropriate FP exponent,
-         * add them together, and (don't forget) multiply back up by
-         * pi/2. That way we don't have to work out ourselves where
-         * the highest fraction bit ended up.
-         *
-         * Since our displacement from the nearest multiple of pi/2
-         * can be positive or negative, the topmost of these three
-         * values must be arranged with its 2^-1 bit at the very top
-         * of the word, and then treated as a _signed_ integer.
-         */
-        {
-            int i1 = (out1 << 26) | ((out2 >> 19) << 13);
-            unsigned i2 = out2 << 13;
-            unsigned i3 = out3;
-            float f1 = i1, f2 = i2 * (1.0f/524288.0f), f3 = i3 * (1.0f/524288.0f/524288.0f);
-
-            /*
-             * Now f1+f2+f3 is a representation, potentially to
-             * twice double precision, of 2^32 times ((2/pi)*x minus
-             * some integer). So our remaining job is to multiply
-             * back down by (pi/2)*2^-32, and convert back to one
-             * single-precision output number.
-             */
-
-            /* Normalise to a prec-and-a-half representation... */
-            float ftop = CLEARBOTTOMHALF(f1+f2+f3), fbot = f3-((ftop-f1)-f2);
-
-            /* ... and multiply by a prec-and-a-half value of (pi/2)*2^-32. */
-            float ret = (ftop * 0x1.92p-32F) + (ftop * 0x1.fb5444p-44F + fbot * 0x1.921fb6p-32F);
-
-            /* Just before we return, take the input sign into account. */
-            if (k & 0x80000000) {
-                *q = 0x10000000 - *q;
-                ret = -ret;
-            }
-            return ret;
-        }
-    }
-}
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif /* __cplusplus */
-
-/* end of rredf.c */
diff --git a/math/single/rredf.h b/math/single/rredf.h
deleted file mode 100644
index 41d3a0c..0000000
--- a/math/single/rredf.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * rredf.h - trigonometric range reduction function written new for RVCT 4.1
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * This header file defines an inline function which all three of
- * the single-precision trig functions (sinf, cosf, tanf) should use
- * to perform range reduction. The inline function handles the
- * quickest and most common cases inline, before handing off to an
- * out-of-line function defined in rredf.c for everything else. Thus
- * a reasonable compromise is struck between speed and space. (I
- * hope.) In particular, this approach avoids a function call
- * overhead in the common case.
- */
-
-#ifndef _included_rredf_h
-#define _included_rredf_h
-
-#include "math_private.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-extern float __mathlib_rredf2(float x, int *q, unsigned k);
-
-/*
- * Semantics of the function:
- *  - x is the single-precision input value provided by the user
- *  - the return value is in the range [-pi/4,pi/4], and is equal
- *    (within reasonable accuracy bounds) to x minus n*pi/2 for some
- *    integer n. (FIXME: perhaps some slippage on the output
- *    interval is acceptable, requiring more range from the
- *    following polynomial approximations but permitting more
- *    approximate rred decisions?)
- *  - *q is set to a positive value whose low two bits match those
- *    of n. Alternatively, it comes back as -1 indicating that the
- *    input value was trivial in some way (infinity, NaN, or so
- *    small that we can safely return sin(x)=tan(x)=x,cos(x)=1).
- */
-static __inline float __mathlib_rredf(float x, int *q)
-{
-    /*
-     * First, extract the bit pattern of x as an integer, so that we
-     * can repeatedly compare things to it without multiple
-     * overheads in retrieving comparison results from the VFP.
-     */
-    unsigned k = fai(x);
-
-    /*
-     * Deal immediately with the simplest possible case, in which x
-     * is already within the interval [-pi/4,pi/4]. This also
-     * identifies the subcase of ludicrously small x.
-     */
-    if ((k << 1) < (0x3f490fdb << 1)) {
-        if ((k << 1) < (0x39800000 << 1))
-            *q = -1;
-        else
-            *q = 0;
-        return x;
-    }
-
-    /*
-     * The next plan is to multiply x by 2/pi and convert to an
-     * integer, which gives us n; then we subtract n*pi/2 from x to
-     * get our output value.
-     *
-     * By representing pi/2 in that final step by a prec-and-a-half
-     * approximation, we can arrange good accuracy for n strictly
-     * less than 2^13 (so that an FP representation of n has twelve
-     * zero bits at the bottom). So our threshold for this strategy
-     * is 2^13 * pi/2 - pi/4, otherwise known as 8191.75 * pi/2 or
-     * 4095.875*pi. (Or, for those perverse people interested in
-     * actual numbers rather than multiples of pi/2, about 12867.5.)
-     */
-    if (__builtin_expect((k & 0x7fffffff) < 0x46490e49, 1)) {
-        float nf = 0.636619772367581343f * x;
-        /*
-         * The difference between that single-precision constant and
-         * the real 2/pi is about 2.568e-8. Hence the product nf has a
-         * potential error of 2.568e-8|x| even before rounding; since
-         * |x| < 4096 pi, that gives us an error bound of about
-         * 0.0003305.
-         *
-         * nf is then rounded to single precision, with a max error of
-         * 1/2 ULP, and since nf goes up to just under 8192, half a
-         * ULP could be as big as 2^-12 ~= 0.0002441.
-         *
-         * So by the time we convert nf to an integer, it could be off
-         * by that much, causing the wrong integer to be selected, and
-         * causing us to return a value a little bit outside the
-         * theoretical [-pi/4,+pi/4] output interval.
-         *
-         * How much outside? Well, we subtract nf*pi/2 from x, so the
-         * error bounds above have be be multiplied by pi/2. And if
-         * both of the above sources of error suffer their worst cases
-         * at once, then the very largest value we could return is
-         * obtained by adding that lot to the interval bound pi/4 to
-         * get
-         *
-         *    pi/4 + ((2/pi - 0f_3f22f983)*4096*pi + 2^-12) * pi/2
-         *
-         * which comes to 0f_3f494b02. (Compare 0f_3f490fdb = pi/4.)
-         *
-         * So callers of this range reducer should be prepared to
-         * handle numbers up to that large.
-         */
-#ifdef __TARGET_FPU_SOFTVFP
-        nf = _frnd(nf);
-#else
-        if (k & 0x80000000)
-            nf = (nf - 8388608.0f) + 8388608.0f;
-        else
-            nf = (nf + 8388608.0f) - 8388608.0f;   /* round to _nearest_ integer. FIXME: use some sort of frnd in softfp */
-#endif
-        *q = 3 & (int)nf;
-#if 0
-        /*
-         * FIXME: now I need a bunch of special cases to avoid
-         * having to do the full four-word reduction every time.
-         * Also, adjust the comment at the top of this section!
-         */
-        if (__builtin_expect((k & 0x7fffffff) < 0x46490e49, 1))
-            return ((x - nf * 0x1.92p+0F) - nf * 0x1.fb4p-12F) - nf * 0x1.4442d2p-24F;
-        else
-#endif
-            return ((x - nf * 0x1.92p+0F) - nf * 0x1.fb4p-12F) - nf * 0x1.444p-24F - nf * 0x1.68c234p-39F;
-    }
-
-    /*
-     * That's enough to do in-line; if we're still playing, hand off
-     * to the out-of-line main range reducer.
-     */
-    return __mathlib_rredf2(x, q, k);
-}
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif /* __cplusplus */
-
-#endif /* included */
-
-/* end of rredf.h */
diff --git a/math/single/s_cosf.c b/math/single/s_cosf.c
deleted file mode 100644
index 0e40b52..0000000
--- a/math/single/s_cosf.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * s_cosf.c - single precision cosine function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-#define COSINE
-#include "s_sincosf.c"
-
-/* end of s_cosf.c */
diff --git a/math/single/s_sincosf.c b/math/single/s_sincosf.c
deleted file mode 100644
index 38a8511..0000000
--- a/math/single/s_sincosf.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * s_sincosf.c - single precision sine and cosine functions
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * Source: my own head, and Remez-generated polynomial approximations.
- */
-
-#include <fenv.h>
-#include <math.h>
-#include <errno.h>
-#include "rredf.h"
-#include "math_private.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#ifndef COSINE
-#define FUNCNAME sinf
-#define SOFTFP_FUNCNAME __softfp_sinf
-#define DO_SIN (!(q & 1))
-#define NEGATE_SIN ((q & 2))
-#define NEGATE_COS ((q & 2))
-#define TRIVIAL_RESULT(x) FLOAT_CHECKDENORM(x)
-#define ERR_INF MATHERR_SINF_INF
-#else
-#define FUNCNAME cosf
-#define SOFTFP_FUNCNAME __softfp_cosf
-#define DO_SIN (q & 1)
-#define NEGATE_SIN (!(q & 2))
-#define NEGATE_COS ((q & 2))
-#define TRIVIAL_RESULT(x) 1.0f
-#define ERR_INF MATHERR_COSF_INF
-#endif
-
-float FUNCNAME(float x)
-{
-    int q;
-
-    /*
-     * Range-reduce x to the range [-pi/4,pi/4].
-     */
-    {
-        /*
-         * I enclose the call to __mathlib_rredf in braces so that
-         * the address-taken-ness of qq does not propagate
-         * throughout the rest of the function, for what that might
-         * be worth.
-         */
-        int qq;
-        x = __mathlib_rredf(x, &qq);
-        q = qq;
-    }
-    if (__builtin_expect(q < 0, 0)) { /* this signals tiny, inf, or NaN */
-        unsigned k = fai(x) << 1;
-        if (k < 0xFF000000)            /* tiny */
-            return TRIVIAL_RESULT(x);
-        else if (k == 0xFF000000)      /* inf */
-            return ERR_INF(x);
-        else                           /* NaN */
-            return FLOAT_INFNAN(x);
-    }
-
-    /*
-     * Depending on the quadrant we were in, we may have to compute
-     * a sine-like function (f(0)=0) or a cosine-like one (f(0)=1),
-     * and we may have to negate it.
-     */
-    if (DO_SIN) {
-        float x2 = x*x;
-        /*
-         * Coefficients generated by the command
-
-./auxiliary/remez.jl --variable=x2 --suffix=f -- '0' 'atan(BigFloat(1))^2' 2 0 'x==0 ? -1/BigFloat(6) : (x->(sin(x)-x)/x^3)(sqrt(x))' 'sqrt(x^3)'
-
-         */
-        x += x * (x2 * (
-                      -1.666665066929417292436220415142244613956015227491999719404711781344783392564922e-01f+x2*(8.331978663157089651408875887703995477889496917296385733254577121461421466427772e-03f+x2*(-1.949563623766929906511886482584265500187314705496861877317774185883215997931494e-04f))
-                      ));
-        if (NEGATE_SIN)
-            x = -x;
-        return x;
-    } else {
-        float x2 = x*x;
-        /*
-         * Coefficients generated by the command
-
-./auxiliary/remez.jl --variable=x2 --suffix=f -- '0' 'atan(BigFloat(1))^2' 2 0 'x==0 ? -1/BigFloat(6) : (x->(cos(x)-1)/x^2)(sqrt(x))' 'x'
-
-         */
-        x = 1.0f + x2*(
-            -4.999989478137016757327030935768632852012781143541026304540837816323349768666875e-01f+x2*(4.165629457842617238353362092016541041535652603456375154392942188742496860024377e-02f+x2*(-1.35978231111049428748566568960423202948250988565693107969571193763372093404347e-03f))
-            );
-        if (NEGATE_COS)
-            x = -x;
-        return x;
-    }
-}
-
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif /* __cplusplus */
-
-/* end of sincosf.c */
diff --git a/math/single/s_sinf.c b/math/single/s_sinf.c
deleted file mode 100644
index ab0f628..0000000
--- a/math/single/s_sinf.c
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * s_sinf.c - single precision sine function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-#define SINE
-#include "s_sincosf.c"
-
-/* end of s_sinf.c */
diff --git a/math/single/s_tanf.c b/math/single/s_tanf.c
deleted file mode 100644
index 0e13d95..0000000
--- a/math/single/s_tanf.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * s_tanf.c - single precision tangent function
- *
- * Copyright (c) 2009-2018, Arm Limited.
- * SPDX-License-Identifier: MIT
- */
-
-/*
- * Source: my own head, and Remez-generated polynomial approximations.
- */
-
-#include <math.h>
-#include "math_private.h"
-#include <errno.h>
-#include <fenv.h>
-#include "rredf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-float tanf(float x)
-{
-    int q;
-
-    /*
-     * Range-reduce x to the range [-pi/4,pi/4].
-     */
-    {
-        /*
-         * I enclose the call to __mathlib_rredf in braces so that
-         * the address-taken-ness of qq does not propagate
-         * throughout the rest of the function, for what that might
-         * be worth.
-         */
-        int qq;
-        x = __mathlib_rredf(x, &qq);
-        q = qq;
-    }
-    if (__builtin_expect(q < 0, 0)) { /* this signals tiny, inf, or NaN */
-        unsigned k = fai(x) << 1;
-        if (k < 0xFF000000)            /* tiny */
-            return FLOAT_CHECKDENORM(x);
-        else if (k == 0xFF000000)      /* inf */
-            return MATHERR_TANF_INF(x);
-        else                           /* NaN */
-            return FLOAT_INFNAN(x);
-    }
-
-    /*
-     * We use a direct polynomial approximation for tan(x) on
-     * [-pi/4,pi/4], and then take the negative reciprocal of the
-     * result if we're in an interval surrounding an odd rather than
-     * even multiple of pi/2.
-     *
-     * Coefficients generated by the command
-
-./auxiliary/remez.jl --variable=x2 --suffix=f -- '0' '(pi/BigFloat(4))^2' 5 0 'x==0 ? 1/BigFloat(3) : (tan(sqrt(x))-sqrt(x))/sqrt(x^3)' 'sqrt(x^3)'
-
-     */
-    {
-        float x2 = x*x;
-        x += x * (x2 * (
-                      3.333294809182307633621540045249152105330074691488121206914336806061620616979305e-01f+x2*(1.334274588580033216191949445078951865160600494428914956688702429547258497367525e-01f+x2*(5.315177279765676178198868818834880279286012428084733419724267810723468887753723e-02f+x2*(2.520300881849204519070372772571624013984546591252791443673871814078418474596388e-02f+x2*(2.051177187082974766686645514206648277055233230110624602600687812103764075834307e-03f+x2*(9.943421494628597182458186353995299429948224864648292162238582752158235742046109e-03f)))))
-                      ));
-        if (q & 1)
-            x = -1.0f/x;
-
-        return x;
-    }
-}
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif /* __cplusplus */
-
-/* end of s_tanf.c */
diff --git a/math/tanf.c b/math/tanf.c
deleted file mode 100644
index d3799f5..0000000
--- a/math/tanf.c
+++ /dev/null
@@ -1,3 +0,0 @@
-#if WANT_SINGLEPREC
-#include "single/s_tanf.c"
-#endif
diff --git a/test/mathbench.c b/math/test/mathbench.c
similarity index 100%
rename from test/mathbench.c
rename to math/test/mathbench.c
diff --git a/test/mathtest.c b/math/test/mathtest.c
similarity index 99%
rename from test/mathtest.c
rename to math/test/mathtest.c
index f535452..6ea3953 100644
--- a/test/mathtest.c
+++ b/math/test/mathtest.c
@@ -40,8 +40,6 @@
 _Pragma(STR(import IMPORT_SYMBOL))
 #endif
 
-EXTERN_C int __ieee754_rem_pio2(double, double *);
-
 int dmsd, dlsd;
 int quiet = 0;
 
@@ -1094,7 +1092,6 @@
         case m_islessgreaterf: intres = islessgreater(s_arg1.f, s_arg2.f); break;
         case m_isunorderedf: intres = isunordered(s_arg1.f, s_arg2.f); break;
 
-        case m_rred:  intres = 3 & __ieee754_rem_pio2(d_arg1.f, d_res.da); break;
         default:
             printf("unhandled macro: %s\n",t.func->name);
             return test_fail;
diff --git a/test/rtest/dotest.c b/math/test/rtest/dotest.c
similarity index 100%
rename from test/rtest/dotest.c
rename to math/test/rtest/dotest.c
diff --git a/test/rtest/intern.h b/math/test/rtest/intern.h
similarity index 100%
rename from test/rtest/intern.h
rename to math/test/rtest/intern.h
diff --git a/test/rtest/main.c b/math/test/rtest/main.c
similarity index 100%
rename from test/rtest/main.c
rename to math/test/rtest/main.c
diff --git a/test/rtest/random.c b/math/test/rtest/random.c
similarity index 100%
rename from test/rtest/random.c
rename to math/test/rtest/random.c
diff --git a/test/rtest/random.h b/math/test/rtest/random.h
similarity index 100%
rename from test/rtest/random.h
rename to math/test/rtest/random.h
diff --git a/test/rtest/semi.c b/math/test/rtest/semi.c
similarity index 100%
rename from test/rtest/semi.c
rename to math/test/rtest/semi.c
diff --git a/test/rtest/semi.h b/math/test/rtest/semi.h
similarity index 100%
rename from test/rtest/semi.h
rename to math/test/rtest/semi.h
diff --git a/test/rtest/types.h b/math/test/rtest/types.h
similarity index 100%
rename from test/rtest/types.h
rename to math/test/rtest/types.h
diff --git a/test/rtest/wrappers.c b/math/test/rtest/wrappers.c
similarity index 100%
rename from test/rtest/wrappers.c
rename to math/test/rtest/wrappers.c
diff --git a/test/rtest/wrappers.h b/math/test/rtest/wrappers.h
similarity index 100%
rename from test/rtest/wrappers.h
rename to math/test/rtest/wrappers.h
diff --git a/math/test/runulp.sh b/math/test/runulp.sh
new file mode 100755
index 0000000..d7d79a4
--- /dev/null
+++ b/math/test/runulp.sh
@@ -0,0 +1,85 @@
+#!/bin/bash
+
+# ULP error check script.
+#
+# Copyright (c) 2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+#set -x
+set -eu
+
+# cd to bin directory.
+cd "${0%/*}"
+
+rmodes='n u d z'
+#rmodes=n
+flags='-q'
+emu="$@"
+
+t() {
+	[ $r = "n" ] && Lt=$L || Lt=$Ldir
+	$emu ./ulp -r $r -e $Lt $flags "$@"
+}
+
+Ldir=0.5
+for r in $rmodes
+do
+L=0.01
+t exp  0 0xffff000000000000 10000
+t exp  0x1p-6     0x1p6     40000
+t exp -0x1p-6    -0x1p6     40000
+t exp  633.3      733.3     10000
+t exp -633.3     -777.3     10000
+
+L=0.01
+t exp2  0 0xffff000000000000 10000
+t exp2  0x1p-6     0x1p6     40000
+t exp2 -0x1p-6    -0x1p6     40000
+t exp2  633.3      733.3     10000
+t exp2 -633.3     -777.3     10000
+
+L=0.05
+t pow  0.5  2.0  x  0  inf 20000
+t pow -0.5 -2.0  x  0  inf 20000
+t pow  0.5  2.0  x -0 -inf 20000
+t pow -0.5 -2.0  x -0 -inf 20000
+t pow  0.5  2.0  x  0x1p-10  0x1p10  40000
+t pow  0.5  2.0  x -0x1p-10 -0x1p10  40000
+t pow  0    inf  x    0.5      2.0   80000
+t pow  0    inf  x   -0.5     -2.0   80000
+t pow  0x1.fp-1   0x1.08p0  x  0x1p8 0x1p17  80000
+t pow  0x1.fp-1   0x1.08p0  x -0x1p8 -0x1p17 80000
+t pow  0         0x1p-1000  x  0 1.0 50000
+t pow  0x1p1000        inf  x  0 1.0 50000
+t pow  0x1.ffffffffffff0p-1  0x1.0000000000008p0 x 0x1p60 0x1p68 50000
+t pow  0x1.ffffffffff000p-1  0x1p0 x 0x1p50 0x1p52 50000
+t pow -0x1.ffffffffff000p-1 -0x1p0 x 0x1p50 0x1p52 50000
+
+L=0.01
+t expf  0    0xffff0000    10000
+t expf  0x1p-14   0x1p8    50000
+t expf -0x1p-14  -0x1p8    50000
+
+L=0.01
+t exp2f  0    0xffff0000   10000
+t exp2f  0x1p-14   0x1p8   50000
+t exp2f -0x1p-14  -0x1p8   50000
+
+L=0.06
+t sinf  0    0xffff0000    10000
+t sinf  0x1p-14  0x1p54    50000
+t sinf -0x1p-14 -0x1p54    50000
+
+L=0.06
+t cosf  0    0xffff0000    10000
+t cosf  0x1p-14  0x1p54    50000
+t cosf -0x1p-14 -0x1p54    50000
+
+L=0.4
+t powf  0x1p-1   0x1p1  x  0x1p-7 0x1p7   50000
+t powf  0x1p-1   0x1p1  x -0x1p-7 -0x1p7  50000
+t powf  0x1p-70 0x1p70  x  0x1p-1 0x1p1   50000
+t powf  0x1p-70 0x1p70  x  -0x1p-1 -0x1p1 50000
+t powf  0x1.ep-1 0x1.1p0 x  0x1p8 0x1p14  50000
+t powf  0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p14 50000
+done
diff --git a/test/testcases/directed/cosf.tst b/math/test/testcases/directed/cosf.tst
similarity index 100%
rename from test/testcases/directed/cosf.tst
rename to math/test/testcases/directed/cosf.tst
diff --git a/test/testcases/directed/exp.tst b/math/test/testcases/directed/exp.tst
similarity index 100%
rename from test/testcases/directed/exp.tst
rename to math/test/testcases/directed/exp.tst
diff --git a/test/testcases/directed/exp2.tst b/math/test/testcases/directed/exp2.tst
similarity index 100%
rename from test/testcases/directed/exp2.tst
rename to math/test/testcases/directed/exp2.tst
diff --git a/test/testcases/directed/exp2f.tst b/math/test/testcases/directed/exp2f.tst
similarity index 100%
rename from test/testcases/directed/exp2f.tst
rename to math/test/testcases/directed/exp2f.tst
diff --git a/test/testcases/directed/expf.tst b/math/test/testcases/directed/expf.tst
similarity index 100%
rename from test/testcases/directed/expf.tst
rename to math/test/testcases/directed/expf.tst
diff --git a/test/testcases/directed/log.tst b/math/test/testcases/directed/log.tst
similarity index 100%
rename from test/testcases/directed/log.tst
rename to math/test/testcases/directed/log.tst
diff --git a/test/testcases/directed/log2.tst b/math/test/testcases/directed/log2.tst
similarity index 100%
rename from test/testcases/directed/log2.tst
rename to math/test/testcases/directed/log2.tst
diff --git a/test/testcases/directed/log2f.tst b/math/test/testcases/directed/log2f.tst
similarity index 100%
rename from test/testcases/directed/log2f.tst
rename to math/test/testcases/directed/log2f.tst
diff --git a/test/testcases/directed/logf.tst b/math/test/testcases/directed/logf.tst
similarity index 100%
rename from test/testcases/directed/logf.tst
rename to math/test/testcases/directed/logf.tst
diff --git a/test/testcases/directed/pow.tst b/math/test/testcases/directed/pow.tst
similarity index 100%
rename from test/testcases/directed/pow.tst
rename to math/test/testcases/directed/pow.tst
diff --git a/test/testcases/directed/powf.tst b/math/test/testcases/directed/powf.tst
similarity index 100%
rename from test/testcases/directed/powf.tst
rename to math/test/testcases/directed/powf.tst
diff --git a/test/testcases/directed/sincosf.tst b/math/test/testcases/directed/sincosf.tst
similarity index 100%
rename from test/testcases/directed/sincosf.tst
rename to math/test/testcases/directed/sincosf.tst
diff --git a/test/testcases/directed/sinf.tst b/math/test/testcases/directed/sinf.tst
similarity index 100%
rename from test/testcases/directed/sinf.tst
rename to math/test/testcases/directed/sinf.tst
diff --git a/test/testcases/random/double.tst b/math/test/testcases/random/double.tst
similarity index 92%
rename from test/testcases/random/double.tst
rename to math/test/testcases/random/double.tst
index 4306259..c37e837 100644
--- a/test/testcases/random/double.tst
+++ b/math/test/testcases/random/double.tst
@@ -3,7 +3,6 @@
 !! Copyright (c) 1999-2018, Arm Limited.
 !! SPDX-License-Identifier: MIT
 
-test rred 10000
 test exp 10000
 test exp2 10000
 test log 10000
diff --git a/test/testcases/random/float.tst b/math/test/testcases/random/float.tst
similarity index 100%
rename from test/testcases/random/float.tst
rename to math/test/testcases/random/float.tst
diff --git a/test/traces/exp.txt b/math/test/traces/exp.txt
similarity index 100%
rename from test/traces/exp.txt
rename to math/test/traces/exp.txt
diff --git a/test/traces/sincosf.txt b/math/test/traces/sincosf.txt
similarity index 100%
rename from test/traces/sincosf.txt
rename to math/test/traces/sincosf.txt
diff --git a/math/test/ulp.c b/math/test/ulp.c
new file mode 100644
index 0000000..8de6e5b
--- /dev/null
+++ b/math/test/ulp.c
@@ -0,0 +1,714 @@
+/*
+ * ULP error checking tool for math functions.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <ctype.h>
+#include <fenv.h>
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Don't depend on mpfr by default.  */
+#ifndef USE_MPFR
+# define USE_MPFR 0
+#endif
+#if USE_MPFR
+# include <mpfr.h>
+#endif
+
+static inline uint64_t
+asuint64 (double f)
+{
+  union
+  {
+    double f;
+    uint64_t i;
+  } u = {f};
+  return u.i;
+}
+
+static inline double
+asdouble (uint64_t i)
+{
+  union
+  {
+    uint64_t i;
+    double f;
+  } u = {i};
+  return u.f;
+}
+
+static inline uint32_t
+asuint (float f)
+{
+  union
+  {
+    float f;
+    uint32_t i;
+  } u = {f};
+  return u.i;
+}
+
+static inline float
+asfloat (uint32_t i)
+{
+  union
+  {
+    uint32_t i;
+    float f;
+  } u = {i};
+  return u.f;
+}
+
+static uint64_t seed = 0x0123456789abcdef;
+static uint64_t
+rand64 (void)
+{
+  seed = 6364136223846793005ull * seed + 1;
+  return seed ^ (seed >> 32);
+}
+
+/* Uniform random in [0,n].  */
+static uint64_t
+randn (uint64_t n)
+{
+  uint64_t r, m;
+
+  if (n == 0)
+    return 0;
+  n++;
+  if (n == 0)
+    return rand64 ();
+  for (;;)
+    {
+      r = rand64 ();
+      m = r % n;
+      if (r - m <= -n)
+	return m;
+    }
+}
+
+struct gen
+{
+  uint64_t start;
+  uint64_t len;
+  uint64_t start2;
+  uint64_t len2;
+  uint64_t off;
+  uint64_t step;
+  uint64_t cnt;
+};
+
+struct args_f1
+{
+  float x;
+};
+
+struct args_f2
+{
+  float x;
+  float x2;
+};
+
+struct args_d1
+{
+  double x;
+};
+
+struct args_d2
+{
+  double x;
+  double x2;
+};
+
+/* result = y + tail*2^ulpexp.  */
+struct ret_f
+{
+  float y;
+  double tail;
+  int ulpexp;
+  int ex;
+  int ex_may;
+};
+
+struct ret_d
+{
+  double y;
+  double tail;
+  int ulpexp;
+  int ex;
+  int ex_may;
+};
+
+static inline uint64_t
+next1 (struct gen *g)
+{
+  /* For single argument use randomized incremental steps,
+     that produce dense sampling without collisions and allow
+     testing all inputs in a range.  */
+  uint64_t r = g->start + g->off;
+  g->off += g->step + randn (g->step / 2);
+  if (g->off > g->len)
+    g->off -= g->len; /* hack.  */
+  return r;
+}
+
+static inline uint64_t
+next2 (uint64_t *x2, struct gen *g)
+{
+  /* For two arguments use uniform random sampling.  */
+  uint64_t r = g->start + randn (g->len);
+  *x2 = g->start2 + randn (g->len2);
+  return r;
+}
+
+static struct args_f1
+next_f1 (void *g)
+{
+  return (struct args_f1){asfloat (next1 (g))};
+}
+
+static struct args_f2
+next_f2 (void *g)
+{
+  uint64_t x2;
+  uint64_t x = next2 (&x2, g);
+  return (struct args_f2){asfloat (x), asfloat (x2)};
+}
+
+static struct args_d1
+next_d1 (void *g)
+{
+  return (struct args_d1){asdouble (next1 (g))};
+}
+
+static struct args_d2
+next_d2 (void *g)
+{
+  uint64_t x2;
+  uint64_t x = next2 (&x2, g);
+  return (struct args_d2){asdouble (x), asdouble (x2)};
+}
+
+struct conf
+{
+  int r;
+  int rc;
+  int quiet;
+  int mpfr;
+  int fenv;
+  unsigned long long n;
+  double softlim;
+  double errlim;
+};
+
+struct fun
+{
+  const char *name;
+  int arity;
+  int singleprec;
+  union
+  {
+    float (*f1) (float);
+    float (*f2) (float, float);
+    double (*d1) (double);
+    double (*d2) (double, double);
+  } fun;
+  union
+  {
+    double (*f1) (double);
+    double (*f2) (double, double);
+    long double (*d1) (long double);
+    long double (*d2) (long double, long double);
+  } fun_long;
+#if USE_MPFR
+  union
+  {
+    int (*f1) (mpfr_t, const mpfr_t, mpfr_rnd_t);
+    int (*f2) (mpfr_t, const mpfr_t, const mpfr_t, mpfr_rnd_t);
+    int (*d1) (mpfr_t, const mpfr_t, mpfr_rnd_t);
+    int (*d2) (mpfr_t, const mpfr_t, const mpfr_t, mpfr_rnd_t);
+  } fun_mpfr;
+#endif
+};
+
+static const struct fun fun[] = {
+#if USE_MPFR
+# define F(x, x_long, x_mpfr, a, s, t) \
+  {#x, a, s, {.t = x}, {.t = x_long}, {.t = x_mpfr}},
+#else
+# define F(x, x_long, x_mpfr, a, s, t) \
+  {#x, a, s, {.t = x}, {.t = x_long}},
+#endif
+#define F1(x) F (x##f, x, mpfr_##x, 1, 1, f1)
+#define F2(x) F (x##f, x, mpfr_##x, 2, 1, f2)
+#define D1(x) F (x, x##l, mpfr_##x, 1, 0, d1)
+#define D2(x) F (x, x##l, mpfr_##x, 2, 0, d2)
+ F1 (sin)
+ F1 (cos)
+ F1 (exp)
+ F1 (exp2)
+ F1 (log)
+ F1 (log2)
+ F2 (pow)
+ D1 (exp)
+ D1 (exp2)
+ D1 (log)
+ D1 (log2)
+ D2 (pow)
+ {0}};
+
+/* Boilerplate for generic calls.  */
+
+static inline int
+ulpscale_f (float x)
+{
+  int e = asuint (x) >> 23 & 0xff;
+  if (!e)
+    e++;
+  return e - 0x7f - 23;
+}
+static inline int
+ulpscale_d (double x)
+{
+  int e = asuint64 (x) >> 52 & 0x7ff;
+  if (!e)
+    e++;
+  return e - 0x3ff - 52;
+}
+static inline float
+call_f1 (const struct fun *f, struct args_f1 a)
+{
+  return f->fun.f1 (a.x);
+}
+static inline float
+call_f2 (const struct fun *f, struct args_f2 a)
+{
+  return f->fun.f2 (a.x, a.x2);
+}
+
+static inline double
+call_d1 (const struct fun *f, struct args_d1 a)
+{
+  return f->fun.d1 (a.x);
+}
+static inline double
+call_d2 (const struct fun *f, struct args_d2 a)
+{
+  return f->fun.d2 (a.x, a.x2);
+}
+static inline double
+call_long_f1 (const struct fun *f, struct args_f1 a)
+{
+  return f->fun_long.f1 (a.x);
+}
+static inline double
+call_long_f2 (const struct fun *f, struct args_f2 a)
+{
+  return f->fun_long.f2 (a.x, a.x2);
+}
+static inline long double
+call_long_d1 (const struct fun *f, struct args_d1 a)
+{
+  return f->fun_long.d1 (a.x);
+}
+static inline long double
+call_long_d2 (const struct fun *f, struct args_d2 a)
+{
+  return f->fun_long.d2 (a.x, a.x2);
+}
+static inline void
+printcall_f1 (const struct fun *f, struct args_f1 a)
+{
+  printf ("%s(%a)", f->name, a.x);
+}
+static inline void
+printcall_f2 (const struct fun *f, struct args_f2 a)
+{
+  printf ("%s(%a, %a)", f->name, a.x, a.x2);
+}
+static inline void
+printcall_d1 (const struct fun *f, struct args_d1 a)
+{
+  printf ("%s(%a)", f->name, a.x);
+}
+static inline void
+printcall_d2 (const struct fun *f, struct args_d2 a)
+{
+  printf ("%s(%a, %a)", f->name, a.x, a.x2);
+}
+static inline void
+printgen_f1 (const struct fun *f, struct gen *gen)
+{
+  printf ("%s in [%a;%a]", f->name, asfloat (gen->start),
+	  asfloat (gen->start + gen->len));
+}
+static inline void
+printgen_f2 (const struct fun *f, struct gen *gen)
+{
+  printf ("%s in [%a;%a] x [%a;%a]", f->name, asfloat (gen->start),
+	  asfloat (gen->start + gen->len), asfloat (gen->start2),
+	  asfloat (gen->start2 + gen->len2));
+}
+static inline void
+printgen_d1 (const struct fun *f, struct gen *gen)
+{
+  printf ("%s in [%a;%a]", f->name, asdouble (gen->start),
+	  asdouble (gen->start + gen->len));
+}
+static inline void
+printgen_d2 (const struct fun *f, struct gen *gen)
+{
+  printf ("%s in [%a;%a] x [%a;%a]", f->name, asdouble (gen->start),
+	  asdouble (gen->start + gen->len), asdouble (gen->start2),
+	  asdouble (gen->start2 + gen->len2));
+}
+
+#define reduce_f1(a, f, op) (f (a.x))
+#define reduce_f2(a, f, op) (f (a.x) op f (a.x2))
+#define reduce_d1(a, f, op) (f (a.x))
+#define reduce_d2(a, f, op) (f (a.x) op f (a.x2))
+
+#ifndef IEEE_754_2008_SNAN
+# define IEEE_754_2008_SNAN 1
+#endif
+static inline int
+issignaling_f (float x)
+{
+  uint32_t ix = asuint (x);
+  if (!IEEE_754_2008_SNAN)
+    return (ix & 0x7fc00000) == 0x7fc00000;
+  return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000;
+}
+static inline int
+issignaling_d (double x)
+{
+  uint64_t ix = asuint64 (x);
+  if (!IEEE_754_2008_SNAN)
+    return (ix & 0x7ff8000000000000) == 0x7ff8000000000000;
+  return 2 * (ix ^ 0x0008000000000000) > 2 * 0x7ff8000000000000ULL;
+}
+
+#if USE_MPFR
+static mpfr_rnd_t
+rmap (int r)
+{
+  switch (r)
+    {
+    case FE_TONEAREST:
+      return MPFR_RNDN;
+    case FE_TOWARDZERO:
+      return MPFR_RNDZ;
+    case FE_UPWARD:
+      return MPFR_RNDU;
+    case FE_DOWNWARD:
+      return MPFR_RNDD;
+    }
+  return -1;
+}
+
+#define prec_mpfr_f 50
+#define prec_mpfr_d 80
+#define prec_f 24
+#define prec_d 53
+#define emin_f -148
+#define emin_d -1073
+#define emax_f 128
+#define emax_d 1024
+static inline int
+call_mpfr_f1 (mpfr_t y, const struct fun *f, struct args_f1 a, mpfr_rnd_t r)
+{
+  MPFR_DECL_INIT (x, prec_f);
+  mpfr_set_flt (x, a.x, MPFR_RNDN);
+  return f->fun_mpfr.f1 (y, x, r);
+}
+static inline int
+call_mpfr_f2 (mpfr_t y, const struct fun *f, struct args_f2 a, mpfr_rnd_t r)
+{
+  MPFR_DECL_INIT (x, prec_f);
+  MPFR_DECL_INIT (x2, prec_f);
+  mpfr_set_flt (x, a.x, MPFR_RNDN);
+  mpfr_set_flt (x2, a.x2, MPFR_RNDN);
+  return f->fun_mpfr.f2 (y, x, x2, r);
+}
+static inline int
+call_mpfr_d1 (mpfr_t y, const struct fun *f, struct args_d1 a, mpfr_rnd_t r)
+{
+  MPFR_DECL_INIT (x, prec_d);
+  mpfr_set_d (x, a.x, MPFR_RNDN);
+  return f->fun_mpfr.d1 (y, x, r);
+}
+static inline int
+call_mpfr_d2 (mpfr_t y, const struct fun *f, struct args_d2 a, mpfr_rnd_t r)
+{
+  MPFR_DECL_INIT (x, prec_d);
+  MPFR_DECL_INIT (x2, prec_d);
+  mpfr_set_d (x, a.x, MPFR_RNDN);
+  mpfr_set_d (x2, a.x2, MPFR_RNDN);
+  return f->fun_mpfr.d2 (y, x, x2, r);
+}
+#endif
+
+#define float_f float
+#define double_f double
+#define copysign_f copysignf
+#define nextafter_f nextafterf
+#define fabs_f fabsf
+#define asuint_f asuint
+#define asfloat_f asfloat
+#define scalbn_f scalbnf
+#define lscalbn_f scalbn
+#define halfinf_f 0x1p127f
+#define min_normal_f 0x1p-126f
+
+#define float_d double
+#define double_d long double
+#define copysign_d copysign
+#define nextafter_d nextafter
+#define fabs_d fabs
+#define asuint_d asuint64
+#define asfloat_d asdouble
+#define scalbn_d scalbn
+#define lscalbn_d scalbnl
+#define halfinf_d 0x1p1023
+#define min_normal_d 0x1p-1022
+
+#define NEW_RT
+#define RT(x) x##_f
+#define T(x) x##_f1
+#include "ulp.h"
+#undef T
+#define T(x) x##_f2
+#include "ulp.h"
+#undef T
+#undef RT
+
+#define NEW_RT
+#define RT(x) x##_d
+#define T(x) x##_d1
+#include "ulp.h"
+#undef T
+#define T(x) x##_d2
+#include "ulp.h"
+#undef T
+#undef RT
+
+static void
+usage (void)
+{
+  puts ("./ulp [-q] [-m] [-f] [-r nudz] [-l soft-ulplimit] [-e ulplimit] func "
+	"lo [hi [x lo2 hi2] [count]]");
+  puts ("Compares func against a higher precision implementation in [lo; hi].");
+  puts ("-q: quiet.");
+  puts ("-m: use mpfr even if faster method is available.");
+  puts ("-f: disable fenv testing (rounding modes and exceptions).");
+  puts ("Supported func:");
+  for (const struct fun *f = fun; f->name; f++)
+    printf ("\t%s\n", f->name);
+  exit (1);
+}
+
+static void
+cmp (const struct fun *f, struct gen *gen, const struct conf *conf)
+{
+  if (f->arity == 1 && f->singleprec)
+    cmp_f1 (f, gen, conf);
+  else if (f->arity == 2 && f->singleprec)
+    cmp_f2 (f, gen, conf);
+  else if (f->arity == 1 && !f->singleprec)
+    cmp_d1 (f, gen, conf);
+  else if (f->arity == 2 && !f->singleprec)
+    cmp_d2 (f, gen, conf);
+  else
+    usage ();
+}
+
+static uint64_t
+getnum (const char *s, int singleprec)
+{
+  //	int i;
+  uint64_t sign = 0;
+  //	char buf[12];
+
+  if (s[0] == '+')
+    s++;
+  else if (s[0] == '-')
+    {
+      sign = singleprec ? 1ULL << 31 : 1ULL << 63;
+      s++;
+    }
+  /* 0xXXXX is treated as bit representation, '-' flips the sign bit.  */
+  if (s[0] == '0' && tolower (s[1]) == 'x' && strchr (s, 'p') == 0)
+    return sign ^ strtoull (s, 0, 0);
+  //	/* SNaN, QNaN, NaN, Inf.  */
+  //	for (i=0; s[i] && i < sizeof buf; i++)
+  //		buf[i] = tolower(s[i]);
+  //	buf[i] = 0;
+  //	if (strcmp(buf, "snan") == 0)
+  //		return sign | (singleprec ? 0x7fa00000 : 0x7ff4000000000000);
+  //	if (strcmp(buf, "qnan") == 0 || strcmp(buf, "nan") == 0)
+  //		return sign | (singleprec ? 0x7fc00000 : 0x7ff8000000000000);
+  //	if (strcmp(buf, "inf") == 0 || strcmp(buf, "infinity") == 0)
+  //		return sign | (singleprec ? 0x7f800000 : 0x7ff0000000000000);
+  /* Otherwise assume it's a floating-point literal.  */
+  return sign
+	 | (singleprec ? asuint (strtof (s, 0)) : asuint64 (strtod (s, 0)));
+}
+
+static void
+parsegen (struct gen *g, int argc, char *argv[], const struct fun *f)
+{
+  int singleprec = f->singleprec;
+  int arity = f->arity;
+  uint64_t a, b, a2, b2, n;
+  if (argc < 1)
+    usage ();
+  b = a = getnum (argv[0], singleprec);
+  n = 0;
+  if (argc > 1 && strcmp (argv[1], "x") == 0)
+    {
+      argc -= 2;
+      argv += 2;
+    }
+  else if (argc > 1)
+    {
+      b = getnum (argv[1], singleprec);
+      if (argc > 2 && strcmp (argv[2], "x") == 0)
+	{
+	  argc -= 3;
+	  argv += 3;
+	}
+    }
+  b2 = a2 = getnum (argv[0], singleprec);
+  if (argc > 1)
+    b2 = getnum (argv[1], singleprec);
+  if (argc > 2)
+    n = strtoull (argv[2], 0, 0);
+  if (argc > 3)
+    usage ();
+  //printf("ab %lx %lx ab2 %lx %lx n %lu\n", a, b, a2, b2, n);
+  if (arity == 1)
+    {
+      g->start = a;
+      g->len = b - a;
+      if (n - 1 > b - a)
+	n = b - a + 1;
+      g->off = 0;
+      g->step = n ? (g->len + 1) / n : 1;
+      g->start2 = g->len2 = 0;
+      g->cnt = n;
+    }
+  else if (arity == 2)
+    {
+      g->start = a;
+      g->len = b - a;
+      g->off = g->step = 0;
+      g->start2 = a2;
+      g->len2 = b2 - a2;
+      g->cnt = n;
+    }
+  else
+    usage ();
+}
+
+int
+main (int argc, char *argv[])
+{
+  const struct fun *f;
+  struct gen gen;
+  struct conf conf;
+  conf.rc = 'n';
+  conf.quiet = 0;
+  conf.mpfr = 0;
+  conf.fenv = 1;
+  conf.softlim = 0;
+  conf.errlim = INFINITY;
+  for (;;)
+    {
+      argc--;
+      argv++;
+      if (argc < 1)
+	usage ();
+      if (argv[0][0] != '-')
+	break;
+      switch (argv[0][1])
+	{
+	case 'e':
+	  argc--;
+	  argv++;
+	  if (argc < 1)
+	    usage ();
+	  conf.errlim = strtod (argv[0], 0);
+	  break;
+	case 'f':
+	  conf.fenv = 0;
+	  break;
+	case 'l':
+	  argc--;
+	  argv++;
+	  if (argc < 1)
+	    usage ();
+	  conf.softlim = strtod (argv[0], 0);
+	  break;
+	case 'm':
+	  conf.mpfr = 1;
+	  break;
+	case 'q':
+	  conf.quiet = 1;
+	  break;
+	case 'r':
+	  conf.rc = argv[0][2];
+	  if (!conf.rc)
+	    {
+	      argc--;
+	      argv++;
+	      if (argc < 1)
+		usage ();
+	      conf.rc = argv[0][0];
+	    }
+	  break;
+	default:
+	  usage ();
+	}
+    }
+  switch (conf.rc)
+    {
+    case 'n':
+      conf.r = FE_TONEAREST;
+      break;
+    case 'u':
+      conf.r = FE_UPWARD;
+      break;
+    case 'd':
+      conf.r = FE_DOWNWARD;
+      break;
+    case 'z':
+      conf.r = FE_TOWARDZERO;
+      break;
+    default:
+      usage ();
+    }
+  for (f = fun; f->name; f++)
+    if (strcmp (argv[0], f->name) == 0)
+      break;
+  if (!f->name)
+    usage ();
+  if (!f->singleprec && LDBL_MANT_DIG == DBL_MANT_DIG)
+    conf.mpfr = 1; /* Use mpfr if long double has no extra precision.  */
+  if (!USE_MPFR && conf.mpfr)
+    {
+      puts ("mpfr is not available.");
+      return 1;
+    }
+  argc--;
+  argv++;
+  parsegen (&gen, argc, argv, f);
+  conf.n = gen.cnt;
+  cmp (f, &gen, &conf);
+}
diff --git a/math/test/ulp.h b/math/test/ulp.h
new file mode 100644
index 0000000..07b0cb6
--- /dev/null
+++ b/math/test/ulp.h
@@ -0,0 +1,338 @@
+/*
+ * Generic functions for ULP error estimation.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* For each different math function type,
+   T(x) should add a different suffix to x.
+   RT(x) should add a return type specific suffix to x. */
+
+#ifdef NEW_RT
+#undef NEW_RT
+
+# if USE_MPFR
+static int RT(ulpscale_mpfr) (mpfr_t x, int t)
+{
+  /* TODO: pow of 2 cases.  */
+  if (mpfr_regular_p (x))
+    {
+      mpfr_exp_t e = mpfr_get_exp (x) - RT(prec);
+      if (e < RT(emin))
+	e = RT(emin) - 1;
+      if (e > RT(emax) - RT(prec))
+	e = RT(emax) - RT(prec);
+      return e;
+    }
+  if (mpfr_zero_p (x))
+    return RT(emin) - 1;
+  if (mpfr_inf_p (x))
+    return RT(emax) - RT(prec);
+  /* NaN.  */
+  return 0;
+}
+# endif
+
+/* Difference between exact result and closest real number that
+   gets rounded to got, i.e. error before rounding, for a correctly
+   rounded result the difference is 0.  */
+static double RT(ulperr) (RT(float) got, const struct RT(ret) * p, int r)
+{
+  RT(float) want = p->y;
+  RT(float) d;
+  double e;
+
+  if (RT(asuint) (got) == RT(asuint) (want))
+    return 0.0;
+  if (signbit (got) != signbit (want))
+    /* May have false positives with NaN.  */
+    //return isnan(got) && isnan(want) ? 0 : INFINITY;
+    return INFINITY;
+  if (!isfinite (want) || !isfinite (got))
+    {
+      if (isnan (got) != isnan (want))
+	return INFINITY;
+      if (isnan (want))
+	return 0;
+      if (isinf (got))
+	{
+	  got = RT(copysign) (RT(halfinf), got);
+	  want *= 0.5f;
+	}
+      if (isinf (want))
+	{
+	  want = RT(copysign) (RT(halfinf), want);
+	  got *= 0.5f;
+	}
+    }
+  if (r == FE_TONEAREST)
+    {
+      // TODO: incorrect when got vs want cross a powof2 boundary
+      /* error = got > want
+	      ? got - want - tail ulp - 0.5 ulp
+	      : got - want - tail ulp + 0.5 ulp;  */
+      d = got - want;
+      e = d > 0 ? -p->tail - 0.5 : -p->tail + 0.5;
+    }
+  else
+    {
+      if ((r == FE_DOWNWARD && got < want) || (r == FE_UPWARD && got > want)
+	  || (r == FE_TOWARDZERO && fabs (got) < fabs (want)))
+	got = RT(nextafter) (got, want);
+      d = got - want;
+      e = -p->tail;
+    }
+  return RT(scalbn) (d, -p->ulpexp) + e;
+}
+
+static int RT(isok) (RT(float) ygot, int exgot, RT(float) ywant, int exwant,
+		      int exmay)
+{
+  return RT(asuint) (ygot) == RT(asuint) (ywant)
+	 && ((exgot ^ exwant) & ~exmay) == 0;
+}
+
+static int RT(isok_nofenv) (RT(float) ygot, RT(float) ywant)
+{
+  return RT(asuint) (ygot) == RT(asuint) (ywant);
+}
+#endif
+
+static inline void T(call_fenv) (const struct fun *f, struct T(args) a, int r,
+				  RT(float) * y, int *ex)
+{
+  if (r != FE_TONEAREST)
+    fesetround (r);
+  feclearexcept (FE_ALL_EXCEPT);
+  *y = T(call) (f, a);
+  *ex = fetestexcept (FE_ALL_EXCEPT);
+  if (r != FE_TONEAREST)
+    fesetround (FE_TONEAREST);
+}
+
+static inline void T(call_nofenv) (const struct fun *f, struct T(args) a,
+				    int r, RT(float) * y, int *ex)
+{
+  *y = T(call) (f, a);
+  *ex = 0;
+}
+
+static inline int T(call_long_fenv) (const struct fun *f, struct T(args) a,
+				      int r, struct RT(ret) * p,
+				      RT(float) ygot, int exgot)
+{
+  if (r != FE_TONEAREST)
+    fesetround (r);
+  feclearexcept (FE_ALL_EXCEPT);
+  RT(double) yl = T(call_long) (f, a);
+  p->y = (RT(float)) yl;
+  volatile RT(float) vy = p->y; // TODO: barrier
+  (void) vy;
+  p->ex = fetestexcept (FE_ALL_EXCEPT);
+  if (r != FE_TONEAREST)
+    fesetround (FE_TONEAREST);
+  p->ex_may = FE_INEXACT;
+  if (RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may))
+    return 1;
+  p->ulpexp = RT(ulpscale) (p->y);
+  if (isinf (p->y))
+    p->tail = RT(lscalbn) (yl - (RT(double)) 2 * RT(halfinf), -p->ulpexp);
+  else
+    p->tail = RT(lscalbn) (yl - p->y, -p->ulpexp);
+  if (RT(fabs) (p->y) < RT(min_normal))
+    {
+      /* TODO: subnormal result is treated as undeflow even if it's
+	 exact since call_long may not raise inexact correctly.  */
+      if (p->y != 0 || (p->ex & FE_INEXACT))
+	p->ex |= FE_UNDERFLOW | FE_INEXACT;
+    }
+  return 0;
+}
+static inline int T(call_long_nofenv) (const struct fun *f, struct T(args) a,
+					int r, struct RT(ret) * p,
+					RT(float) ygot, int exgot)
+{
+  RT(double) yl = T(call_long) (f, a);
+  p->y = (RT(float)) yl;
+  if (RT(isok_nofenv) (ygot, p->y))
+    return 1;
+  p->ulpexp = RT(ulpscale) (p->y);
+  if (isinf (p->y))
+    p->tail = RT(lscalbn) (yl - (RT(double)) 2 * RT(halfinf), -p->ulpexp);
+  else
+    p->tail = RT(lscalbn) (yl - p->y, -p->ulpexp);
+  return 0;
+}
+
+/* There are nan input args and all quiet.  */
+static inline int T(qnanpropagation) (struct T(args) a)
+{
+  return T(reduce) (a, isnan, ||) && !T(reduce) (a, RT(issignaling), ||);
+}
+static inline RT(float) T(sum) (struct T(args) a)
+{
+  return T(reduce) (a, , +);
+}
+
+/* returns 1 if the got result is ok.  */
+static inline int T(call_mpfr_fix) (const struct fun *f, struct T(args) a,
+				     int r_fenv, struct RT(ret) * p,
+				     RT(float) ygot, int exgot)
+{
+#if USE_MPFR
+  int t, t2;
+  mpfr_rnd_t r = rmap (r_fenv);
+  MPFR_DECL_INIT(my, RT(prec_mpfr));
+  MPFR_DECL_INIT(mr, RT(prec));
+  MPFR_DECL_INIT(me, RT(prec_mpfr));
+  mpfr_clear_flags ();
+  t = T(call_mpfr) (my, f, a, r);
+  /* Double rounding.  */
+  t2 = mpfr_set (mr, my, r);
+  if (t2)
+    t = t2;
+  mpfr_set_emin (RT(emin));
+  mpfr_set_emax (RT(emax));
+  t = mpfr_check_range (mr, t, r);
+  t = mpfr_subnormalize (mr, t, r);
+  mpfr_set_emax (MPFR_EMAX_DEFAULT);
+  mpfr_set_emin (MPFR_EMIN_DEFAULT);
+  p->y = mpfr_get_d (mr, r);
+  p->ex = t ? FE_INEXACT : 0;
+  p->ex_may = FE_INEXACT;
+  if (mpfr_underflow_p () && (p->ex & FE_INEXACT))
+    /* TODO: handle before and after rounding uflow cases.  */
+    p->ex |= FE_UNDERFLOW;
+  if (mpfr_overflow_p ())
+    p->ex |= FE_OVERFLOW | FE_INEXACT;
+  if (mpfr_divby0_p ())
+    p->ex |= FE_DIVBYZERO;
+  //if (mpfr_erangeflag_p ())
+  //  p->ex |= FE_INVALID;
+  if (!mpfr_nanflag_p () && RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may))
+    return 1;
+  if (mpfr_nanflag_p () && !T(qnanpropagation) (a))
+    p->ex |= FE_INVALID;
+  p->ulpexp = RT(ulpscale_mpfr) (my, t);
+  if (!isfinite (p->y))
+    {
+      p->tail = 0;
+      if (isnan (p->y))
+	{
+	  /* If an input was nan keep its sign.  */
+	  p->y = T(sum) (a);
+	  if (!isnan (p->y))
+	    p->y = (p->y - p->y) / (p->y - p->y);
+	  return RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may);
+	}
+      mpfr_set_si_2exp (mr, signbit (p->y) ? -1 : 1, 1024, MPFR_RNDN);
+      if (mpfr_cmpabs (my, mr) >= 0)
+	return RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may);
+    }
+  mpfr_sub (me, my, mr, MPFR_RNDN);
+  mpfr_mul_2si (me, me, -p->ulpexp, MPFR_RNDN);
+  p->tail = mpfr_get_d (me, MPFR_RNDN);
+  return 0;
+#else
+  abort ();
+#endif
+}
+
+static void T(cmp) (const struct fun *f, struct gen *gen,
+		     const struct conf *conf)
+{
+  double maxerr = 0;
+  uint64_t cnt = 0;
+  uint64_t cnt1 = 0;
+  uint64_t cnt2 = 0;
+  uint64_t cntfail = 0;
+  int r = conf->r;
+  int use_mpfr = conf->mpfr;
+  int fenv = conf->fenv;
+  for (;;)
+    {
+      struct RT(ret) want;
+      struct T(args) a = T(next) (gen);
+      int exgot;
+      RT(float) ygot;
+      if (fenv)
+	T(call_fenv) (f, a, r, &ygot, &exgot);
+      else
+	T(call_nofenv) (f, a, r, &ygot, &exgot);
+      cnt++;
+      int ok = use_mpfr
+		 ? T(call_mpfr_fix) (f, a, r, &want, ygot, exgot)
+		 : (fenv ? T(call_long_fenv) (f, a, r, &want, ygot, exgot)
+			 : T(call_long_nofenv) (f, a, r, &want, ygot, exgot));
+      if (!ok)
+	{
+	  int print = 0;
+	  int fail = 0;
+	  double err = RT(ulperr) (ygot, &want, r);
+	  double abserr = fabs (err);
+	  // TODO: count errors below accuracy limit.
+	  if (abserr > 0)
+	    cnt1++;
+	  if (abserr > 1)
+	    cnt2++;
+	  if (abserr > conf->errlim)
+	    {
+	      print = fail = 1;
+	      cntfail++;
+	    }
+	  if (abserr > maxerr)
+	    {
+	      maxerr = abserr;
+	      if (!conf->quiet && abserr > conf->softlim)
+		print = 1;
+	    }
+	  if (print)
+	    {
+	      T(printcall) (f, a);
+	      // TODO: inf ulp handling
+	      printf (" got %a want %a %+g ulp err %g\n", ygot, want.y,
+		      want.tail, err);
+	    }
+	  int diff = fenv ? exgot ^ want.ex : 0;
+	  if (fenv && (diff & ~want.ex_may))
+	    {
+	      if (!fail)
+		{
+		  fail = 1;
+		  cntfail++;
+		}
+	      T(printcall) (f, a);
+	      printf (" is %a %+g ulp, got except 0x%0x", want.y, want.tail,
+		      exgot);
+	      if (diff & exgot)
+		printf (" wrongly set: 0x%x", diff & exgot);
+	      if (diff & ~exgot)
+		printf (" wrongly clear: 0x%x", diff & ~exgot);
+	      putchar ('\n');
+	    }
+	}
+      if (cnt >= conf->n)
+	break;
+      if (!conf->quiet && cnt % 0x100000 == 0)
+	printf ("progress: %6.3f%% cnt %llu cnt1 %llu cnt2 %llu cntfail %llu "
+		"maxerr %g\n",
+		100.0 * cnt / conf->n, (unsigned long long) cnt,
+		(unsigned long long) cnt1, (unsigned long long) cnt2,
+		(unsigned long long) cntfail, maxerr);
+    }
+  double cc = cnt;
+  if (cntfail)
+    printf ("FAIL ");
+  else
+    printf ("PASS ");
+  T(printgen) (f, gen);
+  printf (" round %c errlim %g maxerr %g %s cnt %llu cnt1 %llu %g%% cnt2 %llu "
+	  "%g%% cntfail %llu %g%%\n",
+	  conf->rc, conf->errlim,
+	  maxerr, conf->r == FE_TONEAREST ? "+0.5" : "+1.0",
+	  (unsigned long long) cnt,
+	  (unsigned long long) cnt1, 100.0 * cnt1 / cc,
+	  (unsigned long long) cnt2, 100.0 * cnt2 / cc,
+	  (unsigned long long) cntfail, 100.0 * cntfail / cc);
+}
diff --git a/math/tools/cos.sollya b/math/tools/cos.sollya
new file mode 100644
index 0000000..bd72d6b
--- /dev/null
+++ b/math/tools/cos.sollya
@@ -0,0 +1,31 @@
+// polynomial for approximating cos(x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 8;   // polynomial degree
+a = -pi/4; // interval
+b = pi/4;
+
+// find even polynomial with minimal abs error compared to cos(x)
+
+f = cos(x);
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+  return remez(f(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg/2 do {
+  p = roundcoefficients(approx(poly,2*i), [|D ...|]);
+  poly = poly + x^(2*i)*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/exp.sollya b/math/tools/exp.sollya
new file mode 100644
index 0000000..b7a462c
--- /dev/null
+++ b/math/tools/exp.sollya
@@ -0,0 +1,35 @@
+// polynomial for approximating e^x
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 5; // poly degree
+N = 128; // table entries
+b = log(2)/(2*N);  // interval
+b = b + b*0x1p-16; // increase interval for non-nearest rounding (TOINT_NARROW)
+a = -b;
+
+// find polynomial with minimal abs error
+
+// return p that minimizes |exp(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+  return remez(exp(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first 2 coeffs are fixed, iteratively find optimal double prec coeffs
+poly = 1 + x;
+for i from 2 to deg do {
+  p = roundcoefficients(approx(poly,i), [|D ...|]);
+  poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/exp(x), [a;b], 30));
+print("abs error:", accurateinfnorm(exp(x)-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+// double interval error for non-nearest rounding
+print("rel2 error:", accurateinfnorm(1-poly(x)/exp(x), [2*a;2*b], 30));
+print("abs2 error:", accurateinfnorm(exp(x)-poly(x), [2*a;2*b], 30));
+print("in [",2*a,2*b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/exp2.sollya b/math/tools/exp2.sollya
new file mode 100644
index 0000000..e760769
--- /dev/null
+++ b/math/tools/exp2.sollya
@@ -0,0 +1,48 @@
+// polynomial for approximating 2^x
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+// exp2f parameters
+deg = 3; // poly degree
+N = 32;  // table entries
+b = 1/(2*N); // interval
+a = -b;
+
+//// exp2 parameters
+//deg = 5; // poly degree
+//N = 128; // table entries
+//b = 1/(2*N); // interval
+//a = -b;
+
+// find polynomial with minimal relative error
+
+f = 2^x;
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+  return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx_abs = proc(poly,d) {
+  return remez(f(x) - poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg do {
+  p = roundcoefficients(approx(poly,i), [|D ...|]);
+//  p = roundcoefficients(approx_abs(poly,i), [|D ...|]);
+  poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/2^x, [a;b], 30));
+print("abs error:", accurateinfnorm(2^x-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+// double interval error for non-nearest rounding:
+print("rel2 error:", accurateinfnorm(1-poly(x)/2^x, [2*a;2*b], 30));
+print("abs2 error:", accurateinfnorm(2^x-poly(x), [2*a;2*b], 30));
+print("in [",2*a,2*b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log.sollya b/math/tools/log.sollya
new file mode 100644
index 0000000..6df4db4
--- /dev/null
+++ b/math/tools/log.sollya
@@ -0,0 +1,35 @@
+// polynomial for approximating log(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 12; // poly degree
+// |log(1+x)| > 0x1p-4 outside the interval
+a = -0x1p-4;
+b =  0x1.09p-4;
+
+// find log(1+x)/x polynomial with minimal relative error
+// (minimal relative error polynomial for log(1+x) is the same * x)
+deg = deg-1; // because of /x
+
+// f = log(1+x)/x; using taylor series
+f = 0;
+for i from 0 to 60 do { f = f + (-x)^i/(i+1); };
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+  return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg do {
+  p = roundcoefficients(approx(poly,i), [|D ...|]);
+  poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log2.sollya b/math/tools/log2.sollya
new file mode 100644
index 0000000..4a364c0
--- /dev/null
+++ b/math/tools/log2.sollya
@@ -0,0 +1,42 @@
+// polynomial for approximating log2(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 11; // poly degree
+// |log2(1+x)| > 0x1p-4 outside the interval
+a = -0x1.5b51p-5;
+b =  0x1.6ab2p-5;
+
+ln2 = evaluate(log(2),0);
+invln2hi = double(1/ln2 + 0x1p21) - 0x1p21; // round away last 21 bits
+invln2lo = double(1/ln2 - invln2hi);
+
+// find log2(1+x)/x polynomial with minimal relative error
+// (minimal relative error polynomial for log2(1+x) is the same * x)
+deg = deg-1; // because of /x
+
+// f = log(1+x)/x; using taylor series
+f = 0;
+for i from 0 to 60 do { f = f + (-x)^i/(i+1); };
+f = f/ln2;
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+  return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = invln2hi + invln2lo;
+for i from 1 to deg do {
+  p = roundcoefficients(approx(poly,i), [|D ...|]);
+  poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("invln2hi:", invln2hi);
+print("invln2lo:", invln2lo);
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log2_abs.sollya b/math/tools/log2_abs.sollya
new file mode 100644
index 0000000..82c4dac
--- /dev/null
+++ b/math/tools/log2_abs.sollya
@@ -0,0 +1,41 @@
+// polynomial for approximating log2(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 7; // poly degree
+// interval ~= 1/(2*N), where N is the table entries
+a= -0x1.f45p-8;
+b=  0x1.f45p-8;
+
+ln2 = evaluate(log(2),0);
+invln2hi = double(1/ln2 + 0x1p21) - 0x1p21; // round away last 21 bits
+invln2lo = double(1/ln2 - invln2hi);
+
+// find log2(1+x) polynomial with minimal absolute error
+f = log(1+x)/ln2;
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+  return remez(f(x) - poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = x*(invln2lo + invln2hi);
+for i from 2 to deg do {
+  p = roundcoefficients(approx(poly,i), [|D ...|]);
+  poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("invln2hi:", invln2hi);
+print("invln2lo:", invln2lo);
+print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
+//// relative error computation fails if f(0)==0
+//// g = f(x)/x = log2(1+x)/x; using taylor series
+//g = 0;
+//for i from 0 to 60 do { g = g + (-x)^i/(i+1)/ln2; };
+//print("rel error:", accurateinfnorm(1-(poly(x)/x)/g(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log_abs.sollya b/math/tools/log_abs.sollya
new file mode 100644
index 0000000..a2ac190
--- /dev/null
+++ b/math/tools/log_abs.sollya
@@ -0,0 +1,35 @@
+// polynomial for approximating log(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 6; // poly degree
+// interval ~= 1/(2*N), where N is the table entries
+a = -0x1.fp-9;
+b =  0x1.fp-9;
+
+// find log(1+x) polynomial with minimal absolute error
+f = log(1+x);
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+  return remez(f(x) - poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = x;
+for i from 2 to deg do {
+  p = roundcoefficients(approx(poly,i), [|D ...|]);
+  poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
+// relative error computation fails if f(0)==0
+// g = f(x)/x = log(1+x)/x; using taylor series
+g = 0;
+for i from 0 to 60 do { g = g + (-x)^i/(i+1); };
+print("rel error:", accurateinfnorm(1-poly(x)/x/g(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/plot.py b/math/tools/plot.py
new file mode 100755
index 0000000..09c8ec6
--- /dev/null
+++ b/math/tools/plot.py
@@ -0,0 +1,56 @@
+#!/usr/bin/python
+
+# ULP error plot tool.
+#
+# Copyright (c) 2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+import numpy as np
+import matplotlib.pyplot as plt
+import sys
+import re
+
+# example usage:
+# build/bin/ulp -e .0001 log 0.5 2.0 2345678 | math/tools/plot.py
+
+def fhex(s):
+	return float.fromhex(s)
+
+def parse(f):
+	xs = []
+	ys = []
+	es = []
+	# Has to match the format used in ulp.c
+	r = re.compile(r'[^ (]+\(([^ )]*)\) got [^ ]+ want ([^ ]+) [^ ]+ ulp err ([^ ]+)')
+	for line in f:
+		m = r.match(line)
+		if m:
+			x = fhex(m.group(1))
+			y = fhex(m.group(2))
+			e = float(m.group(3))
+			xs.append(x)
+			ys.append(y)
+			es.append(e)
+		elif line.startswith('PASS') or line.startswith('FAIL'):
+			# Print the summary line
+			print(line)
+	return xs, ys, es
+
+def plot(xs, ys, es):
+	if len(xs) < 2:
+		print('not enough samples')
+		return
+	a = min(xs)
+	b = max(xs)
+	fig, (ax0,ax1) = plt.subplots(nrows=2)
+	es = map(abs, es) # ignore the sign
+	emax = max(es)
+	ax0.text(a+(b-a)*0.7, emax*0.8, '%s\n%g'%(emax.hex(),emax))
+	ax0.plot(xs,es,'rx')
+	ax0.grid()
+	ax1.plot(xs,ys,'rx')
+	ax1.grid()
+	plt.show()
+
+xs, ys, es = parse(sys.stdin)
+plot(xs, ys, es)
diff --git a/auxiliary/remez.jl b/math/tools/remez.jl
similarity index 100%
rename from auxiliary/remez.jl
rename to math/tools/remez.jl
diff --git a/math/tools/sin.sollya b/math/tools/sin.sollya
new file mode 100644
index 0000000..a6e8511
--- /dev/null
+++ b/math/tools/sin.sollya
@@ -0,0 +1,37 @@
+// polynomial for approximating sin(x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 7;   // polynomial degree
+a = -pi/4; // interval
+b = pi/4;
+
+// find even polynomial with minimal abs error compared to sin(x)/x
+
+// account for /x
+deg = deg-1;
+
+// f = sin(x)/x;
+f = 1;
+c = 1;
+for i from 1 to 60 do { c = 2*i*(2*i + 1)*c; f = f + (-1)^i*x^(2*i)/c; };
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+  return remez(f(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg/2 do {
+  p = roundcoefficients(approx(poly,2*i), [|D ...|]);
+  poly = poly + x^(2*i)*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("abs error:", accurateinfnorm(sin(x)-x*poly(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/string/Dir.mk b/string/Dir.mk
new file mode 100644
index 0000000..e179642
--- /dev/null
+++ b/string/Dir.mk
@@ -0,0 +1,51 @@
+# Makefile fragment - requires GNU make
+#
+# Copyright (c) 2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+string-lib-srcs := $(wildcard $(srcdir)/string/*.[cS])
+string-includes-src := $(wildcard $(srcdir)/string/include/*.h)
+string-includes := $(string-includes-src:$(srcdir)/string/%=build/%)
+string-test-srcs := $(wildcard $(srcdir)/string/test/*.c)
+
+string-libs := \
+	build/lib/libstringlib.so \
+	build/lib/libstringlib.a \
+
+string-tools := \
+	build/bin/test/memcpy \
+
+string-lib-base := $(basename $(string-lib-srcs))
+string-lib-objs := $(string-lib-base:$(srcdir)/%=build/%.o)
+string-test-base := $(basename $(string-test-srcs))
+string-test-objs := $(string-test-base:$(srcdir)/%=build/%.o)
+
+string-objs := \
+	$(string-lib-objs) \
+	$(string-test-objs) \
+
+all-string: $(string-libs) $(string-tools) $(string-includes)
+
+$(string-objs) $(string-objs:%.o=%.os): $(string-includes)
+
+build/lib/libstringlib.so: $(string-lib-objs:%.o=%.os)
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -shared -o $@ $^
+
+build/lib/libstringlib.a: $(string-lib-objs)
+	rm -f $@
+	$(AR) rc $@ $^
+	$(RANLIB) $@
+
+build/bin/test/%: build/string/test/%.o build/lib/libstringlib.a
+	$(CC) $(CFLAGS_ALL) $(LDFLAGS_ALL) -static -o $@ $^ $(LDLIBS)
+
+build/include/%.h: $(srcdir)/string/include/%.h
+	cp $< $@
+
+build/bin/%.sh: $(srcdir)/string/test/%.sh
+	cp $< $@
+
+check-string: $(string-tools)
+	$(EMULATOR) build/bin/test/memcpy
+
+.PHONY: all-string check-string
diff --git a/string/asmdefs.h b/string/asmdefs.h
new file mode 100644
index 0000000..7a5bf6b
--- /dev/null
+++ b/string/asmdefs.h
@@ -0,0 +1,17 @@
+/*
+ * Macros for asm code.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define ENTRY(name)	\
+  .global name;		\
+  .type name,%function;	\
+  .align 4;		\
+  name:			\
+  .cfi_startproc;
+
+#define END(name)	\
+  .cfi_endproc;		\
+  .size name, .-name;
diff --git a/string/include/stringlib.h b/string/include/stringlib.h
new file mode 100644
index 0000000..753d06a
--- /dev/null
+++ b/string/include/stringlib.h
@@ -0,0 +1,17 @@
+/*
+ * Public API.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stddef.h>
+
+/* restrict is not needed, but kept for documenting the interface contract.  */
+#ifndef __restrict
+# define __restrict
+#endif
+
+#if __aarch64__
+void *__memcpy_bytewise (void *__restrict, const void *__restrict, size_t);
+#endif
diff --git a/string/memcpy_bytewise.S b/string/memcpy_bytewise.S
new file mode 100644
index 0000000..7ee3474
--- /dev/null
+++ b/string/memcpy_bytewise.S
@@ -0,0 +1,23 @@
+/*
+ * Trivial AArch64 memcpy.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if __aarch64__
+#include "asmdefs.h"
+
+ENTRY (__memcpy_bytewise)
+	cbz	x2, 2f
+	mov	x3, 0
+1:
+	ldrb	w4, [x1, x3]
+	strb	w4, [x0, x3]
+	add	x3, x3, 1
+	cmp	x3, x2
+	bne	1b
+2:
+	ret
+END (__memcpy_bytewise)
+#endif
diff --git a/string/test/memcpy.c b/string/test/memcpy.c
new file mode 100644
index 0000000..1dccac7
--- /dev/null
+++ b/string/test/memcpy.c
@@ -0,0 +1,94 @@
+/*
+ * memcpy test.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "stringlib.h"
+
+static const struct fun
+{
+	const char *name;
+	void *(*fun)(void *, const void *, size_t);
+} funtab[] = {
+#define F(x) {#x, x},
+F(memcpy)
+#if __aarch64__
+F(__memcpy_bytewise)
+#endif
+#undef F
+	{0, 0}
+};
+
+static int test_status;
+#define ERR(...) (test_status=1, printf(__VA_ARGS__))
+
+#define A 32
+#define LEN 250000
+static unsigned char dbuf[LEN+2*A];
+static unsigned char sbuf[LEN+2*A];
+static unsigned char wbuf[LEN+2*A];
+
+static void *alignup(void *p)
+{
+	return (void*)(((uintptr_t)p + A-1) & -A);
+}
+
+static void test(const struct fun *fun, int dalign, int salign, int len)
+{
+	unsigned char *src = alignup(sbuf);
+	unsigned char *dst = alignup(dbuf);
+	unsigned char *want = wbuf;
+	unsigned char *s = src + salign;
+	unsigned char *d = dst + dalign;
+	unsigned char *w = want + dalign;
+	void *p;
+	int i;
+
+	if (len > LEN || dalign >= A || salign >= A)
+		abort();
+	for (i = 0; i < len+A; i++) {
+		src[i] = '?';
+		want[i] = dst[i] = '*';
+	}
+	for (i = 0; i < len; i++)
+		s[i] = w[i] = 'a' + i%23;
+
+	p = fun->fun(d, s, len);
+	if (p != d)
+		ERR("%s(%p,..) returned %p\n", fun->name, d, p);
+	for (i = 0; i < len+A; i++) {
+		if (dst[i] != want[i]) {
+			ERR("%s(align %d, align %d, %d) failed\n", fun->name, dalign, salign, len);
+			ERR("got : %.*s\n", dalign+len+1, dst);
+			ERR("want: %.*s\n", dalign+len+1, want);
+			break;
+		}
+	}
+}
+
+int main()
+{
+	int r = 0;
+	for (int i=0; funtab[i].name; i++) {
+		test_status = 0;
+		for (int d = 0; d < A; d++)
+			for (int s = 0; s < A; s++) {
+				int n;
+				for (n = 0; n < 100; n++)
+					test(funtab+i, d, s, n);
+				for (; n < LEN; n *= 2)
+					test(funtab+i, d, s, n);
+			}
+		if (test_status) {
+			r = -1;
+			ERR("FAIL %s\n", funtab[i].name);
+		}
+	}
+	return r;
+}
diff --git a/test/testcases/directed/rred.tst b/test/testcases/directed/rred.tst
deleted file mode 100644
index 41e4e70..0000000
--- a/test/testcases/directed/rred.tst
+++ /dev/null
@@ -1,96 +0,0 @@
-; rred.tst
-;
-; Copyright (c) 1999-2018, Arm Limited.
-; SPDX-License-Identifier: MIT
-
-func=rred op1=40000000.00000000 result=3fdb7812.aeef4b9e.e59 res2=00000001 errno=0
-func=rred op1=400fffff.ffffffff result=bfe6cbe3.f9990e95.a79 res2=00000003 errno=0
-func=rred op1=40100000.00000000 result=bfe6cbe3.f9990e91.a79 res2=00000003 errno=0
-func=rred op1=4012d97c.7f3321d2 result=bcaa7939.4c9e8a0a.515 res2=00000003 errno=0
-func=rred op1=401c90fd.aa22168c result=bfe6cbe3.f9990e92.c1f res2=00000001 errno=0
-func=rred op1=401f6a7a.2955385f result=3cc4f828.2013467b.b36 res2=00000001 errno=0
-func=rred op1=40200000.00000000 result=3fc2b0ba.d558f434.f82 res2=00000001 errno=0
-func=rred op1=4025fdbb.e9bba775 result=bcbee2c2.d963a10c.099 res2=00000003 errno=0
-func=rred op1=402c463a.beccb2bc result=3cd6128a.83448c3c.217 res2=00000001 errno=0
-func=rred op1=402c90fd.aa22168c result=3fc2b0ba.d558f42c.251 res2=00000001 errno=0
-func=rred op1=40300000.00000000 result=3fd2b0ba.d558f434.f82 res2=00000002 errno=0
-func=rred op1=4031475c.c9eedf00 result=bce6111d.218effa2.5d5 res2=00000003 errno=0
-func=rred op1=403dd85a.7410f58d result=3cc61565.46afa56f.a9d res2=00000003 errno=0
-func=rred op1=403fb53d.14aa9c2f result=3fd2b0ba.d558f429.f05 res2=00000000 errno=0
-func=rred op1=4046c6cb.c45dc8de result=3c26d61b.58c99c42.f13 res2=00000001 errno=0
-func=rred op1=4049eb0b.2ee64e81 result=bcb19abb.2567f738.bf7 res2=00000001 errno=0
-func=rred op1=404fb53d.14aa9c2a result=3fe2b0ba.d558f2e9.f05 res2=00000000 errno=0
-func=rred op1=404fb53d.14aa9c34 result=3fe2b0ba.d558f569.f05 res2=00000000 errno=0
-func=rred op1=4051abe4.b73fefb5 result=bcd1a34b.6fa942d3.588 res2=00000001 errno=0
-func=rred op1=405f05f2.3c0427aa result=3cc1b746.c796f33c.131 res2=00000003 errno=0
-func=rred op1=405fb53d.14aa9c20 result=bfd9c501.fbacf2b9.592 res2=00000001 errno=0
-func=rred op1=405fb53d.14aa9c34 result=bfd9c501.fbacdeb9.592 res2=00000001 errno=0
-func=rred op1=406ae65f.0030f844 result=3cc1c2b1.d543580a.349 res2=00000001 errno=0
-func=rred op1=406e0a9e.6ab97de7 result=bcc1899a.90e56003.8d3 res2=00000001 errno=0
-func=rred op1=406fb53d.14aa9c20 result=3fe87ef4.acdb6777.340 res2=00000001 errno=0
-func=rred op1=406fb53d.14aa9c34 result=3fe87ef4.acdb7b77.340 res2=00000001 errno=0
-func=rred op1=4078d695.62476091 result=3cc1d987.f09c21a6.778 res2=00000001 errno=0
-func=rred op1=407bfad4.cccfe634 result=bcda5f88.6ddaa73a.860 res2=00000001 errno=0
-func=rred op1=407fb53d.14aa9c30 result=bfa460d4.ed16b422.511 res2=00000003 errno=0
-func=rred op1=407fe781.0b53247a result=bfa460d4.ed18ba33.f74 res2=00000001 errno=0
-func=rred op1=40821cfd.a23b2280 result=3cc1f05e.0bf4eb42.ba7 res2=00000001 errno=0
-func=rred op1=408b7099.e6806f3c result=bcc139ad.312e9e60.a2f res2=00000003 errno=0
-func=rred op1=408fb53d.14aa9c30 result=bfb460d4.ed16b422.511 res2=00000002 errno=0
-func=rred op1=408fe781.0b53247a result=bfb460d4.ed18ba33.f74 res2=00000002 errno=0
-func=rred op1=409471e4.b34c75af result=3cc24bb6.795811b3.c63 res2=00000001 errno=0
-func=rred op1=40991bb2.d56f1c0d result=bcc0de54.c3cb77ef.972 res2=00000003 errno=0
-func=rred op1=409ff412.08fd45ee result=bfc460d4.ed2d0bb8.60c res2=00000002 errno=0
-func=rred op1=409ff412.08fd4733 result=bfc460d4.ed046bb8.60c res2=00000002 errno=0
-func=rred op1=40ab4e0b.2cec917e result=3cc35dbf.c1818506.e98 res2=00000001 errno=0
-func=rred op1=40ada2f2.3dfde4ad result=bcbf9896.f7440938.e7b res2=00000003 errno=0
-func=rred op1=40affa5a.87d256f9 result=bfd460d4.ed2d147a.959 res2=00000002 errno=0
-func=rred op1=40affa5a.87d257d2 result=bfd460d4.ed11f47a.959 res2=00000002 errno=0
-func=rred op1=40b90a6b.78a52d2e result=3cc4cb21.770e1ecb.189 res2=00000001 errno=0
-func=rred op1=40bfe691.f24548fd result=bcbb5071.d69e3bec.5a7 res2=00000003 errno=0
-func=rred op1=40bffd7e.c73cdcf3 result=bfe460d4.ed7e88db.aff res2=00000002 errno=0
-func=rred op1=40bffd7e.c73ce20a result=bfe460d4.ecdba8db.aff res2=00000002 errno=0
-func=rred op1=40c5a4fb.ea3a16b6 result=bcb875ae.6b850863.fc5 res2=00000003 errno=0
-func=rred op1=40c7e89b.9e817b06 result=3cc7a5e4.e2275253.76c res2=00000001 errno=0
-func=rred op1=40cfff10.e6f21c1e result=3fd30499.988aa830.25d res2=00000001 errno=0
-func=rred op1=40cfff10.e6f2264d result=3fd30499.9da22830.25d res2=00000001 errno=0
-func=rred op1=40d635e3.d74befca result=bcaa1541.7e407485.076 res2=00000003 errno=0
-func=rred op1=40d757b3.b16fa1f2 result=3ccd5b6b.b859b964.331 res2=00000001 errno=0
-func=rred op1=40dfff10.e6f2264d result=3fe30499.9da22830.25d res2=00000002 errno=0
-func=rred op1=40dfffd9.f6ccbe3f result=3fe30499.988a73cf.0b7 res2=00000000 errno=0
-func=rred op1=40e5ed6f.e0c30340 result=bccefafe.cb152585.3e2 res2=00000001 errno=0
-func=rred op1=40e67e57.cdd4dc54 result=3ca396f5.3352c400.db0 res2=00000003 errno=0
-func=rred op1=40efffd9.f6cca9e0 result=bfd87587.17a4e524.ec7 res2=00000001 errno=0
-func=rred op1=40efffd9.f6ccd29e result=bfd87586.c628e524.ec7 res2=00000001 errno=0
-func=rred op1=40f65a1d.d290660f result=bcb049c6.e4971284.99e res2=00000001 errno=0
-func=rred op1=40f6a291.c9195299 result=3ccbbbd8.a59e4d43.27f res2=00000003 errno=0
-func=rred op1=40ffffd9.f6cca9e0 result=bfe87587.17a4e524.ec7 res2=00000002 errno=0
-func=rred op1=40ffffd9.f6ccd29e result=bfe87586.c628e524.ec7 res2=00000002 errno=0
-func=rred op1=4100dec1.da5fa53f result=3cbd626f.ccfc2601.489 res2=00000001 errno=0
-func=rred op1=410bf9b3.c6059d24 result=bcb6c813.2f84c308.c64 res2=00000001 errno=0
-func=rred op1=410fffd9.f6ccca78 result=3fa58e8f.b9e8fe6b.441 res2=00000003 errno=0
-func=rred op1=410ffff3.18c7fe24 result=3fa58e87.93ddb859.9df res2=00000001 errno=0
-func=rred op1=41139c6f.d67805a7 result=bc8988ef.e18ff83f.598 res2=00000003 errno=0
-func=rred op1=41193c05.c9ed3cbc result=3cb065d7.3720c4f8.efd res2=00000001 errno=0
-func=rred op1=411fff9b.21d874d7 result=3fb58e8e.fc452d97.637 res2=00000000 errno=0
-func=rred op1=411fffff.a9c5a846 result=3fb58e87.93d81550.cae res2=00000000 errno=0
-func=rred op1=41223d98.d86bd573 result=3ccbc9e0.cee3267d.52f res2=00000001 errno=0
-func=rred op1=412a9adc.c7f96cf0 result=bcbd2a4f.27e8c118.9ca res2=00000003 errno=0
-func=rred op1=412fff9b.21d874d7 result=3fc58e8e.fc452d97.637 res2=00000000 errno=0
-func=rred op1=412fffff.a9c5a846 result=3fc58e87.93d81550.cae res2=00000000 errno=0
-func=rred op1=41344bdb.557e1dc1 result=bcd2ae9d.61bc91ca.8a4 res2=00000001 errno=0
-func=rred op1=413fffff.a9c31c60 result=3fd58de4.9a581550.cae res2=00000000 errno=0
-func=rred op1=413fffff.a9c8342c result=3fd58f2a.8d581550.cae res2=00000000 errno=0
-func=rred op1=414ffffc.8587170a result=3fe58ebd.e6f97e12.ffa res2=00000000 errno=0
-func=rred op1=414fffff.a9c31c60 result=3fe58de4.9a581550.cae res2=00000000 errno=0
-func=rred op1=415ffffa.f366e59a result=bfcc9ae3.c1cfd521.646 res2=00000001 errno=0
-func=rred op1=415fffff.a9c31c60 result=bfcca0b5.cf60be3b.dda res2=00000001 errno=0
-func=rred op1=416ffffb.57eea140 result=bfdc9b47.17f13de3.992 res2=00000000 errno=0
-func=rred op1=416fffff.a9c31c60 result=bfdca0b5.cf60be3b.dda res2=00000002 errno=0
-func=rred op1=417fffff.dbde54a8 result=3fe551c4.1816e793.952 res2=00000001 errno=0
-func=rred op1=417fffff.dc2fd169 result=3fe5f4bd.9a16e793.952 res2=00000001 errno=0
-func=rred op1=418fffff.c2f2ac7f result=bfcb1c87.2d275aa1.21c res2=00000001 errno=0
-func=rred op1=418fffff.f5004ffc result=bfce81b9.e5acfda9.f4d res2=00000001 errno=0
-func=rred op1=419fffff.c2eae9c2 result=bfdb98b2.fd275aa1.21c res2=00000002 errno=0
-func=rred op1=419fffff.f5004ffc result=bfde81b9.e5acfda9.f4d res2=00000002 errno=0
-func=rred op1=41afffff.c2e7cf10 result=3fe67998.8b60ff8f.6b7 res2=00000003 errno=0
-func=rred op1=41afffff.fb48ced1 result=3fe3c23c.c1caa825.7df res2=00000001 errno=0
diff --git a/test/testcases/directed/rred2.tst b/test/testcases/directed/rred2.tst
deleted file mode 100644
index 558c18e..0000000
--- a/test/testcases/directed/rred2.tst
+++ /dev/null
@@ -1,516 +0,0 @@
-; rred2.tst
-;
-; Copyright (c) 1999-2018, Arm Limited.
-; SPDX-License-Identifier: MIT
-
-func=rred op1=4139eb71.48f354d6 result=3c8d0afa.32c646ca.18a res2=00000001 errno=0
-func=rred op1=414344ba.16f4f99a result=3cc23686.da4d2965.916 res2=00000003 errno=0
-func=rred op1=414a4327.087660e3 result=bccb599f.84bc5cab.fb1 res2=00000003 errno=0
-func=rred op1=41569815.aff42738 result=3cc5d7e6.20a5f23e.d47 res2=00000001 errno=0
-func=rred op1=415d3ecc.e1f28274 result=bcad49a4.1d0b3b67.209 res2=00000003 errno=0
-func=rred op1=416841c3.7c73be07 result=3ccd1aa4.ad5783f1.5aa res2=00000001 errno=0
-func=rred op1=416b951f.1572eba5 result=bc3f54f5.227a4e83.fbf res2=00000003 errno=0
-func=rred op1=4174456b.dcf64b08 result=3caccc50.4881522d.10a res2=00000003 errno=0
-func=rred op1=4175ef19.a975e1d7 result=bcc5f73b.15c86c8d.587 res2=00000001 errno=0
-func=rred op1=41817269.26f7c621 result=bcadc6f7.f19524a1.308 res2=00000001 errno=0
-func=rred op1=418e6821.cb71708c result=3cc5993c.3660fda1.cc8 res2=00000001 errno=0
-func=rred op1=419683c4.1e3558e3 result=bcaec19f.9aa8f715.506 res2=00000001 errno=0
-func=rred op1=419956c6.d433ddca result=3cd1ffb2.2d50d35c.2a6 res2=00000003 errno=0
-func=rred op1=41a90c71.99d42244 result=bcb05b77.76684dfe.c81 res2=00000001 errno=0
-func=rred op1=41ae1dcc.9111b506 result=3ca8e1b1.a432085c.912 res2=00000003 errno=0
-func=rred op1=41b19793.c427a3e4 result=3cc49e94.8d4d2b2d.aca res2=00000001 errno=0
-func=rred op1=41bdd377.56b1f980 result=bcf27d06.01dabc96.3a5 res2=00000000 errno=0
-func=rred op1=41bdf8a1.f3e1d743 result=bce0eeea.e7979c10.714 res2=00000001 errno=0
-func=rred op1=41be1dcc.9111b506 result=3cb8e1b1.a432085c.912 res2=00000002 errno=0
-func=rred op1=41c2c955.335f19b3 result=bcc88933.319c74fe.2c2 res2=00000003 errno=0
-func=rred op1=41c55202.aefde314 result=3ca10c74.5b9374bb.922 res2=00000003 errno=0
-func=rred op1=41cb951f.1572eba5 result=bc9f54f5.227a4e83.fbf res2=00000000 errno=0
-func=rred op1=41ce1dcc.9111b506 result=3cc8e1b1.a432085c.912 res2=00000000 errno=0
-func=rred op1=41d0ec1d.bdf3fa1b result=bcb830b4.bf06e19f.c71 res2=00000001 errno=0
-func=rred op1=41d55202.aefde314 result=3cb10c74.5b9374bb.922 res2=00000002 errno=0
-func=rred op1=41db951f.1572eba5 result=bcaf54f5.227a4e83.fbf res2=00000000 errno=0
-func=rred op1=41dffb04.067cd49e result=3cb992ae.895d2f19.5b4 res2=00000001 errno=0
-func=rred op1=41e55202.aefde314 result=3cc10c74.5b9374bb.922 res2=00000000 errno=0
-func=rred op1=41e6409e.69b372e0 result=bcc3ed97.a8220470.e28 res2=00000001 errno=0
-func=rred op1=41eaa683.5abd5bd9 result=3cc54f91.727851ea.76b res2=00000003 errno=0
-func=rred op1=41eb951f.1572eba5 result=bcbf54f5.227a4e83.fbf res2=00000000 errno=0
-func=rred op1=41f55202.aefde314 result=3cd10c74.5b9374bb.922 res2=00000000 errno=0
-func=rred op1=41f5c950.8c58aafa result=bc97091a.64747daa.82d res2=00000001 errno=0
-func=rred op1=41fb1dd1.381823bf result=3ca6945b.84ecaaa1.e2f res2=00000003 errno=0
-func=rred op1=41fb951f.1572eba5 result=bccf54f5.227a4e83.fbf res2=00000000 errno=0
-func=rred op1=42003928.f1ebce42 result=3cbc56a2.1e09ca0c.83a res2=00000001 errno=0
-func=rred op1=4205c950.8c58aafa result=bca7091a.64747daa.82d res2=00000002 errno=0
-func=rred op1=420b1dd1.381823bf result=3cb6945b.84ecaaa1.e2f res2=00000002 errno=0
-func=rred op1=420b5978.26c587b2 result=bcc9afde.413f23db.833 res2=00000003 errno=0
-func=rred op1=4215c950.8c58aafa result=bcb7091a.64747daa.82d res2=00000000 errno=0
-func=rred op1=42189164.598f1956 result=bccf7224.da5c4346.23f res2=00000001 errno=0
-func=rred op1=421b1dd1.381823bf result=3cc6945b.84ecaaa1.e2f res2=00000000 errno=0
-func=rred op1=421de5e5.054e921b result=3c95361e.e6553188.036 res2=00000001 errno=0
-func=rred op1=42246546.a5bd73cc result=bc98dc15.e293c9cd.023 res2=00000003 errno=0
-func=rred op1=4225c950.8c58aafa result=bcc7091a.64747daa.82d res2=00000000 errno=0
-func=rred op1=422c81db.1eb35aed result=3cc93b1f.61b750d2.e36 res2=00000001 errno=0
-func=rred op1=422de5e5.054e921b result=3ca5361e.e6553188.036 res2=00000002 errno=0
-func=rred op1=4233b341.b26fd835 result=3cbb6d24.5efa23fb.43f res2=00000001 errno=0
-func=rred op1=42346546.a5bd73cc result=bca8dc15.e293c9cd.023 res2=00000002 errno=0
-func=rred op1=423de5e5.054e921b result=3cb5361e.e6553188.036 res2=00000000 errno=0
-func=rred op1=423e97e9.f89c2db2 result=bcb2a510.69eed759.c1a res2=00000001 errno=0
-func=rred op1=42446546.a5bd73cc result=bcb8dc15.e293c9cd.023 res2=00000000 errno=0
-func=rred op1=4248cc93.5bdf3528 result=3cc851a1.a2a7aac1.a3b res2=00000001 errno=0
-func=rred op1=42497e98.4f2cd0bf result=bcbf131b.5b38bc40.42b res2=00000003 errno=0
-func=rred op1=424de5e5.054e921b result=3cc5361e.e6553188.036 res2=00000000 errno=0
-func=rred op1=425231a0.4aac931e result=bcdecde1.3b42acba.937 res2=00000003 errno=0
-func=rred op1=42546546.a5bd73cc result=bcc8dc15.e293c9cd.023 res2=00000000 errno=0
-func=rred op1=425bb23e.aa3db16d result=3ca6b244.e2e34d9f.884 res2=00000003 errno=0
-func=rred op1=425de5e5.054e921b result=3cd5361e.e6553188.036 res2=00000000 errno=0
-func=rred op1=426065c8.29d68730 result=bc714e87.fd83e16b.cf2 res2=00000001 errno=0
-func=rred op1=42646546.a5bd73cc result=bcd8dc15.e293c9cd.023 res2=00000000 errno=0
-func=rred op1=426bb23e.aa3db16d result=3cb6b244.e2e34d9f.884 res2=00000002 errno=0
-func=rred op1=426ccc11.d7c621c4 result=3cd80c67.82b19b3b.f47 res2=00000003 errno=0
-func=rred op1=427065c8.29d68730 result=bc814e87.fd83e16b.cf2 res2=00000002 errno=0
-func=rred op1=42737f5a.95526dd5 result=3cc73cb9.22cf6caa.e6c res2=00000003 errno=0
-func=rred op1=427898ac.3ec1cac8 result=bc89f5cb.fc45d221.b6a res2=00000003 errno=0
-func=rred op1=427bb23e.aa3db16d result=3cc6b244.e2e34d9f.884 res2=00000000 errno=0
-func=rred op1=428065c8.29d68730 result=bc914e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42847f3a.344c28fc result=bc95a229.fce4d9c6.c2e res2=00000001 errno=0
-func=rred op1=428bb23e.aa3db16d result=3cd6b244.e2e34d9f.884 res2=00000000 errno=0
-func=rred op1=428fcbb0.b4b35339 result=3cd66d0a.c2ed3e19.d90 res2=00000001 errno=0
-func=rred op1=429065c8.29d68730 result=bca14e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42927281.2f115816 result=bca37858.fd345d99.490 res2=00000001 errno=0
-func=rred op1=429dbef7.af788253 result=3ce68fa7.d2e845dc.b0a res2=00000001 errno=0
-func=rred op1=429fcbb0.b4b35339 result=3ce66d0a.c2ed3e19.d90 res2=00000002 errno=0
-func=rred op1=42a065c8.29d68730 result=bcb14e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42a16c24.ac73efa3 result=bcb26370.7d5c1f82.8c1 res2=00000001 errno=0
-func=rred op1=42aec554.3215eac6 result=3cf67e59.4aeac1fb.44d res2=00000003 errno=0
-func=rred op1=42afcbb0.b4b35339 result=3cf66d0a.c2ed3e19.d90 res2=00000000 errno=0
-func=rred op1=42b06289.b804b08a result=bcfaaf5e.3a50b293.610 res2=00000003 errno=0
-func=rred op1=42b065c8.29d68730 result=bcc14e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42bfc872.42e17c93 result=3cf45488.4b3a45cd.caf res2=00000003 errno=0
-func=rred op1=42bfcbb0.b4b35339 result=3d066d0a.c2ed3e19.d90 res2=00000000 errno=0
-func=rred op1=42c06428.f0ed9bdd result=bcfcd92f.3a012ec0.dae res2=00000003 errno=0
-func=rred op1=42c065c8.29d68730 result=bcd14e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42cfc6d3.09f89140 result=3cf02383.5bd45535.aec res2=00000001 errno=0
-func=rred op1=42cfc872.42e17c93 result=3d045488.4b3a45cd.caf res2=00000002 errno=0
-func=rred op1=42d065c8.29d68730 result=bce14e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42d0e826.ceb0c5c0 result=bd00b905.acac1b50.bef res2=00000003 errno=0
-func=rred op1=42df42d5.2c35675d result=3ce00d67.39fd0716.4b7 res2=00000001 errno=0
-func=rred op1=42dfc6d3.09f89140 result=3d002383.5bd45535.aec res2=00000002 errno=0
-func=rred op1=42e065c8.29d68730 result=bcf14e87.fd83e16b.cf2 res2=00000000 errno=0
-func=rred op1=42e64ac3.e719da9a result=3cafd98b.c01dfeeb.32e res2=00000001 errno=0
-func=rred op1=42e75120.69b7430d result=bc761c21.d74e1f63.5ab res2=00000001 errno=0
-func=rred op1=42ef42d5.2c35675d result=3cf00d67.39fd0716.4b7 res2=00000002 errno=0
-func=rred op1=42f04530.809ff78c result=bce3a491.40e2f9d8.0fb res2=00000001 errno=0
-func=rred op1=42f64ac3.e719da9a result=3cbfd98b.c01dfeeb.32e res2=00000002 errno=0
-func=rred op1=42f75120.69b7430d result=bc861c21.d74e1f63.5ab res2=00000002 errno=0
-func=rred op1=42ff636c.d56bf701 result=3cdd401c.658f2104.023 res2=00000003 errno=0
-func=rred op1=43013b41.2ea2182d result=3caa5283.4a4a7712.5c3 res2=00000003 errno=0
-func=rred op1=43064ac3.e719da9a result=3ccfd98b.c01dfeeb.32e res2=00000000 errno=0
-func=rred op1=43075120.69b7430d result=bc961c21.d74e1f63.5ab res2=00000000 errno=0
-func=rred op1=430d66ff.a4cc6ded result=bcb83752.90cc4b3a.db7 res2=00000001 errno=0
-func=rred op1=43113b41.2ea2182d result=3cba5283.4a4a7712.5c3 res2=00000002 errno=0
-func=rred op1=43144630.cc2cad9d result=3c9e88e4.bd46cec1.5da res2=00000003 errno=0
-func=rred op1=43175120.69b7430d result=bca61c21.d74e1f63.5ab res2=00000000 errno=0
-func=rred op1=431a5c10.0741d87d result=bcbdbe5b.069fd313.b22 res2=00000001 errno=0
-func=rred op1=4322c0b8.fd6762e5 result=3cc0fa5e.3cce1561.59c res2=00000001 errno=0
-func=rred op1=43244630.cc2cad9d result=3cae88e4.bd46cec1.5da res2=00000002 errno=0
-func=rred op1=4325cba8.9af1f855 result=bc8b5ebd.e2aae00a.af8 res2=00000003 errno=0
-func=rred op1=43275120.69b7430d result=bcb61c21.d74e1f63.5ab res2=00000000 errno=0
-func=rred op1=43344630.cc2cad9d result=3cbe88e4.bd46cec1.5da res2=00000000 errno=0
-func=rred op1=433508ec.b38f52f9 result=3ca7b135.449c16be.b1c res2=00000001 errno=0
-func=rred op1=4335cba8.9af1f855 result=bc9b5ebd.e2aae00a.af8 res2=00000002 errno=0
-func=rred op1=43368e64.82549db1 result=bcb987f9.93a37b64.b0a res2=00000003 errno=0
-func=rred op1=43456a4a.a740a5a7 result=3c9403ac.a68d4d72.b40 res2=00000003 errno=0
-func=rred op1=43462d06.8ea34b03 result=bcc02fd4.862719b3.ae4 res2=00000001 errno=0
-func=rred op1=4355399b.ad67fc50 result=3cbcb220.6e3f6a1b.5ec res2=00000001 errno=0
-func=rred op1=43559af9.a1194efe result=bca15ce7.8f643951.558 res2=00000003 errno=0
-func=rred op1=436020a0.243f2d03 result=bd107cfa.a6b87368.66d res2=00000003 errno=0
-func=rred op1=436fd669.841bfa78 result=3cd58598.52af8f94.871 res2=00000003 errno=0
-func=rred op1=43701be3.bbe6a693 result=3ca6aa71.bdb66194.129 res2=00000003 errno=0
-func=rred op1=437ae960.8c734e12 result=bc981eba.c224221d.30f res2=00000001 errno=0
-func=rred op1=4388422d.16c64e88 result=bcc460be.e7a8bd94.fba res2=00000001 errno=0
-func=rred op1=438d9094.02204d9c result=3cb0a2c3.0d2d590c.c65 res2=00000003 errno=0
-func=rred op1=439995c6.d19cce4d result=bcca686d.9831c61c.47e res2=00000003 errno=0
-func=rred op1=439c3cfa.4749cdd7 result=3c924d96.b06d1ff8.b77 res2=00000001 errno=0
-func=rred op1=43a4d8d5.46c1ba70 result=bc9defde.d3db2441.aa6 res2=00000003 errno=0
-func=rred op1=43a62c6f.01983a35 result=3cc8f424.93c40593.298 res2=00000001 errno=0
-func=rred op1=43b1d08f.a3e8f09f result=3cb9c98e.6563e909.221 res2=00000001 errno=0
-func=rred op1=43bf453f.ea2297a8 result=bcb673e7.1ee45b31.3fd res2=00000001 errno=0
-func=rred op1=43c706c4.f5995f3b result=3cc60b92.8ae88480.ecc res2=00000001 errno=0
-func=rred op1=43ca0f0a.9872290c result=bcc2b5eb.4468f6a9.0a8 res2=00000003 errno=0
-func=rred op1=43d23dba.9de98322 result=bcca31e2.f95fbfb9.752 res2=00000001 errno=0
-func=rred op1=43ded814.f0220525 result=3cd06e98.c32f6db4.9cc res2=00000003 errno=0
-func=rred op1=43e0f02d.497d677b result=bcd852e5.0c220d75.5a7 res2=00000003 errno=0
-func=rred op1=43ed8a87.9bb5e97e result=3ce15e17.b9ce46d6.aa2 res2=00000003 errno=0
-func=rred op1=43fa7f3b.c5a7ed9e result=3c90e54c.54604e37.48c res2=00000001 errno=0
-func=rred op1=43fbccc9.1a140945 result=bca57d38.a9aafd26.060 res2=00000003 errno=0
-func=rred op1=44012845.e01849c4 result=bcd56592.599e564d.cb4 res2=00000001 errno=0
-func=rred op1=440fed89.adf33e83 result=3ce80966.46cd6286.6ea res2=00000003 errno=0
-func=rred op1=441338a6.2a07e463 result=3cc54dec.0991af75.908 res2=00000003 errno=0
-func=rred op1=44148633.7e74000a result=bcb143e5.9492e998.33d res2=00000003 errno=0
-func=rred op1=44203c22.066ded99 result=3cc9873f.1ea9c303.62b res2=00000001 errno=0
-func=rred op1=442782b7.a20df6d4 result=bc57a650.0ca6d83a.c16 res2=00000003 errno=0
-func=rred op1=44360475.9040fb6f result=bcc17332.34ac3748.a95 res2=00000001 errno=0
-func=rred op1=443900f9.b3daf239 result=3cc0b5ff.b4470086.d34 res2=00000003 errno=0
-func=rred op1=4441a209.b98a791f result=bc71bcbc.097d222c.111 res2=00000001 errno=0
-func=rred op1=444ee1a7.9c5e6fee result=3cd09e59.643a59ae.988 res2=00000001 errno=0
-func=rred op1=4453d33f.a4e5ba47 result=bcd1ba25.24d22bd1.599 res2=00000003 errno=0
-func=rred op1=445b322f.9f363361 result=3cd03fc0.2407be4d.ad8 res2=00000001 errno=0
-func=rred op1=4462baa4.af3819b3 result=bcd2480b.051e14e2.ba2 res2=00000001 errno=0
-func=rred op1=446c4aca.94e3d3f5 result=3ccea682.071273b6.c3e res2=00000003 errno=0
-func=rred op1=44722e57.34614969 result=bcd363d6.c5b5e705.7b3 res2=00000001 errno=0
-func=rred op1=447cd718.0fbaa43f result=3ccaf485.851861ed.95a res2=00000003 errno=0
-func=rred op1=4481e830.76f5e144 result=bcd59b6e.46e58b4a.fd5 res2=00000001 errno=0
-func=rred op1=448d1d3e.cd260c64 result=3cc3908c.81243e5b.393 res2=00000003 errno=0
-func=rred op1=4494b574.0c81ec0c result=bcdb8502.4a0f4159.adb res2=00000001 errno=0
-func=rred op1=449a4ffb.379a019c result=3caef591.eb4348f7.621 res2=00000003 errno=0
-func=rred op1=44a308ab.84507e83 result=bca0570e.2e0a677e.20b res2=00000003 errno=0
-func=rred op1=44abb69d.02600700 result=3cd76f3e.be8ca77a.258 res2=00000001 errno=0
-func=rred op1=44b3bbfc.69b38135 result=3cc7382d.707276b9.899 res2=00000001 errno=0
-func=rred op1=44b99caa.5236feea result=bc6b88a7.0d18604d.f4e res2=00000001 errno=0
-func=rred op1=44c36253.f701ffdc result=3cbe194c.b2da85f4.f27 res2=00000003 errno=0
-func=rred op1=44cfd700.ad6bfdf8 result=bcc0c530.ca3ec8ff.588 res2=00000001 errno=0
-func=rred op1=44d67f7f.249c7f63 result=3cbc60c2.4208fff0.132 res2=00000001 errno=0
-func=rred op1=44dcb9d5.7fd17e71 result=bcc1a176.02a78c01.c83 res2=00000003 errno=0
-func=rred op1=44e4c415.54767ef3 result=bcc27dbb.3b104f04.37d res2=00000001 errno=0
-func=rred op1=44ee753f.4ff77ee1 result=3cb73722.ef946de1.754 res2=00000003 errno=0
-func=rred op1=44f0c935.3ec8ff34 result=bcc43645.abe1d509.172 res2=00000001 errno=0
-func=rred op1=44f5a1ca.3c897f2b result=3cb3c60e.0df161d7.b6a res2=00000003 errno=0
-func=rred op1=4501380f.b2d27f50 result=3ca9c7c8.95569388.72d res2=00000003 errno=0
-func=rred op1=450e0664.dbedfec5 result=bc6c0de7.7c1ccc58.206 res2=00000003 errno=0
-func=rred op1=45156a5d.0284bf1d result=bcad4985.84da2d13.76e res2=00000003 errno=0
-func=rred op1=4519d417.8c3bbef8 result=3cc355d6.7000eea6.562 res2=00000001 errno=0
-func=rred op1=45258613.9f871f24 result=3cd01cdd.5d561c35.47c res2=00000003 errno=0
-func=rred op1=4529b860.ef395ef1 result=bcb065a1.3a2ee34f.3d7 res2=00000001 errno=0
-func=rred op1=45335f11.a92ccf3a result=3cdd00c1.a80165f9.813 res2=00000003 errno=0
-func=rred op1=453bdf62.e593aedb result=bcb3e75e.29b27cda.418 res2=00000001 errno=0
-func=rred op1=4540248e.b7a5575b result=3ce82b4c.0c012a4f.eba res2=00000001 errno=0
-func=rred op1=454f19e5.d71b26ba result=bc7230f7.3631c67d.6c6 res2=00000003 errno=0
-func=rred op1=4550a073.e6babb52 result=3cb8a4b9.21f37720.9c1 res2=00000001 errno=0
-func=rred op1=455f95cb.06308ab1 result=bcf6c562.684e566a.dcc res2=00000001 errno=0
-func=rred op1=4566c9ab.e3bdc911 result=bcbd30f6.ef7fe8bf.f72 res2=00000003 errno=0
-func=rred op1=4567dd2c.deeaf106 result=3cb65e9a.3b2d3e50.ee8 res2=00000003 errno=0
-func=rred op1=45732b4f.67a5ae37 result=bcbf7715.d646218f.a4b res2=00000001 errno=0
-func=rred op1=457b7b89.5b030be0 result=3cb1d25c.6da0ccb1.936 res2=00000003 errno=0
-func=rred op1=45815c21.2999a0ca result=bcc201a9.d1e94997.7fe res2=00000001 errno=0
-func=rred op1=458d4ab7.990f194d result=3ca173c1.a50fd2e5.ba7 res2=00000003 errno=0
-func=rred op1=45949ca7.044248e8 result=3ccabb8a.a471330a.5d2 res2=00000001 errno=0
-func=rred op1=45966bd5.424e5655 result=bc57a6b2.243e72f6.3c8 res2=00000003 errno=0
-func=rred op1=45a2fc64.16edf4d9 result=bcb28f91.fec2c049.455 res2=00000003 errno=0
-func=rred op1=45a9db46.6daeb7d1 result=3cb11526.dc7ed919.e18 res2=00000001 errno=0
-func=rred op1=45b4b41c.ac9e2597 result=bcb34cc7.8fe4b3e0.f73 res2=00000001 errno=0
-func=rred op1=45b8238d.d7fe8713 result=3cb057f1.4b5ce582.2fa res2=00000003 errno=0
-func=rred op1=45c58ff8.f7763df6 result=bcb4c732.b2289b10.5b0 res2=00000001 errno=0
-func=rred op1=45c747b1.8d266eb4 result=3cadbb0c.5231fca5.97b res2=00000003 errno=0
-func=rred op1=45d0cb02.87a3c994 result=3cec973b.699452d4.b6a res2=00000003 errno=0
-func=rred op1=45df7c19.28594492 result=bcd87e94.3c6edaa5.0df res2=00000001 errno=0
-func=rred op1=45e099e8.df04baa8 result=bcbab0df.3b3837cd.ea2 res2=00000001 errno=0
-func=rred op1=45ec3dc1.a597f202 result=3c885168.b7ce26bd.6cd res2=00000003 errno=0
-func=rred op1=45f3f0cd.361594ae result=3cc0629c.b495e0be.a2a res2=00000001 errno=0
-func=rred op1=45feb8c9.b1d0b3a9 result=bcc92bc8.afbb5562.135 res2=00000001 errno=0
-func=rred op1=4602455b.0a8d27ab result=bcb49c85.0d44ae1e.8ef res2=00000003 errno=0
-func=rred op1=46081747.6dd6c358 result=3cc36cc9.cb8fa596.504 res2=00000003 errno=0
-func=rred op1=461a2a84.89b75aad result=3cc98123.f9832f45.ab7 res2=00000003 errno=0
-func=rred op1=461e50fe.c1788957 result=bc82fbb4.1b508883.ea8 res2=00000001 errno=0
-func=rred op1=462637ef.ca22412c result=3ca3927b.b0fa049c.723 res2=00000001 errno=0
-func=rred op1=46284b2c.e602d881 result=bcc5cc40.4ef9b6a6.cd9 res2=00000003 errno=0
-func=rred op1=46333506.dc6768c1 result=bcb34717.e6254690.2e5 res2=00000003 errno=0
-func=rred op1=46393ad8.b7dd1997 result=3ccd3607.a40ca7e4.895 res2=00000001 errno=0
-func=rred op1=4640a9f3.d799b0e1 result=3cbd5bb9.897706ea.ab4 res2=00000003 errno=0
-func=rred op1=4648c302.ceeff90c result=bcbcc4f1.f3cd8ad2.239 res2=00000003 errno=0
-func=rred op1=4651ef7d.5a008cd1 result=bca264ec.85a70c6b.62d res2=00000001 errno=0
-func=rred op1=46577d79.4c891d1c result=3ca4c00a.dc4cfccd.819 res2=00000003 errno=0
-func=rred op1=46614cb8.98cd1ed9 result=3cc8c27e.680d43cf.d29 res2=00000003 errno=0
-func=rred op1=466dae3a.00451b5f result=bca009ce.2f011c09.440 res2=00000001 errno=0
-func=rred op1=46719e1a.f966d5d5 result=3cbf2010.4a737b34.426 res2=00000001 errno=0
-func=rred op1=4677cedb.ad22d418 result=bcba69d3.9d279a70.04d res2=00000003 errno=0
-func=rred op1=4681c6cc.29b3b153 result=bc96a723.036a768a.0cd res2=00000001 errno=0
-func=rred op1=4687a62a.7cd5f89a result=3cae2c84.36e4be55.fcc res2=00000003 errno=0
-func=rred op1=4697ba83.14fc6659 result=bcc2deb2.8f6e6ada.859 res2=00000001 errno=0
-func=rred op1=469d99e1.681eada0 result=3c8e1584.cde91f2f.bfd res2=00000001 errno=0
-func=rred op1=46a4c0a7.9f580bd6 result=bcc8887b.5049087d.08d res2=00000003 errno=0
-func=rred op1=46aaa005.f27a531d result=3cc0f79a.6850f11d.fa6 res2=00000003 errno=0
-func=rred op1=46b63369.0e170238 result=3ca69023.9a6ed763.cfd res2=00000003 errno=0
-func=rred op1=46b92d44.83bb5cbb result=bcc4c5ca.b68be497.10d res2=00000001 errno=0
-func=rred op1=46c2802c.e1132c84 result=3cb2cd73.00b1b37d.d7e res2=00000001 errno=0
-func=rred op1=46cce080.b0bf326f result=bcd3d51e.901c9b9d.92d res2=00000003 errno=0
-func=rred op1=46d0a68e.ca9141aa result=3cc0ec1a.b3d3218a.dbe res2=00000001 errno=0
-func=rred op1=46deba1e.c7411d49 result=bce35cc8.7ce4f720.d3d res2=00000003 errno=0
-func=rred op1=46e1935d.d5d23717 result=3cd1dcc6.da426a84.59e res2=00000003 errno=0
-func=rred op1=46efa6ed.d28212b6 result=bcf3209d.734924e2.745 res2=00000003 errno=0
-func=rred op1=46f08cd7.a0a0848c result=3d01ca31.09f250f8.489 res2=00000003 errno=0
-func=rred op1=46ff8d36.a8915598 result=bce645cc.592e7133.8ac res2=00000001 errno=0
-func=rred op1=4709f380.d013367b result=bca97010.b9e2bc2b.6e6 res2=00000001 errno=0
-func=rred op1=470ae04f.db542be8 result=3c8295d0.50198c11.45b res2=00000001 errno=0
-func=rred op1=47103695.0f6cf63b result=3cd724d2.1cefa3c4.5a0 res2=00000001 errno=0
-func=rred op1=471ffd30.63b5a107 result=bcf07c97.d1f28842.744 res2=00000003 errno=0
-func=rred op1=47233b6c.d93e2b81 result=bcca996d.bee454ec.82c res2=00000003 errno=0
-func=rred op1=4724283b.e47f20ee result=3c9be0b8.78265219.e89 res2=00000003 errno=0
-func=rred op1=4730cc31.e9149b71 result=3ca73b44.641fef15.972 res2=00000001 errno=0
-func=rred op1=473d4f8a.cb7dbbf8 result=bcd8db62.3761efca.e43 res2=00000001 errno=0
-func=rred op1=4742f09e.6c6a58e6 result=3ce23c82.34b8f3aa.d7e res2=00000003 errno=0
-func=rred op1=474f73f7.4ed3796d result=bcd30c91.1e59f405.7e6 res2=00000003 errno=0
-func=rred op1=47503063.2d0a376d result=3ce48f3c.3ebc252d.009 res2=00000003 errno=0
-func=rred op1=475ed828.92c91569 result=bcc13097.e2972a77.8e6 res2=00000001 errno=0
-func=rred op1=47647623.428452f0 result=bc9a01dd.34200b54.d0a res2=00000001 errno=0
-func=rred op1=4767d22d.3deed86d result=3ca82ab2.06231278.232 res2=00000001 errno=0
-func=rred op1=4770f325.98173472 result=3cd0f5b2.7cd78b5b.f8b res2=00000001 errno=0
-func=rred op1=477eb134.e3c67c68 result=bcb38165.e718087f.9c7 res2=00000003 errno=0
-func=rred op1=478993ac.132567ac result=bcc0412a.40940715.026 res2=00000001 errno=0
-func=rred op1=478cefb6.0e8fed29 result=3cc4ea76.5f9f110d.891 res2=00000001 errno=0
-func=rred op1=4791e75e.da33c892 result=bcc6c1a1.8d9c09ea.369 res2=00000003 errno=0
-func=rred op1=479f7e7a.76e07787 result=3cd34a58.8c5d1058.3c0 res2=00000003 errno=0
-func=rred op1=47a09ffc.a60b8363 result=bcd52183.ba5a0934.e98 res2=00000001 errno=0
-func=rred op1=47ae3718.42b83258 result=3ce41a67.75fe10b2.e28 res2=00000001 errno=0
-func=rred op1=47be7426.933f5760 result=3c932031.dcc10668.c29 res2=00000001 errno=0
-func=rred op1=47bfbb88.c7679c8f result=bca071c4.45bf8820.6f5 res2=00000003 errno=0
-func=rred op1=47c08175.7dc7f0df result=bcb539d0.bcefc9ba.a00 res2=00000001 errno=0
-func=rred op1=47cf9d01.9f240a0b result=3cf2c6ca.6a2f1417.388 res2=00000003 errno=0
-func=rred op1=47d6d71c.ee6f8188 result=3cacb04a.cb21899d.23d res2=00000003 errno=0
-func=rred op1=47d81e7f.2297c6b7 result=bcc2d5ca.8157a8ed.87a res2=00000003 errno=0
-func=rred op1=47e30898.1c07969c result=3cb7e83e.53f14802.f33 res2=00000001 errno=0
-func=rred op1=47ebed03.f4ffb1a3 result=bcd1a3c7.638b9886.fb8 res2=00000003 errno=0
-func=rred op1=47f12155.b2d3a126 result=3cc58438.18592735.dae res2=00000001 errno=0
-func=rred op1=47fdd446.5e33a719 result=bce10ac5.d4a59053.b57 res2=00000003 errno=0
-func=rred op1=48002db4.7e39a66b result=3cd45234.fa8d16cf.4eb res2=00000001 errno=0
-func=rred op1=480ec7e7.92cda1d4 result=bcf0be45.0d328c3a.126 res2=00000003 errno=0
-func=rred op1=481003d3.fe728131 result=3d023bbc.3c6ccd6b.0d8 res2=00000003 errno=0
-func=rred op1=481f91a8.47a07755 result=bcda54aa.3fb00349.ac1 res2=00000001 errno=0
-func=rred op1=482504ca.c51f1eaf result=bc40cb60.4d34f341.25c res2=00000003 errno=0
-func=rred op1=4825f86b.f9b9196a result=3cb2fe9b.1c269c82.404 res2=00000003 errno=0
-func=rred op1=4830b1fd.38786d17 result=3cef101e.2ea65d2d.6be res2=00000003 errno=0
-func=rred op1=483f0d5f.8d61b0a9 result=bcb384f6.1e90441c.497 res2=00000001 errno=0
-func=rred op1=48400080.60fdd5b2 result=3cb2bb6d.9af1c8b5.3ba res2=00000001 errno=0
-func=rred op1=484a0915.294067ac result=bcb3c823.9fc517e9.4e0 res2=00000003 errno=0
-func=rred op1=485208d4.f8c17cd3 result=bccd25da.6d3dfc43.ebe res2=00000001 errno=0
-func=rred op1=485d050a.f59e0988 result=3cb1aeb7.961e7981.295 res2=00000001 errno=0
-func=rred op1=486682c5.ab4def9d result=3ccb92c9.66010575.d05 res2=00000003 errno=0
-func=rred op1=486b8710.0f6f389a result=bcb5e18f.a96bb651.72c res2=00000003 errno=0
-func=rred op1=487445cd.5207b638 result=bcceb8eb.747af312.077 res2=00000001 errno=0
-func=rred op1=487c460d.8286a111 result=3caaf7bf.05a27961.bfb res2=00000001 errno=0
-func=rred op1=48816429.666b5d7e result=bcba1467.bcb8f321.bc3 res2=00000003 errno=0
-func=rred op1=4888a56c.23d2dfe0 result=3ca2920e.df07ffc1.2cd res2=00000001 errno=0
-func=rred op1=489393f8.cf50f252 result=3cd400f9.71ff7979.4ee res2=00000001 errno=0
-func=rred op1=489db6df.7854cd6e result=bcc56fe4.04f6f331.710 res2=00000003 errno=0
-func=rred op1=48a27c11.1ade27e8 result=3cbbdb16.4e8bffa1.c34 res2=00000003 errno=0
-func=rred op1=48ab2e25.ce13d6a7 result=bcb84db9.2ae5e6a1.b52 res2=00000001 errno=0
-func=rred op1=48b590be.9f5883e4 result=3cd03fcd.0326ffc9.073 res2=00000003 errno=0
-func=rred op1=48be42d3.528e32a3 result=bcc3a935.7323e6b1.69f res2=00000003 errno=0
-func=rred op1=48c0f1ba.58a0f9ea result=3cd988d4.72aaffa9.9da res2=00000003 errno=0
-func=rred op1=48cfcd2a.14cb60a1 result=bcd156f3.9742e6b9.445 res2=00000003 errno=0
-func=rred op1=48d02c8e.f78262eb result=3ce85fb3.84ba7fad.8ad res2=00000001 errno=0
-func=rred op1=48df07fe.b3acc9a2 result=bce28014.853366b5.572 res2=00000001 errno=0
-func=rred op1=48e4e82f.01ac85ca result=bcb2023c.10633762.7f2 res2=00000003 errno=0
-func=rred op1=48e5ad5a.62cb1cc9 result=3c61fa59.d4990bd5.b60 res2=00000001 errno=0
-func=rred op1=48f09d72.89cafadd result=3cf171eb.1e01cc4b.04e res2=00000003 errno=0
-func=rred op1=48ff5c46.8282c8af result=bccb035a.1894d313.bec res2=00000001 errno=0
-func=rred op1=490010b8.f1d0afd7 result=bcb0e296.7319a6a5.23c res2=00000001 errno=0
-func=rred op1=490b49fb.d3c589bb result=3cb5612c.e83fe99a.914 res2=00000003 errno=0
-func=rred op1=4912df09.aa4de650 result=bcad4696.710d0a54.da1 res2=00000001 errno=0
-func=rred op1=49187bab.1b485342 result=3cb7a078.22d30b15.480 res2=00000003 errno=0
-func=rred op1=4921da76.fe9e9693 result=3cd909ff.b6618ae5.2c8 res2=00000003 errno=0
-func=rred op1=492f1cdf.37f20ff1 result=bc969879.38e7fcfe.480 res2=00000001 errno=0
-func=rred op1=493796cc.14e15fe4 result=bcd24c1e.06a82675.084 res2=00000001 errno=0
-func=rred op1=493a651c.cd5e965d result=3c8ab874.e094355a.481 res2=00000001 errno=0
-func=rred op1=4948093b.9814d993 result=3cb55168.70ab9280.ff0 res2=00000001 errno=0
-func=rred op1=494cc0fe.02a85327 result=bc9fd4b8.0185df4f.6c0 res2=00000003 errno=0
-func=rred op1=4959372c.32b9b7f8 result=3cbbff85.a8d09fd7.911 res2=00000003 errno=0
-func=rred op1=495b930d.680374c2 result=bc74710c.83c6a7d4.8f7 res2=00000001 errno=0
-func=rred op1=49602567.e94b772b result=bccdea1e.d52b3f93.7e8 res2=00000001 errno=0
-func=rred op1=496fed0f.46de3bfb result=3ceccbf0.25f66265.deb res2=00000003 errno=0
-func=rred op1=49741751.c0b0285f result=3cb97164.1857cadc.ff2 res2=00000001 errno=0
-func=rred op1=49754542.5b5506c4 result=bcc08de4.64e124e6.5a7 res2=00000001 errno=0
-func=rred op1=49886c27.e1ac3dc3 result=bcc31c05.f559f9e0.ec6 res2=00000001 errno=0
-func=rred op1=498eb9f2.ee5aabc1 result=3cb1c6ff.66ed4bed.495 res2=00000003 errno=0
-func=rred op1=49931ad7.4ad6fc12 result=bcc5aa27.85d2cedb.7e5 res2=00000001 errno=0
-func=rred op1=499641bc.d12e3311 result=3ca95578.8bf743f0.4b0 res2=00000003 errno=0
-func=rred op1=49a205a1.c297f6b9 result=3c8391b0.20c2706e.ee3 res2=00000003 errno=0
-func=rred op1=49afcf28.7699b11a result=bcb1fed6.7fae59c6.b1b res2=00000003 errno=0
-func=rred op1=49b423af.49e314e5 result=3cbbc7ae.900f91fe.28c res2=00000001 errno=0
-func=rred op1=49bdb11a.ef4e92ee result=bccd7077.c39dd4b7.e84 res2=00000003 errno=0
-func=rred op1=49c0f69a.fef267a3 result=bcaa34d4.eefb7b55.ec4 res2=00000001 errno=0
-func=rred op1=49c314a8.863d85cf result=3cc0560d.4c20170c.f22 res2=00000003 errno=0
-func=rred op1=49d17e1e.60c52f2e result=bc8a8c93.38e42b9b.f82 res2=00000001 errno=0
-func=rred op1=49d28d25.246abe44 result=3cc53a79.5450b328.adb res2=00000003 errno=0
-func=rred op1=49ea3d2d.9127c6c5 result=bca3e96e.6aab20b4.fa1 res2=00000003 errno=0
-func=rred op1=49eac4b0.f2fa8e50 result=3cc1e8e6.ed342db5.2eb res2=00000001 errno=0
-func=rred op1=49f599e4.480d1734 result=bccf2f30.89a64383.2ac res2=00000003 errno=0
-func=rred op1=49fee076.da427656 result=3cb68b84.3df6459c.615 res2=00000001 errno=0
-func=rred op1=4a038c01.54692331 result=bcd2e92a.abefa735.146 res2=00000003 errno=0
-func=rred op1=4a082f4a.9d83d2c2 result=3ca28a75.43085f9c.ca8 res2=00000001 errno=0
-func=rred op1=4a14d6b4.7f2480f8 result=bcb14758.975ffbcd.92d res2=00000001 errno=0
-func=rred op1=4a1b87e0.bbe3248c result=3ccb2e21.8eb85d83.93f res2=00000003 errno=0
-func=rred op1=4a2682ff.8e5429dd result=3c7431ca.ba863cf3.7b4 res2=00000003 errno=0
-func=rred op1=4a2f420e.beb6c174 result=bcc9eb04.e30ff9b4.5c4 res2=00000003 errno=0
-func=rred op1=4a314d52.6e8b099f result=3cb3cd91.eeb0c36c.024 res2=00000001 errno=0
-func=rred op1=4a3bb8ac.ae1d4a1b result=bcad823e.801e685e.46e res2=00000003 errno=0
-func=rred op1=4a43e828.fe6f99be result=3cb653cb.46018b0a.71a res2=00000003 errno=0
-func=rred op1=4a491dd6.1e38b9fc result=bca875cb.d17cd921.681 res2=00000001 errno=0
-func=rred op1=4a51c498.2ee57d3c result=bcd45612.118f96f1.bfe res2=00000001 errno=0
-func=rred op1=4a5ddc3d.7da7669d result=3cd0bed8.74812847.d53 res2=00000001 errno=0
-func=rred op1=4a62d660.96aa8b7d result=bcc25858.dd1da2d9.0e1 res2=00000003 errno=0
-func=rred op1=4a6cca75.15e2585c result=3c9fdb93.471f418b.1cd res2=00000001 errno=0
-func=rred op1=4a74acb0.127f5aad result=bcb07ee6.ffb508be.a0d res2=00000003 errno=0
-func=rred op1=4a7ea0c4.91b7278c result=3cd23411.861448da.c97 res2=00000003 errno=0
-func=rred op1=4a8597d7.d069c245 result=3cb7e4ae.75577128.55a res2=00000003 errno=0
-func=rred op1=4a8bdf4d.57f7f0c4 result=bcb906e9.2da2411a.7a8 res2=00000003 errno=0
-func=rred op1=4a952243.f1748e79 result=bca2323f.142540a9.d82 res2=00000001 errno=0
-func=rred op1=4a9c54e1.36ed2490 result=3c9b52a8.65f401c2.897 res2=00000003 errno=0
-func=rred op1=4aa55d0d.e0ef285f result=3cc3581e.b04e20fd.df9 res2=00000003 errno=0
-func=rred op1=4aac1a17.47728aaa result=bcc59c94.20e3c0e2.295 res2=00000001 errno=0
-func=rred op1=4ab53fa8.e931db6c result=3cb47dfe.4c770151.e71 res2=00000001 errno=0
-func=rred op1=4abc377c.3f2fd79d result=bcbd8fd4.0ecd80e3.0de res2=00000003 errno=0
-func=rred op1=4ac1b50c.c25436da result=3cc113a9.3fb88119.95e res2=00000003 errno=0
-func=rred op1=4acfc218.660d7c2f result=bcca257f.020f00aa.bcb res2=00000001 errno=0
-func=rred op1=4ad37a5a.d5c30923 result=3cd2c8d3.c617c135.be8 res2=00000001 errno=0
-func=rred op1=4addfcca.529ea9e6 result=bcdbdaa9.886e40c6.e54 res2=00000003 errno=0
-func=rred op1=4aed28d5.c4c5e73b result=bc810024.4f47e08b.78e res2=00000003 errno=0
-func=rred op1=4aeeee23.d834b984 result=3ca7129f.5222099f.ab4 res2=00000001 errno=0
-func=rred op1=4af13c5f.ff892f0b result=3cc36dfc.07828349.2f9 res2=00000001 errno=0
-func=rred op1=4afe7577.1569b1b5 result=bcea697f.934c202c.ea9 res2=00000003 errno=0
-func=rred op1=4b056d4c.ceb8b8da result=bcb40961.d0b4f515.921 res2=00000003 errno=0
-func=rred op1=4b07329a.e2278b23 result=3cc14df7.7d998737.c07 res2=00000003 errno=0
-func=rred op1=4b12722f.5d698ace result=3c8849ec.0b68a450.c98 res2=00000001 errno=0
-func=rred op1=4b18686a.4007e6e6 result=bcd4cbb1.31103a38.186 res2=00000003 errno=0
-func=rred op1=4b23efbe.161121d4 result=bcc284c3.0ffe6ad0.857 res2=00000003 errno=0
-func=rred op1=4b2bab47.0c1e5035 result=3ca23771.088e7b3c.972 res2=00000003 errno=0
-func=rred op1=4b31b368.0115bf4b result=3ccba07b.9445a86e.d11 res2=00000003 errno=0
-func=rred op1=4b3c6a0e.68721bb8 result=bcb8e490.1a488378.a63 res2=00000003 errno=0
-func=rred op1=4b46af57.869a07c0 result=3cd25e1a.0c467306.8e5 res2=00000001 errno=0
-func=rred op1=4b476e1e.e2edd343 result=bca97f34.292862a0.82d res2=00000003 errno=0
-func=rred op1=4b50539b.48d14c55 result=bc635481.dbfbe4fb.940 res2=00000003 errno=0
-func=rred op1=4b598cb2.f78611bc result=3cb7af47.fc88c528.ece res2=00000003 errno=0
-func=rred op1=4b63e0dd.15df8fcc result=bcba19d8.380841c8.5f7 res2=00000001 errno=0
-func=rred op1=4b6d19f4.c4945533 result=3cb679ff.dec906d9.33a res2=00000001 errno=0
-func=rred op1=4b76b6c8.06b2d0c4 result=3cb544b7.c1094889.7a6 res2=00000003 errno=0
-func=rred op1=4b7a4409.d3c1143b result=bcbc8468.7387be67.d1f res2=00000001 errno=0
-func=rred op1=4b854bd2.8e493048 result=bcbeeef8.af073b07.447 res2=00000001 errno=0
-func=rred op1=4b8baeff.4c2ab4b7 result=3cb06f97.4a0a4f4a.956 res2=00000003 errno=0
-func=rred op1=4b96014d.4a7e0086 result=3ca734ed.a616ac17.60d res2=00000003 errno=0
-func=rred op1=4b9af984.8ff5e479 result=bcc44c9c.ce8296c2.873 res2=00000001 errno=0
-func=rred op1=4ba0ae58.a6ebb474 result=3ccb11f3.2a8ef38f.52a res2=00000001 errno=0
-func=rred op1=4bab5441.ee104c98 result=bc9ee82c.23c23bbf.8e6 res2=00000003 errno=0
-func=rred op1=4bb8aac7.9c47268f result=3caef5c5.3a4c3a4e.fa7 res2=00000001 errno=0
-func=rred op1=4bbdfdbc.3fd972a1 result=bcc73187.60742c73.85d res2=00000003 errno=0
-func=rred op1=4bc47f31.728c3972 result=bcb72e21.1ad1accf.aad res2=00000001 errno=0
-func=rred op1=4bcf7fd8.17cb39b5 result=3cb73bba.315bab5f.16e res2=00000001 errno=0
-func=rred op1=4bd114a9.34ca2fdf result=bcc3511b.96596557.b90 res2=00000003 errno=0
-func=rred op1=4bdc154f.da093022 result=3ccb18bf.b5d3f2d7.08a res2=00000003 errno=0
-func=rred op1=4be84a40.a64ab4ca result=3c9f54f4.d812303a.ef0 res2=00000001 errno=0
-func=rred op1=4bebb4c8.e40cbe5d result=bc9e7b63.6f724744.2dc res2=00000003 errno=0
-func=rred op1=4bf2fa30.cea96d8b result=bccafd8d.88bff5b8.308 res2=00000001 errno=0
-func=rred op1=4bfd9a50.7debfc09 result=3cd55403.fa6486ea.d40 res2=00000003 errno=0
-func=rred op1=4c00826c.5dd702ce result=3ccb33f1.e2e7eff5.e0d res2=00000003 errno=0
-func=rred op1=4c03ecf4.9b990c61 result=bc9da1d2.06d25e4d.6c7 res2=00000003 errno=0
-func=rred op1=4c10090a.775f3363 result=3ca0840b.d4a90114.38d res2=00000001 errno=0
-func=rred op1=4c17d0de.bfd2e55f result=bcc2f1eb.f8936f6b.c47 res2=00000003 errno=0
-func=rred op1=4c21faff.897c1fe2 result=bc9a3b8c.6452ba72.673 res2=00000003 errno=0
-func=rred op1=4c2e201f.dca17a47 result=3ccc0d83.4b87d8ec.a22 res2=00000003 errno=0
-func=rred op1=4c39068a.3c1d4354 result=3cba7934.903d538b.d7e res2=00000003 errno=0
-func=rred op1=4c3af87f.4e3a2fd3 result=bcb3aca9.4b3e0bd5.cd6 res2=00000001 errno=0
-func=rred op1=4c4772b9.f4e99e1a result=bcd3bc13.5638b21c.299 res2=00000001 errno=0
-func=rred op1=4c4e7e44.a78ac18c result=3c4ed415.f54c8cb8.572 res2=00000003 errno=0
-func=rred op1=4c583ca2.188370b7 result=bcb9fde4.38682158.f68 res2=00000003 errno=0
-func=rred op1=4c5bc267.71d40270 result=3cca9808.a632a018.903 res2=00000001 errno=0
-func=rred op1=4c66deb3.7da81129 result=3c671f10.77f9698a.416 res2=00000001 errno=0
-func=rred op1=4c6fdc33.4266211a result=bcc9df10.2272d4cc.3e3 res2=00000001 errno=0
-func=rred op1=4c762fbc.303a6162 result=3ccb1358.fe07d24b.719 res2=00000001 errno=0
-func=rred op1=4c7f2d3b.f4f87153 result=bcc963bf.ca9da299.5cd res2=00000001 errno=0
-func=rred op1=4c82b76f.41ffe114 result=3ccb8ea9.55dd047e.52f res2=00000001 errno=0
-func=rred op1=4c8b05f7.b950413e result=bcc8aac7.46ddd74d.0ac res2=00000003 errno=0
-func=rred op1=4c90fb48.cae2a0ed result=3ccc854a.058768e4.15a res2=00000001 errno=0
-func=rred op1=4c9cc21e.306d8165 result=bcc6bd85.e7890e81.855 res2=00000003 errno=0
-func=rred op1=4ca3ecfe.2445590b result=3ccf692c.14869615.5dd res2=00000001 errno=0
-func=rred op1=4ca9d068.d70ac947 result=bcc3d9a3.d889e150.3d2 res2=00000003 errno=0
-func=rred op1=4cb565d8.d0f6b51a result=3cd29878.1942783b.f71 res2=00000001 errno=0
-func=rred op1=4cbff71f.543c1d9b result=bcb46eb9.f7c3eaad.43d res2=00000003 errno=0
-func=rred op1=4cc3cb58.3f0f66ff result=bca97368.f4e18efe.5c0 res2=00000003 errno=0
-func=rred op1=4ccb6ae9.68f21762 result=3c8582b4.01abf6e7.ec9 res2=00000003 errno=0
-func=rred op1=4cd55505.de5bbc14 result=3cc0c236.3ac105ca.aa6 res2=00000003 errno=0
-func=rred op1=4cd9e13b.c9a5c24d result=bccacb94.34fc4e6c.dad res2=00000001 errno=0
-func=rred op1=4ce85ff7.a3a6e9bb result=3cc3728c.baf684a7.a7f res2=00000001 errno=0
-func=rred op1=4cee75db.2e3d4509 result=bcb16265.74411267.634 res2=00000003 errno=0
-func=rred op1=4cf30ab6.2c0ffab6 result=3cc622e3.3b2c0384.a58 res2=00000003 errno=0
-func=rred op1=4cf615a7.f15b285d result=bca80370.e7ac295a.d04 res2=00000001 errno=0
-func=rred op1=4d01e58e.52ea1a07 result=bc7405e7.30019397.1d4 res2=00000001 errno=0
-func=rred op1=4d0f9b03.076325b8 result=3cb44255.8eabddae.7ac res2=00000001 errno=0
-func=rred op1=4d13fd9b.2222a132 result=bcb943cf.5aac4294.421 res2=00000003 errno=0
-func=rred op1=4d1d82f6.382a9e8d result=3ccfa3de.c901e5bf.2a0 res2=00000001 errno=0
-func=rred op1=4d29cc4f.14c2e375 result=3cae81b7.8556f191.66f res2=00000001 errno=0
-func=rred op1=4d2be45b.e3fb6aa0 result=bcbe4549.26aca77a.096 res2=00000003 errno=0
-func=rred op1=4d35d8ee.b3d67ebe result=3ca47ec3.ed5627c5.d85 res2=00000001 errno=0
-func=rred op1=4d3fd7bc.44e7cf57 result=bcc4241e.5f56b8a2.cc0 res2=00000003 errno=0
-func=rred op1=4d42d338.1bc408cd result=3cd6d22e.0c56a2a7.35d res2=00000001 errno=0
-func=rred op1=4d4cd205.acd55966 result=bca38d0a.72acff68.623 res2=00000001 errno=0
-func=rred op1=4d556219.cf69875b result=bcd19445.e1abf3aa.10f res2=00000003 errno=0
-func=rred op1=4d59557a.3055ec12 result=3ca5707d.67ff5023.4e7 res2=00000003 errno=0
-func=rred op1=4d679734.72163568 result=3cc9dae3.4755fbce.abf res2=00000003 errno=0
-func=rred op1=4d6b13bf.ee95a2bc result=bca1a997.7d5aaead.75e res2=00000001 errno=0
-func=rred op1=4d7a349d.0f75c767 result=3ca93763.52a3f199.271 res2=00000003 errno=0
-func=rred op1=4d7bf2e2.cdb57e11 result=bcc7f770.5203ab13.bfa res2=00000001 errno=0
-func=rred op1=4d836fad.13d05eb8 result=3cc10617.88a8a477.f10 res2=00000001 errno=0
-func=rred op1=4d844ecf.f2f03a0d result=bcba7e63.3c080604.30d res2=00000003 errno=0
-func=rred op1=4d907cc6.858d980b result=3cb06297.93f69a42.6c1 res2=00000003 errno=0
-func=rred op1=4d9741b6.813300ba result=bc746ffe.964146b0.9c5 res2=00000001 errno=0
-func=rred op1=4da265cb.3c3ee90c result=bcc24d17.720cb8e2.fac res2=00000001 errno=0
-func=rred op1=4dac1da1.c6271868 result=3cbf7e2f.3e892019.ce7 res2=00000003 errno=0
-func=rred op1=4db4d3c0.deb8f4e3 result=bcc39417.5b70cd4e.048 res2=00000003 errno=0
-func=rred op1=4db9afac.23ad0c91 result=3cbcf02f.6bc0f743.bae res2=00000001 errno=0
-func=rred op1=4dc03a4e.0fa93aa0 result=bcc4db17.44d4e1b9.0e5 res2=00000001 errno=0
-func=rred op1=4dce491e.f2bcc6d4 result=3cb5462f.f3687cc1.804 res2=00000003 errno=0
-func=rred op1=4dd3be02.486e1dad result=bcc9f716.ea653365.356 res2=00000001 errno=0
-func=rred op1=4ddac56a.b9f7e3c7 result=3ca61c61.508fb2d2.644 res2=00000003 errno=0
-func=rred op1=4de33322.fd48b212 result=3c6ac62b.a4e6c21c.7f8 res2=00000003 errno=0
-func=rred op1=4deed3fe.3de2326f result=bcb399cd.391a109f.b85 res2=00000003 errno=0
-func=rred op1=4df53a6c.bf3dd966 result=bcc404e5.e7adaba8.2a5 res2=00000003 errno=0
-func=rred op1=4dfcccb4.7bed0b1b result=3c8414a0.bbad1195.5fa res2=00000001 errno=0
-func=rred op1=4e022f7e.1c4e1e68 result=3cc68779.ff234dda.d64 res2=00000003 errno=0
-func=rred op1=4e0dd059.5ce79ec5 result=bcc25883.2d5f3f86.626 res2=00000003 errno=0
-func=rred op1=4e12b150.8ccb683d result=3cc833dc.b971b9fc.9e4 res2=00000003 errno=0
-func=rred op1=4e1d4e86.ec6a54f0 result=bcbfabde.2bd33aa7.6cd res2=00000001 errno=0
-func=rred op1=4e27bf02.845c39ac result=3ccd3904.e85cfe61.f62 res2=00000003 errno=0
-func=rred op1=4e2840d4.f4d98381 result=bcb8fa53.42998a20.4cf res2=00000001 errno=0
-func=rred op1=4e357912.c0d275df result=3cd1f547.e8cb5774.8b0 res2=00000003 errno=0
-func=rred op1=4e3a86c4.b863474e result=bc9396ca.1bb1e22b.b53 res2=00000001 errno=0
-func=rred op1=4e46dcf3.dad5fcb0 result=3cb5e079.1dfa4991.923 res2=00000001 errno=0
-func=rred op1=4e4e3095.95f091ec result=bcc4bba1.9cd615de.a3b res2=00000003 errno=0
-func=rred op1=4e58b1dc.499ca1ff result=3ca82a28.2042b0f7.6f3 res2=00000003 errno=0
-func=rred op1=4e5c5bad.2729ec9d result=bcc9a154.23c28e69.910 res2=00000001 errno=0
-func=rred op1=4e62fa9f.52e722d3 result=3c824d78.12433b2e.e82 res2=00000001 errno=0
-func=rred op1=4e64cf87.c1adc822 result=bcce8706.aaaf06f4.7e5 res2=00000003 errno=0
-func=rred op1=4e701f00.d78c633d result=bcb14d1b.19697ac5.d83 res2=00000001 errno=0
-func=rred op1=4e75d63d.ce41e269 result=3cba73d7.228b185d.4c3 res2=00000003 errno=0
-func=rred op1=4e818cd0.1539c308 result=bca9737a.29b157f4.3c4 res2=00000003 errno=0
-func=rred op1=4e84686e.9094829e result=3cbf0735.271be729.064 res2=00000001 errno=0
-func=rred op1=4e9a5338.1fd6a48c result=bcc3169b.9f4501f7.2d3 res2=00000001 errno=0
-func=rred op1=4e9bc107.5d840457 result=3c964eeb.f5aa3cd3.27f res2=00000003 errno=0
-func=rred op1=4ea5f004.1a8833ca result=bccfd058.b41dadf1.4b6 res2=00000003 errno=0
-func=rred op1=4ea75dd3.58359395 result=3cb7e133.0fadca63.b21 res2=00000003 errno=0
-func=rred op1=4eb3be6a.17e0fb69 result=bcdca1e9.6ee782f2.c3d res2=00000003 errno=0
-func=rred op1=4ebdf2a1.602b3cb8 result=3ca32a5d.c1a321b2.139 res2=00000003 errno=0
-func=rred op1=4ec12aea.b2bcd6bd result=bcafbc96.91bf8e36.650 res2=00000001 errno=0
-func=rred op1=4ecfc256.005588ce result=3ce6ae8d.33939848.90e res2=00000001 errno=0
-func=rred op1=4ed675f9.08206d8a result=3cbcbf8c.a274b28b.1d6 res2=00000001 errno=0
-func=rred op1=4ed8a793.0ac7a5eb result=bcb62767.b0edfd5d.5b3 res2=00000001 errno=0
-func=rred op1=4ee2b7a4.dc1b05f3 result=3cc7f4f5.320bea1e.987 res2=00000003 errno=0
-func=rred op1=4eec65e7.36cd0d82 result=bcc15cd0.408534f0.d65 res2=00000001 errno=0
-func=rred op1=4ef1f147.c76bee58 result=bcaf1e85.7ece905f.320 res2=00000003 errno=0
-func=rred op1=4ef5af9b.f37155ef result=3c8cd8d8.11decc13.d49 res2=00000001 errno=0
-func=rred op1=4f00754c.3bc0c65a result=3cce8d1a.23929f4c.5aa res2=00000003 errno=0
-func=rred op1=4f0ea83f.d7274d1b result=bca0b219.75df2a55.47b res2=00000001 errno=0
-func=rred op1=4f11334a.01965a59 result=3cbdfbae.c856ae39.835 res2=00000001 errno=0
-func=rred op1=4f1a2bed.e54c5185 result=bc722d6b.677e225a.eb6 res2=00000003 errno=0
-func=rred op1=4f27edc4.ec5ed3ba result=3caa932a.a4ef07c8.772 res2=00000003 errno=0
-func=rred op1=4f2c6a16.de39cf50 result=bcb1d4f0.2c570c7a.f67 res2=00000001 errno=0
-func=rred op1=4f307334.680a6573 result=bcc879ba.d592ce6d.144 res2=00000003 errno=0
-func=rred op1=4f3f6855.70b34201 result=3cd98672.bd40eb1a.c5b res2=00000001 errno=0
-func=rred op1=4f431168.2dbdddb1 result=3ca17c74.f12ff69b.017 res2=00000003 errno=0
-func=rred op1=413d10a4.f0adcc4f result=3fe87fe6.30304a38.943 res2=00000000 error=0
-func=rred op1=413dba61.a2c03b33 result=3fe0b7a6.a6a685cf.8d6 res2=00000003 error=0
-func=rred op1=c13a34ec.768d711d result=3fe5b7b8.a1db2f4c.b12 res2=00000003 error=0
-func=rred op1=c13cb161.35c98a0f result=3fd67e4f.059466c9.c6f res2=00000001 error=0
-func=rred op1=c13c38d1.7027b607 result=bfdd0737.0b906a40.52b res2=00000002 error=0
-func=rred op1=c13ef602.452f3f79 result=3fe36561.56e3f603.3f7 res2=00000001 error=0
-func=rred op1=c13d6289.355ffec1 result=3fd89d90.7d0bce31.6f3 res2=00000001 error=0
-func=rred op1=413a0a72.b8d35b21 result=3fca0190.f80f3eb6.40a res2=00000002 error=0
-func=rred op1=413cb6dc.3281c1d3 result=bfb5dc53.6f66760b.40a res2=00000000 error=0
-func=rred op1=c13b2097.5e434fcb result=bfe4dc84.b351e6a4.9f6 res2=00000000 error=0
-func=rred op1=c139f416.e781b5a7 result=bfd7826d.074f358e.b0d res2=00000002 error=0
diff --git a/test/testcases/directed/rred3.tst b/test/testcases/directed/rred3.tst
deleted file mode 100644
index 8967eb2..0000000
--- a/test/testcases/directed/rred3.tst
+++ /dev/null
@@ -1,505 +0,0 @@
-; rred3.tst
-;
-; Copyright (c) 1999-2018, Arm Limited.
-; SPDX-License-Identifier: MIT
-
-func=rred op1=4f454f91.26ab5b7c result=bccabf68.428292b8.71a res2=00000003 errno=0
-func=rred op1=4f569eab.0985179b result=bc561ece.c9c577fd.3e9 res2=00000003 errno=0
-func=rred op1=4f5b7b07.c8260da4 result=3cd61dee.99d944a9.b99 res2=00000001 errno=0
-func=rred op1=4f64d809.9ba17aa6 result=3cb123f9.b608e0bb.0c7 res2=00000001 errno=0
-func=rred op1=4f68654c.7768b490 result=bcb285e6.a2a5383a.e06 res2=00000003 errno=0
-func=rred op1=4f71868a.855f3127 result=bcdf60e1.eb2be0c7.29c res2=00000001 errno=0
-func=rred op1=4f7f440e.697237f9 result=3cc9b5f6.910d5118.92b res2=00000003 errno=0
-func=rred op1=4f808557.ebaaea77 result=3caf8419.92d91276.712 res2=00000001 errno=0
-func=rred op1=4f8cb7fe.275f44bf result=bcb549c0.7bdde73a.883 res2=00000003 errno=0
-func=rred op1=4f939201.7a980109 result=3ca9fc65.e067b477.218 res2=00000001 errno=0
-func=rred op1=4f99ab54.98722e2d result=bcb80d9a.5516963a.300 res2=00000003 errno=0
-func=rred op1=4fa51856.420e8c52 result=3c9dd9fc.f709f0f1.047 res2=00000001 errno=0
-func=rred op1=4fa824ff.d0fba2e4 result=bcbd954e.0787f439.7fb res2=00000003 errno=0
-func=rred op1=4fb0a57e.3ee1734d result=bce19716.baece8b3.584 res2=00000001 errno=0
-func=rred op1=4fbfa481.6315d27b result=3cb6637d.b94774b4.c35 res2=00000003 errno=0
-func=rred op1=4fc0956b.15462ee2 result=bcad509f.1805f781.fae res2=00000001 errno=0
-func=rred op1=4fcb2196.364d750b result=3c512bbb.e07f2de1.317 res2=00000003 errno=0
-func=rred op1=4fd2d6e0.abaa5d9a result=3cae635a.d60dea60.0e0 res2=00000001 errno=0
-func=rred op1=4fd8e020.9fe94653 result=bcc5fc77.520479a1.7c3 res2=00000003 errno=0
-func=rred op1=4fe1b625.e078463e result=bcac3de3.59fe04a3.e7d res2=00000003 errno=0
-func=rred op1=4fec4251.017f8c67 result=3cc6ca84.208a6fc8.0a8 res2=00000003 errno=0
-func=rred op1=4ff24683.461151ec result=3cb04469.290ee80e.1a1 res2=00000001 errno=0
-func=rred op1=4ffa9138.d0b4695d result=bcc52e6a.837e837a.ede res2=00000001 errno=0
-func=rred op1=5001fe54.9344cc15 result=bca7f2f4.61de392b.9b7 res2=00000003 errno=0
-func=rred op1=500b69c4.e919fae2 result=3cc8669d.bd965c15.272 res2=00000003 errno=0
-func=rred op1=50168ff5.64c92090 result=bc9eba2c.e33d4476.056 res2=00000003 errno=0
-func=rred op1=501fb337.07d1c986 result=3cb8da47.194e7efe.b2d res2=00000001 errno=0
-func=rred op1=50246b3c.556d393e result=3cccb18c.b5b6278d.738 res2=00000003 errno=0
-func=rred op1=502d464f.45a95c5d result=bccbca39.fe45e1ba.5c2 res2=00000003 errno=0
-func=rred op1=5030ebf8.0b96d86c result=bcb70ba1.aa6df358.841 res2=00000001 errno=0
-func=rred op1=50357d98.dd1b2ce7 result=3cc50301.7ce6d66f.f22 res2=00000001 errno=0
-func=rred op1=5043bdf6.b82ffc7e result=bccae2e7.46d59be7.44b res2=00000001 errno=0
-func=rred op1=504df394.e2e6991d result=3cce8032.2496b333.a24 res2=00000003 errno=0
-func=rred op1=505254f7.61e36a75 result=bcd8f744.78a1c79f.e46 res2=00000003 errno=0
-func=rred op1=505f5c94.39332b26 result=3cdc948f.5662deec.41f res2=00000001 errno=0
-func=rred op1=50698d45.78b193d2 result=3c9b1a80.f8d4304f.d3d res2=00000003 errno=0
-func=rred op1=506af644.cefe25db result=bca12cec.66d32c4e.1b8 res2=00000001 errno=0
-func=rred op1=507101a0.bf3e8004 result=bcd559f9.9ae0b053.86d res2=00000003 errno=0
-func=rred op1=507f46eb.858b838e result=3ce5bed8.255a2f51.3f3 res2=00000001 errno=0
-func=rred op1=50827574.6f5ee5d9 result=3cc98706.ceee3458.f22 res2=00000001 errno=0
-func=rred op1=5083de73.c5ab77e2 result=bca4cc98.513c4074.4d1 res2=00000001 errno=0
-func=rred op1=5096b5dc.9f2e85da result=3cb0b434.d0361015.ad4 res2=00000001 errno=0
-func=rred op1=509dcdad.a88133d3 result=bcbf32e4.79da60ae.73a res2=00000003 errno=0
-func=rred op1=50a54a28.326cfede result=bc90618e.0418c17a.7f3 res2=00000003 errno=0
-func=rred op1=50a82191.0bf00cd6 result=3cd1ba4d.b0779c2d.553 res2=00000001 errno=0
-func=rred op1=50b60002.68cdc25c result=3cbd5006.1f65efcc.bab res2=00000001 errno=0
-func=rred op1=50bfef3c.4ba37e4d result=bca89255.06252237.bed res2=00000001 errno=0
-func=rred op1=50c4ef3b.173c9d1f result=bccaf12d.92c58902.3cc res2=00000001 errno=0
-func=rred op1=50c5a515.4d9d609d result=3cb51f3f.1d598f0f.7b2 res2=00000003 errno=0
-func=rred op1=50d02514.b369f006 result=3ca9dcf0.369a5ca4.771 res2=00000001 errno=0
-func=rred op1=50daca28.cca06f75 result=bc8b98af.465c9942.1d6 res2=00000001 errno=0
-func=rred op1=50e2b79e.72eb7772 result=bcb3d4a3.ece454a2.c2e res2=00000001 errno=0
-func=rred op1=50e8379f.0d1ee809 result=3cc365b4.28f3c57b.594 res2=00000003 errno=0
-func=rred op1=50f16e59.932ab3bc result=3c982131.26d82006.d0b res2=00000003 errno=0
-func=rred op1=50fc136d.ac61332b result=bccdbef5.e3567ef4.245 res2=00000003 errno=0
-func=rred op1=510212fc.030b1597 result=bcc0d07d.c80950a1.e8c res2=00000001 errno=0
-func=rred op1=510a2586.5cc00d9a result=3cb218e4.dd221805.1c8 res2=00000001 errno=0
-func=rred op1=5115c9ef.f7f560ab result=3cbe297d.708e2808.84e res2=00000003 errno=0
-func=rred op1=511f25bf.316b1c64 result=bcc89489.21819541.435 res2=00000003 errno=0
-func=rred op1=512349d3.8d9fd946 result=3ce235ba.dbcc7553.b93 res2=00000001 errno=0
-func=rred op1=512ca5a2.c71594ff result=bca9ee91.117df4f0.9b1 res2=00000001 errno=0
-func=rred op1=5130809c.95f020f7 result=bc6cd5fe.aa5d4e9c.a57 res2=00000003 errno=0
-func=rred op1=5134dc32.fabacde6 result=3cb73a81.31853591.eb8 res2=00000003 errno=0
-func=rred op1=5146931f.ae82dafb result=bcbad541.06d0df65.804 res2=00000001 errno=0
-func=rred op1=514aeeb6.134d87ea result=3cb56d21.46df60a8.213 res2=00000001 errno=0
-func=rred op1=515389de.22397df9 result=bcbca2a0.f176b44f.4a9 res2=00000003 errno=0
-func=rred op1=515df7f7.9f96e4ec result=3cb1d261.7193b6d4.8c8 res2=00000001 errno=0
-func=rred op1=5162053d.5c14cf78 result=bcc01eb0.63612f11.6fa res2=00000003 errno=0
-func=rred op1=516f7c98.65bb936d result=3ca539c3.8df8c65a.c65 res2=00000001 errno=0
-func=rred op1=5177fe9a.7dd5da32 result=3c8b3b10.e3287c31.ce6 res2=00000001 errno=0
-func=rred op1=5179833b.43fa88b3 result=bcc75430.0df882b8.990 res2=00000003 errno=0
-func=rred op1=51837d4b.26d0a654 result=3cc38612.7fc63e97.a96 res2=00000003 errno=0
-func=rred op1=518c7fe9.d4db0e10 result=bcb96e9c.8df83f16.6ba res2=00000001 errno=0
-func=rred op1=5195bdf2.d2534043 result=3cc6ed74.9c2b4e1d.e33 res2=00000001 errno=0
-func=rred op1=519a3f42.29587421 result=bcb29fd8.552e2009.f81 res2=00000003 errno=0
-func=rred op1=51a31f47.b421b09d result=bca7a228.38c801fb.08f res2=00000001 errno=0
-func=rred op1=51af1e94.f30c9db6 result=3c7cc745.5303d1b6.2be res2=00000001 errno=0
-func=rred op1=51b6af44.eebd125f result=bcc88862.63602088.ba4 res2=00000003 errno=0
-func=rred op1=51bb8e97.b8713bf4 result=3cbd0785.3858b94d.312 res2=00000001 errno=0
-func=rred op1=51c15749.16d3ffbc result=bcb5d5b3.e397c4df.a63 res2=00000003 errno=0
-func=rred op1=51cd5696.55beecd5 result=3cc05036.f15c99c1.fb5 res2=00000003 errno=0
-func=rred op1=51d672f0.67a29dd8 result=3cc21cab.468cd6dd.5e1 res2=00000001 errno=0
-func=rred op1=51d83aef.04f04eb9 result=bcad47c5.1dada0e4.366 res2=00000003 errno=0
-func=rred op1=51e3e51c.bf3b4eca result=bc9dc844.e8577012.40e res2=00000003 errno=0
-func=rred op1=51eac8c2.ad579dc7 result=3cc94e7c.9b4dcb4a.e90 res2=00000001 errno=0
-func=rred op1=51f981d8.d923f640 result=3cb55534.18edf5b1.9bb res2=00000003 errno=0
-func=rred op1=51fdd7ab.1ed8f62f result=bcb65633.ae41940d.b0a res2=00000001 errno=0
-func=rred op1=520116be.b246fb0f result=bcd08066.dd5c4773.3f4 res2=00000003 errno=0
-func=rred op1=5206b37a.cc2fa285 result=3c99c446.9308f6a1.ed0 res2=00000001 errno=0
-func=rred op1=52105304.95e6a4f5 result=bca0e621.9ed2f4c1.4a5 res2=00000003 errno=0
-func=rred op1=521d13f1.0278a015 result=3cc11bab.b1393881.491 res2=00000001 errno=0
-func=rred op1=5223833f.b10b23bd result=3c91bc49.e86c03c1.456 res2=00000001 errno=0
-func=rred op1=522d75ce.10a8cb22 result=bccb90bb.ab49ef9a.183 res2=00000001 errno=0
-func=rred op1=5231eb22.2378e459 result=bca8ee1e.496fe7a1.f20 res2=00000003 errno=0
-func=rred op1=52351b5d.3e9d6321 result=3cbe3359.0d23f792.3e6 res2=00000001 errno=0
-func=rred op1=5242b730.ea42040b result=bc8cc751.840f8f82.b26 res2=00000001 errno=0
-func=rred op1=52444f4e.77d4436f result=3cc388bf.00acfcb9.708 res2=00000003 errno=0
-func=rred op1=52525129.86dd7432 result=bcbc8708.79f1d992.484 res2=00000003 errno=0
-func=rred op1=52531d38.4da693e4 result=3cac46bf.6fd423a1.de3 res2=00000001 errno=0
-func=rred op1=526c45cd.11154dfd result=bc501242.876d7c1a.84c res2=00000001 errno=0
-func=rred op1=526cabd4.7479ddd6 result=3cc5350f.93df1ab9.66a res2=00000003 errno=0
-func=rred op1=52777e7e.fdaba904 result=bcad47e3.984afb63.868 res2=00000001 errno=0
-func=rred op1=5277e486.611038dd result=3cd1ac37.a5e49645.2ae res2=00000001 errno=0
-func=rred op1=5280868d.923f797b result=3cab459b.475d4be0.35e res2=00000003 errno=0
-func=rred op1=528e7670.6917d88d result=bcd20ca5.3511272d.ca0 res2=00000001 errno=0
-func=rred op1=52919edf.3e40bec3 result=bcc5f5ea.b2383c8a.a4e res2=00000003 errno=0
-func=rred op1=5296662d.51aa63bc result=3ca94352.f66f9c5c.e55 res2=00000003 errno=0
-func=rred op1=52a112b6.68401c1f result=bcb0a63a.1d132d35.13d res2=00000001 errno=0
-func=rred op1=52abb9a4.3b14ab59 result=3cd0cb38.027c997b.b79 res2=00000003 errno=0
-func=rred op1=52b0cca1.fd3fcacd result=3cc2f27e.38d3b545.abf res2=00000001 errno=0
-func=rred op1=52b6ac41.bcaab50e result=bcb4aaca.beee8c3b.b51 res2=00000001 errno=0
-func=rred op1=52c0efac.32bff376 result=3c926220.de044084.c11 res2=00000003 errno=0
-func=rred op1=52cc68d7.469576a6 result=bcd5d0ec.ccced044.012 res2=00000001 errno=0
-func=rred op1=52d3cdf6.f7b55442 result=bcc25e86.a32e042b.1ce res2=00000001 errno=0
-func=rred op1=52d96782.4c1fed31 result=3cab9331.4d0660c7.21a res2=00000001 errno=0
-func=rred op1=52e7f85c.e9a53ccb result=3cd26053.c0992257.ef0 res2=00000003 errno=0
-func=rred op1=52ead6a7.ae9a9d97 result=bcb25aec.6857c7d1.78b res2=00000001 errno=0
-func=rred op1=52f1a73e.e3fd4ba9 result=bca253b7.f2ab4f1e.306 res2=00000003 errno=0
-func=rred op1=52fa1f14.fd5d4564 result=3ca27089.c95d31eb.51c res2=00000003 errno=0
-func=rred op1=53058760.980e9c6d result=3cc6fe43.505b8cff.958 res2=00000003 errno=0
-func=rred op1=530eb6c9.62abee5b result=bca236e6.1bf96c51.0ef res2=00000001 errno=0
-func=rred op1=5313974f.be05f40b result=3cbba8ce.ae0bcae0.fab res2=00000001 errno=0
-func=rred op1=53182f04.23549d02 result=bcbb6f2b.00a80546.b7d res2=00000003 errno=0
-func=rred op1=53229f47.51019fda result=bca1fd42.6e95a6b6.cc1 res2=00000001 errno=0
-func=rred op1=5329270c.9058f133 result=3ca2e3d1.2424bd1f.d78 res2=00000003 errno=0
-func=rred op1=53365f2e.272f729f result=3cd030e1.7b8a7d14.784 res2=00000001 errno=0
-func=rred op1=533beeea.f9826fc7 result=bcbafbe3.a5e07a12.322 res2=00000003 errno=0
-func=rred op1=53413b58.1c6ce090 result=3ca3ca5f.d9b3d388.e2f res2=00000003 errno=0
-func=rred op1=534a8afb.c4edb07d result=bca03025.037779e4.b53 res2=00000001 errno=0
-func=rred op1=5351ed4f.b6b74035 result=bcba1554.f05163a9.26b res2=00000003 errno=0
-func=rred op1=5359d904.2aa350d8 result=3cbdaf8f.c68dbd4d.547 res2=00000001 errno=0
-func=rred op1=53658a2e.238818b4 result=3cc8bcf7.d020c86b.1bb res2=00000003 errno=0
-func=rred op1=536ed9d1.cc08e8a1 result=bcb67b1a.1a150a04.f8e res2=00000003 errno=0
-func=rred op1=537362c3.1ffa7ca2 result=3cd643ab.d4ea4df9.ff5 res2=00000003 errno=0
-func=rred op1=537cb266.c87b4c8f result=bccb6db2.1081fee7.31a res2=00000003 errno=0
-func=rred op1=538027a2.9aa61287 result=3ce28db9.dc189650.54c res2=00000001 errno=0
-func=rred op1=538fed87.4dcfb6aa result=bcd401ce.1ede8f93.dc8 res2=00000003 errno=0
-func=rred op1=53944599.ae031379 result=bc6bb722.955e057c.c77 res2=00000003 errno=0
-func=rred op1=5395594f.2fc9e182 result=3cb2eca6.c508e35c.fcb res2=00000001 errno=0
-func=rred op1=53adde8b.c4213631 result=bcb6638b.17b4a40c.95a res2=00000003 errno=0
-func=rred op1=53aef241.45e8043a result=3cb13134.9bb30305.304 res2=00000003 errno=0
-func=rred op1=53b91212.b91224d5 result=bcb81efd.410a8464.622 res2=00000001 errno=0
-func=rred op1=53ba25c8.3ad8f2de result=3ccb8541.12e264df.94e res2=00000001 errno=0
-func=rred op1=53c1df5d.287b8acb result=3cab74a0.920e84ab.2eb res2=00000003 errno=0
-func=rred op1=53c6abd6.338a9c27 result=bcbb95e1.93b64513.fb1 res2=00000001 errno=0
-func=rred op1=53d3127b.6b3f4f22 result=3c9b321e.8ebf03d9.95f res2=00000003 errno=0
-func=rred op1=53d578b7.f0c6d7d0 result=bcc141d5.1c86e339.967 res2=00000001 errno=0
-func=rred op1=53ec9bb9.20def6b3 result=3cb46596.eb0f42e3.307 res2=00000001 errno=0
-func=rred op1=53edced7.63a2bb0a result=bcb4ea9a.f1ae4486.61f res2=00000003 errno=0
-func=rred op1=53f73d8b.24ad40bf result=3cd2d3b6.03cb130e.637 res2=00000001 errno=0
-func=rred op1=53f870a9.67710516 result=bc9d462e.a93b0a66.5bc res2=00000001 errno=0
-func=rred op1=5405c192.69582a1c result=3cb3e092.e470413f.ff0 res2=00000001 errno=0
-func=rred op1=540b1fc0.6589e010 result=bcc89360.c6d5a5d3.2d6 res2=00000003 errno=0
-func=rred op1=5417191d.e8649799 result=3c94f5ee.3f4af033.448 res2=00000003 errno=0
-func=rred op1=5419c834.e67d7293 result=bccfe4ec.7124686c.c45 res2=00000001 errno=0
-func=rred op1=5421a8b9.4e0e8d12 result=bca2cb37.8995924c.b98 res2=00000001 errno=0
-func=rred op1=542c8982.82baa220 result=3cbe5b8a.0415b959.a14 res2=00000003 errno=0
-func=rred op1=543a7d15.f515d39b result=bcbc30d3.4e605b73.164 res2=00000003 errno=0
-func=rred op1=543fed7a.8f6bde22 result=3ca720a4.f5004e19.cf8 res2=00000001 errno=0
-func=rred op1=5448cb19.eebd359a result=bc9ceb94.3c55acff.470 res2=00000003 errno=0
-func=rred op1=544e3b7e.89134021 result=3cd211d9.a0aae670.0a9 res2=00000003 errno=0
-func=rred op1=545539e9.9e65e156 result=bcc668aa.112047ec.a26 res2=00000003 errno=0
-func=rred op1=545c5c4a.3f1489de result=3cafcb7f.cbd5c5b3.fb9 res2=00000001 errno=0
-func=rred op1=54670281.c6918b78 result=bccda38f.2035b32c.742 res2=00000001 errno=0
-func=rred op1=546a93b2.16e8dfbc result=3c76ff5c.7c00c5a5.a46 res2=00000003 errno=0
-func=rred op1=5479af66.02d30aab result=bcbb7b9e.7495a0a4.ecc res2=00000003 errno=0
-func=rred op1=547b77fe.2afeb4cd result=3cc09dba.c9cae907.2ae res2=00000001 errno=0
-func=rred op1=54830a79.7d18d2bc result=bccc3399.5875a6d2.19e res2=00000003 errno=0
-func=rred op1=5483eec5.912ea7cd result=3c913f85.5d00943c.3b4 res2=00000001 errno=0
-func=rred op1=54910e75.585c765e result=3cd0f9b8.3bbaec1d.c17 res2=00000001 errno=0
-func=rred op1=549d7402.4fbb112b result=bcc7e3b8.013581c3.0b1 res2=00000001 errno=0
-func=rred op1=54a5d113.b7a2ab0d result=3cd3d9a3.cb3b04d2.760 res2=00000001 errno=0
-func=rred op1=54af5650.762f146b result=bcc0b3eb.1a7543ff.47a res2=00000003 errno=0
-func=rred op1=54b4dfec.a468a96d result=3cd82985.227b29e1.84d res2=00000001 errno=0
-func=rred op1=54b9a28b.03aede1c result=bcb02850.d7e9f3c2.540 res2=00000003 errno=0
-func=rred op1=54c37632.0791a6fd result=3c9b5c2e.905b478d.418 res2=00000003 errno=0
-func=rred op1=54cfcee3.ffcc153b result=bcd1de13.c0efa83b.282 res2=00000001 errno=0
-func=rred op1=54d3b27b.cc602765 result=3cd2f548.460648b5.0f6 res2=00000003 errno=0
-func=rred op1=54d9ded4.c87d5e84 result=bc83d1cc.7de27fdd.9a1 res2=00000001 errno=0
-func=rred op1=54e3580d.252a66c9 result=bcc1656d.9fc81bc0.2da res2=00000003 errno=0
-func=rred op1=54e9fcf9.aae49eb8 result=3ccc994b.58396f8b.1b2 res2=00000003 errno=0
-func=rred op1=54f3671f.965e06e3 result=bc9dbab2.bcd3bfcc.671 res2=00000003 errno=0
-func=rred op1=54f9ede7.39b0fe9e result=3cca1f11.c87d1f8f.67e res2=00000001 errno=0
-func=rred op1=55035f96.5dc436d6 result=bcd34118.cb9557bc.f41 res2=00000001 errno=0
-func=rred op1=5509e65e.01172e91 result=3cc52a9e.a9047f98.016 res2=00000001 errno=0
-func=rred op1=55102780.6101730c result=bcd5bb52.5b51a7b8.a76 res2=00000001 errno=0
-func=rred op1=551d1e73.fdd9f25b result=3cb18efd.b4addf5b.023 res2=00000003 errno=0
-func=rred op1=5521cb14.97fca4fe result=3c9e985d.d6f27db0.d4a res2=00000003 errno=0
-func=rred op1=552842c9.ca1bfc9f result=bca8576a.104bc0e2.c9d res2=00000003 errno=0
-func=rred op1=5535d4f4.b03d01c1 result=bcd1e846.a0735802.8cc res2=00000003 errno=0
-func=rred op1=553ab09e.e3faf77d result=3cb6f246.6135de44.9f7 res2=00000001 errno=0
-func=rred op1=554301ff.24ec226d result=3cd37883.921d0736.0f7 res2=00000003 errno=0
-func=rred op1=554979b4.570b7a0e result=bc76523a.f15e29e2.a4f res2=00000003 errno=0
-func=rred op1=5555a264.77840f86 result=3cbd333a.27dc9b12.aa5 res2=00000003 errno=0
-func=rred op1=555d5104.3692e496 result=bcc163e4.721a12c5.a9c res2=00000001 errno=0
-func=rred op1=55678e0c.6747c4ca result=3cba68f2.c9b0d5d6.55b res2=00000001 errno=0
-func=rred op1=556b655c.46cf2f52 result=bcc2c908.212ff563.d41 res2=00000003 errno=0
-func=rred op1=557883e0.5f299f6c result=3cb4d464.0d594b5d.ac8 res2=00000001 errno=0
-func=rred op1=557a6f88.4eed54b0 result=bcc5934f.7f5bbaa0.28b res2=00000003 errno=0
-func=rred op1=5588feca.5b1a8cbd result=3ca3568d.29546cd8.b41 res2=00000001 errno=0
-func=rred op1=5589f49e.52fc675f result=bccb27de.3bb34518.d1f res2=00000003 errno=0
-func=rred op1=5592ddd2.435024e2 result=bc77dd6e.404de84f.86c res2=00000001 errno=0
-func=rred op1=559f1fc2.72e4f498 result=3cc41578.9b56dc1b.304 res2=00000003 errno=0
-func=rred op1=55a5b0d9.513ce227 result=3cd474ee.545813bc.6e6 res2=00000001 errno=0
-func=rred op1=55ac4cbb.64f83753 result=bc91e612.b03a6e3b.a51 res2=00000003 errno=0
-func=rred op1=55b484ca.c83efa2d result=bcc88efd.476577aa.199 res2=00000003 errno=0
-func=rred op1=55baa5c2.e0096208 result=3cc119ca.d34d1f11.3f7 res2=00000003 errno=0
-func=rred op1=55c6c1ca.91acc375 result=3cbc3c3a.1686c40e.9d3 res2=00000003 errno=0
-func=rred op1=55c868c3.169b98c0 result=bccd0881.f3741339.02d res2=00000001 errno=0
-func=rred op1=55d5a34a.acf5ded1 result=bcd17fee.c1c3c6a6.724 res2=00000001 errno=0
-func=rred op1=55d98742.fb527d64 result=3ca4ac4e.cc98aba5.f03 res2=00000003 errno=0
-func=rred op1=55e6328a.9f515123 result=bcab0e8d.b40324f9.1d5 res2=00000003 errno=0
-func=rred op1=55ecdbfb.5753a9a5 result=3ccb6ff2.399974e4.378 res2=00000001 errno=0
-func=rred op1=55f32572.3c7dde0b result=3cbf0276.32e50178.e85 res2=00000001 errno=0
-func=rred op1=55fc945b.5e25f07c result=bcb0b866.4db6cf26.254 res2=00000001 errno=0
-func=rred op1=5604abfe.6de79797 result=3c8f9f43.f70ee3fe.57e res2=00000003 errno=0
-func=rred op1=560e1ae7.8f8faa08 result=bcd6e074.2095712f.940 res2=00000003 errno=0
-func=rred op1=5613e8b8.5532bad1 result=3cd07e35.392af7dc.66e res2=00000001 errno=0
-func=rred op1=561bd115.457113b6 result=bca1a12a.9fe62c4d.1e8 res2=00000003 errno=0
-func=rred op1=56250da1.7a4205fa result=bcc520b0.f5b05a39.6ce res2=00000001 errno=0
-func=rred op1=562b6f72.3916a553 result=3cc437ec.a380fd12.739 res2=00000001 errno=0
-func=rred op1=56314a44.885010b9 result=3c9bfc32.ae516f62.72b res2=00000003 errno=0
-func=rred op1=563f32cf.2b089a94 result=bca5443b.e8a3a0e9.03b res2=00000001 errno=0
-func=rred op1=5642fb21.7b1bd428 result=3cc34f28.51519feb.7a4 res2=00000003 errno=0
-func=rred op1=564d81f2.383cd725 result=bcc6f239.9a0f1487.5f7 res2=00000001 errno=0
-func=rred op1=5657661b.604673ef result=bcbfe659.dcf5715d.859 res2=00000003 errno=0
-func=rred op1=565916f8.5312375e result=3cb15a14.b9ff9eed.f0d res2=00000001 errno=0
-func=rred op1=5664582f.f44b4254 result=bc8f5139.75200fd8.96a res2=00000003 errno=0
-func=rred op1=566dd5c0.b1d92c68 result=3cd2549e.85a89f6c.b59 res2=00000001 errno=0
-func=rred op1=5676b794.23aebcd9 result=3cbeca02.455b3be0.cee res2=00000001 errno=0
-func=rred op1=567e8447.ee70e37e result=bca77ceb.17d80be2.710 res2=00000001 errno=0
-func=rred op1=56896e3b.f15e12e9 result=bcb392c3.e93409e7.5e2 res2=00000003 errno=0
-func=rred op1=568bcda0.20c18d6e result=3cccd4ee.ae093ae3.457 res2=00000001 errno=0
-func=rred op1=56909d77.de101cc7 result=bcda28ec.e2f0a362.db4 res2=00000003 errno=0
-func=rred op1=569d28f4.07993876 result=3cc11679.221d34f2.0cf res2=00000003 errno=0
-func=rred op1=56a8c091.fdf23d65 result=3c86ddc6.78d2d05c.1a6 res2=00000003 errno=0
-func=rred op1=56add69d.fb050dfa result=bca999c7.d6eb5bc1.901 res2=00000003 errno=0
-func=rred op1=56b4015a.fa955792 result=bcc60f0e.b04adedc.af5 res2=00000003 errno=0
-func=rred op1=56bd7fc9.014f2338 result=3ccbc680.4e7f92f3.b5f res2=00000001 errno=0
-func=rred op1=56c3d5f0.7dba6231 result=bc9c55c9.3503e727.05b res2=00000001 errno=0
-func=rred op1=56cdab33.7e2a1899 result=3cbdf338.c613ca25.dbd res2=00000003 errno=0
-func=rred op1=56d1609f.bd9e7497 result=bcc0579d.12162ac5.a8c res2=00000003 errno=0
-func=rred op1=56d64b41.3dd64fcb result=3c9165c3.bca1b991.2f1 res2=00000001 errno=0
-func=rred op1=56e51098.ddc858fe result=bca3a2e7.56b30a5e.6e3 res2=00000003 errno=0
-func=rred op1=56e785e9.9de44698 result=3cbb3737.67fb3ec0.662 res2=00000001 errno=0
-func=rred op1=56f0ad96.4f29fe80 result=3ce5eb3c.76a9c9cf.db6 res2=00000001 errno=0
-func=rred op1=56ff98e5.4cac857d result=bcbd745b.020c8f8d.a54 res2=00000001 errno=0
-func=rred op1=570069c6.d65d3e25 result=3c9e5140.4520d187.dff res2=00000003 errno=0
-func=rred op1=570af213.45416aa4 result=bca81d2e.8ad5abf8.ec6 res2=00000001 errno=0
-func=rred op1=57180156.1184e1d1 result=bcc9aa32.f968755c.a94 res2=00000001 errno=0
-func=rred op1=571de2d0.78fdf377 result=3c88d046.e92c963b.ce3 res2=00000003 errno=0
-func=rred op1=5724358e.73f10ffb result=bcc215e2.e82040fa.b15 res2=00000003 errno=0
-func=rred op1=5727264b.a7ad98ce result=3cb242a8.ffb5fb8b.69b res2=00000001 errno=0
-func=rred op1=57324faa.a5272710 result=bc976a16.2c7ec1b6.0a9 res2=00000003 errno=0
-func=rred op1=573bfcec.aa340a8c result=3cd3b94a.627de7a6.ca6 res2=00000001 errno=0
-func=rred op1=5744bafb.266a5fef result=3cbeaacc.744c46a9.50d res2=00000001 errno=0
-func=rred op1=574b777f.f7baba98 result=bcb18f90.a15f1148.87f res2=00000001 errno=0
-func=rred op1=5756e395.4e70f0d4 result=bcbd449b.b79e7223.8d4 res2=00000003 errno=0
-func=rred op1=57594ee5.cfb429b3 result=3ccbbd89.aebc6e72.8f8 res2=00000001 errno=0
-func=rred op1=576005b5.5082422e result=bcc47cd3.66eee97f.494 res2=00000001 errno=0
-func=rred op1=576b98db.24590e95 result=3cda46e8.4bf48257.2ed res2=00000001 errno=0
-func=rred op1=57712aaf.fad4b49f result=bcd5f374.c9b6d59a.a9f res2=00000001 errno=0
-func=rred op1=577f07cb.235065e8 result=3ce814f6.37c8a02e.1dd res2=00000003 errno=0
-func=rred op1=57808785.0f5c5168 result=bd0043a7.41699ccb.2c1 res2=00000001 errno=0
-func=rred op1=578f899a.e22a7522 result=3cbcc116.86cdb576.a4a res2=00000003 errno=0
-func=rred op1=5790e9c8.1b67ad02 result=3c955c01.693bcf02.685 res2=00000003 errno=0
-func=rred op1=57920ec2.c5ba1f73 result=bcb21315.d22fcdf5.708 res2=00000003 errno=0
-func=rred op1=57a95eac.291b8383 result=3cb00501.0eecdb41.ce3 res2=00000001 errno=0
-func=rred op1=57aa83a6.d36df5f4 result=bcbecf2b.4a10a82a.46f res2=00000001 errno=0
-func=rred op1=57b491bc.cd185f0a result=3cd261cb.8722118b.c5e res2=00000003 errno=0
-func=rred op1=57be2b9b.851ea7fc result=bca2e653.c1a9b24f.bd4 res2=00000001 errno=0
-func=rred op1=57c78ab1.d0432a7f result=3ca7d1af.10cdebb5.136 res2=00000001 errno=0
-func=rred op1=57cc57a1.2c464ef8 result=bcd1c460.1d3d8a5f.1b2 res2=00000003 errno=0
-func=rred op1=57d6a0b4.a3d6fdfd result=bcbc597d.a27e8b77.9be res2=00000003 errno=0
-func=rred op1=57df1598.b18ad47e result=3cacbd0a.5ff2251a.699 res2=00000003 errno=0
-func=rred op1=57e715b3.3a0d143e result=bc921f3a.46c27f0a.21c res2=00000001 errno=0
-func=rred op1=57ef8a97.47c0eabf result=3cd43a0d.c4cfa711.c63 res2=00000001 errno=0
-func=rred op1=57f315c0.7e4e341e result=bcc52a3b.0a820231.017 res2=00000001 errno=0
-func=rred op1=57fb15a5.f5cbf45e result=3cb8353b.ce418557.e12 res2=00000003 errno=0
-func=rred op1=580515b9.dc2da42e result=bcc9b209.9c32a1f3.89e res2=00000003 errno=0
-func=rred op1=580915ac.97ec844e result=3cae4b3d.55c08ba5.a08 res2=00000001 errno=0
-func=rred op1=581815af.e8fccc46 result=bc87ccdc.df11c9ba.8bf res2=00000001 errno=0
-func=rred op1=581a15a9.46dc3c56 result=3ccfc80b.23b1a841.494 res2=00000003 errno=0
-func=rred op1=582795b1.9184f042 result=bcc39c08.14b39ba5.ca8 res2=00000001 errno=0
-func=rred op1=582895ae.4074a84a result=3cbb51a1.b9de526e.4f0 res2=00000003 errno=0
-func=rred op1=5837d5b0.bd40de44 result=bcc695a3.b095d4dd.1c0 res2=00000003 errno=0
-func=rred op1=583855af.14b8ba48 result=3cb55e6a.8219dfff.ac0 res2=00000001 errno=0
-func=rred op1=5847f5b0.531ed545 result=bccc88da.e85a474b.bf0 res2=00000003 errno=0
-func=rred op1=584835af.7edac347 result=3ca2eff8.2521f644.cc2 res2=00000001 errno=0
-func=rred op1=58522043.b9ac94b5 result=bc837392.e7bf4dd6.ff5 res2=00000001 errno=0
-func=rred op1=585e4b1b.4408f1d9 result=3cc42731.539deb22.3c1 res2=00000003 errno=0
-func=rred op1=58652af9.9c43abfe result=3cb08185.c82a0c89.ec3 res2=00000003 errno=0
-func=rred op1=586b2065.cb93e38f result=bcd27542.3e8b51ba.a0f res2=00000001 errno=0
-func=rred op1=5879ab0a.a537536b result=bcc1fa8c.57f4ad30.75c res2=00000001 errno=0
-func=rred op1=587cb5c0.87ce6ab4 result=3c9b1ef1.51299679.b23 res2=00000003 errno=0
-func=rred op1=5885e5a7.2f71f410 result=bcc6d771.11e480a6.35a res2=00000001 errno=0
-func=rred op1=5888f05d.12090b59 result=3cc3e563.f24f3f59.227 res2=00000001 errno=0
-func=rred op1=58958850.65dad007 result=3cb45734.fcdf30db.45a res2=00000001 errno=0
-func=rred op1=58994db3.dba02f62 result=bcc00fb4.bd9a1b07.c91 res2=00000003 errno=0
-func=rred op1=58a00ee6.99fe5303 result=3cd59753.0761d8c0.bda res2=00000001 errno=0
-func=rred op1=58ab01ba.31b74d0b result=bc9401e0.a82a7e57.7fc res2=00000003 errno=0
-func=rred op1=58b11795.29d573dc result=3ca11e00.fd14574d.f24 res2=00000001 errno=0
-func=rred op1=58bdbe6f.17a58b8d result=bccbd7e9.3bef203c.159 res2=00000003 errno=0
-func=rred op1=58c275ef.9ccc931d result=bcbc90e1.26b4a9fe.78f res2=00000003 errno=0
-func=rred op1=58c9a35f.bec02dca result=3cb9ad01.7b9e82f4.eb7 res2=00000003 errno=0
-func=rred op1=58d55d7a.744ad0d3 result=3cc56581.3c596d21.6ed res2=00000001 errno=0
-func=rred op1=58df479f.7c2caa02 result=bcbf74c0.d1cad108.067 res2=00000001 errno=0
-func=rred op1=58e3e9b5.088bb1f8 result=bcacad7f.a96cf374.284 res2=00000003 errno=0
-func=rred op1=58e82f9a.53010eef result=3c863a09.42eeec9e.f14 res2=00000001 errno=0
-func=rred op1=58f280a5.193092ea result=3ccb10a2.0fcd71be.da8 res2=00000003 errno=0
-func=rred op1=58fdde8f.8cd18af4 result=bcc5821f.bf11b697.1e3 res2=00000001 errno=0
-func=rred op1=5903352d.10de2271 result=3cb973c4.762df009.8cc res2=00000001 errno=0
-func=rred op1=590d2a07.9523fb6d result=bc89cdd9.99f81b54.dbe res2=00000003 errno=0
-func=rred op1=591aacd0.f412852e result=3c9f8d25.b8e1cb93.74a res2=00000003 errno=0
-func=rred op1=591fa73e.363571ac result=bcb4ca36.3b34808f.4b1 res2=00000001 errno=0
-func=rred op1=592250d5.bc2c2f15 result=bcc8bbda.f250ba01.b9b res2=00000003 errno=0
-func=rred op1=592e0e5e.e9d5eec9 result=3ce14bfb.5e0ba4cf.e71 res2=00000001 errno=0
-func=rred op1=5932c301.668528c3 result=3cca2bad.fa0b2611.5fe res2=00000003 errno=0
-func=rred op1=59354038.07969f02 result=bc940e8d.7b0e6b16.431 res2=00000003 errno=0
-func=rred op1=5947f684.7dd49218 result=3cba8982.5a1e30cd.e3e res2=00000003 errno=0
-func=rred op1=594fe054.0b61ee83 result=bcae15d4.3895a0a1.64a res2=00000001 errno=0
-func=rred op1=5953e511.cc77a577 result=bccc4fab.4959e8b7.a44 res2=00000003 errno=0
-func=rred op1=59569b5e.42b5988d result=3cb0823b.9c96fb42.c25 res2=00000001 errno=0
-func=rred op1=59609dbd.23407407 result=3c99ebd3.7c3f16de.833 res2=00000003 errno=0
-func=rred op1=596b3dd9.270bc388 result=bcab2731.37fd4abd.449 res2=00000003 errno=0
-func=rred op1=59739c8d.b2fb064a result=3cc3bfb6.0c1ede1e.92c res2=00000001 errno=0
-func=rred op1=597e3ca9.b6c655cb result=bc63b5db.bbe33dec.159 res2=00000001 errno=0
-func=rred op1=59846e62.dd48d2a6 result=bcc45d64.e9fdf80d.f37 res2=00000001 errno=0
-func=rred op1=59876d33.6d0364e9 result=3ca8b075.c080e2ff.c1d res2=00000003 errno=0
-func=rred op1=599106a7.b8675a35 result=bcd0f87e.c2fe4eb6.4ad res2=00000003 errno=0
-func=rred op1=599ad4ee.91e4dd5a result=3ca639ba.49047b42.3f2 res2=00000001 errno=0
-func=rred op1=59a0d232.6dd3e71e result=bcb00a54.137b0d1c.24f res2=00000003 errno=0
-func=rred op1=59ae0834.6c32e2b4 result=3cdcb30a.c55fa646.cb1 res2=00000001 errno=0
-func=rred op1=59b5d390.7fdc623c result=3c98bd98.d625b898.68c res2=00000001 errno=0
-func=rred op1=59b93b4b.a4bddaad result=bcc80f7e.1d3893aa.377 res2=00000001 errno=0
-func=rred op1=59c352e1.76d824ad result=bcb9e541.f16cac12.2fc res2=00000003 errno=0
-func=rred op1=59c8543f.88e09fcb result=3cc9516d.63c93255.4c4 res2=00000001 errno=0
-func=rred op1=59d05eac.5fe549ad result=3cb28e32.a09c4a72.4e9 res2=00000003 errno=0
-func=rred op1=59d8c7c5.96cf3d3c result=bcc6cd8e.d6a7f4ff.22a res2=00000003 errno=0
-func=rred op1=59e45975.f462f4bc result=3cddf4fa.0bf044f1.dfe res2=00000001 errno=0
-func=rred op1=59ecc28f.2b4ce84b result=bca0fd70.d82eaa33.503 res2=00000001 errno=0
-func=rred op1=59f11bb9.a5a2006d result=3c8f009f.f7dc3994.626 res2=00000003 errno=0
-func=rred op1=59fd7f9c.71099f0b result=bcd5d589.d6e91332.7f9 res2=00000001 errno=0
-func=rred op1=5a06ef24.6877745c result=bcaa3ab9.b2664601.87c res2=00000001 errno=0
-func=rred op1=5a0c6408.886e8ceb result=3cc22eea.698c2718.06d res2=00000001 errno=0
-func=rred op1=5a114afc.f7112e1d result=bccb6c33.43c3c2e6.3e7 res2=00000003 errno=0
-func=rred op1=5a1c934b.d9ddba9b result=3c831799.15d7ce4b.6a7 res2=00000001 errno=0
-func=rred op1=5a21335b.4e599745 result=bcc3ac0b.45ccb481.25d res2=00000003 errno=0
-func=rred op1=5a26d782.bfbfdd84 result=3cb1e343.1ea91693.9e8 res2=00000001 errno=0
-func=rred op1=5a31278a.79fdcbd9 result=bca0aeed.277a5edb.d29 res2=00000003 errno=0
-func=rred op1=5a3c877b.0581ef2f result=3cd3f920.c398626f.18d res2=00000001 errno=0
-func=rred op1=5a46dd6b.29edc33a result=3c73455f.72eb7b7c.bf7 res2=00000003 errno=0
-func=rred op1=5a4c9934.440ba051 result=bcc9a08e.b6ceea25.a1d res2=00000003 errno=0
-func=rred op1=5a512496.44e6d8fe result=3cc27d6e.1a40726f.848 res2=00000001 errno=0
-func=rred op1=5a5c9640.0ef4ad76 result=bcc014c2.2be302ff.ec9 res2=00000003 errno=0
-func=rred op1=5a640100.b76a4e1c result=3cc3b1c4.116f2a27.507 res2=00000003 errno=0
-func=rred op1=5a69b9d5.9c713858 result=bcbdc0d8.69689690.413 res2=00000001 errno=0
-func=rred op1=5a756f35.f0ac08ab result=3cc61a6f.ffcc9996.e86 res2=00000003 errno=0
-func=rred op1=5a784ba0.632f7dc9 result=bcb8ef80.8cadb7b1.115 res2=00000001 errno=0
-func=rred op1=5a806ef5.c2d17524 result=3cc8831b.ee2a0906.805 res2=00000003 errno=0
-func=rred op1=5a8d4be0.910a1150 result=bca4f6f1.ecfa3627.038 res2=00000001 errno=0
-func=rred op1=5a951465.afa156be result=bcd17f4a.7253920d.011 res2=00000003 errno=0
-func=rred op1=5a9a14a5.dd7bea45 result=3ca193cc.f8dcc0d2.7b5 res2=00000001 errno=0
-func=rred op1=5aa2c1ad.b93965f1 result=3cbc0f45.ef59dbe5.fd1 res2=00000001 errno=0
-func=rred op1=5aa5f8e8.6cc78cfc result=bcbf726a.e377513a.855 res2=00000003 errno=0
-func=rred op1=5ab24f6c.5aa64ad2 result=bcca34ae.6838c3b0.c47 res2=00000001 errno=0
-func=rred op1=5abdbe21.ef9d2c6f result=3cb8ac20.fb3c6691.74e res2=00000001 errno=0
-func=rred op1=5ac07aae.5195a9bd result=bcd795d0.2a997ceb.e40 res2=00000001 errno=0
-func=rred op1=5acf92df.f8adcd84 result=3cc36e64.7ffdd907.b40 res2=00000003 errno=0
-func=rred op1=5ad19e2e.056787d7 result=3cb1e5d7.13017be8.647 res2=00000001 errno=0
-func=rred op1=5ad372ec.0e7828ec result=bc8888d6.cfc5d1f4.f86 res2=00000003 errno=0
-func=rred op1=5aeb57a4.0ca39c4d result=3cc05d49.a6051ec9.14f res2=00000001 errno=0
-func=rred op1=5aed2c62.15b43d62 result=bca266a1.1bd45d77.ba4 res2=00000001 errno=0
-func=rred op1=5af67ae9.09059212 result=3cd12190.5c834d58.bcb res2=00000003 errno=0
-func=rred op1=5af84fa7.12163327 result=bcaeab0c.83b74672.367 res2=00000003 errno=0
-func=rred op1=5b01eeed.91317459 result=bcda54e0.ea6d7c14.99e res2=00000001 errno=0
-func=rred op1=5b0eb060.92faf1f5 result=3cc5feb5.5123b1b6.fd4 res2=00000003 errno=0
-func=rred op1=5b10428f.4e05c985 result=bcdeee89.31629372.887 res2=00000003 errno=0
-func=rred op1=5b1b8003.d288928e result=3caaa4bc.3d2039f7.883 res2=00000001 errno=0
-func=rred op1=5b229cbc.ece25382 result=bca66cf1.626b69f2.689 res2=00000001 errno=0
-func=rred op1=5b2f868f.b490c75f result=3cd64231.fecefeb7.4f4 res2=00000003 errno=0
-func=rred op1=5b370e60.5fb57308 result=3caedc87.17d509fc.a7d res2=00000003 errno=0
-func=rred op1=5b3beb1b.63537d43 result=bcc0d1b5.09d08f75.ce6 res2=00000003 errno=0
-func=rred op1=5b44d58e.a64be345 result=bc9bfab7.5a0393d0.529 res2=00000001 errno=0
-func=rred op1=5b494732.191f02cb result=3cd12def.018abe3b.591 res2=00000003 errno=0
-func=rred op1=5b586055.04cfb044 result=bcd29160.7f70c8b2.d39 res2=00000003 errno=0
-func=rred op1=5b5a9926.be394007 result=3c770e7d.ee8bb162.aa3 res2=00000001 errno=0
-func=rred op1=5b67b75a.b24291a6 result=bca918e7.9c321da3.fd4 res2=00000003 errno=0
-func=rred op1=5b6d7af2.ca2fee68 result=3cb25013.49bbfb2a.a93 res2=00000001 errno=0
-func=rred op1=5b719f45.710ea595 result=3cc8964d.30c88293.a88 res2=00000003 errno=0
-func=rred op1=5b7dcf6f.f3767db7 result=bcd8d79a.667d501b.d2e res2=00000001 errno=0
-func=rred op1=5b833a6a.0bad446d result=bc9b2351.49d889e5.505 res2=00000003 errno=0
-func=rred op1=5b861c36.17a3f2ce result=3ccb781c.ee99f8bf.fdc res2=00000003 errno=0
-func=rred op1=5b96e9c8.64f3423a result=3c92f9aa.933ed8e0.042 res2=00000003 errno=0
-func=rred op1=5b9b66b9.0b888f73 result=bcd484e2.c9c31ed9.52f res2=00000001 errno=0
-func=rred op1=5ba2d3a0.e5059cb7 result=3cd37fad.f2efe8b8.a97 res2=00000003 errno=0
-func=rred op1=5baeaf4e.3e26e58a result=bcb664e6.a508d3ad.4f4 res2=00000003 errno=0
-func=rred op1=5bb30705.78597092 result=3cc96db3.40f38c7e.aab res2=00000003 errno=0
-func=rred op1=5bbacc8b.518d13e2 result=bca9d022.b6d2ce7a.9a7 res2=00000001 errno=0
-func=rred op1=5bc8db29.db402b0e result=3c984664.df55c68a.dba res2=00000001 errno=0
-func=rred op1=5bccbdec.c7d9fcb6 result=bcccd8ef.52bd874b.f5e res2=00000003 errno=0
-func=rred op1=5bd7e279.2019b6a4 result=3cc60277.2f2991b1.5f9 res2=00000001 errno=0
-func=rred op1=5bd9d3da.96669f78 result=bcb3be89.7efd5cd7.e38 res2=00000003 errno=0
-func=rred op1=5be85ed1.7dacf0d9 result=3ccc1410.66ff0354.168 res2=00000003 errno=0
-func=rred op1=5be95782.38d36543 result=bc9e6d5c.3d49e649.d6d res2=00000001 errno=0
-func=rred op1=5bf2e28b.9339bd65 result=3c921f6d.8161a6cb.e08 res2=00000003 errno=0
-func=rred op1=5bffcc78.de6d0d21 result=bcc17a9b.ced127fe.677 res2=00000001 errno=0
-func=rred op1=5c061d06.e6069154 result=bca55da5.7c9912e3.e69 res2=00000001 errno=0
-func=rred op1=5c0c15a5.2e0cfefd result=3cd356c2.7f966f54.e2c res2=00000003 errno=0
-func=rred op1=5c11837a.189cf088 result=bcd66a3e.2e907f34.605 res2=00000001 errno=0
-func=rred op1=5c1df10f.063d060f result=3c9dc26b.0c547567.b4e res2=00000001 errno=0
-func=rred op1=5c2095c5.2c84ecff result=bcc0063c.1d72ce2a.ece res2=00000003 errno=0
-func=rred op1=5c2869cd.4cbb61ba result=3cb99008.4476c425.cdb res2=00000001 errno=0
-func=rred op1=5c31bc28.5fdf5532 result=3c90c98b.1f76c507.9cc res2=00000003 errno=0
-func=rred op1=5c37436a.1960f987 result=bcb12b42.b4bb61a1.ff5 res2=00000001 errno=0
-func=rred op1=5c43ec97.a2f2f343 result=bcd4510c.caa1a693.6cc res2=00000003 errno=0
-func=rred op1=5c4a9a3c.8fceffcb result=3ca92e50.af32278b.6b2 res2=00000001 errno=0
-func=rred op1=5c536791.9b165854 result=3ccfdb9c.70434e08.a88 res2=00000003 errno=0
-func=rred op1=5c58eed3.5497fca9 result=bcb5bf5d.11ddaf7e.492 res2=00000003 errno=0
-func=rred op1=5c60e673.c243d3a1 result=bcaab52f.044499f4.f58 res2=00000001 errno=0
-func=rred op1=5c69c487.f2337e3a result=3c8b779c.eaa3c069.0fe res2=00000001 errno=0
-func=rred op1=5c75c058.290969b6 result=3cc28104.ee21010e.2dc res2=00000001 errno=0
-func=rred op1=5c7dc8b7.bb5d92be result=bcb7463b.66f021e7.d39 res2=00000003 errno=0
-func=rred op1=5c87c270.0d9e73f8 result=3cc5eff8.8b75791b.4fb res2=00000003 errno=0
-func=rred op1=5c8bc69f.d6c8887c result=bcb06854.2c4731cd.8f9 res2=00000001 errno=0
-func=rred op1=5c98c37b.ffe8f919 result=3ccccddf.c61e6935.93b res2=00000003 errno=0
-func=rred op1=5c9ac593.e47e035b result=bc85642d.b7aa8cc8.3d0 res2=00000001 errno=0
-func=rred op1=5ca3d3eb.eecbe13c result=3ca61e91.7cb91d37.00a res2=00000001 errno=0
-func=rred op1=5ca4d4f7.e116665d result=bcc89c7e.426acab4.576 res2=00000003 errno=0
-func=rred op1=5cb0db9d.ed1812bd result=bcb5c15f.9a31d4ff.9ed res2=00000003 errno=0
-func=rred op1=5cbdbde1.e631d1da result=3cc096ed.1d8ad5e9.407 res2=00000003 errno=0
-func=rred op1=5cc8c8e6.ea7ed98b result=3ccba635.dbe76484.c0c res2=00000001 errno=0
-func=rred op1=5ccfba8e.e030fbaa result=bca4a9c9.f29bfc59.796 res2=00000001 errno=0
-func=rred op1=5cd4d242.6bcb7624 result=3ca79359.06d63e14.87e res2=00000003 errno=0
-func=rred op1=5cdbc3ea.617d9843 result=bcddde3d.37b39bd8.8e2 res2=00000003 errno=0
-func=rred op1=5cea4668.a5fe38e7 result=bca1c03a.de61ba9e.6ae res2=00000001 errno=0
-func=rred op1=5cef3b63.a1b13136 result=3cc1ae82.c520ae8f.65e res2=00000001 errno=0
-func=rred op1=5cfa06d3.06be53ad result=3ccd782f.488bcd99.a9d res2=00000003 errno=0
-func=rred op1=5cff7af9.40f11670 result=bc97da39.6bda6e50.9bd res2=00000001 errno=0
-func=rred op1=5d04f20d.3b6b68c1 result=3cb19cca.abdfa280.60e res2=00000003 errno=0
-func=rred op1=5d0f9ac4.1091090d result=bcd6276d.8959a33e.832 res2=00000001 errno=0
-func=rred op1=5d179c3a.f0b4d0d4 result=bcb1e3ab.10e3d2bc.74e res2=00000003 errno=0
-func=rred op1=5d1cd0cb.8ba7ae5d result=3cbd4306.fcc8a96c.9ae res2=00000003 errno=0
-func=rred op1=5d23acdb.c896ae06 result=bcbdd0c7.c6d109e4.c2d res2=00000001 errno=0
-func=rred op1=5d28e16c.63898b8f result=3cd01f27.1521fb9b.572 res2=00000001 errno=0
-func=rred op1=5d31b52c.34879c9f result=bccad580.9955bc1a.af5 res2=00000001 errno=0
-func=rred op1=5d3ec87b.1fb6bfc4 result=3cdbc563.660b0287.912 res2=00000001 errno=0
-func=rred op1=5d4016bb.b115b68e result=bcf2de75.8f6ff7ca.323 res2=00000003 errno=0
-func=rred op1=5d4f21ba.3053eb1a result=3caf594f.d184a1b7.aa4 res2=00000001 errno=0
-func=rred op1=5d51888c.ac3906f4 result=bca05b23.06303ae9.8d6 res2=00000001 errno=0
-func=rred op1=5d5ef51a.a805556f result=3cedbaf8.63234ca3.0bc res2=00000003 errno=0
-func=rred op1=5d685523.6e467907 result=3cb72bbe.4e6c8442.e39 res2=00000003 errno=0
-func=rred op1=5d6a4cd3.02558a6e result=bcb888b4.8948585e.542 res2=00000003 errno=0
-func=rred op1=5d75eaaf.d74748b1 result=bcc471eb.c7bc49a3.f0c res2=00000001 errno=0
-func=rred op1=5d7cb746.9954bac4 result=3cc314f5.8ce07588.803 res2=00000003 errno=0
-func=rred op1=5d871fe9.a2c6e0dc result=3c95ce94.3581d4f7.96b res2=00000003 errno=0
-func=rred op1=5d8b820c.cdd52299 result=bca5cefb.f19f8b57.4f7 res2=00000001 errno=0
-func=rred op1=5d94543b.277ff3e8 result=bccdfc73.85b03b34.280 res2=00000003 errno=0
-func=rred op1=5d9e4dbb.491c0f8d result=3cc8889a.9a40eac6.65e res2=00000001 errno=0
-func=rred op1=5da157ef.3a1528a5 result=3cb05aef.28215fb9.b10 res2=00000001 errno=0
-func=rred op1=5da5ba12.65236a62 result=bcc888ce.784fc5f6.425 res2=00000001 errno=0
-func=rred op1=5db20ada.d8e6e3e2 result=3cd9e583.dd990815.df5 res2=00000001 errno=0
-func=rred op1=5dbc34f8.6ca6ddd6 result=bcb05bbe.a05ccc79.229 res2=00000003 errno=0
-func=rred op1=5dc3e276.9f052722 result=3c95cb56.549421f9.d07 res2=00000003 errno=0
-func=rred op1=5dcebf7f.d196dc53 result=bcd72c19.130683d6.a54 res2=00000001 errno=0
-func=rred op1=5dd80bb7.85d6027c result=bcbb44a7.ab949073.d10 res2=00000001 errno=0
-func=rred op1=5dddd3b1.ee87bab3 result=3cb05880.bf6f197b.5c5 res2=00000001 errno=0
-func=rred op1=5de1cdd6.2b9cb975 result=3ccdfad4.953961b5.44d res2=00000001 errno=0
-func=rred op1=5defe852.61f02860 result=bc95e545.5c01b9e8.025 res2=00000001 errno=0
-func=rred op1=5df9e564.807aa7c1 result=3cb05204.fd93b37f.cfe res2=00000001 errno=0
-func=rred op1=5dfbfa04.f3e3156e result=bcce0150.5714c7b0.d15 res2=00000003 errno=0
-func=rred op1=5e01eb4f.e7fe9da9 result=3cc30ead.a913eabc.d02 res2=00000001 errno=0
-func=rred op1=5e07ee3d.c9741e48 result=bcb06bf4.05014b6e.01b res2=00000003 errno=0
-func=rred op1=5e13f133.7d36193c result=bcbb5e96.b3022862.02e res2=00000001 errno=0
-func=rred op1=5e1de26e.ccb8accd result=3ccde761.4fa72fc2.9f7 res2=00000001 errno=0
-func=rred op1=5e21f2ae.571716b6 result=bcc8a1ee.0781f125.029 res2=00000001 errno=0
-func=rred op1=5e2fe0f3.f2d7af53 result=3cdc890c.f9e71424.1f5 res2=00000003 errno=0
-func=rred op1=5e30f36b.c4079573 result=bcd74399.b1c1d586.827 res2=00000001 errno=0
-func=rred op1=5e3ee1b1.5fc82e10 result=3ced3837.24c721f3.5f6 res2=00000001 errno=0
-func=rred op1=5e407779.b20c1158 result=bd0240b0.7732a570.d90 res2=00000003 errno=0
-func=rred op1=5e4f6501.e0dc2b38 result=3ccd4bc7.2315a02d.747 res2=00000001 errno=0
-func=rred op1=5e51b106.168d1822 result=3cad9a07.1c4f9915.c89 res2=00000001 errno=0
-func=rred op1=5e52b048.a99c9965 result=bc9c6107.3767b574.780 res2=00000001 errno=0
-func=rred op1=5e6b88cb.b4e32576 result=3c638ffe.4e7e3a15.09c res2=00000003 errno=0
-func=rred op1=5e6c880e.47f2a6b9 result=bcc59705.62c7c0ff.ae2 res2=00000003 errno=0
-func=rred op1=5e769ce8.e5b81ecc result=3cbe3687.0ec38ae6.70e res2=00000001 errno=0
-func=rred op1=5e779c2b.78c7a00f result=bcccaf47.30a1ae5c.cc2 res2=00000001 errno=0
-func=rred op1=5e8912da.4d4da221 result=3cbf6f86.f3ab6e87.c18 res2=00000003 errno=0
-func=rred op1=5e8dfebd.1c78a8cb result=bcba8b87.600be002.7f1 res2=00000001 errno=0
-func=rred op1=5e936ba0.13df9a6e result=3cc05443.6c49a914.891 res2=00000001 errno=0
-func=rred op1=5e95e191.7b751dc3 result=bcb95287.7b23fc61.2e7 res2=00000003 errno=0
-func=rred op1=5ea77a35.e4615ff2 result=3cc2c643.36197057.2a4 res2=00000001 errno=0
-func=rred op1=5eaf9761.8564eafa result=bcb1fc88.1db4a699.4ad res2=00000003 errno=0
-func=rred op1=5eb98180.cca242b4 result=3cc7aa42.c9b8fedc.6cb res2=00000001 errno=0
-func=rred op1=5ebd9016.9d240838 result=bca06911.eceb131d.8bd res2=00000003 errno=0
-func=rred op1=5ecc8c71.290396d7 result=3ca6b6ea.b011610c.87b res2=00000003 errno=0
-func=rred op1=5ece93bc.11447999 result=bcc616cc.98ef6b60.adc res2=00000001 errno=0
-func=rred op1=5ed5286b.81ba94c9 result=3cbeeb73.a686ea9b.4da res2=00000003 errno=0
-func=rred op1=5ed62c10.f5db062a result=bcb89d9a.e3609cac.51c res2=00000001 errno=0
-func=rred op1=5ee27a0e.22368523 result=bcc48356.6825d7e4.eec res2=00000003 errno=0
diff --git a/test/testcases/directed/rred4.tst b/test/testcases/directed/rred4.tst
deleted file mode 100644
index 1b84f45..0000000
--- a/test/testcases/directed/rred4.tst
+++ /dev/null
@@ -1,504 +0,0 @@
-; rred4.tst
-;
-; Copyright (c) 1999-2018, Arm Limited.
-; SPDX-License-Identifier: MIT
-
-func=rred op1=5ee8da6e.555f15d0 result=3ccad12f.2b4c25d3.eaa res2=00000001 errno=0
-func=rred op1=5ef7833f.a59d0dfd result=3c919ca2.3f5c493c.c76 res2=00000003 errno=0
-func=rred op1=5efb3542.79418f04 result=bca803d2.ba28019c.b3f res2=00000001 errno=0
-func=rred op1=5f014ca4.10454889 result=bcc66a06.9b751384.b8d res2=00000001 errno=0
-func=rred op1=5f0db9db.3af4d371 result=3ccf3857.bb233823.1c8 res2=00000003 errno=0
-func=rred op1=5f1467f1.daf12b43 result=bcc202de.0b9e0135.86f res2=00000003 errno=0
-func=rred op1=5f1e5090.43ed71be result=3c966ae3.892121b9.b5c res2=00000001 errno=0
-func=rred op1=5f25f598.c0471ca0 result=bcb26919.d7dfb92e.468 res2=00000003 errno=0
-func=rred op1=5f2fde37.2943631b result=3cd035f4.06ca3721.2c0 res2=00000003 errno=0
-func=rred op1=5f3355c3.e3c9e36e result=3cc469fe.b0806d73.fe2 res2=00000001 errno=0
-func=rred op1=5f3a2314.821a472f result=bc9ccea0.4d3ca145.ae7 res2=00000001 errno=0
-func=rred op1=5f44a5ae.52088007 result=3c900726.c505a22d.bd1 res2=00000003 errno=0
-func=rred op1=5f4fa07a.b22c0e57 result=bcc06834.ff3f04e8.8ee res2=00000001 errno=0
-func=rred op1=5f51e6fb.39ff9c73 result=3cba6cad.3a628a45.250 res2=00000003 errno=0
-func=rred op1=5f576461.6a11639b result=bca4cb0c.eab9d02e.cff res2=00000001 errno=0
-func=rred op1=5f634654.c6040e3d result=3cc13820.4e72adae.01c res2=00000001 errno=0
-func=rred op1=5f660507.de0cf1d1 result=bc830f98.96d0b804.4b7 res2=00000003 errno=0
-func=rred op1=5f75555b.180ab8ec result=3cab4a67.6457165a.674 res2=00000003 errno=0
-func=rred op1=5f76b4b4.a40f2ab6 result=bcb72cff.fd93e72f.596 res2=00000001 errno=0
-func=rred op1=5f802813.bc17239e result=bcf18ec6.9cbd007b.734 res2=00000003 errno=0
-func=rred op1=5f8f505b.de0ddc7d result=3cd37073.b19084f9.09f res2=00000003 errno=0
-func=rred op1=5f900004.52080ab1 result=3cc477cd.8b4150c3.cd7 res2=00000001 errno=0
-func=rred op1=5f9b5a5e.a40fa00c result=bc95a993.9294b35c.5f4 res2=00000003 errno=0
-func=rred op1=5fa30286.180a7e41 result=3cb5e002.7fb1e983.4f7 res2=00000001 errno=0
-func=rred op1=5fae5ce0.6a12139c result=bcd1b4ff.5da76cce.858 res2=00000001 errno=0
-func=rred op1=5fb483c6.fb0bb809 result=bcb03f2e.adef8685.477 res2=00000001 errno=0
-func=rred op1=5fb9d91d.c10e6644 result=3cc32ad0.0d5f5317.c39 res2=00000001 errno=0
-func=rred op1=5fc54467.6c8c54ed result=bcd71f64.424c99a5.9d5 res2=00000001 errno=0
-func=rred op1=5fca99be.328f0328 result=3cb0ac0c.8829f2d3.27e res2=00000001 errno=0
-func=rred op1=5fd42376.c24b6997 result=bc93f61c.29ab0224.dd4 res2=00000001 errno=0
-func=rred op1=5fda396d.f9ceb4b6 result=3cd755d3.2f69cfcc.8d8 res2=00000003 errno=0
-func=rred op1=5fe4539e.deab90d0 result=bcd17e90.708a36a7.954 res2=00000001 errno=0
-func=rred op1=5feac9e6.4eef2a61 result=3c9ac3f9.cd51c702.e52 res2=00000003 errno=0
-func=rred op1=5ff776ae.889d49fc result=bc8a507d.0c087a8d.aab res2=00000001 errno=0
-func=rred op1=5ffe1d1e.15410ac6 result=3cbe0e09.6ed2d654.9a8 res2=00000003 errno=0
-func=rred op1=600261c6.d0f265c8 result=3ccfb311.3f935dfd.752 res2=00000001 errno=0
-func=rred op1=600fdece.069a0e95 result=bcc59b23.fa6b89cd.b7f res2=00000001 errno=0
-func=rred op1=60119902.e675f77d result=bca3bc5d.c9065bea.401 res2=00000003 errno=0
-func=rred op1=6014ec3a.acc7d7e2 result=3ccc6901.9e124eab.bfd res2=00000003 errno=0
-func=rred op1=6022de3c.d460b08a result=bcd66da7.e2cbcda2.254 res2=00000003 errno=0
-func=rred op1=602c0f20.3cd9e36e result=3cc28ad2.b98f20b6.9fc res2=00000001 errno=0
-func=rred op1=6039c2e7.62bb96b5 result=3ca58a50.ce2b8dbf.29c res2=00000001 errno=0
-func=rred op1=603fa093.04e2e934 result=bc8318b0.f773b33a.03e res2=00000001 errno=0
-func=rred op1=6045adf5.2498c719 result=bcbcb393.2af6f0f4.eb3 res2=00000001 errno=0
-func=rred op1=604dd7d9.a0de6651 result=3cd1f20d.31d3831c.cfa res2=00000003 errno=0
-func=rred op1=6051dac2.a182dc68 result=3cc6bbdb.dda2c8f2.ca0 res2=00000003 errno=0
-func=rred op1=6057b86e.43aa2ee7 result=bc9ca509.732d8cd7.05d res2=00000003 errno=0
-func=rred op1=6066b331.b4217b00 result=bcd0241a.2cae5147.e5f res2=00000001 errno=0
-func=rred op1=6068bdaa.d332e2ce result=3cc1f5af.9fc5dc24.490 res2=00000003 errno=0
-func=rred op1=607341bd.9b4977cd result=bcd28730.4b9cc7af.267 res2=00000001 errno=0
-func=rred op1=607c2f1e.ec0ae601 result=3cb0d2ae.4818050e.8e2 res2=00000003 errno=0
-func=rred op1=60820ba1.d6a1d027 result=3c9d1957.3178adc6.30f res2=00000003 errno=0
-func=rred op1=6089f3c6.97da8a74 result=bca7a4b6.562b0f90.ef4 res2=00000003 errno=0
-func=rred op1=6094e208.0d25ff87 result=bcc901de.8cfe771e.3fb res2=00000003 errno=0
-func=rred op1=609f0585.228f1561 result=3c85d283.6d3678d5.06c res2=00000001 errno=0
-func=rred op1=60a376d4.f1e3e7d7 result=bcc1bb88.c0a04bac.b37 res2=00000001 errno=0
-func=rred op1=60a88893.7c9872c4 result=3cb146fc.066325fd.b95 res2=00000003 errno=0
-func=rred op1=60b2c13b.6442dbff result=bc9976e9.3f1fa64c.d7c res2=00000001 errno=0
-func=rred op1=60be4feb.94ee0989 result=3cd2de6a.9a552062.86d res2=00000003 errno=0
-func=rred op1=60c8e360.4368f8b0 result=3c922e1d.9b4d4b5d.35e res2=00000001 errno=0
-func=rred op1=60cf6051.e95f9b4d result=bcc55ef2.a2c16625.488 res2=00000001 errno=0
-func=rred op1=60d293d5.00da9909 result=3cc38cbf.b9cccf69.601 res2=00000003 errno=0
-func=rred op1=60df32eb.85f75857 result=bcb4eb61.d84c5375.8a4 res2=00000001 errno=0
-func=rred op1=60e2aa88.328eba84 result=3cab452c.68f3f10b.d0d res2=00000003 errno=0
-func=rred op1=60e8fa13.751d1a2b result=bcc73125.8bb5fce1.310 res2=00000001 errno=0
-func=rred op1=60f5c6f4.3afbd99a result=3cbfd0b3.cfc743e3.1e4 res2=00000003 errno=0
-func=rred op1=60fc167f.7d8a3941 result=bcd60e43.b201282b.5da res2=00000003 errno=0
-func=rred op1=61011c52.2e582af9 result=3cc8ff68.b58a47a0.2a1 res2=00000003 errno=0
-func=rred op1=610da4b5.81c0c8cc result=bce57cd2.c526bdd0.73f res2=00000003 errno=0
-func=rred op1=611049dd.9362d276 result=3cf61b3b.e3a3ae02.7ba res2=00000001 errno=0
-func=rred op1=611feeac.ef388f5f result=bcd1fa3c.d4c33400.bdd res2=00000001 errno=0
-func=rred op1=61256913.865b3e16 result=bca08f17.66fc9079.756 res2=00000003 errno=0
-func=rred op1=6126f749.8a91cda1 result=3ca3cd23.cf9e0640.f65 res2=00000003 errno=0
-func=rred op1=6130ed61.d407dd37 result=3ce1252c.24dd8255.9e8 res2=00000003 errno=0
-func=rred op1=613e8f67.45524d96 result=bcce996f.288ab7b8.4df res2=00000001 errno=0
-func=rred op1=6140d5e9.a6dfb656 result=3ca70b30.383f7c08.774 res2=00000001 errno=0
-func=rred op1=614b8a73.6a0d5561 result=bc9425fd.2b7349d4.e73 res2=00000003 errno=0
-func=rred op1=61531f7e.969d7a36 result=bcb59896.b1d962ee.af3 res2=00000001 errno=0
-func=rred op1=615940de.7a4f9181 result=3cc14864.2a2f9d06.597 res2=00000003 errno=0
-func=rred op1=6161fab4.1ebe9846 result=3c772998.6661919c.80a res2=00000003 errno=0
-func=rred op1=616caf3d.e1ec3751 result=bcd03271.05630a33.036 res2=00000003 errno=0
-func=rred op1=61728d19.5aae093e result=bcc4df49.eea65661.cb3 res2=00000001 errno=0
-func=rred op1=617af80e.2e1de469 result=3c915f32.4cc92d35.607 res2=00000001 errno=0
-func=rred op1=6181b181.80c6dfca result=3cc93716.81d8a1af.235 res2=00000001 errno=0
-func=rred op1=618b4140.cc159ce5 result=bcc1fa16.e1da242e.3b2 res2=00000001 errno=0
-func=rred op1=6191d61a.cfc2bc08 result=3ccc1c49.8ea4d3e2.b36 res2=00000001 errno=0
-func=rred op1=619b1ca7.7d19c0a7 result=bcbb4494.9d4fb1c1.c60 res2=00000003 errno=0
-func=rred op1=61a1e867.7740aa27 result=3cd0f357.d41e9c24.e9c res2=00000001 errno=0
-func=rred op1=61ab0a5a.d59bd288 result=bca3cac4.a10d0918.cb0 res2=00000003 errno=0
-func=rred op1=61b68287.7a2d3567 result=3caa886c.2bb61a20.363 res2=00000003 errno=0
-func=rred op1=61bf922e.310a6fa9 result=bcca6cdf.abfa8fa0.d89 res2=00000001 errno=0
-func=rred op1=61c447c4.2034dde6 result=bcbdb026.f1938da5.309 res2=00000001 errno=0
-func=rred op1=61cd451e.2f942a09 result=3cb0a309.db2f9593.d0b res2=00000001 errno=0
-func=rred op1=61d0e678.c5816395 result=bcc8bd75.c9504b5e.fdd res2=00000003 errno=0
-func=rred op1=61d9e3d2.d4e0afb8 result=3cc595bb.0372d7da.037 res2=00000003 errno=0
-func=rred op1=61e3b480.1fd74c7e result=3c8caf66.265cec13.86e res2=00000003 errno=0
-func=rred op1=61e715cb.7a8ac6cf result=bcb034d7.dc416b96.5a3 res2=00000001 errno=0
-func=rred op1=61f09cd6.c5529ae1 result=bcd2e549.6fda21b8.2ed res2=00000003 errno=0
-func=rred op1=61fd8ec0.2fc2f2bd result=3ca5838c.9cc5b10e.a52 res2=00000001 errno=0
-func=rred op1=6206f0fa.7a736275 result=3cccc194.8d0a12de.e53 res2=00000003 errno=0
-func=rred op1=620a5245.d526dcc6 result=bcb5a7e9.6a1ffea5.61c res2=00000003 errno=0
-func=rred op1=6210659d.452f845a result=3cd02bc0.a8ead830.ab0 res2=00000001 errno=0
-func=rred op1=62170362.fa7f14a2 result=bc9d40d9.5bc6226e.793 res2=00000003 errno=0
-func=rred op1=62255bf1.8d2b3090 result=3cb55f2f.cf6b6377.e89 res2=00000003 errno=0
-func=rred op1=6228aad4.67d2f8b4 result=bcc95004.9598c2f3.30e res2=00000001 errno=0
-func=rred op1=62362faa.43d52299 result=3c9afb0c.86214902.b01 res2=00000001 errno=0
-func=rred op1=6237d71b.b12906ab result=bcd0501d.764525c7.679 res2=00000003 errno=0
-func=rred op1=6240d8ad.e08a5675 result=bc9f86a6.316afbda.424 res2=00000003 errno=0
-func=rred op1=624b86a6.a71feebd result=3cc16e5b.093e03fc.a05 res2=00000001 errno=0
-func=rred op1=6253842c.122fbc87 result=3c966f72.dad7962b.1de res2=00000001 errno=0
-func=rred op1=625f05dd.8f6f46d8 result=bcca72eb.006b2fa9.157 res2=00000001 errno=0
-func=rred op1=62622e6c.f95d097e result=bca44eec.c3ff30c4.b35 res2=00000003 errno=0
-func=rred op1=6264d9eb.2b026f90 result=3cc04b74.9e6b9746.bbc res2=00000001 errno=0
-func=rred op1=627b45a3.760b8e3d result=bcbe7663.25fec927.0cf res2=00000001 errno=0
-func=rred op1=627c9b62.8ede4146 result=3ca88ff8.f1affb91.888 res2=00000003 errno=0
-func=rred op1=628764e7.c41da562 result=bca00de0.964e65f7.de1 res2=00000001 errno=0
-func=rred op1=6288baa6.dcf0586b result=3cd35d73.bca196b8.ecd res2=00000001 errno=0
-func=rred op1=6294c9aa.5ebd5770 result=bcc85264.e992ca42.aad res2=00000001 errno=0
-func=rred op1=629a0025.297df354 result=3cb08908.a688c895.997 res2=00000003 errno=0
-func=rred op1=62a61749.116d7e69 result=bcd02caa.9a5cfe9f.4cf res2=00000003 errno=0
-func=rred op1=62a8b286.76cdcc5b result=3c5eca04.0e98a76e.d7b res2=00000001 errno=0
-func=rred op1=62b2327d.2c6e4f86 result=bcaf2571.0c2806b4.457 res2=00000003 errno=0
-func=rred op1=62bf328f.c12d4930 result=3cb17f58.c6fd8dd1.103 res2=00000001 errno=0
-func=rred op1=62c61951.2af6216d result=3cc948b5.0a078f7e.219 res2=00000003 errno=0
-func=rred op1=62cb4bbb.c2a57749 result=bcc75c14.c91e0507.341 res2=00000001 errno=0
-func=rred op1=62d0e5e2.86827a0f result=bcab4c30.8a54f1c6.6a8 res2=00000003 errno=0
-func=rred op1=62d765eb.d0e1f6e4 result=3cca3f05.2a7c54b9.985 res2=00000003 errno=0
-func=rred op1=62e4cc34.7ea82335 result=bca399af.86aec7ea.b49 res2=00000003 errno=0
-func=rred op1=62ec98d8.6ef37581 result=3cb931d9.caa3b7ac.c62 res2=00000001 errno=0
-func=rred op1=62f6bf5d.7abaf7c8 result=bc80d2b5.fd89d0cd.22e res2=00000003 errno=0
-func=rred op1=62faa5af.72e0a0ee result=3cc0722d.6724f0c4.3e0 res2=00000001 errno=0
-func=rred op1=63013929.b195f99d result=3cd9b86f.7a900633.2f3 res2=00000001 errno=0
-func=rred op1=630e38ba.3ff2ca86 result=bcd31319.d6c27964.4b8 res2=00000001 errno=0
-func=rred op1=63110f86.1c0c39d6 result=bc993c10.fc4eb933.b45 res2=00000001 errno=0
-func=rred op1=631e625d.d57c8a4d result=3ccdbcd8.aec00a62.058 res2=00000003 errno=0
-func=rred op1=6323e771.cb6398cf result=bcad70be.7bb12d66.fd1 res2=00000001 errno=0
-func=rred op1=632b8a72.26252b54 result=3cde436e.5eac58e8.6e9 res2=00000003 errno=0
-func=rred op1=633181e7.75ae7f09 result=bce4ea25.be7d8c3a.bb5 res2=00000003 errno=0
-func=rred op1=633ed4bf.2f1ecf80 result=3cd7f46a.1f98aa9b.818 res2=00000003 errno=0
-func=rred op1=6342b4ac.a0890bec result=bce8983d.8df3b1e7.9af res2=00000001 errno=0
-func=rred op1=634da1fa.0444429d result=3ccae170.c2451036.977 res2=00000003 errno=0
-func=rred op1=6355ecca.387c8ebd result=3ca76835.15632cd8.af6 res2=00000003 errno=0
-func=rred op1=6358c4b5.e7d3edb6 result=bc947a6d.cb60e983.2cc res2=00000003 errno=0
-func=rred op1=63621232.5298b4cd result=bcd21a5c.da3fdf65.55b res2=00000003 errno=0
-func=rred op1=636f7739.7d0f269f result=3cc9f782.cecf4a09.14f res2=00000001 errno=0
-func=rred op1=6373ff7e.458aa1c5 result=bcc8809f.29ce285e.53b res2=00000001 errno=0
-func=rred op1=637d89ed.8a1d39a7 result=3ca018c5.79b4fb6c.9ba res2=00000003 errno=0
-func=rred op1=6384f624.3f039841 result=bc8186a1.46afb85a.446 res2=00000001 errno=0
-func=rred op1=6389bb5b.e14ce432 result=3ccb6e66.73d06bb3.d64 res2=00000003 errno=0
-func=rred op1=6390ac3f.9976c78e result=bcb6ab41.f436e08e.755 res2=00000001 errno=0
-func=rred op1=63994008.e49068f4 result=3cabcfe2.a1be08c2.a63 res2=00000003 errno=0
-func=rred op1=63a0e9e9.17d5052d result=3cc93d92.4afa74a8.8dc res2=00000001 errno=0
-func=rred op1=63ad4c44.0bbefc08 result=bcbf6e92.978ebcbb.978 res2=00000001 errno=0
-func=rred op1=63b2f006.ab6c4eb7 result=3cc4dbe9.f94e8691.fca res2=00000001 errno=0
-func=rred op1=63bb4626.7827b27e result=bc8cf57f.ae859fc7.8a7 res2=00000003 errno=0
-func=rred op1=63c3f315.7537f37c result=3cb83132.abed54c9.b4e res2=00000001 errno=0
-func=rred op1=63cc4935.41f35743 result=bcd09ef5.493b8b5c.081 res2=00000001 errno=0
-func=rred op1=63d14c9b.bd8bb8c0 result=bcc355f9.41981256.bd1 res2=00000003 errno=0
-func=rred op1=63d79c9d.f6afd2fd result=3cb0f3d2.c04becd7.d24 res2=00000003 errno=0
-func=rred op1=63e29fd8.9961d61e result=3ca36ce5.a95509cb.df5 res2=00000001 errno=0
-func=rred op1=63e64961.1ad9b59f result=bcca9359.2d397a48.9fb res2=00000003 errno=0
-func=rred op1=63f6f2ff.88c4c44e result=bcb33f0c.d9db1ae1.9ac res2=00000001 errno=0
-func=rred op1=63fbefc4.e612c12d result=3cbd2358.7dff8eb1.cf0 res2=00000003 errno=0
-func=rred op1=6404c96c.11134d36 result=3c46ec67.bcf77522.4bc res2=00000003 errno=0
-func=rred op1=64091c93.00763b66 result=bcd34a83.0db9969c.2be res2=00000001 errno=0
-func=rred op1=6415de35.ccec08c2 result=bcc32820.721e236c.787 res2=00000001 errno=0
-func=rred op1=641f2e22.199cf3d1 result=3c61314d.cdb997d9.b8d res2=00000001 errno=0
-func=rred op1=64243f07.3326ef70 result=3cc3b1aa.e08bf02b.463 res2=00000001 errno=0
-func=rred op1=642fb886.f7895197 result=bcc2cc6e.d32a4597.ef4 res2=00000001 errno=0
-func=rred op1=64348439.a21d1e53 result=3cc40d5c.7f7fcdff.cf6 res2=00000001 errno=0
-func=rred op1=643f7354.889322b4 result=bcc242e4.64bc78d9.218 res2=00000003 errno=0
-func=rred op1=6449d92d.dddd0912 result=3cc52071.5c5b677d.6af res2=00000001 errno=0
-func=rred op1=644a1e60.4cd337f5 result=bcc18b81.26d4bd30.0f2 res2=00000003 errno=0
-func=rred op1=6457514c.f7782b24 result=3cc68f37.d82adecf.8fb res2=00000001 errno=0
-func=rred op1=645ca641.333815e3 result=bcbecaae.da3b1469.b01 res2=00000003 errno=0
-func=rred op1=64660d5c.8445bc2d result=3cc96cc4.cfc9cd73.d93 res2=00000001 errno=0
-func=rred op1=646dea31.a66a84da result=bcb63207.f35e487c.d3a res2=00000003 errno=0
-func=rred op1=64703909.4667b164 result=3ccc4a51.c768bc18.22a res2=00000001 errno=0
-func=rred op1=647959ce.dbbee908 result=bca577a8.29c51bd7.5b8 res2=00000003 errno=0
-func=rred op1=6487119d.76691b1f result=3ca86127.5029ce6d.3c1 res2=00000003 errno=0
-func=rred op1=648ba200.4114b6f1 result=bccb8ff1.fdcf8f72.aa8 res2=00000001 errno=0
-func=rred op1=6493035b.24cf2ec6 result=bcc019be.1f53d4e1.84a res2=00000001 errno=0
-func=rred op1=649d6811.2d58d561 result=3cab4aa6.768e8103.1ca res2=00000001 errno=0
-func=rred op1=64a62e95.00470be7 result=bcd2c8b3.248c785c.701 res2=00000001 errno=0
-func=rred op1=64aa3cd7.51e0f840 result=3cc3033d.45b88777.653 res2=00000003 errno=0
-func=rred op1=64b049a5.84685941 result=3cb08ed2.61abf317.6ee res2=00000001 errno=0
-func=rred op1=64b374df.5fe03662 result=bc93a357.2064a2ff.b28 res2=00000003 errno=0
-func=rred op1=64ca0415.34587472 result=3cbc34ce.fb3ebd6e.f11 res2=00000001 errno=0
-func=rred op1=64cd2f4f.0fd05193 result=bcad7502.b096f47f.8bd res2=00000001 errno=0
-func=rred op1=64d02d44.75a4175a result=bcccd4e8.d5ead8f7.3e7 res2=00000001 errno=0
-func=rred op1=64d6bc7a.4a1c556a result=3cb26323.6b0c6bef.17d res2=00000003 errno=0
-func=rred op1=64e518ac.d4fe45e6 result=bc74033b.55837109.aae res2=00000003 errno=0
-func=rred op1=64e86047.bf3a64ee result=3cd2b330.586279b3.3e8 res2=00000001 errno=0
-func=rred op1=64f5ea93.8f8d4da8 result=3cc1c309.90605066.ca8 res2=00000001 errno=0
-func=rred op1=64ffa503.3f7d68d9 result=bc8e04d9.0045298e.805 res2=00000001 errno=0
-func=rred op1=6504afb9.77b6c205 result=bcc583a4.b068f598.9a9 res2=00000001 errno=0
-func=rred op1=650581a0.3245c9c7 result=3cc082d5.db081956.2fd res2=00000003 errno=0
-func=rred op1=651a2a5e.5b9a156f result=bcc9443f.d0719aca.6a9 res2=00000003 errno=0
-func=rred op1=651a9351.b8e19950 result=3cb98475.75fee848.bf9 res2=00000001 errno=0
-func=rred op1=65225b5a.630c9c31 result=bccbc4a7.3b2208eb.9ff res2=00000003 errno=0
-func=rred op1=6527d5ff.46efef9b result=3caf05af.967a5f87.d43 res2=00000001 errno=0
-func=rred op1=6531312a.d8b78947 result=3c9604e8.81eddcfc.52b res2=00000001 errno=0
-func=rred op1=653bbd81.4336ac3a result=bcad0402.6a0ff395.2c7 res2=00000001 errno=0
-func=rred op1=65448395.0fd3bc71 result=3cc24374.db7aeb63.747 res2=00000003 errno=0
-func=rred op1=654f0feb.7a52df64 result=bc8bfc67.a0885a63.671 res2=00000003 errno=0
-func=rred op1=6552da5f.f445a2dc result=3cc7c4ae.fbf662a2.892 res2=00000001 errno=0
-func=rred op1=655d66b6.5ec4c5cf result=bcc041c7.af107f70.cca res2=00000001 errno=0
-func=rred op1=65674bf0.9bbe278b result=bca4fd4d.b86643ca.8d5 res2=00000001 errno=0
-func=rred op1=6568f525.b74c4120 result=3cc44522.07e55756.1c4 res2=00000003 errno=0
-func=rred op1=65729558.9eacbed4 result=bcd121aa.ec14c243.e7e res2=00000001 errno=0
-func=rred op1=657c0288.98cf9042 result=3cba8c10.3f86817a.84f res2=00000003 errno=0
-func=rred op1=6585c53f.2afc7ffa result=3ca91bb8.de84a891.a2d res2=00000003 errno=0
-func=rred op1=658d893a.099137d3 result=bc770576.101d8e8e.218 res2=00000003 errno=0
-func=rred op1=6592a69a.7412f7d6 result=bcaedd16.628c0c35.2b4 res2=00000003 errno=0
-func=rred op1=6598e3e3.e1e6081e result=3cd0697f.3b93d5cf.76d res2=00000001 errno=0
-func=rred op1=65a435ec.cf87bbe8 result=3ca35a5b.5a7d44ee.1a7 res2=00000001 errno=0
-func=rred op1=65abf9e7.ae1c73c1 result=bcc725d0.c9e90927.e07 res2=00000001 errno=0
-func=rred op1=65b36e43.a1cd59df result=bcb52fe8.b54d69be.1e0 res2=00000003 errno=0
-func=rred op1=65be50e3.374b99dc result=3cbd0789.07bbe765.27b res2=00000003 errno=0
-func=rred op1=65c87bbe.d5af48d9 result=bcc05951.deae1882.976 res2=00000003 errno=0
-func=rred op1=65c94368.0369aae2 result=3cc830f2.311c9629.a11 res2=00000001 errno=0
-func=rred op1=65d1af2f.3596c46b result=3cd0ef0f.ef2d9c50.572 res2=00000003 errno=0
-func=rred op1=65db027c.6fa04056 result=bccbdc0c.e6bcdfc9.a82 res2=00000003 errno=0
-func=rred op1=65e28eb9.6bb20f25 result=bcb10363.187f35b7.1b5 res2=00000003 errno=0
-func=rred op1=65e51577.05a306a2 result=3c82b7c2.0ff079b7.f95 res2=00000001 errno=0
-func=rred op1=65fd1974.ee839276 result=bcbfafcd.ef005c37.377 res2=00000003 errno=0
-func=rred op1=65ffa032.887489f3 result=3c9c13a3.17e8b693.f5f res2=00000003 errno=0
-func=rred op1=66011378.1132c0b8 result=3cc6dccf.bd7a5bc0.993 res2=00000003 errno=0
-func=rred op1=66091775.fa134c8c result=bcbb01dd.6b043dc9.392 res2=00000001 errno=0
-func=rred op1=66131477.8b6ae3ad result=3ccb8ac0.41767a2e.979 res2=00000003 errno=0
-func=rred op1=66171676.7fdb2997 result=bcb1a5fc.630c00ed.3c7 res2=00000001 errno=0
-func=rred op1=6620d099.01565674 result=bca09436.b6278822.7fa res2=00000001 errno=0
-func=rred op1=662b5b54.8427d9c5 result=3ca4db4d.69b96b4d.730 res2=00000001 errno=0
-func=rred op1=6632f308.037cae8b result=3cbd2568.c4cd2f5e.b2d res2=00000001 errno=0
-func=rred op1=663938e5.820181ae result=bcb8de52.113b4c33.bf7 res2=00000003 errno=0
-func=rred op1=664504bf.41abec11 result=bcc4b944.63b16a2b.1f8 res2=00000001 errno=0
-func=rred op1=664f8f7a.c47d6f62 result=3cc0b63f.bc2f8944.d32 res2=00000001 errno=0
-func=rred op1=66583009.e2e9e2eb result=3c510483.04009129.bf8 res2=00000001 errno=0
-func=rred op1=665c6430.233f7888 result=bcb05024.aa1785dd.d8a res2=00000003 errno=0
-func=rred op1=6662663e.51f551e1 result=bcc8bc49.0b334b11.6bf res2=00000003 errno=0
-func=rred op1=666df9d5.73de73f5 result=3cc9446d.23534f9a.b9e res2=00000001 errno=0
-func=rred op1=667116fd.da1a04c9 result=3cb1606c.da578ef0.749 res2=00000001 errno=0
-func=rred op1=667f4915.ebb9c10d result=bcae7fb8.f3aef996.795 res2=00000003 errno=0
-func=rred op1=6684a383.de81f3da result=3cb270b5.0a979803.109 res2=00000001 errno=0
-func=rred op1=668bbc8f.e751d1fc result=bcac5f28.932ee771.416 res2=00000003 errno=0
-func=rred op1=66916acd.f810d80f result=bcc767ee.cee33fba.290 res2=00000001 errno=0
-func=rred op1=669ef545.cdc2edc7 result=3ccba90f.8fe36404.98d res2=00000003 errno=0
-func=rred op1=66a140e5.e9156e6c result=3cb6b1d5.cb97bc4d.807 res2=00000001 errno=0
-func=rred op1=66af1f2d.dcbe576a result=bc96b54b.1e5cac8f.03d res2=00000003 errno=0
-func=rred op1=66b67eba.e833a034 result=bcc1063d.ad63094a.813 res2=00000001 errno=0
-func=rred op1=66b9e158.dda025a2 result=3cd10560.58b1cd3a.205 res2=00000003 errno=0
-func=rred op1=66c3dfd0.68a48750 result=3ca6ae60.78d2cc0b.fd1 res2=00000003 errno=0
-func=rred op1=66cacef4.6278fbcf result=bcc6b390.74fa346e.422 res2=00000003 errno=0
-func=rred op1=66d97f7f.22b16f5d result=bca6bc35.c3e68d12.0a8 res2=00000003 errno=0
-func=rred op1=66ddcfb8.9cf6caf8 result=3cc102c8.5a9e1908.fdd res2=00000001 errno=0
-func=rred op1=66e8d7c4.82cda924 result=3ccc59f8.97077f0e.fc6 res2=00000003 errno=0
-func=rred op1=66ee7773.3cda9131 result=bca6ca0b.0efa4e18.17e res2=00000001 errno=0
-func=rred op1=66f163d6.5b8ff666 result=3cd3d894.69b8728a.7d7 res2=00000001 errno=0
-func=rred op1=66fbfb79.2fc60047 result=bcc1109d.a5b1da0f.0b3 res2=00000003 errno=0
-func=rred op1=670025d9.5505adf1 result=3ce26dae.622b45c9.bda res2=00000003 errno=0
-func=rred op1=670fb570.4364d9a6 result=bcc11e72.f0c59b15.18a res2=00000003 errno=0
-func=rred op1=671118b5.283cb548 result=bca71d0a.d170d43c.684 res2=00000001 errno=0
-func=rred op1=671256b2.2ec6fdbd result=3ca63fb6.2034c3db.91f res2=00000003 errno=0
-func=rred op1=6729a50f.bc5b0fec result=bcc155c8.1d149f2d.4e3 res2=00000003 errno=0
-func=rred op1=672ae30c.c2e55861 result=3ca56261.6ef8b37a.bba res2=00000003 errno=0
-func=rred op1=67355ee2.724be29a result=bccce44d.85cd094b.825 res2=00000001 errno=0
-func=rred op1=673f293a.0cf485b3 result=3ca3a7b8.0c8092b9.0f1 res2=00000003 errno=0
-func=rred op1=67433bcb.cd444bf1 result=bcda00ac.2b9eeec3.f54 res2=00000001 errno=0
-func=rred op1=674d0623.67ecef0a result=3cbf363d.7538fcd7.433 res2=00000001 errno=0
-func=rred op1=6750a628.58fe0e2e result=3ca03265.47905135.b5e res2=00000003 errno=0
-func=rred op1=6752c93e.fe05a4d7 result=bcae07b0.5b515743.1a9 res2=00000001 errno=0
-func=rred op1=6768f93c.857d1545 result=3cb84b97.eb5879d0.90d res2=00000001 errno=0
-func=rred op1=676b1c53.2a84abee result=bcb5ee7d.b7892ea8.3fa res2=00000001 errno=0
-func=rred op1=6775e13d.c1c15d0e result=bc96f061.bfe375ca.26e res2=00000003 errno=0
-func=rred op1=677e3451.ee406425 result=3ca4ec99.af2ee786.586 res2=00000001 errno=0
-func=rred op1=678343b3.0d5fb59e result=3cbaa8b2.1f27c4f8.e21 res2=00000003 errno=0
-func=rred op1=67887ec8.7623047e result=bcc8cc89.ef859d61.848 res2=00000001 errno=0
-func=rred op1=67973003.1bf230c6 result=bcce88a2.5f7e7ad4.0e3 res2=00000003 errno=0
-func=rred op1=679f8317.487137dd result=3c8dc282.fa227975.d9e res2=00000003 errno=0
-func=rred op1=67a539db.14a8f332 result=bc9eff82.02b5aed9.60c res2=00000001 errno=0
-func=rred op1=67aedbb4.9b58ce01 result=3cc6c8c1.ded10f1d.b60 res2=00000003 errno=0
-func=rred op1=67b4e629.be1cbe44 result=3cb6a121.fdbea871.452 res2=00000003 errno=0
-func=rred op1=67bfd6c8.9efd6ccb result=bcb73fa1.82084323.089 res2=00000003 errno=0
-func=rred op1=67c51002.6962d8bb result=3c9c8583.f18f4412.530 res2=00000001 errno=0
-func=rred op1=67cfacef.f3b75254 result=bca0bcc0.09ee0cd0.374 res2=00000003 errno=0
-func=rred op1=67da498c.d8ea084c result=3cc271f1.fb43253d.375 res2=00000001 errno=0
-func=rred op1=67da7365.843022c3 result=bcc3aef1.03d65aa0.be3 res2=00000003 errno=0
-func=rred op1=67e7c1b3.f6c97dbf result=bcb91b20.0ee51338.52e res2=00000001 errno=0
-func=rred op1=67ecfb3e.6650ad50 result=3cb42723.ec983daa.376 res2=00000003 errno=0
-func=rred op1=67f668db.30162b3d result=3c8b531f.155186d0.018 res2=00000001 errno=0
-func=rred op1=67fe5417.2d03ffd2 result=bcaaa4b8.4e87b7ec.6e2 res2=00000003 errno=0
-func=rred op1=68071547.936fd47e result=bcc765ee.1d8ffacb.52c res2=00000003 errno=0
-func=rred op1=680da7aa.c9aa5691 result=3cbafbeb.b1ec9f5e.37d res2=00000001 errno=0
-func=rred op1=6812c973.634c1593 result=bc99f651.87bde908.dab res2=00000001 errno=0
-func=rred op1=681a0842.fce040e7 result=3cc0e859.bba08089.1c1 res2=00000003 errno=0
-func=rred op1=6820f9bf.7ce70abe result=bcc09126.583b9917.526 res2=00000003 errno=0
-func=rred op1=68249927.49b12068 result=3c9cafec.a2e52497.284 res2=00000001 errno=0
-func=rred op1=683d1607.0824a5c7 result=bcb2ca56.5f049fe3.10a res2=00000001 errno=0
-func=rred op1=683ee5ba.ee89b09c result=3cb583f1.7a2bdb71.5e3 res2=00000003 errno=0
-func=rred op1=6847efbd.35b85dad result=bcc66053.f3614475.f5b res2=00000001 errno=0
-func=rred op1=6849bf71.1c1d6882 result=3cc1edf3.e5cf36de.792 res2=00000001 errno=0
-func=rred op1=68520602.607afc5b result=3cc919ef.0e888004.434 res2=00000003 errno=0
-func=rred op1=685fa92b.f15ac9d4 result=bcd0ff57.94d64d99.9e2 res2=00000001 errno=0
-func=rred op1=686a2129.9d85f51e result=bca53b0a.1b1dda70.4ff res2=00000001 errno=0
-func=rred op1=686cb44e.86bc192b result=3c8dd38a.1f1d289b.617 res2=00000003 errno=0
-func=rred op1=687236de.a12f42a9 result=3cc7612a.1c1dadfb.144 res2=00000001 errno=0
-func=rred op1=687f784f.b0a68386 result=bcdd7a15.44570d5b.7c3 res2=00000003 errno=0
-func=rred op1=6884e271.aabf89dd result=bc894514.2e3d188a.7cd res2=00000003 errno=0
-func=rred op1=68877596.93f5adea result=3ccb1b9b.6001530e.807 res2=00000003 errno=0
-func=rred op1=6890f983.3cc14236 result=bcb863ac.a0e57d81.9f8 res2=00000001 errno=0
-func=rred op1=6898cb60.18bdd184 result=3ca78245.138de278.c23 res2=00000003 errno=0
-func=rred op1=68a04e9e.7a5d3069 result=3cc7f2f8.da39affd.30e res2=00000001 errno=0
-func=rred op1=68ad5f33.49202af8 result=bcc2831b.5c0204e3.6ef res2=00000001 errno=0
-func=rred op1=68b29888.128e5d23 result=3cc1a1b3.ceaa69da.91a res2=00000001 errno=0
-func=rred op1=68bb1549.b0eefe3e result=bcab07e3.48ec4e9c.376 res2=00000003 errno=0
-func=rred op1=68c3bd7c.dea6f380 result=3ca3fca6.de2f7655.4d1 res2=00000001 errno=0
-func=rred op1=68cc3a3e.7d07949b result=bcd5e417.c51f8eb6.f5e res2=00000001 errno=0
-func=rred op1=68d76963.47caf8df result=bcb1098f.d9d49371.90d res2=00000003 errno=0
-func=rred op1=68dd9c3b.4dfa6d40 result=3cbdfafa.4d47317f.f3a res2=00000003 errno=0
-func=rred op1=68e8acdc.1650b060 result=3cc8fbd0.95bb53ea.a06 res2=00000001 errno=0
-func=rred op1=68ec58c2.7f74b5bf result=bcb814cc.44916bb8.7b2 res2=00000003 errno=0
-func=rred op1=68f145cd.42d21510 result=3cd17d12.0269878a.a37 res2=00000003 errno=0
-func=rred op1=68fed072.1b49942f result=bcc315a2.8d058e23.27d res2=00000003 errno=0
-func=rred op1=690009f5.74e7a5d8 result=3ce03d47.94869025.4ea res2=00000001 errno=0
-func=rred op1=690d949a.4d5f24f7 result=bcd59537.68cb7ced.d17 res2=00000001 errno=0
-func=rred op1=6910a7e1.5bdcdd74 result=3cf0dd2c.cb780bd7.f90 res2=00000003 errno=0
-func=rred op1=691f6e5e.023ecbcb result=bce1d5d8.1f2296bd.d30 res2=00000001 errno=0
-func=rred op1=692058eb.686241a6 result=3d008d3a.2fff4dfe.a3d res2=00000001 errno=0
-func=rred op1=692fbd53.f5b96799 result=bcf135f2.e8311b0b.28a res2=00000003 errno=0
-func=rred op1=69303170.6ea4f3bf result=3d106540.e242ef11.f93 res2=00000001 errno=0
-func=rred op1=693fe4ce.ef76b580 result=bd00e600.4cb85d31.d36 res2=00000003 errno=0
-func=rred op1=69441c5f.ceb2921d result=bc71a702.80a2b3b4.b70 res2=00000001 errno=0
-func=rred op1=694443da.c86fe004 result=3cb2e236.b6254b1a.01a res2=00000003 errno=0
-func=rred op1=695e16d2.392d3438 result=bcb74bf7.564df807.2f6 res2=00000001 errno=0
-func=rred op1=695e3e4d.32ea821f result=3cb0ad56.6610f4a3.6ac res2=00000001 errno=0
-func=rred op1=696905db.87113c37 result=bcd05e89.58b04eca.182 res2=00000003 errno=0
-func=rred op1=69692d56.80ce8a1e result=3cacf0ec.2bf93c59.a7c res2=00000003 errno=0
-func=rred op1=6971a7a1.f2833d10 result=3cca1e71.c1239a30.6b9 res2=00000001 errno=0
-func=rred op1=697ba214.5cfddf2b result=bcc00fbc.4b4fa8f0.c57 res2=00000001 errno=0
-func=rred op1=69805985.878ceb96 result=3c9693d3.56ad1149.e18 res2=00000003 errno=0
-func=rred op1=6987df3a.15d838a4 result=bcc4797c.eb7855dd.f33 res2=00000001 errno=0
-func=rred op1=69988648.4b536161 result=3cb0eede.8101ccf7.692 res2=00000001 errno=0
-func=rred op1=699c4922.927907e8 result=bcbda910.2b9a2316.f5b res2=00000003 errno=0
-func=rred op1=69a28e79.c5dd5338 result=3cd2b42d.b63d116a.ae3 res2=00000001 errno=0
-func=rred op1=69ae7e16.d0c96f8a result=bc9c54f3.53b44734.508 res2=00000003 errno=0
-func=rred op1=69b76bce.2c2b2d90 result=3caefd2d.037ffef9.9ad res2=00000003 errno=0
-func=rred op1=69bd639c.b1a13bb9 result=bcd099d7.4b0855fe.bfe res2=00000001 errno=0
-func=rred op1=69c2c82f.bab3d8c2 result=bcc5e9c4.eaba2358.8ef res2=00000001 errno=0
-func=rred op1=69caf4f2.7e7a4e8d result=3c7541cd.7e5dbe2a.523 res2=00000001 errno=0
-func=rred op1=69d190da.a120622c result=3cc73de1.c29fff3b.341 res2=00000001 errno=0
-func=rred op1=69d519fe.f36f8329 result=bca9acb9.a3e88f6f.064 res2=00000003 errno=0
-func=rred op1=69e80778.b8f4e8db result=bca45c46.44511fe4.71b res2=00000001 errno=0
-func=rred op1=69ede26c.43ffb43f result=3cb4cf09.e1576f07.61f res2=00000003 errno=0
-func=rred op1=69f97e35.9bb79bb4 result=bc9376bf.0a44819e.913 res2=00000001 errno=0
-func=rred op1=69fc6baf.613d0166 result=3cba1f7d.40eede91.f68 res2=00000003 errno=0
-func=rred op1=6a012351.7623e665 result=3cd60675.d1fbb721.4b0 res2=00000003 errno=0
-func=rred op1=6a0eeb9f.fbc5eb51 result=bce5315e.0b266b82.de6 res2=00000001 errno=0
-func=rred op1=6a131ea8.34c9b4c7 result=bcad321e.8f66c26d.d9d res2=00000003 errno=0
-func=rred op1=6a149565.178c67a0 result=3cc7b0a5.5fa64e5e.245 res2=00000003 errno=0
-func=rred op1=6a259310.76df4ed1 result=bcd8028a.163df832.2cf res2=00000003 errno=0
-func=rred op1=6a2d695a.c08fe897 result=3cb22f2c.2fe5da4e.6ee res2=00000001 errno=0
-func=rred op1=6a31e474.13bee7c2 result=3ca0e799.558732fe.4ca res2=00000003 errno=0
-func=rred op1=6a384401.7aacceaf result=bca605e4.bf01d03e.d5c res2=00000003 errno=0
-func=rred op1=6a45b154.d7bb41bb result=bcd159cb.df939b3e.c7a res2=00000003 errno=0
-func=rred op1=6a4ad6ae.1d9e5ba3 result=3cb95b66.004acc7d.730 res2=00000001 errno=0
-func=rred op1=6a509b1d.c2462148 result=bcab2430.287c6d7f.5ed res2=00000001 errno=0
-func=rred op1=6a598d57.cc259529 result=3c8aac0a.0a47e1f4.ea2 res2=00000003 errno=0
-func=rred op1=6a613fc8.eb028485 result=3cb43d1a.96d02f3c.e9f res2=00000001 errno=0
-func=rred op1=6a68e8ac.a36931ec result=bcc45b24.1e5d521f.871 res2=00000003 errno=0
-func=rred op1=6a756690.5b940cd7 result=3cbae81d.196227ba.247 res2=00000003 errno=0
-func=rred op1=6a7db41f.3cb71d7b result=bc4e0987.8d22e29d.291 res2=00000001 errno=0
-func=rred op1=6a8ba0bb.846e5952 result=3caa33e3.ec13566a.758 res2=00000001 errno=0
-func=rred op1=6a8fc782.f4ffe1a4 result=bcac147c.64e58494.481 res2=00000003 errno=0
-func=rred op1=6a91f725.32c8b4fb result=bcc49737.2d7797e4.c16 res2=00000001 errno=0
-func=rred op1=6a9f1026.ad39b12e result=3ce5e058.d59164a3.914 res2=00000001 errno=0
-func=rred op1=6aa5c23e.7f772512 result=3ca8534b.73412840.a2f res2=00000001 errno=0
-func=rred op1=6aa7d5a2.37bfe93b result=bcc50f5d.4bac236f.361 res2=00000001 errno=0
-func=rred op1=6ab2d2ff.fcfb8af2 result=bcafd5ad.5689e0e7.ed3 res2=00000003 errno=0
-func=rred op1=6ab8b17d.01f2bf32 result=3cd0245b.6471d03d.4f2 res2=00000001 errno=0
-func=rred op1=6ac44a9f.3e395802 result=3ca0d0e9.8ff86f99.58a res2=00000001 errno=0
-func=rred op1=6acc3c7f.fb79506b result=bcc7e042.00e768ad.f1e res2=00000001 errno=0
-func=rred op1=6ad38ecf.9d9a717a result=bcb76d38.8e8da91b.40e res2=00000003 errno=0
-func=rred op1=6ade6fee.dd560403 result=3cb9395e.57f4a766.050 res2=00000003 errno=0
-func=rred op1=6ae3ecb7.6de9e4be result=bc9a713b.fa54e607.a0c res2=00000001 errno=0
-func=rred op1=6aee1207.0d0690bf result=3ca46935.22c66c2e.e0f res2=00000003 errno=0
-func=rred op1=6af41bab.56119e60 result=3cbb0584.215ba5b0.c92 res2=00000001 errno=0
-func=rred op1=6afde313.24ded71d result=bcb3d4ec.fbbfac85.b89 res2=00000003 errno=0
-func=rred op1=6b03d53d.79d607ed result=bcd0abd7.8636bfaf.0e9 res2=00000001 errno=0
-func=rred op1=6b0dfa8d.18f2b3ee result=3c628904.e0d7f525.0be res2=00000001 errno=0
-func=rred op1=6b18f3a2.436e4c56 result=bcb9dcf3.d34e265e.786 res2=00000001 errno=0
-func=rred op1=6b190b1c.37822927 result=3ccb4fa8.34df0585.5d5 res2=00000003 errno=0
-func=rred op1=6b2180bb.f73b8dc3 result=3cbc2e14.6f692503.19e res2=00000003 errno=0
-func=rred op1=6b2b7717.ae308022 result=bcb8b463.8540a70c.27b res2=00000003 errno=0
-func=rred op1=6b303f01.41da73dd result=3cbd56a4.bd76a455.6aa res2=00000001 errno=0
-func=rred op1=6b3cb8d2.63919a08 result=bcb66342.e925a867.863 res2=00000003 errno=0
-func=rred op1=6b4d59af.be4226fb result=bcb1c101.b0efab1e.433 res2=00000003 errno=0
-func=rred op1=6b4e9b6a.73a340e1 result=3cc22503.48e3d021.a79 res2=00000001 errno=0
-func=rred op1=6b562b7b.255dc079 result=bcaa3d80.f1735baa.007 res2=00000003 errno=0
-func=rred op1=6b56cc58.800e4d6c result=3cc47623.e4fecec6.490 res2=00000001 errno=0
-func=rred op1=6b629460.d8eb8d38 result=bc8ed1f0.426d9a13.d1f res2=00000003 errno=0
-func=rred op1=6b6a6372.cc8080ad result=3ccdbaa6.556ac958.cf0 res2=00000001 errno=0
-func=rred op1=6b784776.f8ef2093 result=3cc09be5.dcb11b83.cec res2=00000003 errno=0
-func=rred op1=6b7bde91.456153d4 result=bca71d74.31d2338e.dd8 res2=00000001 errno=0
-func=rred op1=6b873979.0f267086 result=bcb34336.2984804c.634 res2=00000003 errno=0
-func=rred op1=6b8cec8f.2f2a03e1 result=3ccf4aac.b53b5d66.607 res2=00000001 errno=0
-func=rred op1=6b9041d4.bdce1b91 result=bcbaf7b2.3a1fe6d1.57b res2=00000001 errno=0
-func=rred op1=6b9f3f1b.4a477588 result=3cde541d.3327f095.c1e res2=00000001 errno=0
-func=rred op1=6ba0e41b.d6787c5e result=bceca5e7.b6a3ebb3.8cd res2=00000003 errno=0
-func=rred op1=6bafe162.62f1d655 result=3cd0d844.1617fd2d.161 res2=00000003 errno=0
-func=rred op1=6bb8119b.905ff8f3 result=3caae357.c8404e23.519 res2=00000001 errno=0
-func=rred op1=6bba6427.ab7d6a9a result=bc7f74c3.d16a5f84.030 res2=00000001 errno=0
-func=rred op1=6bc1d72c.0bf9989b result=bccfcd96.60f8ed0f.f21 res2=00000001 errno=0
-func=rred op1=6bce4c0b.14c6594b result=3cdd5877.149c9d99.a1d res2=00000003 errno=0
-func=rred op1=6bd4f463.ce2cc8c7 result=bcc25bea.7cd8c5fe.494 res2=00000003 errno=0
-func=rred op1=6bdfd3eb.88ce0c6d result=3cb4fd73.10fc5c3a.910 res2=00000001 errno=0
-func=rred op1=6be1133b.d1f5bf0a result=bcc45336.b9ef6bf6.897 res2=00000001 errno=0
-func=rred op1=6be682ff.af4660dd result=3cb10eda.96cf104a.10a res2=00000003 errno=0
-func=rred op1=6bf1da89.c2828b15 result=3ca26353.44e8f0d2.1fd res2=00000003 errno=0
-func=rred op1=6bff0c9d.98414062 result=bc9a22e1.1902dd63.c65 res2=00000003 errno=0
-func=rred op1=6c042ec4.b8e475f9 result=3cc5a7af.68094c7e.98a res2=00000001 errno=0
-func=rred op1=6c0cb862.a1df557e result=bcc2febe.0bd58b6e.7a4 res2=00000003 errno=0
-func=rred op1=6c10b06c.475195a3 result=3ca7b535.fd5072f2.5c7 res2=00000001 errno=0
-func=rred op1=6c1de280.1d104af0 result=bcc98776.521642c7.6be res2=00000001 errno=0
-func=rred op1=6c201b5d.89b91aea result=bc736d58.dd93538b.4ec res2=00000003 errno=0
-func=rred op1=6c21457b.04ea105c result=3cc850a0.c43d0d8e.b6f res2=00000001 errno=0
-func=rred op1=6c38290c.4e95a85f result=bc8d2405.4c5cfd50.f62 res2=00000001 errno=0
-func=rred op1=6c38be1b.0c2e2318 result=3cc719cb.3663d856.020 res2=00000003 errno=0
-func=rred op1=6c43d7ad.8d5b2448 result=bccbf521.6dc8ad38.d5b res2=00000001 errno=0
-func=rred op1=6c4c7a6b.0fd02c76 result=3cc4ac20.1ab16de4.983 res2=00000003 errno=0
-func=rred op1=6c51f985.8b8a1f99 result=bcce62cc.897b17aa.3f9 res2=00000001 errno=0
-func=rred op1=6c5e5893.11a13125 result=3cbfa193.c6993203.890 res2=00000003 errno=0
-func=rred op1=6c651148.ed0fe3fc result=bcd2d5e6.ee492b7f.3e9 res2=00000001 errno=0
-func=rred op1=6c6b40cf.b01b6cc2 result=3cb10f91.206ab35b.0df res2=00000003 errno=0
-func=rred op1=6c75ae16.9cea43d6 result=bc82ee3d.e9450182.066 res2=00000003 errno=0
-func=rred op1=6c78c5d9.fe700839 result=3cd68259.4719b049.f1d res2=00000001 errno=0
-func=rred op1=6c82e4ba.1351af60 result=bcc49c3c.bc27a3a3.6f2 res2=00000003 errno=0
-func=rred op1=6c887773.2682d84c result=3cbfc15a.83acc685.db1 res2=00000001 errno=0
-func=rred op1=6c944968.581df99b result=bcc6fa04.795043d3.aff res2=00000001 errno=0
-func=rred op1=6c9712c4.e1b68e11 result=3cbb05cb.095b8625.598 res2=00000003 errno=0
-func=rred op1=6caa6745.21beafae result=bcce135b.b0ca2464.725 res2=00000003 errno=0
-func=rred op1=6cabcbf3.668af9e9 result=3ca9a639.34cf8a07.a97 res2=00000001 errno=0
-func=rred op1=6cb3517f.5a800dea result=3c8adfed.2e2a2216.8c7 res2=00000001 errno=0
-func=rred op1=6cbe288a.a8f52fd5 result=bcaf2480.86ff7a7e.69a res2=00000001 errno=0
-func=rred op1=6cc47fca.fbb528e0 result=bcc1403f.16625f60.9d9 res2=00000001 errno=0
-func=rred op1=6cccfa3f.07c014df result=3ca427f1.e29f9990.e95 res2=00000003 errno=0
-func=rred op1=6cd2ba59.89e5806f result=3ccb5438.07b22c29.124 res2=00000001 errno=0
-func=rred op1=6cdd9164.d85aa25a result=bcb51087.95afadb5.f4f res2=00000001 errno=0
-func=rred op1=6ce7da4c.48d2caa7 result=3cd2b418.7c80fc78.c37 res2=00000003 errno=0
-func=rred op1=6ce87172.196d5822 result=bc9e8243.fa6a72aa.bac res2=00000001 errno=0
-func=rred op1=6cf5e178.b9f6b306 result=3cb33f5c.2f8f856b.ddc res2=00000001 errno=0
-func=rred op1=6cfb016b.78e3fd3e result=bcc8e0d0.14fcfc0b.4c4 res2=00000003 errno=0
-func=rred op1=6d072975.69b20594 result=3c8ff1d1.92d260b4.032 res2=00000003 errno=0
-func=rred op1=6d09b96e.c928aab0 result=bcd040b0.89cbcc5a.fd8 res2=00000001 errno=0
-func=rred op1=6d168577.11d45c4d result=3cc53e79.48bcab77.1df res2=00000001 errno=0
-func=rred op1=6d17cd73.c18faedb result=bcba8409.c8102694.3a6 res2=00000003 errno=0
-func=rred op1=6d215f18.0f45842f result=3ca7f55d.2e1dc887.026 res2=00000001 errno=0
-func=rred op1=6d2d97d1.1bfc3040 result=bcc884ec.aee30088.fa3 res2=00000001 errno=0
-func=rred op1=6d33f247.908cf03e result=3cd83d24.ee806487.fe4 res2=00000003 errno=0
-func=rred op1=6d3a60a3.42d71aea result=bcc08878.4a2e685b.f96 res2=00000001 errno=0
-func=rred op1=6d48c50c.5644903f result=bc71f1f0.18a7003e.f92 res2=00000001 errno=0
-func=rred op1=6d4e8f69.b0b111a4 result=3cadb393.8fbd80ac.240 res2=00000001 errno=0
-func=rred op1=6d551212.32c50a37 result=3cc765cd.ad589085.0a9 res2=00000001 errno=0
-func=rred op1=6d5c7806.79c41647 result=bcc9a40b.b06d708c.e9c res2=00000003 errno=0
-func=rred op1=6d612131.ea184bd6 result=bcb35645.ce088065.d05 res2=00000003 errno=0
-func=rred op1=6d66eb8f.4484cd3b result=3cc646ae.abce2081.1b0 res2=00000003 errno=0
-func=rred op1=6d703473.61386a54 result=3ca4ba9b.836a008c.a77 res2=00000001 errno=0
-func=rred op1=6d79b1ca.df2471c1 result=bccd0168.b50cc098.b87 res2=00000001 errno=0
-func=rred op1=6d80aad2.a5a85b15 result=bcbc4f3d.da5c0085.4ce res2=00000003 errno=0
-func=rred op1=6d884ead.11d49f7e result=3cbf17e9.451f00d2.fb3 res2=00000003 errno=0
-func=rred op1=6d944190.398684e9 result=3cc9e942.644480af.d15 res2=00000001 errno=0
-func=rred op1=6d9cd229.2e92aad4 result=bcb98692.6f990037.9e9 res2=00000001 errno=0
-func=rred op1=6da27631.6f976fff result=bc932fdb.b0bbfeab.dc6 res2=00000003 errno=0
-func=rred op1=6da6834e.47e58a94 result=3cafdd49.2e7601c3.60b res2=00000001 errno=0
-func=rred op1=6db9aabb.bb3c1ab4 result=bcc18f40.23fb7fc6.c66 res2=00000003 errno=0
-func=rred op1=6dbdb7d8.938a3549 result=3c995ada.fb74062f.08b res2=00000003 errno=0
-func=rred op1=6dc0e27a.b5ec27ef result=3cc7e5f6.e2d88152.888 res2=00000003 errno=0
-func=rred op1=6dc81705.0190d2a4 result=bc8a09b8.cc07ee51.601 res2=00000001 errno=0
-func=rred op1=6dd1ac56.12c1cbf7 result=3cbc9c12.14f503f9.34b res2=00000003 errno=0
-func=rred op1=6dde81b3.f05fd951 result=bcc4d077.3d7c7d90.f26 res2=00000001 errno=0
-func=rred op1=6de21143.c12c9dfb result=bca3874a.9905f2bd.081 res2=00000003 errno=0
-func=rred op1=6de7b217.532600a0 result=3ccafb76.88348514.1eb res2=00000003 errno=0
-func=rred op1=6df243ba.986206fd result=bcd5a0c5.03dcbd03.7d6 res2=00000003 errno=0
-func=rred op1=6dfdea4f.6abf9e4b result=3cc137d1.3bb18bb5.9aa res2=00000001 errno=0
-func=rred op1=6e022a7f.2cc7527c result=bcda8297.aa1e39b2.bf6 res2=00000001 errno=0
-func=rred op1=6e0e038a.d65a52cc result=3c7e37b7.8592d857.d3b res2=00000003 errno=0
-func=rred op1=6e150786.ab915e0f result=bcb8263d.53aec0cb.e2e res2=00000003 errno=0
-func=rred op1=6e1af40c.805ade37 result=3cd4f1e7.3348d4e1.260 res2=00000001 errno=0
-func=rred op1=6e2682a8.20c3be19 result=3c96a9c9.a42e2241.dec res2=00000001 errno=0
-func=rred op1=6e2c8869.6127f2c2 result=bcc7347f.97822a09.244 res2=00000001 errno=0
-func=rred op1=6e374038.db5cee1e result=3cd052f4.78a006d2.4b3 res2=00000001 errno=0
-func=rred op1=6e3d45fa.1bc122c7 result=bcc36d88.a6cfcefe.29c res2=00000001 errno=0
-func=rred op1=6e4320ff.23450bc2 result=3cd2366f.f0f93457.c87 res2=00000001 errno=0
-func=rred op1=6e49e451.1e427070 result=bcbb862c.7b888cdb.643 res2=00000003 errno=0
-func=rred op1=6e54730b.44b7cceb result=bca8d4a1.717e415e.f49 res2=00000003 errno=0
-func=rred op1=6e5bf3ed.fa4e619e result=3c858c58.50525be3.7c8 res2=00000003 errno=0
-func=rred op1=6e657ad9.b2bdc582 result=3cc074a1.47ce91ea.21a res2=00000003 errno=0
-func=rred op1=6e6aec1f.8c486907 result=bcca2d66.f683671d.2c6 res2=00000001 errno=0
-func=rred op1=6e78b763.d6861390 result=3cc3262c.51d8dd66.913 res2=00000001 errno=0
-func=rred op1=6e7f3078.1e16afac result=bcb0c000.535f5ee9.a5e res2=00000003 errno=0
diff --git a/test/testcases/directed/rred5.tst b/test/testcases/directed/rred5.tst
deleted file mode 100644
index d123472..0000000
--- a/test/testcases/directed/rred5.tst
+++ /dev/null
@@ -1,563 +0,0 @@
-; rred5.tst
-;
-; Copyright (c) 1999-2018, Arm Limited.
-; SPDX-License-Identifier: MIT
-
-func=rred op1=6e8a55a8.e86a3a97 result=3cc88942.65ed745f.705 res2=00000001 errno=0
-func=rred op1=6e8d9233.0c3288a5 result=bc97e750.acd8c3df.9e9 res2=00000003 errno=0
-func=rred op1=6e95c615.04acdcba result=3c93315f.f3cbf3e7.5a8 res2=00000003 errno=0
-func=rred op1=6e97645a.169103c1 result=bcc92000.7d0f0e5e.78d res2=00000001 errno=0
-func=rred op1=6ea2af28.89dc1a48 result=bcbcb3a8.a9cbc0d9.753 res2=00000001 errno=0
-func=rred op1=6ea8dd01.7f7d9f2c result=3cc7f284.4ecbda60.67d res2=00000003 errno=0
-func=rred op1=6eb7518b.42153df3 result=3cccbedc.4bbed75a.3e7 res2=00000001 errno=0
-func=rred op1=6ebf1da9.499ae9de result=bca30491.6bff99e4.355 res2=00000001 errno=0
-func=rred op1=6ec8e668.e9bb8213 result=bcd0ba66.8265d3a9.414 res2=00000003 errno=0
-func=rred op1=6eca71df.2723e34c result=3ca35e2e.7b984dea.7fa res2=00000001 errno=0
-func=rred op1=6ed81bfa.15e86003 result=3cc808eb.92b20761.fa6 res2=00000001 errno=0
-func=rred op1=6edcc7c4.385f6695 result=bca2aaf4.5c66e5dd.eb0 res2=00000003 errno=0
-func=rred op1=6ee3d567.5d5aea79 result=3cbd0d45.b96474df.bf8 res2=00000003 errno=0
-func=rred op1=6ee62b4c.6e966dc2 result=bcbc5a0b.9a330cd3.2ad res2=00000001 errno=0
-func=rred op1=6ef1b21e.01142fb4 result=bca1f7ba.3d357dd1.566 res2=00000003 errno=0
-func=rred op1=6ef84e95.cadd2887 result=3ca4c4a2.b9fb1e03.a8f res2=00000001 errno=0
-func=rred op1=6f0611fe.941c0980 result=3cd11f37.33f19e30.54e res2=00000003 errno=0
-func=rred op1=6f0a8b2d.019e478e result=bcbaf397.5bd03cba.019 res2=00000001 errno=0
-func=rred op1=6f161ea5.81593ba1 result=bcc675a8.cc82dd45.abf res2=00000003 errno=0
-func=rred op1=6f1cbb1d.4b223474 result=3cc046b4.2aadbe8f.536 res2=00000003 errno=0
-func=rred op1=6f22ca16.25d62627 result=3cad2b5c.304bfe9a.a0c res2=00000001 errno=0
-func=rred op1=6f27369d.a61b3214 result=bc8b1061.287bf420.2ff res2=00000003 errno=0
-func=rred op1=6f3007d6.5352a4f7 result=bcc3a8c0.4fbd3d13.596 res2=00000003 errno=0
-func=rred op1=6f3e6564.f8e3bf31 result=3cb9c950.0b3c8016.9ac res2=00000001 errno=0
-func=rred op1=6f4168f6.3c94658f result=bca44c48.de5cf718.23f res2=00000001 errno=0
-func=rred op1=6f4897bd.8f5cf2ac result=3ccb7a56.1dc43f58.9dc res2=00000003 errno=0
-func=rred op1=6f50b866.47f38543 result=bcd63249.6b88dbf6.5de res2=00000003 errno=0
-func=rred op1=6f5db4d5.0442dee5 result=3cc15431.ae95c3cc.8bc res2=00000001 errno=0
-func=rred op1=6f6110ae.4243f569 result=bcdb455b.a32019bc.66d res2=00000001 errno=0
-func=rred op1=6f6d5c8d.09f26ebf result=3c6a7d3d.5212ce1b.744 res2=00000003 errno=0
-func=rred op1=6f71951a.39bc9da2 result=bca9688d.535ac73e.78b res2=00000003 errno=0
-func=rred op1=6f7d88b1.071aa6d2 result=3cd1892c.2939e968.c2b res2=00000001 errno=0
-func=rred op1=6f8491ff.ed141fee result=3cb003ee.53efbd62.aad res2=00000001 errno=0
-func=rred op1=6f8a5fa7.569aec73 result=bcc30e69.fe84156e.da8 res2=00000001 errno=0
-func=rred op1=6f93138d.13685ec8 result=bca2c93d.fed613b7.9ba res2=00000003 errno=0
-func=rred op1=6f9edaff.e39e2fe5 result=3cc805e5.7de79c14.004 res2=00000003 errno=0
-func=rred op1=6fa3d2c6.803e3f5b result=3cb6a33d.a87470e9.87f res2=00000001 errno=0
-func=rred op1=6fac9d53.9d1c8e2c result=bcbc2ddc.fe411d93.696 res2=00000001 errno=0
-func=rred op1=6fb7d870.5842767a result=bcc77b8d.7e8b98a5.828 res2=00000003 errno=0
-func=rred op1=6fb897a9.c518570d result=3cc1f0ee.28beebfb.a10 res2=00000001 errno=0
-func=rred op1=6fc0b11b.70fb52ef result=bcd07016.3efb5140.a82 res2=00000001 errno=0
-func=rred op1=6fcfbefe.ac5f7a98 result=3cc5caed.d25d492d.8d5 res2=00000003 errno=0
-func=rred op1=6fd4a462.9b09d4fe result=3c980d7e.9c39abaf.8e1 res2=00000003 errno=0
-func=rred op1=6fd706d4.3d76e0d7 result=bca98bbc.af8f5197.703 res2=00000001 errno=0
-func=rred op1=6fe17986.34cc0e0a result=bcdaad05.147d82d8.708 res2=00000003 errno=0
-func=rred op1=6feef693.e88ebf7d result=3cb20a1e.f52b40c3.aa9 res2=00000001 errno=0
-func=rred op1=6ff89c42.7095c451 result=3cd0e8d6.903d0f82.aa3 res2=00000003 errno=0
-func=rred op1=6ffafeb4.1302d02a result=bc9e0676.e990434f.167 res2=00000003 errno=0
-func=rred op1=7007d18b.57065294 result=3cb08be0.e1d59adb.c87 res2=00000003 errno=0
-func=rred op1=700e2bdc.ceff4dc0 result=bcc7492b.e5b2ef15.6f7 res2=00000001 errno=0
-func=rred op1=7019681f.b504915f result=3c788a56.d0d79343.d44 res2=00000001 errno=0
-func=rred op1=701c9548.71010ef5 result=bccecac9.a016ffe9.351 res2=00000003 errno=0
-func=rred op1=702373bc.df42fcba result=bcaaf52c.0f7550e6.9be res2=00000003 errno=0
-func=rred op1=702f5c82.8ac62604 result=3cb39d2b.bbf08d44.430 res2=00000001 errno=0
-func=rred op1=7035a2a4.1b24a7a7 result=3cca5a76.bfcde17d.e9f res2=00000003 errno=0
-func=rred op1=703d2d9b.4ee47b17 result=bcc437e1.0b97fcac.f4e res2=00000001 errno=0
-func=rred op1=704190ff.125307de result=bc9d6001.4e130e89.638 res2=00000003 errno=0
-func=rred op1=70478561.e8149c83 result=3ccd6bc1.99e8d3e6.648 res2=00000003 errno=0
-func=rred op1=70509fa0.2bdb0d70 result=3cbfe257.245c56e6.2d2 res2=00000001 errno=0
-func=rred op1=705a597e.9b7c8bcd result=bcb60800.fa8e4ae7.0aa res2=00000001 errno=0
-func=rred op1=706209ae.858f0515 result=bcd2fc96.465e3b2d.109 res2=00000001 errno=0
-func=rred op1=7069e0cf.28408e96 result=3c8412ae.b24a42e6.4d7 res2=00000001 errno=0
-func=rred op1=7075b8e7.1d49cb3a result=bcbaddab.77c9c62c.99d res2=00000001 errno=0
-func=rred op1=707e08b7.333751f2 result=3cc27381.687773cf.e04 res2=00000003 errno=0
-func=rred op1=7087ccdb.22c52ce8 result=bcb5d8ff.cb373573.067 res2=00000003 errno=0
-func=rred op1=708bf4c3.2dbbf044 result=3cc4f5d7.3ec0bc2c.a9f res2=00000001 errno=0
-func=rred op1=7098d6d5.2582ddbf result=bca79f50.e42427ff.bf7 res2=00000003 errno=0
-func=rred op1=709aeac9.2afe3f6d result=3cc9fa82.eb534ce6.3d5 res2=00000001 errno=0
-func=rred op1=70a2e39e.5cd19285 result=bc7c6511.8ecf28cb.8fd res2=00000003 errno=0
-func=rred op1=70afd405.f0f1d9d0 result=3cb24c5d.995d5059.947 res2=00000003 errno=0
-func=rred op1=70b5dd39.c12a3822 result=bcb965a1.fd111a8c.786 res2=00000001 errno=0
-func=rred op1=70bcda6a.8c993433 result=3ccd38dd.7ef8eb13.17b res2=00000003 errno=0
-func=rred op1=70cad89f.d90e08f9 result=3ca66632.6b530c4d.610 res2=00000003 errno=0
-func=rred op1=70cdd23b.3d66ae96 result=bcc03f73.3062725f.ae3 res2=00000001 errno=0
-func=rred op1=70d6de1f.1aefcdbf result=3c906753.47d6efcf.324 res2=00000003 errno=0
-func=rred op1=70d9d7ba.7f48735c result=bcd4d28a.96b9c676.135 res2=00000003 errno=0
-func=rred op1=70e4e0de.bbe0b022 result=bca43167.eae3b0e3.f6b res2=00000003 errno=0
-func=rred op1=70e8db5f.79feeb5c result=3cba8007.3d48c841.2d9 res2=00000001 errno=0
-func=rred op1=70f06830.7b1db0e8 result=3cd8ec5f.68af8269.dfd res2=00000001 errno=0
-func=rred op1=70ff514e.19d10833 result=bcbe4a1b.e0558955.f20 res2=00000001 errno=0
-func=rred op1=7100a747.3c7012e8 result=3c993a7d.49945d74.dba res2=00000003 errno=0
-func=rred op1=710b17b6.9a606af9 result=bcabc591.30fd330d.7f9 res2=00000001 errno=0
-func=rred op1=7112c412.fc286185 result=bcc10a18.41b12535.5b3 res2=00000003 errno=0
-func=rred op1=7118faea.daa81c5c result=3cb2ebdd.f72f4617.a4b res2=00000001 errno=0
-func=rred op1=7124d119.0b8c17a2 result=3cbf891c.9bf974d2.128 res2=00000003 errno=0
-func=rred op1=712f4188.697c6fb3 result=bcc89e41.87caa75e.e41 res2=00000003 errno=0
-func=rred op1=7132bc30.23fe1545 result=3ccc61cc.f2c6e923.771 res2=00000003 errno=0
-func=rred op1=713d2c9f.81ee6d56 result=bcda31e9.5c63ed36.31d res2=00000003 errno=0
-func=rred op1=7140a355.d05aecc8 result=3cf25fe5.1196871c.536 res2=00000003 errno=0
-func=rred op1=714f3d96.fd674993 result=bc8eed82.59f1f82a.c62 res2=00000003 errno=0
-func=rred op1=7150a93f.f27aa5f8 result=3ca17f1c.b317df6a.2a1 res2=00000001 errno=0
-func=rred op1=715f3f8f.b371dca3 result=bce919f7.91326f3f.8f3 res2=00000003 errno=0
-func=rred op1=7166e8f7.0429f697 result=bcb8364f.8684ebca.782 res2=00000003 errno=0
-func=rred op1=7168fddf.ebb7f8f4 result=3cba3eab.0ca3cf1f.3f2 res2=00000003 errno=0
-func=rred op1=7174d38f.ef194f76 result=3cc5dee3.dfddd744.b49 res2=00000001 errno=0
-func=rred op1=717b1347.00c8a015 result=bcc3d688.59bef3ef.ed9 res2=00000003 errno=0
-func=rred op1=7182be67.f0c9fab7 result=3cd3af00.497adb57.6f5 res2=00000001 errno=0
-func=rred op1=718d286e.ff17f4d4 result=bcd1a6a4.c35bf802.a85 res2=00000003 errno=0
-func=rred op1=7196e8d7.78c94d66 result=bc63c408.220c4c3f.1e0 res2=00000003 errno=0
-func=rred op1=7198fdff.7718a225 result=3cb0e0fc.72077d08.312 res2=00000001 errno=0
-func=rred op1=71a1b3e3.b752a4f0 result=3cda1722.fc5fb686.c0e res2=00000003 errno=0
-func=rred op1=71ae32f3.388f4a9b result=bcd1f5b4.e3e42933.a4d res2=00000001 errno=0
-func=rred op1=71b0240d.9b6f4fad result=bcc26c4d.14b072fd.1f8 res2=00000001 errno=0
-func=rred op1=71bdada1.56234b1f result=3cbfe798.20ddd2ea.778 res2=00000003 errno=0
-func=rred op1=71c49106.8943f8e9 result=3cbeab57.9ebd0e26.85a res2=00000001 errno=0
-func=rred op1=71c940a8.684ea1e3 result=bcc446ad.d7e19a23.0a5 res2=00000003 errno=0
-func=rred op1=71d25a8a.1259a44b result=bcc582ee.5a025ee6.fc3 res2=00000003 errno=0
-func=rred op1=71db7724.df38f681 result=3cb741d4.91f8718e.da6 res2=00000001 errno=0
-func=rred op1=71ea5be6.a3c3cc32 result=bcccec71.66c6fb7e.a77 res2=00000003 errno=0
-func=rred op1=71eeea34.0a33754d result=3ca0dd9c.f0de70bf.07c res2=00000001 errno=0
-func=rred op1=71f52f4f.e34c0e00 result=bc773359.896edc00.b18 res2=00000001 errno=0
-func=rred op1=71fd30ac.74b635e7 result=3ccb793b.ce300dbe.9c5 res2=00000003 errno=0
-func=rred op1=7204528c.188d6e4d result=3cc19737.bd29e79f.0d5 res2=00000003 errno=0
-func=rred op1=720fc6f7.d4f21500 result=bc916683.27132500.852 res2=00000003 errno=0
-func=rred op1=72199e60.116071cd result=3cd13a6a.57042c2f.0a9 res2=00000003 errno=0
-func=rred op1=721a7b23.dc1f1180 result=bc9d002f.ebca9300.dde res2=00000001 errno=0
-func=rred op1=72228965.e6e28c40 result=bca44cee.58410080.9b5 res2=00000003 errno=0
-func=rred op1=722c444a.0dc9f38d result=3ce10c03.a3f14e77.092 res2=00000003 errno=0
-func=rred op1=72313670.e8adcb60 result=bcb2d9b8.bfaa12c0.904 res2=00000001 errno=0
-func=rred op1=723d973f.0bfeb46d result=3cf0f4d0.4a67df9b.087 res2=00000003 errno=0
-func=rred op1=72408cf6.69936af0 result=bcc2201d.f35e9be0.8ab res2=00000001 errno=0
-func=rred op1=724f93ae.894dd5bd result=3d00d203.4419b951.077 res2=00000001 errno=0
-func=rred op1=72503839.2a063ab8 result=bcd1c350.8d38e070.87e res2=00000001 errno=0
-func=rred op1=725fe86b.c8db05f5 result=3d10cc36.6db75d9a.074 res2=00000003 errno=0
-func=rred op1=72600dda.8a3fa29c result=bce194e9.da2602b8.868 res2=00000001 errno=0
-func=rred op1=726fbe0d.29146dd9 result=3d20cf1c.d8e88b75.875 res2=00000001 errno=0
-func=rred op1=72702309.da22eeaa result=bcf1ac1d.33af7194.873 res2=00000003 errno=0
-func=rred op1=727ffd9b.18be5203 result=3d30cac3.381ec6ac.473 res2=00000001 errno=0
-func=rred op1=72800342.e24dfc95 result=bd018950.2d614b4a.863 res2=00000003 errno=0
-func=rred op1=728ff303.70ccabfc result=3d40cb7c.d2eb1223.274 res2=00000001 errno=0
-func=rred op1=7290026c.6443fd25 result=bd452c5d.a8aace08.08c res2=00000001 errno=0
-func=rred op1=729ffcc4.9ab45293 result=3d3d34a5.9a7dd173.acf res2=00000003 errno=0
-func=rred op1=72a002d7.a348fcdd result=bd475d87.ae56f771.598 res2=00000003 errno=0
-func=rred op1=72affc59.5baf52db result=3d3472e3.eefe59a9.e9f res2=00000001 errno=0
-func=rred op1=72b0030d.42cb7cb9 result=bd4bbfdb.b9af4a43.fb1 res2=00000003 errno=0
-func=rred op1=72bffc23.bc2cd2ff result=3d077b04.bffb50b3.1f8 res2=00000001 errno=0
-func=rred op1=72c14bbb.0852575c result=3cb48f13.9646044e.194 res2=00000001 errno=0
-func=rred op1=72c15652.b043fd63 result=bc85222f.9946bd94.c23 res2=00000001 errno=0
-func=rred op1=72d9fc30.346d2911 result=3cae8d0f.5fe8a9d1.d16 res2=00000003 errno=0
-func=rred op1=72da06c7.dc5ecf18 result=bcbf202b.62e96318.7a5 res2=00000003 errno=0
-func=rred op1=72e5a941.7258933a result=3ca3fbf7.93454b07.704 res2=00000001 errno=0
-func=rred op1=72ee59b6.9e7364ef result=bcc4d8a1.97c660f1.6db res2=00000003 errno=0
-func=rred op1=72f37a7e.3d55754b result=3cd70e92.88aeadaf.074 res2=00000001 errno=0
-func=rred op1=72fc2af3.69704700 result=bca64867.9f483022.141 res2=00000001 errno=0
-func=rred op1=7308ea1a.6de46d1d result=3ca1af87.874265ec.cc8 res2=00000003 errno=0
-func=rred op1=730f6bcc.64fc20e3 result=bccab449.8118c99d.473 res2=00000001 errno=0
-func=rred op1=73152036.8f143540 result=bcc0b64d.b7762419.8f1 res2=00000003 errno=0
-func=rred op1=731ff4d7.48407edd result=3c9a2d4e.de79376f.09d res2=00000003 errno=0
-func=rred op1=73219ad8.21e62c60 result=bccbda81.871a3c2a.992 res2=00000001 errno=0
-func=rred op1=732c6f78.db1275fd result=3cb83adb.3ee0b3c8.8ef res2=00000001 errno=0
-func=rred op1=73335d87.587d30d0 result=bcdea38e.7b03422e.dba res2=00000003 errno=0
-func=rred op1=733e3228.11a97a6d result=3cc2a8c1.570ea7c0.09f res2=00000003 errno=0
-func=rred op1=7340b980.869aaa28 result=bcea75fb.0d25b928.77e res2=00000003 errno=0
-func=rred op1=734f137f.acf4fca5 result=3ccfbf68.c64b4377.8ed res2=00000003 errno=0
-func=rred op1=735048d4.b8f4e90c result=bcf9c3b7.d02b77a7.674 res2=00000001 errno=0
-func=rred op1=735f842b.7a9abdc1 result=3cdcf65b.d2623d73.4c5 res2=00000003 errno=0
-func=rred op1=7360107e.d222087e result=bd096a96.31ae56e6.def res2=00000001 errno=0
-func=rred op1=736fbc81.616d9e4f result=3ceb91d5.586dba71.2b1 res2=00000003 errno=0
-func=rred op1=73702ca9.c58b78c5 result=bd199727.00ece747.231 res2=00000003 errno=0
-func=rred op1=737fd8ac.54d70e96 result=3cfadf92.1b7378f0.1a7 res2=00000003 errno=0
-func=rred op1=73820386.3b3edc90 result=3c9a65c3.936ff1e8.a5b res2=00000001 errno=0
-func=rred op1=73821fb1.2ea84cd7 result=bcaf5ded.74d8674f.d55 res2=00000003 errno=0
-func=rred op1=739b0549.58de4ad8 result=3cb3cc52.ae93f56e.7c4 res2=00000003 errno=0
-func=rred op1=739b2174.4c47bb1f result=bcb8c47c.8ffc6ad5.abe res2=00000003 errno=0
-func=rred op1=73a68467.ca0e93b4 result=3cc07f9a.3c25f731.679 res2=00000001 errno=0
-func=rred op1=73afa255.db177243 result=bcc577c4.1d8e6c98.973 res2=00000003 errno=0
-func=rred op1=73b443f7.02a6b822 result=3ccdb27c.05ddf025.ba6 res2=00000001 errno=0
-func=rred op1=73bd61e5.13af96b1 result=bcd71e20.56c56bb7.219 res2=00000001 errno=0
-func=rred op1=73c0e34d.d78aeec7 result=3cd8bf67.5a38f2ca.1b5 res2=00000003 errno=0
-func=rred op1=73ce821d.7763847a result=bce64af2.3a29ec27.dc6 res2=00000003 errno=0
-func=rred op1=73dde3eb.cbd4d572 result=bc9b086a.4bdef35a.b7e res2=00000001 errno=0
-func=rred op1=73df0424.2f88c33b result=3c99c31c.db00f076.938 res2=00000003 errno=0
-func=rred op1=73e0122e.499e5882 result=3cb3a3a9.00783511.f7b res2=00000001 errno=0
-func=rred op1=73ef533d.05501abf result=bcf510b7.aa2268d6.bce res2=00000003 errno=0
-func=rred op1=73f5dad4.a705a931 result=bcc75609.a62b9436.57d res2=00000003 errno=0
-func=rred op1=73f6fb0d.0ab996fa result=3c987dcf.6a22ed92.6f3 res2=00000003 errno=0
-func=rred op1=7403869d.aa2bf7be result=3cc6b362.edbc92c4.45a res2=00000001 errno=0
-func=rred op1=740a6f7c.6b473636 result=bcb4e8f6.715637f6.1c1 res2=00000003 errno=0
-func=rred op1=741540d5.5a72c75c result=3cccd2d6.c8454e28.e17 res2=00000003 errno=0
-func=rred op1=7418b544.bb006698 result=bca1541d.78898259.c8f res2=00000001 errno=0
-func=rred op1=7427d828.e2dcfec9 result=3cafa781.5bbc58cb.157 res2=00000001 errno=0
-func=rred op1=74299260.9323ce67 result=bcc93dfd.cf78988c.8e5 res2=00000003 errno=0
-func=rred op1=743287f3.8c404cf2 result=bcb9fe2c.34ce4386.ad6 res2=00000003 errno=0
-func=rred op1=743e057a.119d186f result=3cb6fd72.9f77979e.310 res2=00000003 errno=0
-func=rred op1=74459e9c.23a059c5 result=bcce5333.92f0a41d.1fa res2=00000003 errno=0
-func=rred op1=744aeed1.7a3d0b9c result=3ccb5279.fd99f834.a33 res2=00000001 errno=0
-func=rred op1=7456bb62.833eac47 result=3c8544dc.8cbb4adf.5d5 res2=00000003 errno=0
-func=rred op1=7459d20b.1a9eb91a result=bcad5703.cde431fb.ba9 res2=00000001 errno=0
-func=rred op1=74631656.bc0f7633 result=bcd4fefd.f2460899.404 res2=00000001 errno=0
-func=rred op1=746d7716.e1cdef2e result=3ccdfb15.8f316190.8ee res2=00000003 errno=0
-func=rred op1=7471d234.0847046a result=bca2b495.87868c8c.0be res2=00000003 errno=0
-func=rred op1=747ba490.fe365424 result=3cbe9f27.507e9125.634 res2=00000001 errno=0
-func=rred op1=748abb4e.0c6a869f result=bcbc0ee0.4b49d2d2.11d res2=00000001 errno=0
-func=rred op1=748fa47c.87622e7c result=3ca7d523.91f00932.aec res2=00000003 errno=0
-func=rred op1=7498bb58.47d49973 result=bc9b280e.fa3a1fca.d1f res2=00000001 errno=0
-func=rred op1=749da486.c2cc4150 result=3cd24a38.1a7d49b9.077 res2=00000001 errno=0
-func=rred op1=74a0d239.25fc0dd4 result=bcb97e99.4615147e.c06 res2=00000003 errno=0
-func=rred op1=74a7bb5d.6589a2dd result=3cc1dfda.ad7406e6.031 res2=00000001 errno=0
-func=rred op1=74b0523b.b4d69289 result=bc7a975b.4250b4c1.19a res2=00000001 errno=0
-func=rred op1=74b83b5a.d6af1e28 result=3cb62bad.ddcafde6.9d2 res2=00000003 errno=0
-func=rred op1=74c486c9.fe5595fe result=bcbcd184.ae5f2b16.e39 res2=00000001 errno=0
-func=rred op1=74cc6fe9.202e219d result=3cb2d8c2.7580e74e.79f res2=00000001 errno=0
-func=rred op1=74d66112.6a825a13 result=3caf0bae.1a6da16c.ad8 res2=00000003 errno=0
-func=rred op1=74da95a0.b4015d88 result=bcc1bbad.bf79ac23.950 res2=00000001 errno=0
-func=rred op1=74e359a7.0fac764e result=3ca1c000.7945470c.20b res2=00000003 errno=0
-func=rred op1=74ed9d0c.0ed7414d result=bcc86184.900dd953.db6 res2=00000001 errno=0
-func=rred op1=74f9ff0f.3caccdb0 result=bcb1b75b.05ae113b.094 res2=00000003 errno=0
-func=rred op1=74fd067a.9782b175 result=3cbaa000.b5e7ea92.311 res2=00000001 errno=0
-func=rred op1=7506ac5b.262ca1ff result=3c214ae7.2e6ba22e.f46 res2=00000001 errno=0
-func=rred op1=750d51c3.532cf961 result=bcd1b984.6293deaf.4f2 res2=00000003 errno=0
-func=rred op1=75102c97.57016e93 result=3cb1c8a5.ecdc7cdd.383 res2=00000003 errno=0
-func=rred op1=751d2c1e.f557d56b result=bcb1a610.1e7fa598.da5 res2=00000001 errno=0
-func=rred op1=75236c79.3e970849 result=3cb1d9f0.d40ae87f.672 res2=00000001 errno=0
-func=rred op1=7529ec3d.0dc23bb5 result=bcb194c5.375139f6.ab5 res2=00000003 errno=0
-func=rred op1=75350c6a.3261d524 result=3cb1fc86.a267bfc3.c51 res2=00000001 errno=0
-func=rred op1=75384c4c.19f76eda result=bcb1722f.68f462b2.4d7 res2=00000003 errno=0
-func=rred op1=754105f8.e85c1dfe result=bcdeef94.62c23285.214 res2=00000001 errno=0
-func=rred op1=754f929f.4b92bfb6 result=3ccafac9.f39b9fa5.a79 res2=00000003 errno=0
-func=rred op1=75516940.99942cb6 result=bcb0e7d8.2f8105a0.d5d res2=00000003 errno=0
-func=rred op1=755bef75.b2c51748 result=3cb31135.154e79e6.b45 res2=00000001 errno=0
-func=rred op1=75633ad5.65fb00ed result=3ccb8521.2d0efcb7.1f3 res2=00000003 errno=0
-func=rred op1=756f60fb.72f6b85a result=bcad7cf6.936722b5.ee8 res2=00000003 errno=0
-func=rred op1=7578651e.06457288 result=bcc84715.d45ace4e.517 res2=00000001 errno=0
-func=rred op1=757da838.92dde7d1 result=3cb763ee.e0e96272.717 res2=00000001 errno=0
-func=rred op1=75832e6c.6fd3ff16 result=bca4d782.fc31519e.745 res2=00000003 errno=0
-func=rred op1=758a2a49.dc8544e8 result=3cbbb6a8.ac844afe.2e8 res2=00000001 errno=0
-func=rred op1=75909313.a49b455d result=3cd07644.b5c84fb2.e5c res2=00000003 errno=0
-func=rred op1=759cc5a2.a7bdfea1 result=bcbf4344.7a49fa6d.ae7 res2=00000001 errno=0
-func=rred op1=75a021c8.af0b50c5 result=3c9b7c96.c14be57e.e8e res2=00000003 errno=0
-func=rred op1=75a9b8fe.e6f55050 result=bcabf0ba.97bcb07d.743 res2=00000001 errno=0
-func=rred op1=75b36711.ea9bf962 result=3cc4ba7a.06951ede.d17 res2=00000003 errno=0
-func=rred op1=75bcfe48.2285f8ed result=bc4d08f5.9c32bfa2.d3a res2=00000003 errno=0
-func=rred op1=75c34abf.2d37fc3c result=bcc4f48b.f1cd845e.172 res2=00000003 errno=0
-func=rred op1=75c69008.68c8a4d9 result=3cab0872.eadb1a80.5d9 res2=00000001 errno=0
-func=rred op1=75d0139f.50595232 result=bcd17674.9ed5ee4e.68a res2=00000001 errno=0
-func=rred op1=75d9c728.45a74ee3 result=3caa202b.3df98483.46f res2=00000003 errno=0
-func=rred op1=75eb62b8.3416a3e8 result=3ca84f9b.e4365889.19b res2=00000003 errno=0
-func=rred op1=75ee99d8.10f54df2 result=bcaf91d9.4b430871.cea res2=00000001 errno=0
-func=rred op1=75f0e87b.f6e9fbfe result=bcc5dcd3.9eaf1a5b.2dc res2=00000003 errno=0
-func=rred op1=75ff6eb4.b785f7be result=3ce98379.2c97b4f7.cbf res2=00000001 errno=0
-func=rred op1=76048a0a.2710faee result=3cc23bb4.eb28c266.d34 res2=00000001 errno=0
-func=rred op1=7606259a.15804ff3 result=bcb36a0b.5927dc2d.41c res2=00000001 errno=0
-func=rred op1=76111db3.208e2671 result=3cce6382.dd43eeab.602 res2=00000003 errno=0
-func=rred op1=761991f1.1c032470 result=bcbaac48.c0348c15.f6b res2=00000001 errno=0
-func=rred op1=7620354f.948466b5 result=bc82e566.dff19c66.e78 res2=00000003 errno=0
-func=rred op1=7623a1a6.9b073b32 result=3cb5f2ef.083824fc.3cc res2=00000001 errno=0
-func=rred op1=763699cb.db852fd1 result=bcbf65a2.7830f32f.b08 res2=00000003 errno=0
-func=rred op1=763a0622.e208044e result=3cb13995.503bbde2.82e res2=00000003 errno=0
-func=rred op1=7643678d.b804cb43 result=bcc20f7e.1816ad24.b53 res2=00000001 errno=0
-func=rred op1=764d3861.058868dc result=3c9f1b87.810bbebc.3cb res2=00000003 errno=0
-func=rred op1=765b9f41.f3c83695 result=3cc51d06.405d35ba.0a8 res2=00000001 errno=0
-func=rred op1=765ed180.17489b23 result=bca63d09.ff5d596f.b0a res2=00000003 errno=0
-func=rred op1=7665ea48.c4264ea5 result=3cb754a5.a0c8cf0d.2d8 res2=00000001 errno=0
-func=rred op1=76678367.d5e680ec result=bcbe03eb.dfa0491e.bfd res2=00000003 errno=0
-func=rred op1=76730fcc.2c555aad result=bcacec50.3e34d381.42e res2=00000001 errno=0
-func=rred op1=767a5de4.6db774e4 result=3c7179ba.16b759d7.ce5 res2=00000003 errno=0
-func=rred op1=76847d0a.783dd4a9 result=3cc01991.913b9a2c.dcc res2=00000003 errno=0
-func=rred op1=7688f0a6.21cefae8 result=bccd781e.0eea8e50.016 res2=00000001 errno=0
-func=rred op1=7693c66b.524997ab result=3c8a3697.221306c3.b58 res2=00000001 errno=0
-func=rred op1=7699a745.47c337e6 result=bccc6082.6d7f18b2.847 res2=00000003 errno=0
-func=rred op1=76a421ba.e543b62a result=3cd0eb46.4a4c3262.fa7 res2=00000003 errno=0
-func=rred op1=76aa0294.dabd5665 result=bcca314b.2aa82d77.8aa res2=00000003 errno=0
-func=rred op1=76b0a856.8e0fb84e result=3cd202e1.ebb7a800.776 res2=00000003 errno=0
-func=rred op1=76bd7bf9.31f15441 result=bcc4bb41.038ee164.1a3 res2=00000001 errno=0
-func=rred op1=76c5831d.7de39699 result=3cd66150.71657e76.6af res2=00000003 errno=0
-func=rred op1=76cf38ab.5d8b532f result=bcb39e59.6ab8927a.726 res2=00000001 errno=0
-func=rred op1=76d2e812.3c7c9834 result=bca5c2f8.beb9cb1d.167 res2=00000001 errno=0
-func=rred op1=76d97f8b.57ea756d result=3c9a60f6.dd69d125.0c9 res2=00000001 errno=0
-func=rred op1=76e00b82.39ac2953 result=3cb811f7.ce11ce21.118 res2=00000001 errno=0
-func=rred op1=76ec5c1b.5abae44e result=bcc0523a.8f0b5855.d0d res2=00000003 errno=0
-func=rred op1=76f7a216.cb9bbe41 result=bccb33b6.ee683de4.5c1 res2=00000001 errno=0
-func=rred op1=76fe398f.e7099b7a result=3caefef4.fc19d72d.02a res2=00000001 errno=0
-func=rred op1=7703d6cc.82a3f3ca result=bc990df9.02b37e1a.547 res2=00000003 errno=0
-func=rred op1=770f284a.2d30f710 result=3cdbf1d6.6d950906.b1d res2=00000001 errno=0
-func=rred op1=7719082e.34d6c7a2 result=3cb8bb76.bb6cf7a6.6d9 res2=00000001 errno=0
-func=rred op1=771dc232.c3f5edaf result=bcb2ca7a.c2069e93.bf5 res2=00000001 errno=0
-func=rred op1=77213e1b.a98a89de result=bccf2836.1fbd1a66.f61 res2=00000001 errno=0
-func=rred op1=77266f7d.5bbd5db6 result=3ca868f4.74267132.86b res2=00000003 errno=0
-func=rred op1=77352324.ef30a8c0 result=bca9b2fd.91408b02.222 res2=00000003 errno=0
-func=rred op1=7737bbd5.c84a12ac result=3cced5b3.d87693f3.0f4 res2=00000001 errno=0
-func=rred op1=7745c951.2577033b result=3ca71eeb.570c5762.eb4 res2=00000001 errno=0
-func=rred op1=774fb4b7.66c8fd20 result=bcc3463e.2cf06841.999 res2=00000001 errno=0
-func=rred op1=775a6bee.2afcd2f0 result=bcd00fde.7ac856e1.555 res2=00000003 errno=0
-func=rred op1=775b121a.61432d6b result=3ca48ad9.1cd823c3.b47 res2=00000001 errno=0
-func=rred op1=77627ec0.514a93a8 result=bcd67c9d.df1879a1.dde res2=00000001 errno=0
-func=rred op1=776db67e.ff294283 result=3c9ec569.50df790a.8d8 res2=00000001 errno=0
-func=rred op1=77712c8e.0257891c result=bce4e16e.060470f1.bbc res2=00000003 errno=0
-func=rred op1=777f08b1.4e1c4d0f result=3c8449ae.fe7bb821.ad7 res2=00000001 errno=0
-func=rred op1=778e5f98.26a2c7c9 result=3cb1ebea.883f3389.7c6 res2=00000003 errno=0
-func=rred op1=778fb1ca.7595d255 result=bc9f1c4c.24055de2.96d res2=00000001 errno=0
-func=rred op1=779eb424.ba5f8a6c result=3cb6fe56.47de2191.e7c res2=00000001 errno=0
-func=rred op1=779f5d3d.e1d90fb2 result=bc85a53a.4b134b81.d2b res2=00000003 errno=0
-func=rred op1=77a0032b.84a94a7c result=bcbc67a4.daa2f472.5c7 res2=00000001 errno=0
-func=rred op1=77afda9a.46da9e41 result=3d12582e.68f5c6f8.45c res2=00000001 errno=0
-func=rred op1=77b75ba8.1f846a74 result=3cb19507.b5194eb1.731 res2=00000003 errno=0
-func=rred op1=77b7b034.b3412d17 result=bcc0e879.b6b3e3a9.689 res2=00000003 errno=0
-func=rred op1=77c3af69.d216da78 result=bcc39d21.00164d19.a2f res2=00000001 errno=0
-func=rred op1=77cb5c73.00aebd13 result=3c9b09aa.3e3ea3c2.270 res2=00000003 errno=0
-func=rred op1=77d184be.17a34fd7 result=3cca5f8b.8fa5f60a.2ca res2=00000001 errno=0
-func=rred op1=77d58588.f8cda276 result=bc9040ca.57e7f341.7e7 res2=00000003 errno=0
-func=rred op1=77e099ae.8447ebd8 result=3cbf19dc.d438a092.869 res2=00000001 errno=0
-func=rred op1=77ea7163.6d535914 result=bcc7ad53.961049ea.028 res2=00000003 errno=0
-func=rred op1=77f7fb76.33107dc5 result=bccbbd86.2c0a46ba.622 res2=00000001 errno=0
-func=rred op1=77fdd260.3af19862 result=3cadb224.f8a15aa2.105 res2=00000001 errno=0
-func=rred op1=78073607.5f9cc21d result=3cd34333.09307b9d.855 res2=00000003 errno=0
-func=rred op1=7809abf4.99df9d6c result=bc767b7d.b9745f07.644 res2=00000001 errno=0
-func=rred op1=781798be.c9569ff1 result=bcc0f4a6.45b39639.b99 res2=00000001 errno=0
-func=rred op1=781bbf2a.6a689ae7 result=3cbc4a6d.1d0a14b1.9a1 res2=00000003 errno=0
-func=rred op1=782340f7.7367b611 result=bc90dc9e.4b174745.8b3 res2=00000003 errno=0
-func=rred op1=7825542d.43f0b38c result=3cccfe49.0ad5b7a9.d53 res2=00000001 errno=0
-func=rred op1=78356cdb.1e5f2b01 result=bcd20270.2a650aae.124 res2=00000001 errno=0
-func=rred op1=783deb0e.15600fd7 result=3cc8c721.780fe5d8.726 res2=00000003 errno=0
-func=rred op1=784456e9.48e37089 result=bcd41e03.f3c7f396.c3b res2=00000003 errno=0
-func=rred op1=784f00ff.eadbca4f result=3cc1c08a.2e1b8826.231 res2=00000001 errno=0
-func=rred op1=7853cbf0.5e25934d result=bcd8552b.868dc568.268 res2=00000003 errno=0
-func=rred op1=785f8bf8.d599a78b result=3c9d9adc.d196660c.231 res2=00000001 errno=0
-func=rred op1=7862fb7a.fe08c773 result=bc8eb83d.42a4b005.4af res2=00000001 errno=0
-func=rred op1=786f467c.603ab8ed result=3cd39a37.fb34ee86.e54 res2=00000003 errno=0
-func=rred op1=787943b9.e9d1377f result=3ca5eccd.80ed3a0a.d05 res2=00000003 errno=0
-func=rred op1=787faeb7.10491eda result=bcc1004a.59391084.b03 res2=00000003 errno=0
-func=rred op1=78861f9a.73ecff79 result=3c8a42bb.7e6b8820.ab7 res2=00000001 errno=0
-func=rred op1=788c8a97.9a64e6d4 result=bcd5a967.dd8102c6.5ef res2=00000001 errno=0
-func=rred op1=78948d8a.b8fae376 result=bca8278e.6309cdfd.201 res2=00000001 errno=0
-func=rred op1=7897b1aa.2edf1b7c result=3cb93524.f0baab0e.e5c res2=00000003 errno=0
-func=rred op1=78a08f04.4845e1c7 result=3ce121fd.2aef2c26.e8e res2=00000001 errno=0
-func=rred op1=78aed450.15785531 result=bcc21daa.ca475a7d.d81 res2=00000003 errno=0
-func=rred op1=78b0332f.e835389a result=3c70d968.db0dd11c.5b0 res2=00000001 errno=0
-func=rred op1=78ba79f5.44b2aa55 result=bcb719f7.d558f0eb.5a6 res2=00000003 errno=0
-func=rred op1=78c2605d.50980e08 result=bcc7a0c3.1c315f74.3d4 res2=00000001 errno=0
-func=rred op1=78c84cc7.dc4fd4e7 result=3c89461d.4894b9aa.888 res2=00000003 errno=0
-func=rred op1=78d73631.281e6a30 result=3ccbd71d.52f4d3bb.540 res2=00000003 errno=0
-func=rred op1=78d9635e.90813f9e result=bcc58596.00cfa550.b1e res2=00000001 errno=0
-func=rred op1=78e3b4b0.8829d165 result=3ccdf24a.6e568dde.df6 res2=00000003 errno=0
-func=rred op1=78ece4df.3075d869 result=bcc14f3b.ca0c3109.9b2 res2=00000001 errno=0
-func=rred op1=78f600bc.323cd326 result=3cd221e8.e03dde24.c0c res2=00000003 errno=0
-func=rred op1=78fa98d3.8662d6a8 result=bcb5fb68.efce053d.f20 res2=00000001 errno=0
-func=rred op1=79056601.b74c07a1 result=bc948800.5300d086.5be res2=00000001 errno=0
-func=rred op1=790d7f99.ab66a3ee result=3ca76ed1.8c9b39f5.881 res2=00000001 errno=0
-func=rred op1=7916d964.c9cdee44 result=3cc6b51d.3e349f99.bd0 res2=00000001 errno=0
-func=rred op1=791c0c36.98e4bd4b result=bcc01fb4.8ca736c0.8ff res2=00000003 errno=0
-func=rred op1=792212e7.467faccc result=3c773689.ccd34b79.615 res2=00000003 errno=0
-func=rred op1=7928b91c.28186276 result=bcc541b4.a1676ae2.26f res2=00000001 errno=0
-func=rred op1=793b1c5a.e9bf8332 result=3c9168e7.599e789b.090 res2=00000001 errno=0
-func=rred op1=793e6f75.5a8bde07 result=bcc3ce4c.049a362a.90e res2=00000003 errno=0
-func=rred op1=794697a1.181f97ff result=3c9d042c.40081e57.b9b res2=00000003 errno=0
-func=rred op1=7949eabb.88ebf2d4 result=bcd42b26.2bcd8358.766 res2=00000003 errno=0
-func=rred op1=7952abb6.f6e974fb result=3cd93f14.509bbbdb.03a res2=00000003 errno=0
-func=rred op1=795f0845.0af5a636 result=bcd14454.f23319e9.4a3 res2=00000003 errno=0
-func=rred op1=79601cf2.35e49b4a result=3cdb6c31.3bcf8aee.64d res2=00000001 errno=0
-func=rred op1=796d124f.fa5a94b4 result=bcc9d436.3796f785.0ff res2=00000003 errno=0
-func=rred op1=797117ec.be32240b result=3ce09ce9.d7822ee6.5e9 res2=00000001 errno=0
-func=rred op1=797c1755.720d0bf3 result=bcb0d69d.bbf0fdd4.0dd res2=00000003 errno=0
-func=rred op1=79804e07.a1d67b93 result=bc94ed63.561d605d.74a res2=00000003 errno=0
-func=rred op1=7984d2c1.737666c6 result=3cb1fb30.f74bf362.043 res2=00000003 errno=0
-func=rred op1=799632ae.89f1c3c3 result=bcc3744a.26b4a9df.bc6 res2=00000001 errno=0
-func=rred op1=799ab768.5b91aef6 result=3c9e11fd.30f50ccd.277 res2=00000001 errno=0
-func=rred op1=79a7c514.e7840ade result=3cc5bd70.9d6a94fb.a92 res2=00000003 errno=0
-func=rred op1=79ada9bb.cf9f530e result=bcaad1c8.13c03a54.558 res2=00000001 errno=0
-func=rred op1=79bc3092.15988102 result=3c7a01a8.e9a693c6.8f8 res2=00000003 errno=0
-func=rred op1=79bf22e5.89a6251a result=bccba1d5.5b0d6ef2.8a0 res2=00000001 errno=0
-func=rred op1=79cb73fd.389517fc result=3cbfb217.bf8f7609.907 res2=00000003 errno=0
-func=rred op1=79cced26.f29bea08 result=bcb931ad.8525d117.ec9 res2=00000001 errno=0
-func=rred op1=79dbd247.a716cc7f result=3cc17926.6e622441.313 res2=00000001 errno=0
-func=rred op1=79dc8edc.841a3585 result=bcb5f178.67f0fe9f.1aa res2=00000003 errno=0
-func=rred op1=79e4f548.58f18680 result=3cc31940.fcfc8d7d.9a2 res2=00000003 errno=0
-func=rred op1=79e55392.c7733b03 result=bcb2b143.4abc2c26.48b res2=00000001 errno=0
-func=rred op1=79f1b5ed.e91fbdc2 result=bca861b2.20a50e69.49a res2=00000001 errno=0
-func=rred op1=79ffce36.f3ebfe43 result=3c69ff6c.901855d4.5e2 res2=00000001 errno=0
-func=rred op1=7a06f33f.ff5c1f62 result=3caba19f.b2a81923.d56 res2=00000001 errno=0
-func=rred op1=7a0a90e4.ddaf9ca3 result=bcc24945.987bcace.f73 res2=00000003 errno=0
-func=rred op1=7a145496.f43dee92 result=bca521c4.8ea203ae.bde res2=00000003 errno=0
-func=rred op1=7a1991e9.0a7a5032 result=3cd07508.6b284d07.c26 res2=00000001 errno=0
-func=rred op1=7a25a3eb.79cd06fa result=3cb110bd.6b57174c.767 res2=00000001 errno=0
-func=rred op1=7a2e7ee2.6e5ce5db result=bcbfb2a6.d5f30586.1cc res2=00000001 errno=0
-func=rred op1=7a34fc41.37057ac6 result=bc90441c.8d2bb189.1d8 res2=00000003 errno=0
-func=rred op1=7a364b95.bc94932e result=3cd214ff.3429d265.085 res2=00000001 errno=0
-func=rred op1=7a455016.586940e0 result=3cbe1073.b3634236.a59 res2=00000001 errno=0
-func=rred op1=7a4f7a61.d2883829 result=bca8662a.d3c18a4d.ac5 res2=00000001 errno=0
-func=rred op1=7a54d256.a65397b9 result=bccb3b4f.43926642.28f res2=00000001 errno=0
-func=rred op1=7a5fa44c.633a1b36 result=3cab98ae.4c6f215b.100 res2=00000001 errno=0
-func=rred op1=7a6a5046.cd1fcafe result=bc83be2b.37a106dc.ac3 res2=00000001 errno=0
-func=rred op1=7a6a7a31.5dd1ae0b result=3cd27b4f.a33f8546.b4c res2=00000003 errno=0
-func=rred op1=7a77a644.0212a2e2 result=bcc17fff.40a5c1f6.e85 res2=00000001 errno=0
-func=rred op1=7a7cfa49.982cf31a result=3cb920e8.e57b007f.7a8 res2=00000003 errno=0
-func=rred op1=7a88fb45.679936f0 result=bcc3f7c4.a799e2d2.7dd res2=00000003 errno=0
-func=rred op1=7a8ba548.32a65f0c result=3cb4315e.1792bec8.4f7 res2=00000001 errno=0
-func=rred op1=7a99a5c6.1a5c80f7 result=bcc8e74f.75822489.a8e res2=00000003 errno=0
-func=rred op1=7a9afac7.7fe31505 result=3ca4a490.f78476b3.f2b res2=00000001 errno=0
-func=rred op1=7aa366f4.c076333b result=bccdd6da.436a6640.d3f res2=00000003 errno=0
-func=rred op1=7aa41175.73397d42 result=3c5cccb7.fc6dfae8.d1e res2=00000001 errno=0
-func=rred op1=7ab730de.202ca420 result=bcc38491.c7a82ae6.da9 res2=00000001 errno=0
-func=rred op1=7abe1a30.2cd63be3 result=3c759989.fd527c2e.9d7 res2=00000003 errno=0
-func=rred op1=7ac281c1.1cbfe9d3 result=3cc4de2a.677d52a9.c46 res2=00000001 errno=0
-func=rred op1=7acfa9e4.834fcf52 result=bcc29e2c.07c4bb0f.940 res2=00000001 errno=0
-func=rred op1=7ad84df8.a4cb12db result=3cc637c3.07527a6c.ae3 res2=00000003 errno=0
-func=rred op1=7ad9ddac.fb44a64a result=bcc1b7c6.47e14b38.4d7 res2=00000001 errno=0
-func=rred op1=7ae12b59.af33e8be result=3cc71e28.c735ea43.f4c res2=00000003 errno=0
-func=rred op1=7ae6f791.373f11c6 result=bcbfd5f5.9034d713.80a res2=00000001 errno=0
-func=rred op1=7af29e67.9136b300 result=3ccab7bf.c6c3a9a1.0f0 res2=00000003 errno=0
-func=rred op1=7aff8d3e.0ed90625 result=bcb16f99.91fdd99f.17a res2=00000001 errno=0
-func=rred op1=7b04cafc.643ae263 result=bca478d7.25c4b5c9.c65 res2=00000001 errno=0
-func=rred op1=7b0ed3b7.1dd7a104 result=3c90a7c1.ad528a3e.172 res2=00000001 errno=0
-func=rred op1=7b197296.48888f23 result=3cc07b54.33e14ebc.2bd res2=00000001 errno=0
-func=rred op1=7b1a2c1d.3989f444 result=bcc68dcf.5b6f0711.894 res2=00000003 errno=0
-func=rred op1=7b271ec9.5661b8c3 result=3ca8fba2.83fbcf5d.22c res2=00000003 errno=0
-func=rred op1=7b2c7fea.2bb0caa4 result=bcc263de.f01a6482.037 res2=00000001 errno=0
-func=rred op1=7b3093c2.07ff3bb2 result=3cd185d0.4eb67760.0d4 res2=00000003 errno=0
-func=rred op1=7b3da9d0.a4c435d4 result=bcb41ffc.32e23ec5.efb res2=00000001 errno=0
-func=rred op1=7b4689d6.19d8032b result=bc8bc1d4.2c7da43e.c45 res2=00000001 errno=0
-func=rred op1=7b4e3ec3.e14deb6c result=3caa5f0e.4f85ab6c.7d4 res2=00000001 errno=0
-func=rred op1=7b56d44f.b81cddf7 result=3cc73f85.4133f519.367 res2=00000001 errno=0
-func=rred op1=7b5df44a.430910a0 result=bcbb1071.3e01a7d5.a0c res2=00000003 errno=0
-func=rred op1=7b66af12.e8fa7091 result=3cc3c74a.bba44091.5df res2=00000003 errno=0
-func=rred op1=7b6e1987.122b7e06 result=bc662c5d.cf7f8d24.707 res2=00000001 errno=0
-func=rred op1=7b769c74.816939de result=3cb9adab.6109af03.59c res2=00000003 errno=0
-func=rred op1=7b7e06e8.aa9a4753 result=bccb6922.b53fa60a.328 res2=00000003 errno=0
-func=rred op1=7b82cb4c.d176e117 result=bcbc7337.1af9a0a7.e7d res2=00000001 errno=0
-func=rred op1=7b8a5afd.c9ca5bf2 result=3cb84ae5.8411b631.12b res2=00000001 errno=0
-func=rred op1=7b90ec08.2d46500d result=bcbdd5fc.f7f1997a.2ed res2=00000003 errno=0
-func=rred op1=7b9c3a42.6dfaecfc result=3cb58559.ca21c48c.84a res2=00000001 errno=0
-func=rred op1=7bad29e4.c0133581 result=3caff484.ac83c286.d11 res2=00000001 errno=0
-func=rred op1=7baf0929.6443c68b result=bcc31350.12e0b733.ec8 res2=00000003 errno=0
-func=rred op1=7bb61b54.24947a42 result=3ca4de55.c4c3fbf4.98e res2=00000001 errno=0
-func=rred op1=7bb70af6.76acc2c7 result=bcc5d8db.ccd0a8d8.7a9 res2=00000003 errno=0
-func=rred op1=7bc21c3a.adc8f860 result=3ccabcef.3b52c389.aae res2=00000003 errno=0
-func=rred op1=7bca1a6d.9b5ffc24 result=bca77a65.da3b1e54.481 res2=00000001 errno=0
-func=rred op1=7bd81ae0.dffa3b33 result=3ca24245.af4cd994.e9b res2=00000003 errno=0
-func=rred op1=7bdc19fa.56c5bd15 result=bccc0af7.460e54b9.827 res2=00000001 errno=0
-func=rred op1=7be393d2.3487fd1b result=bcc19bcc.63ac56bf.360 res2=00000003 errno=0
-func=rred op1=7beea17c.46d23a3c result=3c9a144b.08bd29ab.16b res2=00000003 errno=0
-func=rred op1=7bf5d759.8a411c27 result=bcb0f553.180bd3e9.826 res2=00000001 errno=0
-func=rred op1=7bfa5e68.35b35a3f result=3cd67f9a.754fce8f.4a4 res2=00000003 errno=0
-func=rred op1=7c06f91d.351dabad result=3cb38f38.468ddf40.510 res2=00000001 errno=0
-func=rred op1=7c0d7fb8.9bf5aab6 result=bcbb6593.6de85d68.3f1 res2=00000001 errno=0
-func=rred op1=7c1789ff.0a8bf370 result=3cd72613.c0f05164.fdf res2=00000001 errno=0
-func=rred op1=7c1e109a.7163f279 result=bc751486.52b33bd2.860 res2=00000001 errno=0
-func=rred op1=7c22dc7c.c18c4084 result=3ca771ba.3e66c230.c5f res2=00000003 errno=0
-func=rred op1=7c29f3f9.fdd28750 result=bcd149a5.3156a0d8.cc7 res2=00000001 errno=0
-func=rred op1=7c34a25c.109dd237 result=bcb0fdfe.b3e0300d.047 res2=00000001 errno=0
-func=rred op1=7c3c4abb.225260c6 result=3cc1954b.aecd11a4.947 res2=00000001 errno=0
-func=rred op1=7c47939b.f1ef50a5 result=3ccd4e28.ce0072bc.f77 res2=00000003 errno=0
-func=rred op1=7c49597b.4100e258 result=bcb64320.488cff01.a5f res2=00000001 errno=0
-func=rred op1=7c5163dc.d0e3814d result=3c72e99f.5d9c32f1.ff8 res2=00000003 errno=0
-func=rred op1=7c5c97fa.80bb3342 result=bcdc6b35.559d2059.9f7 res2=00000003 errno=0
-func=rred op1=7c67ba3b.a123b9e3 result=bcb3e5ec.5cd978a3.660 res2=00000003 errno=0
-func=rred op1=7c6c715a.d186ca04 result=3cbafd88.1ff40bbe.25d res2=00000003 errno=0
-func=rred op1=7c748f0c.39039d98 result=bcb188b8.7125f245.261 res2=00000001 errno=0
-func=rred op1=7c7f9c8a.39a6e64f result=3cbfb7ef.f75b187a.a5c res2=00000003 errno=0
-func=rred op1=7c888033.854533ce result=3cc2392b.e761129b.92d res2=00000003 errno=0
-func=rred op1=7c8bab62.ed655019 result=bca027d1.84afb198.4ca res2=00000001 errno=0
-func=rred op1=7c96879f.df2468b3 result=3c760e6e.c7640acd.975 res2=00000001 errno=0
-func=rred op1=7c99b2cf.474484fe result=bcd5eae6.8d6f6ed6.6fa res2=00000001 errno=0
-func=rred op1=7ca3f5be.5803f500 result=3cb44a86.4a12739e.d90 res2=00000001 errno=0
-func=rred op1=7ca91981.6644dc66 result=bcad8dd5.3072e1d6.e65 res2=00000003 errno=0
-func=rred op1=7cb1b083.c1635599 result=bcd53a73.17344e80.02e res2=00000003 errno=0
-func=rred op1=7cbdf09d.8405ef80 result=3cce6fc9.6f1bad6e.458 res2=00000003 errno=0
-func=rred op1=7cc18a30.49236b73 result=bca2869d.ccc0dc70.1aa res2=00000003 errno=0
-func=rred op1=7ccb850f.752565f3 result=3cbf51bd.adc47905.a4b res2=00000001 errno=0
-func=rred op1=7cd408e8.1423ea13 result=3c7c3e87.d51972eb.e58 res2=00000003 errno=0
-func=rred op1=7cdb9839.31455b06 result=bcd87b33.9dee44ef.301 res2=00000001 errno=0
-func=rred op1=7ce2c98c.2ea3aac3 result=bcb0c2b5.4f6f4541.5c5 res2=00000001 errno=0
-func=rred op1=7ce54843.f9a42963 result=3cb7d257.44b5a1fc.55b res2=00000003 errno=0
-func=rred op1=7cf3693a.2163ca6b result=bcaa75c8.a9982dc7.bf4 res2=00000003 errno=0
-func=rred op1=7cf4a896.06e409bb result=3cbb5a28.3f58d059.d26 res2=00000001 errno=0
-func=rred op1=7d03b911.1ac3da3f result=bc98ad09.7e16e8a3.990 res2=00000003 errno=0
-func=rred op1=7d0458bf.0d83f9e7 result=3cc134e5.1a4f968a.65e res2=00000001 errno=0
-func=rred op1=7d139125.9e13d255 result=bcc05085.848ef3f8.52c res2=00000001 errno=0
-func=rred op1=7d13e0fc.9773e229 result=3c9fd006.2c1bfd34.321 res2=00000003 errno=0
-func=rred op1=7d23cd06.d91bde34 result=bc918a0c.d011d412.ffe res2=00000001 errno=0
-func=rred op1=7d23f4f2.55cbe61e result=3cc21944.b010391c.790 res2=00000003 errno=0
-func=rred op1=7d3db38a.45a9cd4e result=bcaa4f13.381abe1c.7fd res2=00000003 errno=0
-func=rred op1=7d3dc780.0401d143 result=3cbb6d82.f817882f.721 res2=00000001 errno=0
-func=rred op1=7d48c048.8f62d5c1 result=bcb5ec90.04164917.bfe res2=00000001 errno=0
-func=rred op1=7d48d43e.4dbad9b6 result=3ccd9ec4.9219c2b1.d21 res2=00000001 errno=0
-func=rred op1=7d51496b.1ecc6073 result=bcdbf6eb.e51a4067.28f res2=00000003 errno=0
-func=rred op1=7d5b43e4.49b25382 result=3cc0773a.f60c63a3.922 res2=00000003 errno=0
-func=rred op1=7d629533.db20214e result=3caec8d2.380de668.48d res2=00000003 errno=0
-func=rred op1=7d678875.916718db result=bc812d1d.a05706f6.dbd res2=00000003 errno=0
-func=rred op1=7d73311d.5a1dffc1 result=bccb61e5.12202e8b.ed9 res2=00000003 errno=0
-func=rred op1=7d7bdfcd.c8b031f5 result=3cc7169d.aa0a6cce.36a res2=00000001 errno=0
-func=rred op1=7d806987.bf7b94c1 result=3ca63243.67e262ec.dae res2=00000001 errno=0
-func=rred op1=7d8ea763.63529cf5 result=bcbc463f.5448386d.495 res2=00000003 errno=0
-func=rred op1=7d93f8fe.a87156ce result=3c841497.1e2d6fd7.fc3 res2=00000001 errno=0
-func=rred op1=7d9b17ec.7a5cdae8 result=bcc26e67.1239ddf4.5ba res2=00000003 errno=0
-func=rred op1=7da11b6d.26242f81 result=bcd30f0b.cb2b4973.1b8 res2=00000001 errno=0
-func=rred op1=7dadf57d.fcaa0235 result=3c9e1ee2.ad4427c3.fa5 res2=00000003 errno=0
-func=rred op1=7db72f82.de12cb7b result=3cc9f61f.bd8ae7e5.5a3 res2=00000003 errno=0
-func=rred op1=7dbabef9.c7088d88 result=bcbad282.955d03fc.b92 res2=00000003 errno=0
-func=rred op1=7dc09601.1925bb71 result=3ccc78b2.a15095e0.59b res2=00000001 errno=0
-func=rred op1=7dc75bfc.37bcf22b result=bcb0c837.06464c10.bb0 res2=00000003 errno=0
-func=rred op1=7dd0ac3d.c5facec9 result=bc9af7ad.dcbe5092.f3b res2=00000003 errno=0
-func=rred op1=7ddaa8bd.1a337a30 result=3caaad57.4dfbb766.7e9 res2=00000003 errno=0
-func=rred op1=7de750dd.e152687f result=3ccabfec.f1ac5db1.9bd res2=00000003 errno=0
-func=rred op1=7dee009c.53148be1 result=bc4295a3.b0a64b1d.494 res2=00000001 errno=0
-func=rred op1=7df3fe8d.d3a69ba4 result=3cc40201.7a7cc98c.dee res2=00000001 errno=0
-func=rred op1=7df7566d.0c87ad55 result=bcab4204.6b80e9bf.68d res2=00000003 errno=0
-func=rred op1=7e00a976.30602c5e result=3cd0ac56.90bd52a0.0f1 res2=00000003 errno=0
-func=rred op1=7e0aab84.afce1c9b result=bcabd6b1.89061c18.532 res2=00000001 errno=0
-func=rred op1=7e1c5610.8171543e result=bcad000b.c41080ca.27b res2=00000001 errno=0
-func=rred op1=7e1fab28.24b7c384 result=3ca85aa2.d7e6ee02.d56 res2=00000003 errno=0
-func=rred op1=7e21801f.e3ff1965 result=3cc36d54.5cf79733.f4a res2=00000001 errno=0
-func=rred op1=7e2ed746.06b378e8 result=bcecc7ae.98ff589f.963 res2=00000001 errno=0
-func=rred op1=7e3615d2.49e69b00 result=bcb0d2ba.581d09c8.bd0 res2=00000001 errno=0
-func=rred op1=7e37c05e.1b89d2a3 result=3cc243fa.21ed3282.200 res2=00000001 errno=0
-func=rred op1=7e42f5b3.2e213e61 result=3c9e1fa1.ff2790e8.618 res2=00000003 errno=0
-func=rred op1=7e4935f1.65abf79f result=bcd2b4b4.780f82d7.432 res2=00000001 errno=0
-func=rred op1=7e555b08.a4d58882 result=3cd425f4.41dfab90.a62 res2=00000001 errno=0
-func=rred op1=7e587b27.c09ae521 result=bc7c2e95.88941548.c44 res2=00000003 errno=0
-func=rred op1=7e65b86d.775e11c1 result=3caa99cf.4e150e3f.48f res2=00000001 errno=0
-func=rred op1=7e6b3de2.09d7b881 result=bcb4588d.092f8c71.d59 res2=00000003 errno=0
-func=rred op1=7e7719ca.9bfc7b71 result=3ca38e29.ebf008ed.17e res2=00000003 errno=0
-func=rred op1=7e79dc84.e5394ed1 result=bcb7de5f.ba420f1a.ee1 res2=00000001 errno=0
-func=rred op1=7e87ca79.2e4bb049 result=3c85db7c.9e97f922.d73 res2=00000003 errno=0
-func=rred op1=7e892bd6.52ea19f9 result=bcbeea05.1c67146d.1f2 res2=00000001 errno=0
-func=rred op1=7e977221.e52415dd result=3cb64999.7fc30811.72d res2=00000001 errno=0
-func=rred op1=7e9822d0.77734ab5 result=bca6b7b6.60ee1700.0e7 res2=00000003 errno=0
-func=rred op1=7ea79e4d.89b7e313 result=3cbbc078.a769065a.289 res2=00000003 errno=0
-func=rred op1=7ea7f6a4.d2df7d7f result=bc9793f0.234434dd.45b res2=00000001 errno=0
-func=rred op1=7eb7e08f.009596e4 result=3c942309.19ebbd68.68a res2=00000001 errno=0
-func=rred op1=7eb80cba.a529641a result=bcbc9cb2.69bf2437.5fe res2=00000003 errno=0
-func=rred op1=7ec0145e.ee260882 result=bd1927f4.7b11a2ef.b32 res2=00000001 errno=0
-func=rred op1=7ecfef00.89e2d917 result=3d17e4bf.273698fa.830 res2=00000001 errno=0
-func=rred op1=7ed1e86b.4070312b result=3cae348d.a6e19c1c.9d0 res2=00000003 errno=0
-func=rred op1=7eddeec8.9304e338 result=bcc50f8f.0006bd30.38a res2=00000001 errno=0
-func=rred op1=7ee4d972.375df0ba result=3cd9a20e.53742ca6.6ad res2=00000003 errno=0
-func=rred op1=7eeae7ab.c9cd3d0e result=bcb5fc14.e621bcf8.089 res2=00000001 errno=0
-func=rred op1=7ef36bf9.a50c0440 result=bc7d90bc.c35ff8f9.fe4 res2=00000001 errno=0
-func=rred op1=7ef9641d.653169f9 result=3cb249fd.4db5bdd8.c8c res2=00000001 errno=0
-func=rred op1=7f05a644.52d0cd92 result=3cd3acc6.26de3d84.80b res2=00000001 errno=0
-func=rred op1=7f0d21f6.77920660 result=bc962c8d.9287fabb.7eb res2=00000003 errno=0
-func=rred op1=7f1846f8.0e4f0550 result=bca27a75.fa1bfb9c.3ee res2=00000001 errno=0
-func=rred op1=7f1e3f1b.ce746b09 result=3cd1d3ba.5aa83df4.e0d res2=00000001 errno=0
-func=rred op1=7f20fe7a.706a83b8 result=bca9dea5.2af3f9da.be7 res2=00000003 errno=0
-func=rred op1=7f2bd19c.99d2ea81 result=3ce20edb.d42efde6.d4c res2=00000001 errno=0
-func=rred op1=7f32353a.0abb43fc result=bcbbb7b0.f729f96a.5e5 res2=00000003 errno=0
-func=rred op1=7f3f75db.68c52b4d result=3cf1b629.9de4ddfb.e6d res2=00000001 errno=0
-func=rred op1=7f40631a.a3422396 result=bcc8f21f.44d8fa12.ee8 res2=00000003 errno=0
-func=rred op1=7f4eda7b.9b9ccb2b result=3d01c4f1.fc468df8.63d res2=00000001 errno=0
-func=rred op1=7f50156a.bcadf385 result=bcd87bdc.51cb7a2f.068 res2=00000001 errno=0
-func=rred op1=7f5fc38b.4f595b5e result=3d11aec5.6eb405fd.a85 res2=00000001 errno=0
-func=rred op1=7f60490f.d1af395b result=bd17cdbc.8326e489.69f res2=00000003 errno=0
-func=rred op1=7f6ff730.645aa134 result=3d0d3e93.c8f52d6f.8f0 res2=00000003 errno=0
-func=rred op1=7f702f3d.472e9670 result=bd1add38.0d6053cf.4ac res2=00000001 errno=0
-func=rred op1=7f7fc353.0847140e result=3d013bc7.19963049.ffb res2=00000003 errno=0
-func=rred op1=7f8b1c15.d78e7c7c result=3c920cfc.515a2cbc.5ee res2=00000003 errno=0
-func=rred op1=7f8b69c5.be22ac8d result=bca48a3e.9ab2e29b.cec res2=00000003 errno=0
-func=rred op1=7f90493a.06fceed7 result=bcf05936.3ca09359.ad8 res2=00000003 errno=0
-func=rred op1=7f9fdd33.a48c48cd result=3d0b3778.faf716ae.f8a res2=00000001 errno=0
-func=rred op1=7fa45510.61aadd5d result=3cab137a.7a07431a.8e6 res2=00000001 errno=0
-func=rred op1=7fa4a2c0.483f0d6e result=bcc6cbde.24de2833.5aa res2=00000001 errno=0
-func=rred op1=7fb0cab5.b36ef5c5 result=3cd46c6d.3b1c2a77.dcc res2=00000003 errno=0
-func=rred op1=7fbea670.85ca6414 result=bcb28441.cfb50d4c.26e res2=00000003 errno=0
-func=rred op1=7fc61a3d.b8c8d129 result=bc5dd15f.96b823f1.fc1 res2=00000003 errno=0
-func=rred op1=7fcce143.2eac7048 result=3cb195b6.d2ff4c2c.96f res2=00000003 errno=0
-func=rred op1=7fd537a7.0d39d743 result=3ccad7d7.bad9d2d2.aa6 res2=00000003 errno=0
-func=rred op1=7fddc3d9.da3b6a2e result=bcb372cc.cc6ace6b.b6c res2=00000001 errno=0
-func=rred op1=7fe68b89.0e904e1c result=bccc3da8.35ea7482.024 res2=00000003 errno=0
-func=rred op1=7fed528e.8473ed3b result=3caf7141.b32793da.ee7 res2=00000003 errno=0